
x86 PC가 부팅되면 마더보드의 비휘발성 메모리에 저장되어 있는 BIOS라는 프로그램이 실행되기 시작합니다. BIOS의 임무는 하드웨어를 준비한 다음 제어권을 운영 체제로 전달하는 것입니다.원천부록 B. 랩 세션에서여기섹션에서PC의 물리적 주소 공간다음 매핑이 표시됩니다.
+-------------------+ <- 0x00100000 (1MB)
| BIOS ROM |
+-------------------+ <- 0x000F0000(960KB)
BIOS가 이를 사용해야 하는 이유는 무엇입니까? 그렇지 않다면 용도는 무엇입니까? 서두에서 언급한 것처럼 마더보드의 비휘발성 메모리에 저장되어 있는 BIOS 프로그램과 어떤 관련이 있나요? 실습 리소스에서는 디자인이 qemu(x86 에뮬레이터)용이라고 언급되어 있지만 osdev [http://wiki.osdev.org/Memory_Map_%28x86%29#ROM_Area]메모리 레이아웃에 대해서도 동일하게 말합니다. 나는 조금 혼란 스럽습니다.
답변1
DOS 및 기타리얼 모드운영 체제는 BIOS 서비스를 많이 사용했습니다. x86 프로세서의 리얼 모드는 2^20 = 1Mb 주소 공간에 바인딩되어 있으므로 i8086 시스템 공급업체는 BIOS를 주소 공간의 최상위에 매핑해야 한다고 결정했습니다(요즘 상위 커널이 가상 메모리를 범위의 끝): 0xA0000 이상.
보호 모드는 이 예약된 메모리를 주소 공간의 공백으로 만들었습니다. 보호 모드 프로그램은 심각한 해킹 없이는 BIOS에서 기능을 호출할 수 없으므로 보호 및 장기 모드(모든 최신 OS가 실행되는)에서는 사용할 수 없게 됩니다. 그러나 소프트웨어를 RM에서 PM은 빠르지 않았기 때문에 Intel 엔지니어는 보호 모드 환경 내부의 샌드박스에서 기존 리얼 모드 프로그램을 실행할 수 있는 탈출구인 v8086 모드를 남겼습니다(예: OS/2는 v8086 모드를 집중적으로 사용하고 Windows 시스템에서는 DOS 에뮬레이션을 사용함). 도 이 기능에 의존함), 호환성을 위해 여전히 BIOS 서비스가 필요합니다.
이 메모리는 VGA 터미널/그래픽 출력(터미널 메모리는 0xB8000에 있고 콘솔 글꼴도 여기에서 조정될 수 있으며 VGA 그래픽 프레임 버퍼는 0xA8000, iirc에 있음)과 같은 일부 작업에 대해 보호 모드에서 여전히 사용됩니다. 때때로 이 메모리는 다음과 같은 API에도 사용됩니다.VBE 3, 하지만 그렇습니다. 0xA0000의 BIOS 매핑은 대부분 이전 버전과의 호환성 문제입니다. 이를 대체하려는 노력이 있습니다. BIOS를 현대적으로 재검토한 UEFI는 이제 꾸준히 인기를 얻고 있습니다.
결론:0xA0000의 BIOS 매핑은 대부분 이전 버전과의 호환성 문제입니다.UEFI와 같은 보다 현대적인 부팅 환경으로 교체하려는 노력이 있습니다.
답변2
AFAIK, 이것은 대부분 역사적인 이유가 있습니다. 프로그램은 칩에 저장되지만 이를 실행하려면 코드가 RAM(BIOS 섀도우)에 로드되어 CPU가 직접 명령을 가져올 수 있습니다. 이는 최소한의 용량을 갖춘 저렴한 칩의 압축된 BIOS 이미지에 특히 필요합니다.
'BIOS 섀도우' 옵션을 비활성화하면 부팅 프로세스가 느려지거나 더 심각한 문제가 발생하는 경우는 거의 없습니다. 또한 MS DOS와 같은 운영 체제에서는 일종의 HAL인 IO용 BIOS 루틴을 추가로 사용했습니다. 이는 오늘날의 다중 스레드 OS에서 사용하기에는 매우 느리고 안전하지 않으므로 제어권을 OS에 넘겨준 후에도 해당 RAM 부분은 비활성 상태로 유지됩니다.
다른 시스템에도 해당 칩에 커널이 있었습니다. 예를 들어 Commodore Amiga Kickstart는 대안으로 Floppy로 사용할 수 있었습니다.