一.内核的引导

在intel x86系统上,windows操作系统获得控制首先从硬盘的主引导记录(MBR,Master Boot Record)开始,windows setup程序在安装windows时候填充mbr.mbr包含代码和数据,其代码称为引导代码,在系统引导时候首先获得控制权;MBR中的数据是一张分区表,指定了每个分区在磁盘上的位置和大小,以及分区的类型。当MBR中的引导代码被执行时,它检查分区表中的每一个分区,找到被标记为可引导的分区,将该分区的第一个扇区读到内存中。然后MBR的代码将控制权交给引导扇区中的代码。引导扇区的职责是给windows提供有关该硬盘上卷的结构和格式方面的信息,并且从该卷的根目录中读入windows的加载程序,即ntldr文件,然后将控制权交给ntldr的入口函数。

intelx86处理器支持实模式和保护模式,在实模式下,处理器的寄存器都是16位的,而且不支持虚拟地址,只能访问物理内存空间中的1MB内存。计算机系统的BIOS工作在实模式下,并且,当ntldr获得控制权时,处理器仍然在实模式下运行。ntldr由两部分组成,第一部分是实模式代码,即首先获得控制的代码区;第二部分是一个标准的windos可执行二进制文件(PE格式),在ntldr中这部分被称为os loader。

ntlder的实模式代码首先获得控制,它的任务是完成需在16位模式下执行的初始化工作,例如清楚键盘缓冲区,然后为切换到保护模式做好基本的环境准备,之后将处理器切换到保护模式下(32位),这样它就可以访问整个32位地址空间了。最后它将控制权交给os loader。因此,ntldr中的os loader是windows真正的32位入口程序。

os loader刚接获控制时,处理器虽然已经工作在保护模式下,但是它的虚拟地址转译机制尚未开启,所以,处理器仍然直接使用物理地址。os loader首先做的工作时把无力内训管理起来,用一个内训描述符(memory descriptor)数组把每一段内存的大小和用途记录下来,然后构造页目录和页表,再设置好页目录寄存器,并打开页面映射机制。之后,os loader继续执行其它的初始化工作,包括I/O设备的初始化等。

接下来,OS LOADER从系统分区的根目录下读入BOOT.INI文件(虽然此时文件系统驱动并未加载,但os loader包含了读取当前文件系统的代码,它能够读取NTFS文件系统的子目录),并解析。接下来OS loader加载并执行NTDETECT.COM程序,这是一个16实模式程序,它利用系统的BIOS来查询系统的基本设备和配置信息,包括系统的日期和时间,总线的类型,磁盘的信息等。这些信息被收集起来,在引导过程的后期被存放到注册表HKLM\HARDWARE\DESCRIPTION键的下面。

然后,OS LOADER加载内核模块映像文件,默认为NTOSKRNL.EXE,以及HAL映像文件,默认为HAL.DLL,再加载\windows\system32\config\system(注册表)文件。通过SYSTEM文件,它可以知道哪些设备驱动程序必须被加载进来,然后加载这些设备驱动程序,以及访问系统目录所必须的文件系统驱动程序。注意在此之前OS loader也可以访问系统分区,但并非通过文件系统驱动程序。

最后OS LOADER将控制权交给内核模块的入口函数,该函数将不再返回,所以,接下来的引导过程由内核模块继续进行,ntlder和os loader的使命已经完成。

二,内核的初始化

内核初始化的入口函数为kiSystemStartup,它是一个汇编函数.内核初始化主要是内核各个组件的初始化,但由于这些内核组件之间有紧密的耦合关系,所以它们的初始化并不是简单的顺序执行初始化。为了解决在初始化过程中的相互依赖性问题,内核的初始化分为两个阶段进行,称为阶段0和阶段1.阶段0初始化的目的是将阶段1初始化所需要的基本数据结构建立起来。在阶段0初始化过程中中断被禁止,因此处理器可以顺序的执行自己的初始化逻辑。

阶段0初始化完成以后,系统的线程调度器开始工作。特别值得一提的是,进程管理器在阶段0初始化过程中,除了初始化其内部的状态变量,它也为初始进程创建一个进程对象,并将其命名为"Idle".此外它还创建了一个system进程,以及一个系统线程。当阶段0完成后中断开始时,线程开始运行,则进入阶段1的初始化。

阶段1初始化是在System进程的一个系统线程中进行的,它在一个恰当的点上调用KeStartALLProcessors函数以启动其它的处理器。阶段1初始化是内核的完全初始化,它占据了系统初始化过程中相当一部分的时间。

三,建立用户登录会话

windows内核在阶段1初始化的组后,启动了一个用户模式进程--会话管理器子系统(smss.exe)。

smss主要根据注册表中的设置,完成一些引导工作。例如初始化并建立注册表树,建立系统的全局环境变量,启动windows子系统进程csrss.exe,启动登录进程winlogon.exe.接下来引导过程转到了winlogon进程,winlogon将启动services.exe和lass.exe进程。登录的最后explorer.exe进程启动,至此用户可以登录到系统并通过explorer.exe程序的用户界面操作系统中的资源。

