操作系统 第三节 操作系统启动

1 bootsect后的setup模块

setup将完成OS启动前的设置,进行初始化

setup获知扩展内存大小方便以后OS的管理,进入保护模式且设置gdt表,并将system模块移动到0地址

之后setup进入保护模式,由于使用CS:IP只能进行1MB的寻址,而现代操作系统需要管理4G甚至更大的内存,所以需要新的寻址模式,从16位(1MB)寻址模式到32位(4G)寻址模式即从实模式进入保护模式来进行扩展内存的寻址

由于先前的CS:IP寻址方式无法使用,为了更改CPU解释执行的电路,提供了CR0寄存器来进行切换
在这里插入图片描述
保护模式下的地址翻译和中断处理:
在这里插入图片描述
进入保护模式后,setup最后执行 jmp 0,8指令,在保护模式下,jmp实际跳转到了0x0000处,即system模块开始执行OS的核心内容

2 跳转到system模块执行…

system由许多文件编译而成,众多的源码通过makefile生成Image,system模块第一部分代码是 head.s,head.s用来实现一些数据结构便于操作系统管理计算机

setup是进入保护模式,head是进入之后的初始化,在保护模式中执行的都是32位汇编代码,先前的都是16位汇编

head.s再次初始化gdt和idt表,先前setup的初始化只是为了跳转到0x0000system模块处,head.s进行的初始化才是真正为操作系统服务的初始化步骤,接下来去执行main.c,通过栈和ret指令实现跳转

3 进入main函数

main.c的工作就是xx_init即进行内存,中断,设备,时钟,CPU等初始化

如对内存的初始化,就是形成一个表格,标注哪些地方已经使用,哪些地方没有使用,开始的地方存放OS,后续内存大小由扩展内存决定

4 小结

boot:将操作系统从磁盘中读入
setup:获得参数,启动保护模式
head.s:初始化gdt表,idt表,页表
main.c:初始化各种设备

系统启动实际上做了两件事:将0S读入内存进行各种设备初始化

将OS读入内存:OS是个大型复杂的程序,程序只有加载到内存中方可执行

各种设备初始化:OS的目的就是为了管理计算机的各种硬件资源,为了完成这些管理,针对每一个硬件做出相应的数据结构并初始化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值