文件系统基础

  • 一、基本概念
    • 1、文件的定义
    • 2、数据项
      • 1)基本数据项
      • 2)组合数据项
    • 3、记录
    • 4、文件
      • 4.1、文件的属性
    • 5、文件类型
      • 5.1、按用途分类
        • 1)系统文件
        • 2)用户文件
        • 3)库文件
      • 5.2、按文件中的数据形式分类
        • 1)源文件
        • 2)目标文件
        • 3)可执行文件
      • 5.3、按存取控制分类
      • 5.4、按组织形式和处理方式分类
        • 1)普通文件
        • 2)目录文件
        • 3)特殊文件
  • 二、文件操作
    • 1、文件基本操作
      • 1.1、创建文件
      • 1.2、删除文件
      • 1.3、写(修改)文件
      • 1.4、读(查看)文件
      • 1.5、文件重定位(文件寻址)
      • 1.6、截断文件
    • 2、文件的打开与关闭
      • 2.1、文件关联信息
  • 三、文件的逻辑结构
    • 1、文件逻辑结构的类型
    • 2、无结构文件
    • 3、有结构文件
      • 3.1、顺序文件
      • 3.3、索引顺序文件
      • 3.4、直接文件和哈希文件
        • 1)直接文件
        • 2)哈希文件
  • 四、目录管理
    • 1、文件控制块
    • 2、索引节点
      • 2.1、磁盘索引节点
      • 2.2、内存索引节点
    • 3、目录结构
      • 3.1、单级目录结构
      • 3.2、两级目录结构
      • 3.3、多级目录结构
      • 3.4、无环图目录结构
  • 五、文件共享
    • 1、基于索引节点的共享方式
    • 2、利用符号链实现文件共享
  • 五、文件保护
    • 1、访问类型
    • 2、访问控制
      • 2.1、访问控制列表
      • 2.2、口令和密码

一、基本概念

1、文件的定义

  • 文件是以计算机硬盘为载体的存储在计算机上的信息集合
  • 文件是指具有文件名的若干相关元素的集合;元素通常是记录,而记录又是一组有意义的数据项的集合
  • 基于文件系统的概念可以将数据组成分为数据项记录文件三级。

2、数据项

  • 数据项是文件系统中最低级的数据组织形式,可分为基本数据项组合数据项

1)基本数据项

  • 用于描述一个对象的某种属性的一个值,如姓名、日期等;是数据组织中可以命名的最小逻辑数据单位,即原子数据。基本数据项除了数据名外,还应有数据类型。因为基本数据项是描述某个对象的属性,而属性不同需要不同的数据类型来刻画。

2)组合数据项

  • 有若干基本数据项组成,简称组项。

3、记录

  • 记录是一组有关数据项的集合,用于描述一个对象在某方面的属性。一个记录包含哪些数据项取决于需要描述对象哪个方面;此外,一个对象可因为所处环境的不同而成为不同的对象。
  • 在诸多记录中,为了能够唯一的表示一个记录,必须在每个记录的各个数据项中,确定一个或几个数据项,把它们的集合称为关键字;即关键字是惟一能标识一个记录的数据项。通常只需一个数据项作为关键字

4、文件

  • 文件是指由创建者所定义的、具有文件名的一组相关元素的集合,逻辑上可分为有结构和无结构两种有结构文件中,文件由一组相似的记录组成,如学生成绩表,故又称记录式文件;而无结构文件则被视为一个字符流,如一个二进制文件或字符文件,故又称流式文件

4.1、文件的属性

  • 文件具有一定的属性,不同系统对文件属性也有所不同,但通常包含以下属性:
    ① 名称:文件名唯一,以容易读取的形式保存。
    ② 标识符:表示文件系统内文件的唯一标签,通常为数字,是对人不可读的一种内部名称。
    ③ 类型:被支持的不同类型的文件系统使用
    ④ 位置:指向设备和设备上文件的指针。
    ⑤ 大小:文件当前的大小,也可包含文件允许的最大值。
    ⑥ 保护:对文件进行保护的访问控制信息。
    ⑦ 时间、日期和用户标识:文件创建、上次修改和上次访问的相关信息,用于保护和跟踪文件的使用。
  • 所有文件的信息都存放在目录结构中,而目录结构保存在外存上。文件信息在需要时才调入内存。通常,目录条目包括文件名名称机器唯一标识符,而标识符定位其他属性的信息

