标题:Windows系统启动流程

news/2024/11/13 16:47:21/文章来源:https://www.cnblogs.com/rebrobot/p/18540265

 

 

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

 

一,启动自检阶段

 

这个阶段主要是读取 BIOS ,然后内存,CPU,硬盘,键盘等设备进行自检。这个阶段在屏幕上显示就是自检的那些打印信息。在打开计算机电源时,首先开始电源启动自检过程。在BIOS中包含一些基本的指令,能够帮助计算机在没有安装任何操作系统的情况下进行基本的启动。电源启动自检过程首先会从BIOS中载入必要的指令,然后进行如下一系列的自检操作:进行硬件的初始化检查,例如检查内存的容量等。验证用于启动操作

 

系统的设备是否正常,例如,检查硬盘是否存在等。从CMOS中读取系统配置信息。在完成了电源启动的自检之后,每个带有固件的硬件设备,如显卡和磁盘控制器,都会根据需要完成内部的自检操作。

 

二,初始化启动阶段

 

这个阶段根据 BIOS 指定的启动顺序,找到可以启动的优先启动设备,比如本地磁盘,CD Driver , USB 设备等等,然后准备从这些设备启动系统。在完成了电源启动自检过程之后,存储在CMOS中的设置,例如磁盘的引导顺序等,能够决定由哪些设备来引导计算机。例如,可以设置磁盘的引导顺序为首先通过A盘引导,其次才通过C盘引导,则系统会首先尝试用A盘引导系统,如果A盘存在并可引导,则通过A盘引导。如果A盘不存在,则通过C盘引导系统。如果A盘存在,但不是引导盘,则系统地提示系统不可引导。 一般来说通常会使用硬盘引导。在进行硬盘引导时,启动过程通常按照如下的步骤进行: 

 

系统首先检测打开电源的硬盘。若该硬盘是启动盘,BIOS就将主引导记录(Main Boot Record――MBR,位于启动磁盘的第一个扇区,其中主要包含引导代码(Boot Code)和分区表(Partition Table)数据。引导代码主要用于引导系统。而分区表则主要用于标识基本分区和扩展分区。)中的引导代码载入内存。接着,BIOS会将启动过程的运行交给MBR来进行。计算机搜索MBR中的分区表,找出活动分区(Active Partition)。计算机将活动分区的第一个扇区中的引导代码载入到内存。引导代码检测当前使用的文件系统是否可用。 引导代码查找ntldr文件,找到之后启动它。BIOS将控制权转交给ntldr,由ntldr完成操作系统的启动。(注意,Win7与此不同,用的是bootmgr,请参考本文后面部分)

 

三,Boot 加载阶段

 

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

1.内置内存模式,如果是 x86 的处理器,并且操作系统是 32位,则设置为 32-bit flat memory mode,如果是 64 位操作系统并且是64位处理器,则设置为64位内存模式。

2.启动文件系统

3.读取 boot.ini 文件

 

四,检测和配置硬件阶段

 

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

l         系统固件,比如时间和日期

l         总线和适配器

l         显示适配器

l         键盘

l         通讯端口

l         磁盘

l         软盘

l         输入设备(如鼠标)

l         并口

l         在ISA总线上运行的设备

 

五,内核加载阶段

 

在内核加载阶段,Ntldr 将首先加载Windows内核 Ntoskrnl.exe 和 硬件抽象层 (HAL). HAL对硬件底层的特性进行隔离,对操作系统提供统一的调用接口,操作系统移植到不同硬件时只要改变相应的 HAL 就可以,其它的内核组件不需要修改,这个是操作系统通常的设计模式。接下来Ntldr 从HKEY_LOCAL_ MACHINE\SYSTEM\CurrentControlSet 下读取这台机器安装的驱动程序,然后依次加载驱动程序。这个阶段系统内核会首先初始化底层设备驱动,然后操作系统内核会在注册表的HKEY_LACAL_MACHINE\System\CurrentControlSet\Services键下查找Start键值为0,和1的设备驱动。Start值的含义:

StartType 值分0、1、2、3、4,数值越小就越早启动,SERVICE_BOOT_START(0)是内核刚刚初始化之后,此时加载的都是与系统核心有关的重要的驱动程序,例如磁盘驱动;SERVICE_SYSTEM_START(1)稍晚一些;SERVICE_AUTO_START(2)是在登录界面出现的时候开始,如果登录较快,很可能驱动还没有加载就登录进去了;SERVICE_DEMAND_START(3)是在需要的时候动态加载;SERVICE_DISABLED(4)是禁止加载。

