分布式操作系统

第一章 分布式系统概述

&&分布式系统:
    ①是若干独立计算机的集合;
    ②对这个系统的用户来说,系统就像是一台计算机一样;
    ③从硬件角度:每台计算机都是自主的;
    ④从软件角度:对用户来说就像与单个系统打交道。
1、说明分布式系统相对于集中式系统的优点和缺点。从长远的角度看,推动分布式系统发展的主要动力是什么?

    相对于集中式系统,分布式系统的优点
    ①从经济上,微处理机提供了比大型主机更好的性价比;
    ②从速度上,分布式系统总的计算能力比大型主机更强;
    ③从分布上,具有固定的分布性,一些应用涉及到空间上分散的机器;
    ④从可靠性上,具有极强的可靠性,如果一个机器崩溃,整个系统还可以继续运行;
    ⑤从前景上,分布式操作系统的计算能力可以逐渐有所增加。
分布式系统的缺点
    ①软件问题,目前分布式操作系统开发的软件太少;
    ②通信网络问题,一旦一个系统依赖网络,那么网络的信息丢失或饱和将会抵消我们通过建立分布式系统所获得的大部分优势;
    ③安全问题,数据的易于共享也容易造成对保密数据的访问。
    推动分布式系统发展的主要动力
        尽管分布式系统存在一些潜在的不足,但从长远的角度看,推动分布式系统发展的主要动力是大量个人计算机的存在和人们共同工作与信息共享的需要,这种信息共享必须以一种方便的形式进行。而不受地理或人员,数据以及机器的物理分布的影响

2、多处理机系统和多计算机系统有什么不同?

    共享存储器的计算机系统叫多处理机系统,不共享存储器的计算机系统为多计算机系统。它们之间的本质区别是在多处理机系统中,所有CPU共享统一的虚拟地址空间,在多计算机系统中,每个计算机有它自己的存储器。
    多处理机系统分为基于总线的和基于交换的。基于总线的多处理机系统包含多个连接到一条公共总线的CPU以及一个存储器模块。基于交换的多处理机系统使把存储器划分为若干个模块,通过纵横式交换器将这些存储器模块连接到CPU上。
    多计算机系统分为基于总线的和基于交换的系统。在基于总线的多计算机系统中,每个CPU都与他自身的存储器直接相连,处理器通过快速以太网这样的共享多重访问网络彼此相连。在基于交换的多计算机系统中,处理器之间消息通过互联网进行路由,而不是像基于总线的系统中那样通过广播来发送。

3、真正的分布式操作系统的主要特点是什么?

    必须有一个单一的、全局的进程间通信机制。进程管理必须处处相同。文件系统相同,使用相同的系统调用接口。

4、分布式系统的透明性包括哪几个方面,并解释透明性问题对系统和用户的重要性。

    对分布式系统而言,透明性是指它呈现给用户或应用程序时,就好像是一个单独的计算机系统。具体说来,就是隐藏了多个计算机的处理过程,资源的物理分布。
具体类型

透明性描述
存取透明性隐藏了数据表示和获取资源的具体实现
位置透明性用户不必知道资源位于何处
迁移透明性资源可以不改名而随意移动
重定位透明性用户不必知道资源的位置是否改变
复制透明性用户不必知道有多少拷贝存在
并发透明性多个用户可以自动的共享资源
容错透明性用户不必知道系统出现错误

5、分布式操作系统中,为什么采用微内核技术,通常微内核提供哪些服务

    采用微内核的原因
    ①高度模块化,每一个服务都有一个定义好的接口,每个用户都可以访问任何服务,服务与位置独立;
    ②高度灵活性,具有添加、删除和修改服务的功能;
    ③用户定制,用户可以自定义服务。
    微内核提供的服务有
    ①进程间通信机制;
    ②某些内存管理功能;
    ③少量的低层进程管理和调度;
    ④低层输入/输出服务。

