操作系统(哈工大李治军老师)学习笔记 - 操作系统的启动

本文详细阐述了操作系统的启动流程,包括引导扇区引导操作系统到内存、设置保护模式、初始化GDT表和页表,以及关键步骤如读取内存、设置系统核心地址和数据结构初始化。重点讲解了setup.s的作用和32位模式转换的过程。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


操作系统的启动

刚上电时候,操作系统在磁盘上。而计算机是怎么工作的?是取指、执行。这个时候就需要将代码放到内存里,才能进行取指、执行。而刚开始在磁盘上是不能进行取指执行的,所以要做的第一个工作就是将操作系统从磁盘载入到内存里。这个工作的完成者就是开机时的引导扇区——bootsect.s。
在这里插入图片描述
操作系统的开机做了两件事:1.读入系统 2.setup,初始化
do_move si = 0,di = 0, es = ax = 0x0000, ds = 0x9000 ,ds:si es:di配合起来,把90000地址处所有的代码移动到0地址处。所以从0地址开始就是操作系统的内容,如果操作系统很长的话,7c00处放的bootset在运行,这样会干扰,所以这里解释了为啥把bootsect从7c00移动90000,空出来放操作系统且操作系统一直在这个地方。
在这里插入图片描述jmpi 0,8 CS = 8, IP = 0, CS:IP = 8<<4 + 0 = 8000,如果调到这里,这里是操作系统,这会导致死机,其实会跳到0地址处。 CS和IP都是16位的寄存器,左移四位的话最多可以达到20位的地址,也就是1M,1M这空间很小,难以满足计算机要求,而计算机需要4G的访问空间,也就是32位。所以原先的寻址不可行,此时要从20位模式切换到32位模式,也就是保护模式。
16位模式:实模式
32位模式:保护模式
通过cr0末尾置1启动保护模式
在这里插入图片描述原先CS放的直接就是地址,现在CS放的是查找表的下标,这个查找表就是GDT表。
这个时候,GDT表肯定要有内容,而setup要做的工作是初始化GDT表。
在这里插入图片描述
4个word也就是64位, 0 8 16 32
所以现在清楚了jmpi 0,8 是跳到表的8处,然后进行查找寻址。此时的中断也是通过查表寻址的,能够访问32位的空间。
查表是硬件规定好的。
在这里插入图片描述
这个GDT表项是按照大端进行寻址的。大端模式(Big Endian):数据的高字节,保存在内存的低地址中;数据的低字节,保存在内存的高地址中。 小端模式(Little Endian):数据的高字节,保存在内存的高地址中;数据的低字节,保存在内存的低地址中。

所以根据大端模式,可以找出表项8处的段基址为0x0000处。加上偏移IP也等于0x0000,所以jmp跳到内存0x0000处,而system模块就放在0x0000处,此时setup的工作就到此结束。

总结:setup工作是读了一些硬件参数,为建立操作系统打下基础,把system进行了挪动,挪动到0地址处,将来操作系统的核心代码一直在那里;setup启动的保护模式;应用了高级指令jmpi 0,8 32为汇编指令跳到了0地址处,接下来就到了system模块。
在这里插入图片描述在这里插入图片描述
head进入了32位汇编。
在这里插入图片描述
head.s跳到main.c
在这里插入图片描述
在这里插入图片描述
mem_map[]初始化为0,通过循环来实现,每次右移12位,也就是4K,所以每4k为一页。所以内存初始化就是形成mem_map[]表格。
表格的前面部分是使用过的,而后面部分没有使用,使用过的放的是操作系统。
end_mem 参数其实就是内存大小,1g 还是 4g,从哪里来?90002 存放的内存大小,从那里读出来放到参数列表。
在这里插入图片描述

总结

bootsect.s:将操作系统从磁盘读进来
setup.s:获得一些参数,启动了保护模式
head.s:初始化了一些GDT表,页表
main.c:一堆mem_init
mem_init:初始化,哪些是空闲的,哪些硬盘,长什么样子
系统启动基本完成

总的来看:做了两件事1.读入内存,将操作系统从磁盘读到内存2.初始化
为什么要读入内存?因为读入内存,操作系统才可以取指执行、取指执行。
为什么要初始化?因为操作系统是管理计算机硬件的一些设备(软件系统),那么要完成管理就需要针对每一个硬件做出相应的数据结构,初始化一些数据结构。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值