ramfs, tmpfs,ramdisk区别

参考资料://https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

什么是ramfs?
ramfs是一个简单的文件系统,它是基于ram的动态文件系统的一种Linux硬盘缓冲机制。
一般的在Linux上所有的文件都被缓冲在内存中。内存中的数据页在回写后仍然会保存在内存中以防再次使用,但是回写后的数据会被标识为clean,这样系统就可以用这些内容干别的事情了。同样的,文件数据再被回写后也被表识为clean,但是并没有在内存中擦除知道虚拟内存对他再次分配。一个相似的机制也同样适用于目录。


对于ramfs,它没有回写地址。文件写入ramfs中后和平时一样分配目录和页,但是他们回写不了。这就意味着他们的内存永远也不能被标识为clean,所以他们在期待回收内存的时候不会被虚拟内存释放。

需要填充到ramfs的代码很少,因为大部分的工作都被Linux已有的缓存机制做了。基本上,你就如同挂载文件系统。基于此,ramfs在memuconfig不是一个可选项,由于他可以节省的空间可
以忽略。

ramfs and ramdisk
比较老的ramdisk在内存区外分配一个综合的块,用它作为文件系统的回写堆。这个块的是固定大小的,所以挂载的文件系统也是固定的。而且额外的开销也很大。
和ramfs对比,ramdisk浪费了空间,让cpu做了不必要的工作,弄脏了cpu的缓存。总之,ramfs 相对来说比较简单。
另外一个原因,ramfs被半废除的原因是对回环的提出。回环提供了一个更灵活和方便的方式去产生一个块设备,用拷贝文件代替了拷贝内存大块。

ramfs and tmpfs
ramfs的一个确定是你可以一直向里面写数据,直到内存被填满。虚拟内存不能释放他因为它没有回写地址。所以,只有root用户才可以被允许访问ramfs.

ramfs的衍生物tmpfs,tmpfs产生一个大小受限,可以将数据写入交换空间的机制。一般用户也可以访问tmpfs.


rootfs是一个ramfs的特殊实例,他在2.6系统中呈现。你不能卸载rootfs就如同你不能杀死init进程。他很小也很简单去检查确定的列表不能为空。

如果config_tmpfs选项被启动了,roofs将使用tmpfs代替ramfs。如果要强制使用ramfs,可以再内核的命令行使用参数rootfstype=ramfs.

what is initramfs?
2.6 linux 内核中包含了一个gzipped “cpio”格式的目录项,在内核boot阶段被加载到rootfs里面。在被加载完成后,内核检查rootfs中是否有init文件,如果有,就用PID为1来执行他。init文件实现定位和挂载真正的根设备。如果没有Init程序,内核将检查其他的变量,如“/sbin/init”.

 

参考资料:http://askubuntu.com/questions/296038/what-is-the-difference-between-tmpfs-and-ramfs

首先ramfs和tmpfs做相同的事情但是有一些差异。ramfs 是动态的,其最大的值就是ram的空间值。
tmp不是动态增长的,在加载tmpfs时可以说明加载大小。tmpfs使用交换分区,而ramfs没使用。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章