第二章 分布式通信管理

            主要讨论分布式OS中的进程通信问题

OSI参考模型:从下往上依次为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

1、客户—服务器模式的主要思想及优点。

    其主要思想是构造一种操作系统,它由一组协同进程组成,这组进程称为服务进程。为客户机提供服务的进程称为客户。客户和服务器都运行在相同的微内核中,都以进程方式运行。一台机器可以运行多个客户、多个服务器或者两者的结合,客户—服务器模式常常以简单的请求/应答协议为基础,客户向服务器发送一个请求,请求一些服务,服务器完成后返回所需要的数据或者给出一个错误代码,指出工作未完成。
    优点:
    ①简单,客户发出一个请求得到一个应答,在使用之前无需建立连接也不需要释放连接。
    ②有效性,协议栈比较短因而更有效。

2、客户为了发送消息给服务器,它必须知道服务器的地址。试给出服务器进程编址的几种方法,并说明如何定位进程。

    方法一:机器号加进程号,内核使用机器号将消息正确地发送到适当的机器上,用进程号决定将消息发送给哪一个进程。
    方法二:进程选择随机地址,通过广播方式定位进程,进程在大范围的地址空间中随机指定自己的标识号。在支持广播式的LAN中,发送者广播一个特殊的定位包,其中包含目的进程地址,所有的内核查看地址是不是他们的,如果是则返回消息给出网络地址,然后发送内核缓存地址。
    方法三:客户机运行时,使用ASCII码访问服务。客户机运行时,向名字服务器发送请求信息,名字服务器将ASCII服务器名映射成服务器地址,客户机收到给地址后,可以访问服务器。

3、说明在C/S模式下解决消息可靠传输的三种方法。

    ①重新定义非可靠的send语句。系统无法保证消息发送成功,完成可靠的通信依赖于用户。
    ②要求接收机器的内核给发送机器的内核发送一个确认消息。只有收到这个确认消息后发送内核释放用户进程。确认消息从一个内核传送到另一个内核,无论是客户还是服务器都看不到确认消息。
    ③客户在发送消息后阻塞,服务器内核不发送确认消息而是将应答作为确认消息。因此客户进程一直阻塞到应答消息到来为止,如果时间太长,发送内核会重新发送请求以防止消息丢失。

                            RPC(远程过程调用 remote procedure call)

4、说明RPC的主要思想及RPC调用的主要步骤。

    主要思想是允许程序去调用位于其他机器上的过程。当位于机器A的一个进程调用机器B上的某个过程时,机器A上的过程被挂起,被调用的过程在机器B上执行。调用者将消息放在参数表中传送给被调用者,结果作为过程的返回值返回给调用者。消息的传送与I/O操作对于编程人员是不可见得。
    主要步骤如下:
        ①客户过程以普通方式调用相应的客户存根;
        ②客户存根建立消息并激活内核陷阱;
        ③内核将消息发送到远程内核;
        ④远程内核将消息发送到服务器存根;
        ⑤服务器存根取出消息中的参数后调用服务器的过程;
        ⑥服务器完成工作后将结果返回至服务器存根;
        ⑦服务器存根将它打包并激活内核陷阱;
        ⑧远程内核将消息发送至客户内核;
        ⑨客户内核将消息交给客户存根;
        ⑩客户存根从消息中取出结果返回给客户。

