시작할 때 BIOS가 BIOS 칩에서 읽히거나 RAM으로 복사됩니까?


10

컴퓨터를 처음 켜면 가져 오기 / 실행주기가 먼저 BIOS 칩에서 CPU의 명령어 레지스터로 직접 명령어를 가져 오도록 설정되어 있습니까? 또는 전원이 켜질 때 BIOS 칩이 자동으로 RAM에로드됩니까?

최신 정보

나는 내 대답을 여기 에서 찾았다 고 생각한다 .

리셋 신호가 꺼지면 CPU가 작동하기 시작합니다. RAM이 비어 있으므로 RAM의 코드를 실행할 수 없습니다. CPU 제조업체는 항상 ROM의 주소 "FFFF : 0000"(일반적으로 ROM BIOS)에서 코드 실행을 시작하도록 프로세서를 사전 프로그래밍합니다.

따라서 CPU는 물리적으로 켜져있는 즉시 ROM에서 메모리 주소 FFFF : 0000을 가져 와서 실행하도록 설정됩니다.


1
당신이 대답을 자신을 발견하면 않는 대신에 의문을 편집하는 아래의 답변으로 게시 할 수 있습니다. ( 시간이 지나면 자신의 답변수락 할 수 있습니다 .)
user1686

PC 업그레이드 및 수리 책은 CPU가 처음 읽은 메모리 위치를 언급합니다. 그리고 부트 스트랩에 의해 자신을 끌어 올릴 때와 같이 여전히 부트 스트랩이라고하는 오래된 CS 교사들이 가르치는 과정이 있습니다. OS의 기초가로드됩니다.
barlop

답변:


3

대부분의 보드는 BIOS에서이 동작을 구성하는 옵션이있었습니다. 일반적으로 섀도 ​​잉이라고하며 일반적으로 기본적으로 활성화되어 있습니다. 요즘 많은 보드가 당신에게 옵션을 제공하는 것을 귀찮게 생각하지 않으며 항상 그림자입니다. RAM이 ROM보다 빠르기 때문에 RAM에 RAM을 복사하여 실행하는 속도가 빨라지기 때문입니다.

복사는 일부 마술 회로에 의해 수행되는 것이 아니라 ROM에서 처음 실행을 시작할 때 BIOS 자체에 의해 수행되며 RAM에 자체 복사 한 다음 계속 실행됩니다.


그래서 내가 말한 것을 이해 한 것부터, CPU는 ROM에서 명령을 읽습니다.이 명령은 "ROM의 모든 시작 명령을 여기에 RAM으로 복사 한 다음 프로그램 카운터를 시작 주소로 설정합니다. RAM에서. " 그게 맞습니까?
mring

@psusi 당신이 말하는 것을 설명하는 링크가 있습니까? CPU 섀도 잉은 나에게 도움이되지 않으며 구성 방법. 그리고 언제 이야기합니까? 마더 보드에는 언제이 옵션이 있었습니까? 이 옵션을 가진 마더 보드 모델을 가리킬 수 있습니까?
barlop

18

불행히도 psusi의 답변으로 예시되고 실제로 질문의 일부로 , 주제에 대해받은 민중의 지혜 는 현재의 방법을 설명하는 풍부한 기술 참조에도 불구하고 1991 년경과 같이 세상에 갇혀있는 또 다른 경우 입니다. 그렇지 않으면.

1980 년대 후반, IBM PC 호환 세계에서 "BIOS"라고 불리는 두 가지 중 하나 인 시스템 펌웨어는 실제로 ISA 버스의 ROM 칩에있었습니다. CPU는 실제 주소에서 코드를 실행하기 시작 000FFFF0했습니다. 실제 모드 포인터를 통해 액세스하는 "기존 메모리"의 위치입니다 F000:FFF0.

(당신이 지적한 WWW 페이지의 저자 S. Ebrahim Shubbar가 2002 년에 글을 썼음에도 불구하고 잘못 살고있는 세상은 더 오래되었습니다. CPU는 8086 이후로이 CS:IP조합으로 시작하지 않았습니다. 그러나 80286 세계 자체 는 민요가 여전히 순환하고있는 1980 년대 후반의 오래된 세계입니다.)FFFF:0000F000:FFF0

"BIOS 칩" RAM입니다. CPU가 16 비트가 아닙니다.

최신 PC에서는 머신 펌웨어가 비 휘발성 RAM에 보관 됩니다. NVRAM 칩은 LPC 버스 (또는 전용 "펌웨어 허브"인터페이스)에 연결되며 "칩셋"의 LPC / FWH 브리지는 일반적으로 쓰기주기를 비활성화합니다. 펌웨어의 "플래싱"은 NVRAM에 기록한 다음 NVRAM에 기록 할 수있는 칩셋 레지스터 설정과 관련이 있습니다. (예를 들어, Intel ICH10에서 쓰기주기를 허용하는 칩셋 레지스터 비트의 이름 BIOSWE은 "BIOS Write Enable"입니다. 여기서 건너 뛸 몇 가지 추가 세부 사항이 있지만 그 핵심입니다.)