5、文件类型

  • 为了便于管理和控制文件而将文件分门别类,不同 OS 有不同的分类方法,大多数 OS 中都把文件类型作为扩展名缀在文件名后面,在文件名和扩展名之间用“.”号隔开。常用的文件分类方法如下:

5.1、按用途分类

  • 根据文件的性质和用途分为系统文件、用户文件和库文件。

1)系统文件

  • 指由系统软件构成的文件。大多数系统文件只允许用户调用,而不允许用户读,跟不允许用户修改;还有一些系统文件不直接对用户开放。

2)用户文件

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

3)库文件

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

5.2、按文件中的数据形式分类

  • 可分为源文件、目标文件和可执行文件。

1)源文件

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

2)目标文件

  • 指把源程序经过相应语言的编译程序编译过,但尚未经过链接程序链接的目标代码所构成的文件,属于二进制文件。通常,目标文件所使用的后缀名为“.obj”。

3)可执行文件

  • 指编译后所产生的目标代码在经过链接程序链接后形成的文件。不同系统上,可执行文件的后缀是不一样的。

5.3、按存取控制分类

  • 根据系统管理员或用户所规定的存取控制属性,文件可分为:
  • 1)只执行文件:只被核准的用户调用执行,既不允许读更不允许写
  • 2)只读文件:只允许被文件主和核准的用户读取文件内容,而不允许写
  • 3)读写文件:允许文件主和核准的用户去读或写文件

5.4、按组织形式和处理方式分类

1)普通文件

  • 由ASII 码或二进制码组成的文件。一般用户所建立的源程序文件、数据文件、目标代码文件以及操作系统自身的代码文件、库文件、实用程序文件都属于普通文件,通常存储在外存中。

2)目录文件

  • 由文件目录组成,用于管理和实现文件系统功能的系统文件,通过目录文件可以对其他文件的信息进行检索。由于目录文件也是由字符序列组成,因此对其可进行与普通文件一样的文件操作。

3)特殊文件

  • 特指系统中的各类 I/O 设备。为了便于统一管理,系统将所有的输入/输出设备都视为文件,按文件方式提供给用户使用,如目录的检索、权限的验证都与普通文件一样,只是对这些文件的操作都是和设备驱动程序紧密相连的,系统将这些操作转为对具体设备的操作。根据设备数据交换单位的不同,又可分为块设备文件和字符设备文件;前者用于磁盘、光盘或磁带等,后者用于终端、打印机等。

二、文件操作

  • 用户通过文件系统所提供的系统调用实施对文件的操作。最基本的文件操作有创建文件、删除文件、读文件、写文件、截断文件和设置文件的读/写位置。对于一个实际的 OS,为方便用户还应提供如文件打开和关闭等操作功能。

1、文件基本操作

1.1、创建文件

  • 创建一个新文件时,系统首先要为新文件分配必要的外存空间,并在文件系统的目录中,为之建立一个目录项。目录项中应记录新文件的文件名及其在外存中的地址等属性。

1.2、删除文件

  • 从文件系统中删除一个文件时,应先从目录中找到要删除的文件的目录项,使之成为空项,然后回收该文件所占用的存储空间

1.3、写(修改)文件

  • 为了写文件,须在相应的系统调用中指明文件命名称和要写入文件的内容。给定文件名称,文件系统才能搜索目录以查找文件位置。文件系统必须为该文件维护一个写位置的指针。每当发生写操作时,就更新写指针。

1.4、读(查看)文件

  • 同样的,在一个系统调用中给出文件名和要读入文件块的内存目标地址,需要搜索目录以找到相关目录项,系统维护一个读位置的指针。每当发生读操作,更新读指针。一个进程通常都只对一个文件读或写,因此当前操作位置可作为每个进程当前文件位置的指针。由于读和写操作都使用同一指针,故节省了空间和降低了系统复杂度。

1.5、文件重定位(文件寻址)

  • 按条件搜索目录,将当前文件位置设置成给定值,并且不会读、写文件。文件重定位可以从顺序存取变为随机存取。

1.6、截断文件

  • 允许文件的所有属性不发生改变,而删除文件内容——将其长度置零并释放其空间。

