过去经常为了优化家里的Windows 7系统启动时间所苦恼,为此我还特地买了块固态硬盘和可以做Smart Cache的主板进行优化,此后就经常用安全卫士360的启动时间优化作为评测,看到经过优化的电脑可以用17秒时间启动系统并且在安全卫士360中显示击败了全国99%的电脑,不禁飘飘然起来。然而最近工作用的笔记本电脑因为工作原因升级了Windows 8 RTM版,却惊讶的发现在我的大黑Thinkpad W520上,竟然启动时间是7秒,没看错,真的是叹为观止的7秒!!! 比较一下同样用SSD启动的家中的Mac Air竟然还要胜上一筹。那么究竟Windows 8中暗藏了什么玄机呢?让我们一探究竟!
想想大家是不是都曾经为了优化启动时间苦恼过?聪明的你也许会采用过去我常用的方式-休眠方式,但是这种方式显然由于要保持通电状态维持内存状态而或者不利于笔记本电池的寿命或者对台式机还是费电。Windows 8的出现就是为了满足我们可以高效快速的冷启动。其实在Windows 7中已经对启动过程做了适当的优化和改进,例如并行加载设备驱动和服务启动,但是Windows 8显然更进了一步,确切的说Windows 8创新性的结合了冷启动和休眠方式来加速启动过程。
那么Windows 7中的启动和关机过程涉及了哪些环节呢?
一个完整的关机过程包括了:
选择开始菜单中的关闭按钮或按下电源按钮或者应用程序通过调用 API ExitWindowsEx() 或 InitiateShutdown() 等启动关机。
Windows 系统将关机信息广播给所运行应用程序,让他们有机会来保存活跃数据和设置状态;应用程序还可以请求一点额外的时间。
Windows 系统将关闭每个登陆的用户会话。
Windows 系统将系统关闭信息发送给所有服务并告知关机过程已经开始,随后有序的将其关闭,关闭过程是并行的停止服务,对于具有依赖关系的服务串行关闭。如果服务没有响应,系统将强制关闭。
系统也会告知所有设备,将其关闭。
Windows关闭自身系统会话(会话0)
Windows系统将所有挂起的数据刷新到硬盘并确保完全保存。
Windows系统通过ACPI电源接口通知底层电源模块关机。
对于系统的启动过程呢?(我还将在未来的无盘SAN Boot引导Windows Server 2012的博客里面展开论述)
按下电源按钮后, PC 的固件启动开机自检过程(大家熟知的POST),并加载固件设置。这个预引导过程结束时会检测到一个有效的系统磁盘才继续。(当然我们需要在BIOS中设置检测到硬件后的引导顺序)
Firmware 的嵌入式启动程序读取主引导记录 (MBR),随后启动 Bootmgr.exe。Bootmgr.exe 在 Windows 启动分区上查找并启动 Windows 加载程序 (Winload.exe) 。
加载启动 Windows 内核所需的基本驱动程序然后Windows的内核程序开始运行,在此过程加载系统注册表配置单元和附加标记为 BOOT_START 的驱动程序到内存中。
Windows内核将控制传递给会话管理器进程 (Smss.exe) 初始化系统会话,然后加载和启动未标记为 BOOT_START的设备和驱动程序。
Winlogon.exe 启动,显示用户登录屏幕,服务控制管理器启动服务,相应的组策略脚本运行。当用户登录时,Windows 将创建该用户的会话。
Explorer.exe 启动,系统将创建初始化桌面,并显示它的桌面窗口管理器 (DWM)进程。
从上面的关机过程中,可以发现系统需要关闭所有的用户会话和内核会话,关闭服务和设备然后才会彻底关机。
而 Windows 8可以快速启动的关键改变在于:
在 Windows 8中会关闭用户会话,但不再关闭内核会话而是以柔性的休眠方式处理。相比充分休眠方式,由于应用程序使用的内存页很多,相对的如果只保留系统会话 0 的休眠状态数据实际是会小很多的,这样会大大减少休眠所用到的内存回写到磁盘的时间。休眠状态就是指写到磁盘 (hiberfil.sys) 上的文件有效保存系统状态和内存的内容信息,然后恢复和还原的时候在将内容读取回内存。Windows 8的冷启动使用了这种技术,读取休眠文件和重新初始化驱动程序的时间会快很多,对于大多数主机上会有30-70%在的显著提升。这一点也比较容易看出来,聪明的各位看官你懂得:
从休眠方式恢复的速度显然比重新初始化恢复快很多(这不就是投机的我们之前会可以选择休眠的原因吗)。另外,Windows 8还增加了多阶段恢复的功能,类似单机系统的分布式作业拆解,例如如果你是i5或i7四核的主机将充分利用所有内核并发读取和解压缩休眠Hibernate文件,要知道解压缩还是比较消耗CPU的;这个功能对于我们从休眠状态恢复系统同样有了很大的提升!
另外值得一提的如何对待休眠文件,在Windows 8系统中用 dir /s /ah hiberfile.sys 也许你会发现这是相当大的一个。默认是以物理内存的 75%作为休眠文件的大小。基本上是作为系统为了进入休眠状态时写出的状态数据所保留的大小。实际上作为快速启动,它通常只是是物理内存的 10 ~15% (根据驱动程序、 服务和其他因素而异)。
另一个重要 Windows 8 的快速启动特点是,尽管这种方式不会完全枚举所有"即插即用"的设备驱动程序,但快速驱动模式仍然会初始化驱动程序。因此在快速启动方式下的冷启动仍然可以和从前一样从容应对硬件环境的改变。当然大家如果有条件用SSD快速启动的效果会更加明显,你也懂得即便是读少量的休眠文件固态盘也比机械硬盘给力。
还有一个值得介绍的其实也多余一说的是如果你的PC机不算老,那么当然对比用老的BIOS启动,新的UEFI(统一可扩展固件接口)BIOS的启动速度还是快很多的。UEFI在通电后会首先初始化CPU和内存,与BIOS不同,接下来其他设备的加载和初始化则将有可能被并行处理,这将大大提高系统的启动速度。当然现在绝大多数主机的主板都支持UEFI模式:)
最后,检查一下你的Windows 8是不是启动了这个功能吧,当然默认应该是打开的:
在命令行运行powercfg /a , 可以看到我的系统已经启用了快速启动功能。
通过控制面板,也可以设置和查看:
最后说明一下,大家可能知道可以通过运行 powercfg /hibernate off命令禁用休眠和回收磁盘空间,不过看了前面介绍的快速启动部分也许你该明白这样做,不仅仅将禁用休眠连快速启动功能也损失了。如果你想直接回到Windows 7
的启动状态,可以运行shutdown /s /full / t 0 关机或者选择从图形界面重新启动都会触发一个旧的冷启动过程,但是为什么要退回去呢?
新闻热点
疑难解答
图片精选