操作系统:磁盘可靠性和一致性

容错技术

磁盘容错技术是通过增加冗余的磁盘驱动器、磁盘控制器等方法来提高磁盘系统可靠性的一种技术。当磁盘系统的某部分出现缺陷或故障时,磁盘仍能正常工作,且不致造成数据的丢失或错误。目前广泛采用磁盘容错技术来改善磁盘系统的可靠性,也称为系统容错技术 SFT,可把它分成三个级别。

第一级容错技术 SFT-1

第一级容错技术(SFT-I)是最基本的一种磁盘容错技术,主要用于防止因磁盘表面缺陷所造成的数据丢失。它包含双份目录、双份文件分配表及写后读校验等措施:

  1. 双份目录和双份文件分配表:为了防止文件目录和文件分配表 FAT 被破坏,可在不同的磁盘上或在磁盘的不同区域中分别建立双份目录表和 FAT,另一份为备份目录及备份 FAT;
  2. 热修复重定向:系统将磁盘容量的很小一部分作为热修复重定向区,用于存放当发现磁盘有缺陷时的待写数据,并对写入该区的所有数据进行登记,以便于以后对数据进行访问。
  3. 写后读校验方式:在每次向磁盘中写入一个数据块后,又立即将它读出,并送至另一缓冲区中与内存缓冲区中在写后仍保留的数据进行比较。若两者一致便认为此次写入成功,否则再重写,若重写后两者仍不一致则认为该盘块有缺陷;

第二级容错技术 SFT-2

第二级容错技术主要用于防止由磁盘驱动器和磁盘控制器故障所导致的系统不能正常工作,它具体又可分为磁盘镜像与磁盘双工。

磁盘镜像功能

为了避免磁盘驱动器发生故障而丢失数据,便增设了磁盘镜像(Disk Mirroring),也就是同一磁盘控制器下再增设一个完全相同的磁盘驱动器。在每次向主磁盘写入数据后,都需要将数据再写到备份磁盘上,使两个磁盘上具有完全相同的位像图。当主磁盘驱动器发生故障时,由于有备份磁盘的存在,在进行切换后,使主机仍能正常工作。

磁盘镜像虽然实现了容错功能,却使磁盘的利用率降至 50%,也未能使服务器的磁盘 I/O 速度得到提高。如果控制这两台磁盘驱动器的磁盘控制器发生故障,或主机到磁盘控制器之间的通道发生故障,磁盘镜像功能便起不到数据保护的作用。

磁盘双工

因此 SFT-2 又增加了磁盘双工(Disk Duplexing),即将两台磁盘驱动器分别接到两个磁盘控制器上,同样使这两台磁盘机镜像成对。

如果某个通道或控制器发生故障时,另一通道上的磁盘仍能正常工作,不会造成数据的丢失。在磁盘双工时,由于每一个磁盘都有自己的独立通道,故可同时(并行)地将数据写入磁盘或读出数据。

集群技术

为了进一步增强服务器的并行处理能力和可用性,采用了对称多台处理机 SMP 来实现集群系统的服务器功能。集群是指由一组互连的自主计算机组成统一的计算机系统,给人们的感觉是是一台机器。利用集群系统不仅可提高系统的并行处理能力,还可用于提高系统的可用性,其主要工作模式有三种。

双机热备份模式

双机热备份模式的系统中备有两台服务器,两者的处理能力通常是完全相同的,一台作为主服务器,另一台作为备份服务器。一旦主服务器出现故障,备份服务器便立即接替主服务器的工作而成为系统中的主服务器,修复后的服务器再作为备份服务器。
为使在这两台服务器间能保持镜像关系,应在这两台服务器上各装入一块网卡,并通过一条镜像服务器链路 MSL(Mirrored Server Link)将两台服务器连接起来。

双机互为备份模式

双机互为备份模式中,两台服务器均为在线服务器,它们各自完成自己的任务。在两台服务器之间通过某种专线将其连接起来,再通过路由器将两台服务器互连起来,作为备份通信线路。每台服务器内都配置两台硬盘,一个用于装载系统程序和应用程序,另一个用于接收由另一台服务器发来的备份数据,作为该服务器的镜像盘。在正常运行时,镜像盘对本地用户是锁死的,这样就较易于保证在镜像盘中数据的正确性。

双机互为备份模式检测故障并恢复的步骤如下:

  1. 如果通过专线链接检查到某台服务器发生了故障,通过路由器去验证这台服务器是否真的发生了故障;
  2. 如果故障被证实,则由正常服务器向故障服务器的客户机发出广播信息,表明要进行切换;
  3. 在切换成功后,客户机无须重新登录便可继续使用网络提供的服务;
  4. 当故障服务器修复并重新连到网上后,已被迁移到无故障服务器上的服务功能将被返回,恢复正常工作。

