Linux虚拟文件系统VFS
VFS是linux实现的虚拟文件系统,规定了数据结构和接口规范。
文件系统层
VFS内部通过超级块、索引节点、逻辑块和超级块等管理文件。
超级块:文件系统整体情况,索引节点和逻辑块的使用情况。
逻辑块:磁盘扇区构成的最小存储单元。
索引节点:文件的元数据,索引到具体的文件数据。
目录项:记录文件名,以及文件和目录、目录和目录之间的关系。
需要注意的是目录项只存在于内存中,超级块、逻辑块和索引节点是磁盘中的持久化数据,目录项的内容是从磁盘中读取加载的。
通用块层
在文件系统和磁盘驱动之间还有一个块设备抽象层,该层向上提供了统一的块设备标准接口,向下兼容各种类型的磁盘,同时负责对文件系统和应用程序发送过来的I/O请求排队,用重排、合并等方式,提高磁盘读写效率,也就是I/O调度。
Linux支持四种I/O调度策略:
NONE:不调度。
NOOP:先入先出,只做基本的请求合并,常用于SSD。
CFQ:默认策略,公平调度,每个进程维护一个I/O调度队列,按照时间片均匀分布每个进程的I/O请求。
DealLine:读、写两个I/O队列,距离截止时间最近的请求被优先处理,可以提高机械磁盘的吞吐量,通常用在压力较重的场景,例如数据库。
设备层
驱动程序和物理设备,负责物理设备上最终的I/O操作。