第七章 文件管理

在这里插入图片描述


树形目录结构 ( B树 )

在这里插入图片描述

数据库里的数据是B树,检索效率很高。

7.1 文件和文件系统

7.1.1 文件、记录和数据项

现代OS中几乎毫无例外的通过文件系统来组织和管理计算机中存储的数据;
是通过把它所管理的程序和数据组织成一系列文件的方法来实现的。

◼ 文件则是指具有文件名的若干相关元素的集合。	
◼ 基于文件系统的概念,可以把数据组成分为   数据项、记录、文件   三级。

文件、记录和数据项之间的关系

在这里插入图片描述

文件属性(类型,大小,位置,时间)

◼ 文件类型:
可以从不同的角度来规定文件的类型。如源文件、目标文件及可执行文件。

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

◼ 文件的物理位置:
通常是用于指示文件在哪一个设备上及在该设备的哪一个位置的指针。

◼ 文件的建立时间:
指最后一次的修改时间等。

7.1.2 文件名和类型

文件名和扩展名

文件名
扩展名

文件类型

➢ 按用途分类:系统文件、用户文件和库文件。
➢ 按文件中数据的形式分类:源文件、目标文件和可执行文件
➢ 按存取控制属性分类:只执行文件、只读文件和读写文件。

7.1.3 文件系统的层次结构

1.对象及其属性:

文件管理系统的对象有:文件、目录和磁盘存储空间。

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

是文件管理的核心部分。
实现了文件系统的大部分功能——对文件存储空间的管理、对文件目录的管理、文件的地址转换机制、对文件读写管理以及  对文件的共享和保护。

3.文件系统的接口。

命令接口(用户与文件系统)和程序接口(用户程序和文件系统)。

在这里插入图片描述

7.1.4 文件操作

◼ 用户通过文件系统所提供的系统调用实施对文件的操作。
最基本的文件操作有:创建文件、删除文件、读文件、写文件、截断文件和设置文件的读/写位置。

◼ 但对于一个实际的OS,为了方便用户使用文件而提供了更多地对文件的操作,如打开和关闭一个文件及改变文件名等操作。

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

所谓“打开”,是指系统将指明文件的属性从外存拷贝到内存打开文件表的一个表目中,并将该表目的编号返回给用户。	
以后当用户再要求对该文件操作时,便可利用系统所返回的索引号向系统提出操作请求。

此时可直接利用索引号到打开文件表中查找,避免了再次检索。
这样不仅节省大量检索开销而且显著提高操作速度。

◼ 当用户不再需要对该文件实施相应的操作时,可利用“关闭”此文件,OS将会把该文件从打开文件表中的表目上删除。

MS-DOS的文件控制块(文件目录项)
在这里插入图片描述

7.2 文件的逻辑结构(用户角度) ( 重点 )

现在的操作系统不支持记录式文件,都是流式文件

在这里插入图片描述

记录式文件:文件的格式是一条一条的记录
流式文件  :无记录格式,

文件的结构

◼ 通常文件是由一系列的记录组成的。
文件系统设计的关键要素,是将这些记录构成一个文件的方法,以及将一个文件存储到外存上的方法。

事实上任何一个文件都存在着以下两种形式的结构:

1. 文件的逻辑结构。
从用户观点出发所观察到的文件组织形式,是用户可以直接处理的数据及其结构,
它独立于文件的物理特性,又称为文件组织

2. 文件的物理结构。
又称为文件的存储结构,是指文件在外存上的存储组织形式。
与存储介质的存储性能和采用的外存分配方式有关

7.2.1 文件逻辑结构的类型

可以分为两大类:(有无结构)

◼ 有结构文件,是指由一个以上的记录构成的文件,故又把它称为记录式文件;
  根据记录的长度可分为定长记录文件;不定长记录文件。

◼ 无结构文件,这是指由字符流构成的文件,故又称为是流式文件

有结构文件

根据记录的组织方式分为下列文件:
◼ 顺序文件:
	由一系列记录按某种顺序排列所形成的文件。通常是定长记录。
◼ 索引文件:
	当记录可变长时,通常为之建立一张索引表,并为每个记录设置一个表项以加快对记录检索的速度。
◼ 索引顺序文件:
	上述两种方式的结合。为文件建立一张索引表,为每一组记录中的第一个记录设置一个表项。

无结构文件

◼ 如果说大量的数据结构和数据库,是采用有结构的文件形式的话,
则大量的源程序、可执行文件、库函数等,所采用的就是无结构的文件形式,即流式文件。	
其长度以字节为单位。对流式文件的访问,则是采用读写指针来指出下一个要访问的字符。

◼ 可以把流式文件看作是记录文件的一个特例
   举例:(一个字节就是一条记录)

7.2.2 顺序文件

在这里插入图片描述

◼ 逻辑记录的排序

1. 串结构:各记录之间的顺序与关键字无关。通常由时间来决定。
2. 顺序结构:文件中的所有记录按关键字排列。
	可以按关键字的长短或英文字母顺序排序。顺序结构的检索效率更高

◼ 对顺序文件的读/写操作

