【操作系统】知识梳理(七)文件管理

7.1 文件和文件系统

1.文件的定义

文件是具有文件名的一组相关信息的集合。文件名由文件创建者在创建文件时给出,每个系统有自己的文件名命名规则,但文件名通常是由一串ASCII码或(和)汉字构成的。文件的基本内容可以由零个或多个字节构成;这些字节可以是简单的字符流,也可以是一个或多个记录的集合,它们的具体含义由文件的创建者和使用者解释。
每个文件除了文件名和基本内容以外,还应具有自己的属性,具体的属性可以包括:文件类型、文件长度、文件的物理位置、文件的建立时间等,它们也必须保存在文件存储器中。文件被创建后,其基本内容和属性信息便被储存在文件存储器中,用户可以通过文件名来访问相应文件的基本内容。

2.文件系统模型

所谓文件系统,是指操作系统中与文件管理有关的那部分软件以及被它们管理的文件和文件属性的集合。如图7.1所示,可将文件系统的模型分成以下几个层次:
(1) 对象及其属性。文件系统管理的对象有文件、目录和文件存储器。
(2) 对对象操纵和管理的软件集合。这是文件系统的核心部分,它实现了文件存储空间管理、文件目录管理、文件的逻辑地址向物理地址的转换、文件的读和写管理以及文件的共享和保护等功能。
(3) 文件系统的接口。文件系统向用户提供的接口有命令接口、程序接口以及图形用户接口三类,用户可通过它们来使用文件系统。

3.文件的使用

基本操作:

(1)创建文件。在创建-一个新文件时,系统要为它分配必要的外存空间,并在文件系统的目录中,为它建立一个目录项,用来登记该文件的文件名及其在外存的地址等属性。
(2)删除文件。当不再使用某个文件时,可将它从文件系统中删除。此时,系统应先从目录中找到要删除文件的目录项,并根据其中的外存地址信息回收该文件所占的存储空间,最后还必须释放它的目录项。
(3)读文件。当用户需要某个文件中的数据时,可对该文件执行读操作。此时,系统将通过该文件目录项中的文件在外存的物理位置信息,得到欲读取的文件在外存的地址,然后启动设备将数据读入内存。
(4)写文件。当用户要求添加或修改某个文件的内容时,可对它进行写操作。为此,系统同样需要通过目录项,得到欲写入的文件数据在外存的地址,然后启动设备将数据写到外存中。
(5)设置文件的读/写指针。文件的读/写指针指出了要读/写的信息距离文件首字节的偏移量。在读/写文件时,将根据读/写指针和相应文件目录项中的外存地址信息计算出欲读/写的信息在外存的地址。通过设置文件读/写指针的操作,可将读/写指针设置到文件的任一位置,从而实现对该文件内容的随机访问。
(6)打开文件。打开文件的主要功能是将指定文件的属性信息复制到内存中,并返回指向内存中的该文件属性信息的指针。以后,用户需要对该文件进行操作时,便可直接在内存中找到文件的外存地址等属性,从而显著地提高对文件的操作速度。
(7)关闭文件。当用户目前不再要求访问某个打开的文件时,可对它进行关闭操作。此时,将从内存中删除指定文件的属性信息,如果其中的文件属性信息已被修改过,则还需将它写回外存。关闭文件后,若要再次访问该文件,则必须重新进行打开文件的操作。

7.2 文件的逻辑结构

1.有结构文件

有结构文件也称记录式文件,其数据的组成可以分成数据项、记录和文件三级。最低级的数据组织形式是数据项,它可用来描述一个个体的某种属性: 多个数据项的集合形成一个记录,它可用来描述-一个个体某方面相对完整的属性;多个记录的有序集合构成了文件,文件在文件系统中是一个最大的数据单位,它描述了一个对象集。通常,可以用一个或多个数据项来唯一地标识- 一个记录,这些数据项的集合被称为关键字。
在记录式文件中,每个记录用来描述实体集中的-一个实体,各记录可以有相同或不同数目的数据项,每个数据项在不同的记录中可以有相同或不同的长度,因此,记录式文件又可以分成定长记录文件和变长记录文件两类。
记录式文件的逻辑组织又可进一一步 分成以下几种方式:
(1)顺序文件。顺序文件中的记录可按不同的顺序进行排列。如果文件中的记录按存入的先后次序进行排列,则称之为串结构文件:如果是按关键字的次序进行排列,则称之为顺序结构的文件。顺序文件中的记录通常是定长记录,故顺序文件(尤其是其中的顺序结构文件)通常具有较快的记录检索速度。
(2)索引文件。当记录为可变长度时,通常采用索引文件的方式。它为每个文件建立一张索引表,并将主文件的每个记录的记录号(或关键字)、长度和逻辑地址(即记录离文件首字节的偏移量)记录在索引表中。由于索引表本身是-一个定长记录文件,因此可以十分方便地检索到相应记录的索引表项,从而可方便地对主文件中的记录实现直接存取。
(3)索引顺序文件。索引顺序文件是上述两种文件构成方式的结合,其中的记录按顺序方式组织,每个文件也需建立一张索引表, 但因为其只需为主文件的每-组记录的第一个记录设置一一个索引表项,因此能有效地减少索引表所占的空间。