2、文件的打开与关闭

  • 要求首次使用文件时,用系统调用 open 将指明文件的属性——包括文件在外存上的物理位置——从外存复制到内存打开文件表的一个表目中,并将该表目的编号即索引返回给用户。操作系统维护一个包含所有打开文件信息的表——打开文件表,Open-file Table。当用户需要一个文件操作时,可通过该表的一个索引指定文件,省去搜索环节;当文件不再使用时,进程可以关闭它,操作系统从打开文件表中删除这一条目。open 调用在得到操作系统允许的情况下,都会返回一个只想打开文件表中的一个条目的指针,通过该指针进行所有的 I/O 操作,以简化步骤并节省资源。在Open 调用完成后,操作系统对该文件的任何操作都不再需要文件名,而只需 open 调用返回的指针
  • 整个系统表包含进程相关信息,如文件在磁盘的位置、访问日期和大小。一个进程打开一个文件,系统打开文件表就会为打开的文件增加相应的条目;当另一进程执行open时,只不过是在其进程打开表中增加一个条目,并指向整个系统表的相应条目。通常,系统打开文件表的每个文件时,还用一个文件打开计数器(Open Count),记录多少进程打开了该文件。每个关闭操作close使count递减,当打开计数器为0时,表示该文件不再被使用,系统将回收分配给该文件的内存空间等资源。若文件修改过,则将文件写回外存,并将系统打开文件表中的相应条目删除,最后释放文件的文件控制块(File Control Block,FCB)

2.1、文件关联信息

  • 每个打开文件都有如下关联信息:
    • 文件指针,系统用于跟踪上次的读写位置作为当前文件位置的指针,这种指针对打开文件的某个进程来说是唯一的,因此必须与磁盘文件属性分开保存。
    • 文件打开计数,文件关闭时,操作系统必须重用其打开文件表条目,否则表内空间将不够用。因为多个进程可能打开同一个文件,所以系统在删除打开文件条目之前,必须等待最后一个进程关闭文件。计数器跟踪打开和关闭的数量,计数为0时,系统关闭文件,删除该条目
    • 文件磁盘位置,绝大多数文件操作都要求系统修改文件数据。该信息保存在内存中,以免为每个操作都从磁盘中读取。
    • 访问权限。每个进程打开文件都需要一个访问模式:创建、只读、读写、添加等。该信息保存在进程的打开文件表中,以便操作系统能够允许或拒绝之后的I/O请求。

三、文件的逻辑结构

  • 文件的逻辑结构是从用户观点出发看到的文件的组织形式,不同于文件的物理结构是从实现观点出发看到的文件在外存上的存储组织形式。文件逻辑结构与存储介质特性无关,文件的逻辑结构实际上是指在文件的内部,数据逻辑上是如何组织的。

1、文件逻辑结构的类型

  • 文件逻辑结构有两大类:有结构文件和无结构文件。其中有结构文件又可细分为顺序文件、索引文件、索引顺序文件、直接文件或散列文件

2、无结构文件

  • 无结构文件又称为流式文件,是最简单的文件组织形式。
  • 无结构文件将数据按顺序组织成记录并积累、保存,是有序相关信息项的集合,以字节为单位。因为此种文件没有结构,因而对记录的访问只能通过穷举搜索的方式,故而此种文件形式对大多数应用不适用。但字符流文件的无结构文件管理简单,用户可以方便地对其进行操作。所以,那些对基本信息单位操作不多地文件较适于采用字符流无结构文件,如源程序文件、目标代码文件等。

3、有结构文件

  • 有结构文件又称为记录式文件。

3.1、顺序文件

  • 文件中的记录一个接着一个地顺序排列,记录通常是定长地,可以顺序存储或以链表形式存储,在访问时需要顺序搜索文件。顺序文件有两种结构:串结构,记录之间的顺序与关键字无关,通常由存入时间的先后排列记录;第二种是顺序结构,文件中地所有记录按关键字顺序排列。
  • 顺序文件的最佳应用场合是在对记录进行批量存取时,即每次要读或写一大批记录时,顺序文件的存取效率是所有逻辑文件中最高地;也只有顺序文件才能在磁带上有效工作。顺序文件的缺点就是对查找、修改、增加或删除单条记录的操作比较困难
  • 为了解决顺序文件增删单条记录,可以为顺序文件配置一个运行记录文件(Log File),或叫做事务文件(Transaction File),把试图增加、删除或修改的信息记录于其中,规定每隔一定时间,如 3 小时,将运行记录文件与原来的主文件加以合并,产生一个按关键字排序的新文件。
    3.2、索引文件
  • 如图所示,对于定长记录的文件,要查找第 I 条记录,可直接根据公式:
  • 找到第 I 条记录相对于第 1 条记录的地址。但是,对于可变长记录的文件,要查找第 n 条记录,必须顺序地查找前 n-1 条记录,从而获得相应记录地长度 L,进而按下面地公式:
  • 注意:假定每条记录前用一个字节指明该记录的长度
  • 变长记录文件只能顺序查找,系统开销大。为此,可以建立一张索引表以加快检索速度,索引表本身是定长记录的顺序文件。在记录很多或访问要求高的文件中,需要引入索引以提供有效的访问。实际上,通过索引可以成百上千倍地提高访问速度。

