计算机操作系统的启动过程

一.引导扇区之前

以x86 PC(32位系统)为例:
在这里插入图片描述
实模式(16位模式):对应于保护模式,实模式下的寻址方式与保护模式不同,保护模式的最大寻址能力是4G,同时16位汇编指令和32位汇编指令也不相同。

计算机是通过取指执行这样的过程来进行一步步操作的。即不断通过读取内存指令来不断确定下一步所要执行的事件。

计算机开机之后,CPU默认进入实模式,CS:IP指向只读存储器和基本输入输出系统,检查内存和硬件设备,将0磁道0扇区(引导扇区,注:一个扇区的大小为512个字节)的内容读入内存中的0x7c00处,同时将CS:IP指向该地址处。

二.bootsect.s

在这里插入图片描述
bootsect.s是boot扇区里的代码(汇编语言)
boot扇区的作用是将操作系统的代码从磁盘分段读入内存当中,总体上可分为三个过程:

1.首先将setup的四个扇区中的代码读入内存当中
2.然后将设置的启动logo放入显存当中,显示在电脑屏幕上
3.最后再将system模块的代码读入内存

三.setup.s

setup扇区的主要作用有两个

(1)获取操作系统启动前所需要的信息

在这里插入图片描述
光标位置(包括其他硬件参数)

setup读取硬件的相关信息,并通过特定的数据结构对这些信息进行保存。同时setup.s将所有的OS代码移动到地址0处,后续的所有应用程序的运行都建立在OS代码地址之后。

(2)完成实模式向保护模式的过渡

在setup.s中有这样两行代码:

在这里插入图片描述
在第一行指令中,将cr0寄存器的值设为1,从而启动保护模式。而第二行指令则跳转指令执行地址。

注意:这个时候已经进入了保护模式,寻址方式自然也已经发生了改变。

在这里插入图片描述
保护模式:

在这里插入图片描述

四.system模块

setup.s扇区启动了保护模式,进入system模块之后

(1)首先执行的是head.s,完成了对GDT和IDT表的初始化
(2)然后进入main.c文件,完成对内存、设备、时钟、CPU等的初始化。

在这里插入图片描述
注意:main函数传入的三个参数实际并没有使用,此处的main只是保留了传统main的形式和命名。

猜你喜欢

转载自blog.csdn.net/m0_46550452/article/details/108060284