2.无结构文件

无结构文件是指由字符流构成的文件,故又称流式文件。流式文件的基本单位是字节,因此可以将它看做是记录式文件的一一个特例。在很多操作系统中,如UNIX系统,所有的文件都被看成是流式文件。在创建和使用流式文件时,虽然操作系统只将它看成是一个字符流,但用户仍然可以按自己的需要赋予文件某种结构。

7.3 文件目录

1.文件控制块、目录项和索引结点

文件控制块(FCB)是OS用来描述和控制文件的-一个数据结构,其中最基本的内容是文件名和文件的物理地址,其他的内容通常有文件的逻辑结构、文件的物理结构、文件的长度、文件的存取权限、文件的建立日期和时间、文件最后一次修改的日期和时间、文件的连接计数及文件主标识符等文件属性信息。
文件控制块与文件一 一对应,文件控制块的有序集合被称作目录,其中的每个文件控制块被称为目录项。目录通常也是以文件的方式存放在外存上,故也被称作目录文件。当系统中文件很多时,文件目录可能要占用大量的磁盘块。此时,在文件目录中查找一个指定的文件可能要多次启动外存,十分费时。考虑到检索过程中,实际上只用到了其中的文件名信息,仅当找到了与用户指定的文件名相匹配的目录项后,才需要从该目录项中读出文件的物理地址等信息。因此,有些系统,如UNIX系统,便采用把文件名和文件描述信息分开的办法,即,将文件描述信息单独形成一个称为索引结点的数据结构,存放在外存的索引结点区,而组成文件目录的目录项中仅有文件名和指向该文件所对应的索引结点的指针。这样,便可大大减少文件目录所占的磁盘块数,从而加快检索目录的速度。

2.目录结构

(1)单级目录结构。单级目录结构在整个文件系统中只建立一张目录表,每个文件占其中的一个表项。虽然,它能实现对文件的按名存取,管理和实现也十分简单,但并不能满足对目录管理的其他要求,例如它不允许文件重名,也不便于实现文件共享,而且,当文件数目较多时,它的检索速度会变得十分缓慢。
(2)两级目录结构。采用两级目录结构时,系统为每个用户建立-一个单独的用户文件目录,其中包含该用户的所有文件的文件控制块。此外,系统中还要建立-一个主文件目录,它的每个目录项对应于-一个用户文件目录,其中包含该用户的用户名和指向该用户文件目录的指针。两级目录结构提高了检索目录的速度,并允许不同的用户使用相同的文件名,也允许不同的用户使用不同的文件名来访问系统中的-一个共享文件,但它不提供用户建立子目录的手段,用户使用起来仍不是很方便。
(3)多级目录结构。为了进一步提高对目录的检索速度,并使用户可以更加方便地组织和使用自己的文件,现代操作系统普遍使用多级目录结构(又称为树形目录结构)来进行文件管理,它是对两级目录的进一步扩展。主目录在这里被称为根目录,数据文件被称为树叶,而其他的目录均作为树的结点。图7.2示出了多级目录结构。图中用方框表示目录,圆圈表示数据文件。
在树形目录结构中,从根目录到任何数据文件,都只有一条唯一的通路, 用“/”依次地将这条通路上的所有目录文件名和数据文件名连接起来,便构成了文件的绝对路径名。例如,图7.2中的UserB用户可用路径名“/UserB/Doc/F” 来访问他的F文件。通常,一个用户进程在一给定的时间内所访问的文件仅局限于某个文件目录之下,为了简化文件的查找过程,可将该文件目录设置成“当前目录”或“工作目录”,以后用户进程对各文件的访问都可相对于“当前目录”而进行,而将当前目录到数据文件之间的所有目录文件名(不包括当前目录文件名)与数据文件名用“/”依次连接起来,便构成了文件的相对路径名。如用户UserB的当前目录是Doc,则他可使用相对路径名“F"来访问自己的F文件。


 

 3.目录查询技术

当用户要访问一个文件时,系统首先要利用用户提供的路径名对目录进行查询,只要找到对应的文件控制块,便可找到具体的文件并对之进行相应的操作。假定用户给定的文件路径名是/UserB/Doc/F,查询目录的过程可描述如下:系统先读入路径名中的第一个文件分量名UserB,用它与根目录文件中各目录项的文件名进行比较,从中找出匹配项,并从匹配项中得到文件控制块(如果系统引入了索引结点,则得到的是索引结点的指针,故还必须通过该指针将索引结点读入内存),然后再根据其中的物理地址找到目录文件/UserB;接着,系统再将路径名中的第二个分量名Doc读入,并与目录文件/UserB中的内容进行比较,得到Doc的文件控制块或索引结点,从而找到目录文件/UserB/Doc;然后,系统又将该文件的第三个分量名F读入,用它与目录文件/UserB/Doc中的目录项进行比较,最后得:到F的文件控制块或索引结点。如果在上述查询过程中,发现其中的一个文件分量名未找到,则应停止查找,并返回“文件未找到”信息。

