天天看点

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

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

  • ​​前言​​
  • ​​推荐​​
  • ​​第七章 文件管理​​
  • ​​7.1 文件和文件系统​​
  • ​​7.1.1 数据项、记录和文件​​
  • ​​7.1.2 文件名和类型​​
  • ​​7.1.3 文件系统的层次结构​​
  • ​​7.1.4 文件操作​​
  • ​​7.2 文件的逻辑结构​​
  • ​​7.2.1 文件逻辑结构的类型​​
  • ​​7.2.2 顺序文件​​
  • ​​7.2.3 记录寻址​​
  • ​​7.2.4 索引文件​​
  • ​​7.2.5 索引顺序文件​​
  • ​​7.2.6 直接文件和哈希文件​​
  • ​​7.3 文件目录​​
  • ​​7.3.1文件控制块和索引结点​​
  • ​​7.3.2 简单的 目录结构​​
  • ​​7.3.3 多级目录结构(树型目录)​​
  • ​​7.3.4 目录查询技术​​
  • ​​7.4 文件共享​​
  • ​​7.4.1 基于索引结点的共享方式​​
  • ​​7.4.2 利用符号链(Symbolic Link)实现文件共享​​
  • ​​7.5 文件保护​​
  • ​​最后​​

前言

以下内容源自计算机操作系统(第四版)

关于操作系统,

CSDN有很多的优秀博客。

在这里,

本文摘取其他博客内容,

并附上相关链接,

如有侵权,

联系删除,

仅供学习交流使用

第七章 文件管理

在操作系统中增加文件管理功能,专门管理在外存上的文件,并把对文件的存取、共享和保护等手段提供给用户。

7.1 文件和文件系统

文件系统的管理功能,是通过把它所管理的程序和数据组织成一系列文件的方法来实现的。

7.1.1 数据项、记录和文件

1. 数据项

有结构文件中, 数据项是最低级的数据组织形式。

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

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

2. 记录

有结构文件中, 一组相关的数据项组成记录, 若干条记录组成文件, 在各记录中能够唯一标识一个记录的数据项集合称为关键字(key), 通常用一个数据项作为关键字。

3. 文件

文件是具有文件名的若干(数目不定) 相关元素的集合, 它是文件系统中的最大数据单位; 可分为有结构文件和无结构文件; 有结构文件的元素是记录, 记录是有意义的数据项的集合, 无结构文件则是一个字符流, 称为流式文件。
        文件名: ASCII码和汉字组成, 支持文件扩展名
        文件属性: 文件类型、文件(当前)长度、
                          文件物理位置、文件建立时间      

7.1.2 文件名和类型

1. 文件名和扩展名

2.文件类型

为了提高系统管理文件的效率; 提高用户界面友好性, 对文件进行分类。

  1. 按文件性质和用途分类

    系统文件:由系统软件构成的文件

    用户文件:由用户产生的各种文件

    库文件 :标准子程序及常用的例程构成的文件

  2. 按信息保存期限分类

    临时文件;永久文件;档案文件

  3. 按文件中的数据形式分类

    源文件、目标文件、可执行文件、数据文件

  4. 按文件的存储控制属性分类

    只执行文件;只读文件;读写文件。

  5. 按文件的逻辑结构分类

    流式文件;记录式文件

  6. 按文件的物理结构分类

    顺序(连续)文件;链接文件;索引文件

  7. UNIX系统将文件分为三类

    普通文件(regular)

    包含的是用户信息,一般为ASCII或二进制文件

    目录文件(directory)

    管理文件系统的系统文件

    特殊文件(special file)设备文件(将外设看作文件)

    字符设备文件: 用于模仿串行I/O设备, 如终端,

    打印机, 网络等

    块设备文件: 模仿磁盘

    为了方便系统和用户了解文件的类型, 常把文件类型作为扩展名放在文件名的后面, 二者之间用"."隔开。

7.1.3 文件系统的层次结构

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

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

1.对象及其属性

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

3.文件系统的接口

7.1.4 文件操作

1. 最基本的文件操作

创建文件: 分配外存空间,建目录项填入各种属性

删除文件: 将该目录项置为空项, 释放外存空间

