Linux操作系统内核分析湘潭大学信息工程学院讲课内容bootsect
s程序分析setup
s程序分析head
s程序分析要求大家知道每个程序的作用
操作系统引导应用程序操作系统引导程序BIOS装载装载装载
磁盘结构磁道:不同半径的同心圆称为磁道扇区:512B磁头:每个磁盘有两个面,每个面都有一个磁头使用磁头号、柱面号、扇区号可唯一确定一个扇区引导扇区引导扇区是磁盘的第一个扇区(0磁头0磁道1扇区)
引导扇区中的程序是负责装载操作系统的程序,被成为自举程序或引导程序(bootstrap)
限制:自举程序的大小为512B,且最后两个字节必须为0xaa55
开机过程开机BIOS完成加电自检将引导盘的引导扇区读入到物理内存0x7c00处检查0x7c00+510开始的两个字节是否是0xaa55跳到0x7c00执行P36实模式内存寻址段内偏移0154段地址015+019段地址015物理地址逻辑地址基地址64K1M段地址:段内偏移bootsect程序bootsect程序就是一个引导程序,负责把Linux操作系统内核从存储设备装入内存
用汇编语言编写,遵循Intel汇编语法装载过程0x0000000x007c000x0100000x0900000x0902000x100000setupbootsectsystem移动自己movw指令:从ds:si移动一个字到es:di,然后根据标志寄存器中direct标志位,把si和di分别加2(d=0)或减2(d=1)
rep:重复执行后面的命令,重复次数放在cx寄存器中,每执行一次后面的命令则把cx中的值减1,直到cx为0
移动自己ds=0x7c0;si=0;//0x7c0:0es=0x9000;di=0;//0x9000:0cx=256;While(cx>0){从ds:si移动一个字到es:di;if(d==0){