【技术】Windows启动架构浅解

你可能知道,每台计算机遵循一个基本的启动流程,即BIOS/UEFI -> 引导加载器 -> 操作系统,这其中:

  • BIOS(Basic Input/Output System)/UEFI(Unified Extensible Firmware Interface)负责将一切最底层硬件设施处理好。在此之后,根据分区表和引导模式的不同,加载相应位置的引导加载程序(BIOS及UEFI Legacy引导模式会跳转至MBR,UEFI引导则见微软文档)。用不严谨的话说,一般情况下BIOS配MBR,UEFI配GPT。
  • Windows的引导加载程序根据系统版本不同分为NT 5.X版本的NTLDR(NT Loader)和NT 6.X及之后的BOOTMGR(Boot Manager)。从名字也看的出来,前者主要定位服务于NT内核,后者则是定位为了一个引导管理器,因此后者对其他系统的兼容性会比前者好一些。两者的主要区别在于BCD文件的存放位置引导功能的支持,NTLDR使用boot.ini作为引导管理器的引导项和数据文件,而BOOTMGR则在一般情况下使用一个位于隐藏分区内的BCD文件。不出意外的,BOOTMGR在各方面的支持都比NTLDR好。


引导加载器阶段:引导加载器使用一个特定的数据文件来存储启动项、启动文件和启动参数,供用户选择启动项和高级启动选项,文件位置见上。
操作系统阶段,本文针对NT 6.X及后续版本的Windows系统。在本文中,将引导加载器会执行System32目录下的winload.exe或winload.efi程序定义为实际系统启动流程的开始,将用户登录后启动explorer的操作定义为结束。

  • 首先,winload.exe/winload.efi将控制权接管,并加载位于同一目录下的ntoskrnl.exe(NT OS Kernel),即操作系统内核。
  • 然后,smss.exe(Session Management Service System,会话管理服务系统)进行初始化工作。它负责创建本地进程间通信端口(LPC Port)对象,加载Win32k.sys子系统内核模块),并运行注册表中指定于HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/BootExecute项下的程序(例如系统启动时chkdsk检查磁盘的操作)。
  • 接下来是初始化页面文件和环境变量,以及设置系统注册表
  • 系统随后启动lsass.exeLocal Security Authority Service,本地安全认证服务)和csrss.exeClient Server Run-Time Subsystem,客户端服务器运行时子系统)。前者负责处理系统权限相关的初始化,后者则支持Windows的图形界面和命令行接口。
  • winlogon.exe进程接着启动那些在Windows服务中被标记为开机自启的服务(许多这样的服务通过svchost.exe托管)。
  • 在用户登录前,LogonUI组件会被激活,提供用户选择账户的界面。这里存在一点讨论空间:传统上认为,在用户登录之前,LogonUI已经触发userinit.exe来准备登录后的桌面环境,包括启动explorer.exe和其他用户定义的启动项,以及DWM(桌面窗口管理器)。不过这部分细节可能因不同的Windows版本而有所变化。

更硬核的.jpg

参考:针对 Windows 启动问题的高级疑难解答
Windows 启动过程

本文遵循CC-BY-SA 4.0协议
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