读文件写文件: 目录项中得文件在外存位置, 读写

截断文件: 将文件内容置空

设置文件读写位置: 设置文件读写指针的位置

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

“打开”(open)文件, 是系统将指明文件的属性(类型,外存物理位置等)从外存拷贝到内存打开文件表的一个表目中,并将该表目的编号(索引号)返回给用户。此后, 用户对文件的操作直接通过索引号进行, 避免了对文件的再次检索。

“关闭”(close)操作,将内存中的已修改的数据写到外存上, 并将对应表目从打开文件表中删除。

3. 其他文件操作

7.2 文件的逻辑结构

1)文件的逻辑结构。这是从用户观点出发所观察到的文件组织形式。

2)文件的物理结构,又称为文件的存储结构,这是指系统将文件存储在外存上所形成的存储组织形式,是用户不能看见的。

7.2.1 文件逻辑结构的类型

1.有结构文件(记录文件)
          文件是由若干个记录组成, 每条记录有其内部结构
       按记录长度分: 定长记录、变长记录
       按记录间的关系分: 顺序、索引、索引顺序
   2.无结构文件
        又称为流式文件,是元素长度为1的无结构字节流,如: 源程序,可执行文件, 库函数, C语言的数据文件等。在UNIX系统中所有的文件被看作流式文件。
        好处:提供很大的灵活性。      

7.2.2 顺序文件

1. 文件的逻辑排序
          串结构:各记录的逻辑顺序按存入的时间排序。
       有序结构:各记录的逻辑顺序按关键字排序。
 2. 对顺序文件的读/写操作
        顺序文件只能顺序读或顺序写,  可设置读/写指针Rptr和Wptr, 指向下一记录的逻辑地址。
        对定长记录:
            每当读完一条记录时执行: Rptr=Rptr+L
            每当写完一条记录时执行: Wptr=Wptr+L
        对变长记录:
            每当读完一条记录时执行: Rptr=Rptr+Li
            每当写完一条记录时执行: Wptr=Wptr+Li
 3. 优点: 批量存取效率高, 缺点: 查找增删低效不方便      

7.2.3 记录寻址

7.2.4 索引文件

对定长记录文件, 要查找第 i 个记录,可直接计算:
      Ai =A0 +i*L  (A0和Ai是第0和第i个记录的逻辑地址)
对变长记录文件, 要查找第 i 个记录,可直接计算: 
      Ai =A0 + i +ΣLi  (假定每个记录前用1字节存储长度)
要实现直接存取文件, 对定长记录用公式计算很方便, 但对变长记录却很困难; 为此可建立一张索引表。检索时,用折半查找索引表按其指针值指向的记录与给定的关键字比较查到为止。存储费用大。      
第七章 文件管理【操作系统】

7.2.5 索引顺序文件

对变长记录文件, 用索引表存储费用大,结合索引文件和顺序文件的优点, 构成索引顺序文件。所有记录逻辑上按关键字有序排列,并将记录分为若干组,索引表为每组的第一个记录建立一个索引表项, 检索时先根据索引表键值确定该记录在哪一组, 再按该表项指针指向的主文件中的位置顺序查找到所要的记录。如

如果某顺序文件的记录数为N, 则顺序检索平均查找N/2个记录。而对于索引顺序文件每组√N个记录,平均查找√N个记录; 效率大大提高。对于特大型文件可建立多级索引表。

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

7.2.6 直接文件和哈希文件

1.直接文件

根据给定的记录键值, 直接获得指定记录的物理地址, 这种由给定的记录键值到记录的物理地址的转换称为键值转换, 关键是用什么函数进行转换。

2. 哈希文件

用哈希函数(或称散列函数)进行键值转换, 为了能实现文件存储空间的动态分配, 通常由哈希函数求得的不是记录的地址, 而是指向目录表相应表项的指针, 表项的内容指向相应记录所在的物理块。如

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

7.3 文件目录

目录管理的基本要求:

实现"按名存取"

提高对目录的检索速度

允许文件共享

允许文件重名

7.3.1文件控制块和索引结点

1.文件控制块(FCB):

