⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vfs

📁 linux内核学习笔记 希望想看的人可以很快下载到
💻
字号:
any problems, send mails to lysindybear@sina.com.cn


相关文件
	/include/linux/dcache.h
	/include/linux/fs.h


linux的vfs系统比较复杂,但是同样也为我们制作一个新的文件系统提供了很大的方便。

对于每一个进程task,它的结构中一共有两个成员变量和文件系统有关,
struct fs_struct 	*fs;
struct files_struct	*files;

他们分别用来描述文件系统的特性(fs),和这个进程所使用的文件的性质(files),



我们可以使用下面的图来表示各种结构之间的关系


[struct files_struct]
(file*)	[fd_array0]----------------->[struct dentry]
	[fd_array1]		|--->	[d_inode]----------->[struct inode]	
	[fd_array2]		|			|--->	
	[………… ]		|			|
	[fd_arrayN]-------------|			|
	[………… ]					|
	[fd_arrayM]----------------->[struct dentry]	|
					[d_inode]--------

从上面的示意图可以看出来,在磁盘上的物理的文件使用唯一的一个inode结构来表示,一个逻辑上的文件
使用唯一的一个dentry结构来表示,也就是说比如一个文件还有一个符号连接文件,那么这个符号连接文件
也有一个dentry结构,但是他也指向那个物理文件的inode结构。

但是对于进程的files成员来说,他的每一个成员仅仅表示对文件的一次打开过程,也就是说,没打开一次文件,
无论什么文件,他都要在这个结构数组中申请一个files结构,即使对同样的一个文件,如果打开多次,那么
也会有不同的files结构来对应,因为他们的访问位置,权限等都可能不同。

另外,这些结构都有自己相应的函数操作集,

(1)struct file结构有一个file_operations * f_op属性。

(2)dentry结构有一个dentry_operations * d_op属性

(3)inode结构有一个inode_operations * i_op属性,还有一个file_operation * i_fop

(4)super_block结构有一个super_operations * s_op属性,
		
其中最为关键的就是inode结构中的i_op和i_fop属性,对于i_op,其中的主要的操作就是读写inode节点,
因为一个inode节点就是一个文件或者目录,所以读写这个结构,就相当于读一个文件进入内存或者写出
一个文件到外存。而i_fop则是对这个具体的文件进行读写,定位等操作的具体的实现。

对于file结构中的f_ops,完全是复制inode机构中的i_fop的,也就是说这个属性是系统自动复制的。

由此可以看出,如果开发一个文件系统的话,最为关键的就是为inode这两个结构进行赋值。














	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -