引导操作系统的流程
在按下计算机电源键的瞬间,CS、IP寄存器就会被强制初始化为 BIOS
(基本输入输出系统)的起始地址(CS:IP = 0xF000:FFF0)。BIOS会做一系列的初始化(如:建立 中断向量表
)和检查的工作。
其中最后一个检查工作就是:校验启动盘中位于 0盘0道1扇区的内容。如果此扇区末尾的两个字节分别是魔数 0x55, 0xaa
, BIOS便认为此扇区中确实存在可执行的程序(此程序便是久闻大名的主引导记录 MBR
),便加载到物理地址 0x7c00
,随后跳转到此地址,继续执行。
因为 MBR
只占一个扇区即 512
字节,而由于魔数 0x55, 0xaa
的存在,MBR
实际上能利用的空间只有 510
个字节,所以能做的工作极其有限,所以真正引导操作系统内核的工作是交由位于磁盘上的 bootloader
完成的。MBR
的主要任务就是读取磁盘上的 bootloader
以及输出一些(错误)信息。
编写MBR
任务总览
从上面,我们可以得知,MBR的大小为 512
个字节,最后两个字节为 0x55, 0xaa
。MBR要 输出信息
和 读取硬盘
。根据学习一门编程语言的惯例,我们先来实现 输出信息
这一步(其实是因为实现输出信息相对简单)。
中断
在说 “ 为什么要谈到中断?”之前,先来说一下什么是中断。
中断是什么?
中断,英文是 interrupt,直译过来就是:打扰、打断的意思。在计算机里就是指一直在埋头苦干的cpu被一种信号打断的手头上的工作,然后去查询 中断向量表
,中断向量表里面记录着处理不同的中断信号的程序的地址,cpu查到之后就会跳转到那个地址执行,执行完成后就会跳转回去,继续之前的工作。
会产生中断的情况
如:突然断电就会由 硬件
通过连接cpu的引脚发出中断信号(这种由硬件产生的中断信号也被称为 硬中断
)、通过程序指令 int 中断号
发出中断信号(这种由软件产生的中断信号也被称为 软中断
)。
而硬中断是直接通过连接cpu的引脚发往cpu的,优先级最高,毕竟硬件和cpu有一腿嘛~(这一腿指的是引脚)。
为什么要用中断?
前面又说,cpu在接收到中断信号之后,会做出相应的反应。其中就有很