操作系统—文件管理

导读:本篇文章讲解 操作系统—文件管理,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

文件管理

1 文件和文件系统

文件系统的管理功能是将其管理的程序和数据通过组织为一系列文件的方式实现

1.1 数据项、记录、文件

(1)数据项

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

① 基本数据项:用于描述一个对象的某种属性的一个值,如姓名、日期或证件号等,是数据中可命名的最小逻辑数据单位,即原子数据

② 组合数据项:由多个基本数据项组成。

(2)记录

记录是一组相关的数据项的集合,用于描述一个对象在某方面的属性,如一个考生报名记录包括考生姓名、出生日期、报考学校代号、身份证号等一系列域

(3)文件

件是指由创建者所定义的一组相关信息的集合,逻辑上可分为有结构文件无结构文件两种。在有结构文件中,文件由一组相似记录组成,如报考某学校的所有考生的报考信息记录,又称记录式文件;而无结构文件则被看成是一个字符流,比如一个二进制文件或字符文件,又称流式文件.

文件的属性可以包括:

① 文件类型 ② 文件长度 ③ 文件的物理位置 ④ 文件的建立时间

在这里插入图片描述

1.2 文件名和类型

(1)文件名和扩展名

在不同的系统中,对文件名的规定是不同的,在一些老的系统中,名字的长度受到限制。

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

(2)文件类型

  • 按文件的性质和用途分类

① 系统文件:系统软件构成的文件,如内核,系统应用程序,数据;只允许用户执行,不能读写和修改

② 用户文件:由用户建立的文件,如源程序、目标程序和数据文件等;用户将这些文件托给系统保管;只允许文件所有者和所有者授权用户使用

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

  • 按文件中数据的形式分类

① 源文件:由源程序和数据构成的文件。通常由终端或输入设备输入的源程序和数据所形成的文件都属于源文件

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

③ 可执行文件:把编译后所产生的目标代码再经过链接程序链接后所形成的文件

  • 按存取控制属性分类

① 只执行文件:只允许被核准的用户调用执行,既不允许读,更不允许写

② 只读文件:只允许文件主及被核准的用户去读,但不允许写

③ 读写文件:允许文件主和被核准的用户去读或写的文件

④ 无保护文件

  • 按文件的内容形式和系统处理方式分类

① 普通文件:由ASCII码或二进制码组成的文件。一般用户建立的源程序文件、数据文件、目标代码文件及操作系统自身代码文件、库文件等都是普通文件,它们通常存储在外存储设备上

② 目录文件:由文件目录组成的,用来管理和实现文件系统功能的系统文件,通过目录文件可对其它文件的信息进行检索。目录文件也是由字符序列构成,可进行与普通文件一样的各种操作

③ 特殊文件(设备文件):特指系统中的各类I/O设备。为了便于统一管理,系统将所有的输入/输出设备都视为文件,按文件方式提供给用户使用。

1.3 文件系统的层次结构

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

在这里插入图片描述

(1)对象及其属性

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

① 文件 ② 目录 ③ 磁盘存储空间

(2)对对象操作和管理的软件集合

  • 文件系统的功能大多是在这一层实现的,其中包括有:

① 对文件存储空间的管理

② 对文件目录的管理

③ 用于将文件的逻辑地址转换为物理地址的机制

④ 对文件读和写的管理

⑤ 对文件的共享与保护等功能

  • 把与文件系统有关的软件分为四个层次

① I/O控制层:文件系统的最低层,主要由磁盘驱动程序等组成,称为设备驱动程序层

② 基本文件系统层:主要用于处理内存与磁盘之间数据块的交换

③ 基本I/O管理程序:该层用于完成与磁盘I/O有关的事务

④ 逻辑文件系统:用于处理与记录和文件相关的操作

  • 文件系统的接口

① 命令接口:是指作为用户与文件系统交互的接口,用户可通过键盘终端键入命令取得文件系统的服务