5、在RPC调用时,如果服务器或客户机崩溃了,各有哪些解决方法。

    如果是服务器崩溃了,用户无法区分服务器是在执行前还是执行后崩溃,解决方案如下:
        ①至少一次语义,指等待服务器重新启动,然后重发请求。这种方法要求不断重试直至客户收到应答消息。它保证RPC至少执行一次。
        ②至多一次语义,指立即放弃并报告失效。它确保RPC至多执行一次,但也可能根本没有执行;
        ③不作保证;
        ④精确一次语义;

    如果是客户机崩溃了,存在孤儿问题(客户已发送请求,在应答到来之前崩溃了,此时已经激活服务器中的过程并获得结果,但是没有客户在等待结果)。解决方案如下:
        ①根除,在客户存根发送RPC消息前先做日志(用来恢复崩溃),系统重新启动后,检查日志,发现孤儿存在并将其杀死;
        ②再生,把时间划分成有序的纪元,当客户端重启时,向所有机器广播一个消息通知一个新纪元的到来,并结束所有的远程计算;
    ③温和再生,服务器接收到新纪元广播时,检查自己是否有远程计算,只有那些找不到拥有者的远程计算终止;
    ④过期,每个RPC都分配一个标准时间T来完成任务,如果超时而没有完成则显示分配一个数额。

第三章 分布式系统的同步

1、实现分布式系统同步的复杂性表现在哪几个方面?说明先发生关系,并说明在LAMPORT算法中怎样给事件分配时间。

    分布式算法有如下性质:
        ①相关信息分散在多台机器上;
        ②进程决策仅依赖于本地信息;
        ③系统中单点故障应避免;
        ④没有公用时钟或其他精确的全局时间资源存在。
        前三点说明在一处收集所有信息并对它进行处理是不可接受的。最后一点说明在分布式系统中获得时间上的一致并不是容易的。

    LAMPORT算法的解决方案是直接使用先发生关系,每条消息都携带发送者的时钟以指出其发送的时间,当消息到达时,接受者的时钟比消息发送者时钟小,就立即将自己的时钟调到比发送者的时间大于1或更多的值。我们给出一种测量时间的方法,使得对每一事件a,在所有进程中都认可给它分配一个时间值C(a),在给事件分配时间时要遵循一下规则:①在同一进程中a发生在b之前,则C(a)<C(b);②若a和b分别代表发送消息和接收消息,那么C(a)<C(b);③对所有事件a和b,C(a)≠C(b)

2、说明RICART和AGRAWALE分布式互斥算法;假定A和B是相互独立的两个临界区,进程0要进入A,进程1要进入B,R-A分布式互斥算法会导致死锁吗?说明理由。
    (1)RICART和AGRAWALE算法要求系统中所有事件都是全序的,也就是说,对任何事件组消息,那个先发生必须无歧义,算法如下:当一个进程想进入临界区时,它要建立一个包括他要进入的临界区的名字、处理机号、当前时间的消息,然后将消息发送给所有其它进程,也包括发送给自身。
    当一个进程接收到另一个进程请求消息时,它取决于接收方的状态以及临界区的命名有三种情况:
        ①接受者不在临界区,也不想进入临界区,他就向发送者发送OK消息;
        ②接受者已经进入临界区,它不必回答,而是负责对请求队列排队;
        ③接受者想要进入临界区,但是还没有进入时,它要负责将发来的消息和它发送给其他进程的时间戳相比,取小的那个。如果来的消息时间戳小,接受者发送OK消息,否则接受者负责排列请求队列而不发送任何消息。
    在发送完允许进入临界区的请求后,进程将不再做任何事,仅等待所有的允许消息,一旦得到允许,它就进入临界区。它从临界区退出时,向队列中所有进程发送OK消息,并将它从队列中删除。
    (2)该算法可能导致死锁,例如:A和B是相互独立的两个临界区,进程0要进入A,进程1要进入B,而此时进程0在B中,进程1在A中就会进入死锁。

3、举例说明用私有工作空间实现事务处理时的基本思想。

    在进程开始的一个事务时给它分配一个包含了所有需要访问的文件的私有工作空间,在事务提交或终止前,所有的读写操作都是在私有空间而不是真正的文件系统中进行,存在的问题是所有内容都拷贝到私有空间,代价难以承受。
    优化方法是:
        ①私有空间中只包含一个指向父辈工作区的指针,当事务处于最顶层时,它的工作区是真正的文件系统。
        ②使用索引节点,索引是一个与判断文件所在的磁盘块位置有关的数据库,该方法不将全部文件考入私有空间,而只是拷贝索引。

