分布式系统原理与范型课后习题答案.docx

上传人:b****2 文档编号:47417 上传时间:2023-04-28 格式:DOCX 页数:26 大小:39.71KB
下载 相关 举报
分布式系统原理与范型课后习题答案.docx_第1页
第1页 / 共26页
分布式系统原理与范型课后习题答案.docx_第2页
第2页 / 共26页
分布式系统原理与范型课后习题答案.docx_第3页
第3页 / 共26页
分布式系统原理与范型课后习题答案.docx_第4页
第4页 / 共26页
分布式系统原理与范型课后习题答案.docx_第5页
第5页 / 共26页
分布式系统原理与范型课后习题答案.docx_第6页
第6页 / 共26页
分布式系统原理与范型课后习题答案.docx_第7页
第7页 / 共26页
分布式系统原理与范型课后习题答案.docx_第8页
第8页 / 共26页
分布式系统原理与范型课后习题答案.docx_第9页
第9页 / 共26页
分布式系统原理与范型课后习题答案.docx_第10页
第10页 / 共26页
分布式系统原理与范型课后习题答案.docx_第11页
第11页 / 共26页
分布式系统原理与范型课后习题答案.docx_第12页
第12页 / 共26页
分布式系统原理与范型课后习题答案.docx_第13页
第13页 / 共26页
分布式系统原理与范型课后习题答案.docx_第14页
第14页 / 共26页
分布式系统原理与范型课后习题答案.docx_第15页
第15页 / 共26页
分布式系统原理与范型课后习题答案.docx_第16页
第16页 / 共26页
分布式系统原理与范型课后习题答案.docx_第17页
第17页 / 共26页
分布式系统原理与范型课后习题答案.docx_第18页
第18页 / 共26页
分布式系统原理与范型课后习题答案.docx_第19页
第19页 / 共26页
分布式系统原理与范型课后习题答案.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

分布式系统原理与范型课后习题答案.docx

《分布式系统原理与范型课后习题答案.docx》由会员分享,可在线阅读,更多相关《分布式系统原理与范型课后习题答案.docx(26页珍藏版)》请在冰点文库上搜索。

分布式系统原理与范型课后习题答案.docx

分布式系统原理与范型课后习题答案

第一章绪论

1、中间件在分布式系统中扮演什么角色?

答:

中间件主要是为了增强分布式系统的透明性(这正是网络操作系统所缺乏的),换言之,中间件的目标是分布式系统的单系统视图。

2、解释(分布)透明性的含义,并且给出各种类型透明性的例子。

答:

分布透明性是一种现象,即一个系统的分布情况对于用户和应用来说是隐藏的。

包括:

访问透明、位置透明、移植透明、重定位透明、复制透明、并发透明、故障透明和持久性透明。

3、在分布式系统中,为什么有时难以隐藏故障的发生以及故障恢复过程?

答:

通常,要探测一个服务器是停止服务还是该服务器的反应变慢这些情况是不可能的。

因此,一个系统可能在服务响应变慢的时候报告该服务已经停止了。

4、为什么有时候要求最大程度地实现透明性并不好?

答:

最大程度地实现透明性可能导致相当大的性能损失,从而导致用户无法接受。

5、什么是开放的分布式系统?

开放性带来哪些好处?

答:

开放的分布式系统根据明确定义的规则来提供服务。

开放系统能够很容易地与其它系统协作,同时也允许应用移植到同一个系统的不同实现中。

6、请对可扩展系统的含义做出准确描述

答:

一个系统的可扩展包含下面几个方面:

组件的数量、几何尺寸、管理域的数量与尺寸,前提是这个系统可以在上面几个方面进行增加而不会导致不可接受的性能损失。

7、可以通过应用多种技术来取得可扩展性。

请说出这些技术。

答:

可扩展性可以通过分布式、复制和缓存来获得。

8、多处理器系统与多计算机系统有什么不同?

答:

在多处理器系统中,多个CPU访问共享的主存储器。

在多计算机系统中没有共享存储器,CPU之间只能通过消息传递来进行通信。

9、在多计算机系统中的256个CPU组成了一个16X16的网格方阵。