3.3、索引顺序文件

  • 索引顺序文件是顺序和索引两种组织形式的结合。索引顺序文件将顺序文件中的所有记录分为若干组,为顺序文件建立一张索引表,在索引表中每个组的第一条记录建立一个索引项,索引项中含有该记录的关键字和指向该记录的指针。
  • 如图所示,主文件包含姓名和其他数据,姓名为关键字,索引表中为每个组的第一条记录的关键字值,用指针指向主文件中该记录的起始位置。索引表只包含关键字和指针两个数据项,因此姓名关键字递增排列。主文件中记录分组排列,同一个组中的关键字可以无序,但组与组之间的关键字必须有序。
    查找一条记录时,首先通过索引表找到其所在的组,然后在改组中顺序查找。
  • 对于有 N 条记录的顺序文件,查找某关键字值的记录时,平均需要查找 N/2 次。在索引顺序文件中,设 N 条记录分为 N^(1/2) 组,索引表有 N^(1/2) 个表项,每组有 N^(1/2) 条记录,在查找某个关键字值的记录时,先顺序查找索引表,需要 N^(1/2)/2 次,然后再在主文件中对应的组中顺序查找,也需要 N^(1/2)/2 次,故共查找 N^(1/2) 次。显然,索引文件和索引顺序文件提高了存取的速度,但需要更多的存储空间,因为索引文件也是需要空间的。当记录非常多时,可采取多级索引。

3.4、直接文件和哈希文件

1)直接文件

  • 采用前几种文件结构对记录进行存取时,都必须利用给定的记录键值,先对线性表或链表进行检索,以找到指定记录的物理地址。而直接文件,则可根据给定的记录键值,直接获得指定记录的物理地址。换言之,记录键值本身就决定了记录的物理地址
  • 这种由记录键值到记录物理地址的转换成为键值转换(Key to address transformation)

2)哈希文件

  • 哈希文件又叫散列文件,是目前最为广泛的一种直接文件。利用Hash 函数即散列函数,可将记录键值转换为相应记录的地址。

  • 为了能实现文件存储空间的动态分配,通常由 Hash 函数所求得的并非是相应记录的地址,而是只想一目录表相应表目的指针,该表目的内容指向相应记录所在的物理块。

  • 如上图,若令 K 为记录键值,用 A 作为通过 Hash 函数 H 的转换所形成的该记录在目录表中对应表目的位置,则有关系 A=H(K)。

  • 通常, Hash 函数作为标准函数存于系统中,共存取文件时使用。

  • Hash 文件具有很高的存取速度,但是会引起冲突,即不同关键字的散列函数值相同

  • 有结构文件逻辑上的组织,是在为文件中查找数据服务的:顺序查找、索引查找、索引顺序查找和哈希查找

四、目录管理

  • 与文件管理系统和文件集合相关联的是文件目录,文件目录也是一种数据结构,包好有关文件的属性、位置和所有权等信息,这些信息主要由操作系统进行管理。
  • 对目录管理的基本要求:
  • 从用户的角度看,目录在用户所需要的文件名和文件之间提供一种映射,所以目录管理要实现“按名存取”;目录存取的效率直接影响到系统的性能,所以要提供对目录的检索速度;在共享系统中,目录还需要提供用于控制访问文件的信息;此外,文件允许重名也是用户的合理和必然要求。
  • 目录管理通过树形结构来解决和实现。目录管理实际上是文件”外部“的逻辑结构的相关问题。

1、文件控制块

  • 与进程管理一样,为实现目录管理,操作系统中引入了文件控制块。
  • 文件控制块是一种数据结构,用于存放控制文件需要的各种信息,以实现“按名存取”FCB 的有序集合称为文件目录,一个 FCB 就是一个文件目录项。为了创建一个新文件,系统将分配一个 FCB 并存放在文件目录中,成为目录项。
    FCB 主要包含以下信息:
    • 基本信息:文件名、文件的物理位置、文件的逻辑结构、文件的物理结构等。
    • 存取控制信息:文件存取权限等。
    • 使用信息:文件建立时间、修改时间等。
    以 MS-DOS 中的 FCB 为例,FCB 结构如下:

2、索引节点

  • 检索目录文件只需文件名,仅当找到一个目录项时才需要从该目录项读出文件的物理地址,因此例如 UNIX 系统采用了如下文件名和文件描述信息分开的方法
  • 文件描述信息单独形成一个称为索引节点的数据结构,简称 i 节点。文件目录中的每个目录项仅由文件名和指向该文件所对应的 i节点的指针构成。
  • 举例说明使用索引节点的好处:
  • 假如一个 FCB 为 64B,一个盘块大小为 1KB,则一个盘块可存放 16 个 FCB;而 UNIX 系统中一个目录项仅占 16B——14B 文件名和 2B i节点指针,则原来 1KB 的盘块可存放 64 个目录项,这可以令查找文件时的平均启动磁盘次数减少为原来的 1/4,节省了系统开销。

2.1、磁盘索引节点

  • 存放在磁盘上的索引节点称为磁盘索引节点,UNIX 中每个文件都有一个唯一的磁盘索引节点,主要包括以下几方面:
    • 文件标识符:拥有该文件的个人或小组的标识符
    • 文件类型:包括普通文件、目录文件和特别文件
    • 文件存取权限:各类用户对该文件的存取权限
    • 文件物理地址:每一个索引节点中含有 13 个地址项,即 iaddr(0)~iaddr(12),它们直接或间接方式给出数据文件所在的盘块的编号。
    • 文件长度,以字节为单位
    • 文件连接计数:在文件系统中所有指向该文件的文件名的指针计数
    • 文件存取时间:该文件最近被进程存取的时间、最近被修改的时间及索引节点最近被修改的时间。

2.2、内存索引节点

  • 存放在内存中的索引节点就称为内存索引节点。当文件被打开时,要将磁盘索引节点复制到内存的索引节点中,便于以后使用。
    内存索引节点增加了以下内容:
    • 索引节点编号:用于标识内存索引节点。
    • 状态:指示 i节点是否被上锁或被修改。
    • 访问计数:每当有一进程访问此 i节点时,计数加 1,访问结束减 1.
    • 逻辑设备号:文件所属文件系统的逻辑设备号。
    • 链接指针:设置分别指向空闲链表和散列队列的指针。

3、目录结构

  • 在目录这个层次上,用户常有的操作包括:
    1)搜索:搜索目录以找到目标文件对应的目录项,从而快速使用文件。
    2)创建和删除:文件的创建和删除,目录中也要进行对应的目录项的新建和删除。
    3)显示和修改:用户可以请求显示目录的内容,目录相对应文件的属性,当文件的属性发生变化时,目录项也要做出相应的修改。
  • 为了便于完成这些操作,目录就需要一定的组织结构,常用的目录结构由单级目录结构、两级目录结构和多级目录结构等。

3.1、单级目录结构

  • 整个文件系统只建立一张目录表,每个文件只占一个目录项,目录项由文件名、文件扩展名、文件类型、文件物理地址以及文件属性和一个状态位,状态位用于表明目录项是否空闲。

    • 访问文件时,先按文件名在该目录中查找到相应的 FCB,经合法性检查后执行相应的操作。
    • 新建文件时,必须先检索所有目录项中以确保没有“重名”的情况,然后再该目录中增设一项,把 FCB 的信息保存在该项中。
    • 删除文件时,先从该目录中找到该文件对应的目录项,回收该文件所占用的存储空间,然后清楚该目录项。
    单级目录结构实现了“按名存取”,但查找速度缓慢、文件不许重名、不便于文件共享、不适用于多用户操作系统。

3.2、两级目录结构

  • 将文件目录分为主文件目录(Master File Directory,MFD)用户文件目录(User File Directory,UFD)。主文件目录中,每个用户目录文件占有一个目录项,其目录项包含用户名和指向该用户目录文件的指针。用户文件目录则有同个用户的所有文件的文件控制块组成。
  • 当某用户欲对其文件进行访问时,只需搜索用户对应的 UFD,既解决了不同用户的“重名”问题,有一定程度上保证了文件的安全,因为在目录上可以实现访问限制。但是两级目录结构缺乏灵活性,不能对文件分类

