文件和文件夹的路径(文件系统-目录文件)

文件控制块和文件目录

1.文件控制块

用户对文件是“按名存取”,所以用户首先要创建文件,为它命名。以后对该文件读、写以至最后删除它,都要用到文件名,为了便于对文件进行控制和管理,在文件系统内部,给每个文件唯一地设置一个文件控制块,这种数据结构通常由下列信息项组成:

(1)文件名——符号文件名,如file5,mydata,m1.c等。

(2)文件类型——指明文件的属性,是普通文件,还是目录文件,特殊文件,是系统文件还是用户文件等。

(3)位置——指针,它指向存放该文件的设备和该文件在设备上的位置,如哪台设备的哪些盘块上。

(4)大小——当前文件的大小(以字节、字或块为单位)和允许的最大值。

(5)保护信息——对文件读、写及执行等操作的控制权限标志。

(6)使用计数——表示当前有多少个进程在使用(打开了)该文件。

(7)时间——日期和进程标志,这个信息反映出文件有关创建、最后修改和最后使用等情况,可用于对文件实施保护和监控等。

操作系统利用这种结构对文件实施各种管理。例如,按名存取文件时,先要找到对应的文件控制块,验证权限。仅当存取合法时,才能取得存放文件信息的盘块地址。

2.文件目录

为了加快对文件的检索,往往将文件控制块集中在一起进行管理。这种文件控制块的有序集合称为文件目录。文件控制块就是其中的目录项。由目录项构成的文件称为目录文件

文件目录具有将文件名转换成该文件在外存的物理位置的功能,它实现文件名与存放盘块之间的映射,这是文件目录所提供的最基本的功能。

MS-DOS系统的文件目录:

在MS-DOS系统中,一个目录项有16个字节长,其中包含文件名、扩展名、属性、时间、日期、首块号和文件大小。利用首块号作为查找物理块链接表的索引,按索引链向下查找,可以找到该文件所有的盘块。图5-12是MS-DOS目录项示意图。在MS-DOS中,一个目录中可包含其他目录,从而形成层次结构的文件系统。

文件和文件夹的路径(文件系统-目录文件)(1)

图5-12 MS-DOS目录项示意图

UNIX系统的文件目录:

UNIX系统的目录项非常简单,它只由文件名和I节点(Inode)组成,如图5-13所示。有关文件的类型、大小、时间、文件主和磁盘块等信息都包含在I节点中。UNIX系统中所有目录文件都由这种目录项组成。按照给定路径名的层次结构,一级一级地向下找。由文件名找到对应的I节点号,再从I节点中找到文件的控制信息和盘块号。

文件和文件夹的路径(文件系统-目录文件)(2)

图5-13 UNIX目录项示意图

在考虑一个具体的目录结构时,必须注意对目录所实行的操作。主要的目录操作有如下几种:

(1)查找。通过查找一个目录结构,找到特定文件所对应的项,实现按名查找。

(2)建立文件。建立新文件,把相应控制块加到目录中去。

(3)删除文件。当一个文件不再需要时,把它从目录中抹掉。

(4)列出目录清单。显示目录内容和该清单中每个文件目录项的值。

(5)备份。为了保证可靠性,需要定期保留文件系统。通常的办法是把全部文件复制到磁盘上。这样,在系统失效需要重新恢复运行时,能够提供备份副本。目录文件经常要存档或转储。

(二)目录结构

目录的基本组织方式包含单级目录、二级目录、树形目录和非循环图目录。

1.单级目录

最简单的目录结构就是单级目录。在这种组织方式下,全部文件都登记在同一目录中,如图5-14所示。这种结构在实现和理解上都很容易。由图5-14可见,每当创建一个新文件时,就在目录表中找一个空目录项,把新文件名、物理地址和其他属性填入该目录项中。在删除一个文件时,从目录中找到该文件的目录项,回收该文件占用的外存空间,然后清空其所占用的目录项。

文件和文件夹的路径(文件系统-目录文件)(3)

图5-14 单级目录结构

单级目录结构的优点是简单,能够实现按名存取。但是,单级目录结构有以下3个缺点:

(1)查找速度慢。当系统中存在大量文件或众多用户同时使用文件时,由于每个文件占一个目录项,单级目录中就拥有数目很大的目录项。如果要从目录中查找一个文件,就需花费较长时间才能找到。平均而言,找一个文件需要扫描半个目录表。

(2)不允许重名。因为各个文件都在同一目录中管辖,它们各自的名字应是唯一的。如果两个用户都为自己的文件起了同一名字(如fileA),就破坏了文件名唯一的规则。然而,用户对文件命名完全是根据需要和个人习惯,无法由系统强行规定各用户的命名范围。这样,在多个用户(如学生)上机过程中,文件同名现象经常会发生。当出现同名时,系统就无法实现“辨认”工作,即使只有一个用户,随着大量文件的创建,也难于记住哪些名字已使用过,不能再使用了。

