《分布式操作系统》知识点(1~7)一

注:

(6)1  P210:(6)代表该习题是第6章的内容,1是题号(第1题),P210是所在书中的大体页数。


(6)1在交换式Dash多处理机系统中,为了保持缓存一致性,采用了Dash协议,某一簇中的一CPU写一未缓存的数据块,之后另外一簇的另外一CPU读该数据块。试详细说明写操作和读操作是如何进行的。P210

答:写操作:写数据块的CPU先在本地总线发送请求察看邻近CPU的缓存中是否有该数据块。邻近CPU的缓存中没有该数据块,本次查找失败,数据块所在的其他地方,CPU发送信包到其宿主所在簇。这里块的状态为UNCACHED,标记为DIRTY并发送给请求者。

读操作:读数据块的CPU首先检查自己的内存,缓存中无此字,则在本地簇中发出请求,询问本地簇的其他CPU缓存中是否有此字。数据块不在任何簇的缓存中,CPU发一请求信包给该块的宿主所在簇。宿主所在簇的目录管理硬件检查它的表以确定其状态。此处状态为DIRTY,则拥有DIRTY块的簇将数据块发送给请求簇,将其状态改为CLEAN,它还要给宿主所在簇发回一个拷贝以更新存储器,此时块的状态置为CLEAN。

 

(6 P207)2在基于总线的多处理机系统中,遵循write once协议,假设有C1,C2,C3,C4四个CPU,一操作序列如下:C1读一字W1(只存在于共享存储器中)、C1继续读该字、C2读该字;C1修改该字、C3读该字、C4读该字。试详细说明以上操作序列是如何执行的。

答:如下图:

《分布式操作系统》知识点(1~7)一_第1张图片

C1将将字W1的地址放到总线上,并在控制总线上加上“读”信号,存储器读出需要的数据,将其放在总线上,在控制总线上加“准备好”信号,C1即可以读到字W1。由于C1的缓存中含有字W1,所以C1第二次读取时从缓存中读取字W1。C2读取字W1时,C1监听到此读操作,不做响应,内存响应C2 的请求,经过总线将字W1 发给C2。C1将新值写入字W1,C2监听到此写操作,将自己的缓存项置为无效,C1的缓存块状态置为DIRTY,此时C1 拥有字W1的唯一拷贝,存储器中的字已失效。C3发出字请求访问信号,C1发现总线上的访问请求,则发信号禁止存储器响应,然后C1 提供C3需要的字并将自己的项置为无效。C3发现字来自其他的缓存而不是存储器,则将其状态置为DIRTY,则也相应地标示了自己的缓存项。同样,C4发出字请求,C3发信号禁止存储器响应,C3提供C需要的字并将自己的项置为无效,C4将自己的状态置为DIRTY。

 

(5)3在分布式系统,为了获得文件读写的效率,需要使用高速缓存,说明设置缓存的各种方法及用途。并说明解决一致性问题的四种算法及各种算法存在的问题。P185

答:设置缓存的方法和用途:

有三种可使用的选择来精确定义高速缓存的位置。

第一个是在每个用户进程自己的地址空间直接进行文件高速缓存。典型地,高速缓存由系统调用库管理。当打开、关闭、读和写文件时,该库只是保存最常用的文件,这样当重新使用文件时,它已经是可用的了。当该进程退出时,所有被修改过的文件都回写到服务器中。尽管这种模式的系统开销很小,但它仅当单个进程重复地打开和关闭文件时才有效率。一个数据库管理程序进程可能满足这种要求,但是在通常的程序开发环境中,大多数进程对每个文件只读一次,因此库中的高速缓存是无益可获的。

第二个是设置高速缓存的地方是在内核中。这里的缺点是在所有情况下都需要内核调用,甚至对于高速缓存命中。但事实是,高速缓存使进程获益比补偿多。例如,假设一个两遍扫描编译器作为两个进程运行。第一遍扫描写一个中间文件而由第一遍扫描来读。当第一遍扫描进程结束后,该中间文件可能在高速缓存中,所以在第二遍扫描进程读入时没有必要进行服务器调用。

第三个是在一个单独的用户级高速缓存管理者进程中,用户级高速缓存器管理者的优点是它保持了(微)内核独立于文件系统编码,因为它是完全孤立的,因此易十编程,并巨更加灵活。

解决一致性问题的四种算法:

1直接写算法:(WRITE-THRONG算法)当修改一个高速缓存项(文件或块)时,新的值保存在高速缓存中并立即写到服务器。

2延迟写:延迟写操作使得语义变得不清楚。当另一个进程读此文件时,它所得结果取决于时间选择。延迟写只好在运行效率和清晰的语义之间权衡。

3关闭时写:仅当文件关闭后才将文件写到服务器,与对话语义相配;

4集中控制算法:当打开一个文件时,打开该文件的机器向服务器发送一条消息。服务器保存谁打开了哪个文件以及打开是为了读还是写或者两者兼有。如果文件是为读而打开,允许其他进程为读而打开,避免为写而打开。如果某个进程为写而打开一个文件,必须禁止所有其他访问。当关闭文件时,必须报告,以便服务器更新。

四种算法存在的问题:

直接写:有效,但不影响写流量。高速缓存向任何客户提供文件时,须先和服务器进行核对,这要付出一些时间代价。对写来说,网络传输是相同的,就像根本没有高速缓存一样。

延迟写:效率较高,但可能语义不清。

关闭时写:与会话语义相配。如果两个已放入高速缓存的文件被依次回写,第二个或覆盖第一个。解决此问题的唯一方法是注意它是否比第一次出现时已好得很多了。

集中控制:UNIX语义,但不健壮,不能规模化。尽管发送自发消息是肯定可行的,但却非常生硬,必须要小心。

 

(5)4给出实现文件复制的三种方法,并举例说明更新复制文件的Gifford算法,并说明某些服务器崩溃时,应该采取什么措施。P190

答:文件复制的三种方法:

显式文件复制,是为编程人员控制整个进程而用。当进程产生一个文件时,可以在其他服务器上生成另外的拷贝。如果目录服务存在允许一个文件有多个拷贝,所有拷贝的网络地址都可以和这个文件名联系起来。

懒惰复制,只要在某个服务器上建立每个文件的一个拷贝,服务器自己在其他的服务器上也可自动生成副本。

用组复制文件,所有的写系统调用同时传送到所有的服务器。于是,其他的拷贝在原文件产生时就产生了。

Gifford算法即表决(voting)。基本思想:在读或写一个复制文件之前要求申请并获得多个服务器的允许。服务器在改变文件时,将一个新的版本号和新的文件联系起来。版本号用来该文件的版本。读一个已有N个复制存在的文件时,客户需要获得一个读法定数Nr,修改一个文件需要一个写法定数Nw,Nr和Nw的值必须满足约束条件Nr+Nw>N。即只有在适当数目的服务器参与时,文件才能被读或写。

举例:例如,有5个服务器,客户已确定它们中的下个有版本号8,则其他两个的版本号不可能是9。因为任何从版本号8到版本号9的成功更新需要3个服务器同意,而不是两个。

解决办法:虚像表决(Voting With Ghosts)通过为每个已经崩溃的服务器建立一个没有存储器的虚拟服务器解决了这个问题。虚设者不允许出现在读法定数中(毕竟它没有任何文件),但它可以加入写法定数中,在这种情况下,它只须去掉写入的文件即可。只要有一个真实的服务器存在,写操作就能成功。当一个崩溃的服务器重新启动时,它必须获得一个读法定数来找到最新的版本。在它开始正常工作之前,它将为自己拷贝一份该拷贝。由于该算法和基本的表决算法.具有相同的特性,因此它是可行的。

 

(5)5 试说明举例什么是有状态服务器,什么是无状态服务器,并对有状态和无状态服务器进行详细的比较。P183

答:有状态服务器:服务器应该保存两个请求之间的客户的状态信息。毕竟,集中式操作系统保存了关于活动进程的状态信息。

无状态服务器:当客户发送一个请求给服务器时,服务器完成请求,发送一个应答,然后从内部表中移出该请求的所有信息。在请求之间,服务器不保存具体客户的信息。

为了更好地理解这个差别,我们考虑拥有打开、读、写和关闭文件通用命令的文件服务器。文件打开之后,服务器必须保存哪个客户打开了哪个文件的信息。典型地,当一个文件打开时,客户将获得一个文件描述符或其他用于后续调用的编号,以便识别这个文件。当有请求到来时,服务器就使用.文件描述符来确定需要哪个文件。将文件描述符变换成文件本身的表就是状态信息。

