写在前面:
- 本系列笔记主要以《计算机操作系统(汤小丹…)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
- 视频链接:操作系统(汤小丹等第四版)_哔哩哔哩_bilibili
一、目录管理的要求
通常在现代计算机系统中,都要存储大量的文件,为了能对这些文件实施有效的管理,必须对它们加以妥善组织,这主要是通过文件目录来实现的。文件目录也是一种数据结构,用于标识系统中的文件及其物理地址,供检索时使用。
对目录管理的要求如下:
(1)实现“按名存取”。用户只须向系统提供所需访问文件的名字,便能快速准确地找到指定文件在外存上的存储位置。这是目录管理中最基本的功能,也是文件系统向用户提供的最基本的服务。
(2)提高对目录的检索速度。通过合理地组织目录结构加快对目录的检索速度,从而提高对文件的存取速度。这是在设计一个大、中型文件系统时所追求的主要目标。
(3)文件共享。在多用户系统中,应允许多个用户共享一个文件,这样就只须在外存中保留一份该文件的副本供不同用户使用,以节省大量的存储空间,并方便用户和提高文件利用率。
(4)允许文件重名。系统应允许不同用户对不同文件采用相同的名字,以便于用户按照自己的习惯给文件命名和使用文件。
二、文件控制块和索引结点
1、文件控制块FCB
(1)为了能对一个文件进行正确的存取,必须为文件设置用于描述和控制文件的数据结构,称之为“文件控制块”,文件管理程序可借助于文件控制块中的信息对文件施以各种操作。文件与文件控制块一一对应,把文件控制块的有序集合称为文件目录,即一个文件控制块就是一个文件目录项。通常,一个文件目录也被看做是一个文件,称为目录文件。
(2)在文件控制块中,通常应含有三类信息,即基本信息、存取控制信息及使用信息。
①基本信息类包括:
[1]文件名:指用于标识一个文件的符号名,在每个系统中,每一个文件都必须有唯一的名字,用户利用该名字进行存取。
[2]文件物理位置:指文件在外存上的存储位置,它包括存放文件的设备名、文件在外存上的起始盘块号、指示文件所占用的盘块数或字节数的文件长度。
[3]文件逻辑结构:指示文件是流式文件还是记录式文件(记录式文件需指出记录数,文件是定长记录还是变长记录等)。
[4]文件的物理结构:指示文件是顺序文件,还是链接式文件或索引文件。
②存取控制信息类包括:文件主的存取权限,核准用户的存取权限和一般用户的存取权限。
③使用信息类包括:文件的建立日期和时间、文件上次修改的日期和时间及当前使用信息。
2、索引结点
(1)文件目录通常是存放在磁盘上的,当文件很多时,文件目录要占用大量的盘块,在检索目录文件的时候,需要将目录调入内存后比较文件名,但是只用到文件名,而不需要其它那些对文件的描述信息,所以便把文件名与文件信息分开,使文件描述信息单独形成一个索引结点。
(2)目录项中只包含文件名、索引结点指针,因此每个目录项的长度大幅减小,磁盘块可以存放更多的目录项,这样检索文件时磁盘I/O的次数就会少很多。
(3)磁盘索引结点是存放在磁盘上的索引结点。每个文件有唯一的一个磁盘索引结点,主要包括以下内容:
①文件主标识符,即拥有该文件的个人或小组的标识符。
②文件类型,包括正规文件、目录文件或特别文件。
③文件存取权限,指各类用户对该文件的存取权限。
④文件物理地址,每一个索引结点中含有 13 个地址项,它们以直接或间接方式给出数据文件所在盘块的编号。
⑤文件长度,指以字节为单位的文件长度。
⑥文件连接计数,表明在本文件系统中所有指向该(文件的)文件名的指针计数。
⑦文件存取时间,指出本文件最近被进程存取的时间、最近被修改的时间及索引结点最近被修改的时间。
(3)内存索引结点是放在内存中的索引结点。当文件被打开后,将磁盘索引结点拷贝到内存索引结点中以便使用。在内存索引结点中又增加了以下内容:
①索引结点编号,用于标识内存索引结点。
②状态,指示i结点是否上锁或被修改。
③访问计数,每当有一进程要访问此i结点时,将该访问计数加1,访问完再减1。
④文件所属文件系统的逻辑设备号。
⑤链接指针,设置有分别指向空闲链表和散列队列的指针。
三、简单的文件目录
1、单级文件目录
在整个文件系统中只建立一张目录表,每个文件占一个目录项,目录项中含文件名、文件扩展名、文件长度、文件类型、文件物理地址以及其它文件属性,此外,为表明每个目录项是否空闲,又设置了一个状态位。
单级文件目录的优点是简单,但它只能实现目录管理中最基本的功能--按名存取不能满足对文件目录的其它三方面的要求,具体如下:
①查找速度慢。对于稍具规模的文件系统,找到一个指定的目录项要花费较多的时间。
②不允许重名。在一个目录表中的所有文件,都不能与另一个文件有相同的名字,然而重名问题在多道程序环境下却又是难以避免的。
③不便于实现文件共享。通常,每个用户都有自己的名字空间或命名习惯,因此应当允许不同用户使用不同的文件名来访问同一个文件,然而,单级目录却要求所有用户都只能用同一个名字来访问同一文件,简而言之,单级目录只能满足对目录管理的四点要求中的第一点,因而,它只适用于单用户环境。
2、两级文件目录
为了克服单级目录所存在的缺点,可以为每个用户建立一个单独的用户文件目录UFD,由该用户所有文件的文件控制块组成。
在系统中再建立一个主文件目录MFD,在主文件目录中每个用户目录文件都占有一个目录项,其中包括用户名和指向该用户文件的指针。
两级文件目录基本克服了单级目录的缺点,并具有以下优点:
①提高了检索目录的速度。
②在不同的目录中可以有相同的文件名。
③不同用户还可以使用不同的文件名来访问系统中的同一个共享文件。
两级文件目录存在的问题是各用户之间被完全隔离了,诸用户之间不便于共享文件,无法进行合作。
3、树形结构目录(多级文件目录)
大型系统通常采用三级或三级以上的目录结构,以提高目录的检索速度和文件系统的性能。多级目录结构又称为树型目录结构,主目录称为根目录,数据文件为树叶,其它目录为结点。
在每个文件目录中,只能有一个根目录,每个文件和每个目录都只能有一个父目录。如下图所示,方块代表目录文件,圆圈代表数据文件。
在树形结构目录中,从根目录到任何数据文件都只有一条唯一的通路,在该路径上,从树的根(即主目录)开始,把全部目录文件名与数据文件名依次地用“/”连接起来,即构成该数据文件唯一的路径名,系统根据“文件路径”找到目标文件。
把从当前目录开始直到数据文件为止所构成的路径名称为相对路径名,把从树根开始的路径名称为绝对路径名。
四、目录查询技术
当用户要访问一个已存文件时,系统首先利用用户提供的文件名对目录进行查询,找出该文件的文件控制块或对应索引结点,然后根据FCB或索引结点中记录的文件物理地址(盘块号)换算出文件在磁盘上的物理位置,最后再通过盘驱动程序将所需文件读入内存。
1、线性检索法
线性检索法又称为顺序检索法。在单级目录中,利用用户提供的文件名,用顺查找法直接从文件目录中找到指名文件的目录项;在树形目录中,用户提供的文件名是由多个文件分量名组成的路径名,此时需对多级目录进行查找。
2、Hash方法
Hash方法建立了一张Hash索引文件目录,利用Hash方法进行查询,即系统利用用户提供的文件名并将它变换为文件目录的索引值,再利用该索引值到目录中去查找,这样可以显著地提高检索速度。