《分布式系统原理与范型》习题答案 5.同步

来源:互联网 发布:mac 听写 插件 编辑:程序博客网 时间:2024/05/17 09:44
1、说出至少三种可在WWV广播时间和在分布式系统中处理机设置内部时钟之间引入的延迟源。 
答:信号在大气中的传播延迟,当机器在协调WWV接受者与以太网时的碰撞延迟,包在局域网上的传播延迟,各个处理器由于中断处理延迟和内部队列延迟所产生的延迟。 
2、考虑分布式系统中的两台机器的行为。这两台机器的时钟假设每毫秒滴答1000次。但实际上只有一台是这样的,另一台每毫秒滴答990次。如果UTC每分钟更新一次,那么时钟的最大偏移量是多大?
 答:第二台时钟每秒滴答990,000次,每秒的偏移量为10ms,所以一分钟偏移量为600ms。 
3、向图5.7中加入一个与消息A并发的新消息,即它既不发生在A的前面也不发生在A的后面。 
答:在0时刻从进程2发送消息,并且在8时刻到达进程1,或者是在0时刻从进程1发送消息并在10时刻到达进程2。这两种方法都可以满足要求。 
4、要使用Lamport时间戳实现全序多播,是不是每个消息都必须要被严格地确认? 
答:不是。只要消息的时间戳比所接收的消息的时间戳大,就有足够的时间多播其他类型的消息。将消息m传送到应用程序的条件是:以一个很大的时间戳从其它所有进程那里接受到其他消息。这保证了进行中的消息都使用更小的时间戳。 
5、考虑一个消息只是以它们被发送的顺序被传递的通信层。给出一个不需要这种限制的例子。 
答:想象传输一个大的图像,图像被分成连续的块。每块以它在原始图像中的位置标识,可能还有高度和宽度。如果是那样的话,FIFO的顺序就不是必要的,因为接受者可以很容易地把到来的块拼接到正确的位置。 
6、假设两个进程同时检测到协调者崩溃了,并且它们都使用欺负算法主持一个选举。这时将发生什么。
 答:每个更高位置的处理器都会收到两个ELECTION消息,但是会忽略掉第二个。选举会象往常一样进行下去。 
7、在图5。12中,我们有两个ELECTION消息同时在循环,当对它们都没有什么不利影响时,杀掉一个将更好。设计这样一个算法,该算法在不影响基本的选举操作算法的情况下完成此项任务。 
答:当一个进程接受到ELECTION消息,它会检查消息是谁开始发送的,如果是它自己开始的(例如它的位置在列表的首位),它会把消息变成协调者消息并在正文里描述它。如果消息不是它开始的,它会加入其进程号并沿着环向前发送。然而,如果它更早地发送了自己的选举消息并发现了竞争者,它会将创始人的进程号与自己的相比较。如果其他进程拥有较小的号码,它会丢弃那个消息而不是传递消息。如果竞争者更大,那么消息将以平常的方式发送。这样,如果多个选举消息被开始发送,那么入口最大的消息将会幸存,其他消息将沿着路由被忽略掉。 
8、许多分布式算法需要使用协调进程。讨论一下,这样的算法实际上可以在什么程度上被看作是分布式的? 
答:在集中式的算法中,常常是固定的进程充当协调者。分布来源于其他进程在不同的机器上运行的事实。在分布式算法中,没有固定的协调者,协调者从组成部分算法的进程中选出。事实是协调者能使算法更具分布性。 
9、在集中式互斥方法中(图5。13),协调者在收到一个进程释放它独占访问的临界区的消息后,通常给等待队列中的第一个进程授权,允许其访问临界区。请给出协调者另一个可能的算法。 
答:请求会和优先权联系在一起,优先权取决于他们的重要性。协调者应该保证最高优先级的最先请求。 
10、请再考虑图5。13,假设协调者崩溃了,这会必然导致整个系统瘫痪吗?如果不会,那么在什么情况下会呢?有什么方法避免了这个问题的发生,使系统能够忍受协调者的崩溃? 
答:在允许和拒绝的条件下,假定算法是只要有请求,就立即回应。如果没有进程在临界区并且没有进行在排队,那么这个崩溃不是毁灭性的。下一个请求准许的的进程将不会获得任何回应并且初始一个协调者的选举。在发送回应之前,使用协调者存储每个到来的请求将会使系统更加健壮。这样的话,在崩溃事件中,新的协调者将会重建一个活动临界区域列表并将从磁盘读文件的行为排队。 
11、Ricart和Agrawala算法会有这样的问题:如果一个进程崩溃,并且没有对另一个要求进入临界区的进程的请求作应答,没有应答意味着拒绝请求,我们建议所有的请求应用立即被应答,以便很容易地检测到崩溃的进程,是否存在一些情况,即使使用这种方法也还不足够?请讨论。 
答:假定一个进程在拒绝许可并在那时崩溃。请求进程会认为它是活动的,但许可永远不会到来。一种方法为是请求者并不真正阻塞,而是休眠一定的时间。在休眠后,请求者将会测试所有拒绝许可的进程是否还是活动的。 
12、如果我们假设该算法可以在支持硬件广播的LAN中实现,那么图5。16中的实何时将如何改变?
 答:仅仅只有分布式案例的实体改变。因为发送一个点对点的消息的花费与广播消息一样多,所以我们只需要发送一个广播消息到所有的进程去请求实体到临界区。同样地,仅仅一个出口的广播消息是需要的。延迟变成1+(n-1):一个延迟来源于广播请求,再加上n-1,因为在被允许进入临界区之前,我们仍然需要从其他每个进程接受到消息。 
