LINUX内核启动流程-2

向32位模式转变,为main函数的调用做准备

1、关中断并将system移动到内存地址起始位置0x00000

1.1 关中断:将CPU的标志寄存器(EFLAGS)中的中断允许标志(IF)置0。

main函数中能够适应保护模式的中断服务体系被重建完毕才会打开中断,而那时候响应中断的服务程序将不再是BIOS提供的中断服务程序,取而代之的是由系统自身提供的中断服务程序。

LINUX内核启动流程-2_第1张图片关中断

EFLAGS:标志寄存器,存在于CPU中,32位,包含一组状态标志、控制标志及系统标志。

关中断(cli)和开中断(sti)操作将在操作系统代码中频繁出现,其意义深刻。目的是避免中断在此期间的介入。

CPU关中断为实模式下中断向量表和保护模式下中断描述符表(IDT)的交接工作。避免出现实模式的中断机制已经废除、保护模式的中断机制尚未完成的尴尬局面,从而出现系统崩溃。

2、setup程序做了一个影响深远的动作:将位于0x10000的内核程序复制至内存地址起始位置0x00000处!

LINUX内核启动流程-2_第2张图片

复制system模块至内存起始处

复制动作将BIOS中断向量表和BIOS数据区完全覆盖,使它们不复存在。直到新的中断服务体系构

你可能感兴趣的:(嵌入式实时系统开发,linux,运维,服务器)