第一步:在主板接通电源之后,系统就由POST(Power On Self Test,上电自检)开始自检,在我们刚刚接通电源的时候,整个系统由BIOS控制,电压还不太稳定(这个过程非常短暂,一般只有几毫秒,这个时候电压的稳定完全依靠主板和电源内部的滤波电容进行),主板芯片组会向CPU发出reset的命令让CPU开始初始化,同时主板芯片组等待电源发出POWE GOOD命令,一旦电源发出POWER GOOD命令,主板芯片组会马上停止reset命令的发出(如果是手动reset那么松开reset按钮时就会停止发出命令),这时候CPU会马上从地址FFFFF0H或FFFF0H开始执行寻址指令(这个地址是在BIOS内而不再内存里面),在这个地址中无论是AMI BIOS还是Award BIOS,在这个地址中都会存储一条跳转命令,直接跳转到系统BIOS中真正的启动代码处,这个时候BIOS就会进行到第二个步骤POST。
第二步:系统BIOS的启动代码首先要做的事情就是POST,POST的主要任务就是在检测系统中的一些关键设备是否存在和正常工作。由于POST在初始化显示卡之前,因此如果POST过程中出现任何的被BIOS认为的致命错误,比如没有找到内存或者说内存错误之类的,POST会通过主板上再带的扬声器来发送长短和数量不等的警报声以传递错误信息,如果在正常情况下,POST会进行的非常快,我们是难以感觉到这个过程的。
第三步:在这一步,系统BIOS会找到显示卡,存放显卡BIOS的ROM通常其实地址在C0000H处,系统BIOS找到显卡BIOS之后调用它的代码,由于显卡生产商的不同,所以显卡的初始化是由显卡BIOS来完成的,所以不同显卡厂商的界面也是不太一样的。
第四步:硬盘引导启动:这一步是根据BIOS设置的启动顺序进行,按照顺序将控制权依次转移给列表中的存储设备,无论是哪个设备,计算机都会依次读取这个设备的第一个扇区,即第一个512字节,如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给"启动顺序"中的下一个设备,这最前面的512个字节就被叫做主引导记录(Master boot record,缩写为MBR)。
其中主引导记录的主要作用就是引导硬盘到指定的位置来加载操作系统,一般分为三个部分:第1-446字节:调用操作系统的机器码;第447-510字节:分区表(Partition table);第511-512字节:主引导记录签名(0x55和0xAA)。
其中分区表的作用是将硬盘分为若干个分区,硬盘分区的好处就是在于可以在不同的分区中安装不同的操作系统,但是主引导记录必须知道每个操作系统具体是在哪个分区。
主引导记录的大小总共只有64个字节,其中分为四项,每项16个字节,也就是说,每块硬盘只有4个主分区,只能安装4套操作系统。每个主分区总共16个字节,分为6个部分:
第一个字节:如果为0x80,就表示该主分区是激活分区,控制权要转交给这个分区。四个主分区里面只能有一个是激活的。
第二至四个字节:表示主分区第一个扇区的物理位置(柱面、磁头、扇区号等等)。
第五个字节:表示主分区类型(具体内容比较多在这里就不再过多阐述)。
第六只八个字节:表示主分区的最后一个扇区的物理位置。
第九至十二个字节:表示主分区第一个扇区的逻辑地址。
第十三至十六个字节:表示主分区的扇区总数。
最后一条规定了 主分区的长度,也就是说,主分区的长度最大不能大于2^32,所以,每个分区512个字节的话,整块硬盘的大小不会超过2TB,所以提高硬盘大小只有两个办法:一是提高硬盘扇区总数;二是提高每个扇区的字节数。
第五步:硬盘启动。这个时候系统会优先从四个主分区里面的那个被激活的分区来启动,叫做引导卷启动(Volume boot record,缩写为VBR),卷引导记录的主要作用是,告诉计算机,操作系统在这个分区里的位置。然后,计算机就会加载操作系统了。但是如果系统被安装在了拓展分区和逻辑分区中,就要通过启动管理器来启动,在这种情况下,计算机读取"主引导记录"前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的"启动管理器"(boot loader),由用户选择启动哪一个操作系统。
6
第六步:内核加载启动。这个时候计算机的操作系统位置已经确定,就要进行内核加载。在内核加载阶段,Ntldr 将首先加载Windows内核 Ntoskrnl.exe 和 硬件抽象层 (HAL). HAL 有点类似于嵌入式操作系统下的BSP(Borad support package),这个抽象层对硬件底层的特性进行隔离,对操作系统提供统一的调用接口,操作系统移植到不同硬件时只要改变相应的 HAL 就可以,其它的内核组件不需要修改,这个是操作系统通常的设计模式。
接下来Ntldr 从HKEYLOCAL MACHINE\SYSTEM\CurrentControlSet 下读取这台机器安装的驱动程序,然后依次加载驱动程序。驱动程序加载完成后,Windows做如下设置:
- 创建系统环境变量
- 启动 win32.sys ,这个是Windows子系统的内核模式部分。
- 启动 csrss.exe,这个是Windows子系统的用户模式部分。
- 启动 winlogon.exe
- 创建虚拟内存页面文件
- 对一些必要的文件进行改名
最后,我们就能看见那熟悉的蓝天白云出现在我们的电脑屏幕上了
转载于:https://blog.51cto.com/13401435/2134288