《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统
2017-08-24 18:25
211 查看
虚拟文件系统(VFS)是linux内核和具体I/O设备之间的封装的一层共通访问接口,通过这层接口,linux内核可以以同一的方式访问各种I/O设备。
虚拟文件系统本身是linux内核的一部分,是纯软件的东西,并不需要任何硬件的支持。
主要内容:
虚拟文件系统的作用
虚拟文件系统的4个主要对象
文件系统相关的数据结构
进程相关的数据结构
小结
- 简化了应用程序的开发:应用通过统一的系统调用访问各种存储介质
- 简化了新文件系统加入内核的过程:新文件系统只要实现VFS的各个接口即可,不需要修改内核部分
它一般存储在磁盘的特定扇区中,但是对于那些基于内存的文件系统(比如proc,sysfs),超级块是在使用时创建在内存中的。
超级块的定义在:<linux/fs.h>
View Code
struct fs_struct 位于:<linux/fs_struct.h>
struct mmt_namespace 位于:<linux/mmt_namespace.h>
但是在2.6内核之后似乎没有这个结构体了,而是用 struct nsproxy 来代替。
以下是 struct task_struct 结构体中关于文件系统的3个属性。
struct task_struct 的定义位于:<linux/sched.h>
目前linux内核中已经支持60多种文件系统,具体支持的文件系统可以查看 内核源码 fs 文件夹下的内容。
虚拟文件系统本身是linux内核的一部分,是纯软件的东西,并不需要任何硬件的支持。
主要内容:
虚拟文件系统的作用
虚拟文件系统的4个主要对象
文件系统相关的数据结构
进程相关的数据结构
小结
1. 虚拟文件系统的作用
虚拟文件系统(VFS)是linux内核和存储设备之间的抽象层,主要有以下好处。- 简化了应用程序的开发:应用通过统一的系统调用访问各种存储介质
- 简化了新文件系统加入内核的过程:新文件系统只要实现VFS的各个接口即可,不需要修改内核部分
2. 虚拟文件系统的4个主要对象
虚拟文件中的4个主要对象,具体每个对象的含义参见如下的详细介绍。2.1 超级块
超级块(super_block)主要存储文件系统相关的信息,这是个针对文件系统级别的概念。它一般存储在磁盘的特定扇区中,但是对于那些基于内存的文件系统(比如proc,sysfs),超级块是在使用时创建在内存中的。
超级块的定义在:<linux/fs.h>
struct files_struct { atomic_t count; /* 使用计数 */ struct fdtable *fdt; /* 指向其他fd表的指针 */ struct fdtable fdtab;/* 基 fd 表 */ spinlock_t file_lock ____cacheline_aligned_in_smp; /* 单个文件的锁 */ int next_fd; /* 缓存下一个可用的fd */ struct embedded_fd_set close_on_exec_init; /* exec()时关闭的文件描述符链表 */ struct embedded_fd_set open_fds_init; /* 打开的文件描述符链表 */ struct file * fd_array[NR_OPEN_DEFAULT]; /* 缺省的文件对象数组 */ };
View Code
struct fs_struct 位于:<linux/fs_struct.h>
struct fs_struct { int users; /* 用户数目 */ rwlock_t lock; /* 保护结构体的读写锁 */ int umask; /* 掩码 */ int in_exec; /* 当前正在执行的文件 */ struct path root, pwd; /* 根目录路径和当前工作目录路径 */ };
struct mmt_namespace 位于:<linux/mmt_namespace.h>
但是在2.6内核之后似乎没有这个结构体了,而是用 struct nsproxy 来代替。
以下是 struct task_struct 结构体中关于文件系统的3个属性。
struct task_struct 的定义位于:<linux/sched.h>
/* filesystem information */ struct fs_struct *fs; /* open file information */ struct files_struct *files; /* namespaces */ struct nsproxy *nsproxy;
5. 小结
VFS 统一了文件系统的实现框架,使得在linux上实现新文件系统的工作变得简单。目前linux内核中已经支持60多种文件系统,具体支持的文件系统可以查看 内核源码 fs 文件夹下的内容。
相关文章推荐
- 《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统
- 《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统
- 《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统
- 《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统
- 《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统
- 《Linux内核设计与实现》读书笔记(十九)- 可移植性
- 读书笔记(十三)--成交
- 《Linux内核设计与实现》读书笔记(十)- 内核同步方法
- 《Linux内核设计与实现》读书笔记(五)- 系统调用
- 《Linux内核设计与实现》读书笔记(十二)- 内存管理
- 《从程序员到项目经理》读书笔记(十三)项目管理三大目标
- 《Linux内核设计与实现》读书笔记(五)- 系统调用
- 《Linux内核设计与实现》读书笔记(四)- 进程的调度
- 《linux内核设计与实现》读书笔记第五章——系统调用
- 《Linux内核设计与实现》第四周读书笔记——第五章
- 《Linux内核设计与实现》第五周读书笔记——第十一章
- 《Linux内核设计与实现》读书笔记(十五)- 进程地址空间(kernel 2.6.32.60)
- COM技术内幕-读书笔记-系列之十三
- Java程序性能优化 读书笔记(十三)并行设计模式:不变模式
- 《Linux内核设计与实现》读书笔记(二十)- 补丁, 开发和社区