对于不保留状态信息的服务器,每一个请求必须是独立的。为了使服务器能够工作,它必须包含全文件名和文件中的偏移址。此信息增加了消息的长度。

研究状态信息的另一种方法是:如果服务器坏了并且它的所有表都永久性丢失了,将会发生什么情况,当服务器重新启动时,它已不能再知道哪些客户打开了哪些文件。以后对已打开文件进行读与写操作就会失败,而且如果有可能的话,将完全由客户决定恢复。其结果是,不保留状态的服务器比保留状态的服务器有助于更好地容错。这是赞成前者的理由之一。

正如我们已提到的那样,无状态服务器在本质上有更多的容错。不需要OPEN和CLOSE调用,这就减少了消息编号,特别对于那些整个文件用一次就可读出的普通情况,服务器不用浪费空间来存放表。使用表时,如果太多的客户一次打开太多的文件,则将表填满,从而不能打开新的文件。最后对于状态服务器,如在文件们一开始客户出了故障,服务器就会处于困境中。如果它对此束手无策,它的表最终将充满垃圾。如果它超时了还未打开文件,那么客户因两个请求之间等待时间太长将被拒绝服务,而校正程序就会失去校正功能。无状态服务就不存在这些问题。

《分布式操作系统》知识点(1~7)一_第2张图片

有状态服务器也可以对这些问题进行处理。由于READ和WRITE消息并不是必须包含文件名,所以他可以以更短些。这样就可使用更小的网络带宽。由于关于打开文件(在UNIX项中,i节点)的信息在文件关闭之前都可保存在主存储器中,所以有较好的性能。由于人多数文件都是按顺序读的,可以预先读信息块减少延迟。如果一个客户已用完时间片并且两次发送了同一请求,例如APEEND ,那么用状态信息(通过每一条消息的次序号)就可以很容易地检测到,在无状态操作的不可靠通信前,实现幂等性需要更多的努力。最后,在一个真正的无状态系统中,要使文件锁定是不可能的,因为建立锁定的唯一效果是使状态进入系统。在无状态系统中,文件锁定必须通过一个特定的锁定服务器来完成。

 

(5)6 在分布式系统中,可支持上载/下载文件模式或远程访问模式,说明这两种模式并进行比较。P174~P175

答:在上载/下载模式中,文件服务只提供两种上要的操作:读文件和写文件。前一个操作是将整个文件从一个文件服务器传送到提出i求的客户;后一个操作是将整个文件从客户传送到服务器。因此这种概念模式是在任一方向上传送整个文件。这些文件可以存储在内存或本地的硬盘中,视需要而定。

上载/下载的优点是概念简单。应用程序取得它们所需的文件,然后在本地使用它们。任何修改过的文件或新创建的文件在程序结束时都要将它回写。使用这种模式不需要掌握复杂的文件接口,而且整个文件传送也是高效的.,但是,客户端必须具有足够大的存储空间来存储所需的所有文件。而且,如果只需要文件的一小部分,移动整个文件是很浪费的。

文件服务的另一种类型是远程访问模式,在这种模式中,文件服务提供了大量的操作用于打开和关闭文件,读写文件的一部分,在文件中来回移动检查和改变文件属性,等等。而在上载/下载模式中,文件服务只提供物理存储和传送,在这里文件系统运行在服务器上而不是运行在客户端。远程存取模式的优点是在客户端不需要很大的空间,与下又需要文件的一小部分时,不需要传送整个文件。

 

(4)7 分布式协同一致算法的目标是使所有无故障处理机对待某些问题的意见达到一致,在3个正常处理机,2个出错处理机的情况下,用Lamport算法能否达成一致,给出算法的具体步骤。P156

答:用Lamport算法不能达成一致,至少得5个正常的处理机才能达成一致。

在Lamport等的论文中,已证明了一个有m个处理机出错的系统中要实现协同一致,只有当有2m + 1个正常处理机时才可能。处理机总数为3m+ 1。换种说法即是,只有大于2/3的处理机正常工作时,协同一致才是可能的。

Lamport具体算法的步骤:

1.每个将军发送消息给其它将军,声明自己真实的军队人数

2.把第一步声明的结果收集组成向量的形式。(b)

3.每个将军将各自的向量传递给其它每个将军。(c)

4.每个将军检查所有接收向量的第i个元素。若某个值占多数,放入结果向量中,否则,标记为UNKNOWN。

你可能感兴趣的:(课程学习)