讲到计算机的启动流程,我们要先明白这么一件事,内存是挥发性存储器件,所以在计算机上电之前内存中是什么都不存在的,所以从内存中的程序和数据从无到有,这需要一个过程,就是我们要讲的计算机启动流程。
知识预热:(以下数据来自于百度百科)
1、BIOS、CMOS
(1)BIOS是一个写入到硬件上的一个软件程序,BIOS的功能主要分为3部分:自检和初始化、程序服务处理、硬件中断处理
a)自检和初始化
这个功能又分为3部分:
i、加电自检(POST power on self test),上电后对计算机的硬件部分检测,通常要检测的硬件有:CPU,640K基本内存,1M以上的扩展内存,ROM,主板,CMOS存储器,串并口,显示卡,软硬盘子系统及键盘进行测试。
ii、初始化,包括创建中断向量、设置寄存器、对一些外部设备进行初始化和检测
iii、引导程序,作用是引导DOS或其他操作系统,BIOS先从硬板的起始扇区中读取引导记录,读取成功后,BIOS会把控制权交给引导记录,由引导记录把操作系统装入电脑
b)程序服务处理,服务对象是用户的应用程序和操作系统,提供的服务是与I/O设备有关的服务,如:读磁盘、文件输出到打印机
c)硬件中断处理,处理应用程序和操作系统对硬件的需求,如磁盘和串口服务、视频服务、屏幕打印
(2)CMOS主要用于存储BIOS设置程序所设置的一些参数和数据
2、MBR
字节偏移(hex) | 字节数 | 描述 |
00~1BD | 446 | 引导代码 |
1BE~1CD | 16 | 分区表项1 |
1CE~1DD | 16 | 分区表项2 |
1DE~1ED | 16 | 分区表项3 |
1EE~1FD | 16 | 分区表项4 |
1FE~1FF | 2 | 55AA |
注:进制转换程序可以在我的博客分类“工具箱”中找到。
1BD = 1*16*16 + 11(B)*16 + 13 = 445
1BE~1FD = 446~509,共64bytes
(1)MBR(master boot record 主引导记录)位于硬盘的0号柱面、0号磁头、1号扇区(PS. 硬盘的0\0\0用于存放本磁盘的型号,大小等内容),主要由4个部分组成。
i、主引导程序:0000H~0088H,它负责从活动分区中装载运行系统的引导程序。这里主要包含一段指令,用于通知计算机如何阅读分区表并定位操作系统的位置,这部分的代码会因操作系统的不同而不同,利用引导代码可以实现多重引导。
ii、出错信息数据区,偏移地址0x89--0xE1为出错信息,0xE2--0x1BD全为0字节。
iii、分区表,0x1BE~0x1FD,每个分区表项占16bytes,最多可以描述4个分区(这就是为什么MBR分区体系只能分成4个区【我们平时看到的分区一般可以从26个字母中选取任意多个当做分区标识(多于4个),这是因为那些分区是逻辑分区,这里的4个分区指的是主分区和扩展分区的数目,而逻辑分区是在扩展分区中划分出来的,也叫做二级、三级扩展分区。】)。含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,
MBR截图:
=====================================================================================================================
上面的知识预热搞定后,那么搞定系统的启动流程就很简单了,
首先,计算机上电后,
(1)先启动的是主板上的BIOS,BIOS完成硬件检测、资源分配、初始化一些寄存器和向量,(这里假设BIOS检测到的第一个可以启动的装置是硬盘)最后BIOS会把硬盘的CHS=0\0\1处的扇区即MBR读入内存0x7c00位置,并把控制权移交给MBR中的主引导程序
(2)MBR中的主引导程序根据分区表会把操作系统的内核镜像从硬盘中读到内存中去,并把控制权交给操作系统
(3)操作系统启动