服务器如何启动


启动服务器是一系列漫长而复杂的操作,具体取决于硬件组件,设置和所使用的软件。 许多人,甚至是经验丰富且合格的系统管理员,都不了解服务器启动时会发生什么情况,因此我们决定详细分析此过程。

为了不拆卸所有可能的情况,我们将考虑在以下情况下装载:

  • 64位Intel处理器;
  • 传统启动模式
  • 磁盘分区MBR;
  • 引导加载程序GRUB2。

醒来唱歌


开启服务器电源的方式有多种,其中最常见的是按下“ 开机”按钮,但并非唯一。 另一种选择是通过网络上的命令( LAN Wake-on-LAN )或通过来自外部设备的命令( Wake-on-PCIeWake-on-KeyboardWake-on-Mouse )。 仅当在BIOS Setup Utility中启用了相应的参数时,才会执行命令,稍后我们将进行讨论。

BMC模块是一个单独的设备,它提供高级服务器管理功能。 在我们的博客中了解有关此技术的更多信息。

以前的方法很智能,需要在数据总线上发送特殊格式的命令。 一种更简单的方法:为电源供电时打开。 在BIOS设置中,此参数称为AC Power Loss交流功率损耗),并采用以下三种状态之一:

  • 关闭电源 -服务器将保持关闭状态。
  • 打开电源 -服务器将打开。
  • 上一状态 -服务器仅在断电时打开服务器才能打开。

使用这些方法同样会导致向处理器发送复位信号并开始启动过程。

下载第一个程序


启动服务器的第一步是打开电源并为处理器设置Reset信号。 如果有复位信号,则处理器频率发生器将不起作用,并且处理器寄存器将复位为处理器制造商设置的值。

在电源中启动时,会发生瞬变,由于瞬变,输出电压可能会超出允许的限制,这会对工作的处理器产生负面影响。 因此,直到输入电源完全稳定后, 复位信号才会被消除。

稳定电压后,电源将设置电源正常信号。 该信号表示主板可以启动所有服务器组件。 接下来,芯片组将所有连接的设备(包括带有基本输入/输出系统 (BIOS)代码的ROM(只读存储器))映射到地址空间。 接下来,除去复位信号,然后处理器频率发生器启动。

BIOS-一种提供用于与设备和连接的设备一起使用的API的系统。 BIOS的重要目标之一是在启动时初始化和测试硬件。


无论系统中有多少处理器,当服务器启动时,一个处理器中只有一个内核被唤醒,其余的内核保持睡眠模式。 被唤醒的核心由自举处理器 (BSP,以下称为处理器)表示。 复位信号消失后,处理器寄存器将以某种方式填充,以使处理器在称为“ 初始处理器模式”的特殊32位模式下运行

初始处理器模式 -一种操作模式,其中只有复位后64位处理器才能进入。 在这种模式下,处理器能够执行32位指令,并且地址空间为4 GiB。

复位信号消失之后,处理器命令计数器指向地址0xFFFFFFF0 ,称为复位向量 。 在该地址处有处理器解码并执行的第一条命令。
将第一条指令放在地址空间的末尾具有历史理由。 开发Intel 8086处理器时,地址空间的开头是一个中断向量,然后是RAM,其数量可以是任意的。 为了避免与RAM相交,在地址空间的末尾采用了第一个命令的地址。

后来,随着Intel 80286的问世,中断向量可以移到任何地方。 但是,即使是现代处理器,也都在兼容模式下运行8086,中断向量为0x0。
当访问地址0xFFFFFFF0时,处理器从ROM接收第一条命令。 在传统模式下,此命令是跳入跳入带有BIOS代码的内存段的命令。 完成第一跳后,处理器进入16位实模式,然后继续执行BIOS代码。

实模式 -与过时的16位处理器兼容的模式。 在这种模式下,只有16位命令可用,并且地址空间(称为“低位内存”)仅包含1个MiB。

如前所述,BIOS可执行代码存储在外部设备上,该设备的运行速度不是很快,因此BIOS要做的第一件事是初始化RAM并将其自身的代码从ROM复制到其中。 BIOS保留了与过时处理器的兼容性;因此,BIOS以16位模式执行所有操作。

开机自检


开机自检(POST)是BIOS中的关键步骤。 POST是缩写且完整。 完全POST检查所有可用的控制器并测试所有可用的RAM,这可能很耗时。

缩写POST可以加快启动过程,并包括最少的必要操作集:

  • 使用校验和验证机制检查ROM中BIOS程序的完整性;
  • 检测和初始化主控制器,系统总线和连接的设备;
  • 确定RAM的大小并测试第一段(64 KB);
  • 将控制权转移到引导加载程序。

通过POST时,服务器使用多种方法来反映有关测试通过的信息。 最常见的方法:

  • 在屏幕上显示测试标识符, POST代码或在主板上使用七段式指示器;
  • 声音指示;
  • 带LED组合的灯光警报。


获取有关可能的故障信息的最有用的方法是显示当前的POST代码。 成功完成测试后,这些代码会快速相互替换,但是如果出现故障,则POST停止,您可以看到失败测试的标识符。 主板制造商始终会附上一个解码,这表示特定的代码。


在现代主板上有一个LED指示灯,可让您识别故障组件。 如果服务器成功启动,您会听到提示音,表明POST成功。 通过声音信号的持续时间和数量,还可以确定故障组件。


在某些情况下,如果需要最大的诊断准确性,则可以使用称为POST卡的外部设备。 主板在数据总线上发送有关POST测试的信息,并且POST卡处理此信息并使用可用的指示器显示该信息。

BIOS设置实用程序


BIOS具有称为BIOS Setup Utility的特殊设置菜单。 您可以通过传递POST时按特殊键来输入。 通常,用于输入BIOS的键是DelF2 ,但是在加载时,始终指示哪个键将打开BIOS设置。


