【文件目录】
为保证对计算机中大量的文件实施有效的管理,必须将他们进行妥善组织,为此有了供检索使用的、标识了系统中的文件和物理地址的数据结构,即文件目录
对文件目录进行管理的要求主要有以下四点:
- 实现按名存取
- 提高对目录的检索速度
- 文件共享
- 允许文件重名
【文件控制块】
文件控制块(File Control Block,FCB),是为文件设置的用于描述和控制文件的数据结构,文件与文件控制块一一对应,文件控制块的集合称为文件目录,即一个文件控制块就是一个文件目录表项,通常,一个文件目录也被看为一个文件,即目录文件
在文件控制块中,通常有以下几类信息:
- 基本信息类:文件名、文件物理位置、文件逻辑结构、文件的物理结构等
- 存取控制信息类:文件主存取权限、核准用户的存取权限、一般用户的存取权限
- 使用信息类:建立日期和时间、文件上次修改的日期和时间等
- 当前使用信息:打开该文件的进程数、是否被进程锁住、是否已修改等
【索引结点】
文件目录占用的盘块越大,需进行的磁盘读写开销越大,因此减少实际检索的信息量就是减少移动磁头的开销
目录一般是按名检索,而直到找到正确文件前,只关心文件名,不需要其它的文件描述信息,所以,可以将文件名、文件具体信息分开,使文件描述信息单独形成一个索引结点
简单的来说,索引结点是 FCB 的改进,其在外存和内存中有不同的形式:
- 磁盘索引结点:存放在磁盘上的索引结点,包含文件主标识符、文件类型、文件存取权限、文件物理地址、文件长度、文件连接计数、文件存取时间
- 内存索引结点:文件被打开后,将磁盘索引结点拷贝到内存索引结点中以便使用,在磁盘索引结点的基础上增加了索引结点编号、状态、访问计数、文件所属文件系统的逻辑设备号、链接指针
【目录结构】
单级目录
单级目录是最简单的目录,其在整个文件系统中只建立一张目录表,每个文件一个目录项,含有文件相关信息
每建立一个文件时,先检索所有的目录项,保证文件名唯一,之后获得一空白目录项,填入相关信息,同时修改状态位
每删除一个文件时,找到对应目录项,回收文件所占用空间,同时清除目录项
单级目录的优点在于简单、能实现目录管理的基本功能,但文件检索时需搜遍整个目录文件,范围大速度慢,且不允许重名,不便于实现文件共享,其在早期单机环境的 OS 中被广泛使用
两级目录
为克服单级目录的缺点,有了两级目录,其为每一个用户建立一个单独的用户文件目录 UFD,UFD 由用户所有文件的文件控制块组成
同时,系统建立一个主文件目录 MFD, MFD 中每个用户目录文件都占有一个目录项,其中包括用户名和指向 UFD 的指针
两级目录基本上克服了单机目录的缺点,提高了检索目录速度,并允许在不同的目录中可重名,同时不同用户可以使用相同或不同的文件名来访问系统中的同一个共享文件,其在早期多用户环境的 OS 中被广泛使用
树形结构目录
树形目录结构又称多级目录,在如今被广泛使用,其层次结构更清晰,权限管理更灵活,但目录级别太多时会增加路径检索层次,增加磁盘访问时间
主目录称为根目录,数据文件为树叶,其它目录为结点,路径名是从根目录到任何数据文件都只有一条唯一通路,目录文件名和数据文件名依次用 /
连接起来
每个进程还设置一个当前目录,又称工作目录,从当前目录开始,逐级经过中间的目录文件,最后达到要访问的数据文件
从工作路径上的目录和数据文件名用 /
连接成路径名,称为相对路径名,而从根开始的路径名称为绝对路径名
【目录查询技术】
当用户要访问一个文件时,要经过以下几步操作:
- 目录数据调入内存
- 按名检索,利用提供的文件名对目录进行查询
- 找该文件控制块 FCB
- 读取 FCB 或对应索引结点
- 从文件物理地址换算出文件在磁盘上的物理位置
- 通过磁盘驱动程序,将所需文件读入内存
目录查询方式通常有以下两种方法:
- 线性检索法:在单级目录中,通过文件名顺序查找文件目录;在多级目录中,通过路径名,逐层查找文件目录
- 哈希方法:建立一张哈希索引文件目录,通过文件名变换为索引值,再利用索引值去查找