1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

按下电源键之后,电脑又默默干了很多事

本帖由 漂亮的石头2016-09-18 发布。版面名称:知乎日报

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    487,766
    赞:
    47
    [​IMG] xiaoqin00,SKE团队,渗透狗 青阳小栈编辑

    按下电源键之后

    我们在按下电源键后,电脑要经过这么几个阶段才能为我们正常使用。

    预引导阶段:

    从我们按下电源键到操作系统开始启动,这段时间称为预引导阶段。当我们按下电源键后,CPU 开始执行存放在 BIOS(基本输入输出系统)中的指令。(BIOS,一种硬件,包含一些代码,处理器依靠这些代码启动计算机,与外围标准设备进行通讯,形成一个最小环境,从而得以加载其他复杂代码。他与计算机安装的操作系统无关。)BIOS 程序首先检查计算机硬件能否满足运行的基本条件,即“硬件自检”(POST)。

    POST 负责完成如下系统和检测功能:

    1. 执行硬件初始化检测,比如测试当前内存总数
    2. 校验启动操作系统所必须的设备,比如硬盘
    3. 从位于主板上的 CMOS 中检索系统设置

    如果硬件出现问题,主板会发出不同含义的蜂鸣,启动终止。如果没有问题,屏幕就会显示出 CPU、内存、硬盘等信息。

    如果硬件没有问题,那么 BIOS 就会进入下一阶段的程序。

    这时,BIOS 需要知道,下一阶段的启动程序到底存放在哪一个设备当中。也就是说 BIOS 需要有一个外部存储设备的排序,排在前面的设备就是优先转交控制权的设备。这种排序叫做启动排序,也就是我们平时进入 BIOS 界面时能看到的 Boot Sequence。

    BIOS 中启动顺序的界面如下图。

    [​IMG]

    如果我们没有进行特殊操作的话,那么 BIOS 就会按照这个启动顺序将控制权交给下一个存储设备。我们在使用 U 盘光盘之类的装系统时就是在这里将启动顺序改变了,将本来要移交给硬盘的控制权交给了 U 盘或者光盘。

    第一存储设备被激活后,计算机读取第一存储设备的第一扇区,也就是读取最前面的 512 个字节(MBR)。如果这 512 个字节的最后两个字节是 0x55 和 0xAA,表明这个设备可以启动;如果不是,表明设备不能用于启动,控制权移交给下一个存储设备。我们找到可用的 MBR 后,计算机从 MBR 中加载并初始化 NTLDR 文件以解析 Boot.ini 文件。到这里,计算机的预引导阶段就结束了。

    (主引导记录 MBR 是位于磁盘最前边的一段引导代码。它负责磁盘操作系统对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统在对硬盘进行初始化时产生的。硬盘的主引导记录 MBR 是不属于任何一个操作系统的,它先于所有的操作系统而被调入内存,并发挥作用,然后才将控制权交给主分区内的操作系统,并用主分区信息表来管理硬盘。

    NTLDR,系统加载程序,存在于系统盘的根目录,用于解析 Boot.ini 文件装载操作系统。它是一个隐藏的只读的系统文件。

    Boot.ini 中“Timeout=”用来控制启动菜单显示的时间,如果你在规定的时间内未选择操作系统,系统将启动默认的操作系统。默认的显示时间是 30 秒,你可以修改“=”后面的数值来改变启动菜单显示的时间。“default=”用来控制默认的启动系统,“=”后面是操作系统的启动目录,partition(1)所指的就是第 1 个分区,通常也就是 c:盘,WINDOWS 就是你的系统文件夹。)

    引导阶段:

    当计算机加载 MBR 后,计算机会从 MBR 中知道当前硬盘的文件格式、硬盘分区情况、系统盘存放位置等信息,然后控制权将被移交给了系统盘所在的分区。如果硬盘上装有多个系统的话,那么控制权移交之前还会出现操作系统的选择页面。

    选择操作系统后,我们还需进行硬件检测,将收集到的计算机硬件信息列表并返回到 NTLDR,以便后面将计算机的硬件信息写入注册表中。接着,计算机进入配置选择阶段。如果计算机含有多个硬件配置文件列表,那么可以选择你所需要的硬件。否则计算机将直接使用默认的配置文件加载系统。引导阶段结束,接下来就是加载内核阶段。

    加载内核阶段:

    在加载内核阶段中,NTLDR 将加载 NTOKRNL.EXE 内核程序,然后 NTLDR 将加载硬件抽象层(HAL.dll),接着系统将加载注册表中的“HKEY_MACHINESystem”键值,这时 NTLDR 将读取“HKEY_MACHINESystemselect”键值来决定哪一个 ControlSet 将被加载。所加载的 ControlSet 将包含设备的驱动程序程序以及需要加载的服务。再接着 NTLDR 加载注册表“HKEY_LOCAL_MACHINESystemservice”下的 start 键值为 0 的底层设备驱动。当 ControlSet 的镜像 CurrentControlSet 被加载时,NTLDR 将把控制权传递给 NTOSKRNL.EXE,至此引导过程将结束。

    (如果在启动的时候按 F8,将会在启动菜单中看到多种启动模式,)

    [​IMG]

    这个阶段是前一个阶段的延续,是下一个阶段的开始。从预引导阶段就开始运行的 NTLDR 在这里继续发挥着一个药引的作用,将内核一步步地唤醒。这个阶段结束时,内核就被唤醒了,下个阶段就是系统内核完全加载活动身体的时候了。

    初始化内核阶段:

    我们经常开机,也经常提到内核,但是开机之后什么时候算是内核正式开始运行了呢?当我们看到微软那风骚的 logo 的时候,就代表着我们的内核正在活动筋骨准备运行啦。

    前面,计算机已经进行了硬件检测,并且数据被保存在了 KEY_LOCAL_MACHINE\HARDWARE 键。现在,内核通过引用我们前面的 HKEY_LOCAL-MACHINE\system\current 的默认值复制 control set 创建了 Clone Control Set。Clone control set 配置是计算机数据的备份,不包括启动中的改变,也不会被修改。

    加载内核阶段中,计算机加载了设备驱动程序。这里,内核再初始化这些驱动程序。然后内核扫描 HKEY_LOCAL_MACHINE\system\currentcontrolset\services\中 start 键值为 1 的驱动程序并加载初始化。

    [​IMG]

    如果在这个过程中有错误产生,那么内核将会根据 errorcontrol 中的键值来决定如何处理。Errorcontrol 键值为 1 时,错误普通,计算机系统将忽略这个错误并执行下一步;当值为 2 时,计算机系统将会根据 lastknowngood controlset 中的内容重新启动;当值为 3 时,错误标志为危机 / 关键,初次遇到时,系统将会用 lastknowngood control set 重新启动,如果重新启动任然失败,系统将会报告启动失败,错误信息被显示,系统停止启动。

    当这些做完后,session manager 将会启动控制所有的输入输出设备机访问显示屏幕的 win32 和 winlogon 进程,至此,初始化内核阶段完毕。

    (大家可以看看自己的注册表,来看看我们的内核所依赖的键值。注册表存在于系统盘的 systems 文件夹下,打开 regedit.exe 就是,也可以通过运行,输入 regedit 来打开。)

    登录阶段:

    上面,计算机背后的工作已经准备好了,可以进行露脸的登录工作了。说起登录,我们都会有所了解,但是登录并不仅仅是我们常见的账号密码登录。

    首先,来看看我们平常的交互式登录。我们平常的登录就是输入账号密码,然后提交给系统。系统会通过数据库信息对比来决定给不给予权限和给予什么样的权限。

    (你可以改动注册表中的 legalnoticecaption 来设定登录界面的窗口标题,也可以改动 legalnoticetext 中的数据来定义欢迎窗口中的文字。)

    [​IMG]

    除了这种我们看得到的登录之外,系统在后台会在需要服务时会进行服务的登录。就像我们经常在任务管理器里面看到的服务信息。

    [​IMG]

    图中的 winlogon 服务就是通过系统权限来登录的,而 winWord 则是通过 user 权限来登录的。

    完成登录之后,我们的计算机已经启动并且认可了我们的权限,我们可以大大方方地使用它了。

    在 Linux 系统中,基本的内容也差不多。在 Linux 系统的计算机中,控制权转交给操作系统后,先载入 /boot 目录下面的 kernel。内核加载完成后,第一个运行的程序是 /sbin/init。它根据配置文件产生的 init 进程。Init 进程是 Linux 系统启动后的第一个进程,进程编号为 1,其他进程都由这个进程衍生出来。然后 init 进程挂载系统的各个模块,直至执行 /bin/login 程序,出现登录页面,等待用户输入用户名和密码。

    (注:此文适用范围仅是老版系统,并不完全适用于当前主流操作系统。(文中的图片仅是我在 Windows 7 环境下为辅助说明所截,并不代表文中的内容适用于 Windows 7 等当前主流操作系统))

    阅读原文
     
正在加载...