3

기계가 전원을 켰을 때 커널을 실행하는 방법을 이해하려고합니다. 내가 수집 한 것부터 부팅 할 때 보호 모드로 전환하여 페이지 디렉토리와 페이지 테이블 및 세그먼트 화 기능이 해제 된보다 일반적인 가상 메모리 계획으로 전환하더라도 주소 지정이 가능한 메모리에 액세스 할 수 있습니다. .CR0에서 PE 플래그를 설정하면 보호 모드가 어떻게 설정됩니까?

  1. 글로벌 디스크립터 테이블 (GDT)를 설정하고
  2. 는 PE 플래그/비트의를 설정 lgdt 명령을 사용하여로드 :

    이 3 일을 수행해야하는 보호 모드로 전환 할 것 제어는 CR0 (즉. 값 1)를 활성화하기 위해

  3. 내가 translat하는의 논리에 대해 궁금 ljmp

와 멀리뛰기를 실행 등록 세그먼트 레지스터와 명령어 포인터를 gdt와 함께 사용하기위한 인덱스와 오프셋에 넣는 것. 이 논리는 하드웨어로 수행됩니까? 그렇다면 어떤 하드웨어와 왜 프로세스의 일부인 ljmp의 실행이 있습니까? CR0의 PE 플래그를 설정하여 보호 모드 (ljmp 없음)를 사용하도록 설정하는 것이 가장 좋은 이유는 무엇입니까?

+0

[인텔 ® 64 및 IA-32 아키텍처 소프트웨어 개발자 설명서] (http://www.ibm.com/software/infocenter/)에서 텍스트 패턴 '보호 모드'를 검색하지 않은 이유가 궁금합니다. intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html) 그리고 연구 노력은 무엇이며 왜 묻고 있습니까? 해결하려는 문제는 무엇입니까? BTW : 비슷한 질문에 대한 답이 빈번하다는 것을 알고 계셨습니까? http://wiki.osdev.org를 읽으시겠습니까? – xmojmr

+3

@ xmojmr 인텔의 개발자 설명서에서 검색했지만 원하는 정보를 찾을 수 없습니다. 실제 모드에서 보호 모드로 전환하는 방법을 이해하려고합니다. 나는 osdev wiki에 대해 몰랐다. 그래서 다음 번에 나는 이와 같은 질문을 할 것이다. –

답변

1

첫 번째 질문은 다음과 같습니다. Intel에서 PE 설정이 보호 모드로 전환되는 방식으로 칩을 설계하지 않은 이유는 무엇입니까?

답변 : 이것은 실제로 불가능합니다. CS 레지스터에는 기본 주소가 0x10 * CS 인 선택기가 포함되어 있다고 가정합니다.

즉, 주소 "mov CR0, EAX"가 주소 0x0100 : 0x1200에있는 경우 실행 된 다음 명령은 주소 0x0100 : 0x1203에 있습니다. 따라서 보호 모드로 전환하는 것은 점프 명령과 함께 만 가능합니다. 그렇지 않으면 PE 자체를 전환하면 원하지 않는 점프가 발생합니다 (0x0100 : 0x1203 실제 모드에서 0x0100 : 0x1203 보호 모드로).

기술적으로 CPU는 사용 된 모든 선택기의 선택기 정보를 내부적으로 저장합니다. 선택기 레지스터가 변경 될 때마다 제한, 기본 등이로드됩니다. 이것은 CS 레지스터의 로딩이 CS 레지스터의베이스, 한계 등을 업데이트하기 위해 필요하다는 것을 의미합니다. 이는 다음을 의미합니다. 멀리 점프해야합니다 (CS 레지스터가로드되기 때문에). 어쩌면 RETF도 작동 할 것입니다 ...

원거리 점프 전에 DS 레지스터를로드하는 경우 다른 점 레지스터 (예 : DS)를로드하는 것이 이미 멀리 점프하기 전에 작동하는지 확실하지 않습니다. 제한은 GDT에서 취할 것입니다. 이것을 시도해 주셔서 감사합니다 ...

+0

흠. 그래서'ljmp'가 GDT를 참조합니다 ('ljmp'가 CS 레지스터를로드하기 때문에). CR0의 PE 플래그가 설정된 경우에만 항상이 작업을 수행합니까? –

+0

음, 친애하는 @PedroCattori OSDev.org 위키에서 링크 된 기사의 "** 보호 모드 활성화 **"장을 읽으십시오 [보호 모드 → pmode에 대한 실용적인 자습서] (http://web.archive.org/web/20030604185154/http : // home.swipnet.se/smaffy/asm/info/embedded_pmode.pdf) 또한 [Intel® 64 and IA-32 아키텍처 소프트웨어 개발자 설명서] (http : //www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html) 기본 및 고급 질문에 모두 대답해야하므로 – xmojmr