Linux IO子系统由上至下,依次由VFS虚拟文件系统层,pagecache,Mapping Layer(具体的文件系统),通用块层,IO调度层,块设备驱动层组成。
VFS说明。
VFS虚拟文件系统
VFS建立了文件系统的统一模型,对文件系统的公共属性做了抽象和定义,封装了文件系统的统一接口,应用程序可以不加修改的,透明的访问操作系统上不同文件系统的文件。
VFS层有几个最重要的概念:file、inode、dentry。
File
文件本质上是单纯的字节流,应用程序告诉内核读取文件偏移和长度,内核返回字节流,应用程序自行解读数据内容。
每当打开一个文件的时候,内核为之分配一个文件对象,VFS用struct file来描述它。
<pre name="code" class="html">struct file {
struct path f_path;
<strong>const struct file_operations *f_op; //文件操作</strong>
spinlock_t f_lock;
int f_sb_list_cpu;
atomic_long_t f_count;
unsigned int f_flags;
fmode_t f_mode;
loff_t f_pos; //文件读写位置
}
每一个文件对象都包含打开、关闭、读、写等一系列文件操作的函数指针,不同文件系统注册不同的函数。以ext4文件系统