预计阅读本页时间:-
习题
1.可以把USENET新闻组系统和SETI@home项目看作分布式系统吗?(SETI@home使用数百万台空闲的个人计算机,用来分析无线电频谱数据以搜寻地球之外的智慧生物)。如果是,它们属于图8-1中描述的哪些类?
2.如果一个多处理器中的两个CPU在同一时刻,试图访问内存中同一个字,会发生什么事情?
3.如果一个CPU在每条指令中都发出一个内存访问请求,而且计算机的运行速度是200MIPS,那么多少个CPU会使一个400MHz的总线饱和?假设对内存的访问需要一个总线周期。如果在该系统中使用缓存技术,且缓存命中率达到90%,那么多少个CPO会使总线饱和?最后,如果要使32个CPU共享该总线而且不使其过载,需要多高的命中率?
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
4.在图8-5的omega网络中,假设在交换网络2A和交换网络3B之间的连线断了。那么哪些节点之间的联系被切断了?
5.在图8-7的模型中,信号是如何处理的?
6.使用纯read重写图2-22中的enter_region代码,用以减少由TSL指令所引起的颠簸。
7.多核CPU开始在普通的桌面机和笔记本电脑上出现,拥有数十乃至数百个核的桌面机也为期不远了。利用这些计算能力的一个可能的方式是将标准的桌面应用程序并行化,例如文字处理或者Web浏览器;另一个可能的方式是将操作系统提供的服务(例如TCP操作)和常用的库服务(例如安全http库函数)并行化。你认为哪一种方式更有前途?为什么?
8.为了避免竞争,在SMP操作系统代码段中的临界区真的有必要吗,或者数据结构中的互斥信号量也可完成这项工作吗?
9.在多处理器同步中使用TSL指令时,如果持有锁的CPU和请求锁的CPU都需要使用这个拥有互斥信号量的高速缓冲块,那么这个拥有互斥信号量的高速缓冲块就得在上述两个CPU之间来回穿梭。为了减少总线交通的繁忙,每隔50个总线周期,请求锁的CPU就执行一条TSL指令,但是持有锁的CPU在两条TSL指令之间需要频繁地引用该拥有互斥信号量的高速缓冲块。如果一个高速缓冲块中有16个32位字,每一个字都需要用一个总线周期传送,而该总线的频率是400MHz,那么高速缓冲块的来回移动会占用多少总线带宽?
10.课文中曾经建议在使用TSL轮询锁之间使用二进制指数补偿算法。也建议过在轮询之间使用最大时延。如果没有最大时延,该算法会正确工作吗?
11.假设在一个多处理器的同步处理中没有TSL指令。相反,提供了另一个指令SWP,该指令可以把一个寄存器的内容交换到内存的一个字中。这个指令可以用于多处理器的同步吗?如果可以,它应该怎样使用?如果不行,为什么它不行?
12.在本问题中,读者要计算把一个自旋锁放到总线上需要花费总线的多少装载时间。假设CPU执行每条指令花费5纳秒。在一条指令执行完毕之后,不需要任何总线周期,例如,执行TSL指令。每个总线周期比指令执行时间长10纳秒甚至更多。如果一个进程使用TSL循环试图进入某个临界区,它要耗费多少的总线带宽?假设通常的高速缓冲处理正在工作,所以取一条循环体中的指令并不会浪费总线周期。
13.图8-12用于描绘分时环境,为什么在b部分中只出现了进程A?
14.亲和调度减少了高速缓冲的失效。它也减少TLB的失效吗?对于缺页呢?
15.对于图8-16中的每个拓扑结构,互连网络的直径是多少?请计算该问题的所有跳数(主机-路由器和路由器-路由器)。
16.考虑图8-16 d中的双凸面拓扑,但是扩展到k×k。该网络的直径是多少?提示:分别考虑k是奇数和偶数的情况。
17.互联网络的平分贷款经常用来测试网络容量。其计算方法是,通过移走最小数量的链接,将网络分成两个相等的部分。然后把被移走链接的容量加入进去。如果有很多方法进行分割,那么最小带宽就是其平分带宽。对于有一个8×8×8立方体的互连网络,如果每个链接的带宽是1Gbps,那么其平分带宽是多少?
18.如果多计算机系统中的网络接口处于用户模式,那么从源RAM到目的RAM只需要三个副本。假设该网络接口卡接收或发送一个32位的字需要20ns,并且该网络接口卡的频率是1Gbps。如果忽略掉复制的时间,那么把一个64字节的包从源送到目的地的延时是多少?如果考虑复制的时间呢?接着考虑需要有两次额外复制的情形,即在发送方将数据复制到内核的时间,和在接收方将数据从内核中取出的时间。在这种情形下的延时是多少?
19.对于三次复制和五次复制的情形,重复前一个问题,不过这次是计算带宽而不是计算延时。
20.在共享存储器多处理器和多计算机之间send和receive的实现要有多少差别,这些差别对性能有何影响?
21.在将数据从RAM传送到网络接口时,可以使用钉住页面的方法,假设钉住和释放页面的系统调用要花费1微秒时间。使用DMA方法复制速度是5字节/纳秒,而使用编程I/O方法需要20纳秒。一个数据包应该有多大才值得钉住页面并使用DMA方法?
22.将一个过程从一台机器中取出并且放到另一台机器上称为RPC,但会出现一些问题。在正文中,我们指出了其中四个:指针、未知数组大小、未知参数类型以及全局变量。有一个未讨论的问题是,如果(远程)过程执行一个系统调用会怎样。这样做会引起什么问题,应该怎样处理?
23.在DSM系统中,当出现一个页面故障时,必须对所需要的页面进行定位。请列出两种寻找该页面的可能途径。
24.考虑图8-24中的处理器分配。假设进程H从节点2被移到节点3上。此时的外部信息流量是多少?
25.某些多计算机允许把运行着的进程从一个节点迁移到另一个节点。停止一个进程,冻结其内存映像,然后就把他们转移到另一个节点上是否足够?请指出要使所述的方法能够工作的两个必须解决的问题。
26.考虑能同时支持最多n个虚拟机的I型管理程序,PC机最多可以有4个主磁盘分区。请问n可以比4大吗?如果可以,数据可以存在哪里?
27.处理客户操作系统使用普通(非特权)指令改变页表的一个方式是将页表标记为只读,所以当它被修改的时候系统陷入。还有什么方式可以维护页表副本(shadow page table)?比较你的方法与只读页表方式在效率上的差别。
28.VMware每次对一个基本块进行二进制转换,然后执行这个基本块并开始转换下一个基本块。它能事先转换整个程序然后执行吗?如果能,每种技术的优点和缺点分别是什么?
29.如果一个操作系统的源代码可以得到,对半虚拟化一个操作系统有意义吗?如果源代码不能得到呢?
30.各种PC在底层会有微小的差别,例如如何管理时钟、如何处理中断以及DMA方面的一些细节。那么这些差别是否意味着虚拟机在实际中不能够很好地工作?请解释你的答案。
31.在以太网上为什么会有对电缆长度的限制?
32.在一台PC上运行多个虚拟机需要大量的内存,为什么?你能想出什么方式降低内存的使用量?请解释理由。
33.在图8-30中,四台机器上的第三层和第四层标记为中间件和应用。在何种角度上它们是跨平台一致的,而在何种角度上它们是跨平台有差异的?
34.在图8-33中列出了六种不同的服务。对于下面的应用,哪一种更适用?
a)Internet上的视频点播。
b)下载一个网页。
35.DNS的名称有一个层次结构,如cs.uni.edu或sales.general-widget.com。维护DNS数据库的一种途径是使用一个集中式的数据库,但是实际上并没有这样做,其原因是每秒钟会有太多的请求。请提出一个实用的维护DNS数据库的建议。
36.在讨论浏览器如何处理URL时,曾经说明与端口80连接。为什么?
37.虚拟机迁移可能比进程迁移容易,但是迁移仍然是困难的。在虚拟机迁移的过程中会产生哪些问题?
38.在显示网页中使用的URL可以透明吗?请解释理由。
39.当浏览器获取一个网页时,它首先发起一个TCP链接以获得页面上的文本(该文本用HTML语言写成)。然后关闭链接并分析该页面。如果页面上有图形或图标,就发起不同的TCP链接以获取它们。请给出两个可以改善性能的替代建议。
40.在使用会话语义时,有一项总是成立的,即一个文件的修改对于进行该修改的进程而言是立即可见的,而对其他机器上的进程而言是绝对不可见的。不过存在一个问题,即这种修改对同一台机器上的其他进程是否应该立即可见。请提出正反双方的争辩意见。
41.当有多个进程需要访问数据时,基于对象的访问在哪些方面要好于共享存储器?
42.在Linda的in操作完成对一个元组的定位之后,线性地查询整个元组空间是非常低效率的。请设计一个组织元组空间的方式,可以在所有的in操作中加快查询操作。
43.缓存区的复制很花费时间。写一个C程序找出你访问的系统中这种复制花费了多少时间。可使用clock或times函数用以确定在复制一个大数组时所花费的时间。请测试不同大小的数组,以便把复制时间和系统开销时间分开。
44.编写可作为客户机和服务器代码片段的C函数,使用RPC来调用标准printf函数,并编写一个主程序来测试这些函数。客户机和服务器通过一个可在网络上传输的数据结构实现通信。读者可以对客户机所能接收的格式化字符串长度以及数字、类型和变量的大小等方面设置限制。
45.写两个程序用以模拟一台多计算机上的负载平衡。第一个程序应该按照一个初始化文件把m个进程分布到n个机器上。每个进程应该有一个通过Gaussian分布随机挑选的运行时间,即该分布的平均值和标准偏差是模拟的参数。在每次运行的结尾,进程创建一些新的进程,按照Poisson分布选择这些新进程。当一个进程退出时,CPU必须确定是放弃进程或是寻找新的进程。如果在机器上有总数超过k个进程的话,第一个程序应该使用发送者驱动算法放弃工作。第二个程序在必要时应该使用接收者驱动算法获得工作。请给出所需要的合理假设,但要写出清楚的说明。
46.写一个程序,实现8.2节中描述的发送方驱动和接收方驱动的负载平衡算法。这个算法必须把新创建的作业列表作为输入,作业的描述为(creating_processor,start_time,required_CPU_time),其中creating_processor表示创建作业的CPU序号,start_time表示创建作业的时间,required_CPU_time表示完成作业所需要的时间(以秒为单位)。当节点在执行一个作业的同时有第二个作业被创建,则认为该节点超负荷。在重负载和轻负载的情况下分别打印算法发出的探测消息的数目。同时,也要打印任意主机发送和接收的最大和最小的探针数。为了模拟负载,要写两个负载产生器。第一个产生器模拟重的负载,产生的负载为平均每隔AJL秒N个作业,其中AJL是作业的平均长度,N是处理器个数。作业长度可能有长有短,但是平均作业长度必须是AJL。作业必须随机地创建(放置)在所有处理器上。第二个产生器模拟轻的负载,每AJL秒随机地产生(N/3)个作业。为这两个负载产生器调节其他的参数设置,看看是如何影响探测消息的数目。
47.实现发布/订阅系统的最简单的方式是通过一个集中的代理,这个代理接收发布的文章,然后向合适的订阅者分发这些文章。写一个多线程的应用程序来模拟一个基于代理的发布/订阅系统。发布者和订阅者线程可以通过(共享)内存与代理进行通信。每个消息以消息长度域开头,后面紧跟着其他字符。发布者给代理发布的消息中,第一行是用“.”隔开的层次化主题,后面一行或多行是发布的文章正文。订阅者给代理发布的消息,只包含着一行用“.”隔开的层次化的兴趣行(interest line),表示他们所感兴趣的文章。兴趣行可能包含“*.”等通配符,代理必须返回匹配订阅者兴趣的所有(过去的)文章,消息中的多篇文章通过“BEGIN NEW ARTICLE”来分隔。订阅者必须打印他接收到的每条消息(如他的兴趣行)。订阅者必须连续接收任何匹配的新发布的文章。发布者和订阅者线程可通过终端输入“P”或“S”的方式自由创建(分别对应发布者和订阅者),后面紧跟的是层次化的主题或兴趣行。然后发布者需要输入文章,在某一行中键入“.”表示文章结束。(这个作业也可以通过基于TCP的进程间通信来实现)。