获取中...

-

Just a minute...

一直好奇计算机是如何启动的?之几天看了几篇文章,记录了一下windows系统的启动过程。

预引导阶段(启动自检阶段)

上个世纪70年代初,”只读内存”(read-only memory,缩写为ROM)发明,开机程序被刷入rom芯片,计算机通电后,第一件事就是读取它。这块芯片里的程序叫做”基本输入输出系统”(Basic Input/Output System),简称为BIOS。
通电自检(Power-On Self Test,POST),这一步主要是读取 BIOS ,然后对内存,CPU,硬盘,键盘等设备进行自检。

引导阶段(初始化启动阶段)

自检阶段完成后,BIOS把控制权转交给下一阶段排在第一的储存设备,计算机读取该设备的第一个扇区,也就是读取最前面的512个字节。如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给”启动顺序”中的下一个设备。这最前面的512个字节,就叫做”主引导记录”(Master boot record,缩写为MBR),之后根据 BIOS 指定的启动顺序,找到可以启动的优先启动设备,比如本地磁盘,CD Driver , USB 设备等等,然后准备从这些设备启动系统。

初始化引导载入程序

这个阶段首先从启动分区(比如 C 盘) 加载 Ntldr ,然后Ntldr 做如下设置:
1、内置内存模式,如果是 x86 的处理器,并且操作系统是 32位,则设置为 32-bit flat memory mode,如果是 64 位操作系统 + 64位处理器,则设置为64位内存模式。
2、启动文件系统
3、读取 boot.ini 文件

操作系统选择

这一步时看是否安装了多个操作系统。、
如果计算机中只安装了一个操作系统,或将操作系统列表的显示时间设置为0,那么将不会显示系统启动列表, Windows启动管理器会直接运行 Windows启动加载器(Windows Boot Loader,文件名为Winload. exe)。
如果计算机中同时安装了多个操作系统,Windows启动管理器会根据 BCD 存储中的内容创建并显示一个系统启动列表,用户可以从中选择要启动的操作系统。
如果是从休眠状态恢复计算机,那么Windows启动管理器将会运行 Windows 恢复加载器(文件名为 Winresume.exe)。

硬件检测阶段

这一过程中主要需要用到Ntdetect.com和Ntldr。当我们在前面的操作系统选择阶段选择了想要载入的Windows系统之后,Ntdetect.com首先要将当前计算机中安装的所有硬件信息收集起来,并列成一个表,接着将该表交给Ntldr(这个表的信息稍后会被用来创建注册表中有关硬件的键)。这里需要被收集信息的硬件类型包括:总线/适配器类型、显卡、通讯端口、串口、浮点运算器(CPU)、可移动存储器、键盘、指示装置(鼠标)。至此,硬件检测操作已经成功完成。

内核加载阶段

在内核加载阶段,Ntldr 将首先加载Windows内核 Ntoskrnl.exe 和 硬件抽象层 (HAL)。 HAL 有点类似于嵌入式操作系统下的BSP(Borad support package),这个抽象层对硬件底层的特性进行隔离,对操作系统提供统一的调用接口,操作系统移植到不同硬件时只要改变相应的 HAL 就可以,其它的内核组件不需要修改,这个是操作系统通常的设计模式。
接下来Ntldr 从HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet 下读取这台机器安装的驱动程序,然后依次加载驱动程序。
驱程序加载完成后,Windows做如下设置:
1、创建系统环境变量
2、启动 win32.sys ,这个是Windows子系统的内核模式部分。
3、启动 csrss.exe,这个是Windows子系统的用户模式部分。
4、启动 winlogon.exe
5、创建虚拟内存页面文件
6、对一些必要的文件进行改名,(主要是驱动文件,如果更新后,需要在下次重启前改名)

初始化内核阶段

在这一阶段中主要会完成这四项任务:创建Hardware注册表键、对Control Set注册表键进行复制、载入和初始化设备驱动,以及启动服务。
** 创建Hardware注册表键 **
首先要在注册表中创建Hardware键,Windows内核会使用在前面的硬件检测阶段收集到的硬件信息来创建HKEY_LOCAL_MACHINE/Hardware键,也就是说,注册表中该键的内容并不是固定的,而是会根据当前系统中的硬件配置情况动态更新。
** 对Control Set注册表键进行复制 **
如果Hardware注册表键创建成功,那么系统内核将会对Control Set键的内容创建一个备份。这个备份将会被用在系统的高级启动菜单中的“最后一次正确配置”选项。例如,如果我们安装了一个新的显卡驱动,重启动系统之后Hardware注册表键还没有创建成功系统就已经崩溃了,这时候如果选择“最后一次正确配置”选项,系统将会自动使用上一次的Control Set注册表键的备份内容重新生成Hardware键,这样就可以撤销掉之前因为安装了新的显卡驱动对系统设置的更改。
** 载入和初始化设备驱动 **
在这一阶段里,操作系统内核首先会初始化之前在载入内核阶段载入的底层设备驱动,然后内核会在注册表的HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services键下查找所有Start键值为“1”的设备驱动(图4)。这些设备驱动将会在载入之后立刻进行初始化,如果在这一过程中发生了任何错误,系统内核将会自动根据设备驱动的“ErrorControl”键的数值进行处理。“ErrorControl”键的键值共有四种,分别具有如下含义:
0,忽略,继续引导,不显示错误信息。
1,正常,继续引导,显示错误信息。
2,恢复,停止引导,使用“最后一次正确配置”选项重启动系统。如果依然出错则会忽略该错误。
3,严重,停止引导,使用“最后一次正确配置”选项重启动系统。如果依然出错则会停止引导,并显示一条错误信息。

启动服务

系统内核成功载入,并且成功初始化所有底层设备驱动后,会话管理器会开始启动高层子系统和服务,然后启动Win32子系统。Win32子系统的作用是控制所有输入/输出设备以及访问显示设备。当所有这些操作都完成后,Windows的图形界面就可以显示出来了,同时我们也将可以使用键盘以及其他I/O设备。

相关文章
评论
分享
  • mbr引导区病毒

    改编一个mbr引导区病毒。 功能一个简单的病毒(不能传播的假病毒),通过改写mbr,达到不能开机的效果😬 mbrMBR是硬盘的主引导记录,也就是硬盘的0柱面、0磁头、1扇区称为主引导扇区。mbr占用512个字节(200h),它用于...

    mbr引导区病毒
  • windows消息钩取

    windows是一个消息驱动式系统。windows消息提供在应用程序与应用程序之间,应用程序与windows系统之间通信的手段。应用程序想要实现的功能由消息触发,通过对消息的响应和处理完成。 windows消息机制windows是...

    windows消息钩取
  • 网鼎杯部分wp

    pwnboom1分析远程已经打不通了,远程的偏移和本地的偏移不一样,只能复现一下本地的了。 首先看到流程图,代码量很大,有很大的switch语句和嵌套结构,可能是虚拟机或者是解析器。 从下图看出是一个C语言的解析器。 然后看了...

    网鼎杯部分wp
Please check the parameter of comment in config.yml of hexo-theme-Annie!