【操作系统】第七章-文件管理

七、文件管理

前言

由于计算机中的内存是易失性设备,断电后所存储的信息即会丢失,其容量又十分有限,所以在现代计算机系统中,都必须配置外存,将系统和用户需要用到的大量程序和数据以文件的形式存放在外存中,需要时再随时将它们调入内存,或将它们打印出来。如果由用户直接管理存放在外存上的文件,不仅要求用户熟悉外存特性,了解各种文件的属性,以及它们在外存上的位置,而且在多用户环境下还必须能保持数据的安全性和一直性。显然,这是用户所不能胜任的。于是在操作系统中又增加了文件管理功能,专门管理在外存上的文件,并把对文件的存取、共享和保护等手段提供给用户。这不仅方便了用户,保证了文件的安全性,还可有效地提高系统资源的利用率。

1.文件和文件系统

文件系统的管理功能是将其管理的程序和数据通过组织为一系列文件的方式实现的。而文件则是指具有文件名的若干相关元素的集合。元素通常是记录,而记录又是一组有意义的数据项的集合。可见,基于文件系统的概念,可以把数据组分成数据项、记录和文件三级。

1.1 数据项、记录和文件

  1. 数据项

    在文件系统中,数据项是最低级的数据组织形式,可把它分成以下两种类型:

    (1) 基本数据项。这是用于描述一个对象的某种属性的字符集,是数据组织中可以命名的最小逻辑数据单位,又称为字段。

    (2) 组合数据项。是由若干个基本数据项组成的,简称组项。

  2. 记录

    记录是一组相关数据项的集合,用于描述一个对象在某方面的属性。一个记录应包含哪些数据项,取决于需要描述对象的哪个方面。由于对象所处的环境不同可把他作为不同的对象。

  3. 文件

    文件是指由创建者所定义的、具有文件名的一组相关元素的集合,可分为有结构文件和无结构文件两种。在有结构的文件中,文件由若干个相关记录组成,而无结构文件则被看成是一个字符流。文件在文件系统中是一个最大的数据单位,它描述了一个对象集。

    文件属性可以包括:

    (1) 文件类型。可以从不同的角度来规定文件的类型,如源文件、目标文件及可执行文件等。

    (2) 文件长度。文件长度指文件的当前长度,长度的单位可以是字节、字或块,也可以是最大允许的长度。

    (3) 文件的物理位置。该项属性通常用于指示文件所在的设备及所在设备中地址的指针。

    (4) 文件的建立时间。这是值最后一次的修改时间等。

    下图示出了文件、记录和数据项之间的层次关系。

    在这里插入图片描述

1.2 文件名和类型

  1. 文件名和扩展名

    (1) 文件名。在不同的系统之间,对文件名的规定是不同的。

    (2) 扩展名。扩展名是添加在文件名后面的若干个附加字符,又称为后缀名,用于指示文件的类型。

  2. 文件类型

    为了便于管理和控制文件,将文件分成若干种类型。由于不同的系统对文件管理方式的不同,因此它们对文件的分类方法也有很大差异。下面是常用的几种文件分类方法。

    (1) 按用途分类

    根据文件的性质和用途的不同,可将文件分为三类:

    ①系统文件,这是指由系统软件构成的文件。大多数的系统文件只允许用户调用,但不允许用户去读,更不允许修改;有的系统文件不直接对用户开放。

    ②用户文件,指由用户的源代码、目标文件、可执行文件或数据等所构成的文件。用户将这些文件委托给系统保管。

    ③库文件,这是由标准子例程及常用的例程等所构成的文件。这类文件允许用户调用,但不允许修改。

    (2) 按文件中数据的形式分类

    按这种方式分类,也可把文件分为三类:

    ①源文件,这是指由源程序和数据构成的文件。通常,由终端或输入设备输入的源程序和数据所形成的文件都属于源文件。它通常是由ASCII码或汉字所组成的。

    ②目标文件,这是指把源程序经过编译程序编译过,但尚未经过链接程序链接的目标代码所构成的文件。目标文件所使用的后缀名是“.obj”。

    ③可执行文件,这是指把编译后所产生的目标代码经过链接程序链接后所形成的文件。其后缀名是.exe。

    (3) 按存取控制属性分类

    根据系统管理员或用户所规定的存取控制属性,可将文件分为三类:

    ①只执行文件,该类文件只允许被核准的用户调用执行,不允许读和写。

    ②只读文件,该类文件只允许文件主及被核准的用户去读,不允许写。

    ③读写文件,这是指允许文件主和被核准的用户去读或写的文件。

    (4) 按组织形式和处理方式分类

    ①普通文件,是由ASCII码或二进制码组成的字符文件,一般用户建立的源程序文件、数据文件以及操作系统自身代码文件、实用程序等都是普通文件。

    ②目录文件,是由文件目录组成的文件,通过目录文件可以对其下属文件的信息进行检索,对其可执行的文件进行操作,与普通文件一样。

    ③特殊文件,特指系统中的各类I/O设备。为了便于统一管理,系统将所有的I/O设备都视为文件,并按文件方式提供给用户使用,如目录的检索、权限的验证等都与普通文件相似,只是对这些文件的操作将由设备驱动程序来完成。

