概述
文件系统架构
- 最底层,设备驱动程序程序直接与外围设备通信。
- 基本文件系统(物理I/O层),处理在磁盘间或磁带系统间交换的数据块,关注的是这些块在辅助存储和内存缓冲区中的位置,不关注数据内容或所涉及的文件结构。
- 基本I/O管理,程序负责所有文件I/O的初始和终止。
- 逻辑I/O,使用户和应用程序能够访问到记录。
文件管理功能
文件管理系统作为1个单独的系统实用程序,和操作系统关注的是不同方面的内容。关注记录的处理。
文件组织和访问
文件组织重要原则:
• 访问快速
• 易于修改
• 节约存储空间
• 维护简单
• 可靠性
基本组织:
• 堆
• 顺序文件
• 索引顺序文件
• 索引文件
• 直接或者散列文件
堆:按到达顺序收集。
顺序文件:每条记录都使用同一种固定格式。记录有相同的长度,由相同数目、长度固定的域按特定的顺序组成。
关键域,通常是每条记录的第一个域。记录按关键域存储:文本关键域按字母顺序,数字按数字顺序。
索引顺序
保留顺序文件的特征:记录按照关键域的顺序组织起来。
增加特征:用于支持随机访问的文件索引和溢出文件。
最简单的一级索引:
- 索引文件由两个域组成:关键域和指向主文件的指针,关键域和主文件中的关键域相同
- 为找一个特定的域,先找索引,关键域值等于目标关键域(或者位于目标关键域之前且最大的索引)
- 在该索引的指针所指的主文件中的位置开始找。
索引文件
索引顺序保留了顺序文件的一个限制:基于文件的一个域进行处理。当需要基于其他属性而非关键域查找一条记录时,这两种形式的顺序文件都不能胜任。
采用多索引结构,每种可能成为查找条件的域都有一个索引。放弃顺序、关键字概念,只能通过索引来访问记录。结果是对记录的放置位置不再有限制,只要至少1个索引指针指向这条记录就可以。
直接文件或散列文件
B树
linux虚拟文件系统
利用虚拟文件系统(Virtual File System, VFS)来支持大量的文件管理系统和文件结构。
VFS作用:
- 进程发起一个面向文件的系统调用时,内核调用VFS的函数。
- 该函数处理完与具体文件系统无关的操作后,调用目标文件系统中的相应函数。(通过1个转换VFS调用到目标文件系统调用的映射函数实现)
- 目标文件系统转换文件系统请求到面向设备的指令。
VFS主要4个对象:
- 超级块对象(superblock object):代表一个特定的已挂载的文件系统
- 索引节点对象(inode object):代表一个特定的文件
- 目录项对象(dentry object):代表一个特定的目录项
- 文件对象(file object):代表一个与进程相关的打开的文件。