Linux-0.11 启动流程分析

      当PC上电后,80x86架构的CPU将自动进入实模式(指寻址采用和8086相同的16位段和偏移量,最大寻址空间1MB,最大分段64KB。可以使用32位指令。32位的x86 CPU用做高速的8086),并从地址0xF000:0xFFF0开始自动执行代码(这个地址通常是BIOS ROM中的地址)此条代码是一个远跳转指令:jmp far 0xF000:0xE05B。这时BIOS开始执行某些系统检测及设定(POST上电自检、中断例程、系统设置程序等等,并在物理地址0处开始初始化中断向量。此后,它将可启动设备的第一个扇区(磁盘引导扇区,512字节)读入到内存绝对地址0x0000:0x7C00处 即31KB,并跳转到这个地方开始执行。被读入的文件就是用8086汇编编写的(boot/bootsect.s)。

    bootsect.s将会把自己移动到内存绝对地址0x90000(576KB)处,并把启动设备后2KB字节代码(boot/setup.s)读入到内存0x90200处,而内核的其他部分(system模块)则被读入到内存地址0x10000(64KB)开始处,

    setup.s程序将会把system模块移动到物理内存起始位置处。负责从BIOS中获取系统数据,并将这些数据放到系统内存的适当位置。接下来加载中断描述符表寄存器(idtr)和全局描述符表寄存器(gdtr),开启A20地址线,重新设置两个中断控制芯片8259A,将硬件中断号重新设置为0x20~0x2f。最后设置CPU的控制寄存器CR0(机器状态字),从而进入32位保护模式,并跳转到位于system模块最前面部分head.s程序继续执行。

     head.s程序执行完成后,已经正式完成了内存页目录和页表的设置,并重新设置了内核实际使用的中断描述表idt和全局描述符表gdt。另外还为软盘驱动程序开辟了1KB字节的缓冲区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值