Abd*_*f K 3 boot initrd initramfs linux-kernel
目前我正在学习linux启动过程。在这里我注意到initrd将创建临时根文件系统,其中包括内核所需的驱动程序(LVM、NFS等)。之后内核将使用该驱动程序并挂载真正的根文件系统。
这里我的问题是为什么内核本身不应该包含必要的驱动程序以及为什么它依赖于 initrd ?
另请参阅这些问题的答案:
首先,要知道内核内存不是按需分页的。这将是一个循环依赖。如果在内存不足时将磁盘驱动程序调出到磁盘,则以后无法将其加载回来。
(并且在Linux内核内部,我们不会尝试定义一些不涉及存储路径并且可以安全地调出的更高层。据称这是可能的:Windows做到了。我不知道这个更高层是什么层应该是这样的。也许它是动态定义的。或者Windows可能有不支持奇怪的想法(例如交换NFS)的奢侈。
相反,我们支持加载模块。如果我们在这台特定计算机上不需要 NFS,则无需加载它。
在现代发行版中,这总共节省了大约一百兆字节的 RAM。(查看 所占用的空间/lib/modules/$VERSION/。请注意,在现代发行版中,模块被压缩,例如.xz文件)。
虽然内核模块是 initrd 更明显的原因,但还有第二个方面。
它允许用户空间构建任意复杂的存储堆栈来访问根文件系统。例如,使用 DHCP 获取 IP 地址,以支持 NFS,或提示输入磁盘加密密码。
同样,内核会尽量避免过度膨胀,例如用户界面代码。
内存使用只是原因之一。内核/用户空间划分有多种用途。例如,内核可以是一个项目,专门处理内核事务。用户空间可以是任何东西;它可以是一个“正常”的 Linux 发行版,也可以是一个完全独立的项目,如 Android 操作系统。
这与其他操作系统不同,例如 BSD 将内核 + 核心用户空间一起维护。BSD 能够通过内核和用户空间的单一标志日转换来处理 2038 问题就说明了这一点。
| 归档时间: |
|
| 查看次数: |
784 次 |
| 最近记录: |