부트 드라이브의 첫 번째 섹터에서 메모리의 0000 : 7C00으로로드 된 첫 512 바이트는 286s와 같은 구형 컴퓨터에서 16 비트 실제 모드로 실행되었지만 최신 64 비트 아키텍처는 어떻습니까?
편집 : 나는 이것이 생각할 때 잘못된 질문이라고 생각합니다. 부트 로더의 작성자는 어떤 모드 어셈블리 명령을 사용할 것인지 결정하는 사람입니까? 하드웨어는 그 내용을 그대로 수행합니다. 그렇다면 제 질문은 Windows 7, Mac OS X (최신) 및 64 비트 컴퓨터의 GRUB과 같은 주요 OS 부트 로더가 어떤 모드를 사용하는 것입니까?
답변
모든 현재 x86 호환 컴퓨터 (Intel 및 AMD의 x64 아키텍처도 포함하지만 Itanium은 포함하지 않음) 는 20 년 전의 원래 IBM PC와 똑같이 x86 실제 모드 에서 부트 섹터 코드를 실행 합니다. 커널 모드가 아니며 메모리 보호, 멀티 태스킹 또는 코드 권한 수준이없는 원래의 세그먼트 모드입니다.
플로피 드라이브를 잡을 수 있으면 MS-DOS (또는 FreeDOS )를 넣고 오늘의 컴퓨터에 꽂아 부팅을 시작하십시오.
부팅 코드의 작업은 보호 모드로 전환하고 메모리 보호 등을 설정하는 것입니다. 따라서 추측은 부분적으로 옳습니다. 부트 로더는 x86 리얼 모드로 실행을 시작하고 보호 모드로 전환하고 실제로 “커널”(링 0) 모드에서 OS 커널을로드하고 실행하기 시작합니다.
자세한 내용을 보려면 Windows NT 시작 프로세스 에 대한 Wikipedia 기사를 방문하십시오 .이 주제에 대한 자세한 내용이 있습니다.
답변
현대 64 비트 아키텍처는 어떻습니까?
이는 최신 64 비트 아키텍처의 최신 64 비트 시스템에있는 펌웨어에 따라 다릅니다. haimg
의 답변은 5 ~ 6 년 전 x86 세계의 경우 였지만 오늘날 x86 세계의 경우는 구식입니다.
구형 PC / AT 펌웨어
최신 64 비트 시스템 중 일부에는 구형 PC / AT 스타일 펌웨어가 있습니다. 다른 답변에서 언급했듯이 PC / AT와 거의 같은 방식으로 디스크의 섹터 # 0에서 부트 스트랩 프로그램을로드하고 실행합니다. 이것은 오래된 PC / AT 부트 스트랩 프로세스입니다.
새로운 EFI 펌웨어
다른 최신 64 비트 시스템에는 새로운 EFI 펌웨어가 있습니다. 이러한 디스크의 섹터 # 0에서 부트 스트랩 프로그램을로드하지 않습니다 전혀 . EFI 부팅 로더 응용 프로그램을 로드하고 실행하는 EFI Boot Manager에 의해 부트 스트랩됩니다 . 이러한 프로그램은 보호 모드에서 실행됩니다. 이것이 EFI 부트 스트랩 프로세스입니다.
일반적으로 EFI 펌웨어는 프로세서 재설정 종료 지시에 따라 보호 모드로 전환됩니다. 보호 모드로의 전환은 이른바 EFI 펌웨어 초기화의 “SEC Phase”에서 수행됩니다. 기술적으로 32 비트 이상의 x86 프로세서는 실제 모드로 시작하지 않고 구어체 적으로 언리얼 모드 라고 합니다 . ( CS
레지스터 의 초기 세그먼트 디스크립터 는 기존의 리얼 모드 매핑을 설명하지 않으며이를 “비 실제”로 만듭니다.)
따라서, 그 EFI 시스템은 결코 리얼 모드 들어 가지라고 할 수있는 적절한 전혀를, (그들이 사용하지 않는 경우 즉, 다른 EFI 부트 로더에 기본적으로 부트 스트랩 때 호환성 지원 모듈을 가 보호 모드로 직접 비현실적인 모드로 전환 이후) 그때부터 보호 모드를 유지하십시오.
답변
내가 아는 한 부팅 코드는 항상 커널 모드에서 실행됩니다.
우선, 부트 섹터에서 실행될 때 어떤 모드를 사용할 것인지 결정하는 것은 불가능합니다. 단순히 펌웨어에 의해 실행되는 첫 번째 명령이기 때문입니다. 코드가 실행을 시작하기 전에 사용 가능한 명령어를 설정할 수있는 방법은 없습니다. 따라서 설계 상 부트 섹터에서 코드에 사용 가능한 어셈블리 세트는 아키텍처에 의해 미리 결정됩니다.
저 권한 모드를 선택해야한다면, 높은 권한 모드의 명령을 사용하는 것은 불가능했을 것입니다. 이는 부팅 코드가 가장 높은 권한 모드로 실행된다는 사실을 거의 강제합니다.
답변
Intel manual Volume 3 시스템 프로그래밍 안내서 325384-053US 2015 년 1 월 :
2.2 작동 모드
프로세서는 전원을 켜거나 재설정 한 후에 실제 주소 모드로 설정됩니다.
킥을 위해 매뉴얼의 멋진 다이어그램 :
GRUB은 멀티 부트 OS를 보호 모드로 시작합니다. 멀티 부트 사양 0.6.96 머신 상태 :
‘CR0’비트 0 (PE)을 설정해야합니다.
GRUB 및 x86_64에 대해 확실하지 않습니다.