x86 프로세서는 000FFFF080286 년부터 시작된 위치에서 실행을 시작하지 않았습니다. 32 비트 CPU는 구어체로 언리얼 모드 라고 합니다 . CS재설정 후 레지스터 의 초기 값이이지만 F000해당 레지스터와 연관된 세그먼트 디스크립터 는 초기 FFFF0000에 기본 주소로 유지 됩니다. 따라서 초기 16:16 CS : IP 주소에 해당하는 실제 주소 F000:FFF0는 실제로 80386 이후로 유지되었습니다 FFFFFFF0.

여기에서 시스템 펌웨어가 주로 32 비트 및 64 비트 x86 시스템의 물리적 주소 공간에 매핑됩니다. "기존 메모리"영역에서 펌웨어 아래로 128KiB 창이 있지만, 머신 펌웨어를 유지하는 NVRAM은 최신 PC에서 최대 16MiB (칩셋에 따라 다름) 일 수 있으며 주로 16MiB 물리적 주소 공간에 즉시 매핑됩니다. 4GiB 라인 아래 – 즉 물리적 주소 FF000000FFFFFFFF. (ICH10을 다시 예로 사용하려면 :이 주소 공간이 NVRAM에 매핑되는 양은 FWH_DEC_EN"펌웨어 허브 디코드 활성화" 라고하는 칩셋 레지스터에 의해 제어됩니다 . 펌웨어는 펌웨어를 다시 프로그래밍하도록 코딩됩니다.FWH_DEC_EN메인 보드에 설치된 실제 NVRAM 칩의 크기에 따라 등록하십시오. 그러나 NVRAM의 상위 512KiB는 항상 물리적 주소 FFF80000에 매핑 FFFFFFF되며 비활성화 할 수 없습니다.) 재설정 직후 프로세서가 처음 실행 한 코드는이 16MiB 주소 범위의 상위 64KiB에 있습니다.

BIOS ROM 섀도 잉 (이것은 barlopCPU가 섀도 잉되고 있다고 생각하는 이유 입니다) : 예, LPC 버스 또는 펌웨어 허브의 NVRAM에 대한 액세스는 여전히 주 시스템에 대한 액세스만큼 빠르지 않습니다 (휘발성) RAM. 그러나 섀도 잉이 중요한 이유는 1980 년대 후반과 1990 년대 초에 OS / 2 및 Windows NT와 같은 운영 체제의 출현으로 인해 크게 줄어 들었습니다. MS-DOS, PC-DOS, DR-DOS 등과 같은 리얼 모드 운영 체제는 머신 펌웨어가 제공하는 I / O 기능 위에 계층화되었습니다. 따라서 펌웨어 코드와 읽기 전용 데이터가 런타임에 많이 액세스되었습니다. OS / 2 및 Windows NT와 같은 보호 모드 운영 체제는 훨씬 덜 의존합니다런타임에 펌웨어 제공 서비스 따라서 NVRAM에서 실행되는 코드와 그에 대한 읽기 전용 데이터는 시스템 RAM에 섀도 잉 할 때보 다 프로세서에 느리게 전달된다는 사실이 예전보다 문제가되지 않습니다.

또한, 그들이 펌웨어 무엇 코드와 데이터 NVRAM의 부분에 반드시 라이브 할에 의존 물리적 주소 공간의 부분에 매핑, 반드시 처음부터도 shadowable 인 상기 128KiB "기본 메모리"창. 보호 모드 펌웨어 서비스는 실제 모드 펌웨어 서비스와 같이 실제 주소 공간에서 1MiB 라인 아래에 있어야 할 필요는 없으며 일부는 그렇지 않습니다. (물론 그것은 단지 그들이 물리적 주소 공간의 영역과 같은 트릭을 할 수있을 것이라고 라이브 적어도 4GiB 시스템의 RAM이 있다면.)

아이러니하게도 2002 년 S. Ebrahim Shubbar가 작성하는 것보다이 정보에 대한보다 정확한 정보 소스는 Phil Croucher의 저서 2001 년 1 년 전의 BIOS Companion 입니다. M. Croucher는 Unices, Linux, Windows NT 및 "아마도 (95 / 98) ""그림자로부터 혜택을 얻지 못함 ". 그것은 반드시 완전히 없어 이익을, 그러나에 리얼 모드에서 MS-DOS, PC-DOS 및 DR-DOS를 실행하는 사람들의 세계에 대한 약간의 비교적 인 1989 년에 80286 시스템을 16 비트.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.