第一章 绪论
1、中间件在分布式系统中扮演什么角?
答:中间件主要是为了增强分布式系统的透明性(这正是网络操作系统所缺乏的),换言之,中间件的目标是分布式系统的单系统视图。
2、解释(分布)透明性的含义,并且给出各种类型透明性的例子。
答:分布透明性是一种现象,即一个系统的分布情况对于用户和应用来说是隐藏的。包括:访问透明、位置透明、移植透明、重定位透明、复制透明、并发透明、故障透明和持久性透明。
3、在分布式系统中,为什么有时难以隐藏故障的发生以及故障恢复过程?
答:通常,要探测一个服务器是停止服务还是该服务器的反应变慢这些情况是不可能的。因此,一个系统可能在服务 响应变慢的时候报告该服务已经停止了。
4、为什么有时候要求最大程度地实现透明性并不好?
答:最大程度地实现透明性可能导致相当大的性能损失,从而导致用户无法接受。
5、什么是开放的分布式系统?开放性带来哪些好处?
答:开放的分布式系统根据明确定义的规则来提供服务。开放系统能够很容易地与其它系统协作,同时也允许应用移植到同一个系统的不同实现中。
6、请对可扩展系统的含义做出准确描述
答:一个系统的可扩展包含下面几个方面:组件的数量、几何尺寸、管理域的数量与尺寸,前提是这个系统可以在上面几个方面进行增加而不会导致不可接受的性能损失。
7、可以通过应用多种技术来取得可扩展性。请说出这些技术。
答:可扩展性可以通过分布式、复制和缓存来获得。
8、多处理器系统与多计算机系统有什么不同?
答:在多处理器系统中,多个CPU访问共享的主存储器。在多计算机系统中没有共享存储器,CPU之间只能通过消息传递来进行通信。
9、在多计算机系统中的256个CPU组成了一个16 X 16的网格方阵。在最坏的情况下,消息的延迟时间有多长(以跳(hop)的形式给出,跳是结点之间的逻辑距离)?
答:假设路由是最优的,最长的路由是从网格方阵的一个角落到对角的角落。那么这个路由的长度是30跳。如果一行或一列中的处理器彼此相连,则路由长度为15跳。
10、现在考虑包含256个CPU的超立方体,最坏情况下消息的延迟有多长?
答:在具有256个CPUs的超立方体中,每个结点可以用一个二进制地址,范围从
00000000~1111,1111。一个hop表示地址改变了一位。因此从 0000,0000~0000,0001表示一个hop,而从0000,0001~0000,0011也是表示一个hop。所以最长的路由有8个hop。
11、分布式操作系统与网络操作系统有什么不同?
server系统和普通系统的区别答:分布式操作系统管理多处理器和同种类的多计算机。网络操作系统连接不同的、独立的计算机,这些计算机有自己的操作系统以便用户可以容易地使用每台计算机所提供的服务。
12、请解释如何使用微内核将操作系统组织成客户-服务器的方式。
答:微内核可以把客户端应用从操作系统服务中分离出来,方法是通过强迫每个请求都通过内核来传递。因此,操作系统服务能够通过用户级的服务器来实现,这些用户级的服务器是作为普通的进程来运行的。如果微内核有网络功能,这些服务器也能作为远端机器。
13、请解释基于分页的分布式共享存储器系统主要有哪些操作。
答:基于分页的DSM利用了操作系统的虚拟存储器的功能。当一个应用程序对内存寻址时,如果该内存位置没有映射到当前物理存储器的存储器空间的时候,页错误就会发生,并将控制权转交给操作系统。操作系统定位到适当的页,通过网络传递它的内容,并映射到物理存储器中。从而,应用可以继续运行。
14、为什么要开发分布式共享存储器系统?你认为是什么问题给这种系统的高效率实现造成了困难?
答:主要的原因是,写基于消息传递的并行和分布式程序来进行通信要比使用共享存储器难得多。不管进行什么操作,网络中的页面传输都会发生,这导致了DSM系统效率的下降。如果页面被不同的处理器共享,在虚拟存储系统中很容易进入和“陷入”类似的状态。最后,DSM系统比消息传递的解决方案要慢,而且由于需要跟踪页面而变得更慢。
15、请解释什么是分布式共享存储器系统中的伪共享。你有没有针对这个问题的解决方案?
答:当数据属于两个不同且独立的处理器(可能在不同的机器上)时会发生伪共享,这时数据被映射到相同的逻辑页上。效果是这个页面会在两个处理器之间发生交换,从而导致不明显且不必要的依赖。解决方案是让页面更小并禁止独立的处理器共享一个页面。
16、由于存在错误,某个实验性的文件服务器有3 / 4的时间能够正常工作,而另外1 / 4的时间无法工作。如果要确保服务至少在99%的时间可用,需要将该文件服务器复制多少次?
答:令k为服务器的数量,则有(1/4)k<0.01。即在最坏的情况下,这时所有的服务器都已关闭,发生这种情况的概率是1/100。因此k=4。
17、什么是三层客户-服务器体系结构?
答:三层客户——服务器体系结构包括三个逻辑层,每一层在理论上来说都在一台单独的机器上实现。最高层包括了客户的用户界面,中间层包括实际的应用程序,最底层包含了被使用的数据。
18、纵向分布与横向分布有什么不同?
答:纵向分布指的是多台机器组成的多层架构中各个层的分布。从理论上说,每一层都在一台不同的机器上实现。横向分布则处理多台机器上的一个层的分布,例如一个数据库的分布。
19、考虑一个进程链,该进程链由进程P1,P2,…,Pn构成,实现了一个多层客户-服务器体系结构。进程Pi是进程Pi+1的客户,Pi只有得到Pi+1的应答之后才能向Pi-1发出应答。如果考虑到进程P1的请求-应答性能,这种组织结构主要存在什么问题?
答:如果n很大的话性能会很差。从理论上来说,两个邻接层之间的通信应该在两台不同的机器之间发生。因此,P1和P2之间的性能由n-2次其它层之间的请求——应答过程决定。另一个问题是如果链中的一台机器性能很差甚至临时不可达,这会立刻使最高层的性能降低。
第二章 通信
1、在许多分层协议中,每一层都有自己的报头。如果每个消息前部都只有单个报头,其中包含了所有控制信息,无疑会比使用单独的多个报头具有更高的效率。为什么不这么做?
答:协议的每一层都必须和其它层相独立。从第k+1层传送至第k层的数据同时包含了报头和
数据,但是第k层协议不能对它们进行辨别。如果使用单个大的报头来包含所有信息的话将会破坏透明性,使得一个协议层的变动会影响到其它层,这显然不是我们所希望的。
2、为什么传输层通信服务常常不适于构建分布式应用程序?
答:它们通常不提供分布透明性,这意味着应用程序开发人员需要注意通信的实现,从而导致解决方案的可扩展性很差。分布式应用程序,例如基于套接字构建的分布式应用程序,将很难移植或者和其它应用程序交互。
3、一种可靠的多播服务允许发送者向一组接收者可靠地传递消息。这种服务是属于中间件层还是更低层的一部分?
答:从理论上来说,一种可靠的多播服务可以很容易的成为传输层,甚至是网络层的一部分。例如,不可靠的IP多播服务是在网络层实现的。但是,由于这些服务目前尚无法应用,它们通常使用传输层的服务来实现,传输层的服务将它们放在中间件中。如果把可扩展性加以考虑的话,只有充分考虑应用程序的需求时可靠性才能得到保证。用更高、更特殊的网络层来实现这些服务存在一个很大的争议。
4、考虑一个带有两个整型参数的过程incr。该过程将两个参数的值分别增加1.现在假定调用它时使用的两个参数是同一个变量,比如incr(i, i)。如果i的初始值是0,在执行引用调用之后i将变为什么值?如果使用复制——还原调用呢?
答:如果执行引用调用,指向i的指针被传入incr。i将会被增加两次,因此最终的结果是2。而使用复制——还原调用时,i会被两次传值,每次的初始值均为0。两次都会增加1,因此结果均为1。最后都复制到i,第二次的复制会覆盖第一次的,因此最终i的值为1,而不是2。
5、C语言中有一种称为联合(union)的构造,其中的记录(在C语言中称作结构)的字段可以用来保存几种可能值中的一个。在运行时,没有可靠的办法来分辨其中保存的是那一个值。C的这种特性是否与远程过程调用有某些相似之处?请说明理由。
答:如果运行时系统不能分辨一个字段的值类型,它就不能对该字段进行正确的封送处理。除非有一个标签字段用来清楚的表明一个字段的值类型,联合不能在远程过程调用中使用。这个标签字段不能被用户所控制。
6、处理RPC系统中参数转换的一种方法是,每台机器以自己系统使用的表示方式来发送参
数,由另一方在必要的情况下进行转换。可以通过首字节中的代码来表示发送消息机器所用的系统。然而,由于要在首个字中到开头的字节这本身也是一个问题,这种方法能行得通吗?
答:首先,当一台机器发送字节0时,消息肯定已经送到。因此目标机器可以访问字节0,而代码就在消息里面。这种方法不考虑字节是高位优先还是低位优先的字节。另一个方法是将代码放在第一个单词的所有字节中。因此不管检查的是哪一个字节,代码都能被到。
7、假定客户通过异步RPC对服务器进行调用,随后等待服务器使用另一异步RPC返回结果。这种方法与客户端执行常规的RPC有没有什么不同?如果使用的是同步RPC而不是异步RPC,情况又如何呢?
答:二者并不相同。异步RPC向调用者返回一个通知,这意味着客户第一次调用之后,有一个额外的消息会被发送。类似地,服务端接收到它的响应消息已经发送到客户端的通知。如果保证通信可靠的话,两次异步RPC调用是一样的。
8、在DCE中,服务器在守护程序中注册自身。如果换一种方法,也可以总是为它分配一个
固定的端点,然后再指向服务器地址空间中对象的引用中就可以使用该端点。这种方法的缺陷在哪里?
答:这种方法的主要缺陷是向服务器分配对象变得很难。另外,许多端点而不止一个需要被修复。如果机器中很多都是服务器,分配固定端点不是一个好办法。
9、给出一种用来让客户端绑定到暂时远程对象的对象应用的实现示例。
答:使用Java实现的类如下:
public class Object_reference {
InetAddress server3address; // network address of object’s server
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论