操作系统期末复习合集——第六章:文件管理
- 引言
- 6.1 文件和文件系统
- 一、文件
- 1. 有结构文件
- 2. 无结构文件(流式文件)
- 二、文件系统
- 1. 功能
- 2. 文件系统接口
- 6.2 文件的逻辑结构
- 一、文件结构
- 二、文件逻辑结构的类型
- 三、顺序文件
- 1. 排序
- 2. 读/写
- 3. 缺点
- 四、索引文件
- 索引顺序文件
- 查找速度比较
- 6.3 外存分配方式
- 一、外存空间分配的目标
- 二、连续外存分配
- 连续分配—顺序文件-1
- 三、链接分配
- 1. 隐式链接
- 2. 显式链接
- 四、索引分配
- 1. 单级索引分配
- 2. 两级索引分配
- 3. 混合索引分配
- 练习
- 范例一
- 范例二
- 6.4 目录管理
- 一、目录
- 二、文件控制块(FCB)
- 三、索引结点
- 四、单级目录
- 五、两级目录
- 六、树型目录结构
- 1. 树型目录结构举例
- 从路径解析来看目录内容
- 树状目录的完整实现
- 2. 路径
- 3. 当前目录
- 4. 增加目录
- 5. 删除目录
- 七、目录查询技术
- 6.5 文件存储空间的管理
- 一、空闲表法
- 二、空闲链表法
- 1. 空闲盘块链表法
- 2. 空闲盘区链表法
- 3. 位示图法
- 四、成组链接法
- 6.6 文件共享和文件保护
- 一、绕弯路文件共享方法
- 二、基于索引结点的共享方式
- 三、利用符号链实现文件共享
- 6.7 磁盘容错技术
- 一、第一级容错技术(SFT-I)
- 1. 双份目录和双份文件分配表(FAT)
- 2. 热修复重定向
- 3. 写后读校验
- 二、第二级容错技术(SFT-II)
- 1. 磁盘镜像
- 2. 磁盘双工
- 6.8 数据一致性控制
- 一、数据一致性问题
- 二、事务
- 1. 事务
- 2. 事务记录
- 3. 恢复算法
- 三、并发控制
- 1. 利用互斥锁实现“顺序性”
- 2. 利用信号量机制实现“顺序性”
- 四、磁盘块号的一致性
- 练习
引言
操作系统对系统的软件资源(不论是应用软件和系统软件)的管理都以文件方式进行,承担这部分功能的操作系统称为文件系统。本章介绍文件的逻辑组织和在文件存储器上的物理组织;实现**“按名存取”**和文件共享、保护的文件系统目录的结构和管理;文件存储空间分配和回收算法和文件系统的磁盘格式;文件系统的安全性。
6.1 文件和文件系统
一、文件
- 文件指具有文件名的一组相关信息的集合
- 任何具有独立意义的一组信息都可以组织成一个文件,如源程序、可执行的二进制代码程序、一批数据、一个表格或一篇文章等
- 文件具有可保存性:便于信息的长期保存
- 用户按名存取文件:便于用户对信息的存取,而不需要知道文件存放在磁盘的具体位置
- 文件主要有无结构文件(流式文件)和有结构文件
1. 有结构文件
- 有结构文件由记录组成
- 记录:是一组相关数据项的集合,用于描述一个对象某方面的属性
- 数据项:描述一个对象的某种属性的字符集
2. 无结构文件(流式文件)
- 无结构文件也称流式文件,直接由字符(或Byte)组成
- 流式文件可看作是记录式文件的一个特例,即只含一个无标识记录的文件
- 流式文件便于OS管理,也便于用户灵活组织文件的内部逻辑结构
- Unix, DOS, windows等OS都采用流式文件
二、文件系统
OS中实施文件管理的机构称为文件管理系统,简称文件系统
1. 功能
- 实施文件存储空间的分配与回收(即磁盘管理)
- 实现文件名到文件空间的映射
- 提供文件共享能力以及保护与保密措施
- 实现用户要求的各种文件操作
2. 文件系统接口
- 命令接口:用户与文件系统之间交互的接口,如查找文件(dir/ls)等
- 程序接口:用户程序与文件系统的接口,通过系统调用来实现,如open, read, write, close等
6.2 文件的逻辑结构
一、文件结构
- 文件的逻辑结构:即文件组织,是用户可以直接处理的数据及其结构
- 文件的物理结构:即文件的存储结构,是文件在外存上的存储组织形式
二、文件逻辑结构的类型
- 有结构文件:
- 顺序文件
- 索引文件
- 索引顺序文件
- 无结构文件:
- 流式文件
三、顺序文件
1. 排序
- 串结构:
各记录之间的顺序与关键字无关 - 顺序结构:
记录按关键字(词)排列
例子:
- 文件、记录、数据项
- 一个班的学生资料用一个文件表示
- 每个学生信息对应一条记录
- 学生的姓名、性别、出生年月等分别对应单个数据项
2. 读/写
- 定长记录:直接定位
- 变长记录:每个记录中有该记录长度,逐个记录顺序读/写
3. 缺点
- 对单个记录读/写困难(特别是对变长记录)
- 增加或删除一个记录困难
四、索引文件
- 为可变长记录文件建立一张索引表
- 索引表按记录键排序
- 索引表本身构成一个定长记录的顺序文件
索引顺序文件
- 将可变长记录文件中的记录分为若干个组
- 为每组第一个记录建立一张索引项,继而组成一个索引表
- 索引表按记录键排序
- 索引表本身构成一个定长记录的顺序文件
查找速度比较
- 三种文件的查找速度比较:100W条记录
- 顺序文件:平均查找需要50W次
- 索引文件:按索引方法查找,额外需要100W个索引的空间
- 索引顺序文件
- 每100条记录为1个组,共有10000个组,即有10000个组索引
- 每100个组索引为1群,共有100个群,即有100个群索引
- 建立二级索引表
- 查找:群索引表—组索引表—组记录表
- 50+50+50=150次
6.3 外存分配方式
一、外存空间分配的目标
- 提高外存利用率
- 提高文件的访问速率
二、连续外存分配
连续外存分配指为文件分配一组相邻接的盘块
- 优点:
- 顺序访问容易
- 一次大批量数据的访问速度较快
- 缺点:
- 要求有连续的外存空间(同样存在“碎片”问题)
- 必须事先知道文件的长度
连续分配—顺序文件-1
如假设逻辑块和盘块大小相等,则要读取文件第Ⅰ页(页从0开始计数)所在盘区块号J可通过下式计算得到: J=ADRR+I。
逻辑地址LA对应逻辑块号为 I=LA/块大小
块内位移为 d=LA mod 块大小
磁盘空间的连续分配
三、链接分配
将属于同一文件的盘块,链接在一起进行分配称链接分配
磁盘空间的连续分配
1. 隐式链接
将链接指针直接放在盘块数据区中
优点:
⑴、不存在“碎片”
⑵、不需要连续外存空间
⑶、不需要事先知道文件长度
缺点:
⑴、只适合于顺序访问,不适合随机访问(低效)
⑵、可靠性差(中间任何指针出错,整个链断开)
⑶、数据区大小不等于2的次幂(指针占用数据区空间),不利于与内存页对应
2. 显式链接
将用于链接文件各盘块的指针,显式地存放在一张链接表(文件分配表FAT)中
优点:
⑴、FAT占空间小,可以调入内存
⑵、查找速度快,适合随机存取
同样不存在“碎片”,不需要连续外存空间不需要事先知道文件长度
缺点:
⑴、FAT需要占用外存空间
对于1GB的硬盘,若每个盘块为512B,则有2M个盘块,每个盘块需要用21位(约3B)指示,共需要6MB外存空间
为了减少FAT占用外存的空间,分配单位可采用簇(1簇=8KB),此时,1GB硬盘需要3/8MB
⑵、FAT需要占用较大内存空间
对于大的硬盘,每次只调取部分FAT进入内存
⑶、不能高效直接存取
四、索引分配
将分配给文件的盘块号集中在一起
按顺序放入索引块中
1. 单级索引分配
每个文件先分配一个索引块
当已分配的索引块装不下所有盘块号时,再分配新的索引块
举例:
优点:
方便直接存取
缺点:
⑴、较FAT方式占用更多的外存空间(索引块装不满)
⑵、当文件较大时,单级索引分配效率仍较低
2. 两级索引分配
由文件指示的盘块(索引块)中存放的信息是下一级索引块的盘块号
缺点:
⑴、较FAT和单级索引分配需要更多外存空间
⑵、当文件特别大时,不能分配外存空间
⑶、当盘块大小为1KB,每个盘块号占4B时,最大文件空间为:256x256=64K盘块=64MB
优点:
对较大的文件,仍可以采用直接存取
3. 混合索引分配
将直接分配、单级索引分配、二级索引分配、三级索引分配等多种方式结合起来进行外存分配的方法
假设每块(簇)外存空间大小为4KB
每个盘块地址为4B(32位,4G盘块)
-
直接地址(直接分配)
⑴、设置10个直接地址项,直接存放盘块号
⑵、直接地址最大文件为:10x4KB = 40KB -
一次间接地址(单级索引分配)
⑴、当文件大于40KB时,采用一次间接地址(即采用单级索引分配)
⑵、一次间接地址最大文件为:40KB + 1K(块)x4KB = 40KB + 4MB = 4.04MB -
二次间接地址(二级索引分配)
⑴、当文件大于4.04MB时,采用二次间接地址(即采用二级索引分配)
⑵、二次间址最大文件为:4.04MB + 1Kx1Kx4KB = 4.04MB + 4GB -
三次间接地址(三级索引分配)
⑴、当文件大于4GB时,采用三次间接地址(即采用三级索引分配)
⑵、三次间址最大文件为:4GB + 1Kx1Kx1Kx4KB = 4GB + 4TB
练习
在一操作系统中采用索引分配方式为文件分配外存,假定盘块大小为4KB,每个盘块号占用4个字节,请分别计算使用一级索引、二级索引、三级索引支持的文件最大长度。
解:
盘块数量:1024块
一级索引:
1024
∗
4
K
B
=
4
M
B
1024*4KB=4MB
1024∗4KB=4MB
二级索引:
1024
∗
1024
∗
4
K
B
=
4
G
B
1024*1024*4KB=4GB
1024∗1024∗4KB=4GB
三级索引:
1024
∗
1024
∗
1024
∗
4
K
B
=
4
T
B
1024*1024*1024*4KB=4TB
1024∗1024∗1024∗4KB=4TB
范例一
一个文件系统中有一个20MB大文件和一个20KB小文件,当分别采用连续、链接、二级索引和混合索引分配方案时(每块大小为4096B,每块地址用4B表示),问:
- 各文件系统管理的最大的文件是多少?
- 每种方案对大、小二文件各需要多少专用块来记录文件的物理地址(说明各块的用途) ?
- 如需要读大文件前面第5.5KB和后面(16M+5.5KB)信息,则每个方案各需要多少次盘I/O操作?
解:
-
各文件系统管理的最大的文件
连续分配: 不受限制,可大到整个磁盘文件区。
链接分配: 不受限制,可大到整个磁盘文件区。
二级索引分配: 由于盘块大小为4KB,每个地址用4B表示,一个盘块可存1K个索引表目,二级索引可管理的最大文件容量为4KB×1K×1K=4GB,如要管理更大的文件需采用三索引,它可管理4TB大小文件。
混合索引分配: 可管理的最大文件为40KB+4MB+4GB+4TB。 -
每种分配方案对20MB大文件和20KB小文件各需要多少专用块来记录文件的物理地址?
连续分配: 对大小二个文件都只需在文件控制块FCB中设二项,一是首块物理块块号,另一是文件总块数,不需专用块来记录文件的物理地址。
链接分配: 对大小二个文件都只需在文件控制块FCB中设二项,一是首块物理块块号,另一是文件总块数;同时在每块存文件的物理块中设置存贮下一块块号的指针。
二级索引: 对大小文件都固定要用二级索引,对20KB小文件,用一块作第一级索引,用另一块作二级索引,共用二块专用物理块作索引块,对于20MB大文件,用一块作第一级索引,用5块作第二级索引,共用六块专用物理块作索引块。
UNIX的混合分配: 对20KB小文件只需在文件控制块FCB的i_addr[13]中使用前5个表目存放文件的物理块号,不需专用物理块。对20MB大文件,FCB的i_addr[13]中使用前10个表目存放大文件前10块物理块块号,用一级索引块一块保存大文件接着的1K块块号,还要用二级索引存大文件以后的块号,二级索引使用第一级索引1块,第二级索引4块。总共也需要6块专用物理块来存放文件物理地址。 -
为读大文件前面第5.5KB和后面(16M+5.5KB)信息需要多少次盘I/O操作?
连续分配: 为读大文件前面和后面信息都需先计算信息在文件中相对块数,再计算物理块号=文件首块号+相对逻辑块号,最后化一次盘I/O操作读出该块信息。
链接分配: 为读大文件前面5.5KB的信息,只需先读一次文件头块得到信息所在块的块号,再读一次第1号逻辑块得到所需信息。而读大文件后面16MB+5.5KB的信息,要先把该信息所在块前面块顺序读出,共化费4097次盘I/O操作,才能得到信息所在块的块号,最后化一次I/O操作读出该块信息。所以总共需要4098次盘I/O才能读取(16MB+5.5KB)字节信息。
二级索引: 为读大文件前面和后面信息的操作相同,首先进行一次盘I/O读第一级索引块,然后根据它的相对逻辑块号计算应该读第二级索引的那块,第二次根据第一级索引块的相应表目内容又化一次盘I/O读第二级索引块,得到信息所在块块号,再化一次盘I/O读出信息所在盘块,这样读取大文件前面或后面信息都只需要3次盘I/O操作。
UNIX混合分配: 为读大文件前面5.5KB信息,先根据它的相对逻辑块号,在内存文件控制块FCB的i_addr[13]第二个表目中读取信息所在块块号,而只化费一次盘I/O操作即可读出该块信息。为读大文件后在(16MB+5。5KB)信息,先根据它的相对逻辑块号判断它是在UNIX二级索引管理范围,先根据i_addr[11]内容化一次盘I/O操作读出第一级索引块,再根据第一级索引块表目内容再化费一次盘I/O操作,读出第二级索引块,就可以得到信息所在块块号,最后化一次盘I/O读出信息所在盘块,这样总共需要3次盘I/O操作才能读出文件后面的信息。
为清楚起见将结果列表。从上分析可知UNIX混合分配方案既可以管理很大的文件,又能花费较小的代价管理并快速存取小文件。
范例二
有一FAT如下所示,其中-1表示文件结束,-2表示盘块坏,0表示盘块空,问该FAT表中有几个文件?每个文件分别存在哪些盘块?在存入一个2盘块的文件,FAT内容如何?
解:
111
6.4 目录管理
一、目录
- 目录是将文件FCB组织在一起的数据结构
- 目录管理是文件系统中最主要的任务之一
- 目录有时也可看成一个文件,称目录文件
功能:
实现按名存取:用户只需要提供文件名,即可对文件进行相应操作
提高对目录的检索速度
文件共享:多用户可共享同一个文件
允许文件重名:不同用户可以使用相同的文件名
二、文件控制块(FCB)
- FCB是描述和控制文件的数据结构,包括文件名等基本信息,存取控制信息和使用信息
- 文件系统依据FCB对文件进行操作
- FCB与文件一一对应
- FCB是一个目录项
- FCB的集合组成目录
- 基本信息
文件名:文件标识
文件物理位置:指示文件在外存上的存储位置
文件的逻辑结构
文件的物理结构 - 存取控制信息
文件主的存取权限(只读、读写、执行等)
核准用户的存取权限
一般用户的存取权限 - 使用信息
文件的建立时间
最后一次修改(或访问)时间
当前使用信息 - FCB结构
6. MS文件系统 FCB结构- 共32字节
- 共32字节
三、索引结点
- 当文件名与FCB其它描述信息一起存放时,需要占用较多地方
- 在对文件进行操作时,首先只需要按名查找
- 如果将文件名与FCB其它描述信息分开存放,则可以节省查找文件的开销
- 将FCB其它描述信息组合在一起,形成一个索引结点的数据结构
- 在Unix OS中,采用索引结点结构
四、单级目录
- 整个OS中,建立一张目录表
- 每个文件分配一个目录项(FCB)
- 状态位:目录项是否已被使用(1-使用,0-未使用)
在MS-Dos中,如果文件名第一个字母为“0xE5”表示未使用
- 创建新文件
- 查看目录,是否有同名文件
- 没有,则找出一空目录项(状态位为0),将新文件名、物理地址和其它属性写入目录项,并置状态位为1
- 删除旧文件
- 查找文件对应的目录项
- 回收外存空间
- 将状态位置0
- 优点
- 简单
- 缺点
- 查找速度慢
- 不允许重名
- 不便于实现文件共享
五、两级目录
-
在系统中,建立一个主文件目录(MFD)
-
为每个用户建立一个单独的用户文件目录(UFD)
-
每个UFD是MFD的一个目录项
-
相对单级目录,两级目录有以下优点:
1、提高了检索目录的速度
2、在不同的用户目录中,可以同名
3、不同用户可共享文件 -
两级目录仍然存在的问题:
用户不能继续建立自己新的子目录
六、树型目录结构
具有三级或三级以上的目录结构称为树型结构的目录
树型目录结构中,允许在任何一级子目录中,再创建新的子目录
1. 树型目录结构举例
从路径解析来看目录内容
显然路径解析的使用频率高,因此效率很重要
树状目录的完整实现
2. 路径
- 从根目录到任何文件之间,只有唯一一条通路
- 将根目录到文件之间经过的所有目录及文件名,用“/”符号连接起来,构成该文件的路径名
- 每个文件,只有唯一的路径名(如B/B/L,C/I/L)
3. 当前目录
- 如果每个文件的访问都从根目录开始,非常麻烦
- 用户对文件的操作一般会在一个时间段集中在一个目录中进行,将这个目录设置为工作目录(当前目录)
- 对文件的访问,如果没有路径名,则默认为在当前目录下操作
4. 增加目录
- 用户可以根据需要,增加新目录
- 增加新目录,可以使用文件系统命令(如MS-DOS中的md命令,或UNIX中的mkdir命令等)或系统调用
5. 删除目录
用户可以根据需要,删除旧目录
- 不删除非空目录
- 如果目录中有文件(或子目录),不能删除
- 删除非空目录
- 不管目录中是否有文件或子目录,都进行删除(比较危险)
七、目录查询技术
- 按名查询文件FCB或索引结点
- 依据FCB或索引结点中的文件的物理地址(盘块号),换算成文件在磁盘上的物理位置
- 启动磁盘驱动程序,将所需要文件读到内存中
6.5 文件存储空间的管理
一、空闲表法
- 空闲表法属于连续分配方式
- 空闲表法指为外存上的所有空闲区建立一张空闲表
空闲盘区的分配算法:
1、首次适应算法
2、循环首次适应算法
3、最佳适应算法
4、最坏适应算法
空闲盘区的回收算法:对邻接盘区进行拼接
- 空闲表法主要应用于对换区的分配操作中
- 当文件(1-4个块)较小时,为了加快磁盘I/O,也尽量分配连续的盘块
二、空闲链表法
1. 空闲盘块链表法
-
将磁盘上的所有空闲存储空间,以盘块为基本单位连成一个链表
-
用户需要磁盘空间时,从链表首部分配盘块
-
当用户释放磁盘空间时,将释放的盘块挂在链表尾部
-
优点:
盘块分配和回收操作简单 -
缺点:
空闲盘块链表可能很长
空闲盘块链表中间任何指针出错,导致其后所有空闲盘块丢失
2. 空闲盘区链表法
-
将磁盘上的所有空闲盘区(多个连续盘块)连成一个链表
-
用户需要磁盘空间时,沿链表采用首次适应算法,分配盘区
-
当用户释放磁盘空间时,将释放的盘区插入链表适应位置(可能需要拼接)
-
优点:
空闲盘区链表可能较短 -
缺点:
盘区分配和回收操作比较复杂
空闲盘区链表中间任何指针出错,导致其后所有空闲盘区丢失
3. 位示图法
-
位示图指利用二进制的一位来表示磁盘中一个盘块的使用情况
-
如当值为0时,表示空闲盘块
当值为1时,表示已分配盘块
-
盘块的分配
1、扫描位示图,找到一个或组值为0的盘块
2、将扫描位置信息,变换为盘块号(n)
如第 i i i字节,第 j j j位,则 n = i x 8 + j n = ix8 + j n=ix8+j
3、修改位示图,使新分配盘块的对应位为1 -
盘块的回收
1、将盘块号(n),变换为位置信息
i = n / 8 ; j = n m o d 8 i = n / 8; j = n mod 8 i=n/8;j=nmod8
2、修改位示图,使第 i i i字节、第 j j j位为0 -
优点:
1、位示图占用空间较小,可以调入内存
2、分配和回收操作简单、有效 -
位示图法常用于微型机和小型机中,如MS OS系统中
四、成组链接法
- 将空盘块每N(如100)个组成一组
- 将空闲盘块组连成链表
- 空闲盘块号栈:存放当前可用的一组空闲盘块号
- 盘块的分配
1、若s.free=1,则将栈底盘块号所对应的盘块(内容)调入空闲盘块号栈,并将该盘块分配出去
2、否则,直接将栈底盘块号所对应的盘块分配出去,并将s.free递减1
- 盘块的回收
1、若s.free=N,则将空闲盘块栈内容写入新释放的盘块中,并使s.free=1,且将该盘块作为栈底
2、否则,s.free递增1,将该盘块作为栈底
6.6 文件共享和文件保护
一、绕弯路文件共享方法
- 每个用户工作的目录为当前目录
- 如果文件不在当前目录,则从当前目录开始,向上(父目录)或向下(子目录)查找
- 如当前目录为PA要查找
JBK中的B文件,可采用
cd …\D\B
二、基于索引结点的共享方式
- 目录项只包含文件名及指向索引结点的指针
- 共享同一文件的不同目录项,文件名不同,但指向索引结点的指针相同
- 设置链接计数器,指示共享目录项数目
举例
用户Zhao创建一个文件A,用户Qian用文件名B共享该文件,用户Zhao删除文件A后的情况
- 优点:
共享同一文件的任意用户对文件的修改,其它都可以共享 - 缺点:
创建共享文件的用户,即使已删除其文件,但如果还有其它用户共享该文件,则文件属主不变(创建用户必须继续为该文件付费)
三、利用符号链实现文件共享
-
用户共享文件时,采用符号链(Link)
-
符号链是指向文件所在目录项位置的指针(如同一系统中的路径名,或网络中其它主机IP地址及路径名)
-
文件主或文件不知道有多少个用户在共享文件
-
文件主可以完全删除共享文件
-
共享文件的用户在访问一个已删除的共享文件时,会出访问错误
-
优点:
可以共享网络上任何地点的共享文件 -
缺点:
访问速度较慢(沿链查找)
6.7 磁盘容错技术
- 目标:
磁盘某部分出现缺陷或故障时,
1、磁盘仍能正常工作
2、不致造成数据的错误和丢失
一、第一级容错技术(SFT-I)
- SFT-I主要防止出现磁盘表面错误时,数据的丢失
- SFT-I在一般的磁盘存储系统中都会使用
1. 双份目录和双份文件分配表(FAT)
- 目录和文件分配表是文件系统中最重要的数据
- 在磁盘的不同地方,分别存放两份目录和文件分配表
- 操作一般在主目录和主FAT上进行,并定期将修改的数据存入备用目录和FAT中
- 当磁盘出现损坏,启动备用目录和备用FAT,并新建一份目录和FAT
- 每次开机,检查两份目录和FAT的一致性
2. 热修复重定向
- 在磁盘中建立热修复区
- 当出现盘块损坏时,将数据写入热修复区
- 每次对损坏盘块的访问,都自动转为对应热修复区中盘块的访问
3. 写后读校验
- 将从内存某缓冲区A写入盘块,立即读出该盘块的内容至内存缓冲区B
- 比较A和B两个缓冲区的内容是否一致
- 若不一致,再做一次;若仍然不一致,则认为盘块损坏,将内容写入热修复区
二、第二级容错技术(SFT-II)
- SFT-II主要解决磁盘驱动器发生故障时,数据无法正常读写的问题
- 相对SFT-I,SFT-II是高一级的容错技术
1. 磁盘镜像
- 将两个磁盘驱动器连在一个磁盘控制器上
- 每次向主磁盘写入的数据,同样也向备份磁盘写入,并写入相同的位置
- 主磁盘和备份磁盘中的所有数据完全相同
- 当主磁盘驱动器损坏时,启用备份磁盘
2. 磁盘双工
- 将两个磁盘驱动器分别接在两台磁盘控制器上
- 每次向主磁盘写入的数据,同样也向备份磁盘写入,并写入相同的位置
- 主磁盘和备份磁盘中的所有数据完全相同
- 当主磁盘系统损坏时,启用备份磁盘系统
- 优点:
具有容错能力 - 缺点:
浪费严重(只有50%效率)
6.8 数据一致性控制
一、数据一致性问题
- 当数据同时被存放到不同的文件中时,如何保证对数据的修改在各文件中保持一致
- 文件的多个备份,如何保持一致
- 共享数据的顺序修改
二、事务
1. 事务
- 事务是用于访问和修改各种数据项的一个程序单位
- 事务操作具有“原子性”,即要么数据都进行修改,要么数据都不进行修改
2. 事务记录
- 事务记录记录事务运行时数据项修改的全部信息
- 事务记录必须存放在稳定存储器中
- 事务记录包括:
⑴、事务名 ⑵、数据项名
⑶、旧值 ⑷、新值
3. 恢复算法
- Undo(Ti):把所有被事务Ti修改过的数据,恢复为旧值
- Redo(Ti):把所有需要被事务Ti修改的数据,置为新值
- 事务通过事务记录和恢复算法,实现数据一致性
三、并发控制
1. 利用互斥锁实现“顺序性”
- 每个对象设置一把“锁”
- 对对象的访问,必须先获得“锁”(关锁)
- 访问完对象,释放“锁”(开锁)
2. 利用信号量机制实现“顺序性”
- 利用互斥信号量(Mutex)实现对象的顺序访问
- 利用一般信号量,实现访问者情况的记录
四、磁盘块号的一致性
-
空闲盘块:
通过空闲盘块管理机制实现 -
数据盘块管理
通过目录及FAT(或索引节点)实现 -
正常情况下,空闲盘块与数据盘块互补,即盘块要么是空闲盘块,要么是数据盘块
-
空闲盘块计数器
通过空闲盘块管理,记录空闲盘块的情况,每个盘块对应一个计数器(1-空闲盘块,0-非空闲盘块) -
数据盘块计数器
通过FAT(或索引节点)记录数据盘块的情况,每个盘块对应一个计数器(1-数据盘块,0-非数据盘块) -
正常情况:
-
丢失盘块
将第2块放入空闲盘块中 -
空闲盘块重复出现
从空闲盘块管理机制中删除一个3号盘块 -
数据盘块重复出现
这是一个严重错误,必须立即报告并修复
练习
设空闲存储空间管理的成组链接法中,每5块为一组,当前空盘块号栈的内容从S.free开始依次为3,1,2,3。试写出:①回收第4块;②再回收第7,8块;③分配1块;④分配3块;
以上分配和回收过程。
(写明每次操作的空闲盘块号栈内容及被改变了内容的空闲盘块号及其具体内容)