操作系统 第七章 文件管理

第七章 文件管理

一、文件和文件系统

1.1 数据项、记录和文件

1. 数据项

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

  1. 基本数据项:是用于描述一个对象的某种属性的字符集,是数据组织中可以命名的最小逻辑数据单位,又称字段
  2. 组合数据项:有若干个基本数据项组成,简称组项

基本数据项除了数据名外还要有数据类型

数据项的名字和类型两者共同定义了一个数据项的“型”

表征一个实体在数据项上的数据则称为“值”

2. 记录

记录是一组相关数据项的集合,用于描述一个对象在某方面的属性

众多记录中,为了能唯一地标识一个记录,需要确定出一个或几个数据项,称它们的集合为“关键字”

通常只用一个数据项作为关键字

3. 文件

文件是由创建者定义的、具有文件名的一组相关元素的集合,可分为有结构文件和无结构文件两种

有结构文件中,文件由若干相关记录组成,无结构文件被看成是一个字符流

文件属性包括

  1. 文件类型
  2. 文件长度
  3. 文件的物理位置
  4. 文件的建立时间

1.2 文件名和类型

1. 文件名和拓展名

  1. 文件名:不同系统之间文件名规定不同。有的有长度限制,有的不允许空格,有的不区分大小写
  2. 拓展名:拓展名是添加在文件名后的若干附加字符,又称后缀名,用于指示文件类型。

2. 文件类型

常用分类方法

  1. 按用途分类
    1. 系统文件:允许用户调用但不允许读或修改;有的系统文件不直接对用户开放
    2. 用户文件
    3. 库文件:允许用户调用但不允许修改
  2. 按文件中数据的形式分类
    1. 源文件:源程序和数据构成的文件
    2. 目标文件:源程序编译后尚未链接目标代码的文件,后缀 .obj
    3. 可执行文件:编译后链接后的文件,后缀 .exe
  3. 按存取控制属性分类
    1. 只执行文件
    2. 只读文件
    3. 读写文件
  4. 按组织形式和处理方式分类
    1. 普通文件:由 ASCII 码或二进制码组成的字符文件
    2. 目录文件:由文件目录形成的文件
    3. 特殊文件:特指系统中各类 I/O 设备

1.3 文件系统的层次结构

分为三个层次

  • 最底层是对象及其属性
  • 中间层是对对象进行操纵和管理的软件集合
  • 最高层是文件系统提供给用户的接口

1. 对象及其属性

文件系统管理的对象为

  1. 文件
  2. 目录
  3. 磁盘存储空间

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

  1. 对文件存储空间的管理
  2. 对文件目录的管理
  3. 用于将文件的逻辑地址转换为物理地址的机制
  4. 对文件读和写的管理
  5. 对文件的共享和保护功能

通常把文件系统有关的软件分为四层

  1. I/O 控制层:磁盘驱动程序等组成,也称设备驱动程序层
  2. 基本文件系统层:用于处理内存与磁盘之间数据块的交换
  3. 基本 I/O 管理程序:用于完成与磁盘 I/O 有关的事务
  4. 逻辑文件系统:用于处理和记录文件相关的操作

3. 文件系统的接口

  1. 命令接口:作为用户与文件系统直接交互的接口,可通过键盘终端键入命令
  2. 程序接口:作为用户程序与文件系统的接口,可通过系统调用取得文件系统的服务

1.4 文件操作

1. 最基本的文件操作

  1. 创建文件
  2. 删除文件
  3. 读文件
  4. 写文件
  5. 设置文件的读/写位置

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

避免多次重复检索目录,大多数 OS 中引入了“打开(open)”的系统调用

所谓打开,是指系统将指名文件的属性(包括文件在外存的物理位置)从外存拷贝到内从打开文件表的一个表目中,并将表目编号返回给用户。

当用户不需要对文件实施相应的操作时,可以用“关闭(close)”关闭文件。

3. 其他文件操作

  • 对文件属性的操作,即允许用户直接设置和获得文件的属性,改变文件名、文件主、文件访问权、查询文件状态(文件类型、大小、拥有者、访问权)等

  • 有关目录的操作:创建目录、删除目录、改变当前目录等

  • 实现文件共享的系统调用

  • 对文件系统进行操作的系统调用

二、文件的逻辑结构

所有文件都存在两种形式的文件结构

  1. 文件的逻辑结构:从用户观点触发观察到的文件形式,即文件时由一系列的逻辑记录组成的,是用户可以直接处理的数据及其结构,独立于文件的物理特性,又称文件组织
  2. 文件的物理结构:又称文件的存储结构,指系统将文件存储在外存上所形成的一种存储组成形式,对用户不可见。