4、说明在分布式系统中实现原子性提交的两阶段提交协议的基本思想及其优点。

    两阶段提交协议的基本思想是有一个进程作为协调者,通常是执行事务的进程。
    在准备提交阶段,协调者向日志中写入Prepare,然后向所有服务器发送准备提交消息,服务器接收到消息后,检查自己是否准备提交,如果是就向日志中写入Ready,然后向协调器发送准备好消息。
    在提交阶段,协调器接受所有响应后决定提交还是撤销,如果所有服务器都准备提交,则提交事务;否则撤销事务。无论如何协调器都会写入日志,并发送决定消息,服务器收到消息后也将结果写入日志,并发送结束消息,完成整个过程。

5、举例说明为什么使用集中式的死锁检测算法会产生假死锁,并给出一种解决方法。

    集中式的死锁检测算法,每台机器的资源图中只包含它自己的进程和资源,协调者节点保存整个系统(所有资源图的集合)的资源图。当机器资源图发生变化时相应的消息发送给协调者以提供更新,当协调者检测到环路时,它终止一个进程以解决死锁。
在这里插入图片描述

    上图:圆表示进程,方框表示资源,开始时如同a,b,c所示,过来一段时间,B释放R并请求T,这是一个合法的操作,机器0向协调者发送一条消息申明它释放资源R,机器1向协调者发送一条消息声明进程B正等待它的资源T,不幸的是机器1的消息先到达协调者,导致生成资源图如图d所示。协调者得出错误的结论——死锁存在,这种情况称为假死锁。

    解决办法是:使用Lamport算法以提供全局统一的时间,对协调者收到的消息按照时间戳排序。

6、说明wait-die(等-死算法)和wound-wait(老-死算法)分布式死锁预防方法。事务时间戳为50的进程申请事务时间戳为100的进程占用的资源。按以上两种策略,结果会如何?

    (时间戳越小的进程越是年老)wait-die死锁预防算法:当较老的进程请求年轻进程所占用的资源时,老进程只能等待;如果年轻进程请求老进程占用的资源时,年轻进程会被终止。
    Wound-wait死锁预防算法:当老进程请求年轻进程所拥有的资源时,老进程抢占年轻进程的资源,年轻进程被终止;当年轻进程请求老进程所拥有的的资源时,年轻进程等待。

第四章 分布式系统中的进程和处理机

1、叙述实现线程包的方法及其优缺点。

    ①在用户空间实现线程:是将线程包完全放到用户空间中去,内核对此一无所知。
    优点:在不支持线程的操作系统中实现:线程切换比使用内核陷阱快一个数量级;允许每个进程有自己定制的调度算法。
    缺点:出现阻塞调用怎样实现?系统调用改为非阻塞系统调用或调用SELECT。
               如果一个线程开始运行,那么进程中的其它线程除非在第一个线程自愿释放CPU之后才能运行。解决方法:时钟信号中断。
    ②在内核中实现线程:当一个线程想去创建一个新线程或撤销已存在的线程时,它发出一个内核调用,由它完成创建和回收工作。内核中每一个进程都有一张包含线程信息(线程的寄存器、状态、优先权等)的表。
    优点:容易实现调度。
    缺点:系统开销大。
    ③调度者行为:内核分配一定数量的虚拟处理机给每个进程,并且让(用户空间)运行期系统将线程分配给处理机。
    优点:效率,很好地解决了控制权由阻塞线程传递给非阻塞线程。
    缺点:可能产生死锁,与分层系统的内在结构违背。

2、说明发送者发起的分布式启发算法和接收者发起的分布式启发算法及各自的主要缺点。

    ①发送者发起的分布式启发算法:当创建进程时,创建进程的机器将对一个随机选取的机器发送询问,询问那台机器的负载是否低于某个阈值,如果是,将发送进程;否则,将选择另一台机子并发送询问。如果在N次询问内还没有找到合适的机器,算法将停止,新进程将在创建它的机器上运行。
    缺点:在负载十分严重的情况下,所有机器都会不停的毫无意义的向其他机器发送询问,想找到一台愿意接受更多工作的机器,在这种情况下,几乎没有进程会被减轻负载,但却会引起相当可观的额外开销。
    ②接受者发起的分布式启发算法:当一个进程结束时,系统将检查自己是否有足够的工作可做,如果没有,将随机向一台机器申请工作,如果那台机器没有要给予的工作,系统将继续询问第二、第三台机器,如果询问N台机器都没有申请到工作,系统将暂停申请,开始处理系统队列中一个等待进程,当这个进程结束后,开始下一轮的申请。如果系统无事可做,则进入空闲状态,一定的时间后重新开始申请。
    缺点:系统在无事可做的时候会造成相当大的询问负载。

3、举例说明Lamport等人提出的算法是如何解决Byzantine将军问题的。
在这里插入图片描述
    Lamport等人设计了一种递归算法可在特定条件下解决这一问题。例如:N=4(有四个将军),M=1(有一个叛徒),对于这样的参数,参数运行四步。
第一步,每个将军发送可靠的消息给其他所有的将军,声明自己真实的军队人数,忠诚的将军声明的是真值,叛徒则可能对其他每个将军都撒一个不同的谎。如图a;
第二步,把第一步声明的结果组成向量形式,如图b;
第三步:每个将军把图b中各自的向量传递给其他每一个将军,这里叛徒再一次撒谎,使用了12个新值A-J,如图c
第四步:每个将军检查所有新接收向量的每一个元素,若某个值占多数则把该值放入结果向量中。若没有一个值占多数,结果向量中的相应元素标记为不知道(UNKNOWN)如图d。

4、简述三模冗余的基本思想,并举例说明三模冗余能否处理Byzabtine故障。

    三模冗余是使用物理冗余来提供容错的技术,是使用主动复制方法的容错。在电子电路中有设备A、B、C,然后每个设备复制三次,结果就是每级电路都设置了三个表决器,每个表决器有三个输入和一个输出,若两个或者三个输出相同,输出则等于输入,若三个输入各不相同,输出就是不定值,这种设计就是TMR。
    若处理机是Byzabtine类型的,出错的处理机仍然工作并发出错误的随机的应答,那么至少需要2K+1个处理机才能达到K级容错。最坏情况下K个失效的处理机偶然(甚至有意)地产生相同的应答,然而剩下的K+1个未出错的处理机也将产生相同的应答,因此客户机可以根据大多数的应答得到正确结果。

    三模冗余在每组中有一个部件出现Byzabtine故障时可以处理,而一组中有两个甚至三个同时出现Byzabtine故障时则不能处理。

5、举例说明采用图论确定性算法进行处理机分配的实现方法。

    整个系统可以表示为一张带权图,每个节点表示一个进程,每条边表示两个进程之间的通信量。从数学角度看,整个问题就变成了如何根据特定的限制将图划分为K(k为系统中cpu数量)个不相连的子图(如每个子图的总cpu和内存需求在一定限制内)。对于每种满足限制的解决方案,子图内部的边意味着机器内部的通信,可以忽略。从一个子图连向另一个子图的边表示网络通信。该算法的目的就是在满足限制下,找到一种划分方式使网络通信量最小。下图表示了图的两种划分。
在这里插入图片描述
    方案A:通信量=(3+2+4+4)+(2+8+5+2)=30
    方案B:通信量=(3+2+4+4)+(3+5+5+2)=28

第五章 分布式文件系统

