我正在研究Linux的启动过程。我遇到过这样一句话“RAM 比软盘快几个数量级,因此 ramdisk 的系统运行速度很快”
无论如何,内核都会将根文件系统加载到 RAM 中来执行它。所以我的问题是,如果内核将根文件系统加载到 RAM 中,为什么我们需要 ramdisk 来加载根文件系统?
The 文档 http://www.novell.com/documentation/suse91/suselinux-adminguide/html/ch12s03.htmlfor SUSE Linux 很好地解释了为什么 Linux 使用 RAMDisk 启动:
一旦 Linux 内核完成
引导和根文件系统 (/)
安装后,程序可以运行并且
进一步的内核模块可以是
集成以提供额外的
功能。挂载根文件
系统必须具备一定的条件
遇见了。内核需要
相应的驱动程序来访问
根文件系统所在的设备
位于(尤其是 SCSI
驱动程序)。内核还必须包含
读取文件所需的代码
系统(ext2、reiserfs、romfs 等)。
也可以想象,根
文件系统已经加密。在
在这种情况下,需要输入密码
挂载文件系统。
针对SCSI驱动的问题,
不同解的数量是
可能的。内核可以包含所有
可以想象的驱动程序,但这可能是
一个问题,因为不同的驱动程序
可能会互相冲突。还,
内核会变得非常大
因为这。另一种可能性
就是提供不同的内核,每个
仅包含一个或几个 SCSI
司机。这个方法有问题
即大量不同的
需要内核,然后出现问题
通过不同的优化增加
内核(Athlon 优化、SMP)。加载SCSI驱动程序的想法为
一个模块导致了一般问题
通过初始概念解决
ramdisk:运行用户空间程序
甚至在根文件系统之前
安装。
这可以防止潜在的先有鸡还是先有蛋的情况,即在可以访问根文件系统所在的设备之前无法加载根文件系统,但在加载根文件系统之前也无法访问该设备:
初始虚拟磁盘(也称为 initdisk 或 initrd)正好解决了上述问题。 Linux 内核提供了一个选项,可以将小文件系统加载到 RAM 磁盘并在安装实际根文件系统之前在其中运行程序。initrd 的加载由引导加载程序(GRUB、LILO 等)处理。引导加载程序只需要 BIOS 例程即可从引导介质加载数据。如果引导加载程序能够加载内核,它还可以加载初始 ramdisk。不需要特殊的驱动程序。
当然,RAMDisk 不是绝对必要的以便进行引导过程。例如,您可以编译一个内核,其中包含启动时加载的所有必需的硬件驱动程序和模块。但显然这对大多数人来说工作量太大,而 RAMDisk 被证明是一个更简单、更具可扩展性的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)