操作系统启动过程

目录

前言

1.1 加电自检和初始化

1.2 加载引导扇区(bootsect.s)

二、运行bootsect.s引导程序

2.1 转移至新地址:为操作系统代码腾出空间

2.2 加载Setup文件

2.3 启动开机动画

2.4 加载System模块

三、运行Setup.s初始化程序

3.1 完成硬件参数初始化

3.2 移动操作系统代码

3.3 更改寻址模式

四、运行System模块

4.1 运行Head.s文件

4.2 运行Main.c文件

4.3 中断服务程序

总结


前言

计算机的:取指令、执行指令,所以指令指针IP是计算机执行的核心。


一、运行BIOS程序

1.1 加电自检和初始化

1)按下电源系统启动之后,首先加载执行BIOS代码,BIOS对系统硬件执行自检查

例:初始化指令地址(CS:IP=0x000FFFF0) 指向BIOS区,检测RAM,键盘,显示器,软硬磁盘是否正常运作;

2)初始化程序将加载BIOS所支持的中断向量

例:即将BIOS提供的中断服务程序的入口地址登记在中断向量表;

1.2 加载引导扇区(bootsect.s)

把磁盘0磁道0扇区的256字节(第一块扇区内容)的引导启动代码放到内存0x7c00处,PC指该0x7c00地址处开始运行

注:引导代码用汇编而不是用C语言,因为C语言的代码编译之后,它的内存位置是人为不可控的(比如自动分配栈),而汇编可以。

二、运行bootsect.s引导程序

2.1 转移至新地址:为操作系统代码腾出空间

2.2 加载Setup文件

通过BIOS提供的int 13中断服务(读扇区)程序,将Setup4的个扇区读到0x90200地址处。

2.3 启动开机动画

用BIOS10号中断在屏幕上显示加载开启启动的图片和文字。

2.4 加载System模块

通过BIOS提供的int 13中断服务(读扇区)程序,读取System模块。

三、运行Setup.s初始化程序

3.1 完成硬件参数初始化

首先通过15号中断获得内存的大小等硬件参数,然后将获得的硬件参数覆盖Bootsect.s文件;

3.2 移动操作系统代码

把从0x9000处所有的操作系统代码(参数+setup+system)移到0地址处。

(在物理内存中,操作系统就存放在低地址中)

3.3 更改寻址模式

1)Setup创建GDT表

 GDT表项结构:

 2)通过指令,它会把cr寄存器的最后一位置1,这样寻址方式从实模式转变为保护模式

实模式:在X86计算机内部,通过CS:IP(段寄存器:偏移地址)定位执行指令的地址;

保护模式:CS作为页表项从gdt表中寻找段基址,然后和IP得到32位内存地址

四、运行System模块

4.1 运行Head.s文件

head.s文件会初始化idt和gdt表,这两个表格是寻址用的,以方便保护模式下使用,该模式指令和地址都将改变为32位模式;

4.2 运行Main.c文件

在main函数里面进行各个模块的初始化工作。前面第6部获得的物理内存大小参数就可以传到一些初始化函数中进行使用。

4.3 中断服务程序

除了完成其他工作外,还将它提供的中断服务程序装入内存,并建立相应的中断向量;

补充:

BIOS中断服务程序:文件操作、读写磁盘、时钟服务、显示服务、内存分配等等

(包含外中断、内中断以及用于对设备I/O操作的的中断服务程序

DOS中断服务程序:和硬件设备相关的,一般都调用了BIOS中断服务程序;


总结

加载运行BIOS -- > BIOS硬件检测和初始化程序 --> BIOS加载引导扇区

--> 引导程序加载Setup文件和System模块和启动开启动画

--> Setup程序记载硬件参数和设置寻址模式

--> System模块进行模块初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值