实模式和加载linux内核混淆

Bìn*_*yên 4 grub boot x86 linux-kernel

据我所知,保护模式将在内核中激活,在 grub 阶段它仍然是实模式。我的误解是:在实模式下,可用总内存小于 1MB,但是 grub 如何将内核甚至根文件系统(通常大于 1MB)加载到内存中?

Chr*_*own 5

GRUB 不必将整个内核加载到内存中。内核映像分为两部分:

  • 实模式内核代码,体积小,可在640kB可用内存阈值内加载;
  • 内核的其余部分,在保护模式下运行并在第一兆字节内存后加载。

引导加载程序只加载实模式内核代码,然后引导其余部分(查看go_to_protected_mode()中的arch/x86/boot/pm.c)。这就是进程如何保持在实模式下运行的内存限制内的方式。

小记:GRUB可以运行两个实模式和保护模式,这取决于它在做什么。它可能会因为某些事情(某些硬件检测和菜单显示)而切换到保护模式。但是,您认为它在击中内核时处于实模式是正确的。