文件目录是一种数据结构,用于标识系统中的文件及其物理地址,供检索时使用
对目录管理的要求
- 实现“按名存取”。用户只需要向系统提供所需要访问文件的名字,便能快速地找到指定文件在外存上的存储位置。这是目录管理中最基本的功能,也是文件系统向用户提供的最基本的服务。
- 提高对目录的检索速度
- 文件共享,在多用户系统中,应允许多个用户共享一个文件
- 允许文件重名
文件控制块
为了对一个文件进行正确的存取,必须为文件设置用于描述和控制文件的数据结构。
文件管理程序可借助于文件控制块中的信息对文件做各种操作。
文件控制块的有序集合称为文件目录
一个文件控制块就是一个文件目录项,一个文件目录也被看做是一个文件,称为目录文件。
文件控制块FCB
为了能对系统中的大量文件施以有效的管理,在文件控制块中,通常包含三种信息。
(1)
基本信息类:
文件名,文件物理位置、文件逻辑结构、文件的物理结构
(2)
存取控制信息类
(3)使用信息类
索引结点
文件目录通常是存放在磁盘上的当文件很多时,文件目录可能会占用大量盘块。在查找目录的过程中,必须先将目录文件中的第一个盘块中的目录调入内存,然后将用户所给定的文件名,与目录项中的文件名一一比较。若未找到指定文件,还需要将下一盘块的目录项调入内存。
在检索目录文件的过程中,只用到了文件名,仅当找到一个目录项(其中的文件名与指定要查找的文件名相匹配)时,才需从该目录项中读出该文件的物理地址。其他一些对该文件进行描述的信息在检索目录时一概不用。
这些信息在检索目录时不需要调入内存。
UNIX系统中,采用了把文件名与文件描述信息分开的方法
使文件描述信息单独形成一个称为索引结点的数据结构——i结点
在文件目录中的每个目录项仅由文件名和指向该文件所对应的i结点的指针构成
简单的文件目录
- 单级文件目录
整个文件系统中只建立一张目录表,每个文件占一个目录项。
每当要建立一个新文件时,必须先检索所有的目录项,来保证新文件名在目录项中是唯一的。
但只能实现按名存取
缺点:
(1)查找速度慢。对于一个具有N个目录项的单机目录,检索出一个目录项,需要查找N/2个目录项。
(2)不允许重名。
(3)不便于实现文件共享(不允许不同用户使用不同的名字访问同一个文件) - 两级文件目录
为每一个用户建立一个单独的用户文件目录,每个用户文件目录,由每个用户所有文件的文件控制块构成。在系统中在建立一个主文件目录,在主文件目录中,每个用户目录都占有一个目录项,其目录项包括用户名和指向该用户目录文件的指针。
(1)提高了检索目录的速度
(2)在不同的用户目录中,可以使用相同的文件名
(3)不同用户还可使用不同文件名访问系统中的同一个共享文件
树形结构目录
在每个目录文件中,只能有一个根目录,每个文件和每个目录都只能有一个父目录。数据文件称为树叶。
从根目录到任何数据文件都只有一条唯一的通路。