1.3 文件系统的层次结构

如下图所示,文件系统的模型可分为三个层次:最底层是对象及其属性,中间层是对对象进行操纵和管理的软件集合,最高层是文件系统提供给用户的接口。

在这里插入图片描述

  1. 对象及其属性

    文件管理系统管理的对象如下:

    (1) 文件。

    (2) 目录。

    (3) 磁盘(磁带)存储空间。

  2. 对对象操纵和管理的软件集合

    该层是文件管理系统的核心部分。文件系统的功能大多是在这一层实现的,其中包括有:①对文件存储空间的管理;②对文件目录的管理;③用于将文件的逻辑地址转换为物理地址的机制;④对文件读和写的管理;⑤对文件的共享与保护等功能。在实现这些功能时,OS通常都采取了层次组织结构,即在每一层中都包含了一定的功能,处于某个层次的软件,只能调用同层或更低层次中的功能模块。

    一般地,把与文件系统有关的软件分为四个层次:

    (1) I/O控制层,是文件系统的最低层,主要有磁盘驱动程序等组成,也可称为设备驱动程序层。

    (2) 基本文件系统层,主要用于处理内存与磁盘之间数据块的交换。

    (3) 基本I/O管理程序,该层用于完成与磁盘I/O有关的事务,如将文件逻辑块号转换为物理块号,管理磁盘中的空闲盘块,I/O缓冲的指定等。

    (4) 逻辑文件系统,用于处理与记录和文件相关的事务,如允许用户和应用程序使用符号文件名访问文件及记录,实现对文件和记录的保护等。

  3. 文件系统的接口

    为方便用户的使用,文件系统以接口的形式提供了一组对文件和记录操作的方法和手段。通常是下面两种类型的接口:

    (1) 命令接口

    (2) 程序接口

1.4 文件操作

  1. 最基本的文件操作

    (1) 创建文件。

    (2) 删除文件。

    (3) 读文件。

    (4) 写文件。

    (5) 设置文件的读/写位置。

  2. 文件的“打开”和“关闭”操作

  3. 其他文件操作

    OS为用户都提供了一系列文件操作的系统调用,其中最常用的一类是有关对文件属性的操作,即允许用户直接设置和获得文件的属性,如改变已存文件的文件名、改变文件的拥有者(文件主)、改变对文件的访问权,以及查询文件的状态(包括文件类型、大小和拥有者以及对文件的访问权等)。另一类是有关目录的操作,如创建一个目录,删除一个目录,改变当前目录和工作目录等。此外,还有用于实现文件共享的系统调用,以及用于对文件系统进行操作的系统调用等。

2.文件的逻辑结构

2.1 文件逻辑结构的类型

  1. 按文件是否有结构分类

    (1) 有结构文件

    (2) 无结构文件

  2. 按文件的组织方式分类

    (1) 顺序文件

    (2) 索引文件

    (3) 索引顺序文件