② 程序接口:是指作为用户程序与文件系统的接口,用户程序可通过系统调用取得文件系统的服务

1.4 文件操作

最基本的文件操作包括创建、删除、读、写和设置文件的读/写位置

一般OS都提供了更多对文件的操作,如打开和关闭一个文件及改变文件名等等

(1)最基本的操作

① 创建文件

② 删除文件

③ 读文件

④ 写文件

⑤ 设置文件的读/写的位置

(2)文件的打开和关闭操作

当用户要求对一个文件实施多次读/写操作时,每次都要从检索目录开始,为了避免多次重复检索目录,在大多数OS中引入了”打开”这一文件系统调用,当用户第一次请求对某文件进行操作时,须先利用open系统调用将该文件打开。

(3)其他文件操作

常用的一类是有关对文件属性的操作,即允许用户直接设置和获取文件的属性

2 文件的逻辑结构

用户看到的文件称为逻辑文件,它是由一系列的逻辑记录组成的。文件的逻辑记录时能够被存取的基本单位

系统中的所有文件都存在两种形式的文件结构:

① 文件的逻辑结构:从用户观点出发所观察到的文件组织形式

② 文件的物理结构:文件的存储结构

2.1 文件逻辑结构的类型
  • 是否有结构,分为两类:

① 有结构文件:这是指由一个以上的记录构成的文件,也称记录式文件

② 无结构文件:这是指由字符流构成的文件,也称流式文件

  • 从文件的组织方式来分

① 顺序文件

② 索引文件

③ 索引顺序文件

(1)按文件是否有结构分类

  • 有结构文件

① 定长记录:文件中所有记录的长度都是相同的,个数据项都处在记录中相同的位置,具有相同的顺序和长度。

优点:有效提高检索记录的速度和效率,方便对文件进行处理和修改

② 变长记录:文件中各记录的长度不相同,产生边长记录的原因可能是由于一个记录中所包含数据项数目并不相同。

缺点:记录的检索速度慢,不方便对文件进行处理和修改

  • 无结构文件

系统中运行的大量的源程序、可执行文件、库函数等采用的是无结构文件形式(流式文件)

(2)按文件的组织方式分类

① 顺序文件:指由一系列记录按某种顺序排列所形成的文件,其记录可以是定长记录也边长记录

② 索引文件:指为可变长记录文件建立一张索引表,为每个记录设置一个表项,以加快对记录的检索速度

③ 索引顺序文件:为每个文件建立一张索引表,并不是为每一个记录建立一个索引表项。

2.2 顺序文件

(1)顺序文件的排列方式

① 串结构

按照存入时间的先后进行排序,各个记录之间的顺序与关键字无关。对文件进行检索的时候,每次都要从头开始,逐个记录

地查找。缺点:耗时长

② 顺序结构

用户指定哪一个字段作为关键字。优点:提高检索效率

(2)顺序文件的优缺点

优点:① 存取效率高

缺点:① 查找性能差 ② 增加删除困难

2.3 记录寻址

(1)隐式寻址方式

对于定长的顺序文件,如果已知当前记录的逻辑地址,很容易确定下一个记录的逻辑地址。

(2) 显式寻址方式

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

① 通过文件中记录的位置

② 关键字

2.4 索引文件

(1)按关键字建立索引

在这里插入图片描述

(2)具有多个索引表的索引文件

在这里插入图片描述

2.5 索引顺序文件

(1)索引顺序文件的特征

优点:克服变长记录的顺序文件不能随机访问,以及不便记录的删除和插入的缺点

两个新特征;① 引入文件索引表 ② 增加溢出文件

(2)一级索引顺序文件

在这里插入图片描述

(3)两级索引文件

2.6 直接文件和哈希文件

(1)直接文件

对于直接文件,则根据给定的记录键值,直接获得指定记录的物理地址,换言之,记录键值本身就决定了记录的物理地址,这种由记录键值到记录物理地址的转换被称为键值转换。

