操作系统之启动过程
创始人
2024-02-18 09:17:10
0

本文参考MOOC哈工大操作系统课程,需要有一定的汇编基础

打开电源后,计算机做了什么

此时需要先运行的代码是BIOS

  1. x86 PC开机后CPU处于实模式,寻址方式为CS:IP(CS左移4位+IP)
  2. 开机时,初始化的CS=0xFFFF,IP=0x0000,此时指向的地址为0xFFFF0(ROM BIOS映射区,上电后内存中只有此处有代码)
    此时载入的是BIOS程序,还没有进入操作系统的部分,BIOS程序是固化在主板上的一段程序负责基本输入输出、系统设置信息、开机后自检程序和系统自启动程序。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。目前大多烧录在可擦写ROM中,因此也可以进行BIOS升级。
    在这里插入图片描述
  3. 此时通过0xFFFF0此处的BIOS代码检查RAM、键盘、鼠标、磁盘等硬件和IO设备(此处执行不通过则不会执行操作系统,代表硬件有问题)
  4. 然后读取磁盘0磁道0扇区位置的数据到0x7c00处(从磁盘读取到内存0x7c00处),磁盘0磁道0扇区(一个扇区512字节)处的数据即为引导扇区,存放着操作系统的引导程序
  5. 设置CS=0x07c0,IP=0x0000即指向地址0x7c00
  6. 读入引导扇区里的代码之后,操作系统的故事就从这里开始了
    在这里插入图片描述
    忽略本文段数据段等,关注核心代码,start开始后
    设置ax=0x07c0,ds=ax
    设置ax=0x9000,es=ax
    设置cx=256 (十进制256)
    si,di归零
    rep movw 重复执行移动直到cx归零,即移动256字节 源地址ds:si,目的地址es:di
    jmpi go, INITSET 间接跳转,意思就是跳转到go标签处的代码处
    此时start下面的这部分代码已经是移动到了0x90000处了
    在这里插入图片描述
    设置ds=0x9000,es=0x9000,ss=0x9000,sp=0xff00
    load_setup:设置dx=0x0000,cx=0x0002,bx=0x0200,ax=0x0200+setup长度
    ax寄存器高八位为ah,低八位为al,此时ax=0x02代表读磁盘,al为setup长度,代表读取的扇区个数
    同样cx分为ch和cl,dx分为dh和dl,此时读取的磁盘的位置为柱面号0开始扇区为2磁头号为0驱动器号为0,读取到的内存地址为es:bx=0x9000:0x0200=0x90200。
    载入setup扇区的代码后,就要跳出boot扇区的代码开始执行setup代码

在这里插入图片描述
INT 0x13 参数参考:https://www.cnblogs.com/AmitX-moten/p/4823598.html
功能号:AH = 08H
调用参数:DL = 驱动器号,ES:BX = 格式化参数表指针
返回参数:成功 ⇒ BL = 磁盘大小,CX中的0-5位存扇区数,CX中的6-15位存柱面号,DH/DL = 磁头数/驱动器数,ES:DI = 磁盘驱动器参数列表地址,失败 ⇒ AH = 错误码,CF = 1

Ok_load_setup:载入代码后,设置dl=0x00,ax=0x0800,执行中断0x13,获取磁盘参数
设置ch=0x00,将扇区数取出给sectors。
通过INT 0x10中断读取光标,再通过该中断显示#mesg1处内存中的字符(loading system…)(cx寄存器代表字符长度)
然后执行call指令,将CS和IP入栈,跳转到read_it处执行代码

在这里插入图片描述
setup模块后就需要进入system模块,此时需要从磁盘载入该模块。
通过条件转移指令,跳转ok1_read执行,jb代表jump below,此时应该是为了防止程序跳到system外。
ok1_read代码将磁盘扇区数赋给ax,用ax减去已读扇区数,此时的ax代表未读的扇区数,然后开始读磁道。
至此bootsect.s引导扇区的代码执行完毕,此时需要转入setup模块进行执行。

在这里插入图片描述
setup模块,进行系统的设置
此时首先取出鼠标位置,放入[0](间接寻址此时指向CS:IP+0=0x90000)
再取出内存大小放入[2],0x90002处
因为此时CS:IP最多指向的地址空间为1M因为地址位数为20位,2^20bit=1M
所以需要扩展内存
此时SYSSET=0x1000,操作系统的代码放在0x10000起始的位置,下面要整体挪动到0x00000
do_move 此时又要开始移动了,将system模块放到0地址处,此时可以解释为何上面要移动0x07c00的代码到0x90000,就是因为这里要放system的地址。
从ds:si地址 移动到es:di=0x00000处 移动0x8000字节
在这里插入图片描述