2.2 顺序文件(Sequential File)

  1. 顺序文件的排列方式

    (1) 串结构

    (2) 顺序结构

  2. 顺序文件的优缺点

    优点:

    • 在所有逻辑文件中存取效率最高。
    • 能在顺序存储设备(如磁带)中有效地工作。

    缺点:

    • 在交换应用场合,如果用户(程序)要求查找或修改单个记录,性能可能很差。
    • 增加或删除一个记录比较困难

2.3 记录寻址

为了访问顺序文件中的一条记录,首先应找到该记录的地址。查找记录地址的方法有隐式寻址和显式寻址方式两种。

  1. 隐式寻址方式
  2. 显式寻址方式

2.4 索引文件(Index File)

  1. 按关键字建立索引
  2. 具有多个索引表引表的索引文件

2.5 索引顺序文件(Index Sequential File)

  1. 索引舒心文件的特征

    索引顺序文件是对顺序文件的一种改进,它基本上克服了边长记录的顺序文件不能随机访问,以及不便于记录的删除和插入的缺点。但它仍保留了顺序文件的关键特征,即记录是按关键字的顺序组织起来的。它又增加了两个新特征:一个是引入了文件索引表,通过该表可以实现对索引顺序文件的随机访问;另一个是增加了溢出(overflow)文件,用它来记录新增加的、删除的和修改的记录。可见,索引顺序文件是顺序文件和索引文件相结合的产物,能有效地克服变长记录文件的缺点,而且所付出的代价也不算太大。

  2. 一级索引顺序文件

    其具体的建立方法是,首先将变长记录顺序文件中的所有记录分为若干个组,然后为顺序文件建立一张索引表,并为每组的第一个记录在索引表中建立一个索引项,其中含有该记录的关键字和指向该记录的指针。

  3. 两级索引顺序文件

    为了进一步提高检索效率,可以为顺序文件建立多级索引,即为索引文件再建立一张索引表,从而形成两级索引表。

2.6 直接文件和哈希文件

  1. 直接文件

    采用前述几种文件结构对记录进行存取时,都须利用给定的记录键值,先对线性表或链表进行检索,以找到指定记录的物理地址。然而对于直接文件,则可根据给定的关键字直接获得指定记录的物理地址。换而言之,关键字本身就是决定了记录的物理地址。这种由关键字到记录物理地址的转换被称为键值转换(Key to address transformation)。组织直接文件的关键在于用什么方法进行从记录值到物理地址的转换。

  2. 哈希(Hash)文件

    这是目前应用最为广泛的一种直接文件。它利用Hash函数(或称散列函数)可将关键字转换为相应记录的地址。但为了能实现文件存储空间的动态分配,通常由Hash函数所求得的并非是相应记录的地址,而是指向某一目录相应表目的指针,该表目的内容指向相应记录所在的物理块,如下图。通常,把Hash函数作为标准函数存于系统中,供存取文件时调用。

    在这里插入图片描述

3.文件目录

通常,在现代计算机系统中,都要存储大量的文件。为了能对这些文件实施有效的管理,必须对它们加以妥善组织,这主要是通过文件目录实现的。文件目录也是一种数据结构,用于标识系统中的文件及其物理地址,供检索时使用。对目录管理的要求如下:

(1) 实现“按名存取”。

(2) 提高对目录的检索速度。

(3) 文件共享。

(4) 允许文件重名。

3.1 文件控制块和索引结点

