4. 文件的目录结构
Last updated
Last updated
对于每一个目录,都会有一个目录表,其结构如下:
目录本身就是一个有结构的文件,由一条条记录组成。每条记录对应一个在该目录文件下的文件
目录文件中的一条记录就是一个 文件控制块(FCB),包含了基本信息(文件名、物理地址、逻辑结构、物理结构等),存取控制信息(是否可读 / 可写、禁止访问的用户名单等),使用信息(如文件的建立时间、修改时间等)
需要对目录进行的操作:
搜索
创建文件
删除文件
显示目录
修改目录
早期操作系统不支持多级目录,整个系统只建立一张目录表,每个文件占一个目录项
单级目录实现了 按名存取,但是不允许文件重名
在创建一个文件时,需要先检查目录表中有没有重名文件,确定不重名后才能允许建立文件,并将新文件对应的目录项插入目录表中
早期的多用户操作系统,采用两级目录结构。分为主文件目录(MFD)和用户文件目录(UFD)
主文件目录下是用户目录,每个用户一个目录,每个用户目录里存放文件。每个用户目录下不允许重名,不同用户目录下运行重名
缺点:对于某一个用户来说,不能对自己的文件进行分类管理
对于一个目录中,可以有目录和文件。不同目录下的文件可以重名
树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是树形结构不便于实现文件的共享
在树形目录结构的基础上,增加了一些指向同一节点的有向边,使整个目录成为一个有向无环图。可以更加方便的实现多个用户间的文件共享
可以用不同的文件名指向同一个文件,甚至可以指向同一个目录
需要为每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点。用户提出删除结点的请求时,只是删除该用户的 FCB、并使共享计数器减 1,并不会直接删除共享结点。只有共享计数器减为 0 时,才删除结点
注意:共享和复制是不同的
在查找文件的时候,仅仅使用到了文件名这个信息,但是我们却是在整个目录表中去查找的,需要把真个目录表从磁盘中读取出来。有时目录表很大,需要多个盘块存放,这样在查找的时候,就需要启动磁盘很多次,开销增大
优化思路:把除了文件名之外的文件描述信息都放到一个索引结点里,同时建立一张表,其中包含文件名,和指向索引结点的指针。查找时,只需要把这张表调出即可。由于这张表只有两个字段,很小,占用的盘块也相应减少,需要启动磁盘的次数减少,提高了检索速度