本系列博客重点在深圳大学操作系统课程的核心内容梳理,参考书目《计算机操作系统》(有问题欢迎在评论区讨论指出,或直接私信联系我)。
梗概
本篇博客主要介绍操作系统第七章文件管理和第八章磁盘储存器的管理的相关知识。
目录
一、文件与文件系统
二、文件的逻辑结构
三、目录管理
1.文件控制块(FCB)
2.索引结点
3. 各种文件目录
3.1 单级文件目录
3.2 两级目录
3.3 树形结构目录
3.4 目录查询技术
四、外存分配方法
1.连续外存分配
2.链接分配
3.索引分配
4.外存分配例题
五、文件存储空间管理
1.空闲表法
2.空闲链表法
2.1 空闲盘块链表法
2.2 空闲盘区链表法
3.位示图法
4.成组链接法 - 重点
六、文件共享
1.绕弯路文件共享方法->有向无循环图DAG
2.索引结点的共享方式
3.符号链实现文件共享
七、磁盘容错技术(SFT)
1.第一级容错技术(SFT-Ⅰ)
2.第二级容错技术(SFT-Ⅱ)
3.第三级容错技术(SFT-Ⅲ)
八、数据一致性控制
1.事务
2.并发控制
3.磁盘块号(重复数据)的数据一致性
操作系统对系统的软件资源(不论是应用软件和系统软件)的管理都以文件方式进行,承担这部分功能(系统资源管理)的操作系统称为文件系统。本章介绍文件的逻辑组织和在文件存储器上的物理组织;实现“按名存取”和文件共享、保护的文件系统目录的结构和管理;文件存储空间分配和回收算法和文件系统的磁盘格式;文件系统的安全性。
一、文件与文件系统
文件系统的管理功能是将其管理的程序和数据通过组织一系列文件实现的,可以把数据组分为数据项、记录、文件三级。
- 数据项:最低级的数据组织形式,基本数据项用于描述一个对象某种属性的字符集(如学号),组合数据项(组项)为若干基本数据项的集合,如工资(基本+奖励)
- 记录:一组相关数据项的集合,用于描述一个对象在某方面的属性,用关键字Key(一个或几个数据项)来唯一标识一个记录
- 文件:具有文件名的一组相关信息的集合,如源程序、可执行的二进制代码程序、一批数据、一个表格或一篇文章等
对于文件,其具有以下几个基本描述:
文件具有可保存性:便于信息的长期保存
用户按名存取文件:便于用户对信息的存取,而不需要知道文件存放在磁盘的具体位置
文件主要有无结构文件(流式文件)和有结构文件
1、有结构文件:
有结构文件由记录组成(可定长可变长)。
2、无结构文件:
无结构文件直接由字符(或Byte)组成,可看作是记录式文件的一个特例,即只含一个无标识记录的文件
流式文件便于OS管理,也便于用户灵活组织文件的内部逻辑结构 Unix, DOS, windows等OS都采用流式文件。
而对于文件系统,OS中实施文件管理的机构称为文件管理系统,简称文件系统,简介如下:
1、文件系统功能:
- 实施文件存储空间的分配与回收(即磁盘管理)
- 实现文件名到文件空间的映射
- 提供文件共享能力以及保护与保密措施
- 实现用户要求的各种文件操作
2、文件系统接口:
- 命令接口:用户与文件系统之间交互的接口,如查找文件(dir/ls)等
- 程序接口:用户程序与文件系统的接口,通过系统调用来实现,如open, read, write, close等
二、文件的逻辑结构
文件的逻辑结构:即文件组织,是用户可以直接处理的数据及其结构
文件的物理结构:即文件的存储结构,是文件在外存上的存储组织形式
而对于文件的逻辑结构类型,按文件是否有结构分为两类(有 or 无),按文件组织方式分为三类(顺序、索引、索引顺序)
有结构文件:
- 顺序文件:顺序排列记录,可变长可定长
- 索引文件:为可变长记录建立一索引表,为每个记录设一表项,加速检索
- 索引顺序文件:为一组记录的第一个记录建一个表项
无结构文件:
- 流式文件
1、顺序文件:
在顺序文件的记录中可以按各种不同顺序排列,一般有两种:
(1)串结构:各记录之间的顺序通常按存入时间先后排序,与关键字无关
(2)顺序结构:记录按用户指定关键字(词),如正整数id排列
对于顺序文件的读/写,定长记录直接定位,变长记录中每个记录中有该记录长度,逐个记录顺序读/写,最佳应用场景是对文件中记录批量存取。
- 缺点:对单个记录读/写困难(特别是对变长记录),且增加或删除一个记录困难
2、索引文件:
对于定长记录文件,即使是顺序文件也很容易通过计算实现随机存取,但变长很难。
为可变长记录文件建立一张索引表,索引表按记录键排序,其本身构成一个定长记录的顺序文件
Tips:为实现不同用户对于不同目的的检索,可以对一个文件建立多个索引表(对应了不同关键字检索)。
- 优点:提高了对文件的查找速度,方便用户插入与删除记录。
- 缺点:除了索引表的建立,每个记录还需要一个索引项,增大了开销。
3、索引顺序文件:
将可变长记录文件中的记录分为若干个组,为每组第一个记录建立一张索引项,继而组成一个索引表,索引表按记录键排序,其本身构成一个定长记录的顺序文件
Tips:对于比较大的文件,可以建立多级索引。
而以上三种文件的查找速度比较如下:
三种文件的查找速度比较:100W条记录
顺序文件:平均查找需要50W(N/2)次
索引文件:按索引方法查找,额外需要100W个索引的空间
索引顺序文件:
一级索引(N开方)平均查找1000次
- 每100条记录为1个组,共有10000个组,即有10000个组索引
- 每100个组索引为1群,共有100个群,即有100个群索引
- 建立二级索引表((3/2)N开立方)
- 查找:群索引表—组索引表—组记录表
- 50+50+50=150次
三、目录管理
在现代计算机系统中,都要存储大量的文件,为实施有效管理,必须妥善组织,主要通过文件目录实现。
目录是将文件FCB组织在一起的数据结构,有时也可看成一个文件,称目录文件,目录管理主要需求如下:
- 实现按名存取:用户只需要提供文件名,即可对文件进行相应操作
- 提高对目录的检索速度
- 文件共享:多用户可共享同一个文件
- 允许文件重名:不同用户可以使用相同的文件名
1.文件控制块(FCB)
FCB是描述和控制文件的数据结构,包括文件名等基本信息,存取控制信息和使用信息
文件系统依据FCB对文件进行操作,FCB与文件一一对应,是一个目录项,FCB的集合组成目录
1、基本信息:
- 文件名:文件标识
- 文件物理位置:指示文件在外存上的存储位置
- 文件的逻辑结构
- 文件的物理结构
2、存取控制信息:
- 文件主的存取权限(只读、读写、执行等)
- 核准用户的存取权限
- 一般用户的存取权限
3、使用信息:
- 文件的建立时间
- 最后一次修改(或访问)时间
- 当前使用信息
4、FCB结构:
5、MS文件系统:
2.索引结点
当文件名与FCB其它描述信息一起存放时,需要占用较多地方
在对文件进行操作时,首先只需要按名查找。如果将文件名与FCB其它描述信息分开存放,则可以节省查找文件的开销
FCB太大,单个盘块存储的FCB数量过少,导致文件查找需要访问多个盘块
FCB为64B,盘块为1KB,单个盘块仅存16个FCB
若一个目录中包含640个文件,则需要40个盘块, 平均查找需要访问20个盘块
- 索引结点的引入:将文件描述信息存放在索引结点中 文件名与索引结点指针组成目录表,方便查找
UNIX系统中目录项占用16个字节:14B用于文件名,2B用于指针
1KB盘块存放64个目录项 上例只需要10个盘块, 平均查找访问5个盘块
核心:将FCB其它描述信息组合在,形成一个索引结点的数据结构(Unix OS采用索引结点结构)
3. 各种文件目录
不同的目录形式对应不同的文件系统管理方式,有以下几种常见的文件目录与目录查询。
3.1 单级文件目录
整个OS中,建立一张目录表 每个文件分配一个目录项(FCB)
状态位:目录项是否已被使用(1-使用,0-未使用) 在MS-Dos中,如果文件名第一个字母为“0xE5”表示未使用
1、创建新文件:
查看目录,是否有同名文件 没有,则找出一空目录项(状态位为0),将新文件名、物理地址和其它属性写入目录项,并置状态位为1
2、删除旧文件:
查找文件对应的目录项 回收外存空间 将状态位置0
- 优点:简单
- 缺点:查找速度慢 不允许重名 不便于实现文件共享
3.2 两级目录
在系统中,建立一个主文件目录(MFD),为每个用户建立一个单独的用户文件目录(UFD),每个UFD是MFD的一个目录项
- 优点:相对单级目录,两级目录有以下优点:
1、提高了检索目录的速度(提高n/2倍) 2、在不同的用户目录中,可以同名 3、不同用户可用不同文件名访问系统同一共享文件
- 缺点:
1、用户不能继续建立自己新的子目录 2、当多用户协同开发时,隔离成为缺点,用户间文件共享不方便
3.3 树形结构目录
现代OS中,最通用且最实用的文件目录是树形结构目录,可以明显提高对目录的检索速度与文件系统的性能。
具有三级或三级以上的目录结构称为树型结构的目录。树型目录结构中,允许在任何一级子目录中,再创建新的子目录
1、路径:
从根目录到任何文件之间,只有唯一一条通路
将根目录到文件之间经过的所有目录及文件名,用“/”符号连接起来,构成该文件的路径名
每个文件,只有唯一的路径名(如B/B/L,C/I/L)
2、当前目录:
如果每个文件的访问都从根目录开始,非常麻烦
用户对文件的操作一般会在一个时间段集中在一个目录中进行,将这个目录设置为工作目录(当前目录)
对文件的访问,如果没有路径名,则默认为在当前目录下操作
3、增加目录:
用户可以根据需要,增加新目录
增加新目录,可以使用文件系统命令(如MS-DOS中的md命令,或UNIX中的mkdir命令等)或系统调用
4、删除目录:
用户可以根据需要,删除旧目录
1、不删除非空目录 如果目录中有文件(或子目录),不能删除
2、删除非空目录 不管目录中是否有文件或子目录,都进行删除(比较危险)
3.4 目录查询技术
当用户要访问一个已存文件,一般流程如下:
- 按名查询文件FCB或索引结点
- 依据FCB或索引结点中的文件的物理地址(盘块号),换算成文件在磁盘上的物理位置
- 启动磁盘驱动程序,将所需要文件读到内存中
主要查找方法有线性检索法与Hash方法两种。
线性检索法查找/usr/ast/mbox样例如下:
而对于Hash方法,核心是建立Hash索引文件目录查询,非常快。
四、外存分配方法
外存空间分配的目标是:提高外存利用率和文件的访问速率
不同的外存分配方法(组织方式)会形成不同的文件物理结构,一般分为三种:
(1)连续组织方式:为每个文件分配一片连续的磁盘空间,形成顺序文件
(2)链接组织方式:分配不连续的磁盘空间,并通过链接指针串联,形成链接式文件
(3)索引组织方式:对文件采取索引组织方式,形成索引文件结构
Tips:现代OS中,可以对文件采取多种类型的组织形式。
1.连续外存分配
连续外存分配指为文件分配一组相邻接的盘块(中间可以有空)
- 优点:顺序访问容易,一次大批量数据的访问速度较快
- 缺点:要求有连续的外存空间(同样存在“碎片”问题) ,且必须事先知道文件的长度,且不能灵活地删除与插入
2.链接分配
将属于同一文件的盘块,链接在一起进行分配称链接分配(分配盘块可以不连续),解决了连续外存分配的缺点。
1、隐式链接:
将链接指针直接放在盘块数据区中
Tips:找到文件得先搜完前面的块,具体见第四节例题
- 优点: ⑴、不存在“碎片” ⑵、不需要连续外存空间 ⑶、不需要事先知道文件长度
- 缺点: ⑴、只适合于顺序访问,不适合随机访问(低效) ⑵、可靠性差(中间任何指针出错,整个链断开) ⑶、数据区大小不等于2的次幂(指针占用数据区空间),不利于与内存页对应
2、显示链接:
将用于链接文件各盘块的指针,显式地存放在一张链接表(文件分配表FAT)中 (-1则是指针尾)
- 优点: ⑴、FAT占空间小,可以调入内存 ⑵、查找速度快,适合随机存取 同样不存在“碎片”,不需要连续外存空间不需要事先知道文件长度
- 缺点: ⑴、FAT需要占用外存空间(分配单位可采用簇,减少占用)⑵、FAT需要占用较大内存空间,对于大的硬盘,每次只调取部分FAT进入内存 ⑶、不能高效直接存取
3.索引分配
链接组织方式虽解决了连续存储分配存在的问题,但又出现了①不能高效的直接存取②指针/FAT占用大量空间两大问题,故索引分配出现了,因为实际上调某个文件的盘号编号进内存即可,而非整个FAT(FAT装的是所有文件的盘块号链接)。
核心:将分配给文件的盘块号集中在一起,按顺序放入索引块中
1、单级索引分配:
每个文件先分配一个索引块,当已分配的索引块装不下所有盘块号时,再分配新的索引块
- 优点:方便直接存取
- 缺点: ⑴、较FAT方式占用更多的外存空间(索引块装不满) ⑵、当文件较大时,单级索引分配效率仍较低
1、两(多)级索引分配:
由文件指示的盘块(索引块)中存放的信息是下一级索引块的盘块号
- 优点:对较大的文件,仍可以采用直接存取
- 缺点:较FAT和单级索引分配需要更多外存空间,当文件特别大时,不能分配外存空间
3、混合(增量式)索引分配:
为能较全面地照顾到各种作业,可以采取多种组织方式组合来构成文件的物理结构,文件最大长度为各组织方式最大长度叠加。
如果每个盘块大小(外存空间大小)4KB,每个盘块地址4B(32位,4G盘块):
故可支持4KB/4B = 1K个盘块号,每一级索引存储
- 直接地址(分配):对小文件设置10个直接地址项,直接存放盘块号,最大文件为:10x4KB = 40KB
- 一次间接地址(单级索引分配) ⑴、当文件大于40KB时,采用一次间接地址,存放了1K个盘块号 ⑵、一次间址最大文件为:40KB + 1K(块)x4KB = 40KB + 4MB = 4.04MB
- 二次间接地址(二级索引分配) ⑴、当文件大于4.04MB时,采用二次间接地址,存放了1K个盘块号 ⑵、二次间址最大文件为:4.04MB + 1Kx1Kx4KB = 4.04MB + 4GB
- 三(多)次间接地址(多级索引分配) ⑴、当文件大于4GB时,采用三(多)次间接地址,每次增加1K个盘块号 ⑵、三次间址最大文件为:4GB + 1Kx1Kx1Kx4KB = 4GB + 4TB
4.外存分配例题
一个文件系统中有一个20MB大文件和一个20KB小文件,当分别采用连续、链接、二级索引和混合索引分配方案时(每块大小为4096B,每块地址用4B表示),问:
1.各文件系统管理的最大的文件是多少?
2.每种方案对大、小二文件各需要多少专用块来记录文件的物理地址(说明各块的用途) ?
3.如需要读大文件前面第5.5KB和后面(16M+5.5KB)信息,则每个方案各需要多少磁盘I/O操作?
块数 = 4K / 4B = 1K
结果综述如下图,UNIX混合分配方案既可管理很大的文件,又能花费较小代价快速存取文件。
1.各文件系统管理的最大文件如下:
- 连续:不受限,可大到整个磁盘文件区
- 链接:同上
- 二级索引:1K * 1K * 4KB = 4GB
- 混合索引分配:UNIX混合分配 40KB+4MB+4GB+4TB
2.解答如下:
- 连续:对大小二个文件都只需在文件控制块FCB中设二项,一是首块物理块块号,另一是文件总块数,不需专用块来记录文件的物理地址
- 链接:对大小二个文件都只需在文件控制块FCB中设二项,一是首块物理块块号,另一是文件总块数;同时在每块存文件的物理块中设置存贮下一块块号的指针。
- 二级索引:对大小文件都固定要用二级索引,对20KB小文件,用一块作第一级索引,用另一块作二级索引,共用二块专用物理块作索引块,对于20MB大文件,用一块作第一级索引,用5块作第二级索引,共用六块专用物理块作索引块。
- 混合索引分配:对20KB小文件只需在文件控制块FCB的i_addr[13]中使用前5个表目(直接地址项)存放文件的物理块号,不需专用物理块。对20MB大文件,FCB的i_addr[13]中使用前10个表目存放大文件前10块物理块块号,用一级索引块一块保存大文件接着的1K块块号,还要用二级索引存大文件以后的块号,二级索引使用第一级索引1块,第二级索引4块。总共也需要6块专用物理块来存放文件物理地址。
Tips:一块一级索引专用块 = 4MB
3.分析如下:
5.5KB / 4KB = 第1块 16MB + 5.5KB/ 4KB = 4097块
- 连续:为读大文件前面和后面信息都需先计算信息在文件中相对块数,再计算物理块号=文件首块号+相对逻辑块号,最后花一次盘I/O操作读出该块信息,即每次读信息花一次I/O操作。
- 链接:为读大文件前面5.5.KB的信息,只需先读一次文件头块得到信息所在块的块号,再读一次第1号逻辑块得到所需信息。而读大文件后面16MB+5.5KB的信息,要先把该信息所在块前面块顺序读出,共花4097次盘I/O操作,才能得到信息所在块的块号,最后花一次I/O操作读出该块信息。所以总共需要4098次盘I/O才能读取(16MB+5.5KB)字节信息。
- 二级索引:每次读信息分别读一次一级索引与二级索引,再读信息,即每次读信息花三次I/O操作
- 混合索引分配:5.5KB属于小文件,故直接地址寻址(1次),16MB+5.5KB属于二级索引,所以3次。
详解参考:操作系统 错题记录_一个文件系统中有一个20mb大文件和一个20kb小文件,当分别采用连续、链接、i-node(_MarshaZheng的博客-CSDN博客
有一FAT如下所示,其中-1表示文件结束,-2表示盘块坏,0表示盘块空,问该FAT表中有几个文件?每个文件分别存在哪些盘块?在存入一个2盘块的文件,FAT内容如何?
3个-1 = 3个文件
放在哪些盘块 -> 从每个-1倒推
(1)A文件:2、9、1、3(2)B文件:11、5(3)C文件:7、4、12
还存入一个2盘块的文件,6中0变为10,10中0变为-1
五、文件存储空间管理
为了实现第四章中任何一种文件组织方式(外存分配方式),都需要为文件分配盘块,此时需要知道哪些盘块是可以分配的,同时还要提供盘块分配与回收的手段。这即是文件存储空间管理方法,常见的几种介绍如下。
1.空闲表法
空闲表法属于连续分配方式,空闲表法指为外存上的所有空闲区建立一张空闲表
- 空闲盘区的分配算法(类似内存的动态分配): 1、首次适应算法 2、循环首次适应算法 3、最佳适应算法 4、最坏适应算法
- 空闲盘区的回收算法:对邻接盘区进行拼接
内存分配上连续分配较少,但外存(文件)分配上,对于对换区(经常大批量存取)与小文件区,可使用空闲表法加快速度。
2.空闲链表法
将空闲盘拉成一条空闲链,根据构成链的基本单位不同,可以分为两种形式。
2.1 空闲盘块链表法
将磁盘上的所有空闲存储空间,以盘块为基本单位连成一个链表
用户需要磁盘空间时,从链表首部分配盘块。当用户释放磁盘空间时,将释放的盘块挂在链表尾部
- 优点:盘块分配和回收操作简单
- 缺点:空闲盘块链表可能很长 空闲盘块链表中间任何指针出错,导致其后所有空闲盘块丢失
2.2 空闲盘区链表法
将磁盘上的所有空闲盘区(多个连续盘块)连成一个链表
用户需要磁盘空间时,沿链表采用首次适应算法分配盘区。当用户释放磁盘空间时,将释放的盘区插入链表适应位置(可能需要拼接)
- 优点:空闲盘区链表可能较短
- 缺点:盘区分配和回收操作比较复杂 空闲盘区链表中间任何指针出错,导致其后所有空闲盘区丢失
3.位示图法
位示图指利用二进制的一位来表示磁盘中一个盘块的使用情况,01用于表示是否空闲。
Tips:磁盘上所有盘块都有一个二进制位与之对应,位示图的长x宽 = 总块数
- 对于其盘块的分配,流程如下:
1、扫描位示图,找到一个或组值为0的盘块
2、将扫描位置信息,变换为盘块号(n) 如第i字节,第j位,则 n = i x 8 + j
3、修改位示图,使新分配盘块的对应位为1
- 对于其盘块的回收,流程如下:
1、将盘块号(n),变换为位置信息 i = n / 8; j = n mod 8
2、修改位示图,使第i字节、第j位为0
- 优点:1、位示图占用空间较小,可以调入内存 2、分配和回收操作简单、有效
因此,位示图法常用于微型机和小型机中,如MS OS系统中
4.成组链接法 - 重点
空闲表法和空闲链表法都不适用于大文件系统,会使表或链表太长,UNIX系统中采用的是成组链接法,结合了上述两种方法的优点。
将空盘块每N(如100)个组成一组,将空闲盘块组连成链表
空闲盘块号栈:存放当前可用的一组空闲盘块号
Tips:s.free(0)是栈底,s.free(99)是栈满时的栈顶。
Tips:只有每个栈底对应的模块才是一个空盘块组,比如300对应301->400,299对应的就是一个空盘块。
- 对于盘块的分配,流程如下:
1、若s.free(N)=1(当前空闲盘块号栈已分配完),则将栈底盘块号所对应的盘块(内容)调入空闲盘块号栈,并将该盘块分配出去
2、否则,直接将栈顶盘块号所对应的盘块分配出去,并将s.free递减1
- 对于盘块的回收,流程如下:
1、若s.free=N,则将空闲盘块栈内容写入新释放的盘块中,并使s.free=1,且将该盘块作为栈底 2、否则,s.free递增1,将该盘块作为栈顶
详细分配与回收案例可见:
操作系统——成组链接法_LengDanRan的博客-CSDN博客
例题可见:实例讲解成组链接法_Ajay666的博客-CSDN博客
六、文件共享
在现代计算机系统中,必须提供文件共享手段,供多用户共享同一份文件,在系统中只需要保存一份副本,节省存储空间。
1.绕弯路文件共享方法->有向无循环图DAG
本方法为传统树形目录方法,文件共享性较差。
每个用户工作的目录为当前目录,如果文件不在当前目录,则从当前目录开始,向上(父目录)或向下(子目录)查找
如当前目录为PA要查找JBK中的B文件,可采用 cd ..\D\B
而有向无循环图DAG允许一个文件有多个父目录。
但DAG中子目录与多个父目录的链接是困难的,且在修改中也存在麻烦。
2.索引结点的共享方式
目录项只包含文件名及指向索引结点的指针,共享同一文件的不同目录项,文件名不同,但指向索引结点的指针相同,设置链接计数器,指示共享目录项数目
一个创建与删除的样例如下:
- 优点:共享同一文件的任意用户对文件的修改,其它都可以共享
- 缺点:创建共享文件的用户,即使已删除其文件,但如果还有其它用户共享该文件,则文件属主不变(创建用户必须继续为该文件付费)
3.符号链实现文件共享
用户共享文件时,采用符号链(Link),符号链是指向文件所在目录项位置的指针(如同一系统中的路径名,或网络中其它主机IP地址及路径名)
文件主或文件不知道有多少个用户在共享文件,文件主可以完全删除共享文件,共享文件的用户在访问一个已删除的共享文件时,会出访问错误
- 优点:可以共享网络上任何地点的共享文件
- 缺点:访问速度较慢(沿链查找)
七、磁盘容错技术(SFT)
未实现磁盘某部分出现缺陷或故障时,(1)磁盘仍能正常工作 (2)不致造成数据的错误和丢失,需要磁盘容错技术(SFT),从低到高分为1-3级。
1.第一级容错技术(SFT-Ⅰ)
SFT-I主要防止出现磁盘表面错误时,数据的丢失。
1、双份目录和双份文件分配表(FAT):
目录(文件名与文件数据、文件属性)和文件分配表(文件位置)是文件系统中最重要的数据
在磁盘的不同地方,分别存放两份目录和文件分配表
操作一般在主目录和主FAT上进行,并定期将修改的数据存入备用目录和FAT中 当磁盘出现损坏,启动备用目录和备用FAT,并新建一份目录和FAT
每次开机,检查两份目录和FAT的一致性
2、热修复重定向:
在磁盘中建立热修复区(磁盘容量的很小一部分,如2%~3%),当出现盘块损坏时,将数据写入热修复区,每次对损坏盘块的访问,都自动转为对应热修复区中盘块的访问
3、写后读校验:
将从内存某缓冲区A写入盘块,立即读出该盘块的内容至内存缓冲区B,比较A和B两个缓冲区的内容是否一致 若不一致,再做一次;若仍然不一致,则认为盘块损坏,将内容写入热修复区
2.第二级容错技术(SFT-Ⅱ)
SFT-II主要解决磁盘驱动器发生故障时,数据无法正常读写的问题。
1、磁盘镜像:
将两个磁盘驱动器连在一个磁盘控制器上 每次向主磁盘写入的数据,同样也向备份磁盘写入,并写入相同的位置 主磁盘和备份磁盘中的所有数据完全相同 当主磁盘驱动器损坏时,启用备份磁盘
2、磁盘双工:
将两个磁盘驱动器分别接在两台磁盘控制器上 每次向主磁盘写入的数据,同样也向备份磁盘写入,并写入相同的位置 主磁盘和备份磁盘中的所有数据完全相同 当主磁盘系统损坏时,启用备份磁盘系统
对于两种SFT-Ⅱ,分析如下:
- 优点:具有容错能力
- 缺点:浪费严重(只有50%效率),I/O速度也没有提高
3.第三级容错技术(SFT-Ⅲ)
基于集群技术实现容错,有双机热备份、双机互为备份、公用磁盘三种主要模式技术。
八、数据一致性控制
在实际应用中,经常会出现多个文件含有同一数据,数据一致性控制即保证任何情况下多个文件同一数据相同。有以下几个核心问题:
- 当数据同时被存放到不同的文件中时,如何保证对数据的修改在各文件中保持一致
- 文件的多个备份,如何保持一致
- 共享数据的顺序修改
1.事务
1、事务:
事务是用于访问和修改各种数据项的一个程序单位。事务操作具有“原子性”,即要么数据都进行修改,要么数据都不进行修改
2、事务记录:
事务记录记录事务运行时数据项修改的全部信息,必须存放在稳定存储器中,包括: ⑴、事务名 ⑵、数据项名 ⑶、旧值 ⑷、新值
3、恢复算法:
- Undo(Ti):把所有被事务Ti修改过的数据,恢复为旧值
- Redo(Ti):把所有需要被事务Ti修改的数据,置为新值
事务通过事务记录和恢复算法,实现数据一致性
2.并发控制
真实计算机系统中,是多用户同时执行不同事务的,故需要对事务的顺序进行控制,即并发控制。一般的实现基于“锁”。
1、利用互斥锁实现“顺序性”:
每个对象设置一把“锁” 对对象的访问,必须先获得“锁”(关锁) 访问完对象,释放“锁”(开锁)
2、利用信号量机制实现“顺序性”:
利用互斥信号量(Mutex)实现对象的顺序访问 利用一般信号量,实现访问者情况的记录
3.磁盘块号(重复数据)的数据一致性
- 空闲盘块:通过空闲盘块管理机制实现
- 数据盘块管理:通过目录及FAT(或索引节点)实现
Tips:正常情况下,空闲盘块与数据盘块互补,即盘块要么是空闲盘块,要么是数据盘块
- 空闲盘块计数器:通过空闲盘块管理,记录空闲盘块的情况,每个盘块对应一个计数器(1-空闲盘块,0-非空闲盘块)
- 数据盘块计数器:通过FAT(或索引节点)记录数据盘块的情况,每个盘块对应一个计数器(1-数据盘块,0-非数据盘块)