3.3、多级目录结构

  • 将两级目录的层次关系加以推广形成多级目录结构,多级目录结构通常是树型目录结构:主目录称为根目录,具体的文件就是叶子,其他目录作为树的节点。
  • 用户访问某个文件时,用文件的路径标识文件,文件路径为字符串,由根目录到文件所在目录的所有目录名与文件名用分隔符“/”连接而成,例如:“D:/user/document/test.txt”。从根目录出发的路径称为绝对路径。当层次较多时,每次都从根目录出发进行查询显然浪费时间,于是加入了当前目录,进程对各文件的访问都是相对于当前目录进行的。当用户访问某个文件时,使用相对路径标识文件,相对路径从当前目录出发到所找文件通路上所有目录名与数据文件名由分隔符“/”连接而成,例如:“./user/web/page.html”,其中的“.”就表示当前目录。
    每个用户都有自己的“当前目录”,也就是用户目录。操作系统提供一条专门的系统调用,供用户随时改变“当前目录”。例如,在 Windows 系统中,当我们启动 CMD 窗口时,所在的目录就是用户目录,然后可以用命令 “cd” 来改变当前的目录位置。

3.4、无环图目录结构

  • 树形目录便于实现文件分类,但不便于实现文件共享,为此在树形目录结构的基础上增加了一些指向同一节点的有向边,使整个目录成为一个有向无环图。
  • 该结构为每个共享节点设置一个共享计数器,每当图中增加对该节点的共享链时,计数器加一;每当用户提出删除该节点时,计数器减一;仅当共享计数器为 0 时,才真正删除该节点,否则只删除请求用户的共享链
  • 共享文件不同于文件复制,文件复制是形成一个副本,各自独立,即一个文件的修改不会影响另一个文件,而共享文件只有一个文件,任何改动都会被其他用户所看到。
  • 无环图目录结构方便地实现了文件的共享,但是使得系统的管理变得复杂

五、文件共享

  • 文件共享允许多个用户或进程共享同一份文件,而系统只需保留该文件的一个副本。若系统无文件共享功能,意味着凡是需要使用该文件的用户,都须各自备有此文件的副本,浪费存储空间。现在的文件共享已经发展到通过网络与世界上各个终端设备进行共享,例如分布式文件系统、远程文件系统、分布式信息系统等,这些系统允许多个客户通过C/S模型共享网络中的服务器文件。
  • 现代常用的两种文件共享方法有基于索引节点的共享方式和利用符号链实现文件共享。

1、基于索引节点的共享方式

  • 此方式又称为硬链接
  • 在树型结构目录中,当有多个用户要共享一个子目录或文件时,必须将共享文件或子目录链接到多个用户的目录中,才能方便地找到该文件
  • 此时该文件系统的目录结构已不再是树型结构,而是个有向非循环图(Directed Acyclic Graph,DAG)
  • 此方式下,文件属性信息存放在索引节点中,文件目录中只设置文件名及指向索引节点的指针,而索引节点同样设有连接计数器 count,用于标识链接到本索引节点上的用户目录项的数目,同样当 count=0 时系统才会执行文件删除操作,即便是文件创建者即文件所有者,在文件被共享时请求文件删除,系统也只是进行计数器减一,因为若是直接删除文件将导致其他用户的指针悬空,导致错误。

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

  • 此方式又称为软链接

  • 为了能让用户(A)能共享另一个用户(B)的文件(F),系统创建一个 LINK 类型的同名新文件,并将文件F写入用户A的目录中,以实现用户 A 的目录与文件的链接,而新文件中只包含被链接文件(F)的路径名。这样的链接方法就称为符号链接

  • 新文件中的路径名只被视为符号链,当用户A访问被链接的文件时且正要读 LINK 类型新文件时,此要求将被 OS 拦截,OS 根据新文件中的路径名去读该文件,便实现了用户 A 对文件 F 的共享

  • 此方式实现共享文件时,只有文件拥有者才拥有指向其索引节点的指针,而其他共享该文件的用户只有该文件的路径名,这样便可以避免文件拥有者删除文件后出现其他用户指针悬空的情况。此方式下,文件拥有者删除文件时,其他用户再试图通过符号链访问文件系统会因为找不到文件而访问失败,于是再将符号链删除,此时不会产生任何影响,这也是大多数正常情况下发送的结果。但是,如果在其他用户使用符号链访问被删除文件之前,又有人在相同路径下创建了同名文件,则此时符号链仍有效,但访问的文件已经改变,这样会导致一些意想不到的错误。

  • 此外,符号链方式还有一个显著问题:用户访问共享文件时,需要根据文件名逐个查找目录直到找到该文件的索引节点,因此,每次访问都可能多次读盘,致使访问文件开销变大且增加了启动磁盘的频率;符号链的索引节点也是要耗费磁盘空间

  • 符号链有一个很大的优点就是:能够用于链接计算机网络中任何一台计算机中的文件,在提供该文件所在的机器的网络地址以及文件在机器中的文件路径的情况下

  • 两种连接方式:每个共享文件都有几个文件名,即每增加一条链接便会增加一个文件名,实质上是每个用户用自己的路径名去访问共享文件。于是乎,当我们遍历整个文件系时,将出现多次遍历到该文件的情况。
    硬链接和软连接都属于静态共享方法,此外还有动态共享——允许两个进程同时对同一个文件进行操作。
    文件共享需“软”“硬”兼施。硬链接将多个指针指向一个索引节点,保证只要还有一个指针指向索引节点,索引节点就不能删除;软链接将共享文件的路径记录下来,当要访问时,根据路径寻找文件。

  • 硬链接查找速度优于软链接