1、使用上载/下载模式的文件服务器系统与使用远程访问模式的文件系统之间有什么区别?

    上载/下载模式:只提供两种主要的操作(读文件和写文件),读操作将整个文件从文件服务器传输到请求客户端,写操作则刚好相反,文件系统运行在客户端。优点是系统概念简单,应用程序取得需要的文件,并在本地使用它。当程序结束时,将所有修改的文件或新创建的文件写回去,不需要管理复杂的文件服务接口,文件传输效率高。
    缺点:是客户端需要足够的存储空间来存储所需的所有文件。而且,如果只需要文件的一小部分,移动整个文件是很浪费的。
    **远程访问模式:**提供了大量的操作,如打开、关闭文件,读写部分文件等等。文件系统在服务器端运行。优点是客户不需要大量存储空间,当仅需要一小部分文件时不需要传送整个文件。

2、分布式系统中处理共享文件的四种方法(文件共享的四种语义)

    ①unix语义。系统使所有的操作都有一个绝对时间顺序,read操作读取最近一个write操作后的内容,要求对一个文件系统的任何操作对所有进程都是及时可见的。
    ②会话会议。对于打开文件的修改最初只对修改文件的进程是可见的,当文件关闭后,对文件的修改对其他进程才是可见的。
    ③不可修改语义。不允许打开文件进行写操作,只提供create和read两种操作。只能进行简答的共享和复制。
    ④事务语义。使用原子事务,即所有的操作要么全做,要么全不做。

3、说明无状态服务器和有状态服务器,并说明两者的区别。

    无状态服务器:无状态服务器处理的客户信息必须全部来自于请求所携带的信息以及其它服务器自身所保存的、并且可以被所有请求所使用的公共信息。无状态服务器具有以下特点:
        并不保存客户请求的数据(状态);
        客户在请求时需要携带额外的状态数据;
        无状态服务器更加健壮,重启服务器不会丢失状态信息,这使得维护和扩容更加简单
    有状态服务器:如果是状态化请求,那么服务端一般需要保存请求的相关信息,每个请求可以默认地使用以前的请求信息。有状态服务器具有以下特点
        保存客户请求的数据(状态);
        服务端容易对客户状态进行管理;
        服务器并不要求每次客户请求都携带额外的状态数据。

4、说明保持客户高速缓存一致性的四种算法。

    ①直接写,当缓存中的文件被更新后,新的值保存在高速缓存中,而且同时发送到服务器,而当另外的进程访问文件时,读到的是最新值,但是存在一个问题,其他进程在更新之前读到的文件内容可能是过期的,那么每次用到文件时需要从服务器中读取文件版本进行比较,查看是否过期,但是每次都要在服务器和客户端之间通信,这样就体现不出缓存的作用了。
    ②延迟写,操作不立即发送给服务器,而是延迟一段时间,也就减少了网络消息,当进程读取文件时,依赖于时间。具体读到的是哪次操作的结果不确定,语义模糊。
    ③关闭写,操作只有在文件关闭后才写回服务器,配合session语义。
    ④集中控制,就是在文件服务器上保存了进程对文件的操作方式等信息,类似于锁机制的管理,避免写操作的文件被其它进程操作,但是当修改的操作结束时,会将操作结束消息通知服务器,操作的结果也就会立即送到服务器。

5、说明分布式操作系统提供文件复制服务的原因以及实现复制的三种方法。

    分布式系统通常保持文件的多个拷贝,每个拷贝放在一台单独的文件服务器上提供这种服务主要有以下几种原因:
    ①数据不丢失,通过对每个文件的独立备份来增加系统的可靠性;
    ②当一个文件服务器出现问题时,仍然允许文件进行访问;
    ③负载均衡,将工作量分配到多个服务器上。

在这里插入图片描述
三种复制方法依次如上图所示。
    ①显式复制,如图a所示,是为编程人员控制整个进程所用,当进程产生一个文件时,可以再其它服务器上生成另外的拷贝,如果目录服务允许一个文件有多个拷贝,所有拷贝的网络地址都可以和这个文件名联系起来。
    ②懒惰拷贝,如图b所示,只要在某个服务器上建立每个文件的一个拷贝,服务器自己在其它的服务器上也可以自动生成副本。
    ③使用组通信,如图c所示,所有的写系统调用同时传送到所有的服务器,于是,其它的拷贝在原文件产生的时候就产生了。