2.1 文件逻辑结构的类型

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

  1. 有结构文件

    在记录式文件中,每个记录都用于描述时提及重大一个实体,个记录有相同或不同数目的数据项

    1. 定长记录:文件中所有记录的长度相同,能有效提高检索记录的速度和效率,方便对文件处理和修改,广泛用于数据处理
    2. 变长记录:各记录的长度不同。可能是一个记录中所包含的数据项数目不相同如书的作者、论文的关键字;也可能是数据项本身长度不定。对可变长记录的检索速度满,不便修改,广泛用于商业领域
  2. 无结构文件

    流式文件,长度以字节为单位,可以看成一个记录一个字节的记录式文件

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

  1. 顺序文件:由一系列纪录按某种顺序排列所形成的文件,记录可定长或变长
  2. 索引文件:为可变长记录建立一张索引表,为每个记录设置一个表项提高对记录的检索速度
  3. 顺序索引文件:前两者相结合的产物,为每个文件建立索引表时不是为一个记录一个索引表项,而是一组记录的第一个建立索引表项

2.2 顺序文件

1. 顺序文件的排列方式

  1. 串结构
  2. 顺序结构:由用户指定一个字段为关键字

2. 顺序文件的优缺点

最佳应用场合是对文件中的记录进行批量存取时

对于顺序存储设备(磁带)也只有顺序文件能被存储并有效工作

交互应用的场合效率差

增删记录比较困难,解决方法是配置一个运行记录文件或事务文件,每隔一段时间将其与原来的主文件合并

2.3 记录寻址

1. 隐式寻址方式

对于定长记录的顺序文件,直接读完后 写也一样 变长记录加上 即可, 是刚读完/写完的记录长度

2. 显式寻址方式

用于对定长记录的文件实现直接或随机访问

  1. 通过文件中记录的位置

对于可变长记录,假定每个记录前用一字节标记该记录长度,则

  1. 利用关键字:按照用户指定的关键字查找记录

2.4 索引文件

1. 按关键字建立索引

索引表按关键字排序,本身也是一个订场记录的顺序文件

可以用折半查找法查找

2. 具有多个索引表的索引文件

可以为不同的属性都配置一张索引表

索引文件的主要优点是将一个需要顺序查找的文件改造成一个可随机查找的文件,极大提高了文件的查找速度

只是需要配置一张索引表,增加了存储开销

2.5 索引顺序文件

1. 索引顺序文件的特征

索引顺序文件是对顺序文件的一中改进

它增加了文件索引表

增加了溢出文件,用来记录新增加的、删除的和修改的记录

2. 一级索引文件

首先将变长记录顺序文件中的所有记录分为若干组,然后为顺序文件建立一张索引表,每组第一个建立一个索引项

3. 两级索引顺序文件

对一个非常大的文件,可以为顺序文件设置多级索引,形成两级索引表

2.6 直接文件和哈希文件

1. 直接文件

采用前几种文件结构对记录进行存取都需根据给定的记录键值对线性表或链表进行检索

对于直接文件可以根据给定关键字直接获得指定记录的物理地址

2. 哈希文件

是目前应用最为广泛的直接文件,利用哈希函数将关键字转换为相应记录的地址

尉氏县动态分配,指向的是某一目录表响应表目的指针

三、文件目录

目录管理的要求为

  1. 实现“按名存取”:是目录管理中最基本的功能,也是文件系统提供最基本的服务
  2. 提高对目录的检索速度
  3. 文件共享:多用户系统中允许多用户共享一个文件
  4. 允许文件重名

3.1 文件控制块和索引节点

1. 文件控制块 FCB

  1. 基本信息

    1. 文件名
    2. 文件物理位置:存放文件的设备名、文件起始盘块号、盘块数或字节数的文件长度
    3. 文件逻辑结构:流式文件还是记录式文件、记录数,定长还是变长等
    4. 文件的物理结构:是顺序文件,链接式文件还是索引文件
  2. 存取控制信息类

    文件主的存取权限,核准用户的存取权限,一般用户的存取权限

  3. 使用信息类

    1. 建立日期和事件
    2. 上次修改日期时间
    3. 当前使用信息
      1. 已打开该文件进程数
      2. 是否被锁住
      3. 是否在内存中被修改

2. 索引节点

  1. 索引节点的引入

    文件目录通常存放在磁盘上,在检索目录文件中只用到了文件名,其他信息不需调入内存

    所以在 UNIX 系统,将文件描述信息单独形成一个称为索引节点的数据结构,简称为 i 结点

    文件目录项中每个目录项仅由文件名和指向该文件所对应的 i 结点指针构成

  2. 磁盘索引节点

    1. 文件主标识符
    2. 文件类型
    3. 文件存取权限
    4. 文件物理地址:iaddr(0)~iaddr(12) 以直接或间接方式给出数据文件所在盘块编号
    5. 文件长度
    6. 文件连接级数
    7. 文件存取时间
  3. 内存索引结点

    1. 索引节点编号
    2. 状态
    3. 访问 级数
    4. 文件所属文件系统的逻辑设备号
    5. 链接指针

