操作系统4.1.3 文件目录

目录本身就是一种有结构文件,由一条条记录组成。每条记录对应一个在该放在该目录下的文件。

 

一、文件控制块

目录文件中的一条记录就是一个“文件控制块(FCB)”。

FCB 的有序集合称为“文件目录”,一个 FCB 就是一个文件目录项
FCB 中包含了文件的基本信息(文件名、物理地址、逻辑结构、物理结构等),存取控制信息(是否可读/可写、禁止访问的用户名单等),使用信息(如文件的建立时间、修改时间等)。
最重要、最基本的还是文件名、文件存放的物理地址。

 

二、目录操作

  1. 搜索:当用户要使用一个文件时,系统要根据文件名搜索目录,找到该文件对应的目录项
  2. 创建文件:创建一个新文件时,需要在其所属的目录中增加一个目录项
  3. 删除文件:当删除一个文件时,需要在目录中删除相应的目录项
  4. 显示目录:用户可以请求显示目录的内容,如显示该目录中的所有文件及相应属性
  5. 修改目录:某些文件属性保存在目录中,因此这些属性变化时需要修改相应的目录项(如:文件重命名)

 

三、目录结构

1、单级目录

单级目录实现了“按名存取”,但是不允许文件重名。
在创建一个文件时, 需要先检查目录表中有没有重名文件,确定不重名后才能允许建立文件,并将新文件对应的目录项插入目录表中。

但显然,单级目录结构不适用于多用户操作系统。

 

2、两级目录结构

早期的多用户操作系统,采用两级目录结构。分为主文件目录(MFD, Master File Directory)和用户文件目录(UFD,User Flie Directory)。

 

3、多级目录结构(树形目录结构)

现在 OS 中,最通用且实用的文件目录无疑是树形结构目录,也叫多级目录结构。

用户(或用户进程)要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。
各级目录之间用“/”隔开。从根目录出发的路径称为绝对路径
例如:自拍.jpg 的绝对路径是“/照片/2015-08/ 自拍.jpg”

系统根据绝对路径一层一层地找到下一级目录。

3次读磁盘 I/O 操作:

  1. 刚开始从外存读入根目录的目录表
  2. 找到“照片”目录的存放位置后,从外存读入对应的目录表
  3. 再找到“2015-08”目录的存放位置,再从外存读入对应的目录表
  4. 最后才找到文件“自拍 jpg”的存放位置

显然,每次都从根目录开始查找,每次都需要3次读磁盘操作是很低效的。

 

因此可以设置一个“当前目录”:

例如,此时已经打开了“照片’的目录文件,也就是说,这张目录表已调入内存,那么可以把“照片”目录设置为“当前目录”。当用户想要访问某个文件时,可以使用从当前目录出发的“相对路径”。

引入“当前目录”和“相对路径”后,磁盘I/O的次数减少了,也就提升了访问文件的效率。

 

总结

树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,树形结构不便于实现文件的共享。为此,提出了“无环图目录结构”。

 

4、无环图目录结构

可以用不同的文件名指向同一个文件,甚至可以指向同一个目录(共享同一目录下的所有内容)。

需要为每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点。用户提出删除结点的请求时,只是删除该用户的 FCB、并使共享计数器减 1,并不会直接删除共享结点。只有共享计数器减为 0 时,才删除结点。

注意!共享文件不同于复制文件。在共享文件中,由于各用户指向的是同一个文件,因此只要其中一个用户修改了文件数据,那么所有用户都可以看到文件数据的变化。

 

四、索引结点(FCB的改进)

其实在查找各级目录的过程中只需要用到“文件名”这个信息,只有文件名匹配时,才需要读出文件的其他信息。

因此可以考虑让目录表“瘦身”来提升效率。所以我们可以将除了文件名之外的信息都存在索引结点中。

思考有何好处?
假设一个 FCB 是 64B,磁盘块的大小为 1KB,则每个盘块中只能存放 16 个 FCB。若-一个文件目录中共有 640 个目录项,则共需要占用 640/16= 40 个盘块。因此按照某文件名检索该目录,平均需要查询 320 个目录项。平均需要启动磁盘 20 次(每次磁盘 I/0 读入一块)

若使用索引结点机制,文件名占 14B,索引结点指针站 2B,则每个盘块可存放 64 个目录项,那么按文件名检索目录平均只需要读入 320/64=5 个磁盘块,即只要启动5次I/O磁盘操作。显然,这将大大提升文件检索速度

 

五、总结

本节内容非常重要,极易出选择题。 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟敛寒林o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值