五、文件保护

  • 文件系统必须提供一套文件保护机制,避免在文件共享时导致文件破坏或未经核准的用户修改文件,因此需要对文件的操作进行权限检查。
  • 文件保护通过口令保护、加密保护和访问控制等方式实现。其中,口令保护和加密保护是为了防止用户文件被他人存取或窃取,而访问控制用于控制用户对文件的访问方式

1、访问类型

  • 可加以控制的访问类型主要有读文件、写文件、执行文件(exe等可执行文件)、文件尾部添加信息和删除文件,以及列出文件名和文件属性、重命名、复制和编辑文件
  • 高层的功能通过调用底层的功能进行实现,保护只在底层提供。例如,复制文件可通过一系列的读请求来完成,也就是说拥有读访问权限的用户也就拥有复制和打印的权限。

2、访问控制

2.1、访问控制列表

  • 访问控制的常用方法就是根据用户身份进行控制,通过为每个文件和目录增加一个访问控制列表(Access-Control List,ACL),列表中规定每个用户名及其所允许的访问类型;此种访问控制列表称为非精简的访问控制列表,虽然可以使用复杂的访问方法,但是长度无法预计并且可能导致复杂的空间管理。为了解决普通方法的局限,出现了一种精简的访问控制列表。
  • 精简的访问控制列表采用拥有者、组和其他三种用户类型;拥有者就是指文件创建者,和拥有者同个用户组的往往具有相类似的权限,而其他用户则权限较少。
  • 此种情况下,创建文件时,系统会将创建者用户名及其所属组名列在文件的 FCB 中。创建者访问文件按照拥有者的权限,与创建者同组的用户按照同组权限访问,否则就按照其他用户权限访问。

2.2、口令和密码

  • 口令是指用户在建立一个文件时提供一个口令,系统为其建立 FCB 时附上相应对的口令,同时告诉允许共享该文件的其他用户。用户请求访问时必须提供相应的口令。此方法的时间和空间开销都不大,但是口令直接存在系统内部,不够安全。
  • 密码是指对文件进行加密,文件访问时需要使用密钥。这种方法保密性强,节省了存储空间,但是编码和译码需要花费一定的时间。
  • 口令和密码都是防止用户文件被他人存取和窃取,并没有控制用户对文件的访问类型。
  • 注意:
    1)现代操作系统常用的文件保护方法是,将控制列表与用户、组和其他成员访问控制方案一起组合使用
    2)对于多级目录结构而言,不仅需要保护单个文件,而且还需要保护子目录内的文件,因此需要提高目录保护机制——目录操作与文件操作不一样,故而需要不同的保护机制

上一篇

