3.10 |
假设两个进程同时发现协调者死亡,并且它们都决定使用bully(欺负)算法进行选举。将会发生什么情况?
|
答: |
1、 |
bully(欺负)算法是由Garcia-Molina(1982)提出的,当一个进程发现协调者不再响应请求时,它就发起选举。进程P负责选举如下:
- P向所有号码比它大的进程发送选举(ELECTION)消息;
- 若无人响应,P获胜成为协调者;
- 若有号码比它大的进程响应,响应者接管,P的工作完成。
|
2、 |
不妨设系统中有8个进程(0~7)。一开始,进程7是协调者。假设在某个时刻进程7死亡,不再响应请求。进一步假设,进程4和进程5同时发现进程7死亡,并且进程4和进程5同时发起选举。那么:
......
|
|
3.11 |
在图3-12中,我们有两个ELECTION(选举)消息同时循环。但对它们都没有什么不利的影响,如果消灭其中的一个会更好。设计一个算法来实现这个想法而不影响基本的选举算法的运行。
|
答: |
1、 |
图3-12中的选举采用的是环算法。
假设所有的进程是按物理或逻辑排序的,每个进程都知道谁是它的后继者。当任何一个进程发现协调者不再起作用时,它就发起选举。
- 构造一个包含它自身进程号的选举消息发送给它的后继者。如果后继者失败,消息将绕过后继者,到达后继者的后继者,或者再下一个,直到找到一个运行进程。
- 一旦某个后继接收到选举消息,就将自己的进程号加入到消息表中,并将消息接着往后传递。
- 最后,消息到达了始发者的手中,始发者接收到包括自己进程号的消息后,将消息的类型转化为协调者消息,该消息将再一次绕环运行,向所有的进程通知谁是协调者(在成员列表中进程号码最大的那个)和环成员。
- 当协调者消息循环一周后,再次到达始发者,始发者将该消息去掉,每个进程恢复工作。
|
2、 |
在图3-12中,进程2和5同时发现协调者进程7失效,并且各自成立一个选举消息沿环发送,最终,两条消息都将沿环运动,进程2和进程5分别将它们转化成协调者消息,消息中有完全一样的成员,相互顺序也相同,当两条消息再环绕一周时,都被去掉,有多余的消息没有坏处,最多是浪费了一点带宽。
|
3、 |
考虑消灭其中的一个。
提示:原则上,可以消灭其中的任意一个。例如,可以在一个选举消息到达某个发起者时,由该发起者判断这个消息是否应该继续。要注意的是,不要让两个(或者更多)的消息都被去除。
……
|
|
3.16 |
在写前日志中,旧值和新值都被存储于日志中,只存储新值可以吗?存储旧值的好处是什么?
|
答: |
1、 |
写前日志是一种常用的实现事务的方法,有时也称为计划列表。使用这种方法时,文件将真正修改,但是在改动任何块之前,将一条记录写入稳定存储器的写前日志中,以判断是哪一个事务在进行修改操作,哪一个文件的哪一块被改动了,旧值和新值分别是什么。只有当日志成功的写入之后才可以进行文件的修改。
|
2、 |
我的答案。可以只存储新值。任何一个旧值都曾经作为一个新值在写前日志中出现过。可以通过往前查找写前日志,确定相对于某个新值而言的旧值。
|
3、 |
我的答案。由于写前日志的规模可能会很庞大,在写前日志中进行搜索将会及其费时,因此保留旧值可以提高滚回和崩溃后修复的效率。
|
|
3.20 |
乐观并发控制与使用时间戳,哪一个更严格呢?为什么?
|
答: |
1、 |
乐观并发控制是一种控制并发运行的多个事务的一种方法。
乐观并发控制的基本思想是:尽管放心去做你想做的,不用在意他人正在做什么。如果有问题出现,那么以后再考虑吧。
乐观并发控制的算法将记录下哪些文件曾经被读写过。在某个事务提交的时候,算法将检测其他的事务以判断本事务开始后它的文件是否被其他事务修改过。如果被修改过,那么本事务将被中止。如果没有修改过,那么本事务就可以提交。
|
2、 |
时间戳是一种完全不同于乐观并发控制的算法。
该算法在一个事务开始做BEGIN_TRANSACTION的时候给它分配一个时间戳,通过使用Lamport的算法,我们可以确保时间戳是唯一的。系统中的每个文件都拥有一个相关的读取时间戳和写入时间戳,以判断哪个已提交的进程最近一次读取或写入过该文件。如果事务都很短小而且在时间间隔上都比较大,那么一般来说当一个文件试图访问某个文件时,该文件的读写时间戳将低于当前事务的时间戳,这种次序意味着事务正在以正确的顺序进行处理,一切正常。当次序不正确的时候,就表明一个晚于当前事务开始的事务试图插入、访问文件并提交。这种情况意味着当前事务开始得过早了,因此需要中止。
|
3、 |
乐观并发控制与时间戳相比,两者都是乐观的。但是两者的细节完全不同。乐观并发控制算法希望并发事务不要使用同一个文件。但时间戳算法并不介意并发事务是否使用同一个文件,只要编号小的事务总是先执行就可以了。
从这个意义上看,乐观并发控制算法中,事务提交的条件更为严格,而时间戳算法的事务提交的条件更宽松。
|
|
3.24 |
一个其事务时间戳为50的进程需要一个事务时间戳为100的进程的资源。如下各情况:
(a)Wait-die(等-死)
(b)Wound-Wait(伤-等)会怎样呢?
|
答: |
1、 |
等-死算法和伤-等算法都是预防死锁的方法。
其中,等-死算法中,当较老的进程想得到一个被新进程占用的资源时,老进程将等待;而当较新的进程想得到一个被老进程占用的资源时,新进程将被中止。
而在伤-等算法中,当较老的进程想得到一个被新进程占用的资源时,老进程将抢占新进程的资源,使得新进程受到伤害;而当较新的进程想得到一个被老进程占用的资源时,新进程将等待。
|
2、 |
本题中的情况是,老进程(时间戳为50)想得到一个被新进程(时间戳为100)占用的资源,
1,若采用等-死算法,则老进程将等待新进程。
2,若采用伤-等算法,则老进程将抢占新进程的资源。
|
|