Linux insides阅读笔记(持续更新)

2022-06-02 发布 0条评论

[toc]

引导

从引导加载程序内核

处理器在引导阶段采用实模式工作
x8086处理器有A20寻址总线,最大1MB

实模式下寻址方式

   CS:IP
   其中CS是段,IP是偏移,X80_86中,每段65536字节(64KB)
   PhysicalAddress = Segment * 16 + Offset
   如CS:IP = 0x2000:0x0010对应的物理地址:
   >>> hex((0x2000 << 4) + 0x0010) = 0x20010
   如果地址超出1MB,则舍弃最高位

CPU第一条指令在0xFFFFFFF0,远超1MB,这条指令被映射到ROM上,因此第一条指令来自ROM而不是RAM

实模式下1MB地址空间分配表

0x00000000 - 0x000003FF - Real Mode Interrupt Vector Table
0x00000400 - 0x000004FF - BIOS Data Area
0x00000500 - 0x00007BFF - Unused
0x00007C00 - 0x00007DFF - Our Bootloader
0x00007E00 - 0x0009FFFF - Unused
0x000A0000 - 0x000BFFFF - Video RAM (VRAM) Memory
0x000B0000 - 0x000B7777 - Monochrome Video Memory
0x000B8000 - 0x000BFFFF - Color Video Memory
0x000C0000 - 0x000C7FFF - Video ROM BIOS
0x000C8000 - 0x000EFFFF - BIOS Shadow Area
0x000F0000 - 0x000FFFFF - System BIOS

引导过程

在内核安装代码的第一步

保护模式

堆初始化

当栈和bss段在header.S中被初始化后,内核需要初始化全局堆,该过程通过init_heap函数实现。其实现过程如下

之后,内核将继续调用其他函数来获取相关参数,简单列举如下:

发表评论