Linux X86_64 물리적 메모리 레이아웃

Linux X86_64 물리적 메모리 레이아웃

Linux 커널 문서에 따르면 에서 https://www.kernel.org/doc/Documentation/x86/boot.txt까지의 커널 커널 모드 코드가 있습니다 . 두 가지 질문이 있습니다.X+10000X+08000


For a modern bzImage kernel with boot protocol version >= 2.02, a
memory layout like the following is suggested:

    ~                        ~
        |  Protected-mode kernel |
100000  +------------------------+
    |  I/O memory hole   |
0A0000  +------------------------+
    |  Reserved for BIOS     |  Leave as much as possible unused
    ~                        ~
    |  Command line      |  (Can also be below the X+10000 mark)
X+10000 +------------------------+
    |  Stack/heap        |  For use by the kernel real-mode code.
X+08000 +------------------------+  
    |  Kernel setup      |  The kernel real-mode code.
    |  Kernel boot sector    |  The kernel legacy boot sector.
X       +------------------------+
    |  Boot loader       |  <- Boot sector entry point 0000:7C00
001000  +------------------------+
    |  Reserved for MBR/BIOS |
000800  +------------------------+
    |  Typically used by MBR |
000600  +------------------------+ 
    |  BIOS use only     |
000000  +------------------------+

1. GRUB의 리얼 모드 코드 부분이거나 bzImage의 일부입니다. 2. 리얼 모드 코드가 중간에 있는 경우 X+10000모드 커널 코드 X+08000의 물리적 위치는 어디에 있습니까 ?long mode/64 bit

답변1

(최신 버전을 참고하겠습니다.프로토콜 문서 시작, 보고 있는 문서는 오래되었습니다. )

리얼 모드 커널 부트 섹터와 설정 코드는 커널의 일부입니다.섹션 1.2. 그들은 살고있다엑스그리고엑스+0x08000.

보호 모드 커널은 위 표의 첫 번째 항목인 0x100000에 로드됩니다.

관련 정보