◼ 顺序文件的优缺点

优点:顺序文件的最佳应用场合是在对诸记录进行批量存取时,
 	  即每次操作一大批记录。只有顺序文件才能存储在磁带上,并能有效的工作。
	
缺点:
1. 在交互应用的场合,如果进程操作对象是单个记录,
	顺序文件的性能就可能很差。当文件较大时更差。
2. 如想增加或删除一个记录都比较困难。

7.2.3 记录寻址

1.隐式寻址方式

对于定长记录的顺序文件,如果已知当前记录的逻辑地址,便很容易确定下一个记录的逻辑地址。
在这里插入图片描述

2.显式寻址方式
该方式可用于对定长记录的文件实现直接或随机访问。
因为任何记录的位置都很容易通过记录长度计算出来。

而对于可变长度记录的文件则不能利用显式寻址方式实现直接或随机访问,
必须增加适当的支持机构方能实现。

下面通过两种方式对定长记录实现随机访问:

◼ 通过文件中记录的位置
据第一条记录的首地址和记录长度,可计算第i条记录的地址。

◼ 利用关键字
通过关键字值顺序查找记录。


对于变长记录,只能顺序查找。

7.2.4 索引文件 (空间换时间)

在这里插入图片描述

7.2.5 索引顺序文件

在这里插入图片描述

一级索引顺序文件		二级索引顺序文件

对于一个非常大的文件,为找到一个记录而须查找的记录数目仍然很多。
为索引顺序文件的索引表再建索引,形成二级索引顺序文件。

在这里插入图片描述

7.2.6 直接文件和哈希文件

◼ 直接文件

采用前述几种文件结构对记录进行存取时,都须利用给定的记录键值,
先对线性表进行检索,以找到指定记录的物理地址。

然而对直接文件,则可根据给定的记录键值,直接获得指定记录的物理地址。
换言之,记录键值本身就决定了记录的物理地址,组织直接文件的关键,
在于用什么方法进行从记录值到物理地址的转换。

在这里插入图片描述
在这里插入图片描述


7.3 文件目录 ( 重点 )

每个逻辑盘只有一个根目录,存放在磁盘固定位置.
每一个文件夹(目录) 对应一个文件目录表,
文件夹下每个文件/文件夹  对应一个FCB

7.3.1 文件控制块和索引结点

◼ 为了能对一个文件进行正确的存取,必须为文件设置用于描述和控制文件的数据结构,称之为“文件控制块(FCB)”文件管理程序可借助于文件控制块中的信息对文件施以各种操作。

文件与文件控制块一一对应,而人们把文件控制块的有序集合称为文件目录,即一个文件控制块就是一个文件目录项。

通常一个文件目录也被看作是一个文件,称为目录文件。

◼ FCB通常含有以下三类信息:
➢ 基本信息类。       包括:文件名,文件物理位置,文件逻辑结构,文件的物理结构。
➢ 存取控制信息类。   包括:文件主的存取权限,核准用户的存取权限和一般用户的存取权限。
➢ 使用信息类。       包括:文件的建立日期和时间、文件上次修改的日期和时间及当前使用信息。

在这里插入图片描述

上面是windows的,下面是linux的。

◼ 索引结点的引入(lunex系统)

文件目录通常是存放在磁盘上的,当文件很多时,文件目录要占用大量的盘块。在检索目录文件的时候,需要将目录调入内存后比较文件名,但是只用到文件名,而不需要其它那些对文件的描述信息。所以便把文件名与文件信息分开,使文件描述信息单独形成一个索引结点。

在这里插入图片描述

文件目录小,所以快。

磁盘索引结点

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

➢ 文件主标识符。
➢ 文件类型。
➢ 文件存取权限。
➢ 文件物理地址。
➢ 文件长度。
➢ 文件链接计数。
➢ 文件存取时间。

内存索引结点

◼ 这是放在内存中的索引结点。
当文件被打开后,将磁盘索引结点拷贝到内存索引结点中以便使用。

比磁盘索引结点又增加了以下内容:
索引结点编号;状态;访问计数;文件所属文件系统的逻辑设备号;链接指针

7.3.2 简单的文件目录

目录结构的组织,关系到文件系统的存取速度,也关系到文件的共享性和安全性。因此,组织好文件的目录是设计好文件系统的重要环节。目前常用的目录结构形式有单级目录、两级目录和多级目录。我们分别来介绍。

单级目录结构

◼ 最简单的目录结构。整个文件系统中只建立一张目录表,
每个文件一个目录项,目录项含有文件相关信息。状态位表明每个目录项是否空闲

在这里插入图片描述

◼ 优点:简单且能实现目录管理的基本功能。

◼ 缺点:
➢ 查找速度慢。
➢ 不允许重名。名字过多难于记忆。多用户环境下重名难以避免。
➢ 不便于实现文件共享。

两级目录结构

◼ 为了克服单级目录所存在的缺点,可以为每个用户建立一个单独的用户文件目录UFD。由该用户所有文件的文件控制块组成。

◼ 在系统中再建立一个主文件目录MFD。在主文件目录中每个用户目录文件都占有一个目录项,其中包括用户名和指向该用户文件的指针。

