최신 64 비트 Intel 칩 PC는 어떤 모드에서 부팅 섹터를 실행합니까?


12

부트 드라이브의 첫 번째 섹터에서 메모리의 0000 : 7C00으로로드 된 첫 512 바이트는 286s와 같은 구형 컴퓨터에서 16 비트 실제 모드로 실행되었지만 최신 64 비트 아키텍처는 어떻습니까?

편집 : 나는 이것이 생각할 때 잘못된 질문이라고 생각합니다. 부트 로더의 작성자는 어떤 모드 어셈블리 명령을 사용할 것인지 결정하는 사람입니까? 하드웨어는 그 내용을 그대로 수행합니다. 그렇다면 제 질문은 Windows 7, Mac OS X (최신) 및 64 비트 컴퓨터의 GRUB과 같은 주요 OS 부트 로더가 어떤 모드를 사용하는 것입니까?

답변:


12

모든 현재 x86 호환 컴퓨터 (Intel 및 AMD의 x64 아키텍처도 포함하지만 Itanium은 포함하지 않음) 는 20 년 전의 원래 IBM PC와 똑같이 x86 실제 모드 에서 부트 섹터 코드를 실행 합니다. 커널 모드가 아니며 메모리 보호, 멀티 태스킹 또는 코드 권한 수준이없는 원래의 세그먼트 모드입니다.

플로피 드라이브를 잡을 수 있으면 MS-DOS (또는 FreeDOS )를 넣고 오늘의 컴퓨터에 꽂아 부팅을 시작하십시오.

부팅 코드의 작업은 보호 모드로 전환하고 메모리 보호 등을 설정하는 것입니다. 따라서 추측은 부분적으로 옳습니다. 부트 로더는 x86 리얼 모드로 실행을 시작하고 보호 모드로 전환하고 실제로 "커널"(링 0) 모드에서 OS 커널을로드하고 실행하기 시작합니다.

자세한 내용을 보려면 Windows NT 시작 프로세스 에 대한 Wikipedia 기사를 방문하십시오 .이 주제에 대한 자세한 내용이 있습니다.


haimg, 그 링크와 설명에 감사드립니다. @Deshe, 최고의 답변을 빼앗아 죄송합니다.
mring

이제 이것을 편집 할 때입니다. 그렇지 않으면 자신의 답변에 동의하지 않습니다 :-)
Daniel Beck

13

현대 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 부트 로더에 기본적으로 부트 스트랩 때 호환성 지원 모듈을 가 보호 모드로 직접 비현실적인 모드로 전환 이후) 그때부터 보호 모드를 유지하십시오.


부트 스트랩 프로세스에 대한 링크가 끊어 지거나 죽은 것으로 보입니다. 대체품을 찾을 수 없습니다.
slm

이것이 당신의 것입니까? - jdebp.eu/FGA/pcat-boot-process.html
SLM

1
그리고 지금 나는 당신의 이름이 URL 8-)을보고 있다는 것을 알고 있습니다. 스파이를 시도하지 않으면 통지를받지 못했습니다.
slm

나는 당신이 ntlworld에서 물건을 옮겼다 고 생각합니다. 맞습니까?
slm

1st-jdebp.eu/FGA/pcat-boot-process.html의 대체 URL입니다 . 나의 신 ppl는 당신의 A'er를 온통 복사 / 붙여 넣기합니다. 심지어이 위키 피 디아는이 A'er 인용했다 - en.wikipedia.org/wiki/Talk%3AReal_mode .
slm

1

내가 아는 한 부팅 코드는 항상 커널 모드에서 실행됩니다.

우선, 부트 섹터에서 실행될 때 어떤 모드를 사용할 것인지 결정하는 것은 불가능합니다. 단순히 펌웨어에 의해 실행되는 첫 번째 명령이기 때문입니다. 코드가 실행을 시작하기 전에 사용 가능한 명령어를 설정할 수있는 방법은 없습니다. 따라서 설계 상 부트 섹터에서 코드에 사용 가능한 어셈블리 세트는 아키텍처에 의해 미리 결정됩니다.

저 권한 모드를 선택해야한다면, 높은 권한 모드의 명령을 사용하는 것은 불가능했을 것입니다. 이는 부팅 코드가 가장 높은 권한 모드로 실행된다는 사실을 거의 강제합니다.


1

Intel manual Volume 3 시스템 프로그래밍 안내서 325384-053US 2015 년 1 월 :

2.2 작동 모드

프로세서는 전원을 켜거나 재설정 한 후에 실제 주소 모드로 설정됩니다.

킥을 위해 매뉴얼의 멋진 다이어그램 :

여기에 이미지 설명을 입력하십시오

GRUB은 멀티 부트 OS를 보호 모드로 시작합니다. 멀티 부트 사양 0.6.96 머신 상태 :

'CR0'비트 0 (PE)을 설정해야합니다.

GRUB 및 x86_64에 대해 확실하지 않습니다.


GRUB은 멀티 부트 사양 호환 OS를 보호 모드에서 시작 합니다. 여기에는 * BSD가 포함되지만, 내가 아는 한 Linux는이 사양을 따르지 않고 자체적으로 수행합니다. Multiboot 사양 호환 OS를 부팅 할 때 GRUB 구성은 multiboot키워드를 사용합니다 . 리눅스, 거기에 최선을 다하고 있습니다 linux, linux16UEFI의 GRUB 버전에서, 그리고 linuxefi리눅스 고유의 부트 프로토콜을 사용하도록 GRUB를 말하는 키워드.
telcoM

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