linux initrd,linux – initrd和initramfs之间的区别?

Dentry(和inode)缓存

Linux中的文件系统子系统有三个层。 VFS(虚拟文件系统),实现系统调用接口和处理交叉安装点和默认权限和限制检查。下面是单个文件系统的驱动程序,然后是块设备(磁盘,存储卡等;网络接口是例外)驱动程序的接口。

VFS和文件系统之间的接口是几个类(它是简单的C,所以结构包含指向函数等的指针,但在概念上它是面向对象的接口)。主要的三个类是inode,其描述文件系统中的任何对象(文件或目录),dentry,其描述目录和文件中的条目,其描述由进程打开的文件。安装时,文件系统驱动程序创建它的根节点和dentry,而其他的则是在进程想要访问文件并最终过期时按需创建的。这是一个dentry和inode缓存。

是的,这的确意味着,对于每个打开的文件和任何目录下,根必须有inode和dentry结构分配在内核内存中代表它。

页面缓存

在Linux中,包含用户空间数据的每个内存页都由统一页面结构表示。这可能将页面标记为匿名的(可能被交换为交换空间,如果可用)或将其与一些文件系统上的inode相关联(可能被写回并从文件系统重新读取),它可以是任何数量的内存的一部分映射,即在某个进程的地址空间中可见。当前加载到内存中的所有页面的总和是页面缓存。

这些页面用于实现mmap接口,而常规的读写系统调用可以由文件系统通过其他方式实现,大多数接口使用也使用页面的通用函数。有通用函数,当请求文件读取时分配页面并调用文件系统来逐个填充它们。对于基于块设备的文件系统,它仅计算适当的地址,并将此填充委派给块设备驱动程序。

拉姆代夫

Ramdev是常规块设备。这允许在其上层叠任何文件系统,但它受块设备接口的限制。这只有方法来填充由调用者分配的页面,并将其写回。这正是磁盘,存储卡,USB大容量存储等实际块设备所需要的,但对于ramdisk这意味着数据存储在内存中两次,一次在ramdev的内存中,一次在内存中由呼叫者。

这是实现initrd的旧方法。从initrd是罕见的和异国情调发生的时间。

tmpfs

Tmpfs是不同的。这是一个虚拟文件系统。它提供给VFS的方法是使它工作的绝对最低限度(因为它是inode,dentry和文件方法应该做的优秀文档)。仅当inode缓存中存在相应的inode和dentry时,文件才存在,在创建文件时创建,并且从不过期,除非该文件被删除。当数据被写入时,页面与文件相关联,否则表现为匿名的(数据可以被存储以交换,只要文件存在,页面结构保持使用)。

这意味着在内存中没有额外的数据副本,整个事情是很简单,也由于稍快。它只是使用数据结构,作为任何其他文件系统的缓存,因为它是主存储。

这是实现initrd的新方法(initramfs,但是映像仍然被称为initrd)。

它也是实现“posix共享内存”的方式(这意味着tmpfs安装在/ dev / shm上,应用程序可以自由地在那里创建文件和mmap;简单和高效),最近甚至/ tmp和/ run / var / run)经常安装tmpfs,尤其是在笔记本电脑上,以防止磁盘不必旋转或避免在SSD情况下的一些磨损。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值