![引导加载程序是否将内核完全加载到内存中](https://linux22.com/image/144794/%E5%BC%95%E5%AF%BC%E5%8A%A0%E8%BD%BD%E7%A8%8B%E5%BA%8F%E6%98%AF%E5%90%A6%E5%B0%86%E5%86%85%E6%A0%B8%E5%AE%8C%E5%85%A8%E5%8A%A0%E8%BD%BD%E5%88%B0%E5%86%85%E5%AD%98%E4%B8%AD.png)
我读到引导加载程序(Grub 或 U-boot 等)定位内核(可能来自 HDD,如果是嵌入式系统,甚至来自闪存)并在启动时将其加载到内存中。
现在,这是否意味着引导加载程序将内核完全加载到可用 RAM 中,然后将控制权传递给它?我的猜测是内核不会完全适合 RAM,因此内核指令将会从 RAM 交换到存储设备,反之亦然。
我不明白的是,引导加载程序在此阶段已停止执行并且内核已接管,因此如果引导加载程序不完全适合,引导加载程序如何负责将内核的其余部分加载到内存中或从内存中加载出来第一的?
答案1
内核在启动时被完全加载到 RAM 中,并且不会被交换。内核不知道也不关心它是从哪里加载的。它可以从网络加载,并且很难通过tftp进行交换。
答案2
更准确的说法是,引导加载程序将其作为内核加载的全部内容加载到内存中。它不一定是内核本身,它可能是第二阶段引导加载程序(在大多数情况下,这实际上是技术上发生的事情,因为 GRUB 跳转到提取真实内核的解压缩例程),或者它可以是一个类型 1 管理程序,然后加载并执行 Linux 内核。
简而言之,一切都必须适合记忆和为用户空间等留下足够的空间,否则系统无法启动(这就是为什么现在很难构建一个运行内存小于 64M 的 Linux 系统的部分原因)。我所知道的所有其他 UNIX 系统(SVR4、BSD、Solaris、IRIX、Ultrix、Xenix 等)也是如此。处理内核空间中的内存交换实在是太痛苦了,不值得实现。