文件系统结构
- 文件系统采用磁盘进行存储:
支持原地重写
支持顺序访问和随机访问
内存和磁盘间I/O传输以块为单位
每个卷有引导控制块,从该卷引导操作系统的所需信息。
卷控制块:包含卷的详细信息
整个系统的打开文件表:包含文件控制块(FCB)
FCB包含文件权限、文件日期、文件所有组、文件大小、文件数据块位置等
每个进程的打开文件表:指向整个系统的打开文件表
文件系统实现
(每个卷第一块)引导控制块可以包含从该卷引导操作系统的所需信息
(每个卷)卷控制块包含卷的详细信息
(每个文件系统)目录结构
每个文件的文件控制块包含文件的详细信息
目录实现
线性列表
哈希表
分配方法
- 连续分配:每个文件在磁盘上占有一组连续的块
问题:1. 类似动态存储分配(碎片)2. 难以确定文件需要的空间
- 链接分配:每个文件的文件块通过链表连接起来
问题:1.只支持顺序访问 2. 指针空间 3. 指针可能会丢失
- 索引分配:每个文件的所有链表指针都放在一个索引块中
问题:性能有所欠缺
空闲空间管理
位图:每块用一个bit来表示是否空闲
链表
组:第一个空闲块中存储n个空闲块的地址,这些块的前n-1个为空,最后一块包含另外n个空闲块的地址
计数:链表中记录第一块的地址和紧跟第一块的连续空间块的数量
效率与性能
缓冲区缓存:缓存物理磁盘块
页面缓存:采用虚拟内存技术,将文件数据作为页来缓存,更加高效
双缓存:内存映射线从FS中读入磁盘块,存储再缓冲区缓存,再复制到页面缓存,供内存映射I/O操作
统一虚拟内存:进程页面和文件数据都采用页面缓存
无统一缓冲区缓存的I/O:
采用统一缓冲区缓存的I/O:
同步写&异步写区别:是否缓存写数据
随后释放:一旦请求下一个页面,就从缓冲区中删除一个页面
预先读取:请求的页面和一些之后的页面一起读取并缓存
NFS
- 安装协议:
服务器维护输出列表(可以安装的本地文件系统,允许安装的机器名称)
当服务器收到安装请求时,返回文件句柄标识安装目录
服务器维护客户机以及对应当前安装目录
- NFS协议:
为远程文件提供RPC操作
没有打开和关闭文件操作(无状态)
每个NFS请求包含序列号,用来确定请求是否重复或缺失
- 路径名称转换:
客户将路径名称解析成单独的文件条目(如/use/local/dirl/file.txt解析成use, local, dirl)
每个目录执行NFS查找调用,遇到安装点,发送RPC给服务器
客户机缓存路径名称转换
- 远程操作:
RPC获取文件块和文件属性,缓存在本地
打开文件时,检查缓存是否需要更新
远程操作采用缓存数据
客户机在服务器确认数据写到磁盘后,释放块