Linux操作系统内核引导过程
需要的基础知识:
- C语言基础。重点指针、内存、结构体、联合体
- 汇编语言基础。重点AT&T语法
按下电源按钮的那一刻,系统发生了什么事
电脑在你按下电源开关的时候,就开始工作。主板发送信号给电源而电源收到信号后会给电脑供应合适的电量。一旦主板收到了电源备妥信号,它会尝试启动 CPU 。CPU 则复位寄存器的所有数据,并设置每个寄存器的预定值。以及后来的 CPUs 在电脑复位后,在 CPU 寄存器中定义了如下预定义数据:
CPU寄存器 | 值 | 描述 |
---|---|---|
IP | 0xfff0 | 程序指令寄存器 |
CS selector | 0xf000 | 段选择寄存器 |
CS base | 0xffff0000 | 段基地址寄存器 |
背景知识:x86 CPU 实模式
处理器开始在实模式工作。我们需要退回一点去理解在这种模式下的内存分段机制。从 [8086]到现在的 Intel 64 位 CPU,所有 x86兼容处理器都支持实模式。8086 处理器有一个20位寻址总线,这意味着它可以对0到 2^20 位地址空间( 1MB )进行操作。不过它只有16位的寄存器,所以最大寻址空间是 2^16 即 0xffff (64 KB)。实模式使用[段式内存管理 来管理整个内存空间。所有内存被分成固定的65536字节(64 KB) 大小的小块。由于我们不能用16位寄存器寻址大于 64K