对于连接在非故障服务器上的客户机,则只会感觉到网络服务稍有减慢而已。如果仅有一个硬盘,则可用建立虚拟盘的方式或分区方式来分别存放。这种模式的优点是两台服务器都可用于处理任务,因而系统效率较高,现在已将这种模式从两台机器扩大到 4 台、8 台、16 台甚至更多。

公用磁盘模式

为了减少信息复制的开销,可以将多台计算机连接到一台公共的磁盘系统上去。公共磁盘被划分为若干个卷,每台计算机使用一个卷。如果某台计算机发生故障,此时系统将重新进行配置,根据某种调度策略来选择另一台替代机器,后者对发生故障的机器的卷拥有所有权,从而可接替故障计算机所承担的任务。
这种模式的优点是消除了信息的复制时间,因而减少了网络和服务器的开销。

后备系统

在一个完整的系统中必须配置后备系统,一方面是因为磁盘系统不够大,不可能将系统在运行过程中的所有数据都装在磁盘中,需要把暂时不用的数据存放在后备系统中。另一方面是为了防止系统发生故障或病毒的感染,导致系统中的数据弄错或丢失。

磁带机

磁带机最早作为计算机系统的外存储器,由于它只适合存储顺序文件,故现在主要把它作为后备设备。磁主要优点是容量大,一般可达数 GB 至数十 GB,且价格便宜,故在许多大、中型系统中都配置了磁带机。其缺点是只能顺序存取且速度也较慢,为数百 KB 到数 MB,为了将一个大容量磁盘上的数据拷贝到磁带上很耗时。

硬盘

移动硬盘

对于小型系统和个人电脑而言,常用移动磁盘作为后备系统。最大的优点是速度高,脱机保存方便,而且保存时间也较长,可比磁带机长出 3~5 年。但单位容量的费用较高,近年来移动磁盘的价格已有明显下降,而且体积也非常小,应用也日益广泛。

固定硬盘驱动器

在大、中型系统中可利用大容量硬盘兼做后备系统,为此需要在一个系统中配置两个大容量硬盘系统。每个硬盘都被划分为数据区和备份区,可在每天某个时刻将硬盘 1 中的“数据 0”拷贝到硬盘 1 中的拷贝区中保存,同样也将硬盘 2 中的“数据 1”拷贝到硬盘 0 中的拷贝区中保存。

这种后备系统不仅拷贝速度非常快,而且还具有容错功能,即当其中任何一个硬盘驱动器发生故障时,都不会引起系统瘫痪。

光盘驱动器

只读光盘驱动器 CD-ROM 和 DVD-ROM 主要用于播放音频和视频,由于它们都只能播放(读)不能写,故难于用它们作为后备设备。可读写光盘驱动器又称为刻录机,既能播放(读)又能刻录(写),故可将它们作为后备设备,存储计算机中的数字信息。

事务

在实际应用中,经常会在多个文件中都含有同一个数据。数据一致性问题是指,保存在多个文件中的同一数据,在任何情况下都必需能保证相同。为了保证数据的一致性,在现代 OS 中都配置了能保证数据一致性的软件。

事务的定义

事务是用于访问和修改各种数据项的一个程序单位,也可以被看做是一系列相关读和写操作。只有对分布在不同位置的同一数据所进行的读和写(含修改)操作全部完成时,才能以提交操作(Commit Operation)结束事务,确认事务的变化。但是只要这些操作中有一个读、写或修改操作失败,便必须执行回滚操作(Abort Operation)
一个被天折的事务,通常已执行了一些操作,可能已对某些数据做了修改。为使天折的事务不会引起数据的不一致性,需将该事务内刚被修改的数据项恢复成原来的情况,使系统中各数据项与该事务未执行时的数据项内容完全相同。

事务的属性

事务必须同时满足四个属性,即事务属性 ACID

属性 说明
原子性(Atomic) 一个事务要么全部完成,要么一个也不修改
一致性(Consistent) 事务在完成时,必须使所有的数据都保持一致状态
隔离性(Isolated) 即对一个事务对数据所作的修改,必须与任何其它与之并发事务相隔离
持久性(Durable) 即事务完成之后,它对于系统的影响是永久性的

事务记录

为了实现上述的原子修改,通常须借助于称为事务记录的数据结构来实现。这些数据结构被放在一个非常可靠的存储器中,又称为运行记录(Log)。包括有下列字段:

字段 说明
事务名 用于标识该事务的唯一名字
数据项名 它是被修改数据项的唯一名字
旧值 修改前数据项的值
新值 修改后数据项将具有的值