计算机操作系统学习笔记——文件管理之文件系统基础相关推荐

  1. 计算机操作系统学习笔记 第一章、操作系统概论

    文章目录 1 操作系统的基本概念 1.1 操作系统的概念 1.2 操作系统的特征 1.3 操作系统的目标和功能 1.4 综合应用题 2 操作系统发展历程 2.1 手工操作阶段(此阶段无操作系统) 2. ...

  2. 计算机操作系统——学习笔记(下)

    文章目录 第六章 文件管理 文件系统模型 文件逻辑结构的类型 外存分配方式 目录管理 文件存储空间的管理 文件共享与文件保护 数据一致性 第七章 操作系统接口 第八章 网络操作系统 计算机网络概述 网 ...

  3. web.config文件访问物理路径_计算机操作系统学习笔记(五):文件管理

    五.设备管理 -- 文件管理 文件和进程是 OS 引入的两个重要概念. 5.1 文件的概念 5.1.1 文件概述 概念 文件是具有符号名的,在逻辑上具有完整意义的一组相关信息项的序列 文件(docum ...

  4. 怎样查找共享文件_计算机操作系统学习笔记(五):文件管理

    五.设备管理 -- 文件管理 文件和进程是 OS 引入的两个重要概念. 5.1 文件的概念 5.1.1 文件概述 概念 文件是具有符号名的,在逻辑上具有完整意义的一组相关信息项的序列 文件(docum ...

  5. 计算机操作系统——学习笔记(上)

    文章目录 第一章 操作系统引论 1. 目标 2. 作用 3.发展过程 4.基本特征 5.主要功能 6.系统调用 7.OS结构设计 8.中断分类 第二章 进程管理 进程的基本概念 进程控制 进程同步 进 ...

  6. 计算机操作系统 学习笔记(第四版 汤小丹)(上)

    第一章-操作系统概述 操作系统基本概念 操作系统(Operation System),简称OS,是管理计算机『硬件』与『软件』资源的计算机程序.它负责计算机的全部软.硬资源的分配.调度工作,控制和协调 ...

  7. 计算机操作系统学习笔记----进程管理

    进程与线程 进程是资源分配的基本单位,也是独立运行的基本单位.进程是资源分配的基本单位,这是与线程的主要区别. 程序的顺序执行具有如下特征: 顺序性:处理器的操作严格按照程序所规定的顺序执行. 封闭性 ...

  8. 计算机操作系统学习笔记 第二章、进程与线程

    文章目录 1 进程和线程 1.1 进程的概念和特征 1.1.1 进程的概念 1.1.2 进程的特征 1.2 进程的状态与转换 1.3 进程的组织 1.4 进程控制 1.5 进程通信 1.5.1 共享存 ...

  9. ”计算机操作系统“学习笔记1

    1.在计算机上配置操作系统的主要目标 方便性.有效性.可扩充性.开放性. 2.操作系统的作用 OS作为用户与计算机硬件系统之间的接口: OS作为计算机系统资源的管理者: 资源:处理机.存储器.I/O设 ...

最新文章

  1. cv python 找不同_python – 在Gridline for GridSearchCV中替换不同的模型
  2. Cloudera Manager 5 和 CDH5 本地(离线)安装指南(Hadoop集群搭建)
  3. Handlebars partials 隐藏的力量
  4. 华为平板matepad支持鸿蒙2.0,首款鸿蒙OS 2.0平板,华为正式公布Matepad Pro2,搭载麒麟9000...
  5. java什么内部类_Java的内部类学习
  6. 关于VS2010帮助文档的使用和VC6.0在Win7 64位下的使用
  7. git git 查看远程库_如何从Git远程存储库中提取
  8. 钩子怎么画_画男生校服有什么技巧?该注意什么?
  9. 08.CXF发布WebService(Java项目)
  10. 如何解决SQL挂起问题
  11. Directx使用基础
  12. AdBlock插件自定义拦截规则
  13. [apk破解]AirPin,无告用户书,无升级提示
  14. 51单片机的超声波测距仪制作教程
  15. dorado7.x form提交数据报错
  16. 肖飒:区块链应用创业的法律边界及案例分析 | 清华x-lab公开课
  17. 【AAD Connect】01:AAD Connect把本地AD账户同步到Office365(AD域账户迁移)
  18. 夜天之书 #68 开源码力圆桌文字稿
  19. java中如何将26个字母依次输出_Java用for循环依次打印26个英文字母,每行十个字母的代码怎么打?...
  20. 开发中常见的一些插件收藏

热门文章

  1. 计算机专业运动会班级介绍,计算机学院8班开展“班级趣味运动会”
  2. Overriding managed version XX for YY
  3. 360一键wifi共享 v1.0 绿色免费版
  4. 小米手机无法安装Fiddler证书问题
  5. 这些手机应用陪诸位“小主”过女人节想必也是极好的
  6. 人工智能生态环境预测_人工智能在生态领域的应用研究
  7. 设计模式之美---常用创建型模式
  8. Progress语法
  9. 微信小程序页面跳转url传参,对象数据过长问题
  10. k8s搭建部署(超详细)