l         0 == 由核心装载器装载

l         1 == 由I/O子系统装载

l         2 == 自动启动

l         3 == 手工启动

l         4 == 禁止启动

这些设备驱动会在载入后后立即被初始化,如果发生错误,内核会根据该键值下的ErrorControl键的值进行处理,这个值共有4种:

(1),0:忽略,继续引导,并且不显示出错信息;

(2),1:正常,继续引导,显示出错信息;

(3),2:恢复,停止引导,使用“最后一次正确的配置”重启系统,若是依然出错则忽略;

(4),3:严重,停止引导,使用“最后一次正确的配置”重启系统,如果依然出错停止引导,并显示一条错误信息。

 

六,驱动程序加载完成后,Windows做如下设置:

 

内核会启动会话管理器(Session Manager),这是一个名为smss.exe 的程序,是Windows系统中第一个创建的用户模式进程,其作用表现如下: 

1. 创建系统环境变量 

2. 启动 win32.sys ,这个是Windows子系统的内核模式部分。

3. 启动 csrss.exe,这个是Windows子系统的用户模式部分。

4. 启动 winlogon.exe

5. 创建虚拟内存页面文件

6. 对一些必要的文件进行改名,(主要是驱动文件,如果更新后,需要在下次重启前改名)

 

七,登录阶段

 

在这一过程中,Windows 子系统启动的winlogon.exe系统服务提供对Windows 用户的登录和注销的支持。Winlogon.exe 可以完成如下一些工作: 

1.启动服务子系统(services.exe),也称服务控制管理器(Service Control Manager, SCM)。 

2.启动本地安全授权(Local Security Authority , LSA)过程(lsass.exe)。

3.显示登录界面

一个图形化的识别和认证组件收集用户的帐号和密码,然后将这些信息安全地传送给LSA以进行认证处理。如果用户提供的信息是正确的,能够通过认证,就允许用户对系统进行访问。 

 

八,WIN7与XP启动过程的区别:

 

1. 电脑开机后,开始启动BIOS,开始BIOS自检。

2. 通过自检后,bios找到硬盘上的主引导记录MBR.

3. MBR开始读取硬盘分区表DPT,找到活动分区,找到活动分区中的分区引导记录PBR,并且把控制权交给PBR.

4. PBR搜索活动区中的启动管理器bootmgr,找到后,PBR把控制权交给bootmgr(相当于xp里的ntldr文件)。

5. Bootmgr寻找活动分区中的boot文件夹中的BCD文件(启动配置数据,相当于xp里的boot.ini文件)。

6. 找到BCD后,Bootmgr首先从BCD 中读取启动管理器bootmgr菜单的语言版本信息,然后再调用BOOTMGR与相应语言的BOOTMGR.EXE.MUI (在boot文件夹对应语言文件夹中)组成相应语言的启动菜单,之后在显示器上显示多操作系统选择画面。

7. 如果存在多个操作系统而且系统设置的等待时间不是0,那么屏幕就显示多个操作系统的选择界面。如果没有多系统,那么直接进入windows 7系统,不显示选择界面。

8. 选择windows 7系统后,bootmgr就会读取BCD里win7系统所在的盘里的windows\system32\winload.exe文件,并且将控制权交给winload.exe。

9. Winload.exe加载windows7内核、硬件、服务等,之后加载桌面等信息,从而启动整个windows 7系统。

综上Win7的启动过程概括一下就是:BIOSàMBRàDPTàPBRàBootmgràBCDà系统选择界面à选择windows7àWinload.exeà内核加载等à启动整个windows7系统。

 

更多参考文献:

http://www.win7china.com/html/16231.html

http://blog.csdn.net/menggucaoyuan/article/details/7246567

http://bbs.pediy.com/showthread.php?t=145414

http://www.win7china.com/html/16231.html

http://jingyan.baidu.com/article/eb9f7b6dac24c3869364e801.html

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/831897.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手把手教你搭建OpenDRIVE道路模型(上)

在自动驾驶技术的研发与验证阶段,OpenDRIVE格式的数据被广泛应用于仿真测试平台的搭建,帮助开发者在虚拟环境中对算法进行高效迭代与优化,从而加速自动驾驶技术的商业化进程,推动汽车行业向更加智能化、自主化的未来发展。 OpenDRIVE作为一种高度专业化的道路建模标准…