(以上内容截取自潘爱明的windows内核原理与实现)

[17]Windows的启动过程的更多相关文章

  1. Windows 启动过程

    引言 启动过程是我们了解操作系统的第一个环节.了解 Windows 的启动过程,可以帮助我们解决一些启动的问题,也能帮助我们了解 Windows 的整体结构. 以下内容将分为[加载内核].[内核初始化 ...

  2. Windows平台下Oracle实例启动过程中日志输出

    Windows平台下Oracle实例启动过程中日志输出记录. 路径:D:\app\Administrator\diag\rdbms\orcl\orcl\trace\alert_orcl.log 输出内 ...

  3. Windows平台下Oracle监听服务启动过程中日志输出

    Windows平台下Oracle监听服务启动过程中日志输出记录. 日志目录:D:\app\Administrator\diag\tnslsnr\WIN-RU03CB21QGA\listener\tra ...

  4. Windows Phone-框架结构和启动过程

    上一篇文章介绍了Windows Phone的开发环境和一个简单的Windows Phone程序的演示和结构,这一篇文章要深入一点,介绍Windows Phone的框架结构和程序启动的过程. 一 Win ...

  5. [oracle] oracle的三种密码验证机制以及在windows和linux下的不同启动过程

    oracle数据库的密码验证机制: ① 操作系统验证 拥有SYSDBA和SYSOPER的用户用该方式验证此时数据库无需启动,也无需开启监听和实例服务. 要求:本地组ora_dba中有该操作系统的登录用 ...

  6. UEFI下windows启动过程

    引导文件 在UEFI安装完操作系统后,Windows至少使用两个分区,一个叫做ESP分区(EFI SYSTEM PARTITION),用于存放启动文件,另一个则是BIOS下正常的系统分区,不同的是,B ...

  7. Windows启动过程(MBR引导过程分析)

    catalogue . 电脑启动过程 . MBR分析(master boot record) - 位于整个硬盘的 扇区 . DBR(DOS boot record) - 位于柱面0,磁头1,扇区1,即 ...

  8. 【转】Nginx windows下搭建过程

    Nginx windows下搭建过程 内容列表: 简要介绍 下载安装 配置测试 一.简要介绍 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器, ...

  9. 转载:oracle 启动过程--oracle深入研究

    Oracle数据库的启动-nomount状态深入解析 通常所说的Oracle Server主要由两个部分组成:Instance和Database.Instance是指一组后台进程(在Windows上是 ...

随机推荐

  1. Entity Framework 6如何进行导航属性的筛选(context.Msg.First(t=>t.Id==1).Include(t=>t.MsgDetail),筛选MsgDetail带条件)

    问题: https://q.cnblogs.com/q/98333/ Msg表(Id,Content,IsDel).内有 virtual ICollection<MsgDetail> Ms ...

  2. [knowledge][perl][pcre][sed] sed / PCRE 语法/正则表达式

    一直用sed一直没有正经的学过语法,一直一知半解的用着. 因为,它用来perl的语法,要想搞懂,首先要搞懂perl,系统的入个门... 之前,man sed,man了好多次,总是没找到关键内容,今天在 ...

  3. python知识点杂记

    1. Python没有 ++, --操作. 2. Join比+快:tuple比list快 3. Dict的key是区分大小写的 4. 参数顺序:无默认值参数,有默认值参数,tuple,dict 5. ...

  4. 转:Redis 3.2.1集群搭建

    Redis 3.2.1集群搭建   一.概述 Redis3.0版本之后支持Cluster. 1.1.redis cluster的现状 目前redis支持的cluster特性: 1):节点自动发现 2) ...

  5. 内部排序->插入排序->其它插入排序->2-路插入排序

    文字描述 在折半插入排序的基础上进行改进, 另设一个和待排序序列L相同的数组D, 首先将L[1]赋值给D[0], 数组D中数据是已经排好序的, first指向最小值下标,final指向最大值下标.初始 ...

  6. Java之旅_面向对象_接口

    参考摘自:http://www.runoob.com/java/java-interfaces.html 接口(interface)在Java中是一个抽象类型,是抽象方法的集合. 一个类通过imple ...

  7. 拦截器的作用之session认证登录和资源拦截

    背景: 在项目中我使用了自定义的Filter 这时候过滤了很多路径,当然对静态资源我是直接放过去的,但是,还是出现了静态资源没办法访问到springboot默认的文件夹中得文件.另外,经常需要判断当前 ...

  8. 七、Spring Boot 启动配置原理

    几个重要的事件回调机制 配置在META-INF/spring.factories ApplicationContextInitializer SpringApplicationRunListener ...

  9. MySQL数据库之part1

    一.初始数据库 链接:http://www.cnblogs.com/linhaifeng/articles/7126847.html 一.MySQL介绍 1.MySQL是什么 MySQL是一个关系型数 ...

  10. MySQL 基础 备份和恢复

    数据库备份 mysqldump [args] > file_name 例如:备份所有数据库 shell> mysqldump --all-databases > dump.sql # ...