OS(十四):文件管理之目录管理

发布时间 2023-08-23 17:14:13作者: 无虑的小猪

  OS通过文件目录实现对文件的管理,文件目录是一种数据结构,用于标识系统中的文件及其物理地址,供检索时使用。

1、文件控制块

1.1、文件控制块

1.1.1、概念

  文件控制块(FCB):描述和控制文件的数据结构,使得文件能进行正确的存取。

  文件目录:文件控制块的有序集合,一个文件控制块就是一个文件目录项。一个文件目录可被当作一个文件,称为目录文件。

1.1.2、PCB包含的内容

  文件控制块包含三类信息,分别是 基本信息、存取控制信息 和使用信息。

2.1、基本信息

  文件名,标识文件的符号名;

  文件物理位置,文件在外存上的存储位置,包括存放文件的设备名,文件在外存上的起始盘块号、文件占用的盘块数、字节数的文件长度;

  文件逻辑结构,指示文件是流式文件还是记录式文件、记录数;文件是定长记录还是变长记录。

  文件的物理结构,指示文件是顺序文件,还是链接式文件或索引文件。

2.2、存储控制信息类

  文件主的存取权限,核准用户的存取权限 及 一般用户的存取权限。

2.3、使用信息类

  文件的日期及当前使用信息,包括已打开文件进程数,是否被其它进程锁住,文件在内存中是否已被修改但尚未拷贝到盘上。

2、索引节点

2.1、索引节点的引入

  文件目录存放在磁盘,文件很多时,文件目录要占用大量的盘块。

  查找目录的过程:先将存放目录文件的第一个盘块中的目录调入内存,再把用户给定的文件名和目录项中的文件逐一比较。未找到指定文件,将下一盘块中的目录项调入内存。

  检索目录的过程,只用到文件名,仅当找到一个目录项时,才需要从该目录项中读出该文件的物理地址,其它对描述文件的信息,检索目录时不许用。

  文件名和文件描述符分开,使文件描述信息单独形成一个称为索引节点的数据结构,简称 i节点。

  

  文件目录中,每个目录项紧由文件名和指向该文件所对应的i节点的指针所构成。

2.2、磁盘索引节点

  存放在磁盘上的索引节点,每个文件有惟一的一个磁盘索引节点,包含以下内容:

  文件主标识符

  文件类型

  文件存取权限

  文件物理地址:每一个索引节点汇总含有13个地址项,iaddr(0) ~ iaddr(12),它们以直接或间接方式给出数据文件所在盘块的编号。

  文件长度,以字节为单位的文件长度。

  文件连接计数,本文件系统中所有指向该文件名的指针计数。

  文件存储时间

2.3、内存索引节点

  存放在内存中的索引节点,文件被打开时,要将磁盘索引节点拷贝到内存索引节点中,便于后续使用。包含以下内容:

  索引节点编号:表示内存索引节点

  状态:指示i节点是否上锁或被修改

  访问计数:当有一进城要访问此i节点时,将该访问计数加1,访问完再减1.

  文件所属文件系统的设备号

  连链接指针,设置有分别指向空闲链表和散列队列的指针。

2、目录结构

  目录结构形式:单机目录、两级目录和多级目录。

2.1、单级目录

  整个文件系统中只建立一张目录表,每个文件占一个目录项,目录项包含文件名、文件拓展名、文件长度、文件类型、文件物理地址以及其他文件属性、为表明每个目录项是否空闲,设置一状态位。

  

  建立一个新文件,先检索所有的目录项,保证新文件名在目录中是惟一的,再从目录表中找出一个空白目录项,填入新文件的文件名及其他说明信息,并置状态位为1。

  删除文件时,先从目录中找到该文件的目录项,回收该文件所占用的存储空间,清除该目录项。

  单级目录简单且能实现目录管理的基本拿功能 - 按名存取。

  单级目录查找速度慢,不允许重名,不便于实现文件共享。

2.2、两级目录

  为解决单级目录的问题,为每一个用户建立一个单独的用户文件目录UFD(User File Directory),UFD由用户所有文件的文件控制块组成。

  系统中再建立一个主文件目录MFD(Master File Directory),在主文件目录中,每个用户目录文件都占有一个目录项,目录项中包括用户名和指向该用户目录文件的指针。

  

  当有了UFD后,创建新文件时,OS只需检查该用户UFD,判定该UFD中是否已有同名的另一个文件。若有,为新文件重新命名,若无,在UFD中建立一个新目录项,将文件名及相关属性填入目录项中,并置状态位为1。

  两级目录的优点:提高了检索目录的速度;在不同的用户目录中,可使用相同的文件名;不同用户可以使用不同的文件名来访问系统中的同一个共享文件。

2.3、多级目录

  多级目录,也被称为树型目录结构,主目录被称为根目录,把数据文件称为树叶,其他的目录均作为树的结点。

  多级目录结构如下:

  

  方框表示目录文件,圆圈标识数据文件。

3、目录查询技术

  目录进行查询的方式:线性检索法 和 Hash方法。

3.1、访问文件过程

  用户访问已存在文件过程:先利用用户提供的文件名对目录进行查询,找出该文件的文件控制块或对应的索引节点,然后根据FCB或索引节点中记录的文件物理地址(盘块号),换算出文件在磁盘上的物理位置,最后通过磁盘驱动程序,将所需文件读入内存。

3.2、线性检索法

  线性检索法,称为顺序检索法。

  在单级目录中,利用用户提供的文件名,用顺序查找法直接从文件目录中找到指明文件的目录项;

  在树型目录中,用户提供的文件名是由多个文件分量名组成的路径名。

  假定用户给定的文件路径名:/usr/ast/mbox

 

  1、系统读取第一个文件分量名usr,用它与根目录文件中各目录项中的文件名顺序的进行比较,找出匹配者,的带匹配项的索引节点号6,从此节点中得知usr目录文件存放在132号盘块中,将该盘块内存读入内存;

  2、系统将路径名中的第二个文件分量名ast读入,用它与第二级目录文件中各目录项中的文件名顺序的进行比较,找出匹配者,的带匹配项的索引节点号26,从此节点中得知/usr/ast存放在496号盘块中

  3、系统将路径名中的第三个文件分量名mbox读入,用它与第三级目录文件/usr/ast中各目录项中的文件名顺序的进行比较,最后得到/usr/ast/mbox的索引节点号是60,即在60号索引节点中存放了指定文件的物理地址。

3.3、Hash方法

  系统利用用户提供的文件名并将它变换为文件目录的索引值,利用该索引值到目录中去查找。

  利用Hash方法查找,可能会出现Hash冲突,即不同文件名转换为相同的Hash值。

解决Hash冲突的有效规则:

  利用Hash方法查找目录时,若目录表中相应的目录项是空的,表示系统无指定文件;

  目录项中的文件名与指定文件名相匹配,表示该目录项正是索要寻找的文件所对应的目录项,可从中找到该文件所在的物理地址。

  目录表中相应的目录项中的文件名与指定文件不匹配,表示发生了"冲突",须将其Hash值再加上一个常数,形成新的索引值,再返回第一步重新开始查找。