文章目录
- 一.文件系统层次结构
- 二.文件系统的全局结构
- 三.虚拟文件系统与文件系统挂载(安装)
- (一)虚拟文件系统
- (二)文件系统挂载(安装)
一.文件系统层次结构
(1)用户接口
文件系统需要向上层的用户提供一些简单易用的功能接口,用于处理用户发出的系统调用请求(Read、Write、Open、Close等系统调用)
(2)文件目录系统
用户是通过文件路径来访问文件的,因此这一层需要根据用户给出的文件路径找到相应的FCB或索引结点。所有和目录、目录项相关的管理工作都在本层完成,如:管理活跃的文件目录表、管理打开文件表等。
(3)存取控制模块
为了保证文件数据的安全,还需要验证用户是否有访问权限。这一层主要完成了文件保护相关功能。
(4)逻辑文件系统与文件信息缓冲区
用户指明想要访问文件记录号,这一层需要将记录号转换为对应的逻辑地址
(5)物理文件系统
把文件的逻辑地址转换为实际的物理地址
(6)设备管理模块
直接与硬件交互,负责和硬件直接相关的一些管理工作。如:分配设备、分配设备缓冲区、磁盘调度、启动设备、释放设备等
(7)辅助分配模块
负责文件存储空间的管理,即负责分配和回收存储空间
二.文件系统的全局结构
1.物理格式化/低级格式化
划分扇区,检测坏扇区(坏扇区对操作系统透明),并用备用扇区替换坏扇区
2.逻辑格式化/高级格式化
逻辑格式化后,磁盘分区(分卷),完成各分区的文件系统初始化。逻辑格式化后,灰色部分就有实际数据了,白色部分还没有数据。
(1)超级块:迅速找到若干空闲盘块
(2)位示图:判断某特定磁盘块是否空闲
(3)i 结点区:存放索引结点(连续存放),可以通过索引结点下标定位到指定结点
3.文件系统在内存中的结构
(1)目录的缓存
近期访问过的目录文件会缓存在内存中,不用每次都从磁盘读入,这样可以加快目录检索速度
(2)系统打开文件表
整个系统只有一张
(3)进程打开文件表
每个进程一张,包含在PCB中,记录某进程当前打开了哪些文件
[例] 文件A所在目录M,将目录M的数据读入主存,查找目录项,找到FCB_A,将该目录项复制到系统打开文件表,并设置打开计数。在进程的打开文件表中新建条目,记录打开方式(只读),并记录系统打开文件表索引(2),并返回文件描述符(指向进程打开文件表新条目的指针)。后续程序员即可使用文件描述符对文件进行操作。
三.虚拟文件系统与文件系统挂载(安装)
(一)虚拟文件系统
1.普通文件系统
计算机内部存在多种文件系统,程序员调用函数不便。
2.虚拟文件系统VFS
虚拟文件系统向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异。虚拟文件系统要求下层的文件系统必须实现某些规定的函数功能,如:open/read/write。一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统VFS的要求。
每次打开文件后,虚拟文件系统都会给文件在主存中建立一个VNode,将文件相关信息复制到VNode结点中。虚拟文件系统就可以用统一的数据结构来表示任何一个文件的信息(无论文件属于哪个文件系统)。VNode中的函数功能指针指向对应文件系统的函数功能列表
VNode只存在于主存中,而 iNode既会被调入主存,也会在外存中存储
(二)文件系统挂载(安装)
文件系统挂载要做的事:
①在VFS中注册新挂载的文件系统。内存中的挂载表包含每个文件系统的相关信息,包括文件系统类型、容量大小等。
②新挂载的文件系统,要向VFS提供一个函数地址列表
③将新文件系统加到挂载点,也就是将新文件系统挂载在某个父目录下