(2)哈希文件

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

3 文件目录

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

① 实现按名存取:即用户只须向系统提供所需访问的文件的名字,便能够快速准确地找到指定文件在外存上的存储位置,这是目录管理中最基本的功能

② 提高对目录检索速度:通过合理地组织目录结构的方法,可加快对目录的检索速度,从而提高对文件的存取速度

③ 文件共享:在多用户系统中,应该允许用户共享一个文件

④ 允许文件重名:系统应允许不同用户对不同文件采用相同的名字,以便用户按照自己的习惯给文件命名和使用文件

3.1 文件控制块

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

(1)基本信息类

① 文件名(标识一个文件的符号名,在每个系统中,每个文件都有唯一的名字,用户利用该名字进行存取)

② 文件物理位置(指文件在外存上的存储位置,包括存放文件的设备名、文件在外村上的起始盘块号、指示文件所占用的盘块数或字节数的文件长度)

③ 文件逻辑结构(指示文件是流式文件还是记录式文件、记录数,文件是定长还是变长记录)

④ 文件物理结构(指示文件是顺序文件、链式文件还是索引文件)

(2)存取控制信息

包括文件主的存取权限、核准用户的存取权限及一般用户的存取权限

(3)使用信息

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

3.2 索引结点

(1)索引结点的引入

文件目录通常是存放在磁盘上的,当文件很多时,文件目录可能要占用大量的盘块,在查找的过程中,先将存放目录文件的第一个盘块中的目录调入内存,然后把用户所给定的文件名和目录项中的文件名逐一对比。若未找到指定文件,则再将下一个盘块中的目录项调入内存。

在检索目录文件时,只用到了文件名,仅当找到一个目录项(即其中的文件名与指定要查找的文件名相匹配)时,才需要从该目录项中读出该文件的物理地址,而其他一些对该文件进行描述的信息,在检索目录时一概不用,显然,这些信息在检索目录时不需要调入内存。为此,在有的系统中,如UNIX系统,便采用了把文件名和文件描述信息分开的方法,亦即,使文件描述信息单独形成一个称为索引结点的数据结构,简称为i结点,在文件目录中的每个目录项由文件名和指向该文件所对应的i结点的指针所构成。

(2)磁盘索引结点

每个文件都有唯一的磁盘索引结点(磁盘索引结点信息与文件名等信息一起构成了FCB)

还包括;

① 文件主标识符

② 文件类型

③ 文件存取权限

④ 文件物理地址

⑤ 文件长度

⑥ 文件连接计数

⑦ 文件存取时间

(3)内存索引结点

当文件被打开,要将磁盘索引结点拷贝到内存的索引结点中,增加以下内容

① 索引结点编号

② 状态

③ 访问计数

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

⑤ 链接指针

3.3 目录结构

目录结构的组织,关系到文件系统的存取速度,也关系到文件的共享性和安全性,目前常用的目录结构形式有单级目录、两级目录、多级目录.

(1)单级目录结构

在整个系统中只建立一张目录表,每个文件占一个目录项,目录项中含文件名、文件扩展名、文件长度、文件类型、文件物理地址、状态位(表示目录项是否空闲)等

每当要建立一个新文件时,必须先检查所有的目录项,以保证新文件名在目录中是唯一的,然后再从目录表中找到一个空白目录项,填入新文件的文件名及其他说明信息,并置状态为1,删除文件时,先从目录中找到该文件的目录项,回收该文件所占用的存储空间,然后再清除该目录项

优点:是简单并且能够实现目录管理的基本功能-按名存取

缺点:① 查找速度慢:查找一个目录项要花费较多的时间

② 不允许重名:在一个目录表中的所有文件,都不能与另一个文件有相同的名字,这是难以避免的

③ 不便于实现文件共享:每一个用户都有自己的名字空间或命名习惯,因此,应该允许不同用户使用不同的文件名来访问同一个文件

