67. 计算机的启动

计算机出现问题的时候,希望知道设备是处在什么阶段

67.1. BIOS启动

BIOS启动进行设备自检。自检完成后会递交控制权给boot loader.

递交的顺序是在启动顺序中指定的启动项,这些启动项指向一个外部存储设备。

/------------------------------------------------------------------------------\
|                                Boot Manager                                  |
\------------------------------------------------------------------------------/

                                                         Device Path :
   Boot Manager Menu                                     HD(1,GPT,D9F797D0-9E50
                                                         -4D21-B618-CDE854597D5
   Red Hat Enterprise Linux                              F,0x800,0x64000)/\EFI\
   UEFI                                                  redhat\shimaa64.efi
   UEFI  2
   Uefi Redhat Boot
   UEFI Misc Device
   UEFI PXEv4 (MAC:001886000006)
   UEFI PXEv4 (MAC:001886010006)
   UEFI PXEv4 (MAC:001886020006)
   UEFI PXEv4 (MAC:001886030006)
   UEFI PXEv4 (MAC:001886040006)
   UEFI PXEv4 (MAC:001886050006)
   UEFI Shell

/------------------------------------------------------------------------------\
|                                                                              |
| ^v=Move Highlight       <Enter>=Select Entry      Esc=Exit                   |
\------------------------------------------------------------------------------/

67.2. 主引导记录。

控制权转移到一个外部存储设备之后,会读取这个设备的前面512字节,也就是主引导记录
(1) 第1-446字节,共446字节:调用操作系统的机器码。
(2) 第447-510字节,共64字节:分区表(Partition table)。
(3) 第511-512字节,共2字节:主引导记录签名(0x55和0xAA)。
 1                                                       446 447         510 511 512
+-----------------------------------------------------------+---------------+-------+
|                                                           |               |       |
|  binary code to call OS                                   | partition     |0x55   |
|                                                           |  table        |   x0AA|
+-----------------------------------------------------------+---------------+-------+

67.3. 分区表

分区表的长度是64字节,分成4项,每项16字节,对应4个一级分区,叫做“主分区”

每个主分区的16个字节,由6个部分组成:
(1) 第1个字节:如果为0x80,就表示该主分区是激活分区,控制权要转交给这个分区。四个主分区里面只能有一个是激活的。
(2) 第2-4个字节:主分区第一个扇区的物理位置(柱面、磁头、扇区号等等)。
(3) 第5个字节:主分区类型。
(4) 第6-8个字节:主分区最后一个扇区的物理位置。
(5) 第9-12字节:该主分区第一个扇区的逻辑地址。
(6) 第13-16字节:主分区的扇区总数。
+-------------+-----------------+---------------+-----------------+--------------+----------------+
|第1个字节    |第2-4个字节      |第5个字节      | 第6-8个字节     |第9-12字节    |第13-17字节     |
|0x80         |主分区第一个     |主分区的类型   | 主分区最后一个  |该主分区第一个|主分区的扇区总数|
|表示激活分区 |扇区的物理位置   |               | 扇区的物理位置  |扇区的逻辑地址|                |
|             |                 |               |                 |              |                |
+-------------+-----------------+---------------+-----------------+--------------+----------------+
最后4个字节的(主分区的扇区总数),决定了这个主分区的长度。也就是说,一个主分区的扇区总数最多不超过2^32。
如果每个扇区为512=29字节,意味着单个分区最大不超过241 =2*2^40 =2 TB。再考虑扇区的逻辑地址也是32位,所以单个硬盘可利用的空间最大也不超过2TB,如果想使用更大的硬盘,只有2个办法:一个是提高每个扇区的字节数,而是增加删去总数

67.4. 卷引导记录

计算机会读取主分区中的激活分区。并读出第一扇区,叫做“卷引导记录”(Volume boot record,缩写为VBR)。“圈引导记录”的主要作用是,告诉计算机,擦偶哦在系统在这个分区里的位置。然后,计算机就会加载操作系统。

67.5. 拓展分区

随着硬盘越来越大,4个分区已经不够了,需要更多的分区。但是分区表只有4项,因此规定有且仅有一个区可以被定义为“扩展分区”。 扩展分区,指一个区里面可以分成多个区,叫做“逻辑分区”。 拓展分区的第一个扇区,叫做“拓展引导记录” Extended boot record EBR。EBR也包含64字节的分区表,但是只有两项。也就是两个逻辑分区。

67.6. 完整启动log

[完整的设备启动log]

从UEFI启动后, CPU都运行在EL2上, Guest OS在 EL1, 用户态El0