zoukankan      html  css  js  c++  java
  • Windows 启动顺序详解

    本文详细阐述 windows 操作系统的启动顺序,以方便IT从业者对windows 启动问题的分析和解决。

    windows 的启动过程包括以下几个阶段:

    启动自检阶段

    这个阶段主要是读取 BIOS ,然后内存,CPU,硬盘,键盘等设备进行自检。这个阶段在屏幕上显示就是自检的那些打印信息。

    屏幕显示:自检的打印信息

    初始化启动阶段

    这个阶段根据 BIOS 指定的启动顺序,找到可以启动的优先启动设备,比如本地磁盘,CD Driver , USB 设备等等,然后准备从这些设备启动系统。

    屏幕显示:黑屏

    Boot 加载阶段

    这个阶段首先从启动分区(比如 C 盘) 加载 Ntldr ,然后Ntldr 做如下设置:

    1. 设置内存模式,如果是 x86 的处理器,并且操作系统是 32位,则设置为 32-bit flat memory mode, 如果是 64 位操作系统 + 64位处理器,则设置为64位内存模式。
    2. 启动文件系统
    3. 读取 boot.ini 文件

    屏幕显示:黑屏,如果按F8或者多系统时会显示启动选项菜单。

           

    检测和配置硬件阶段

    这个阶段检查和配置一些硬件设备,它们分别是:

    • 系统固件,比如时间和日期
    • 总线和适配器
    • 显示适配器
    • 键盘
    • 通讯端口
    • 磁盘
    • 软盘
    • 输入设备(如鼠标)
    • 并口
    • 在ISA总线上运行的设备

    屏幕显示:黑屏

    内核加载阶段

    在内核加载阶段,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. 对一些必要的文件进行改名,(主要是驱动文件,如果更新后,需要在下次重启前改名)

    屏幕显示:显示windows logo 界面和进度条

    登录阶段

    这个阶段会做如下几件事:

    1. 启动机器上安装的所有需要自动启动的 windows 服务

    2. 启动本地安全认证 Lsass.exe

    3. 显示登录界面

    屏幕显示:显示登录界面

    本文参考如下文档:

    Troubleshooting the Startup Process

    在一些基于windows的设备中,我们希望在程序控制windows重启时,windows每次都能正常启动,但有时候windows会遇到种种原因无法启动,这时我们需要定位到底是在启动什么步骤时出错,为了定位故障原因,我们需要将windows 的启动日志记录下来。

    记录启动日志的方式是

    在 boot.ini 中加一个 /bootlog 的参数,加了这个参数后,机器重启后,会自动把启动的日志记录在 c:\windows 目录下的 ntbtlog.txt 文件中。通过查看这个日志文件,我们可以了解windows启动过程中的一些详细情况。

    下面列出boot.ini 的所有参数:

    转自:Windows XP 和 Windows Server 2003 的 Boot.ini 文件的可用开关选项

    /basevideo

    /basevideo 开关通过使用与所有视频适配器都兼容的视频驱动程序来强制系统进入标准 640x480 16 色 VGA 模式。该开关允许您在选择了错误的视频分辨率或刷新频率时加载系统。请将该开关与 /sos 开关一起使用。如果安装了新的视频驱动程序,而该驱动程序工作不正常,则可使用该参数来启动操作系统。然后可以删除、更新或回滚到有问题的视频驱动程序。

    回到顶端

    /baudrate=number

    该开关设置用于内核调试的调试端口的波特率。例如,可键入 /baudrate=9600。在连接有调制解调器时,默认的波特率是每秒 9600 千位 (Kbps)。当使用假调制解调器电缆连接时,默认的波特率是 115,200 Kbps。9,600 是通过调制解调器进行远程调试的正常速率。如果在 Boot.ini 文件中存在该开关,则自动启用 /debug 开关。 
    有关调制解调器配置的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

    148954  如何使用调制解调器设置远程调试会话

    有关无调制解调器配置的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

    151981  如何使用无调制解调器电缆设置远程调试会话

    回到顶端

    /crashdebug

    该开关在启动操作系统时加载内核调试程序。该开关将保持非活动状态直到出现 Stop 错误消息。/crashdebug 开关对于处理随机性内核错误非常有用。使用该开关,可在 Windows 运行时照常使用 COM 端口。当 Windows 出现故障时,该开关将把该端口转换为调试端口。(该操作将启动远程调试。) 
    有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

    151981  如何使用无调制解调器电缆设置远程调试会话

    回到顶端

    /debug

    该开关在启动 Windows 时打开内核调试程序。如果想要通过 COM 端口打开 Windows 系统实时远程调试功能,则该开关可随时通过连接到计算机的主机调试程序激活。与 /crashdebug 开关不同,/debug 无论是否正在调试都将使用 COM 端口。当您在调试有规律地重复出现的问题时可使用该开关。 
    有关远程调试的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

    121543  设置远程调试

    回到顶端

    /debugport=comnumber

    该开关指定用作调试端口的通信端口,其中 number 是要使用的通信端口,例如 COM1。默认情况下,如果 COM2 端口存在,则 /debugport 将使用 COM2 端口。否则,该开关将使用 COM1。如果在 Boot.ini 文件中包含该开关,/debug 开关将会被激活。 
    有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

    151981  如何使用无调制解调器电缆设置远程调试会话

    回到顶端

    /maxmem=number

    该开关指定 Windows 可以使用的 RAM 数量(以字节为单位)。例如,如果您希望 Windows 使用少于 64 MB 的内存,则使用 /maxmem=64 开关。 
    但是,/maxmem 开关不将内存空洞计算在内。 因此,我们建议您改为使用 /burnmemory 开关。/burnmemory 开关会将内存空洞计算在内。
    例如,如果您使用 /Maxmem=64 开关,而系统需要 64 MB 的内存才能加载,则由于存在内存空洞,系统实际可用的内存可能不足 64 MB。在这种情况下,Windows 将不会启动。 
    有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

    108393  Windows Boot.ini 文件中的 /maxmem 开关

    回到顶端

    /noguiboot

    该开关禁用 Windows 启动时显示进度栏的位图。(进度栏就出现在登录提示之前。)

    回到顶端

    /nodebug

    该开关用于关闭调试功能。如果在某个程序软件中有硬件调试断点,这种情况可能导致出现 Stop 错误。

    回到顶端

    /numproc=number

    该开关设置 Windows 启动时使用的处理器数。使用此开关,可以强制多处理器系统仅使用指定数量的处理器 (number)。该开关可帮助您解决性能问题和有缺陷的 CPU 的问题。

    回到顶端

    /pcilock

    对于基于 x86 的系统,该开关阻止操作系统为 Peripheral Connect Interface (PCI) 设备动态分配硬件输入、硬件输出和中断请求资源。使用该开关,BIOS 可以配置这些设备。

    回到顶端

    /fastdetect:comnumber

    该开关将关闭 Ntdetect.com 文件对指定端口上串行鼠标和总线鼠标的检测功能。如果在启动过程中您在串行端口上连接了除鼠标以外的组件,则可使用该开关。例如,键入 /fastdetect:comnumber,其中 number 是串行端口号。可使用逗号分隔多个端口号以关闭一个以上的端口。如果使用 /fastdetect 但未指定通信端口,则将关闭所有通信端口上的串行鼠标检测功能。 
    注意:在包括 Windows NT 4.0 在内的 Windows 早期版本中,该开关被命名为 /noserialmice。 
    有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

    131976  如何禁用串行端口上的设备检测

    回到顶端

    /sos

    /sos 开关在设备驱动程序被加载时显示其名称。默认情况下,Windows Loader 屏幕仅显示进度点。可将该开关与 /basevideo 开关一起使用以确定引发故障的驱动程序。 
    有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

    99743  Windows 2000 或 Windows NT 中 BOOT.INI 文件的功能

    回到顶端

    /PAE

    在 Boot.ini 中使用 /PAE 开关及相应的条目可允许支持物理地址扩展 (PAE) 模式的计算机正常启动。在安全模式下,即使指定了 /PAE 开关,计算机也使用正常内核启动。

    回到顶端

    /HAL=filename

    使用该开关,可定义在启动过程中实际加载的硬件抽象层 (HAL)。例如,键入 /HAL=halmps.dll 加载 System32 文件夹中的 Halmps.dll。 该开关可用于在将该文件重命名为 Hal.dll 之前测试一个不同的 HAL。此外,该开关在您尝试在多处理器模式启动和单处理器模式启动之间进行切换时也很有用。为此,请将该开关与 /kernel 开关一起使用。

    回到顶端

    /kernel=filename

    使用该开关,您可以定义在启动过程中实际加载的内核。例如,键入 /kernel=ntkrnlmp.exe 加载 System32 文件夹中的 Ntkrnlmp.exe。 使用该开关,您可以在启用了调试功能的满载调试代码的内核与正常内核之间进行切换。

    回到顶端

    /bootlog

    该开关打开启动日志记录功能,启动日志被记录到 systemroot\Ntbtlog.txt 文件中。有关启动日志的更多信息,请参见 Windows 帮助。

    回到顶端

    /burnmemory=number

    该开关指定 Windows 不能使用的内存数(以兆字节为单位)。可使用该参数来确定性能问题或其他与 RAM 消耗有关的问题。例如,键入 /burnmemory=128 将 Windows 可用的物理内存减少 128 MB。

    回到顶端

    /3GB

    该开关强制基于 x86 的系统为程序分配 3 GB 的虚拟地址空间,为内核及可执行组件分配 1 GB 的虚拟地址空间。程序在设计上必须能够利用额外的内存地址空间。使用该开关,用户模式程序能够访问 3 GB 的内存而不是通常 Windows 分配给用户模式程序的 2 GB 的内存。该开关将内核的内存起始位置移至 3 GB 处。某些 Microsoft Exchange Server 2003 和 Microsoft Windows Server 2003 的配置可能需要使用该开关。
    有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

    823440  在基于 Windows Server 2003 的系统上的 Exchange Server 2003 中使用 /3GB 开关

    有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

    171793   有关应用程序使用 4GT RAM 调节的信息

    回到顶端

    /safeboot:parameter

    该开关使 Windows 以安全模式启动。该开关使用以下参数:

    • minimal
    • network
    • safeboot:minimal(alternateshell)

    /safeboot:parameter 参数可与其他 Boot.ini 参数结合使用。下面的示例给出了当从启动恢复菜单中选择一个安全模式选项时实际使用的参数。

    • 带网络连接的安全模式
      /safeboot:minimal /sos /bootlog /noguiboot
    • 带网络连接的安全模式
      /safeboot:network /sos /bootlog /noguiboot
    • 带命令提示的安全模式
      /safeboot:minimal(alternateshell) /sos /bootlog /noguiboot

    注意/sos/bootlog 和 /noguiboot 开关在这些设置中并不是必需的,但这些开关会有助于排除故障。当您按 F8 并选择一种模式后,这些开关会被采用。

    回到顶端

    /userva

    可使用该开关自定义当使用 /3GB 开关时分配给进程的内存量。该开关允许更多的页表项目 (PTE) 内核内存,同时仍然保留将近 3 GB 的进程内存空间。 
    注意:Microsoft 产品支持服务极力建议将对 /USERVA 开关使用的内存范围限制在 2900-3030 内。此范围足以为当前发现的所有问题提供足够大的系统页表项目池。通常,设置为 /userva=2900 时提供的数量与系统页表项目的最大可用数接近。
    有关如何使用 /USERVA 开关的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

    316739  如何使用 /userva 和 /3GB 开关将用户模式空间调整为介于 2 GB 和 3 GB 之间的值

    有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

    810371  在运行 Exchange Server 的基于 Windows Server 2003 的计算机上使用 /Userva 开关

    323427  如何在 Windows Server 2003 环境中手动编辑 Boot.ini 文件

    317526  如何在 Windows Server 2003 中编辑 Boot.ini 文件

    317521  BOOTCFG 命令及其用法说明

    289022  如何在 Windows XP 中编辑 Boot.ini 文件

    291980  Bootcfg 命令及其用法讨论

    回到顶端

    /redirect

    可使用该开关在基于 Windows Server 2003 Enterprise Edition 的计算机上启用紧急管理服务 (EMS)。有关 EMS 的其他信息,请在“Windows 帮助和支持”中搜索“紧急管理服务”。 
    要在基于 x86 的计算机上通过编辑 Boot.ini 来启用 EMS,需要编辑 Boot.ini 文件的“[boot loader]”和“[operating systems]”部分。为此,请配置下列条目:

  • 相关阅读:
    省选测试42
    省选测试41
    省选测试40
    省选测试39
    python海龟画图生成星星
    Python-列表简介
    Linux系统中设置默认的Java版本
    虚拟机无线网卡桥接失败
    pycharm设置启动图标
    禁用vscode硬件加速
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2350634.html
Copyright © 2011-2022 走看看