32-文件目录及功能
文件目录
文件目录就是我们很熟悉的Windows操作系统的文件夹
文件控制块
实现文件目录的关键数据结构
目录本身就是一种结构文件,由一条条记录组成.每条记录对应一个放在目录下的文件。
目录文件中的一条记录就是一个文件控制块"FCB"
FCB中包含了文件的一些基本信息
- 文件名
- 物理地址
- 逻辑结构
- 物理结构
- 存取控制信息
- 是否可读/可写
- 禁止访问的用户名单
- 使用信息(如文件的建立时间,修改时间)
FCB实现了文件名到文件之间的映射,旨在实现按名存取.
功能
搜索
当用户要使用一个文件时,系统要根据文件名搜索目录,找到该文件对应的目录项
创建文件
创建一个新文件时,需要在其所属的目录中增加一个目录项
删除文件
当删除一个文件时,需要在其目录中删除相应的目录项
显示目录
用户可以请求显示目录的内容,如显示该目录中所有的文件及相应属性
修改目录
某些文件属性保存在目录中,因此这些属性变化需要相应的目录项(譬如重命名)。
目录结构
单级目录结构[不允许重名]
早期操作系统并不支持多级目录,整个操作系统中只简历一张目录表,每个文件占一个目录项。
不允许文件重名,不适应多用户操作系统。
两级目录结构[不能对文件进行分类]
分为主文件目录和用户文件目录
主文件目录记录用户名及其相应用户文件目录的存放位置
用户文件目录由该用户的FCB组成
允许不同用户的文件重名。文件名虽然相同,但是对应的其实是不同的文件。
两级目录结构不允许用户的文件重名,也可以在目录上实现访问限制(检查此时登录的用户名是否匹配)。
多级目录结构(树型目录)[不方便文件共享]
但是两级目录结构依然缺乏灵活性,用户不能对自己的文件进行分类。
用户要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。各级目录之间用’/'隔开。从根目录出发的路径称为绝对路径。
我们可以设置当前目录,也就是相对路径,节省系统资源。
在引入了当前目录和相对路径后, 磁盘的I/O次数减少了。这就提升了访问文件的效率。
总结:
树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效的进行文件的管理和保护.但是,树形结构不便于实现文件的共享。为此,提出了"无环图目录结构".
无环图目录结构
无环图目录结构在树形目录结构的基础上,增加了一些指向同一节点的有向边,使整个目录成为一个有向无环图。可以更方便地实现多个用户间的文件共享。
可以为不同的文件名指向同一个文件,甚至可以指向同一个目录。
需要为每个共享节点设置一个共享计数器,用于记录此时有多少个地方在共享该节点。用户提出删除节点的请求时,只是删除该用户的FCB,并使共享计数器-1,并不会直接删除共享节点。只有共享计数器为0的时候,才会真正的删除共享节点。
注意:共享文件不同于复制文件,在共享文件中,由于各用户指向的是同一个文件,因此只要其中一个用户修改了文件数据,那么所有用户都可以看到文件数据的变化。
索引目录
索引节点是对FCB的改进,其实在查找各级目录的时候,只需要用到文件名,只有文件名匹配时,才需要读出文件的其他信息。因此可以考虑让目录表瘦身来提升效率。