linux_insides_cn之一:内核引导过程
一、内核引导过程 1. 从引导加载程序内核 问题: 底层是如何工作的 程序是如何运行的 如何在内存定位的 内核是如何管理进程和内存的 网络堆是如何在底层工作的 过程: 按下电源开关 ——> 主板发送信号给电源 ——> 电源收到信号给电脑供电 ——> 主板收到“电源备妥信号” ——> 尝试启动CPU ——> CPU复位所有寄存器数据,并设置预定值 注意: 处理器开始在“实模式”工作,它有20位的寻址总线,寻址空间是0~2^20(1MB),但它的寄存器却只有16位(2^16即64KB),所以实模式使用“段式内存管理”来管理整个内存空间。 替代方法: PhysicalAddress = Segment * 16 + offset 但: >>> hex((0xffff << 4) + 0xffff) '0x10ffef' 已经超出1MB范围。既然实模式下, CPU 只能访问 1MB 地址空间,0x10ffef变成有A20缺陷的0x00ffef(CPU只有20位,最高位将被舍弃) CS:代码段寄存器 IP:指令指针寄存器 CS:IP 两个寄存器指示了 CPU 当前将要读取的指令的地址 电脑复位后,CPU寄存器中的预定义数据: IP 0xfff0 CSselector 0xf000 CSbase 0xffff000 逻辑地址: CS:IP 0xffff0000:0xfff0 >>>