文件目录
廖家龙 用心听,不照做
  • 文件之间的组织结构清晰,易于查找
  • 编程时也可以很方便的用文件路径找到一个文件,用户可以轻松实现“按名存取”

从操作系统的角度来看,这些目录结构应该是如何实现的?

文件控制块(实现文件目录的关键数据结构)

FCB实现了文件名和文件之间的映射,使用户(用户程序)可以实现“按名存取”

需要对目录进行哪些操作:

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

目录结构

单级目录结构

早期操作系统并不支持多级目录,整个系统中只建立一张目录表,每个文件占一个目录项

两级目录结构

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

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

无环图目录结构

❗️只有共享计数器减为0时,才删除结点

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

索引结点(对文件控制块的优化)

由于目录项长度减小,因此每个磁盘块可以存放更多个目录项,因此检索文件时磁盘I/O的次数就少了很多

当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件

存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存索引结点”,相比之下内存索引结点中需要增加一些信息,比如文件是否被修改、此时有几个进程正在访问该文件等