高级操作系统课件-第六章同步PPT格式课件下载.ppt
《高级操作系统课件-第六章同步PPT格式课件下载.ppt》由会员分享,可在线阅读,更多相关《高级操作系统课件-第六章同步PPT格式课件下载.ppt(92页珍藏版)》请在冰豆网上搜索。
9192631770次跃迁次跃迁=1秒秒TAI秒:
国际原子时间秒:
国际原子时间UTC秒:
统一协调时间(在秒:
统一协调时间(在TAI秒中加入闰秒)秒中加入闰秒)时间服务:
时间服务:
WWV电台、电台、GEOS卫星卫星时钟同步算法时钟同步算法当时钟以不同的速率滴答时,时钟时间与当时钟以不同的速率滴答时,时钟时间与UTC之间的关系:
当之间的关系:
当UTC时时间为间为t时,机器上的时间为时,机器上的时间为Cp(t),理想情况是,理想情况是Cp(t)=t,即即dC/dt=1.1-p=dC/dt=1+p为保证每两个时钟间的差值不超过为保证每两个时钟间的差值不超过a,则时钟必须至少每则时钟必须至少每a/2p秒重新同步秒重新同步一次一次Cristian算法算法适合只有一台时间服务器的情况,可接收适合只有一台时间服务器的情况,可接收WWV的的UTC时间时间Cristian算法算法不能简单接受不能简单接受CUTC时间不能倒退,须逐步修正时间不能倒退,须逐步修正假设:
每秒产生假设:
每秒产生100次中断,每次中断将时间加次中断,每次中断将时间加10毫秒毫秒若调慢时钟,中断服务程序每次只加若调慢时钟,中断服务程序每次只加9毫秒;
毫秒;
若加快时钟,则加若加快时钟,则加11毫秒。
毫秒。
存在延迟存在延迟Berkeley算法算法a)timedaemon向所有其他机器发送自己的时间,并询问其时钟值向所有其他机器发送自己的时间,并询问其时钟值b)其他机器应答其他机器应答c)timedaemon计算出平均值,通知其他机器如何调整时钟计算出平均值,通知其他机器如何调整时钟平均值算法平均值算法非集中式算法非集中式算法时间间隔时间间隔T0+iR,T0+(i+1)R在每次时间间隔开始,每台机器广播自己的在每次时间间隔开始,每台机器广播自己的当前时间当前时间之后启动本地计时器,搜集时间间隔之后启动本地计时器,搜集时间间隔S内到内到达的所有时间广播,计算时间值达的所有时间广播,计算时间值平均值平均值去掉若干个最低值和最高值?
去掉若干个最低值和最高值?
给每个消息加上传输时间的估计值给每个消息加上传输时间的估计值逻辑时钟逻辑时钟LamportTimestamps时间戳(时间戳(Time-Stamping)的算法:
的算法:
网络上的每个系统(站点)维护一个计数器,起时钟的作用网络上的每个系统(站点)维护一个计数器,起时钟的作用每个站点有一个数字型标识每个站点有一个数字型标识,消息的格式为(消息的格式为(m,Ti,i),m为为消息内容,消息内容,Ti为时间戳,为时间戳,i为站点标识为站点标识当系统发送消息时,将时钟加一当系统发送消息时,将时钟加一当系统当系统j接收消息时,将它的时钟设为当前值和到达的时间接收消息时,将它的时钟设为当前值和到达的时间戳这两者的最大者加一戳这两者的最大者加一在每个站点,时间的排序遵循以下规则在每个站点,时间的排序遵循以下规则对来自站点对来自站点i的消息的消息x和站点和站点j的消息的消息y,如果如果TiTj或或Ti=Tj,且,且iJFK;
reserveJFK-Nairobi;
reserveNairobi-Malindi;
END_TRANSACTION(a)BEGIN_TRANSACTIONreserveWP-JFK;
reserveNairobi-Malindifull=ABORT_TRANSACTION(b)事务属性事务属性事务属性事务属性ACID:
原子性原子性(atomic):
事务的执行不可分割:
事务的执行不可分割一致性一致性(consistent):
事务不能破坏系统的恒:
事务不能破坏系统的恒定性定性独立性独立性(isolated,串行性,串行性):
并发的事务不会:
并发的事务不会互相干扰互相干扰持久性持久性(durable):
一旦事务被执行,所作的:
一旦事务被执行,所作的修改就永远生效修改就永远生效事务分类事务分类单层事务(单层事务(Aflattransaction):
):
不允许提交或取消部分结果不允许提交或取消部分结果嵌套事务(嵌套事务(Anestedtransaction):
按逻辑关系分成独立的许多子事务(可按逻辑关系分成独立的许多子事务(可分布到不同机器上运行),子事务提交结果对父事务和后续子事务是可见的;
分布到不同机器上运行),子事务提交结果对父事务和后续子事务是可见的;
父事务中止会导致所有子事务的中止父事务中止会导致所有子事务的中止分布式事务分布式事务(Adistributedtransaction):
单层、不可分割的事务,操作对单层、不可分割的事务,操作对象是分布式的数据。
使用分布式算法锁定数据和提交整个事务象是分布式的数据。
使用分布式算法锁定数据和提交整个事务事务实现事务实现
(一)私有工作空间私有工作空间为进程提供一个私有工作空间,包含进程要访为进程提供一个私有工作空间,包含进程要访问的所有对象问的所有对象进程的读写操作在私有工作空间进行,而不对进程的读写操作在私有工作空间进行,而不对实际的文件系统进行实际的文件系统进行开销大,可以进行优化使之可行开销大,可以进行优化使之可行读操作不复制读操作不复制写操作时复制,而且初始只复制索引(包含文件磁写操作时复制,而且初始只复制索引(包含文件磁盘块的位置信息,如盘块的位置信息,如UNIX的的i节点)节点)私有工作空间私有工作空间a)包含三个块的文件及其索引包含三个块的文件及其索引b)块块0被修改,块被修改,块3被添加后的情况被添加后的情况c)事务提交之后事务提交之后私有工作空间私有工作空间如果事务中止,私有工作空间被释放,指如果事务中止,私有工作空间被释放,指向的私有块被删除向的私有块被删除如果事务提交,私有索引被移到父辈空间,如果事务提交,私有索引被移到父辈空间,不再被访问的块被释放掉不再被访问的块被释放掉事务实现
(二)事务实现
(二)写前日志写前日志(writeaheadlog):
先写日志,再做):
先写日志,再做实际修改实际修改日志内容:
哪个事务在对文件进行修改,哪个文日志内容:
哪个事务在对文件进行修改,哪个文件和数据被改动,新值和旧值是什么件和数据被改动,新值和旧值是什么日志写入后,改动才被写入文件日志写入后,改动才被写入文件事务中止,使用写前日志事务中止,使用写前日志回退回退到原来的状态到原来的状态借助稳定存储器中的写前日志:
当系统崩溃后,借助稳定存储器中的写前日志:
当系统崩溃后,完成事务或取消事务完成事务或取消事务写前日志写前日志a)一个事务一个事务b)d)语句执行前的日语句执行前的日志志x=0;
y=0;
BEGIN_TRANSACTION;
x=x+1;
y=y+2x=y*y;
END_TRANSACTION;
(a)Logx=0/1(b)Logx=0/1y=0/2(c)Logx=0/1y=0/2x=1/4(d)并发控制并发控制
(1)处理事务的管理器组织处理事务的管理器组织=通过正确地控制通过正确地控制并发事务(同时对共享数据进行操作的事务)并发事务(同时对共享数据进行操作的事务)的执行基本上可以解决一致性和独立性问题的执行基本上可以解决一致性和独立性问题事务管理器事务管理器:
保证事务的原子性:
保证事务的原子性调度管理器调度管理器:
正确地控制并发,决定哪个事务在何时被允许将:
正确地控制并发,决定哪个事务在何时被允许将读、写操作传给数据管理器读、写操作传给数据管理器数据管理器数据管理器:
数据的读写:
数据的读写并发控制并发控制
(2)分布式事务管理器组织分布式事务管理器组织串行化串行化a)c)三个事务三个事务T1,T2,和和T3d)可能的调度可能的调度BEGIN_TRANSACTIONx=0;
END_TRANSACTION(a)BEGIN_TRANSACTIONx=0;
x=x+2;
END_TRANSACTION(b)BEGIN_TRANSACTIONx=0;
x=x+3;
END_TRANSACTION(c)Schedule1x=0;
x=0;
x=x+3合法合法Schedule2x=0;
合法合法Schedule3x=0;
非法非法(d)串行化串行化:
多个事务同时执行并保持独立,最终的执行结果与事务以某种特定:
多个事务同时执行并保持独立,最终的执行结果与事务以某种特定顺序一个接一个串行执行得到的结果相同。
顺序一个接一个串行执行得到的结果相同。
并发控制算法并发控制算法并发控制的思想:
正确调度相冲突的操作并发控制的思想:
正确调度相冲突的操作(读写和写写)(读写和写写)按读写操作同步的方式分为按读写操作同步的方式分为共享数据上的互斥机制,如锁定共享数据上的互斥机制,如锁定显示地使用时间戳排序显示地使用时间戳排序并发控制算法并发控制算法-锁机制锁机制T1读读D的时候,的时候,T2不可以写不可以写D,但可以读,但可以读D;
T1写写D的时候,的时候,T2既不可以写既不可以写D,又不可以读,又不可以读D。
一个事务可以对一个事务可以对D实施读锁和写锁:
实施读锁和写锁:
不同的事务可以因读而同时封锁同一个不同的事务可以因读而同时封锁同一个D,所以,读锁又,所以,读锁又叫共享锁(叫共享锁(SharingLock);
);
不同的事务不能因写而同时封锁同一个不同的事务不能因写而同时封锁同一个D,所以,写锁又,所以,写锁又叫排它锁(叫排它锁(ExclusiveLock);
根据上述分析,我们可得如下锁协议:
1、TReadLock(D),T也可以也可以ReadLock(D),如果,如果TWriteLock(D),则,则T被挂起,直到被挂起,直到TUNLock(D);
2、TWriteLock(D),如果,如果TReadLock(D)或者或者WriteLock(D),则则T被挂起,直到被挂起,直到TUNLock(D);
3、T使用完使用完D之后,之后,UNLock(D)。
问题:
不能保证可串行化。
两阶段锁定两阶段锁定
(1)两阶段锁定:
两阶段锁定:
为了保证并发调度的可串行化,要求为了保证并发调度的可串行化,要求T在执行过程中,有一在执行过程中,有一个时间点个时间点t,在,在t之前,之前,T不执行不执行UNLock操作,并且在操作,并且在t之后,之后,T不再执行不再执行ReadLock(D)和和WriteLock(D)操作。
操作。
进程在增长阶段先请求它需要的所有锁,然后在收缩阶段释放它们。
可以证明(可以证明(Eswaran等,等,1976)如果所有的事务都使用两阶段加锁法,那)如果所有的事务都使用两阶段加锁法,那么通过交错事务进行的所有调度都是串行的。
这也是两阶段加锁法广泛使么通过交错事务进行的所有调度都是串行的。
这也是两阶段加锁法广泛使用的原因。
用的原因。
两阶段锁定两阶段锁定
(2)严格的两阶段锁定严格的两阶段锁定:
UNLock操作仅在操作仅在T提交的时候或者被中止的时候由