4.3 目录与文件共享

目录的基本概念与操作;单级、两级、树形、无环图目录结构,绝对路径、相对路径与当前目录;目录的实现(线性列表、哈希表)与按路径查找的读盘次数;硬链接与软链接两种文件共享方式。

考查要求 ★★★ 重点掌握 目录 = FCB 的有序集合树形目录与当前目录按路径查找的读盘次数线性列表与哈希表硬链接与引用计数软链接(符号链接)

目录的基本概念

FCB 的有序集合称为文件目录,一个 FCB 就是一个目录项。目录本身也以文件的形式存放在外存上,称为目录文件。目录管理的基本要求是:

  • 实现按名存取:用户只需提供文件名,就能找到文件;
  • 提高对目录的检索速度;
  • 允许文件同名:不同用户、不同目录下可以使用相同的文件名;
  • 允许文件共享:多个用户共享同一个文件,外存中只保留一份副本。

目录的基本操作有:搜索(按文件名找到目录项)、创建文件(增加一个目录项)、删除文件(删除目录项)、创建目录、删除目录、列出目录(显示目录中的所有文件及其属性)、移动目录和修改目录(文件属性改变时修改目录项)。

目录结构

结构组织方式优点缺点
单级目录整个系统只有一张目录表,每个文件占一个目录项简单,实现了按名存取查找速度慢;不允许重名;不便于共享
两级目录主文件目录(MFD)记录各用户的用户文件目录(UFD),每个用户有自己的 UFD不同用户的文件可以重名;提高了检索速度用户不能对自己的文件分类,缺乏灵活性
树形目录多级目录,根目录下可以有子目录,子目录下又可以有子目录便于分类,层次结构清晰,便于管理和保护不便于共享;查找要逐级访问中间结点,增加读盘次数
无环图目录在树形目录的基础上,允许多个目录项指向同一个文件或目录,形成有向无环图方便地实现文件共享管理更复杂,需要共享计数器

在树形目录中,从根目录出发到文件的路径称为绝对路径,如 /usr/ast/mbox。为了避免每次都从根目录开始逐级查找,进程可以设置一个当前目录(工作目录),从当前目录出发的路径称为相对路径,如当前目录为 /usr/ast 时,mbox 就表示 /usr/ast/mbox。

动画演示按路径名查找文件需要读几次盘
/(根)inode 1 · 块 1bininode 4 · 块 81usrinode 6 · 块 132jiminode 19 · 块 288astinode 26 · 块 406notesinode 51mboxinode 60方框为目录,圆角为普通文件读盘记录(共 0 次)
正在查找已经过的路径
1/8用绝对路径 /usr/ast/mbox 访问文件。假设根目录已常驻内存(系统启动时读入),其他目录文件和索引结点都在磁盘上

目录的实现

  • 线性列表:目录项按顺序存放,每项包括文件名和指向数据块(或 FCB、索引结点)的指针。实现简单,但查找文件要线性搜索,比较费时;创建文件时还要先搜索目录以确定没有同名文件。
  • 哈希表:根据文件名计算哈希值,得到指向线性列表中目录项的指针,可以大大缩短目录的查找时间;但需要处理冲突,且哈希表的大小通常是固定的。

查找目录时需要把目录文件读入内存,因此目录项越小,每个盘块能存放的目录项越多,查找时读盘次数越少——这也是 UNIX 把 FCB 拆成「文件名 + 索引结点号」的目录项和索引结点的原因。

文件共享

文件共享使多个用户(进程)可以共享同一个文件,系统中只需保留该文件的一份副本。现代常用的两种共享方式是硬链接和软链接。

硬链接:基于索引结点的共享

文件的物理地址等属性不放在目录项中,而是放在索引结点中;目录项中只有文件名和指向索引结点的指针。多个目录项可以指向同一个索引结点,实现共享。

索引结点中有一个链接计数 count,表示指向它的目录项个数。建立硬链接时 count 加 1;删除文件时只删除对应的目录项并把 count 减 1,只有 count 减到 0 时才真正删除文件(回收索引结点和数据块)。

软链接:利用符号链实现共享

建立一个 LINK 类型的新文件,它有自己的索引结点,文件的内容是被链接文件的路径名。访问软链接时,操作系统读出这个路径名,再按路径查找到真正的文件。

  • 只有文件主拥有指向原文件索引结点的指针,其他用户只有路径名;原文件被删除后,软链接就失效了(悬空链接),再访问时找不到文件;
  • 每次访问都要根据路径逐级查找目录,读盘次数较多;
  • 软链接有自己的索引结点和数据,要占用一定的空间;但它可以链接到其他文件系统、甚至网络上其他计算机中的文件。
动画演示硬链接与软链接:count 如何变化
$ —目录 /homeF1inode 7索引结点inode 7(普通文件)count = 1文件内容(数据块)hello
本步涉及访问失败
1/7目录 /home 中有文件 F1,其目录项指向索引结点 7;索引结点的链接计数 count = 1
硬链接软链接(符号链接)
实现多个目录项指向同一个索引结点新建一个文件,内容是原文件的路径名
是否有新的索引结点否是
原文件的 count加 1不变
删除原文件后仍可访问(count > 0 时文件还在)失效
访问速度快慢(要按路径查找)
能否跨文件系统不能能

即时练习

即时练习5 题
点击选项即可作答
  1. 1
    设文件 F1 的当前引用计数值为 1,先建立 F1 的符号链接(软链接)文件 F2,再建立 F1 的硬链接文件 F3,然后删除 F1。此时,F2 和 F3 的引用计数值分别是( )。
  2. 2
    设置当前工作目录的主要目的是( )。
  3. 3
    若文件 f1 的硬链接为 f2,两个进程分别打开 f1 和 f2,获得对应的文件描述符为 fd1 和 fd2,则下列叙述中,正确的是( )。
    Ⅰ. f1 和 f2 的读写指针位置保持相同 Ⅱ. f1 和 f2 共享同一个内存索引结点 Ⅲ. fd1 和 fd2 分别指向各自的用户打开文件表中的一项
  4. 4
    在树形目录结构中,用户按绝对路径 /a/b/c 访问文件 c。若根目录常驻内存,其余每个目录文件和每个索引结点各占一个盘块且都不在内存,则找到文件 c 的索引结点至少需要读盘( )次。
  5. 5
    下列关于软链接(符号链接)的叙述中,错误的是( )。
学完了吗?

标记完成后,侧栏会显示进度。进度仅保存在本浏览器中。