BIOS Setup Utility提供了用于配置的界面,该界面仅需要键盘即可通信。 BIOS Setup Utility提供有关已安装硬件的信息,并允许您更改主板和所连接设备的操作参数。

该参数或该参数的可能名称和选项取决于许多因素,其中:

  • BIOS版本
  • 主板型号
  • 设备型号安装在主板上。

在参数中,我们对Boot Priority感兴趣。 引导优先级设置BIOS轮询设备以查找设备上引导区的顺序。 BIOS一旦找到引导区,控制权就会转移到引导加载程序,然后开始下一步。


操作系统加载器


通过POST后,BIOS将搜索引导区,并以指定顺序轮询设备。 在传统模式下,磁盘上的启动区域称为主启动记录 (MBR)。 MBR是一种特殊的结构,位于磁盘的前512个字节中。 这512个字节包含以下数据:

  • 引导加载程序第一阶段的代码 -从0到445字节;
  • 分区表 -从446到509字节;
  • 幻数是0xAA55-从510到511字节。

如果没有幻数0xAA55 ,则认为未在该磁盘上找到MBR记录,BIOS继续轮询下一个磁盘。

BIOS找到MBR记录后,将其从磁盘复制到RAM的地址0x7C00,然后跳至该地址。 跳转之后,引导加载程序的第一阶段( 阶段1 )开始。 由于大小有限,第一阶段的目的是将第二阶段代码( 阶段2 )加载到内存中并将控制权转移给它。

第2阶段代码将立即存储在MBR结构之后,直到第一个磁盘分区的开头。 从历史上看,此间隙包含31 KB的内存,而在现代系统中,它达到1 MB。 但是,为了保持兼容性,第二阶段的大小不超过31 KB。

第二阶段为启动第三阶段做准备:

  • 加载必要的文件系统驱动程序
  • 在文件系统上查找第三阶段的代码;
  • 将代码加载到RAM中并将控制权转移给它。

第三阶段的任务归结为对环境和引导加载程序的最小化设置:

  • 将处理器转移到保护模式 ;
  • 下载已安装的GRUB2扩展
  • 在文件系统上找到阶段4 ,并对其进行控制。

保护模式 -与x86处理器兼容的模式。 在这种模式下,处理器能够执行32位指令,并且地址空间扩展到4 GiB。 保护模式中出现了重要的创新,例如:


第四阶段( 阶段4 )已经在32位模式下运行,如有必要,它已从GUI扩展磁盘加载,“解析” grub.cfg文件并显示熟悉的OS选择菜单。


操作系统内核


GRUB2遵循Multiboot规范来加载内核可执行文件。 引导加载程序在内核开头检查幻数0x1BADB002 ,并检查校验和以确保内核与规范兼容。 成功验证之后,可以将内核加载到RAM中并转移到RAM中。

根据相同的规范,引导程序会为内核提供系统信息,例如:

  • 当前处理器模式;
  • 检测到的RAM数量;
  • 视频输出类型(文本或像素);
  • 屏幕分辨率。

尽管引导装载程序使用了文件系统驱动程序以及可能的图形界面扩展,但可引导内核将不会收到所有这些奇妙的东西。 首先,在获得控制权之后,内核“展现”了服务器的全部潜力,并将处理器置于“ 长模式”

长模式 -64位处理器的主要模式。 在这种模式下,处理器能够执行64位指令并使用64位通用寄存器。 地址空间容纳16个EIB。 长模式取消了32位体系结构中固有的分段存储器组织。

尽管用于寻址物理内存的地址空间很大,但仅使用了可能的64位中的48位,这将RAM的最大数量减少到256 TiB,比地址空间少65,536倍。 在可预见的将来, 计划将物理寻址扩展到57位。

切换到长模式后,内核将执行操作所需的最少操作集:

  • 配置页面内存
  • 加载驱动程序并初始化所使用的设备;
  • 配置内存和进程调度程序
  • 查找并启动init。

在配置流程调度程序之前,服务器必须在称为BSP的单个核心上工作,这一点很重要。 配置调度程序将唤醒内核的其余部分,称为应用程序处理器 (AP)。 内核之间没有直接的连接,它们的通信是通过称为本地高级可编程中断控制器 (LAPIC)的本地中断处理程序完成的。

操作系统的内核在BSP上启动,该BSP在初始化期间使用ACPI表接收有关系统中可用处理器的信息。 BSP使用自己的LAPIC发送一系列中断“ Init - StartUp - StartUp ”以唤醒所有AP。 启动之后,还需要将应用处理器初始化并转移到Long Mode,但是现在这个过程更快了,因为主处理器已经完成了这项工作。

在所有AP初始化之后,流程调度程序将启动一个称为“ inaction ”或Idle的服务流程。 顾名思义,此进程不执行任何操作,并且在没有其他进程时占用处理器。

当一切都配置好并准备就绪后,操作系统的内核将在用户空间Init中启动第一个进程。 反过来,这将启动用户空间中的其余过程。 初始化过程开始后,内核进入待机模式,并且直到任务出现在内核空间中之前,内核一直处于非活动状态。

启动所有进程后,服务器将通过网络可用,并且在控制台上您可以在屏幕上看到“登录”提示。

结论


乍一看,简单,快速的服务器启动和加载操作系统实际上是一个复杂且令人困惑的过程,具有许多细微差别。 此过程的通过是一个很小的演变,将处理器的处理能力从旧的16位处理器发展为现代的64位“怪物”。

您认为当出现128位处理器时,会不会出现兼容模式,其中包含16位处理器?

Source: https://habr.com/ru/post/zh-CN471756/


All Articles