7.4 文件共享

1.基于索引结点的共享方式

使用这种方式时,可在文件的索引结点中设置-一个链接计数字段i _nlink, 用来表示链接到本索引结点(亦即文件)上的用户目录项的数目。当用户C创建一个新文件时,其链接计数被置为1。如果用户B要共享该文件,则可在B的目录中增加- -目录项,并填上新的文件名和指向该共享文件的索引结点的指针,索引结点中的链接计数将被加1。这种方式的缺点是文件主无法删除被他人共享的文件。如果C将共享文件删除并清除相应的索引结点,则B中将有一个指向无效索引结点的目录项,若该索引结点以后被分配给另一个文件,则B将去共享一个错误的文件;如果C留下了索引结点,并将其链接计数减1,由于C是文件主,若系统要记账收费,C将继续为该文件付账,直至其他用户执行删除操作时,发现其链接计数为0,将其真正删除为止。

2.利用符号链实现文件共享

为了使B能共享C的一个文件,可以由系统为B建立一个类型为LINK的新文件,并把该文件放在B的目录下,该新文件的内容只包含了被链接文件的路径名。当B读该LINK类型的文件时,将被OS截获,并根据新文件中的路径名去读那个文件。这种实现文件共享的方式叫做符号链接。在这种方式下,文件主删除被他人共享的文件后,其他用户再去访问该共享文件时,会因找不到文件而失败,于是可再将符号链(即LINK类型的文件)删除,此时不会造成任何影响。它的问题是其他用户访问共享文件时,必须根据路径中的分量名逐级地去检索目录,因此加大了访问文件的开销;另外,尽管LINK类型的文件十分简单,但仍需为它配置一一个索引结点, 并分配-一个盘块来存放被链接文件的路径名,这同样会增加系统的的开销。符号链接有一个很大的优点,即只要简单地提供-一个机器的网络地址以及文件在该机器中的文件路径名,便可链接全球任何一处机器上的文件。

 

7.5 文件保护

1.访问权和保护域

访问权是一个用户(进程)对某个对象执行操作的权利,它可以用一有序对(对象名、 权集)来表示,如(F1、 [RW])表示用户(进程)对文件F1具有读和写的权利。保护域,简称“域”,是用户(进程)对一组对象的访问权的集合。在图7.4中示出了三个域,在域1中运行的用户(进程)能对文件F1执行读操作、对文件F2执行读和写操作,而Printer1同时出现在域2和域3中,表示在这两个域中运行的用户(进程)都能使用该打印机。


 

进程和域之间的联系可以是静态的,此时,在整个生命期中,进程只能在一个域中运行:进程和域之间的联系也可以是动态的,即在进程运行的不同阶段,允许它通过保护域切换功能,从一个域切换到另一个域。

2.访问矩阵

访问矩阵是用来描述系统的访问控制的一张二维表,其行代表一个保护域, 列代表系统中的一个对象,矩阵中的每一项是由- 组访问权组成的,它定义了在行所代表的域中执行的进程,能对列所代表的对象施加何种操作。
图7.4所示的保护域对应的访问矩阵如表7-1所示。由于进程与保护域之间采用动态的联系方式,故在矩阵中增加了三个对象,分别代表三个域本身。可见,当进程在域D1中运行时,它能读文件F1、读和写文件F2,并能切换到域D2中去运行。

 

3.访问矩阵的实现

在一个实际的系统中,域的数量和对象的数量都可能很大,为了减少访问矩阵的空间开销和访问该矩阵的时间开销,常以访问控制表或访问权限表的方式来实现访问矩阵。
(1)访问控制表。将访问矩阵按列(对象)进行划分,便可为每个列建立一张访问控制表。在该表中,已把矩阵中属于该列的所有空项删除,此时的访问控制表是由有序对(域,权集)组成的。在不少系统中,当对象是文件时,其访问控制表可以作为文件存取控制信息,存放在该文件的文件控制块中。
(2)访问权限表。将访问矩阵按行(即域)进行划分,便可为每一行建 立一张访问权限表。换言之,这是由一个域对每个对象可执行的一组操作所构成的表,表中的每一项即为该域对某对象的访问权限。表7-2示出了对应于图7.4 中域2的访问权限表。


 

目前,大多数系统都同时采用访问控制表和访问权限表来进行安全保护。系统将为每个对象配置一张访问控制表,当一个用户(进程)第一-次 试图去访问一个对象时,必须先检查访问控制表,如果用户(进程)不具有对该对象的访问权,则由系统拒绝用户(进程)的访问,并构成一异常事件:否则,便允许用户(进程)对该对象进行访问,并在用户(进程)的访问权限表中增加对该对象的访问权限。以后,该用户(进程)便可直接利用这一-返回的权限 去访问该对象。 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aaron_Liu0730

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值