6、说明更新复制文件的两种主要算法:主拷贝算法、Gifford算法。

    主拷贝算法:使用时,指定一个服务器为主服务器,其它所有服务器为从服务器,当要更新一个复制文件时,我们就将改变发送至主服务器上,在本地完成修改,然后向各从服务器发出命令,命令它们也完成修改。这样可以在任何一个(主或者从)服务器上进行读取。这种方法简单,但是有一个问题,当主服务器停机时,所有的更新将不能进行。
    Gifford算法:基本思想是在读写一个复制文件之前要先申请并获得多个服务器的允许。例如,读一个已经有N个副本的复制文件,客户需要获得一个读法定数,它是任何Nr个或者更多个服务器的任一集合,同样的,修改一个文件需要一个至少Nw个服务器的写法定数。Nr和Nw的值必须满足约束条件Nr+Nw>N,只有在适当数目的服务器同意参与时,文件才能进行读写操作。

第六章 分布式共享存储器

1、
2、说明基于总线的多处理机系统中的write-through和write-once协议

    通写缓存一致性协议是一种特别简单的、通用的协议。当CPU从存储器中首次读取某个字时,该字通过总线取出并存储在提出请求的CPU缓存中,当再次需要这个字时,CPU不再提出访问存储器的请求,而是直接从缓存中获取,这样减少了总线流量,同写缓存一致性协议概括如下:

时间缓存响应本地CPU操作时执行缓存响应远程CPU操作时执行的动作
读失败Read miss从存储器中取得数据并存储到缓存中无动作
读命中Read hit从本地缓存中取得数据无动作
写失败Write miss更新存储器中的数据并存储到缓存中无动作
写命中Write hit更新存储器和缓存使缓存无效

表中第一列列出了可能发生的四种基本事件,第二列说明缓存如何响应CPU的操作,第三列说明缓存发现(通过监听)其它CPU的读写操作如何反应。例如,当监听者发现其它CPU写入的字在其缓存中(从监听者角度看是命中)时,监听者必须采取措施,即从缓存中删除这个字。通写协议已与理解和使用。缺点是所有的读写操作必须通过总线,因此允许挂在单一总线上的CPU数量仍然很少,不能满足大型多处理机的需求。

write-once协议:该协议管理缓存块,每个块处于以下三种状态之一:
    ①无效,本缓存块没有有效数据;
    ②干净,存储器被更新,该块可能在别的缓存中;
    ③脏,存储器错误,该数据块不再其它缓存中。
基本思想是允许正被多个CPU读取的字出现在它们所有的缓存中,而仅被一个CPU经常写的字只保存在他的缓存中,为减少总线流量,不必每次都写回存储器。

3、简述分布式共享存储器的三种模型:严格一致性、顺序一致性、因果一致性,并举例说明。

严格一致性(Strict Consistency):对于数据项X的任何读操作将返回最近一次对X进行写操作的结果对应的值。严格一致性是限制性最强的模型,但是在分布式系统中实现这种模型代价太大,所以在实际系统中运用有限。
顺序一致性:任何执行结果都是相同的,就好像所有进程对数据存储的读、写操作是按某种序列顺序执行的,并且每个进程的操作按照程序所制定的顺序出现在这个序列中。也就是说,任何读、写操作的交叉都是可接受的,但是所有进程都看到相同的操作交叉。顺序一致性由Lamport(1979)在解决多处理器系统的共享存储器时首次提出的。
因果一致性:所有进程必须以相同的顺序看到具有潜在因果关系的写操作。不同机器上的进程可以以不同的顺序看到并发的写操作。
假设P1和P2是有因果关系的两个进程,例如P2的写操作信赖于P1的写操作,那么P1和P2对X的修改顺序,在P3和P4看来可以是不一样的。

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值