(3)不便于共享。因为各个用户对同一文件可能用不同的名称,而单级目录却要求所有用户用同一名字来访问同一个文件。

2.二级目录

单级目录的主要缺点是无法解决多个用户间文件“重名”的问题。标准的解决办法是为每个用户单独建立一个目录,各自管辖自己下属的文件。在大型系统中,用户目录是逻辑结构,它们在逻辑上分开,而在物理上全部文件都可放在同一设备上。

图5-15为二级目录结构。每个用户有自己的用户文件目录(UFD),用户文件目录都有同样的结构,其中只列出每个用户的文件。在主文件目录(MFD)中记载各个用户的名称,当用户作业开始或用户登录时,需要检索主文件目录,找到唯一的用户名(或用户编号),再按项中指针的指向找到对应的用户目录。用户使用特定文件时,只需在自己的用户目录中检索,与其他用户目录无关。从而使不同用户能够使用相同的文件名,只要单独的用户目录中所有文件不重名即可。建立或删除文件也仅限于一个用户目录。

文件和文件夹的路径(文件系统-目录文件)(4)

图5-15 二级目录结构

优点:二级目录结构基本上解决了单级目录存在的问题,使得不同用户可有相同的文件名;提高了检索目录的速度;不同用户可用不同的文件名访问系统中同一文件。

缺点:这种结构能够把一个用户与其他用户有效地隔开,当各个用户之间毫无联系时,它是优点;当多个用户要对某些盘区共同操作和共享文件时,它就是缺点。就是说,这种结构仍不利于文件共享。

3.树形目录

可以把二级目录自然推广成多级目录。在这种结构中,每一级目录中可以包含文件,也可以包含下一级目录。从根目录开始,一层一层地扩展下去,形成一个树形层次结构,如图5-16所示。

文件和文件夹的路径(文件系统-目录文件)(5)

图5-16 树形目录结构

每个目录的直接上一级目录称作该目录的父目录,而它的直接下一级目录称作子目录。除根目录外,每个目录都有父目录。这样,用户创建自己的子目录和相应的文件就很方便。在树形结构文件系统中,只有一个根目录。系统中的每一个文件(包括目录文件本身)都有唯一的路径名,它是从根目录出发、经由所需子目录、最终到达指定文件的路径分量名的序列。

在这种结构中,末端一般是普通的数据文件(图中用圆圈表示),而路径的中间节点是目录文件(用方框表示)。在树形目录结构中,从根目录到末端的数据文件之间只有一条唯一的路径。这样利用路径名就可唯一地表示一个文件。路径名有绝对路径名和相对路径名两种表示形式。

优点:在这种目录结构下,文件的层次和隶属关系很清晰,便于实现不同级别的存取保护和文件系统的动态装卸。

缺点:在上述纯树形目录结构中,只能在用户级对文件进行临时共享。就是说,文件主创建一个文件并指定对其共享权限后,有权共享的用户可以利用相同的路径名对文件实施限定操作(如读、写、执行等)。当文件主删除该文件后,其他用户就无法再使用该文件了。当然,其他用户可以使用copy命令把共享文件复制到自己的目录下面,但这样做不符合共享的本义。它既占用额外的存储空间,又花费I/O时间。

4.非循环图目录

树形目录结构的自然推广就是非循环图目录结构。它允许一个文件或目录在多个父目录中占有项目,但并不构成环路,如图5-17所示。在MULTICS和UNIX系统中,这种结构方式叫做链接(Link)。由图5-17看出,对文件共享是通过两种链接方式实现的:一种是允许目录项链接到任一表示文件目录的节点上,另一种是只允许链接到表示普通文件的叶节点上。

文件和文件夹的路径(文件系统-目录文件)(6)

图5-17 非循环图目录结构

第1种方式表示可共享被链接的目录及其各子目录所包含的全部文件。例如dict链接spell的子目录words,这样words目录中所包含的3个文件(list1、radc和w7)都为dict所共享。就是说,可以通过两条不同的路径访问上述3个文件。在这种结构中,可把所有共享的文件放在一个目录中,所有共享这些文件的用户可以建立自己的子目录,并且链接共享目录。这样做的好处是便于共享,但问题是限制太少,对控制和维护造成困难,甚至因为使用不当而造成环路链接,产生目录管理混乱。

UNIX系统基本上采取第2种链接方式,即只允许对单个普通文件链接。从而通过几条路径来访问同一文件,即一个文件可以有几个“别名”。如/spell/count和/dict/count表示同一文件的两个路径名。这种方式虽限制了共享范围,但更可靠,且易于管理。

应该指出,一般常说UNIX文件系统是树形结构的,严格地说,是带链接的树形结构,也就是上述的非循环图结构,而不是纯树形结构。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页