Linux-系统初始化

Linux-系统初始化

  1. cpu工作流程
  2. 操作系统引导
  3. linux内核启动

cpu工作流程

图一
图一

a. cpu 包含运算单元,控制单元,数据单元(控制单元如将数据单元中的代码,数据加载到运算单元运算)

图二
图二

a. 8086架构cpu中有8个16位寄存器用于存放临时数据。通用寄存器(AX,BX,CX,DX),指针变址寄存器(SP,BP,SI,DI)
b. cpu中的控制单元有ip指令指针寄存器,将指令加载到指令队列交给运算单元计算
c. cs代码段寄存器,DS数据段寄存器。8086架构中CS和BS 都是基地址。代码段,数据段偏移地址分别放在ip寄存器和通用寄存器。基地址+偏移地址=要加载(代码或数据)。8086的地址总线为20位,寄存器为16位,所以计算目标位置函数=(CS或DS)寄存器中值<4位+通用寄存器的值或IP寄存器中
d. 32位cpu CS,DS存放的不是基地址,是寻找基地址的指针

操作系统引导

a. BIOS通电,检查硬件设备
b. 加载0x7c00 启动boot.img,boot.img 加载core.img,boot.img将控制权交给disboot.img,执行lzma_decompress.img(建立分段分页,打开地址线)。执行kernel.img,最后启动内核
图二

linux内核启动

a. 内核入口在init/main.c文件中start_kernel()
b. start_kernel启动了init_task第一个进程pid=0的任务。接着是启动trap_init()中断管理,mm_init()内存分配,shed_init()进程调度
c. 最后进入reset_init(),通过kernel_thread 初始化kernel_init用户态进程pid=1和kthreadadd内核态进程pid=2。

kernel