【问题标题】:PC bootstrap process step by stepPC引导过程一步一步
【发布时间】:2017-10-19 11:49:54
【问题描述】:

引导过程有点混乱,希望我理解正确。我将尝试描述我的理解,希望可以得到纠正。因为这非常重要,所以我想深入了解一些小细节。

BIOS:
它建立一个中断描述符表初始化各种设备。在初始化 BIOS 知道的所有重要设备后,它会搜索bootable 设备,例如软盘、硬盘驱动器或 CD-ROM。
硬盘分为 512 字节区域,称为sectors,第一个扇区称为boot-sector。一旦 BIOS 找到可引导的软盘或硬盘,它会将 512 字节的引导扇区加载到内存中,然后将控制权交给引导加载程序。

引导加载程序:
1.引导加载程序将处理器从实模式切换到32位保护模式,因为只有在这种模式下,软件才能访问处理器物理地址空间中1MB以上的所有内存。 2.引导加载程序从硬盘读取内核

内核:
内核从一些汇编语言代码开始,这些代码设置了一些东西,以便 C 语言代码可以正确执行。并启用paging

Memory layout

|---------|
|         |
|   boat  | Sector 0
|  loader |
|         |
|---------|
|         |
|         |
|         | Sector 1
     .
     .
     .

我的问题:

  1. 引导加载程序如何知道内核在哪里找到?
    据我所知,ELF 标头包含装船机应加载的扇区数。但是它如何找到这个 ELF 标头? 它使用什么结构来查找这些详细信息?

  2. Bios 位于EEPROM 芯片上,但有些书喜欢显示 BIOS 位于硬盘的第一个扇区,而引导加载程序位于第二个扇区。这让我有点困惑。

  3. 内核是否总是被带入主内存中的相同地址?如果是,谁/什么决定了这个地址?

  4. 引导加载程序是否总是被带到0x0000 - 0x7c00 内存块?

欢迎提供有关流程的任何其他信息。而且我确信我错过了这 3 个中的一些责任。

【问题讨论】:

    标签: linux ubuntu linux-kernel operating-system


    【解决方案1】:
    1. 据我了解 Bootloader(至少是 grub)使用文件系统和配置文件中设置的路径来确定要加载的文件
    2. Bios 位于 EEPROM 芯片上,这本书可能只是写得很混乱。

    3. 据我了解不是,但它在其Context 中具有相同的地址(不确定)

    4. 据我所知,Master Boot Record 位于硬盘驱动器的开头,通常包含引导加载程序的第一阶段。

    【讨论】:

      【解决方案2】:

      引导加载程序如何知道内核在哪里找到?

      实际上,512 字节的引导加载程序不会加载操作系统内核本身,而是加载第二个引导加载程序阶段。第二阶段就是通常所说的引导加载程序。它可能是 Windows bootmgtgrublilo 或其他一堆。这个引导加载程序通常位于磁盘的固定位置,有时是第二个扇区,有时是第二个圆柱体……

      然后,细节会有所不同,但通常更大的引导加载程序会加载一个配置文件,告诉他们真正的内核在哪里。有时它甚至包括读取完整文件系统的代码。

      BIOS 位于 EEPROM 芯片上,但有些书喜欢显示 BIOS 位于第一个扇区。

      也许他们将第一扇区中的第一阶段引导扇区与接下来几个扇区中的第二阶段引导加载程序混合在一起?

      内核是否总是被带入主存中的相同地址? 引导加载程序是否总是被带到 0x0000 - 0x7c00 内存块?

      在标准的 32 位 PC 中,引导扇区始终加载到地址 0000:7C00,仍处于实模式。这是从 IBM-PC 时代开始的标准 PC 惯例。 然后,它会将第二阶段加载到它将决定并传递的任何内存中。这就是为什么每次安装引导加载程序时都必须重写引导扇区。 一些引导加载程序将切换到保护模式并直接加载操作系统,而其他引导加载程序将在实模式下工作,操作系统内核将切换到保护模式并将自身移动到高端内存。

      【讨论】:

      • 感谢您的回答,但我仍然觉得奇怪为什么内核位于高地址。你能详细说明一下吗?这背后的原因是什么?
      • @TonyTannous:located 是什么意思?内核首先加载到低内存中,因为它仍然是实模式并且它是唯一可访问的内存。然后它转移到高内存以释放有限的低内存,这是一些旧设备和/或某些类型的 DMA 所需的(不知道在现代系统上是否仍然如此)。
      • 是的,我知道这一点,但我在某处读到它被移动到内存的更高部分是有原因的(对于遗留问题,我们释放了 1mb)我明白这一点。我想那毕竟没有什么特别的原因。 (除了传统)。
      • 那么 legacy 和 DMA 非常特别,IMO。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 2015-10-01
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      相关资源
      最近更新 更多