(2)两级目录结构

每个用户建立一个单独的用户文件目录UFD(User File Directory),这些文件目录具有相似的结构,由用户所有文件的文件控制块组成。此外,系统中还有一个主文件目录MFD(Master File Directory),在主文件目录中,每个用户目录文件都占有一个目录项,其目录项包括用户名和指向用户目录文件的指针
在这里插入图片描述

两级目录结构克服了单级目录的缺点,具有如下优点:

① 提高了检索目录的速度:如果在主目录中有n个子目录,每个用户目录最多为m个目录项,则为查找一指定的目录项,最多只需要检索n+m个目录

② 在不同的用户目录中,可以使用相同的文件名:只要在用户自己的UFD中,每个文件名都是唯一的,不同用户可以有文件名相同的文件

③ 不同用户还可使用不同的文件名来访问系统中同一个共享文件:但在多个用户需要合作完成一个大任务时,不便于用户之间共享文件

3.4 树形目录结构

(1)树形目录

对于大型文件系统,通常采用三级或三级以上的目录结构,以提高对目录的检索速度和文件系统的性能。多级目录结构又称为树形目录结构,主目录被称为根目录,把数据文件称为树叶,其他的目录均作为树的结点

说明:方框代表目录文件,圆圈代表数据文件

在这里插入图片描述

(2)路径名和当前目录

  • 系统中的每个文件都有唯一的路径名

(3)目录操作

① 创建目录

② 删除目录

  • 不删除非空目录
  • 可删除非空目录

③ 改变目录

④ 移动目录

⑤ 链接操作

⑥ 查找

3.5 目录查询技术

当用户要访问一个已存在的文件时,系统首先利用用户提供的文件名对目录进行查询,找出该文件的文件控制块或对应索引结点,然后,根据FCB或索引结点中所记录的文件物理地址(盘块号),换算出文件在磁盘上的物理位置,最后,再通过磁盘驱动程序,将所需文件读入内存。目前常用的方式有线性检索法Hash方法

(1)线性检索法

其又称为顺序检索法,在单级目录中,利用用户提供的文件名,用顺序查找法从文件目录中找到文件的目录项,在树形目录中,用户提供的文件名是由多个文件分量名组成的路径名,此时须对多级目录进行查找,假定用户给定的文件路径名为/usr/ast/mbox,

在这里插入图片描述

步骤:

① 读入第一个文件分量名usr,用它与根目录文件(或当前目录文件)中各目录项中的文件名顺序地进行比较

② 得到匹配项的索引结点号是6

③ 从6号索引结点中得到usr目录文件放在132号盘块中,将该盘块内容读入内存

④ 再将路径名中的第二个分量名ast读入,用它与放在132号盘块中的第二级目录文件中各目录项的文件名顺序进行比较

⑤ 依次类推

(2)Hash方法

系统利用用户提供的文件名并将它转换为文件目录的索引值,再利用该索引值到目录中去查找,这将提高检索速度

4 文件共享
4.1 基于无循环图实现文件共享—硬连接
  • 有向无循环图

在这里插入图片描述

  • 利用索引节点

在这里插入图片描述

4.2 利用符号链实现文件共享—软连接
  • 利用符号链接的基本思想

为使用户B能共享用户A的一个文件F,可以由系统创建一个LINK类型的新文件,也取名为F,并将文件F写入用户B的目录中,以实现用户B的目录与文件F的链接。在新文件中只包含被链接文件F的路径名。这样的链接方法被称为符号链接。

在这里插入图片描述

  • 如何利用符号链实现共享

新文件中的路径名则只被看做是符号链,当用户B要访问被链接的文件F且正要读 LINK类新文件时,操作系统根据新文件中的路径名去读该文件,从而实现了用户B对文件 F的共享

  • 利用符号链接实现共享的优点