为了能对一个文件进行正确的存取,必须为文件设置用于描述和控制文件的数据结构,称之为“文件控制块”。文件管理程序可借助于文件控制块中的信息对文件施以各种操作。文件与文件控制块一一对应,而人们把文件控制块的有序集合称为文件目录,即一个文件控制块就是一个文件目录项。通常,一个文件目录也被看做是一个文件,称为目录文件。

  1. 文件控制块FCB(File Control Block)

    为了能对系统中的大量文件施以有效的管理,在文件控制块中,通常应包含三类信息,即基本信息、存取控制信息及使用信息。

    (1) 基本信息类

    ①文件名

    ②文件物理位置

    ③文件逻辑结构

    ④文件的物理结构

    (2) 存取控制信息类

    存取控制信息类包括文件主的存取权限、核准用户的存取权限以及一般用户的存取权限。

    (3) 使用信息类

    使用信息类包括文件的建立日期和时间、文件上一次修改的日期和时间,以及当前使用信息。这些信息包括当前已打开该文件的进程数,是否被其它进程锁住,文件在内存中是否已被修改但尚未拷贝到盘上等。

  2. 索引结点

    (1) 索引结点的引入

    在有点系统中,如UNIX系统,采用了把文件名与文件描述信息分开的办法,亦即,使文件描述信息单独形成一个称为索引结点的数据结构,简称为i结点。在文件目录中的每个目录项仅由文件名和指向该文件所对应的i结点的指针所构成。

    在这里插入图片描述

    (2) 磁盘索引结点

    这是存放在磁盘上的索引结点。每个文件有唯一的一个磁盘索引结点,它主要包括以下内容:

    ①文件主标识符,即拥有该文件的个人或小组的标识符;

    ②文件类型,包括正规文件、目录文件或特别文件;

    ③文件存取权限,指各类用户对该文件的存取权限;

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

    ⑤文件长度,指以字节为单位的文件长度;

    ⑥文件连接计数,表明在本文件系统中所有指向该(文件的)文件名的指针计数;

    ⑦文件存取时间,指出本文件最近被进程存取的时间、最近被修改的时间及索引结点最近被修改的时间。

    (3) 内存索引结点

    这是存放在内存中的索引结点。当文件被打开时,要将磁盘索引结点拷贝到内存的索引结点中,便于以后使用。在内存索引结点中又增加了一下内容:

    ①索引结点编号,用于标识内存索引结点;

    ②状态,指示i结点是否上锁或被修改;

    ③访问计数,每当有一进程要访问此i结点时,将该访问计数加1,访问完再减1;

    ④文件所属文件系统的逻辑设备号;

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

3.2 简单的文件目录

  1. 单级文件目录

    这是最简单的文件目录。在整个文件系统中只建立一张目录表,每个文件占一个目录项,目录项中含文件名、文件扩展名、文件长度、文件类型、文件物理地址以及其它文件属性。此外,为表明每个目录项是否空闲,又设置了一个状态位。单级文件目录如下图。

    在这里插入图片描述

  2. 两级文件目录

    为了克服单级文件目录所存在的缺点,可以为每一个用户再建立一个单独的用户文件目录UFD(User File Directory)。这些文件目录具有相似的结构,它由用户所有文件的文件控制块组成。此外,在系统中再建立一个主文件目录MFD(Master File Directory);在主文件目录中,每个用户目录文件都占有一个目录项,其目录项中包括用户名和指向该用户目录文件的指针。如下图。

    在这里插入图片描述

3.3 树形结构目录(Tree-Structured Directory)

  1. 树形目录

    在现代OS中,最通用且实用的文件目录无疑是树形结构目录。它可以明显地提高对目录的检索速度和文件系统的性能。主目录在这里被称为根目录,在每个文件目录中,只能有一个根目录,每个文件和每个目录都只能有一个父目录。把数据文件称为树叶,其他的目录均作为树结点,或称为子目录。下图示出了树形结构目录。

    在这里插入图片描述

  2. 路径名和当前目录

    (1) 路径名(path name)

    在树形结构目录中,从跟目录到任何数据文件都只有一条唯一的通路。在该路径上,从树的根(即主目录)开始,把全部目录文件名与数据文件名依次地用“/”连接起来,即构成该数据文件唯一的路径名。

    (2) 当前目录(Current Directory)

    把从当前目录开始直到数据文件为止所构成的路径名称为相对路径名,而把从树根开始的路径名称为绝对路径名。

  3. 目录操作

    (1) 创建目录

    (2) 删除目录

    (3) 改变目录

    (4) 移动目录

    (5) 链接(Link)操作

    (6) 查找

