目录
这部分总结的比较简略
* 文件包含文件本身和文件相关的信息。
* 不同类型文件的开头几个字节有特定的次序,用于表示该文件是什么类型,需要如何操作。
* 对文件的组织管理需要有目录这种形式的数据结构。通过目录可以索引文件,存储和文件相关的位置等信息,文件信息也保存在目录中。
目录的结构
- 单层结构:较简单的目录用单层的目录,实现是一个MAP,每一个目录中文件的条目索引一个真实文件的地址。所有文件都包含在一个目录中,这种结构对于目录对不同用户使用,文件有不同名称等情况不能处理。
- 双层结构:类似于单层鲁姆,不过是两层,第一层是用户,第二层是文件目录。
- 树状结构:即便是双层目录,每个用户下文件也都是包含在一级目录下的,没有层次,而树状目录允许用户创建富有层次的目录,但是树状结构不能支持对文件的共享。
- 无环图目录:对于多用户下需要共享的文件,尤其是大文件,如果多个用户分辨储存一次,浪费空间。在树状目录中共享无法实现,所以有了无环图目录,它允许目录含有共享的子目录或者文件,无环还强调目录之间的引用关系不存在环。此外,无环图对共享目录的遍历开销更大。存在共享的目录存在一个问题:如果一方删除了共享文件,另一方的目录如何处理?一种方法是删除文件时,另其他所有目录的引用全部置为无效,另一种处理方法是保留文件直到对这个文件的所有目录引用都消失。
- 通用图目录:相比于无环图,这里强调通用图可能存在环,那么高效的遍历算法就是通用图看重的了。
文件系统
文件系统的分层设计:(由低到高)
- 设备
- I/O控制:由设备驱动程序和中断处理程序组成,负责磁盘和内存之间的数据传输
- 基本文件系统:发送一般命令控制对磁盘物理块的读写
- 文件组织系统:将物理块与逻辑块相映射
- 逻辑文件系统:管理文件系统的所有结构数据等元数据
- 应用程序
文件系统的实现
- 每个卷(分区)的引导控制块:保存磁盘启动操作系统所需要的信息,没有操作系统则为空,NTFS下称为分区引导扇区,UFS下称为引导块
- 卷控制块:包括每个卷的详细信息,如分区的总块数,空闲块数等,NTFS下称为主控文件表,UFS下称为超级块
- 每个文件系统的目录结构:用于组织文件
- 每个文件的文件控制块:包括文件的详细信息,包括文件的大小,数据块,拥有者等
目录的实现
- 线性列表:拥有线性数据结构的公共优缺点,查找耗时,创建新文件需要先遍历是否文件重名
- 哈希表:避免了线性表的查找性能低的问题,但是需要处理哈希本身的问题:冲突和重新哈希