在利用符号链方式实现文件共享时,只有文件的拥有者才拥有指向其索引结点的指针。而共享该文件的其他用户则只有该文件的路径名,并不拥有指向其索引结点的指针。这样,也就不会发生在文件主删除一共享文件后留下一悬空指针的情况。当文件的拥有者把一个共享文件删除后,其他用户通过符号链去访问它时,会出现访问失败,于是将符号链删除,此时不会产生任何影响

符号链方式有一个很大的优点,即网络共享只需提供该文件所在机器的网络地址以及该机器中的文件路径即可

  • 利用符号链的共享方式存在的问题

上述两种链接方式都存在一个共同的问题,即每个共享文件都有几个文件名。换言之,每增加一条链接,就增加一个文件名。这实质上就是每个用户都使用自己的路径名去访问共享文件。当我们试图去遍历整个文件系统时,将会多次遍历到该共享文件。每次访问的开销就会很大。

**总结:**硬链接和软链接都是文件系统中的静态共享方法,在文件系统中还存在着另外的共享需求,即两个进程同时对同一个文件进行操作,这样的共享可以称为动态共享。

5 文件保护
  • 影响文件安全性的主要因素:

① 人为因素 ② 系统因素 ③ 自然因素

  • 为了确保文件系统的安全性,采取三方面的措施

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

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

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

5.1 保护域

规定每一个进程仅能在保护域内执行操作,而且只允许进程访问它们具有访问权的对象

(1)访问权

我们把一个进程能对某对象执行操作的权力称为访问权。

(2)保护域

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

在这里插入图片描述

(3)进程和域间的静态联系

在进程和域之间可以一一对应,即一个进程只联系着一个域。这意味着,在进程的整个生命周期中,其可用的资源是固定的,我们把这种域称为“静态域”。

(4)进程和域间的动态联系

在进程与域间也可以是一对多的关系,即一个进程联系着多个域。在此情况下,可将进程的运行分为若干个阶段,每一个阶段联系着一个域,这样便可根据运行的实际需要来规定在进程运行的每个阶段中能访问的对象。

5.2 访问矩阵

(1)基本的访问矩阵

我们可以利用一个矩阵来描述系统的访问控制,并把该矩阵称为访问矩阵。访问矩阵中的行代表域,列代表对象,矩阵中的每一项是由一组访问权组成的。

矩阵中的访问权通常是由资源的拥有者或者管理者所决定的。

在这里插入图片描述

(2)具有切换权的访问矩阵

为了实现在进程和域之间的动态联系,应该能够将进程从一个保护域切到另一个保护域。为了能对进程进行控制,同样应将切换作为一种权力,仅当进程有切换权,才能进行这种切换。

执行在域D2中的进程可以切换到域D3或域D4。域D4的进程可以切换到D1,而域D1的进程可以切换到D2

在这里插入图片描述

(3)访问矩阵的修改

  • 拷贝权

凡是在访问权上加星号的,都表示运行的进程能将其对对象的访问权复制在任何域中对同一对象的访问权。

在这里插入图片描述

  • 所有权

将已有的访问权进行有控制的扩散,而且同样需要能增加某种访问权,或者能删除某种访问权

在这里插入图片描述

  • 控制权

控制权用于改变矩阵内同一行种的各项访问权,或用于改变某个领域中运行的进程对不同对象的访问权。

在这里插入图片描述

5.3 访问矩阵的实现

(1)访问控制表

指对访问矩阵按列划分,为每一列建立一张访问控制表ACL

该表中已把矩阵中属于该列的所有空项删除,此时访问控制表是由一有序对(域,权集)所组成的。

域是一个抽象的概念,可用各种方式实现。最常见的一种情况是每一个用户是一个域,而对象是文件。

访问控制表可用于定义缺省的访问权集

(2)访问权限表

如果把访问矩阵按行划分,便可以每一行构成一张访问权限表。这是由一个域对每一个对象可以执行的一组操作所构成的表。
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/16157.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!