操作系统系列学习——操作系统启动

本文概述了操作系统启动过程,包括从磁盘读取操作系统到内存,引导扇区的作用,16/32位模式切换,以及GDT全局描述符表在保护模式下的作用。重点介绍了setup的初始化工作和如何通过设备树结构引导操作系统。
摘要由CSDN通过智能技术生成


前言

一个本硕双非的小菜鸡,备战24年秋招,计划学习操作系统并完成6.0S81,加油!
本文总结自B站【哈工大】操作系统 李治军(全32讲)
老师课程讲的非常好,感谢
【哈工大】操作系统 李治军(全32讲)

操作系统启动

最开始应将磁盘上的操作系统读到内存里并且放在其上,操作系统引导扇区完成工
在这里插入图片描述

启动两件事:读入系统,setup初始化
操作系统是移动过来的,从0地址处开始,继续位置是应用程序
setup退出

在这里插入图片描述

jmpi0,8。按照cs左移四位加上ip应该跳到80位置,但实际上来到00位置(setup改变了寻址方式,因为左移四位最多能达到20位地址也就是一兆,想访问4G就得由16位模式换成32位模式,也就是保护模式)

说到底就是CPU解释程序不一样。

cr0寄存器:最后一位如果是0就是16位模式,是1就是保护模式。

在这里插入图片描述

CPU要走另一条解释执行指令的电路:gdt(硬件,快)

CS不再是左移四位产生新地址,而是成为选择子。以前CS里面放的是地址,现在放的是查表的索引,真正的基址放在表中。

GDT:全局描述符表

在这里插入图片描述

GDT表中的内容是setup初始化得来的,每个表四个word16位,一共64位。但寻址时候以字节为单位,也就是8.所以刚才的8就是找这个。有了这个表再配合这句指令就启动了32位模式。
在这里插入图片描述
表中内容是硬件来解释的

三个段基址(也即是图中红色部分),拼在一起段基址就是0。

setup工作:
1.读了些硬件参数,为之后建立操作系统打下基础。
2.把system移动至00地址处,操作系统核心代码一直在这里。
3.启动保护模式。
4.使用高级32位指令,跳到0地址处开始执行。
在这里插入图片描述

这一堆源码通过makefile产生了一个操作系统镜像,将这个镜像放到04-0扇区,再用这个image进行开机引导,操作系统顺理成章就被读进来,待会初始化产生shell。操作系统启动完成

image是一个树状结构,就是设备树。

在这里插入图片描述

在这里插入图片描述

head.s作用:第一个文件,又一次的初始化了idt、gdt表。setup只是为了跳到08临时创建了一段gdt表,现在系统要真正工作了,开启20号地址线访问4G内存。

变为了32位汇编代码,还有一种叫内嵌汇编:在一些.c文件中有些指令必须严格按照我们的方式去执行。

在这里插入图片描述

head.s完成之后要去执行main.c。由汇编跳到c函数

main是一个死循环,因为操作系统开机就不会停止
在这里插入图片描述
在这里插入图片描述

mem_init:初始化内存。初始化一个mem_map数组,数组为0就是没有使用。每次右移12位也就是4K,4K为一页。

这个表大小由end_men参数传入,也就是多大内存,从90002处来,也就是setup设置时读入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力找工作的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值