kernel VFS(Virtual File System) 四个主要数据结构

1. 超级块, 代表一个具体的已安装的文件系统。

struct super_block

2. 索引节点,代表一个具体文件。

struct inode 
  • 索引节点对象包含了内核操作文件或目录时需要的全部信息。对于Unix风格的文件系统来说,这些信息可以从磁盘索引节点直接读入。索引节点对象必须在内存中创建,以便于文件系统使用。 一个索引节点代表文件系统中(但是索引节点仅当文件被访问时,才在内存中创建)的一个文件,它也可以是设备或管道这样的特殊文件。

3. 目录项

struct dentry
  • 为了方便对文件/目录的查找操作,提高查找性能,VFS引入了目录县的概念。解析一个路径并遍历其分量是一个耗时的操作。目录项对象的引入使得这个过程更加简单。每个dentry代表路径中的一个特定部分。对于/bin/vi 这个例子来说,/、bin、vi 都属于目录项对象。
  • VFS在执行目录操作时(如果需要的话)会现场创建目录项对象。目录项与超级块/索引节点不同,目录项没有对应的磁盘数据结构。
  • 内核会将目录项对象缓存在**目录项缓存(dcache)**中。

4. 文件

struct file  
  • 文件对象表示进程已经打开的文件。进程直接处理的是文件,而不是超级块、索引节点或目录项。
  • 文件对象是已经打开的文件在内存中的表示。该对象(不是物理文件)由相应的open()系统调用创建,有close()系统调用撤销。
  • 多个进程可以同时打开或操作同一个文件。所以同一个文件也可能存在多个对应的文件对象。文件对象仅仅在进程观点上代表已打开文件,它反过来指向目录项对象(目录项对象反过来指向索引节点),其中只有目录项对象才表示已经打开的实际文件。
  • 文件对象实际上也没有对应的磁盘数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值