6.76.7数据一致性控制数据一致性控制(自学)(自学)6.7.1事务1.事务的定义事务是用于访问和修改各种数据项的一个程序单位。事务也可以被看作是一系列相关读和写操作。被访问的数据可以分散地存放在同一文件的不同记录中,也可放在多个文件中。只有对分布在不同位置的同一数据所进行的读和写(含修改)操作全部完成时,才能再以托付操作(CommitOperation)来终止事务。只要有一个读、写或修改操作失败,便须执行夭折操作(AbortOperation)。读或写操作的失败可能是由于逻辑错误,也可能是系统故障所导致的。2.事务记录(TransactionRecord)·事务名:用于标识该事务的惟一名字;·数据项名:它是被修改数据项的惟一名字;·旧值:修改前数据项的值;·新值:修改后数据项将具有的值。3.恢复算法恢复算法可利用以下两个过程:(1)undo〈Ti〉。该过程把所有被事务Ti修改过的数据,恢复为修改前的值。(2)redo〈Ti〉。该过程能把所有被事务Ti修改过的数据,设置为新值。如果系统发生故障,系统应对以前所发生的事务进行清理。6.7.2检查点1.检查点(CheckPoints)的作用引入检查点的主要目的,是使对事务记录表中事务记录的清理工作经常化,即每隔一定时间便做一次下述工作:首先是将驻留在易失性存储器(内存)中的当前事务记录表中的所有记录,输出到稳定存储器中;其次是将驻留在易失性存储器中的所有已修改数据,输出到稳定存储器中;然后是将事务记录表中的〈检查点〉记录,输出到稳定存储器中;最后是每当出现一个〈检查点〉记录时,系统便执行上小节所介绍的恢复操作,利用redo和undo过程实现恢复功能。2.新的恢复算法恢复例程首先查找事务记录表,确定在最近检查点以前开始执行的最后的事务Ti。在找到这样的事务后,再返回去搜索事务记录表,便可找到第一个检查点记录,恢复例程便从该检查点开始,返回搜索各个事务的记录,并利用redo和undo过程对它们进行处理。如果把所有在事务Ti以后开始执行的事务表示为事务集T,则新的恢复操作要求是:对所有在T中的事务TK,如果在事务记录表中出现了〈TK托付〉记录,则执行redo〈TK〉操作;反之,如果在事务记录表中并未出现〈TK托付〉记录,则执行undo〈TK〉操作。6.7.3并发控制1.利用互斥锁实现“顺序性”2.2.利用互斥锁和共享锁实现顺序性6.7.46.7.4重复数据的数据一致性问题重复数据的数据一致性问题1.重复文件的一致性2.保证一个文件的多个副本中的数据一致。图6-28UNIX类型的目录文件名i结点文件117文件222文件312文件484文件名i结点文件1171940文件2227291文件3123029文件4841566(a)不允许有重复文件的目录(b)允许有重复文件的目录2.盘块号一致性的检查保证登记空闲盘块和已分配盘块的数据结构的一致性。如FAT文件系统:系统初启时…1000010100数据盘块号计数器组…0111101011空闲盘块号计数器组…9876543210计数器组盘块号(a)正常情况(b)丢失了盘块盘块号…1000010000数据盘块号计数器组…0111101011空闲盘块号计数器组…9876543210计数器组盘块号2.盘块号一致性的检查…1000000100数据盘块号计数器组…0111121011空闲盘块号计数器组…9876543210计数器组盘块号(c)空闲盘块号重复出现若空闲盘块是通过FAT来管理的,(c)不会出现(d)数据盘块号重复出现…1000210000数据盘块号计数器组…0111001011空闲盘块号计数器组…9876543210计数器组盘块号2.盘块号一致性的检查(f)盘块号重复出现在空闲块和数据块中…1001210000数据盘块号计数器组…0111001011空闲盘块号计数器组…9876543210计数器组盘块号3.链接数一致性检查如UNIX类的文件系统,硬链接的个数应该与索引结点中的链接计数的值一致。…1000101201…0110101201…10987654321i结点中链接计数值该i结点号对应的目录项数计数器组i结点号…1002001201…0111101201…10987654321i结点中链接计数值该i结点号对应的目录项数计数器组i结点号(a)正常情况(b)出错作业:作业:作业:作业:•P246—247:10、12、14、19、23、24、补充作业:补充作业:补充作业:补充作业:1.如果一个文件存放在100个数据块中,文件控制块、索引块或索引信息等都驻留在内存。下面各种情况下,需要做几次磁盘I/O操作?...