gpt4 book ai didi

linux - PC引导过程一步一步

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:46:23 26 4
gpt4 key购买 nike

bootstrapping过程有点乱,希望理解正确。我将尝试描述我的理解,希望可以得到纠正。因为这是一个非常重要的问题,我想深入了解细节。

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

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

内核:
内核以一些汇编语言代码开始,这些代码进行设置以便 C 语言代码可以正确执行。并启用分页

Memory layout

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

我的问题:

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

  2. BIOS 位于EEPROM 芯片上,但有些书籍喜欢显示BIOS 在硬盘的第一个扇区,而bootloader 在第二个扇区。这让我有点困惑。

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

  4. 引导加载程序是否始终位于 0x0000 - 0x7c00 内存块?

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

最佳答案

How does the boot-loader know where is the kernel found ?

实际上,512 字节的引导加载程序并不加载操作系统内核本身,而是加载第二个引导加载程序阶段。第二阶段通常称为引导加载程序。它可能是 Windows bootmgtgrublilo 或其他一堆。这个boot-loader通常位于磁盘的一个固定位置,有时是第二扇区,有时是第二个cylincer...

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

The Bios is located on an EEPROM chip, yet some books like to show that BIOS is on the first sector.

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

Is the Kernel always brought into the same address in main-memory? Is the boot-loader always brought to 0x0000 - 0x7c00 block of memory ?

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

关于linux - PC引导过程一步一步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44068507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com