3.4 目录查找技术

  1. 线性检索法

    线性检索法又称为顺序检索法。在单机目录中,利用用户提供的文件名,用顺序查找法直接从文件目录中找到指名文件的目录项。在树形目录中,用户提供的文件名是由多个文件分量名组成的路径名,此时需对多级目录进行查找。下图示出查找/usr/ast/mbox文件的过程。

    在这里插入图片描述

  2. Hash方法

    如果我们建立了一张Hash索引文件目录,便可利用Hash方法进行查询,即系统利用用户提供的文件名,并将它变换为文件目录的索引值,再利用该索引值到目录中去查找,这样将显著地提高检索速度。

4.文件共享

4.1 基于有向无循环图实现文件共享

  1. 有向无循环图DAG(Directed Acyclic Gragh)

    在严格的树形结构目录中,每个文件只允许有一个父目录,父目录可以有效地拥有该文件,其他用户想要访问它,必须经过其属主目录来访问该文件。这就是说,对文件的共享是不对称的,或者说,树形结构目录是不适合文件共享的。如果允许一个文件可以有多个父目录,即有多个属于不同用户的多个目录,同时指向同一个文件,这样虽然会破坏树的特性,但这些用户可用对称的方式实现文件共享,而不必再通过其属主目录来访问。

    如下图示出了一个有向无循环图,它允许每一个文件都可以有多个父目录。图中的文件F8有三个父目录,它们分别是D5、D6和D3,其中D5和D3还使用了相同的名字p,目录D6有两个父目录D2和D1。

    由上所述得知,当有多个用户要共享一个子目录或文件时,必须将共享文件或子目录链接到多个用户的父目录中,才能方便地找到该文件。现在的问题是,如何建立父目录D5与共享文件F8之间的链接?如果在文件目录中所包含的是文件的物理地址,即文件所在盘块的盘块号,则在链接时,必须将文件的物理地址拷贝到D5目录中。但如果以后D5或D6还要继续向该文件中添加新内容,也必然要相应地再增加新的盘块,这些是由附加操作Append来完成的。而这些新增加的盘块也只会出现在执行了操作的目录中。可见,这种变化对其他用户而言,是不可见的,因而新增加的这部分内容已不能被共享。

    在这里插入图片描述

  2. 利用索引结点

    为了解决这个问题,可以引用索引结点,即诸如文件的物理地址及其它的文件属性等信息,不再是放在目录项中,而是放在索引结点中。在文件目录中只设置文件名及指向相应索引结点的指针,如下图所示。图中的用户Wang和Lee的文件目录中,都设置指向共享文件的索引结点指针。此时,由任何用户对共享文件所进行的Append操作或修改,都将引起其相应结点内容的改变(例如,增加了新的盘块号和文件长度等),这些改变是其他用户可见的,从而也就能提供给其他用户来共享。

    在这里插入图片描述

4.2 利用符号链接实现文件共享

  1. 利用符号链接(Symbolic Linking)的基本思想

    利用符号链接实现文件共享的基本思想,是运行一个文件或子目录有多个父目录,但其中仅有一个作为主(属主)父目录,其他的几个父目录都是通过符号链接方式与之相链接的(简称链接父目录)。

  2. 如何利用符号链接实现共享

    为使链接父目录D5能共享文件F,可以由系统创建一个LINK类型的新文件,也取名为F,并将F写入链接父目录D5中,以实现D5与文件F8的链接。在新文件F中只包含被链接文件F8的路径名,这样的链接方式被称为符号链接。新文件F中的路径名则只被看做是符号链,当用户通过D5访问被链接的文件F8,且正要度LINK类新文件时,此要求将被OS截获,OS根据新文件中的路径名去找到文件F8,然后对它进行读(写),这样就实现了用户B对文件F的共享。

5.文件保护

为了确保文件系统的安全性,可针对上述原因而采取三方面的措施:

(1) 通过存取控制机制,防止由人为因素所造成的文件不安全性。

(2) 采取系统容错技术,防止系统部分的故障所造成的文件的不安全性。

(3) 建立后备系统,防止由自然因素所造成的不安全性。

本节主要介绍第一方面的措施——存取控制机制。

5.1 保护域(Protection Domain)

在现代OS中,几乎都配置了用于对系统中资源进行保护的保护机制,并引入了“保护域”和“访问权”的概念。规定每一个进程仅能在保护域内执行操作,而且只允许进程访问它们具有“访问权”的对象。

  1. 访问权

    为了对系统中的对象加以保护,应由系统来控制进程对对象的访问。对象可以是硬件对象,如磁盘驱动器、打印机;也可以是软件对象,如文件、程序。对对象所施加的操作也有所不同,如对文件可以是读,也可以是写或执行操作。我们把一个进程能对某对象执行操作的权力,称为访问权(Access right)。每个访问权可以用一个有序对(对象名,权集)来表示,例如,某个进程有对文件F执行读和写操作的权力,则可将该进程的访问权表示成(F, {R/W})。

  2. 保护域

    为了对系统中的资源进行保护而引入了保护域的概念,保护域简称为“域”。“域”是进程对一组对象访问权的集合,进程只能在指定域内执行操作。这样,“域”也就规定了进程所能访问的对象和能执行的操作。

  3. 进程和域间的静态联系

    在进程和域之间可以一一对应,即一个进程只联系着一个域。这意味着,在进程的整个生命期中,其可用资源是固定的,我们把这种域称为“静态域”。在这种情况下,进程运行的全过程都是受限于同一个域,这将会使赋予进程的访问权超过了实际需要。例如,某个进程在运行开始时需要磁带机输入数据,而在进程快结束时,又需要用打印机打印数据。在一个进程只联系着一个域的情况下,则需要在该域中同时设置磁带机和打印机这两个对象,这就超过进程运行的实际需要。

  4. 进程和域间的动态联系方式

    在进程和域之间,也可以是一对多的关系,即一个进程可以联系着多个域。在此情况下,可将进程的运行分为若干个阶段,其每个阶段联系着一个域,这样便可根据运行的实际需要来规定在进程运行的每个阶段中所能访问的对象。我们把这种一对多的联系方式称为动态联系方式,在采用这种方式的系统中,应增设保护域切换功能,以使进程能在不同的运行阶段从一个保护域切换到另一个保护域。

5.2 访问矩阵

  1. 基本的访问矩阵

    我们可以利用一个矩阵来描述系统的访问控制,并把该矩阵称为访问矩阵(Access Matrix)。访问矩阵中的行代表域,列代表对象,矩阵中的每一项是由一组访问权组成的。因为对象已由列显式地定义,故可以只写出访问权而不必写出是对哪个对象的访问权,每一项访问权access(i, j)定义了在域Di中执行的进程能对对象Qj所施加的操作集。

    访问矩阵中的访问权通常是由资源的拥有者或者管理者所决定的。当用户创建一个新文件时,创建者便是拥有者,系统在访问矩阵中为新文件增加一列,由用户决定在该列的某个项中应具有哪些访问权,而在另一项中又具有哪些访问权。当用户删除此文件时,系统也要相应地在访问矩阵中将该文件的列撤销。如下图。

    在这里插入图片描述

  2. 具有域切换权的访问矩阵

    为了实现在进程和域之间的动态联系,应能够将进程从一个保护域切换到另一个保护域。为了能对进程进行控制,同样应将切换作为一种权利,仅当进程由切换权时,才能进行这种切换。为此,在访问矩阵中有增加了几个对象,分别把它们作为访问矩阵中的几个域;当且仅当switch ∈ \in access(i, j)时,才允许进程从域i切换到域j。如下图。

    在这里插入图片描述

5.3 访问矩阵的修改