文件控制块(FCB)是操作系统为管理文件而设置的用于描述和控制文件的数据结构,存放了为管理文件所需的所有有关信息。

文件和FCB一一对应, FCB的有序集称为文件目录, 一个FCB 就是一个目录项, 为实现对文件目录的管理, 通常将文件目录以文件的形式保存在外存上,这个文件就叫目录文件。

文件控制块的内容:

1)基本信息:

文件名,扩展名,文件主名

文件物理地址: 存放设备名,起始盘块号,文件长度

文件逻辑结构:流式或记录文件, 定长或不定长

文件物理结构:顺序、链接式、索引文件

2)存取控制信息:

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

3)使用信息:

文件的建立日期, 最后修改日期, 最后访问日期, 当前使用信息(共享计数,是否被锁住,已被修改是否存盘)

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

2.索引结点(i结点)

(1)索引结点的引入

当目录中文件很多时,文件目录要占用大量的盘块, 查找目录时需要将这些盘块逐块调入内存, 将给定的文件名与目录中的文件名逐一比较;假如一个FCB为64B, 1KB的盘块只能存16个FCB,一个目录有640个FCB, 需占用40个盘块, 查找一个目录平均要启动磁盘20次。

检索目录时只用到了文件名, 如果将FCB中的文件名和描述信息分开存储, 就可以增加目录的每个盘块中的文件数,减少访盘次数,加快检索速度;UNIX系统中就采用这种方法, 将文件描述信息单独存放在索引结点中(简称i结点), 目录项仅由文件名和指向该文件对应的 i 结点的指针构成, UNIX的目录项仅占16B, 1KB的盘块能存64个目录项访盘次数降到原来的1/4。

(2) 磁盘索引结点

存放在磁盘上的索引结点,每个文件有唯一的一个

第七章 文件管理【操作系统】
文件类型:普通文件、目录文件、特殊文件
文件主:所有者和小组标识符
时间标记:文件最近被访问时间
                 文件最近被修改时间
                 i结点最近被修改时间
文件长度:字节长度
连接计数:指向该文件的指针计数
直接地址:10项直接盘块地址
间接地址:3中级别的索引块地址      

(3) 内存索引结点

存放在内存上的索引结点,文件打开时将磁盘索引结点拷贝到内存的索引结点中,并增加当前正使用的内容。

(1) 索引结点编号: 用来标识内存索引结点

(2) 状态: i结点是否上锁或被修改

(3) 访问计数:正在访问此 i结点的进程数

(4) 所属的逻辑设备号

(5) 链接指针: 指向空闲链表和散列队列的指针

7.3.2 简单的 目录结构

1.单级目录结构

为所有文件建立一个目录文件(组成一线性表)

优点: 简单,易实现

缺点: (1) 目录项太多时查找速度慢平均检索时间长

(2) 不允许重名, 限制了用户对文件的命名

(3) 不便于实现文件共享, 只适用于单用户环境

2. 二级目录结构

为改变一级目录文件目录命名冲突, 而改进, 可用不同文件名共享同一文件。

目录分为两级:一级称为主文件目录MFD, 给出用户名,用户子目录所在的物理位置;二级称为用户文件目录UFD(用户子目录), 给出该用户所有文件的FCB。

优点:提高了检索目录的速度,解决了文件的重名问题和文件共享问题,不同用户用不同文件名访问同一文件。

缺点:增加了系统空间开销

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

7.3.3 多级目录结构(树型目录)

目录结构: 大型文件系统通常采用三级或三级以上的目

录结构,构成树型目录,主目录称为根目录, 其它

目录均作为树的分支结点, 文件称为树叶。

路径名: 在树型目录结构,从根目录到各文件,用经历的

全部目录名和文件名表示唯一的路径名。

当前目录: 可为每个进程设置一个"当前目录", 进程对

文件的访问都相对于"当前目录"进行。

优点:

层次结构清晰,便于管理和保护,解决重名问题,文件共享问题,查找速度加快

缺点:

增加了系统空间开销,查找一个文件按路径名逐层检查, 由于每个文件都放在外存, 级数太多时访盘影响速度

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

7.3.4 目录查询技术

1. 线性检索法

单级目录:

用户给出文件名,按名顺序查找目录项

