windows 启动
windows启动过程
windows 7启动过程:
简略版:
BIOS自检--载入运行MBR--读取DPT,找活动分区(磁盘分区表)--进入活动分区载入运行PBR(分区引导记录)--移权Bootmgr--读取BCD--系统选择界面---选择windows7------Winload.exe加载内核,初始化硬件,初始化服务 --初始化win7桌面环境
详细:
1、电脑加电后,先启动BIOS进行自检,然后加载硬盘的主引导记录MBR,并把控制权交给MBR(MBR在硬盘0磁道的第一个扇区,不属于任何一个分区)
2、MBR读取分区表DPT,找出并 读取活动主分区的引导记录PBR(也叫DBR),PBR再把控制权交给分区下的启动管理器文件 BootMgr
3、 BootMgr读取启动配置\Boot\BCD,根据BCD控制显示启动菜单。在选择启动windows 7后,BootMgr将会按设定启动内核加载程序 Winload.exe
4、Winload加载内核程序(Ntoskrnl.exe)、硬件抽象层(hal.dll)、注册表SYSTEM项(system32\config\system)、设备驱动,然后控制权交给Ntoskrnl.exe
5、Ntoskrnl初始化执行体子系统,并初始化引导的和系统的设备驱动启动程序,为原生应用程序(如SMSS等)初始化运行环境,控制权交给SMSS.exe(会话管理子系统)
6、SMSS初始化注册表,创建系统环境变量,加载Win32子系统(Win32k.sys),启动子系统进程(CSRSS、WinInit、Winlogon),控制权交给WinInit.exe和Winlogon.exe
CSRSS:微软客户端、服务端运行时子系统,管理图形相关任务。
7、WinInit启动服务控制管理器(SCM),本地安全子系统(LSASS),本地会话管理(LSM)
8、Winlogon加载登录界面程序(LogonUI),显示交互式登录对话框。等待用户登录后,根据注册表配置启动UserInit.exe和Explorer.exe
HKLM\SOFTWARE\Microsoft\Windows NT\Current Version\Winlogon\Userinit
HKCU/HKLM\SOFTWARE\Microsoft\Windows NT\Current Version\Winlogon\Shell
9、UserInit启动用户所有自启动进程,建立网络连接,启动生效的组策略
10、Explorer提供交互式图形界面,包括桌面和文件管理。
WinInit:windows核心进程,用来开启vista、win7、win8后台服务程序,关掉会蓝屏
Winlogon:是Windows NT 用户登陆程序,用于管理用户登录和退出
UserInit.exe:确定各种自启动程序的启动顺序。
Explorer.exe:Windows程序管理器或者文件资源管理器,它用于管理Windows图形壳(图形界面),包括桌面和文件管理,删除该程序会导致Windows图形界面无法使用。
winxp 自动过程:
- 预引导:加电自检-->加载运行MBR-->加载运行PBR-->加载初始化Ntldr
- 引导:初始化引导加载程序-->读取Boot.ini选择os-->硬件参数检测-->选择引入硬件配置文件(非必须,只有系统含有多份配置文件是才需要这一步)
- 内核加载:加载Ntoskrnl.exe-->加载硬件抽象层(hal.dll)-->内核载入HKEY_LOCAL_MACHINE/System注册表键-->Ntldr根据前面载入的表键下的Select键的内容判断接下来需要载入哪个Control Set注册表键-->Control Set注册表键决定系统将载入哪些低级驱动程序和服务-->ntldr移权系统内核,内核初始化
- 内核初始化:创建Hardware注册表键、对Control Set注册表键进行复制、载入和初始化设备驱动,以及启动服务。
1)使用前面收集的硬件信息创建HKEY_LOCAL_MACHINE/Hardware键
2)对Control Set注册表键进行备份
3)初始化内核阶载入阶段载入的底层设备驱动,加载并初始化注册表的KEY_LOCAL_MACHINE/System/CurrentControlSet/Services键下所有Start键值为“1”的设备驱动
4)会话管理器启动高层子系统和服务-->启动win32系统(作用:控制所有输入/输出设备以及访问显示设备)-->显示图形界面、鼠标键盘被激活-->会话管理器会启动Winlogon进程-->winlogon进程显示锁屏界面
5)WIN32子系统启动WINLOGON.EXE-->WINLOGON.EXE启动LOCAL SECURITY AUTHORITY(LSASS.EXE)显示登录对话框-->用户登录-->WINDOWS2000/XP会继续配置网络设备和用户环境-->伴随着微软之声和我们熟悉的个性化桌面,WINDOWS2000/XP漫长的启动过程终于完成。
linux阵营:
参考链接:https://linux.cn/article-8807-1.html
linux引导:
grub可以安装到mbr,不论分区是否活动,grub照常起来,grub一起来,管你分区活动不活动。
grub启动流程:
stage1.0(存储在mbr,用来加载下一个stage)-->stage1.5(存储在MBR后面的30KB)-->stage2(显示内核选择画面)
补充:stage1.0非常小,几乎只够用来加载下一个stage。可以加载stage1.5,也可以直接加载stage2。
操作系统的启动分为两个阶段:引导(boot)和启动(startup)。
引导:打开电源开关到内核初始化完成和systemd进程运行成功。
启动:系统引导完成,到系统可操作之间的所有步骤。
引导加载器:GRUB、GRUB2 和 LILO
GRUB 被设计为兼容操作系统多重引导规范,它能够用来引导不同版本的 Linux 和其他的开源操作系统;它还能链式加载专有操作系统的引导记录,比如windows。
linux启动过程:BOIS上电自检-->引导装载程序(grub2的三阶段)-->内核初始化-->启动进程之父systemd
systemd把系统启动分为多个目标态来执行和检测:sysinit.target、basic.target、multi-user.target、graphical.target等。
每个目标态target有一个在其配置文件中描述的依赖集,systemd 需要首先启动其所需依赖,这些依赖服务是 Linux 主机运行在特定的功能级别所要求的服务。当配置文件中所有的依赖服务都加载并运行后,即说明系统运行于该目标级别。
systemd 也会查看老式的 systemV init 目录中是否存在相关启动文件,若存在,则 systemd 根据这些配置文件的内容启动对应的服务。
来自:https://www.jianshu.com/p/c23350967594
来自:
清楚地知道开机启动流程(原理),对于理解和处理系统开机故障有很大帮助。
Linux:
1、首先是bios加电自检、初始化,这个过程会检测相关硬件(cpu、内存、显卡、硬盘等),然后读取一个启动顺序,以硬盘为例,会读取硬盘中的MBR。
2、加载内核 读取/boot里边的配置文件。
3、、启动初始化进程,开始运行/sbin/init
4、、读取/etc/inittab确定运行级别
5、根据/etc/rc.d/rcN.d加载开机启动程序,rcN.d都是链接文件,都指向/etc/rc.d/init.d 再运行/etc/rc.d/rc.local
6、用户登录(3种方式 ssh、命令行、图形化)
7、进入login shell,以命令行为例,首先读取/etc/profile这个全局配置文件,然后再针对当前用户读取家目录中的~/.bash_profile和~/.bash_login和~/.profile
8、最后一步就是打开non-login shell,进入图形化后 手动新建一个终端,但这个shell不读取/etc/profile
Windows:
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 系统,不显示选择界面。
8、选择windows 系统后,bootmgr就会读取BCD里win系统所在的盘里的windows\system32\winload.exe文件,并且将控制权交给winload.exe。
9、Winload.exe加载windows内核、硬件、服务等,之后加载桌面等信息,从而启动整个windows 系统。
10、上面几步可以概括一下就是:
BIOS---MBR---DPT---PBR---Bootmgr---BCD---系统选择界面---选择windows---Winload.exe---内核加载等 ---启动整个windows系统
=====================================================================================================================================
windows xp 启动过程 详细解析
一下来自:https://blog.csdn.net/xiongyouqiang/article/details/79360459
操作系统的引导过程是从计算机通电自检完成之后开始进行的,而这一过程又可以细分为预引导、引导、载入内核、初始化内核,以及登录这五个阶段。