在最坏的情况下,消息的延迟时间有多长(以跳(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、分布式操作系统与网络操作系统有什么不同?

答:

分布式操作系统管理多处理器和同种类的多计算机。

网络操作系统连接不同的、独立的计算机,这些计算机有自己的操作系统以便用户可以容易地使用每台计算机所提供的服务。

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实现的类如下:

publicclassObject_reference{

InetAddressserver3address;//networkaddressofobject’sserver

intserver3endpoint;//endpointtowhichserverislistening

intobject3identifier;//identifierforthisobject

URLclient3code;//(remote)filecontainingclient-sidestub

byte[]init3data;//possibleadditionalinitializationdata

}

Object_reference类至少需要包含对象所属的服务器的传输层地址。

在具体实现中,使用了一个URL来标识包含了所有必需的客户端代码文件,用一个字节数组来保存进一步初始化后的代码。

另一种实现可以直接保存客户端代码而不是一个URL。

这种方法将代理对象作为引用传递,JavaRMI采用了这种做法。

10、Java和其他语言支持异常处理,当错误发生时会引发异常。

如何在RPC和RMI中实现异常处理?

答:

由于异常通常在服务端发生,服务器存根只能捕获这个异常并把它作为一个特殊的错误响应传送给客户端。

另一方面,客户存接收这个消息并抛出这个异常以保持对服务器访问的透明性。

因此,接口定义语言中也需要有对异常的描述。

11、将静态和动态RPC区分开来有用吗?

答:

有用。

和远程对象调用有用的理由一样:

它会带来更多的弹性。

缺点是很多的分布透明性会被牺牲掉,其程度视哪种RPC先被使用而定。

12、某些分布式中间件系统的实现是完全基于动态方法调用的。

甚至连静态的调用也被编译成动态的调用。

这种方法的优点在哪里?

答:

动态调用的实现能够处理所有的调用,而静态调用仅仅是其中的一种特殊情况。

优点是仅仅需要实现一种机制。

一个可能的缺点是性能并不是总比使用静态调用的情况要好。

13、描述一下客户端和服务器端之间使用套接字的无连接通信是如何进行的。

答:

客户端和服务端都需要创建一个套接字,但是只有服务器把套接字绑定到本地的端点上。

然后,服务器可以执行一个阻塞的read调用以等待从客户端发送的数据。

类似地,在创建套接字之后,客户端仅仅执行一个阻塞调用以向服务端写数据。

关闭连接是没有必要的。

14、说明MPI中mp_based原语和mp_isend原语之间的区别。

答:

mpi_based原语使用有缓冲的通信,调用者将包含了信息的整个缓冲传送到本地的MPI运行时系统。

当调用完成时,这些信息要么被已被发送,要么被拷贝到一个本地的缓冲区。

如果使用mpi_isend,调用者仅仅将指向信息的指针传送给本地的MPI运行时系统,然后继续往下执行。

调用者需要保证在消息被拷贝或被传送之前不能覆盖它。

15、假定只能使用暂时异步通信原语,再加上异步receive原语,如何实现用于暂时同步通信的原语?

答:

考虑一个同步的send原语。

一个简单的实现是使用异步通信向服务器发送一个消息,然后让调用者不停地查询接收到的来自服务器的通知或响应。

另一种实现方案是,如果假设本地操作系统将接收的消息保存在一个本地缓冲区中,那么阻塞调用程序直到接收到系统的消息到达信号,之后调用程序执行异步receive。

16、假定只能使用暂时同步通信原语,如何实现用于暂时异步通信的原语?

答:

异步send可以通过如下方式实现:

调用者将它的消息拷贝到一个缓冲区,实际处理消息发送的进程共享该缓冲区。

每当客户端将消息拷贝到缓冲区,消息发送线程被唤醒,它将该消息从缓冲区中删除并使用一个阻塞的send原语将其发送到目标机器。

接收方的实现与此类似,它提供缓冲区,一个应用程序可以检查该缓冲区以确定是否有消息。

17、通过RPC实现持久化异步通信有意义吗?

答:

仅仅在管理了一个队列的进程通过RPC将消息发送给下一个队列管理器时有意义。

一个队列管理器为另一个管理器提供的服务是保存消息,调用的队列管理器可以获得远程队列的一个代理对象,并可能接收到每一个操作成功或失败的状态。

使用这种方法时,队列管理器看到的仅仅是队列,而不会发生通信。

18、在本章中我们讲过,为了自动启动一个进程以从输入队列中获取消息,常常要使用守护程序来监视输入队列。

请给出一种不使用守护程序的实现方法。

答:

一个简单的实现方案是,每当接收端的进程将一条消息放进它的一个队列时,同时检查一下是否接收到了消息。

19、IBMMQSeries以及许多其他消息队列系统中的路由表是人工配置的。

描述一种自动完成配置工作的简单方法。

答:

最简单的是现实使用一个集中的组件,该组件维护消息队列系统的拓扑结构。

它使用一种已知的路由算法来计算各个队列管理器之间的最佳路由,然后为每一个队列管理器生成路由表,这些表可以由各个管理器分别下载。

这种方法适合于队列管理器相对较少但是特别分散的消息队列系统。

20、如何将持久异步通信加入到基于远程对象RMI的通信模型中去?

答:

RMI应该是异步的,也就是说,在调用的时候不能即时得到调用结果。

RMI应该被保存在一个特殊的服务端,它在对象服务器中的对象启动并运行时立即将RMI转发到该对象。

21、在持久通信中,接收者一般拥有自己的本地缓冲区,如果接收者不在运行状态,可以将消息放入该缓冲区中去。

为了创建这种缓冲区,必须指定它们的大小。

分成两方进行辩论:

一方认为这种指定缓冲区大小的行为是可取的,而另一方反对这种指定大小的行为。

答:

用户指定缓冲区大小使得实现更加容易。

系统创建一个固定大小的缓冲区,之后缓冲区管理会十分容易。

但是,如果缓冲区已满,消息可能会丢失。

另一种方案是由通信系统来管理缓冲区大小,首先先制定一个默认大小,然后视情况需要扩充或者压缩缓冲区。

这种方法减少了由于缺少空间而导致丢失消息的机率,但是需要系统做更多的工作。

22、请说明为什么暂时同步通信在可扩展性方面存在固有的问题,以及如何解决这些问题。

答:

问题在于地理上的可扩展性受到了限制。

由于同步通信需要调用者被阻塞直到消息被接收,因此,如果接收方相隔较远的话调用者可能需要阻塞很长的时间才能继续运行。

解决这个问题的惟一办法是设计调用程序,使得它在发生通信时可以做其它有用的工作,以有效地实现一种异步通信。

23、给出一个将多播应用于离散数据流的例子。

答:

将一个大文件传送给许多用户就是一个例子。

例如,更新Web服务或软件发布的镜像站点。

24、当一组计算机组成一个逻辑上或物理上的环时,如何确保传输延迟不超过允许的最大端到端延迟时间?

答:

用一个令牌在环上循环,只有当计算机获取到该令牌的时候,它才能通过环发送数据。

另外,计算机持有环的时间不能超过T秒。

因此,如果假设两台邻接电脑之间的通信是有限制的,那么可以得到令牌循环的最大时间,这个时间就是发送一个包的最大端到端延迟时间。

25、当一组计算机组成一个(逻辑上或物理上的)环时,如何确保传输延迟不小于允许的最小端到端延迟时间?

答:

从理论上来说,接收端计算机不应该在特定的时间之前接收数据。

唯一的解决方案是将数据包存储在缓冲区中,缓冲可能发生在发送端、接收端或它们之间的某一个环节。

缓冲数据最好的地方是在接收端,因为这里没有不可预见的、可能延迟数据传输的障碍。

接收端仅需要将数据从缓冲区中删除并将它传送至使用了一个简单的计时机制的应用程序。

缺点是必须提供足够的缓冲能力。

26、想象一下,某个令牌存储桶规范说明中的最大数据单元大小是1000B,令牌存储桶速率是10MB/s,令牌存储桶的大小是1MB,而最大传输速率是50MB/s。

突发的传输可以以最大传输速率持续传输多长时间?

答:

令最大的突发时间间隔为Δt秒。

在极端的情况下,存储桶在开始时就已经满了,还有10ΔtMB的数据在该间隔内被传进来。

在突发的传输过程中,输出的数据为50ΔtMB,等于(1+10Δt)。

因此,Δt等于25毫秒。

27、在这道练习题中,要求实现一个使用RPC简单客户——服务器系统。

服务器提供一个名为next的过程,该过程接受一个整型数作为输入,并且返回紧接着该整型数之后的一个数。

编写一个客户使用的名为next的存根,它的任务是使用UDP将参数发送给服务器,随后等待服务器响应,如果过长时间未收到响应就认为超时了。

服务器过程必须在一个公开的端口监听并接受请求,完成这些请求所要求的操作,然后返回结果。

答:

无。

第三章进程

1.比较使用单线程文件服务器读取文件和使用多线程服务器读取文件有什么不同。

花费15ms来接收请求、调度该请求并且完成其它必须的处理工作,假定需要的数据存放在主存储器的缓存中。

如果需要磁盘操作,就需要额外多花75ms在磁盘操作的过程中线程处于睡眠状态。

如果服务器采用单线程的话,它每秒能处理多少个请求?

如果采用单线程呢?

答:

在单线程情况下,命中cache花了15ms,未命中cache花了90ms。

加权平均值为2/3X15+1/3X90。

这意味着请求花了40ms,服务器没秒可以完成25次。

对于多线程,所有磁盘等待都是交迭的,所以每个请求花了15ms,服务器每秒可以处理66

个请求。

2.对服务器进程中的线程数目进行限制有意义吗?

答:

有。

原因有两个:

(1)线程需要内存来设置他们的私有堆栈。

因此,线程太多可能导致消耗过多的存储器。

(2)更严重的情况是,对于一个操作系统,独立的线程是以无序的方式在运行。

在虚拟存储器系统中,构建一个相对稳定的工作环境可能比较困难,从而导致许多的页错误和过多的I/O操作,结果可能导致系统性能的下降。

3、在文中我们描述了一个多线程的文件服务器,说明了为什么它比单线程服务器和有限状态服务器更好。

有没有这样的环境,在其中使用单线程服务器会更好?

给出这种环境的例子。

答:

有。

如果服务器完全是CPU绑定的,就没有必要使用多线程了。

多线程可能只是增加了不必要的复杂性。

例如,某个地区拥有1百万人口,现要建立一个数据库来保存每个人的一些信息,如(名字,电话号码),假定每个人的信息大小为64字节,则数据库的总大小为64M字节,为了快速查找,应该把这些数据保存在服务器的存储器中。

4、将轻量级进程与单个线程静态关联起来并不好,为什么?

答:

这样的关联将在很大程度上迫使只有一个内核级的线程,这就意味着多线程的性能优势将会被损失掉。

5、如果每个进程只使用单个轻量级进程也不好,为什么?

答:

在这种模式下,我们只能拥有用户级的线程,这意味着任何阻塞系统调用都将阻塞整个进程。

6、描述一种使用与可运行线程数目相等的轻量级进程的方法。

答:

开始只有单个轻量级进程并让它选择一个可运行的线程。

当发现一个可运行的线程后,轻量级进程创建另一个轻量级进程来寻找下一个线程来执行。

如果没有找到可运行的线程,轻量级进程就销毁它本身。

7、本章解释过,代理可以通过调用所有副本来支持引用透明。

能否对(服务器端的)对象的副本进行调用?

答:

可以。

假设一个副本对象A调用另一个对象B(非副本),如果A包含K个副本,一个B的调用将会被A的每个副本执行,然而,B应该只被调用一次。

这种复制调用应该采取一些特殊的措施。

8、通过生成进程来构建并发服务器与使用多线程服务器相比有优点也有缺点。

给出部分优点和缺点。

答:

一个重要的优点是每个进程都被保护。

在超级服务器处理完全独立的服务的时候是非常有必要的。

另一方面,创建进程的代价也较高,同时,如果进程需要通信,则使用线程在很多情况下将更为简单,因为它避免了用内核来实现通信。

9、粗略地设想一种多线程服务器的设计,该服务器必须使用套接字作为面对底层操作系统的传输级接口,以支持多种协议。

答:

一个相对简单的设计是,使一个单一的线程T等待接收传输层消息(TPDU)。

如果我们假定每个TPDU的报头包含一个数字来识别更高层的协议,这个线程可以把它传递给处理特定协议的模块。

每个这样的模块都有一个专门的线程来处理消息,这些模块把消息看作是一个输入请求。

当处理完这个请求后,一个应答消息被传递给T,这时T将把这个应答封装成一个传输层消息并把它传递给适当的目的地。

10、如何防止应用程序绕过窗口管理器破坏屏幕显示。

答:

使用微内核方法,一个包含窗口管理器的窗口系统通过这个方法运行,因此所有的窗口操作都需要通过这个微内核。

从效果上看,这正是第一章中所讲的把客户端——服务器端模式转换为单计算机的本质。

11、解释对象适配器的概念。

答:

对象适配器是一种普通的程序,它可以接收输入的调用请求并把它们传递给对象的服务器存根。

对象适配器主要负责实现调用策略,这些策略确定是否、怎样以及多少多线程被用来调用一个对象。

12、举出几个用于支持持久性对象的对象适配器设计方面的问题。

答:

最重要的问题可能是产生一个对象引用,这个引用可以被当前服务器和适配器独立地使用。

这样的引用应该能被传递给一个新的服务器并可能为相应的对象指定特定的活动策略。

其它的问题包括,持久性对象什么时候、怎样被写到磁盘上,以及对象保存在主存储器中的内容和保存到磁盘上的内容有什么区别。

13、改变对象适配器示例中的thread_per_object过程,使用单个线程来处理受该适配器控制的所有对象。

答:

代码基本保持不变,除了我们需要创建一个single线程,该线程用修改过的版本thread_per_object来运行。

这个线程作为adapter_thread来被引用。

当多路输出选择器调用这个适配器的时候,它向adapter_thread的缓冲区中存放一条消息,然后再读取它。

适配器线程调用适当的stub并处理响应消息。

#include

#include

#defineMAX3OBJECTS100

#defineNULL0

#

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2