两级目录的特点
◼ 基本克服了单级目录的缺点,并具有以下优点:

➢ 提高了检索目录的速度。
➢ 在不同的目录中可以有相同的文件名。
➢ 不同用户还可以使用不同的文件名来访问系统中的同一个共享文件。

◼ 存在的问题是各用户之间被完全隔离了,无法进行合作。

在这里插入图片描述

7.3.3 树形结构目录

  1. 树形目录

     大型系统通常采用三级或三级以上的目录结构,以提高目录的检索速度和文件系统的性能。
     多级目录结构又称为树型目录结构,主目录称为根目录,数据文件为树叶,其它目录为结点。
    
  2. 路径名和当前目录

     ◼ 路径名
     ◼ 当前目录
     ◼ 多级目录结构
    

在这里插入图片描述

  1. 目录操作

     (1) 创建目录
     (2) 删除目录
     		① 不删除非空目录
     		② 可删除非空目录
     (3) 改变目录
     (4) 移动目录
     (5) 链接(Link)操作
     (6) 查找
    

7.3.4 目录查询技术

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

◼ 目前对目录进行查询的方式有两种:线性检索法和Hash方法

线性检索法

◼ 又称为顺序检索法。假定用户给定的文件路径是/usr/ast/mbox则查找过程

在这里插入图片描述

7.4 文件共享

现代OS中必须提供文件共享手段,即指系统应允许多个用户(进程)共享同一份文件。
这样系统中只需有一份副本。

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

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

若允许一个文件可以有多个父目录,即有多个属于不同用户的多个目录,同时指向同一个文件,这样虽会破坏树的特性,但这些用户可用对称的方式实现文件共享,而不必再通过其属主目录来访问。

在这里插入图片描述

2.基于索引结点的共享方式
◼ 在树型结构的目录中,当有两个(或多个)用户要共享一个子目录或文件时,必须将共享文件或子目录连接到两个(或多个)用户的目录中,才能方便得找到该文件。
此时该文件系统的目录结构已不再是树型结构,而是个有向非循环图。

◼ 如果通过在文件目录中包含文件的物理地址的方法实现共享有很多缺陷。故采用基于索引结点的共享方式。

在这里插入图片描述

7.4.2 利用符号链实现文件共享

在这里插入图片描述

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

当用户通过D5访问被链接的文件F8,且正要读LINK类新文件时,此要求将被OS截获,OS根据新文件中的路径名去找到文件F8,然后对它进行读(写),这样就实现了用户B对文件F的共享

7.5 文件保护

影响文件安全性的主要因素有:

(1) 人为因素。
(2) 系统因素。
(3) 自然因素。

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

(1) 通过存取控制机制,防止由人为因素所造成的文件不安全性。
(2) 采取系统容错技术,防止系统部分的故障所造成的文件的不安全性。
(3) 建立后备系统,防止由自然因素所造成的不安全性。

7.5.1 保护域

1.访问权

为了对系统中的对象加以保护,应由系统来控制进程对对象的访问。对象可以是硬件对象,如磁盘驱动器、打印机;也可以是软件对象,如文件、程序。对对象所施加的操作也有所不同,如对文件可以是读,也可以是写或执行操作。我们把一个进程能对某对象执行操作的权力,称为访问权(Accessright)。

2.保护域

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

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

在进程和域之间可以一一对应,即一个进程只联系着一个域。这意味着,在进程的整个生命期中,其可用资源是固定的,我们把这种域称为“静态域”。在这种情况下,进程运行的全过程都是受限于同一个域,这将会使赋予进程的访问权超过了实际需要。

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

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

7.5.2 访问矩阵(linux)

1. 基本的访问矩阵

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

在这里插入图片描述

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

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

7.5.3 访问矩阵的修改

系统建立起访问矩阵后,还应能对其进行修改。可通过在访问权中增加拷贝权、拥有权、控制权的方法实现有控制的修改

1. 拷贝权 && 2. 所有权

在这里插入图片描述

3. 控制权(Control Right)

拷贝权和所有权都是用于改变矩阵内同一列的各项访问权的,或者说,是用于改变在不同域中运行的进程对同一对象的访问权的。控制权则可用于改变矩阵内同一行中(域中)的各项访问权,亦即,用于改变在某个域中运行的进程对不同对象的访问权的。如果在access(i,j)中包含了控制权,则在域Di中运行的进程可以删除在域Dj中运行的进程对各对象的任何访问权。

在这里插入图片描述
在这里插入图片描述

7.5.4 访问矩阵的实现

在这里插入图片描述

1.对矩阵按列(对象)划分,删除空项——访问控制表(ACL)
	在一些系统中,当对象为文件时,将ACL放入该文件的文件控制表中。
2.对矩阵按行(域)划分,删除空项——访问权限表
	这是由一个域对每一个对象可以执行的一组操作所构成的表。
	表中的每一项即为该域对某对象的访问权限。

	目前大多数系统,同时使用访问控制表、访问权限表。访问控制表、访问权限表的安全性很关键。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值