将CPU从实模式转入保护模式/32位模式,寻址方式发生改变,通过CS选择子选择GDT表中的地址+IP即为内存地址
在这里插入图片描述
转入保护模式之前,其实setup还做了一件事,就是建立GDT表,为后面改变寻址方式做准备
在这里插入图片描述
此时可以解释一下jmpi 0,8的意思,CS=8选择子查GDT表得到的结果是0x00000000 32位地址,寻址空间为4G,此时CPU可以寻址的空间从1M转到了4G

在这里插入图片描述
此时已经跳出setup模块正式进入了system模块,system模块的第一个文件就是head.s,此时的汇编为32位汇编,head.s做了一系列设置(堆栈、idt、gdt、设置地址线等)执行后需要执行main.c,转入C语言执行
在这里插入图片描述
通过压栈压入_main的参数 0,0,0,和main的地址(L6死循环地址),跳转到set_paging,执行完设置页表,弹出栈时,main函数的地址被弹出,此时执行main(0,0,0)
在这里插入图片描述
在这里插入图片描述
上述代码中for循环将内存的页表从0开始的地方设置一段为USED,这一段即为系统所在的地址。
end_men-start_men为剩余的内存的大小,end_men >>=12,end_men右移12位,代表除以4k,此时end_men代表剩余内存有多少页,而mem_map就代表一个数组,这个数组中记录着每个内存页是否被使用。
上述代码中start_men和end_men即从之前的汇编处可以得到,0x90000和0x90002。
通过main.c初始化完成后,操作系统即启动了。

相关内容

热门资讯

产品维修合同范本   设备维修是指设备技术状态劣化或发生故障后,为恢复其功能而进行的技术活动,包括各类计划修理和计划外...
租赁合同 租赁合同范本通用15篇  在人们的法律意识不断增强的社会,合同的地位越来越不容忽视,它也是减少和防止...
北京市租房合同标准版 北京市租房合同标准版  出租方(以下称甲方):  承租方(以下称乙方):  甲方同意将自己的产权商铺...
商标使用的管理合同 关于商标使用的管理合同范本  甲乙双方依据xx集团《商标管理办法》及国家商标管理法律法规的有关规定,...
简易工程安装合同 简易工程安装合同范本(通用5篇)  随着法治精神地不断发扬,人们愈发重视合同,越来越多的人通过合同来...
幼儿园厨师聘用合同 幼儿园厨师聘用合同范本  随着法治精神地不断发扬,人们愈发重视合同,合同在生活中的使用越来越广泛,签...
γ-氨基丁酸B受体的临床意义 γ-氨基丁酸B受体的临床意义γ-氨基丁酸(GABA)是哺乳动物中枢神经系统的主要抑制性神经递质.早期...
房屋建筑施工承包的合同范本 房屋建筑施工承包的合同范本  承包合同的特征  1)承包合同以完成一定的工作为目的。  在承包合同中...
企业管理创新的论文 关于企业管理创新的论文  导语:当今社会,缺乏创新者总是会被时代遗忘,善于创新的人总是被尊以高位。下...
住宅空间设计课程设计与实践的... 住宅空间设计课程设计与实践的论文  摘要:工作过程导向的课程,近年来已经成为职业教育课程改革与建设的...
行政行为的论文 有关行政行为的论文  具体行政行为的解释是行政行为的一种相对独立的形态,也是法律行为解释的一种类型。...
试析通感之动因与意义建构 试析通感之动因与意义建构近年来,通感现象受到了越来越多的关注.然而,到目前为止,鲜有研究全面探讨其背...
地方应用型高校图书馆转型期空... 地方应用型高校图书馆转型期空间再造路径研究论文  摘要:伴随着信息技术的发展,“互联网++”时代的到...
发展性教师评价教育论文 发展性教师评价教育论文  摘要:发展性教师评价是教师评价的重要组成部分,它对于教师专业的发展和学校教...
东南亚短象蜡蝉属二新种(半翅... 东南亚短象蜡蝉属二新种(半翅目,蜡蝉总科,象蜡蝉科)记述了采自东南亚地区象蜡蝉科Dictyophar...
边坡安全系数影响因素以及取值... 边坡安全系数影响因素以及取值方法初探在边坡稳定性分析中,一般采用安全系数来衡量边坡的稳定性,并根据安...
生活中的有与无 生活中的有与无自然万物呈现自己的方式是用天言,而人类呈现自己的方式却是天言人言兼用,这是人所以比其他...
浅谈如何给爱犬驱虫 浅谈如何给爱犬驱虫犬自出生后,因吃奶、舔毛、舔地面等,会被寄生虫寄生,有的内寄生虫(如蛔虫)可经胎盘...
极地雪藻对紫外辐射的生理适应... 极地雪藻对紫外辐射的生理适应性研究用不同剂量的紫外线辐射极地雪藻Chlamydomonas niva...
环颈雉的血细胞观察 环颈雉的血细胞观察应用常规血涂片Wright染色法对环颈雉血细胞进行染色、显微观察、形态参数测定、图...