预引导阶段
这是两个很容易被人搞混的概念,因为根据微软对这两个名词的定义,很容易令人产生误解。根据微软的定义,系统盘是指保存了用于引导Windows的文件(根据前面的介绍,我们已经清楚,这些文件是指ntldr、boot.ini等)的硬盘分区/卷;而引导盘是指保存了Windows系统文件的硬盘分区/卷。如果只有一个操作系统的话,我们通常会将其安装在第一个物理硬盘的第一个主分区(通常被识别为C盘)上,那么系统盘和引导盘属于同一个分区。但是,如果您将您的Windows安装到了其他分区中,例如D盘中,那么系统盘仍然是您的C盘(因为尽管Windows被安装到了其他盘,但是引导系统所用的文件还是会保存在C盘的根目录下),但您的引导盘将会变成是D盘。很奇怪的规定,保存了引导系统所需文件的分区被叫做“系统盘”,反而保存了操作系统文件的分区被叫做“引导盘”,正好颠倒了。不过微软就是这样规定的。
这个功能比较适合笔记本电脑用户。如果您有一台笔记本电脑,主要在办公室和家里使用,在办公室的时候您可能会使用网卡将其接入公司的局域网,公司使用了DHCP服务器为客户端指派IP地址;但是回到家之后,没有了DHCP服务器,启动系统的时候系统将会用很长时间寻找那个不存在的DHCP服务器,这将延长系统的启动时间。在这种情况下就可以分别在办公室和家里使用不同的硬件配置文件了,我们可以通过硬件配置文件决定在某个配置文件中使用哪些硬件,不使用哪些硬件。例如前面列举的例子,我们可以为笔记本电脑在家里和办公室分别创建独立的配置文件,而家庭用的配置文件中会将网卡禁用。这样,回家后使用家用的配置文件,系统启动的时候会直接禁用网卡,也就避免了寻找不存在的DHCP服务器延长系统启动时间。
硬件抽象层的使用主要有两个原因:1,忽略无效甚至错误的硬件调用。如果没有硬件抽象层,那么硬件上发生的所有调用甚至错误都将会反馈给操作系统,这可能会导致系统不稳定。而硬件抽象层就像工作在物理硬件和操作系统内核之间的一个过滤器,可以将认为会对操作系统产生危害的调用和错误全部过滤掉,这样直接提高了系统的稳定性;2,多平台之间的转换翻译。这个原因可以列举一个形象的例子,假设每个物理硬件都使用不同的语言,而每个操作系统组件或者应用程序则使用了同样的语言,那么不同物理硬件和系统之间的交流将会是混乱而且很没有效率的。如果有了硬件抽象层,等于给软硬件之间安排了一位翻译,这位翻译懂所有硬件的语言,并会将硬件说的话用系统或者软件能够理解的语言原意转达给操作系统和软件。通过这个机制,操作系统对硬件的支持可以得到极大的提高。

初始化内核阶段

创建Hardware注册表键

启动服务
=====================================================================================================================================
一下来自:https://www.mallocfree.com/interview/windows-5-boot.htm
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系统。
=====================================================================================================================================
参考:
https://blog.csdn.net/xiongyouqiang/article/details/79360459
https://www.mallocfree.com/interview/windows-5-boot.htm