多级目录根据路径名顺序查找各级目录:

全路径名:从根开始

相对路径:从当前路径

各级目录未查到时应停止查询, 返回"文件未找到",查到则根据盘块号指针读入下级目录继续查。

2. Hash方法

建立一张 Hash索引文件目录, 利用Hash函数直接将文件名转换为索引值直接查找, 解决冲突的规则:

(1) 该目录项为空则未找到

(2) 文件名(或子目录名)匹配则找到

(3) 该目录项非空则发生冲突,将Hash值加一常数(与目录长度互质)继续查找

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

7.4 文件共享

一个文件(或子目录) 可以被多个用户(进程)共享使用; 这样可以节省时间和存储空间, 减少了用户工作量。

早期的文件共享方式有绕弯路法、连访法和基本文件目录法; 当前常用两种文件共享方法,它们是:

基于索引结点的共享方式

利用符号链实现文件共享

7.4.1 基于索引结点的共享方式

将共享文件或子目录链接到多个用户的目录表中,此时目录的结构已不再是树型结构而是一个有向非循环图。用户的目录表中有文件的描述信息,当某个用户对文件修改时这些描述信息的内容也可能发生变化,此时该文件的其它共享者的目录对应信息并未随之改变,引起共享错误。用索引结点可避免。

为了解决这一问题可以将目录表中文件的描述信息存储在索引结点中,而仅将文件名和指向索引结点的指针存放在目录表中。索引结点中的count用作共享计数(链接计数)。

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

图中表示有向非循环图的目录结构,圆圈表示索引结点和文件本身。

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

问题:删除文件时怎样考虑?当文件主删除文件时可能会发生指针悬空。

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

7.4.2 利用符号链(Symbolic Link)实现文件共享

要使用户B能共享用户C的文件F,系统建立一个类型为LINK的新文件,如起名为G(或仍为F), 放在B的目录中, 该文件只包含被共享文件F的路径名。此法称为符号链接 (Symbolic Linking), 当B要访问G文件时, 被OS截获, OS根据G的LINK类型确定它是符号链, 再按此符号链找到共享文件F。

当文件主C 删除文件F后, 若B试图通过文件G 符号链访问F, 则只会因找不到文件访问失败, 不会发生指针悬空。

问题: 访问时系统要按符号链逐个分量查找目录, 多次读盘, 系统开销甚大。

优势: 可在网络环境下用, 符号链可存网址和路径

两种方法的共同问题是遍历文件系统并拷贝到磁带上, 对多次遍历到的共享文件, 将产生多个拷贝。

7.5 文件保护

1.安全性

确保未经授权的用户不能存取某些文件。涉及到技术、管理、法律、道德和政治等问题 安全性的两个重要方面:

(1) 数据丢失: 灾难、硬件或软件故障、人的失误

可通过磁盘容错技术和备份(存放在另一处)来解决

(2) 入侵者

积极的或消极的

非技术人员的偶然窥视

入侵者的窥视

明确的偷窃企图

商业或军事间谍活动

设计安全时要考虑是哪一类入侵者

2. 防止OS的安全缺陷

UNIX、TENEX、OS/360、Windows等都存在

Logic bomb(逻辑炸弹), Morris(蠕虫)利用安全缺陷

(1) 一般性的安全攻击

请求内存页、磁盘空间和磁带并读取其内容

尝试非法的系统调用(非法参数、不合适的参数)

在登录过程中键入DEL, BREAK

写一段程序欺骗用户……

病毒

(2) 安全性的设计原则

系统设计必须公开

缺省属性应该不可访问

检查当前权限

给每个进程赋予一个最小的可能权限

保护机制应简单一致,嵌入到系统底层

3. 文件的保护机制

(1) 文件保护

用于提供安全性的特定的操作系统机制。

(有权限的用户, 应让其进行相应操作, 否则, 应禁止)

实现:用户验证、存取控制

(2) 用户验证

用户登录, 检验其身份

(1) 口令

(2) 物理鉴定

磁卡,指纹,签名分析,手指长度分析

(3) 对策

(3) 存取控制

审查用户的权限

审查本次操作的合法性

继续阅读