在事务记录表中的每一记录描述了在事务运行中的重要事务操作,如修改操作、开始事务、托付事务或天折事务等。

恢复算法

由于一组被事务 Ti 修改的数据,以及它们被修改前和修改后的值都能在事务记录表中找到,因此利用事务记录表系统能处理任何故障,而不致使故障造成非易失性存储器中信息的丢失。恢复算法可利用以下两个过程:

  1. undo〈Ti〉:把所有被事务 Ti 修改过的数据恢复为修改前的值。
  2. redo〈Ti〉:把所有被事务 Ti 修改过的数据设置为新值。

如果系统发生故障,系统应对以前所发生的事务进行清理。通过查找事务记录表,可以把尚未清理的事务分成两类。一类是其所包含的各类操作都已完成的事务,另一类是其所包含的各个操作并未全部完成的事务。

检查点

当系统发生故障时,必须去检查整个 Log 表。由于在系统中可能存在着许多并发执行的事务,因而在事务记录表中就会有许多事务执行操作的记录。因此一旦系统发生故障,在事务记录表中的记录清理起来就非常费时。
引入检查点的主要目的是,使对事务记录表中事务记录的清理工作经常化,即每隔一定时间便做一次下述工作。如果一个事务在检查点前就做了托付,则在事务记录表中便会出现一个在检查点记录前的托付记录。在这种情况下,所有被该事务修改过的数据或者是在检查点前已写入稳定存储器,以后在系统出现故障时,就不必再执行 redo 操作了。

并发控制

在多用户系统和计算机网络环境下,可能有多个用户在同时执行事务,把用于实现事务顺序性的技术称为并发控制。该技术在应用数据库系统中已被广泛采用,现也广泛应用于 OS 中,在数据库系统和文件服务器中应用得最多的同步机制——锁。

互斥锁

实现顺序性的一种最简单的方法,是设置互斥锁(Exclusive Lock)。当某一事务 Ti 要去访问某对象时,应先获得该对象的互斥锁。若成功便用该锁将该对象锁住,于是事务 Ti 便可对该对象执行读或写操作,其它事务由于未能获得该锁不能访问该对象。但如果对象已被其它事务锁住,则此时 Ti 应对此前已被 Ti 锁住的其它对象进行开锁,宣布此次事务运行失败,但不致引起数据的变化。

共享锁

利用互斥锁实现顺序性的方法简单易行,但这却存在着效率不高的问题。因为一个共享文件虽然只允许一个事务去写,但却允许多个事务同时去读,而在利用互斥锁来锁住文件后,则只允许一个事务去读。为了提高运行效率而又引入了共享锁(Shared Lock),共享锁则允许多个事务对相应对象执行读操作,但不允许其中任何一个事务对对象执行写操作。

重复数据的一致性

为了保证数据的安全性,最常用的做法是把关键文件或数据结构复制多份,当主文件失效时还有备份文件可以使用。显然主文件中的数据应与各备份文件中的对应数据相一致,同样应保证不同处的同一数据结构中数据的一致性。

重复文件的一致性

在有重复文件时,如果一个文件拷贝被修改,则必须也同时修改其它几个文件拷贝,以保证各相应文件中数据的一致性。这可采用两种方法来实现:

  1. 当一个文件被修改后可查找文件目录,以得到其它几个拷贝的索引结点号,再从这些索引结点中找到各拷贝的物理位置,然后对这些拷贝做同样的修改;
  2. 为新修改的文件建立几个拷贝,并用新拷贝去取代原来的文件拷贝。

连接数的一致性

在 UNIX 类型的文件目录中,其每个目录项内都含有一个索引结点号,用于指向该文件的索引结点。对于一个共享文件,其索引结点号会在目录中出现多次。另一方面在该共享文件的索引结点中有一个链接计数 count,用来指出共享本文件的用户(进程)数。在正常情况下这两个数据应该一致,否则就会出现数据不一致性差错。
为了检查这种数据不一致性差错,需要配置一张计数器表,为每个文件建立一个表项,其中含有该索引结点号的计数值。在进行检查时,从根目录开始查找,每当在目录中遇到该索引结点号时,便在该计数器表中相应文件的表项上加 1。当把所有目录都检查完后,便可将该计数器表中每个表项中的索引结点号计数值与该文件索引结点中的链接计数 count 值加以比较,如果两者一致表示是正确的,否则便是发生了链接数据不一致的错误。

参考资料

《计算机操作系统(第四版)》,汤小丹 梁红兵 哲凤屏 汤子瀛 编著,西安电子科技大学出版社

posted @ 2022-01-24 00:39  乌漆WhiteMoon  阅读(1337)  评论(0编辑  收藏  举报