• Windows启动过程


    当你启动计算机之后,windows的启动过程就开始执行了。下面是详细步骤:

    1 BIOS执行一些初始系统检查,并读取磁盘的第零簇的内容。第零簇内容有一个特殊的称谓 - 操作系统主引导扇区 MBR(Master Boot Record)。

    2 MBR保护两部分:

      1 系统启动代码 (共有446 bytes)

      2 分区表入口(16 bytes colored entries in the bottom)

    3 根据系统代码,我们可以找到系统所有的分区,并找到系统启动分区。如果分区表入口的第一个字节值为0x80,那么可以确认这就是分区表入口,它也被称为根分区或系统卷 . MBR中有四个分区入口,是不是意味着我们只能有四个系统驱动?这也就意味着我们还得有扩展分区入口.

    4 除了分区得到确认外,还能够确认系统启动分区的第一个磁盘簇。具体的值存储在启动代码的8th-12th字节。上图中这个值为3f 00 00 00,按照小端计算,其值为0000003f,即第63rd扇区。

    5 启动入口第63rd扇区又称为启动扇区,从这里开始可以读取到文件读取根磁盘(c:\)的文件ntldr(NT loader)

    6 有时候,系统启动中提示错误信息NTLDR is missing,正是因为读取不到这个文件。 读取这个文件的信息后,windows开始把内核文件加载到内存中。先确定页面大小,然后读取ntdetect.com,根据BIOS设置进行硬件检测,最后读取boot.ini以显示启动菜单,即提示有哪些操作系统。

     

    如果系统上次关闭时是睡眠状态,它将读取hiberfil.sys,以恢复睡眠前的数据。它还会加载启动驱动。操作系统的核心功能依赖这些驱动,下表列出了初始的系统驱:

     然后再设置CPU的寄存器的值,等等。这些任务完成后,ntldr把系统控制权交给进程ntoskrnl.exe (NT OS Kernel),它的使命就完成了。

    6  NTOSKRNL是主要负责启动以下OS服务(此时你能看到的Windows XP的进度条显示过程)。

      第0阶段初始下列服务

          内存管理服务

          流程管理服务(系统进程被创建的第一个内核模式进程)

          对象管理器服务

          即插即用管理服务

          安全参考监视器服务

      第1阶段的初始化

          初始化HAL(硬件抽象层)

          多处理器支持

          调度支持(本质上取决于处理器架构)

          电源管理

     

    7  系统将控制权转交给 smss.exe (Session Manager Subsystem)。它也是windows启动后的第一个用户态进程。

      1 smss进程执行下列任务:

            1 检查磁盘(disc check):

            2 挂起一些文件。文件被挂起后,os内核就暂时没有了一些文件的控制权限,一些应用软件可能重写操作系统内核相关的部分文件,改写完毕后,它就可能提示你重启系统。

            3 创建页面文件(pagefile.sys):

     

      2  从\Windows\System32\Config\*.*.读取系统注册表

      3 最后系统创建两个进程(Client Server Run-Time Subsystem), Winlogon.exe. 

          1 Csrss.exe负责系统的用户态,并向程序提供windows API接口 

          2   Winlogon.exe负责启动进程(services.exe),并创建sass.exe (Local Security and Authentication Subsystem),以对用户登录系统时进行验证。 

          3   Winlogon将把登录窗口呈献给用户,用户登录成功后,它将家在explorer.exe,并根据当前用户的配置信息显示桌面。

    虽然本文没有具体的描述启动过程的每个细节,但是大的方面本文都有说明,以做到疏而不漏。欢迎读者批评指正。

    参考文章

      1 Windows Internals 4th Ed By Mark E. Russinovich, David A. Solomon

      2 http://www.yale.edu/pclt/BOOT/PARTITIO.HTM

      3 http://mirror.href.com/thestarman/asm/mbr/NTLDR.htm

    说明

      本文遵循协议 The Code Project Open License (CPOL)

    written by: Vineel Kumar Reddy Kovvuri

    url:   http://www.codeproject.com/Articles/129874/The-Birth-of-Windows-Desktop

     

     

     

     

  • 相关阅读:
    posix多线程有感POSIX 线程间的内存可视性
    同步和互斥的一些问题(死锁,优先级逆转)
    POSIX线程属性
    POSIX 条件变量详细解析
    VMware网络配置详解
    POSIX线程
    Java+Selenium——Actions鼠标悬停
    Java+Selenium——截图方法TakeScreenshot——保存到桌面——TakeScreenshot截图只针对浏览器的web事件
    Java+Selenium——利用Robot类截图——整个桌面截图
    Java+Selenium——如何处理日历控件——方法二
  • 原文地址:https://www.cnblogs.com/menggucaoyuan/p/2344396.html
Copyright © 2020-2023  润新知