暑假就带回了两本书,《操作系统》+《剑桥英语语法》,当然是计划在暑假学一下操作系统,然后了解操作系统是怎么制作的。
目前在学习这个项目:How to make an Operating System
BIOS
来说说计算机操作系统是怎么启动的吧。首先计算机启动的时候,会执行 ROM
区的机器代码,即基本输入输出系统 BIOS
,BIOS
的作用是硬件检测,然后进入启动顺序(Boot Sequence
),这个可以在 BIOS
中设置的。
MBR
在启动顺序阶段,BIOS
会检查设备是否可启动,如果第 511 和 512 个直接是 0x55
和0xAA
,则表示该设备可以启动,否则就按照启动顺序启动下个设备。
BIOS
加载前 512 字节(MBR,主引导记录)到内存 0x7C00
的位置,如果检查设备可启动,那么跳转执行 0x7C00
位置的指令。
- 第 1-446 字节:调用操作系统的机器码。
- 第 447-510 字节:分区表(Partition table)。
- 第 511-512 字节:主引导记录签名(0x55 和 0xAA)
硬盘启动
这里先说一下硬盘的知识,硬盘有很多重叠盘片堆积组成,盘片上每个同心圆称为磁道(Track
),盘片上划分了几个扇形区域称为扇区(Sector
),每个扇区一般为 512 字节,读写数据以扇区为单位。所有盘片相同的磁道称为柱面(Cylinder
),从外缘的 0 开始编号。用来读写的称为磁头(Head
), 每个盘片都有自己的磁头。
分区表用来记录硬盘分区情况,最多 4 个主分区,或者一个主分区做扩展分区,扩展无数个逻辑分区。分区可以安装多个操作系统,所以 MBR
必须知道将控制权转交给哪个分区,然后将其启动。
Bootloader
使用 Bootloader
之后,MBR
不将控制权转交给分区,而是转交给Bootloader
,由它来选择启动哪个操作系统。
Linux
中最流行的 Bootloader
就是 Grub
了,它有一下几个有点:
- 很容易使用
- 能启动多种系统,比如
Linux
、Windows
等等。
一旦选择了操作系统后,Grub
会把选择的内核载入内存中,将控制权转交给内核,然后将其启动。