暑假就带回了两本书,《操作系统》+《剑桥英语语法》,当然是计划在暑假学一下操作系统,然后了解操作系统是怎么制作的。在家再提高一下英语、情商。

目前在学习这个项目:How to make an Operating System

BIOS

来说说计算机操作系统是怎么启动的吧。首先计算机启动的时候,会执行ROM区的机器代码,即基本输入输出系统BIOSBIOS的作用是硬件检测,然后进入启动顺序(Boot Sequence),这个可以在BIOS中设置的。

MBR

在启动顺序阶段,BIOS会检查设备是否可启动,如果第511和512个直接是0x550xAA,则表示该设备可以启动,否则就按照启动顺序启动下个设备。

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了,它有一下几个有点:

  • 很容易使用
  • 能启动多种系统,比如LinuxWindows等等。

一旦选择了操作系统后,Grub会把选择的内核载入内存中,将控制权转交给内核,然后将其启动。

参考资料