SpringBoot项目引入Elasticsearch时启动失败

1、前情提要: https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/installation.html 以上是Elasticsearch对接Java的官方文档(pom依赖部分)我本地Windows安装的Elasticsearch也是8.15.3版本 2、启动报错 *************************** APPLICA…

四款超实用的免费报表工具推荐!轻松选择适合你的数据神器

现如今,报表工具逐渐成为企业数据分析和决策的重要一环。本文将为大家介绍四款免费报表工具,通过这些工具,用户可以轻松地将原始数据转换为直观易懂的报表,帮助决策者更快地获取信息和做出判断。无论是寻求简单易用、实时更新,还是需要强大的数据分析能力的用户,都能在这…

联训题单 / 集训杂题纪要

UPD: 新增了杂题选改栏 总览题单 进度 备注数据结构1 4/24 数据结构可爱捏 >_<搜索 模拟 All Clear/10 搜索可爱捏 >_<数学1 0/11 数学不可爱捏 `-字符串 6/13 哈希可爱捏 >_<杂题选改 7 杂题专题没了,杂题倒是有不少数据结构 1 STEP 读假题了,读成下面这…

Python 提取PowerPoint文档中的图片

如果你需要在多个PowerPoint演示文稿中使用相同的图片,直接从原始PPT中提取并保存图片可以避免重复寻找和下载。此外,将PPT中的重要图片提取出来可以将其作为备份,以防原文件损坏或丢失。本文将通过以下两个示例介绍如何使用Python提取PPT文档中的图片。Python 提取指定幻灯…

高级语言程序设计课程第七次个人作业

班级:https://edu.cnblogs.com/campus/fzu/2024C 作业要求:https://edu.cnblogs.com/campus/fzu/2024C/homework/13304 学号:102400121 姓名:林永庆 12 从左到右,从上到下,从右到左,从下到上345678总结:菜就多练 反思:菜就多练

解线性方程组迭代法

解线性方程组迭代法 在数值分析中,迭代法是解决大规模线性方程组的重要工具。迭代法可以有效地减少计算复杂度,使得求解效率更高。本文将从前置知识开始,介绍向量和矩阵的范数,再深入探讨求解线性方程组的 Jacobi 和 Gauss-Seidel 迭代法。 一、前置知识:向量和矩阵的范数…

Linux kernel 堆溢出利用方法(二)

本文我们通过我们的老朋友heap_bof来讲解Linux kernel中off-by-null的利用手法。在通过讲解另一道相对来说比较困难的kernel off-by-null + docker escape来深入了解这种漏洞的利用手法。前言 本文我们通过我们的老朋友heap_bof来讲解Linux kernel中off-by-null的利用手法。在通…

wpf项目使用winform控件

环境:Win10、VS2017 一、新建WPF项目 2. WPF项目添加System.Windows.Forms和WindowsFormsIntegration引用 3. 编写WPF窗体代码 3.1. 头部添加引用1 xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 2 xmlns:wfi ="clr-namespac…

Spring带泛型的ApplicationEvent无法监听问题分析(转载)

1 背景 在开发过程中,经常遇到发送事件来通知其他模块进行相应的业务处理;笔者实用的是spring自带的ApplicationEventPublisher和EventListener进行事件的发收; 但是开发时遇到一个问题: 如果事件很多,但是事件模式都差不多,就需要定义很多事件类来分别表示各种事件,例如…

PG 修改表结构提示有试图依赖的处理方法

ALTER TABLE victim ALTER COLUMN victim_belong_url TYPE varchar(1000) USING victim_belong_url::varchar(1000); 修改字段长度 通过修改 pg_attribute 基表的方式来绕开这个限制#通过表名查出attrelid SELECT relname, attname,attnum,attrelid,attname FROM pg_class c,pg…

OMV安装文件管理器filebrowser和照片管理photoprism插件时Pull不了镜像的解决办法

OMV安装文件管理器filebrowser和照片管理photoprism插件安装后不能启动服务或者PULL不了镜像卡着不动都是因为现在国内pull不了镜像的原因 这里有个迷惑的人的地方是很多朋友认为是用docker来pull的镜像,于是增加了docker国内加速源后发现OMV还是拉取不了镜像。解决方法如下:…