从宽泛的角度上来说系统通过BIOS启动后进入操作系统的,但是中间很多过程都被大家省略了。
首先,我们需要知道的是没有软件加持的硬件是无法自行运转的,但是硬件又没有办法自己去加载软件。这里就出现了BIOS。BIOS(基本输入输出系统)通常存储在主板上的非易失性存储器中,具体位置是:芯片:BIOS通常被存储在主板上的一个专用芯片中,这个芯片通常是闪存(Flash Memory),可以进行更新。主板:BIOS芯片通常位于主板的边缘区域,靠近处理器和内存插槽的位置,便于与其他硬件组件进行连接。电池供电:在一些情况下,BIOS设置(如系统时间、硬件配置等)会保存在主板上的CMOS(互补金属氧化物半导体)中,该存储器需要电池供电,以保持数据。BIOS机器的开端,BIOS最终会去寻找操作系统镜像文件和文件系统。
我们知道一台机器上常常会有一个甚至多个OS硬盘,BIOS是怎么找到的?
对于这个问题,我们先要知道一个装了OS的硬盘的分区结构MBR。
MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁道0柱面1扇区。不过,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节交给了DPT(Disk Partition Table硬盘分区表),最后两个字节“55,AA”是分区的结束标志。这个整体构成了硬盘的主引导扇区。
主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。MBR是由分区程序(如Fdisk.exe)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存。
DBR(Dos Boot Record)是操作系统引导记录区的意思。它通常位于硬盘的0磁道1柱面1扇区,是操作系统可以直接访问的第一个扇区,它包括一个引导程序和一个被称为BPB(Bios Parameter Block)的本分区参数记录表。引导程序的主要任务是当MBR将系统控制权交给它时,判断本分区根目录前两个文件是不是操作系统的引导文件(以DOS为例,即是Io.sys和Msdos.sys)。如果确定存在,就把它读入内存,并把控制权交给该文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数,分配单元的大小等重要参数。DBR是由高级格式化程序(即Format.com等程序)所产生的。
在MBR中存在初始引导代码,引导到我们常见的grub引导系统中的结果。
我在工作中一直认为使用grub的过程中是不存在文件系统的,起始这里是有的。Grub通常是在/boot/grub中的,GRUB的核心组件通常会被安装在MBR中(在传统BIOS系统中),并且会包含指向/boot/grub目录的路径信息。每次我们在一个OS盘中再次装系统时,grub就会自动修改进行适配。
以上就是操作系统的宽泛的层面上去理解了。
在启动过程中有两件事情是需要知道的。一:BIOS扫描环境中的可以设备并写成ACPI表,最后提供给操作系统,第二个就是对heads中存在构建基本的全局描述符寄存器以及具备描述符寄存器,如果仔细的去内核书中的介绍。几乎每一章的核心的构建都是描述符。操作系统需要使用有限的寄存器去掌握相对无尽进程是一件不容易的事。