불행히도 psusi
의 답변으로 예시되고 실제로 질문의 일부로 , 주제에 대해받은 민중의 지혜 는 현재의 방법을 설명하는 풍부한 기술 참조에도 불구하고 1991 년경과 같이 세상에 갇혀있는 또 다른 경우 입니다. 그렇지 않으면.
1980 년대 후반, IBM PC 호환 세계에서 "BIOS"라고 불리는 두 가지 중 하나 인 시스템 펌웨어는 실제로 ISA 버스의 ROM 칩에있었습니다. CPU는 실제 주소에서 코드를 실행하기 시작 000FFFF0
했습니다. 실제 모드 포인터를 통해 액세스하는 "기존 메모리"의 위치입니다 F000:FFF0
.
(당신이 지적한 WWW 페이지의 저자 S. Ebrahim Shubbar가 2002 년에 글을 썼음에도 불구하고 잘못 살고있는 세상은 더 오래되었습니다. CPU는 8086 이후로이 CS:IP
조합으로 시작하지 않았습니다. 그러나 80286 세계 자체 는 민요가 여전히 순환하고있는 1980 년대 후반의 오래된 세계입니다.)FFFF:0000
F000:FFF0
"BIOS 칩" 은 RAM입니다. CPU가 16 비트가 아닙니다.
최신 PC에서는 머신 펌웨어가 비 휘발성 RAM에 보관 됩니다. NVRAM 칩은 LPC 버스 (또는 전용 "펌웨어 허브"인터페이스)에 연결되며 "칩셋"의 LPC / FWH 브리지는 일반적으로 쓰기주기를 비활성화합니다. 펌웨어의 "플래싱"은 NVRAM에 기록한 다음 NVRAM에 기록 할 수있는 칩셋 레지스터 설정과 관련이 있습니다. (예를 들어, Intel ICH10에서 쓰기주기를 허용하는 칩셋 레지스터 비트의 이름 BIOSWE
은 "BIOS Write Enable"입니다. 여기서 건너 뛸 몇 가지 추가 세부 사항이 있지만 그 핵심입니다.)
x86 프로세서는 000FFFF0
80286 년부터 시작된 위치에서 실행을 시작하지 않았습니다. 32 비트 CPU는 구어체로 언리얼 모드 라고 합니다 . CS
재설정 후 레지스터 의 초기 값이이지만 F000
해당 레지스터와 연관된 세그먼트 디스크립터 는 초기 FFFF0000
에 기본 주소로 유지 됩니다. 따라서 초기 16:16 CS : IP 주소에 해당하는 실제 주소 F000:FFF0
는 실제로 80386 이후로 유지되었습니다 FFFFFFF0
.
여기에서 시스템 펌웨어가 주로 32 비트 및 64 비트 x86 시스템의 물리적 주소 공간에 매핑됩니다. "기존 메모리"영역에서 펌웨어 아래로 128KiB 창이 있지만, 머신 펌웨어를 유지하는 NVRAM은 최신 PC에서 최대 16MiB (칩셋에 따라 다름) 일 수 있으며 주로 16MiB 물리적 주소 공간에 즉시 매핑됩니다. 4GiB 라인 아래 – 즉 물리적 주소 FF000000
는 FFFFFFFF
. (ICH10을 다시 예로 사용하려면 :이 주소 공간이 NVRAM에 매핑되는 양은 FWH_DEC_EN
"펌웨어 허브 디코드 활성화" 라고하는 칩셋 레지스터에 의해 제어됩니다 . 펌웨어는 펌웨어를 다시 프로그래밍하도록 코딩됩니다.FWH_DEC_EN
메인 보드에 설치된 실제 NVRAM 칩의 크기에 따라 등록하십시오. 그러나 NVRAM의 상위 512KiB는 항상 물리적 주소 FFF80000
에 매핑 FFFFFFF
되며 비활성화 할 수 없습니다.) 재설정 직후 프로세서가 처음 실행 한 코드는이 16MiB 주소 범위의 상위 64KiB에 있습니다.
BIOS ROM 섀도 잉 (이것은 barlop
CPU가 섀도 잉되고 있다고 생각하는 이유 입니다) : 예, 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 비트.