3.2 简单的文件目录

1. 单机文件目录

优点是简单,但只能实现第一点按名存取

缺点为

  1. 查找速度满
  2. 不允许重名
  3. 不便于文件共享

2. 两级文件目录

主文件目录中,每个用户目录文件占有一个目录项,包括用户名和指向该用户目录文件的指针

  1. 提高了检索目录的速度
  2. 在不同的用户目录中可以使用相同文件名
  3. 不同用户可以使用不同的文件名访问系统中同一个共享文件

3.3 树形结构目录

1. 树形目录

最通用且实用

2. 路径名和当前目录

  1. 路径名

    在树形结构目录中,从根目录到任何数据文件都只有一条唯一的通路

  2. 当前目录

    可为每个进程设置一个“当前目录”又称“工作目录”,进程对各文件的访问都只需从当前目录开始

较两级目录而言,树形结构目录

  • 查询速度更快
  • 层次结构更清晰
  • 能更有效进行文件的管理和保护

3. 目录操作

  1. 创建目录
  2. 删除目录
    1. 不删除非空目录
    2. 删除非空目录及其下所有子文件即目录
  3. 改变目录
  4. 移动目录
  5. 链接操作
  6. 查找

3.4 目录查询级数

1. 线性检索法

2. 哈希法

对于使用了模式匹配通配符“*”“?”等的文件名只能使用线性查找法

四、文件共享

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

1. 有向无环图 DAG

树形结构目录不适合文件共享

允许一个文件有多个父目录则可允许用户以对称的方式实现文件共享

2. 利用索引节点

文件的物理地址即其他属性不放在目录项中而是在索引节点中

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

1. 符号链接的基本思量

允许一个文件由多个父目录,但其中仅有一个作为主(属主)父目录,其他的几个父目录通过符号链接方式与之相链接

好处是属主结构仍是简单树

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

由系统创建一个 LINK 类型的新文件,只包含路径名

3. 利用符号链接的优点

  1. 只有文件主才拥有指向其索引节点的指针,其他用户只用有该文件的路径名
  2. 不会发生在文件主删除共享文件后留下悬空指针的情况

4. 存在的问题

每次访问共享文件时都要多次度盘

还要为每个共享用户建立一条符号链,消耗磁盘空间

五、文件保护

影响文件安全性的因素有

  1. 人为因素
  2. 系统因素
  3. 自然因素

三方面的措施

  1. 存取控制机制
  2. 系统容错技术
  3. 后备系统

5.1 保护域

1. 访问权

把一个进程能对某对象进程操作的权利称为访问权

每个访问权可以用有序对(对象名,权集)表示,如

2. 保护域

保护域简称域,是进程对一组对象访问权的集合,进程只能在指定域内执行操作

3. 进程和域的静态关系

进程和域之间可以一一对应,此时在进程的整个生命周期中可用资源固定,这种域称为“静态域”

4. 进程和域的动态联系

进程和域也可以一对多,即一个阶段对应一个域,不同阶段的权限集不同

这称为动态联系方式,这种方式中应增设保护域切换功能

5.2 访问矩阵

1. 基本的访问矩阵

F1 F2 F3 F4 F5 F6 Printer 1 Printer 2
D1 R R,W
D2 R R,W,E R,W W
D3 R,W,E W W

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

即存在 时才允许进程从域 切换到域

F1 F2 F3 F4 F5 F6 Printer 1 Printer 2 域D1 域D2 域D3
D1 R R,W S
D2 R R,W,E R,W W S
D3 R,W,E W W

5.3 访问矩阵的修改

1. 拷贝权

域中运行的进程能将其对对象 的访问权复制成在任何域中对同一对象的实现

2. 所有权

如果在 中包含所有访问权(O),则在 上运行的进程可以增删其他任何域中的进程对 的访问权

3. 控制权

控制权用于改变矩阵中某一行的各项访问权,即 中包含控制权,则 中运行的进程可以增删 中运行的进程对个对象的访问权

5.4 访问矩阵的实现

1. 访问控制表

由有序对(域,权集)组成的

由于矩阵空项远多于非空项,能显著提高查找速度

不少系统当对象是文件时边吧访问控制表放在该文件的文件控制表/索引节点中

2. 访问权限表

每一行可构成一张访问权限表,即一个域可对哪些对象执行的操作所构成的表

类型 权利 对象
文件 R-- 指向文件 3 的指针
打印机 -W- 指向打印机 1 的指针