13、分布式系统可能有多个互相独立的临界区,假设进程0想进入临界区A而进程1想进入临界区B,Ricart和Agrawala的算法会导致死锁吗?请解释原因。 
答:这取决于程序的基本规则。如果进程严格地依次进入临界区域,也就是说一个临界区内的进程不会试图进入其他进程的临界区,那么当它拥有其他进程进程想要获取的资源(比如临界区)的时候,它是不会阻塞的。系统于是死锁释放。另一方面,如果进程0进入临界区A并且试图进入临界区B,如果另外的进程以相反的顺序获取它们时,死锁就会发生。因为每个临界区被所有的进程独立处理,所以Rucart和Agrawala算法不会造成死锁。 
14、在图5。17中,我们看到一种用磁带实现对存货表自动更新的方法。因为磁带可以很容易地用磁盘上的一个文件来模拟,你认为为什么不使用这种方法(用磁盘文件代替)呢? 
答:第一个原因大概是人类变得更加贪婪和想要做更多他们过去习惯的东西。如果用户满足于每天运行一次简单的保存详细目录,可以用磁盘。问题在于每个人都想即时访问数据库,这会使得将详细目录保存在磁带是不可能的。 
15、在图5。25(D)中有三个调度策略,两个合法,一个非法的。对于同一个事务处理,给出临终x所有的可能值和合法的与非法的状态的一个完整表。 
答:合法的值为1,2,3。非法的值为4,5,6。4可以通过中间的事务处理来实现,其他两个的交错是不正确的。5在策略3中实现。6可以通过首先三次设置x为0,然后三次增加它实现。 
16、当一个私有工作空间用于实现事务处理时,可能需要将大量的文件索引复制到父辈工作区,怎样在不引入竞争条件下实现这种操作? 
答:一种办法为在系统顶层设置锁以阻止所有的活动直到所有的索引都被重写。在预防崩溃以前,创建一个目的表也许是明智的。 
17、给出一个完整的算法判定一个试图锁住一个文件的操作是否成功。要同时考虑到读锁和写锁,以及文件被解锁,读锁写或写锁写的可能性。 
答:算法如下:如果文件没被锁,那么操作通常是成功的。如果文件被读锁定并且操作是另一个读锁定,那么操作也是成功的。在其他情况,操作是失败的(例如,写锁定一个被锁文件会失败,当一个文件被写锁定时,读锁定会失败) 
18、用锁定的方法实现并发控制的系统通常区分读锁和写锁,如果一个进程已经得到了一个读锁但现在又想将它换成写锁,将会怎么样呢? 
答:一个读锁只有在没有其它读进程的情况下才可能被转换成一个写锁。一种有效的方法就是先释放这个读锁,然后马上再获得一个写锁。如果有其它的读进程的话这个操作将会失败。如果有其它进程正在等待获得一个写锁时,这个操作是否成功取决于具体的策略,而不是技术上的问题。将一个写锁降低优先级为一个读锁问题可行的,并且不会出错。 
19、在分布式事务中使用时间戳排序,假设写操作write(T1,x)被传给数据管理器,因为仅有的可能发生冲突的操作write(T2,x)的时间戳较早,为什么让调度管理器推迟传递write(T1,x )直到T2完成呢?答:通过推迟到T2完成,调度器可以避免由于T2运行的失败而造成的其它一系列的运行失败。20、乐观并发控制与使用时间戳相比是更严格还是更不严格呢?为什么? 
答:它更加严格。因为通过使用乐观并发控制的机制,如果一个事务正在交付并且发现另外一个事务也在更改当前事务使用的文件,它问题会退出。如果使用时间戳的话,如果另一个事务的时间戳更低的话,这个事务有时候可能会成功。 
21、使用时间戳来进行并发控制能保证串行性吗?请讨论。 
答:可以的。它要么按照事务的时间戳全部串行地完成,要么只完成一部分。 
22、我们常说事务被中止时,一切都恢复到它以前的状态,就好像事务从来没有发生一样,实现上我们在说谎。请给出一个重新恢复一切是不可能的例子。 
答:物理I/O发生的事务不能够被重置。比如说,一个进程打印出了一些数据,这些墨不能够从纸上移掉。同样,一个控制所有进程的系统也不大可能会恢复一切事务到它们以前的状态。
0 0
原创粉丝点击