在系统中建立起访问矩阵后,随着系统的发展及用户的增加和改变,必然要经常对访问矩阵进行修改。因此,应当允许可控性地修改访问矩阵中的内容,这可通过在访问权中增加拷贝权、拥有权及控制权的方法来实现有控制的修改。

  1. 拷贝权(Copy Right)

    我们可利用拷贝权将在某个域中所拥有的访问权(access(i, j))扩展到同一列的其他域中,亦即,为进程在其他的域中也赋予对同一对象的访问权(access(k, j)),如下图所示。

    在这里插入图片描述

    应注意的是,把带有*号的拷贝权如R*,由access(i, j)拷贝成access(k, j)后,其所建立的访问权只是R而不是R*,这使在域Dk上运行的进程不能再将其拷贝权进行扩散,从而限制了访问权的进一步扩散。这种拷贝方式被称为限制拷贝。

  2. 所有权(Owner Right)

    人们不仅要求能将已有的访问权进行有控制的扩散,而且同样需要能增加某种访问权,或者能删除某种访问权。此时,可利用所有权(O)来实现这些操作。如下图,如果在access(i, j)中包含所有权,则在域Di上运行的进程可以增加或删除其在j列上任何项中的访问权。换而言之,进程可以增加或删除在任何其他域中运行的进程对对象j的访问权。

    在这里插入图片描述

  3. 控制权(Control Right)

    拷贝权和所有权都是用于改变矩阵内同一列的各项访问权的,或者说,是用于改变在不同域中运行的进程对同一对象的访问权的。控制权则可用于改变矩阵内同一行中(域中)的各项访问权,亦即,用于改变在某个域中运行的进程对不同对象的访问权的。如果在access(i, j)中包含了控制权,则在域Di中运行的进程可以删除在域Dj中运行的进程对各对象的任何访问权。例如下图(对比之前图7-19,发现D3中已无对文件F6的写访问权)。

    在这里插入图片描述

5.4 访问矩阵的实现

  1. 访问控制表(Access Control List)

    这是指对访问矩阵按列(对象)划分,为每一列建立一张访问控制表ACL。在该表中,已把矩阵中属于该列的所有空项删除,此时的访问控制表是由一有序对(域,权集)所组成的。由于在大多数情况下,矩阵中的空项远多于非空项,因而使用访问控制表可以显著地减少所占用的存储空间,并能提高查找速度。在不少系统中,当对象是文件时,便把访问控制表存放在该文件的文件控制表中,或放在文件的索引结点中,作为该文件的存取控制信息。

    域是一个抽象的概念,可用各种方式实现。最常见的一种情况是每一个用户是一个域,而对象则是文件。此时,用户能够访问的文件集和访问权限取决于用户的身份。通常,在一个用户退出而另一个用户进入时,即用户发生改变时,要进行域的切换;另一种情况是,每个进程是一个域,此时,能够访问的对象集中的各访问权取决于进程身份。

    访问控制表也可用于定义缺省的访问权集,即在该表中列出了各个域对某对象的缺省访问权集。在系统中配置了这种表后,当某用户(进程)要访问某资源时,通常是首先由系统到缺省的访问控制表中,去查找该用户(进程)是否具有对指定资源进行访问的权力。如果找不到,再到相应对象的访问控制表中去查找。

  2. 访问权限(Capabilities)表

    如果把访问矩阵按行(即域)划分,便可由每一行构成一张访问权限表。换而言之,这是由一个域对每个对象可以执行的一组操作所构成的表。表中的每一项即为该域对某对象的访问权限。当域为用户(进程)、对象为文件时,访问权限表便可用来描述一个用户(进程)对每一个文件所能执行的一组操作。例如下图(对应于与7-19中域D2的访问权限表)。

    在这里插入图片描述

    应当指出,仅当访问权限安全时,由它所保护的对象才可能是安全的。因此,访问权限表不能允许直接被用户(进程)所访问。通常,将访问权限表存储到系统区内的一个专用区中,只有通过访问合法性检查的程序才能对该表进行访问,以实现对访问权限表的保护。

猜你喜欢

转载自blog.csdn.net/m0_50833438/article/details/115101633