【操作系统】开机流程-操作系统内核加载

详解开机流程:
在这里插入图片描述
1. 加电,进入BIOS(Basic Input Output System):
x86系列CPU:加电即进入16位的 实模式

CS = 0xF000
IP = 0xFFF0
CS:IP = 0xFFFF0

指向地址0xFFFF0,即BIOS的入口地址。

2. Power-on Self Test(开机自检)
BIOS会对硬件设备进行检测,屏幕可能出现内存显卡等信息。

3. BIOS 加载中断向量表和中断程序
BIOS 会在内存最开始的1KB构建中断向量表,之后的256字节构建数据区,之后加载中断向量表和中断服务程序。

4. 加载引导程序 1
现在 CPU 会收到 int 0x19 的中断,去0x0E6F2 找到中断程序入口地址,启动加载服务程序,就是把第一扇区的 512 字节加载到0x07C00 内存处。

This is called the Master Boot Record (MBR)
在这里插入图片描述
Code就是操作系统的引导程序,例如GRUB。还有Disk Signature。四个16字节的条目描述了磁盘是如何分割的(可以运行多个操作系统或在同一磁盘中有单独的卷)。
如下图,利用MBR转移控制权限。
在这里插入图片描述

4. 加载引导程序 1.5

有了第一部分的引导程序,接下来就是进行第二部分的程序引导。而第一部分引导程序,就是脱离了硬件,内存中终于有了操作系统的代码

在引导程序 1 中,包括将要加载的setup程序的扇区数(SETUPLEN)以及被加载到的位置(SETUPSEG);启动扇区被BIOS加载的位置(BOOTSEG)及将要移动到的新位置(INITSEG);内核(kernel)被加载的位置(SYSSEG)、内核的末尾位置(ENDSEG)及根文件系统设备号(ROOT_DEV)。运行 引导程序 1

  • 首先会对内存进行规划。将 0x07C00 处的 512B 内容复制到 0x9000处。
  • 在复制过程中CS被指向了新位置,用CS的值0x9000来把数据段寄存器(DS)、附加段寄存器(ES)、栈基址寄存器(SS)设置成与代码段寄存器(CS)相同的位置,并将栈顶指针SP指向偏移地址为0xFF00处。
  • 利用 int 0x13 中断从磁盘服务程序的 2 - 5 扇区加载到 0x90200处,紧挨着之前的 512B。

5. 加载引导程序 2
同上,将 6-240 软盘的内容加载到0x1000后的120KB空间。

6. 引导程序 1 完成
确认根设备号。
将语句跳转到 0x90200 处,也就是 引导程序 1.5

7. 引导程序 1.5

  • 利用BIOS的中断向量提取机器信息并保存在0x90000- 0x901FC的位置。自此操作系统的内核加载完成。

  • 关中断。

  • 将0x10000的内核代码复制到起始位置0x00000。这就将 BIOS 建立的中断向量表和数据区给覆盖掉了

接下来,就是操作系统的任务了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值