




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第一章 緒論1、中間件在分布式系統(tǒng)中扮演什么角色?答:中間件主要是為了增強分布式系統(tǒng)的透明性(這正是網(wǎng)絡(luò)操作系統(tǒng)所缺乏的),換言之,中間件的目標(biāo)是分布式系統(tǒng)的單系統(tǒng)視圖。2、解釋(分布)透明性的含義,并且給出各種類型透明性的例子。答:分布透明性是一種現(xiàn)象,即一個系統(tǒng)的分布情況對于用戶和應(yīng)用來說是隱藏的。包括:訪問透明、位置透明、移植透明、重定位透明、復(fù)制透明、并發(fā)透明、故障透明和持久性透明。3、在分布式系統(tǒng)中,為什么有時難以隱藏故障的發(fā)生以及故障恢復(fù)過程?答:通常,要探測一個服務(wù)器是停止服務(wù)還是該服務(wù)器的反應(yīng)變慢這些情況是不可能的。因此,一個系統(tǒng)可能在服務(wù)響應(yīng)變慢的時候報告該服務(wù)已經(jīng)停止了。4
2、、為什么有時候要求最大程度地實現(xiàn)透明性并不好?答:最大程度地實現(xiàn)透明性可能導(dǎo)致相當(dāng)大的性能損失,從而導(dǎo)致用戶無法接受。5、什么是開放的分布式系統(tǒng)?開放性帶來哪些好處?答:開放的分布式系統(tǒng)根據(jù)明確定義的規(guī)則來提供服務(wù)。開放系統(tǒng)能夠很容易地與其它系統(tǒng)協(xié)作,同時也允許應(yīng)用移植到同一個系統(tǒng)的不同實現(xiàn)中。6、請對可擴展系統(tǒng)的含義做出準(zhǔn)確描述答:一個系統(tǒng)的可擴展包含下面幾個方面:組件的數(shù)量、幾何尺寸、管理域的數(shù)量與尺寸,前提是這個系統(tǒng)可以在上面幾個方面進(jìn)行增加而不會導(dǎo)致不可接受的性能損失。7、可以通過應(yīng)用多種技術(shù)來取得可擴展性。請說出這些技術(shù)。答:可擴展性可以通過分布式、復(fù)制和緩存來獲得。8、多處理器系統(tǒng)
3、與多計算機系統(tǒng)有什么不同?答:在多處理器系統(tǒng)中,多個CPU訪問共享的主存儲器。在多計算機系統(tǒng)中沒有共享存儲器,CPU之間只能通過消息傳遞來進(jìn)行通信。9、在多計算機系統(tǒng)中的256個CPU組成了一個16 X 16的網(wǎng)格方陣。在最壞的情況下,消息的延遲時間有多長(以跳(hop)的形式給出,跳是結(jié)點之間的邏輯距離)?答:假設(shè)路由是最優(yōu)的,最長的路由是從網(wǎng)格方陣的一個角落到對角的角落。那么這個路由的長度是30跳。如果一行或一列中的處理器彼此相連,則路由長度為15跳。10、現(xiàn)在考慮包含256個CPU的超立方體,最壞情況下消息的延遲有多長?答:在具有256個CPUs的超立方體中,每個結(jié)點可以用一個二進(jìn)制地址
4、,范圍從000000001111,1111。一個hop表示地址改變了一位。因此從 0000,00000000,0001表示一個hop,而從0000,00010000,0011也是表示一個hop。所以最長的路由有8個hop。11、分布式操作系統(tǒng)與網(wǎng)絡(luò)操作系統(tǒng)有什么不同?答:分布式操作系統(tǒng)管理多處理器和同種類的多計算機。網(wǎng)絡(luò)操作系統(tǒng)連接不同的、獨立的計算機,這些計算機有自己的操作系統(tǒng)以便用戶可以容易地使用每臺計算機所提供的服務(wù)。12、請解釋如何使用微內(nèi)核將操作系統(tǒng)組織成客戶-服務(wù)器的方式。答:微內(nèi)核可以把客戶端應(yīng)用從操作系統(tǒng)服務(wù)中分離出來,方法是通過強迫每個請求都通過內(nèi)核來傳遞。因此,操作系統(tǒng)服務(wù)
5、能夠通過用戶級的服務(wù)器來實現(xiàn),這些用戶級的服務(wù)器是作為普通的進(jìn)程來運行的。如果微內(nèi)核有網(wǎng)絡(luò)功能,這些服務(wù)器也能作為遠(yuǎn)端機器。13、請解釋基于分頁的分布式共享存儲器系統(tǒng)主要有哪些操作。答:基于分頁的DSM利用了操作系統(tǒng)的虛擬存儲器的功能。當(dāng)一個應(yīng)用程序?qū)?nèi)存尋址時,如果該內(nèi)存位置沒有映射到當(dāng)前物理存儲器的存儲器空間的時候,頁錯誤就會發(fā)生,并將控制權(quán)轉(zhuǎn)交給操作系統(tǒng)。操作系統(tǒng)定位到適當(dāng)?shù)捻?,通過網(wǎng)絡(luò)傳遞它的內(nèi)容,并映射到物理存儲器中。從而,應(yīng)用可以繼續(xù)運行。14、為什么要開發(fā)分布式共享存儲器系統(tǒng)?你認(rèn)為是什么問題給這種系統(tǒng)的高效率實現(xiàn)造成了困難?答:主要的原因是,寫基于消息傳遞的并行和分布式程序來進(jìn)
6、行通信要比使用共享存儲器難得多。不管進(jìn)行什么操作,網(wǎng)絡(luò)中的頁面?zhèn)鬏敹紩l(fā)生,這導(dǎo)致了DSM系統(tǒng)效率的下降。如果頁面被不同的處理器共享,在虛擬存儲系統(tǒng)中很容易進(jìn)入和“陷入”類似的狀態(tài)。最后,DSM系統(tǒng)比消息傳遞的解決方案要慢,而且由于需要跟蹤頁面而變得更慢。15、請解釋什么是分布式共享存儲器系統(tǒng)中的偽共享。你有沒有針對這個問題的解決方案?答:當(dāng)數(shù)據(jù)屬于兩個不同且獨立的處理器(可能在不同的機器上)時會發(fā)生偽共享,這時數(shù)據(jù)被映射到相同的邏輯頁上。效果是這個頁面會在兩個處理器之間發(fā)生交換,從而導(dǎo)致不明顯且不必要的依賴。解決方案是讓頁面更小并禁止獨立的處理器共享一個頁面。16、由于存在錯誤,某個實驗性的
7、文件服務(wù)器有3 / 4的時間能夠正常工作,而另外1 / 4的時間無法工作。如果要確保服務(wù)至少在99%的時間可用,需要將該文件服務(wù)器復(fù)制多少次?答:令k為服務(wù)器的數(shù)量,則有(1/4)k<0.01。即在最壞的情況下,這時所有的服務(wù)器都已關(guān)閉,發(fā)生這種情況的概率是1/100。因此k=4。17、什么是三層客戶-服務(wù)器體系結(jié)構(gòu)?答:三層客戶服務(wù)器體系結(jié)構(gòu)包括三個邏輯層,每一層在理論上來說都在一臺單獨的機器上實現(xiàn)。最高層包括了客戶的用戶界面,中間層包括實際的應(yīng)用程序,最底層包含了被使用的數(shù)據(jù)。18、縱向分布與橫向分布有什么不同?答:縱向分布指的是多臺機器組成的多層架構(gòu)中各個層的分布。從理論上說,每一
8、層都在一臺不同的機器上實現(xiàn)。橫向分布則處理多臺機器上的一個層的分布,例如一個數(shù)據(jù)庫的分布。19、考慮一個進(jìn)程鏈,該進(jìn)程鏈由進(jìn)程P1,P2,Pn構(gòu)成,實現(xiàn)了一個多層客戶-服務(wù)器體系結(jié)構(gòu)。進(jìn)程Pi是進(jìn)程Pi+1的客戶,Pi只有得到Pi+1的應(yīng)答之后才能向Pi-1發(fā)出應(yīng)答。如果考慮到進(jìn)程P1的請求-應(yīng)答性能,這種組織結(jié)構(gòu)主要存在什么問題?答:如果n很大的話性能會很差。從理論上來說,兩個鄰接層之間的通信應(yīng)該在兩臺不同的機器之間發(fā)生。因此,P1和P2之間的性能由n-2次其它層之間的請求應(yīng)答過程決定。另一個問題是如果鏈中的一臺機器性能很差甚至臨時不可達(dá),這會立刻使最高層的性能降低。第二章 通信1、在許多分
9、層協(xié)議中,每一層都有自己的報頭。如果每個消息前部都只有單個報頭,其中包含了所有控制信息,無疑會比使用單獨的多個報頭具有更高的效率。為什么不這么做?答:協(xié)議的每一層都必須和其它層相獨立。從第k+1層傳送至第k層的數(shù)據(jù)同時包含了報頭和數(shù)據(jù),但是第k層協(xié)議不能對它們進(jìn)行辨別。如果使用單個大的報頭來包含所有信息的話將會破壞透明性,使得一個協(xié)議層的變動會影響到其它層,這顯然不是我們所希望的。2、為什么傳輸層通信服務(wù)常常不適于構(gòu)建分布式應(yīng)用程序?答:它們通常不提供分布透明性,這意味著應(yīng)用程序開發(fā)人員需要注意通信的實現(xiàn),從而導(dǎo)致解決方案的可擴展性很差。分布式應(yīng)用程序,例如基于套接字構(gòu)建的分布式應(yīng)用程序,將很
10、難移植或者和其它應(yīng)用程序交互。3、一種可靠的多播服務(wù)允許發(fā)送者向一組接收者可靠地傳遞消息。這種服務(wù)是屬于中間件層還是更低層的一部分?答:從理論上來說,一種可靠的多播服務(wù)可以很容易的成為傳輸層,甚至是網(wǎng)絡(luò)層的一部分。例如,不可靠的IP多播服務(wù)是在網(wǎng)絡(luò)層實現(xiàn)的。但是,由于這些服務(wù)目前尚無法應(yīng)用,它們通常使用傳輸層的服務(wù)來實現(xiàn),傳輸層的服務(wù)將它們放在中間件中。如果把可擴展性加以考慮的話,只有充分考慮應(yīng)用程序的需求時可靠性才能得到保證。用更高、更特殊的網(wǎng)絡(luò)層來實現(xiàn)這些服務(wù)存在一個很大的爭議。4、考慮一個帶有兩個整型參數(shù)的過程incr。該過程將兩個參數(shù)的值分別增加1.現(xiàn)在假定調(diào)用它時使用的兩個參數(shù)是同一
11、個變量,比如incr(i, i)。如果i的初始值是0,在執(zhí)行引用調(diào)用之后i將變?yōu)槭裁粗担咳绻褂脧?fù)制還原調(diào)用呢?答:如果執(zhí)行引用調(diào)用,指向i的指針被傳入incr。i將會被增加兩次,因此最終的結(jié)果是2。而使用復(fù)制還原調(diào)用時,i會被兩次傳值,每次的初始值均為0。兩次都會增加1,因此結(jié)果均為1。最后都復(fù)制到i,第二次的復(fù)制會覆蓋第一次的,因此最終i的值為1,而不是2。5、C語言中有一種稱為聯(lián)合(union)的構(gòu)造,其中的記錄(在C語言中稱作結(jié)構(gòu))的字段可以用來保存幾種可能值中的一個。在運行時,沒有可靠的辦法來分辨其中保存的是那一個值。C的這種特性是否與遠(yuǎn)程過程調(diào)用有某些相似之處?請說明理由。答:如果
12、運行時系統(tǒng)不能分辨一個字段的值類型,它就不能對該字段進(jìn)行正確的封送處理。除非有一個標(biāo)簽字段用來清楚的表明一個字段的值類型,聯(lián)合不能在遠(yuǎn)程過程調(diào)用中使用。這個標(biāo)簽字段不能被用戶所控制。6、處理RPC系統(tǒng)中參數(shù)轉(zhuǎn)換的一種方法是,每臺機器以自己系統(tǒng)使用的表示方式來發(fā)送參數(shù),由另一方在必要的情況下進(jìn)行轉(zhuǎn)換??梢酝ㄟ^首字節(jié)中的代碼來表示發(fā)送消息機器所用的系統(tǒng)。然而,由于要在首個字中找到開頭的字節(jié)這本身也是一個問題,這種方法能行得通嗎?答:首先,當(dāng)一臺機器發(fā)送字節(jié)0時,消息肯定已經(jīng)送到。因此目標(biāo)機器可以訪問字節(jié)0,而代碼就在消息里面。這種方法不考慮字節(jié)是高位優(yōu)先還是低位優(yōu)先的字節(jié)。另一個方法是將代碼放在第
13、一個單詞的所有字節(jié)中。因此不管檢查的是哪一個字節(jié),代碼都能被找到。7、假定客戶通過異步RPC對服務(wù)器進(jìn)行調(diào)用,隨后等待服務(wù)器使用另一異步RPC返回結(jié)果。這種方法與客戶端執(zhí)行常規(guī)的RPC有沒有什么不同?如果使用的是同步RPC而不是異步RPC,情況又如何呢?答:二者并不相同。異步RPC向調(diào)用者返回一個通知,這意味著客戶第一次調(diào)用之后,有一個額外的消息會被發(fā)送。類似地,服務(wù)端接收到它的響應(yīng)消息已經(jīng)發(fā)送到客戶端的通知。如果保證通信可靠的話,兩次異步RPC調(diào)用是一樣的。8、在DCE中,服務(wù)器在守護(hù)程序中注冊自身。如果換一種方法,也可以總是為它分配一個固定的端點,然后再指向服務(wù)器地址空間中對象的引用中就可
14、以使用該端點。這種方法的缺陷在哪里?答:這種方法的主要缺陷是向服務(wù)器分配對象變得很難。另外,許多端點而不止一個需要被修復(fù)。如果機器中很多都是服務(wù)器,分配固定端點不是一個好辦法。9、給出一種用來讓客戶端綁定到暫時遠(yuǎn)程對象的對象應(yīng)用的實現(xiàn)示例。答:使用Java實現(xiàn)的類如下:public class Object_reference InetAddress server3address; / network address of objects server int server3endpoint; / endpoint to which server is listening int object
15、3identifier; / identifier for this object URL client3code; / (remote) file containing client-side stub byte init3data; / possible additional initialization data Object_reference類至少需要包含對象所屬的服務(wù)器的傳輸層地址。在具體實現(xiàn)中,使用了一個URL來標(biāo)識包含了所有必需的客戶端代碼文件,用一個字節(jié)數(shù)組來保存進(jìn)一步初始化后的代碼。另一種實現(xiàn)可以直接保存客戶端代碼而不是一個URL。這種方法將代理對象作為引用傳遞,Java
16、RMI采用了這種做法。10、Java和其他語言支持異常處理,當(dāng)錯誤發(fā)生時會引發(fā)異常。如何在RPC和RMI中實現(xiàn)異常處理?答:由于異常通常在服務(wù)端發(fā)生,服務(wù)器存根只能捕獲這個異常并把它作為一個特殊的錯誤響應(yīng)傳送給客戶端。另一方面,客戶存接收這個消息并拋出這個異常以保持對服務(wù)器訪問的透明性。因此,接口定義語言中也需要有對異常的描述。11、將靜態(tài)和動態(tài)RPC區(qū)分開來有用嗎?答:有用。和遠(yuǎn)程對象調(diào)用有用的理由一樣:它會帶來更多的彈性。缺點是很多的分布透明性會被犧牲掉,其程度視哪種RPC先被使用而定。12、某些分布式中間件系統(tǒng)的實現(xiàn)是完全基于動態(tài)方法調(diào)用的。甚至連靜態(tài)的調(diào)用也被編譯成動態(tài)的調(diào)用。這種方法
17、的優(yōu)點在哪里?答:動態(tài)調(diào)用的實現(xiàn)能夠處理所有的調(diào)用,而靜態(tài)調(diào)用僅僅是其中的一種特殊情況。優(yōu)點是僅僅需要實現(xiàn)一種機制。一個可能的缺點是性能并不是總比使用靜態(tài)調(diào)用的情況要好。13、描述一下客戶端和服務(wù)器端之間使用套接字的無連接通信是如何進(jìn)行的。答:客戶端和服務(wù)端都需要創(chuàng)建一個套接字,但是只有服務(wù)器把套接字綁定到本地的端點上。然后,服務(wù)器可以執(zhí)行一個阻塞的read調(diào)用以等待從客戶端發(fā)送的數(shù)據(jù)。類似地,在創(chuàng)建套接字之后,客戶端僅僅執(zhí)行一個阻塞調(diào)用以向服務(wù)端寫數(shù)據(jù)。關(guān)閉連接是沒有必要的。14、說明MPI中mp_based原語和mp_isend原語之間的區(qū)別。答:mpi_based原語使用有緩沖的通信,調(diào)
18、用者將包含了信息的整個緩沖傳送到本地的MPI運行時系統(tǒng)。當(dāng)調(diào)用完成時,這些信息要么被已被發(fā)送,要么被拷貝到一個本地的緩沖區(qū)。如果使用mpi_isend,調(diào)用者僅僅將指向信息的指針傳送給本地的MPI運行時系統(tǒng),然后繼續(xù)往下執(zhí)行。調(diào)用者需要保證在消息被拷貝或被傳送之前不能覆蓋它。15、假定只能使用暫時異步通信原語,再加上異步receive原語,如何實現(xiàn)用于暫時同步通信的原語?答:考慮一個同步的send原語。一個簡單的實現(xiàn)是使用異步通信向服務(wù)器發(fā)送一個消息,然后讓調(diào)用者不停地查詢接收到的來自服務(wù)器的通知或響應(yīng)。另一種實現(xiàn)方案是,如果假設(shè)本地操作系統(tǒng)將接收的消息保存在一個本地緩沖區(qū)中,那么阻塞調(diào)用程序
19、直到接收到系統(tǒng)的消息到達(dá)信號,之后調(diào)用程序執(zhí)行異步receive。16、假定只能使用暫時同步通信原語,如何實現(xiàn)用于暫時異步通信的原語?答:異步send可以通過如下方式實現(xiàn):調(diào)用者將它的消息拷貝到一個緩沖區(qū),實際處理消息發(fā)送的進(jìn)程共享該緩沖區(qū)。每當(dāng)客戶端將消息拷貝到緩沖區(qū),消息發(fā)送線程被喚醒,它將該消息從緩沖區(qū)中刪除并使用一個阻塞的send原語將其發(fā)送到目標(biāo)機器。接收方的實現(xiàn)與此類似,它提供緩沖區(qū),一個應(yīng)用程序可以檢查該緩沖區(qū)以確定是否有消息。17、通過RPC實現(xiàn)持久化異步通信有意義嗎?答:僅僅在管理了一個隊列的進(jìn)程通過RPC將消息發(fā)送給下一個隊列管理器時有意義。一個隊列管理器為另一個管理器提供
20、的服務(wù)是保存消息,調(diào)用的隊列管理器可以獲得遠(yuǎn)程隊列的一個代理對象,并可能接收到每一個操作成功或失敗的狀態(tài)。使用這種方法時,隊列管理器看到的僅僅是隊列,而不會發(fā)生通信。18、在本章中我們講過,為了自動啟動一個進(jìn)程以從輸入隊列中獲取消息,常常要使用守護(hù)程序來監(jiān)視輸入隊列。請給出一種不使用守護(hù)程序的實現(xiàn)方法。答:一個簡單的實現(xiàn)方案是,每當(dāng)接收端的進(jìn)程將一條消息放進(jìn)它的一個隊列時,同時檢查一下是否接收到了消息。 19、IBM MQSeries以及許多其他消息隊列系統(tǒng)中的路由表是人工配置的。描述一種自動完成配置工作的簡單方法。答:最簡單的是現(xiàn)實使用一個集中的組件,該組件維護(hù)消息隊列系統(tǒng)的拓?fù)浣Y(jié)構(gòu)。它使用
21、一種已知的路由算法來計算各個隊列管理器之間的最佳路由,然后為每一個隊列管理器生成路由表,這些表可以由各個管理器分別下載。這種方法適合于隊列管理器相對較少但是特別分散的消息隊列系統(tǒng)。20、如何將持久異步通信加入到基于遠(yuǎn)程對象RMI的通信模型中去?答:RMI應(yīng)該是異步的,也就是說,在調(diào)用的時候不能即時得到調(diào)用結(jié)果。RMI應(yīng)該被保存在一個特殊的服務(wù)端,它在對象服務(wù)器中的對象啟動并運行時立即將RMI轉(zhuǎn)發(fā)到該對象。21、在持久通信中,接收者一般擁有自己的本地緩沖區(qū),如果接收者不在運行狀態(tài),可以將消息放入該緩沖區(qū)中去。為了創(chuàng)建這種緩沖區(qū),必須指定它們的大小。分成兩方進(jìn)行辯論:一方認(rèn)為這種指定緩沖區(qū)大小的行
22、為是可取的,而另一方反對這種指定大小的行為。答:用戶指定緩沖區(qū)大小使得實現(xiàn)更加容易。系統(tǒng)創(chuàng)建一個固定大小的緩沖區(qū),之后緩沖區(qū)管理會十分容易。但是,如果緩沖區(qū)已滿,消息可能會丟失。另一種方案是由通信系統(tǒng)來管理緩沖區(qū)大小,首先先制定一個默認(rèn)大小,然后視情況需要擴充或者壓縮緩沖區(qū)。這種方法減少了由于缺少空間而導(dǎo)致丟失消息的機率,但是需要系統(tǒng)做更多的工作。22、請說明為什么暫時同步通信在可擴展性方面存在固有的問題,以及如何解決這些問題。答:問題在于地理上的可擴展性受到了限制。由于同步通信需要調(diào)用者被阻塞直到消息被接收,因此,如果接收方相隔較遠(yuǎn)的話調(diào)用者可能需要阻塞很長的時間才能繼續(xù)運行。解決這個問題的
23、惟一辦法是設(shè)計調(diào)用程序,使得它在發(fā)生通信時可以做其它有用的工作,以有效地實現(xiàn)一種異步通信。23、給出一個將多播應(yīng)用于離散數(shù)據(jù)流的例子。答:將一個大文件傳送給許多用戶就是一個例子。例如,更新Web服務(wù)或軟件發(fā)布的鏡像站點。24、當(dāng)一組計算機組成一個邏輯上或物理上的環(huán)時,如何確保傳輸延遲不超過允許的最大端到端延遲時間?答:用一個令牌在環(huán)上循環(huán),只有當(dāng)計算機獲取到該令牌的時候,它才能通過環(huán)發(fā)送數(shù)據(jù)。另外,計算機持有環(huán)的時間不能超過T秒。因此,如果假設(shè)兩臺鄰接電腦之間的通信是有限制的,那么可以得到令牌循環(huán)的最大時間,這個時間就是發(fā)送一個包的最大端到端延遲時間。25、當(dāng)一組計算機組成一個(邏輯上或物理上
24、的)環(huán)時,如何確保傳輸延遲不小于允許的最小端到端延遲時間?答:從理論上來說,接收端計算機不應(yīng)該在特定的時間之前接收數(shù)據(jù)。唯一的解決方案是將數(shù)據(jù)包存儲在緩沖區(qū)中,緩沖可能發(fā)生在發(fā)送端、接收端或它們之間的某一個環(huán)節(jié)。緩沖數(shù)據(jù)最好的地方是在接收端,因為這里沒有不可預(yù)見的、可能延遲數(shù)據(jù)傳輸?shù)恼系K。接收端僅需要將數(shù)據(jù)從緩沖區(qū)中刪除并將它傳送至使用了一個簡單的計時機制的應(yīng)用程序。缺點是必須提供足夠的緩沖能力。26、想象一下,某個令牌存儲桶規(guī)范說明中的最大數(shù)據(jù)單元大小是1000B,令牌存儲桶速率是10MB/s,令牌存儲桶的大小是1MB,而最大傳輸速率是50MB/s。突發(fā)的傳輸可以以最大傳輸速率持續(xù)傳輸多長時
25、間?答:令最大的突發(fā)時間間隔為t秒。在極端的情況下,存儲桶在開始時就已經(jīng)滿了,還有10tMB的數(shù)據(jù)在該間隔內(nèi)被傳進(jìn)來。在突發(fā)的傳輸過程中,輸出的數(shù)據(jù)為50tMB,等于(1+10t)。因此,t等于25毫秒。27、在這道練習(xí)題中,要求實現(xiàn)一個使用RPC簡單客戶服務(wù)器系統(tǒng)。服務(wù)器提供一個名為next的過程,該過程接受一個整型數(shù)作為輸入,并且返回緊接著該整型數(shù)之后的一個數(shù)。編寫一個客戶使用的名為next的存根,它的任務(wù)是使用UDP將參數(shù)發(fā)送給服務(wù)器,隨后等待服務(wù)器響應(yīng),如果過長時間未收到響應(yīng)就認(rèn)為超時了。服務(wù)器過程必須在一個公開的端口監(jiān)聽并接受請求,完成這些請求所要求的操作,然后返回結(jié)果。答:無。第三
26、章 進(jìn)程1. 比較使用單線程文件服務(wù)器讀取文件和使用多線程服務(wù)器讀取文件有什么不同。花費15ms來接收請求、調(diào)度該請求并且完成其它必須的處理工作,假定需要的數(shù)據(jù)存放在主存儲器的緩存中。如果需要磁盤操作,就需要額外多花75ms在磁盤操作的過程中線程處于睡眠狀態(tài)。如果服務(wù)器采用單線程的話,它每秒能處理多少個請求?如果采用單線程呢?答: 在單線程情況下,命中cache花了15ms,未命中cache花了90ms。加權(quán)平均值為2/3 X 15 + 1/3 X 90。這意味著請求花了40ms,服務(wù)器沒秒可以完成25次。對于多線程,所有磁盤等待都是交迭的,所以每個請求花了15ms, 服務(wù)器每秒可以處理66
27、23 個請求。2. 對服務(wù)器進(jìn)程中的線程數(shù)目進(jìn)行限制有意義嗎?答:有。原因有兩個:(1) 線程需要內(nèi)存來設(shè)置他們的私有堆棧。因此,線程太多可能導(dǎo)致消耗過多的存儲器。(2) 更嚴(yán)重的情況是,對于一個操作系統(tǒng),獨立的線程是以無序的方式在運行。在虛擬存儲器系統(tǒng)中,構(gòu)建一個相對穩(wěn)定的工作環(huán)境可能比較困難,從而導(dǎo)致許多的頁錯誤和過多的I/O操作,結(jié)果可能導(dǎo)致系統(tǒng)性能的下降。3、在文中我們描述了一個多線程的文件服務(wù)器,說明了為什么它比單線程服務(wù)器和有限狀態(tài)服務(wù)器更好。有沒有這樣的環(huán)境,在其中使用單線程服務(wù)器會更好?給出這種環(huán)境的例子。答:有。如果服務(wù)器完全是CPU綁定的,就沒有必要使用多線程了。多線程可能
28、只是增加了不必要的復(fù)雜性。例如,某個地區(qū)擁有1百萬人口,現(xiàn)要建立一個數(shù)據(jù)庫來保存每個人的一些信息,如(名字,電話號碼),假定每個人的信息大小為64字節(jié),則數(shù)據(jù)庫的總大小為64M字節(jié),為了快速查找,應(yīng)該把這些數(shù)據(jù)保存在服務(wù)器的存儲器中。4、將輕量級進(jìn)程與單個線程靜態(tài)關(guān)聯(lián)起來并不好,為什么?答:這樣的關(guān)聯(lián)將在很大程度上迫使只有一個內(nèi)核級的線程,這就意味著多線程的性能優(yōu)勢將會被損失掉。5、如果每個進(jìn)程只使用單個輕量級進(jìn)程也不好,為什么?答:在這種模式下,我們只能擁有用戶級的線程,這意味著任何阻塞系統(tǒng)調(diào)用都將阻塞整個進(jìn)程。6、描述一種使用與可運行線程數(shù)目相等的輕量級進(jìn)程的方法。答:開始只有單個輕量級進(jìn)
29、程并讓它選擇一個可運行的線程。當(dāng)發(fā)現(xiàn)一個可運行的線程后,輕量級進(jìn)程創(chuàng)建另一個輕量級進(jìn)程來尋找下一個線程來執(zhí)行。如果沒有找到可運行的線程,輕量級進(jìn)程就銷毀它本身。7、本章解釋過,代理可以通過調(diào)用所有副本來支持引用透明。能否對(服務(wù)器端的)對象的副本進(jìn)行調(diào)用?答:可以。假設(shè)一個副本對象A調(diào)用另一個對象B(非副本),如果A包含K個副本,一個B的調(diào)用將會被A的每個副本執(zhí)行,然而,B應(yīng)該只被調(diào)用一次。這種復(fù)制調(diào)用應(yīng)該采取一些特殊的措施。8、通過生成進(jìn)程來構(gòu)建并發(fā)服務(wù)器與使用多線程服務(wù)器相比有優(yōu)點也有缺點。給出部分優(yōu)點和缺點。答:一個重要的優(yōu)點是每個進(jìn)程都被保護(hù)。在超級服務(wù)器處理完全獨立的服務(wù)的時候是非常
30、有必要的。另一方面,創(chuàng)建進(jìn)程的代價也較高,同時,如果進(jìn)程需要通信,則使用線程在很多情況下將更為簡單,因為它避免了用內(nèi)核來實現(xiàn)通信。9、粗略地設(shè)想一種多線程服務(wù)器的設(shè)計,該服務(wù)器必須使用套接字作為面對底層操作系統(tǒng)的傳輸級接口,以支持多種協(xié)議。答:一個相對簡單的設(shè)計是,使一個單一的線程T等待接收傳輸層消息(TPDU)。如果我們假定每個TPDU的報頭包含一個數(shù)字來識別更高層的協(xié)議,這個線程可以把它傳遞給處理特定協(xié)議的模塊。每個這樣的模塊都有一個專門的線程來處理消息,這些模塊把消息看作是一個輸入請求。當(dāng)處理完這個請求后,一個應(yīng)答消息被傳遞給T,這時T將把這個應(yīng)答封裝成一個傳輸層消息并把它傳遞給適當(dāng)?shù)哪?/p>
31、的地。10、如何防止應(yīng)用程序繞過窗口管理器破壞屏幕顯示。答:使用微內(nèi)核方法,一個包含窗口管理器的窗口系統(tǒng)通過這個方法運行,因此所有的窗口操作都需要通過這個微內(nèi)核。從效果上看,這正是第一章中所講的把客戶端服務(wù)器端模式轉(zhuǎn)換為單計算機的本質(zhì)。11、解釋對象適配器的概念。答:對象適配器是一種普通的程序,它可以接收輸入的調(diào)用請求并把它們傳遞給對象的服務(wù)器存根。對象適配器主要負(fù)責(zé)實現(xiàn)調(diào)用策略,這些策略確定是否、怎樣以及多少多線程被用來調(diào)用一個對象。12、舉出幾個用于支持持久性對象的對象適配器設(shè)計方面的問題。答:最重要的問題可能是產(chǎn)生一個對象引用,這個引用可以被當(dāng)前服務(wù)器和適配器獨立地使用。這樣的引用應(yīng)該能
32、被傳遞給一個新的服務(wù)器并可能為相應(yīng)的對象指定特定的活動策略。其它的問題包括,持久性對象什么時候、怎樣被寫到磁盤上,以及對象保存在主存儲器中的內(nèi)容和保存到磁盤上的內(nèi)容有什么區(qū)別。13、改變對象適配器示例中的thread_per_object過程,使用單個線程來處理受該適配器控制的所有對象。答:代碼基本保持不變,除了我們需要創(chuàng)建一個single線程,該線程用修改過的版本thread_per_object來運行。這個線程作為adapter_thread來被引用。當(dāng)多路輸出選擇器調(diào)用這個適配器的時候,它向adapter_thread的緩沖區(qū)中存放一條消息,然后再讀取它。適配器線程調(diào)用適當(dāng)?shù)膕tub并處
33、理響應(yīng)消息。#include <header.h>#include <thread.h>#define MAX3OBJECTS 100#define NULL 0#define ANY 1METHOD3CALL invokeMAX3OBJECTS; /* array of pointers to stubs */THREAD *root; /* demultiplexer thread */THREAD *adapter3thread /* thread that runs single3thread*/void single3thread(long object3id
34、) message *req, *res; /* request/response message*/unsigned size; /* size of messages */char *results; /* array with all results*/while(TRUE) get3msg(&size, (char*) &req); /* block for invocation request */* Pass request to the appropriate stub. The stub is assumed to */* allocate memory for
35、 storing the results. */(invokereq->object 3id*)(req->size, req->data, &size, results);res = malloc(sizeof(message)+size); /* create response message */res->object3id = object3id; /* identify object */res->method3id = req.method3id; /* identify method */res->size = size; /* set
36、 size of invocation results */memcpy(res->data, results, size); /* copy results into response */put3msg(root, sizeof(res), res); /* append response to buffer */free(req); /* free memory of request */free(*results); /* free memory of results*/void invoke3adapter(long oid, message *request) put3msg
37、(adapter3thread, sizeof(request), request);14、維護(hù)到客戶的TCP/IP連接的服務(wù)器是狀態(tài)相關(guān)的還是狀態(tài)無關(guān)的。答:假設(shè)服務(wù)器沒有在客戶端上保存其它消息,就可能認(rèn)為服務(wù)器是狀態(tài)無關(guān)的。問題在于不是服務(wù)器,而是服務(wù)器的傳輸層在客戶端上保存了狀態(tài)。本地操作系統(tǒng)所跟蹤的與服務(wù)器無關(guān)。15、想象一下,某個web服務(wù)器維護(hù)一個列表,該列表中的內(nèi)容是IP地址與該地址最近訪問過的web頁的映射關(guān)系。當(dāng)一個客戶連接到該服務(wù)器的時候,該服務(wù)器在列表中查找該客戶,如果找到的話就返回注冊過的頁面。這個服務(wù)器是狀態(tài)相關(guān)還是狀態(tài)無關(guān)的?答:是狀態(tài)無關(guān)的。狀態(tài)無關(guān)設(shè)計的主要問題
38、不是服務(wù)器是否保存了客戶端的任何信息,而是所保存信息的準(zhǔn)確度。在本例中,如果表丟失了,客戶端與服務(wù)器還能正常的進(jìn)行交互,就象什么事都沒有發(fā)生一樣。在一個狀態(tài)相關(guān)設(shè)計中,這種交互只有在服務(wù)器從錯誤中恢復(fù)過來以后才能進(jìn)行。16、Java RMI對代碼遷移依賴到何種程度?答:把對象引用看作是可移動的代理,對象引用每次被傳遞的時候,我們實際上通過網(wǎng)絡(luò)來遷移代碼。幸運的是,代理沒有執(zhí)行狀態(tài),因此支持簡單的移動性。17、在UNIX系統(tǒng)中,可以通過讓進(jìn)程在遠(yuǎn)程機器上派生出一個子進(jìn)程來支持強可移植性。請說明這種機制的工作機理。答:UNIX中派生的意思是把父進(jìn)程的完整鏡像拷貝給子進(jìn)程,這意味著在調(diào)用完fork后
39、,子進(jìn)程繼續(xù)運行。一個相似的方法可以用來做遠(yuǎn)端克隆,這里假定了目標(biāo)平臺與父進(jìn)程的平臺是一樣的。第一步是讓目標(biāo)操作系統(tǒng)為新建的子進(jìn)程保存資源并創(chuàng)建相應(yīng)的進(jìn)程和存儲器映射。這一步完成之后,父進(jìn)程的鏡像可以被拷貝了,子進(jìn)程也可以被激活了。18、圖3.13指出,強可移植性不能與在目標(biāo)進(jìn)程中已遷移代碼的執(zhí)行結(jié)合在一起。請舉出一個反例。答:如果強可移植通過線程遷移發(fā)生的話,它就應(yīng)該能使一個遷移的線程在目標(biāo)進(jìn)程的環(huán)境中執(zhí)行。19、考慮某個進(jìn)程P,它請求訪問與自己位于同一臺機器上的本地文件F。在P遷移到另一臺機器上以后,它還需要訪問F。如果文件對機器的綁定是緊固的,如何實現(xiàn)對F的系統(tǒng)級引用?答:一個簡單的解決
40、方案是,創(chuàng)建一個單獨的進(jìn)程Q,用Q來處理對F的遠(yuǎn)端請求。提供給進(jìn)程P與以前一樣的接口。例如以代理的形式。從效果上講,進(jìn)程Q是作為文件服務(wù)器來工作的。20、DAgents系統(tǒng)中的每個代理都由單獨的進(jìn)程實現(xiàn)。代理通信的主要方式是共享文件以及消息傳遞,而文件無法在機器之間傳遞。如果按照3.4節(jié)中給出的移動框架結(jié)構(gòu),代理的那一部分狀態(tài)包含了資源段?答:資源段包含了所有本地以及全局的資源引用。同樣地,它由那些指向其它代理、本地文件等等的變量組成。在DAgents系統(tǒng)中,這些變量主要包含在全局程序變量部分中。事實上,在DAgents系統(tǒng)中,所有的資源都是不可轉(zhuǎn)移的,這就使得事情變得簡單了。只有代理能在機器
41、之間傳遞。因為代理已經(jīng)被全局引用命名,即:一個(address,local-id)對,在提供遷移的情況下轉(zhuǎn)換引用到資源,在DAgents中就相對比較簡單了。21、將DAgents的體系結(jié)構(gòu)與FIPA模型所實現(xiàn)的代理平臺的體系結(jié)構(gòu)進(jìn)行比較。答:它們之間的主要區(qū)別是,DAgents沒有單獨的目錄服務(wù),事實上,它只提供了低級的命名服務(wù),通過這個服務(wù),代理能被全局引用。FIPA體系結(jié)構(gòu)中的管理組件對應(yīng)DAgents中的服務(wù)器,然而ACC是由通信層實現(xiàn)的。與DAgents相比,F(xiàn)IPA沒有提供代理的體系結(jié)構(gòu)的更進(jìn)一步的信息。22、代理通信語言(ACL)在哪些方面與OSI模型相符?答:這些語言是應(yīng)用層的一
42、部分。23、在系統(tǒng)頂層實現(xiàn)代理通信語言以進(jìn)行電子郵件處理時,這中代理通信語言又有哪些方面與OSI模型相符?這種方案有什么優(yōu)點?答:它應(yīng)該還是應(yīng)用層的一部分。在e-mail的頂層實現(xiàn)ACL的一個重要原因是簡單。一個完整,全世界范圍內(nèi)的通信基礎(chǔ)設(shè)施對于處理代理之間的異步消息傳遞來說是可使用的。實際上,它與第二章討論的消息隊列系統(tǒng)很相近。24、為什么ACL消息中通常必須指定實體(ontology)?答:在這個特定的環(huán)境下,實體最好被解釋為對ACL消息中包含的實際數(shù)據(jù)的標(biāo)準(zhǔn)解釋的一個引用。通常,消息傳遞系統(tǒng)中的數(shù)據(jù)總是被假定能被消息的發(fā)送者和接收者正確地解釋。代理經(jīng)常被認(rèn)為是高度獨立的。因此,不能總是
43、假定接收方能正確地解釋接收到的數(shù)據(jù)。當(dāng)然,對實體域的解釋形成一些約定是必須的。第五章 同步1、說出至少三種可在WWV廣播時間和在分布式系統(tǒng)中處理機設(shè)置內(nèi)部時鐘之間引入的延遲源。答:信號在大氣中的傳播延遲,當(dāng)機器在協(xié)調(diào)WWV接受者與以太網(wǎng)時的碰撞延遲,包在局域網(wǎng)上的傳播延遲,各個處理器由于中斷處理延遲和內(nèi)部隊列延遲所產(chǎn)生的延遲。2、考慮分布式系統(tǒng)中的兩臺機器的行為。這兩臺機器的時鐘假設(shè)每毫秒滴答1000次。但實際上只有一臺是這樣的,另一臺每毫秒滴答990次。如果UTC每分鐘更新一次,那么時鐘的最大偏移量是多大?答:第二臺時鐘每秒滴答990,000次,每秒的偏移量為10ms,所以一分鐘偏移量為60
44、0ms。3、向圖5.7中加入一個與消息A并發(fā)的新消息,即它既不發(fā)生在A的前面也不發(fā)生在A的后面。答:在0時刻從進(jìn)程2發(fā)送消息,并且在8時刻到達(dá)進(jìn)程1,或者是在0時刻從進(jìn)程1發(fā)送消息并在10時刻到達(dá)進(jìn)程2。這兩種方法都可以滿足要求。4、要使用Lamport時間戳實現(xiàn)全序多播,是不是每個消息都必須要被嚴(yán)格地確認(rèn)?答:不是。只要消息的時間戳比所接收的消息的時間戳大,就有足夠的時間多播其他類型的消息。將消息m傳送到應(yīng)用程序的條件是:以一個很大的時間戳從其它所有進(jìn)程那里接受到其他消息。這保證了進(jìn)行中的消息都使用更小的時間戳。5、考慮一個消息只是以它們被發(fā)送的順序被傳遞的通信層。給出一個不需要這種限制的例
45、子。答:想象傳輸一個大的圖像,圖像被分成連續(xù)的塊。每塊以它在原始圖像中的位置標(biāo)識,可能還有高度和寬度。如果是那樣的話,F(xiàn)IFO的順序就不是必要的,因為接受者可以很容易地把到來的塊拼接到正確的位置。6、假設(shè)兩個進(jìn)程同時檢測到協(xié)調(diào)者崩潰了,并且它們都使用欺負(fù)算法主持一個選舉。這時將發(fā)生什么。答:每個更高位置的處理器都會收到兩個ELECTION消息,但是會忽略掉第二個。選舉會象往常一樣進(jìn)行下去。7、在圖5。12中,我們有兩個ELECTION消息同時在循環(huán),當(dāng)對它們都沒有什么不利影響時,殺掉一個將更好。設(shè)計這樣一個算法,該算法在不影響基本的選舉操作算法的情況下完成此項任務(wù)。答:當(dāng)一個進(jìn)程接受到ELEC
46、TION消息,它會檢查消息是誰開始發(fā)送的,如果是它自己開始的(例如它的位置在列表的首位),它會把消息變成協(xié)調(diào)者消息并在正文里描述它。如果消息不是它開始的,它會加入其進(jìn)程號并沿著環(huán)向前發(fā)送。然而,如果它更早地發(fā)送了自己的選舉消息并發(fā)現(xiàn)了競爭者,它會將創(chuàng)始人的進(jìn)程號與自己的相比較。如果其他進(jìn)程擁有較小的號碼,它會丟棄那個消息而不是傳遞消息。如果競爭者更大,那么消息將以平常的方式發(fā)送。這樣,如果多個選舉消息被開始發(fā)送,那么入口最大的消息將會幸存,其他消息將沿著路由被忽略掉。8、許多分布式算法需要使用協(xié)調(diào)進(jìn)程。討論一下,這樣的算法實際上可以在什么程度上被看作是分布式的?答:在集中式的算法中,常常是固定
47、的進(jìn)程充當(dāng)協(xié)調(diào)者。分布來源于其他進(jìn)程在不同的機器上運行的事實。在分布式算法中,沒有固定的協(xié)調(diào)者,協(xié)調(diào)者從組成部分算法的進(jìn)程中選出。事實是協(xié)調(diào)者能使算法更具分布性。9、在集中式互斥方法中(圖5。13),協(xié)調(diào)者在收到一個進(jìn)程釋放它獨占訪問的臨界區(qū)的消息后,通常給等待隊列中的第一個進(jìn)程授權(quán),允許其訪問臨界區(qū)。請給出協(xié)調(diào)者另一個可能的算法。答:請求會和優(yōu)先權(quán)聯(lián)系在一起,優(yōu)先權(quán)取決于他們的重要性。協(xié)調(diào)者應(yīng)該保證最高優(yōu)先級的最先請求。10、請再考慮圖5。13,假設(shè)協(xié)調(diào)者崩潰了,這會必然導(dǎo)致整個系統(tǒng)癱瘓嗎?如果不會,那么在什么情況下會呢?有什么方法避免了這個問題的發(fā)生,使系統(tǒng)能夠忍受協(xié)調(diào)者的崩潰?答:在允許
48、和拒絕的條件下,假定算法是只要有請求,就立即回應(yīng)。如果沒有進(jìn)程在臨界區(qū)并且沒有進(jìn)行在排隊,那么這個崩潰不是毀滅性的。下一個請求準(zhǔn)許的的進(jìn)程將不會獲得任何回應(yīng)并且初始一個協(xié)調(diào)者的選舉。在發(fā)送回應(yīng)之前,使用協(xié)調(diào)者存儲每個到來的請求將會使系統(tǒng)更加健壯。這樣的話,在崩潰事件中,新的協(xié)調(diào)者將會重建一個活動臨界區(qū)域列表并將從磁盤讀文件的行為排隊。11、Ricart和Agrawala算法會有這樣的問題:如果一個進(jìn)程崩潰,并且沒有對另一個要求進(jìn)入臨界區(qū)的進(jìn)程的請求作應(yīng)答,沒有應(yīng)答意味著拒絕請求,我們建議所有的請求應(yīng)用立即被應(yīng)答,以便很容易地檢測到崩潰的進(jìn)程,是否存在一些情況,即使使用這種方法也還不足夠?請討論
49、。答:假定一個進(jìn)程在拒絕許可并在那時崩潰。請求進(jìn)程會認(rèn)為它是活動的,但許可永遠(yuǎn)不會到來。一種方法為是請求者并不真正阻塞,而是休眠一定的時間。在休眠后,請求者將會測試所有拒絕許可的進(jìn)程是否還是活動的。12、如果我們假設(shè)該算法可以在支持硬件廣播的LAN中實現(xiàn),那么圖5。16中的實何時將如何改變?答:僅僅只有分布式案例的實體改變。因為發(fā)送一個點對點的消息的花費與廣播消息一樣多,所以我們只需要發(fā)送一個廣播消息到所有的進(jìn)程去請求實體到臨界區(qū)。同樣地,僅僅一個出口的廣播消息是需要的。延遲變成1+(n-1):一個延遲來源于廣播請求,再加上n-1,因為在被允許進(jìn)入臨界區(qū)之前,我們?nèi)匀恍枰獜钠渌總€進(jìn)程接受到消
50、息。13、分布式系統(tǒng)可能有多個互相獨立的臨界區(qū),假設(shè)進(jìn)程0想進(jìn)入臨界區(qū)A而進(jìn)程1想進(jìn)入臨界區(qū)B,Ricart和Agrawala的算法會導(dǎo)致死鎖嗎?請解釋原因。答:這取決于程序的基本規(guī)則。如果進(jìn)程嚴(yán)格地依次進(jìn)入臨界區(qū)域,也就是說一個臨界區(qū)內(nèi)的進(jìn)程不會試圖進(jìn)入其他進(jìn)程的臨界區(qū),那么當(dāng)它擁有其他進(jìn)程進(jìn)程想要獲取的資源(比如臨界區(qū))的時候,它是不會阻塞的。系統(tǒng)于是死鎖釋放。另一方面,如果進(jìn)程0進(jìn)入臨界區(qū)A并且試圖進(jìn)入臨界區(qū)B,如果另外的進(jìn)程以相反的順序獲取它們時,死鎖就會發(fā)生。因為每個臨界區(qū)被所有的進(jìn)程獨立處理,所以Rucart和Agrawala算法不會造成死鎖。14、在圖5。17中,我們看到一種用磁
51、帶實現(xiàn)對存貨表自動更新的方法。因為磁帶可以很容易地用磁盤上的一個文件來模擬,你認(rèn)為為什么不使用這種方法(用磁盤文件代替)呢?答:第一個原因大概是人類變得更加貪婪和想要做更多他們過去習(xí)慣的東西。如果用戶滿足于每天運行一次簡單的保存詳細(xì)目錄,可以用磁盤。問題在于每個人都想即時訪問數(shù)據(jù)庫,這會使得將詳細(xì)目錄保存在磁帶是不可能的。15、在圖5。25(D)中有三個調(diào)度策略,兩個合法,一個非法的。對于同一個事務(wù)處理,給出臨終x所有的可能值和合法的與非法的狀態(tài)的一個完整表。答:合法的值為1,2,3。非法的值為4,5,6。4可以通過中間的事務(wù)處理來實現(xiàn),其他兩個的交錯是不正確的。5在策略3中實現(xiàn)。6可以通過首
52、先三次設(shè)置x為0,然后三次增加它實現(xiàn)。16、當(dāng)一個私有工作空間用于實現(xiàn)事務(wù)處理時,可能需要將大量的文件索引復(fù)制到父輩工作區(qū),怎樣在不引入競爭條件下實現(xiàn)這種操作?答:一種辦法為在系統(tǒng)頂層設(shè)置鎖以阻止所有的活動直到所有的索引都被重寫。在預(yù)防崩潰以前,創(chuàng)建一個目的表也許是明智的。17、給出一個完整的算法判定一個試圖鎖住一個文件的操作是否成功。要同時考慮到讀鎖和寫鎖,以及文件被解鎖,讀鎖寫或?qū)戞i寫的可能性。答:算法如下:如果文件沒被鎖,那么操作通常是成功的。如果文件被讀鎖定并且操作是另一個讀鎖定,那么操作也是成功的。在其他情況,操作是失敗的(例如,寫鎖定一個被鎖文件會失敗,當(dāng)一個文件被寫鎖定時,讀鎖定
53、會失敗)18、用鎖定的方法實現(xiàn)并發(fā)控制的系統(tǒng)通常區(qū)分讀鎖和寫鎖,如果一個進(jìn)程已經(jīng)得到了一個讀鎖但現(xiàn)在又想將它換成寫鎖,將會怎么樣呢?答:一個讀鎖只有在沒有其它讀進(jìn)程的情況下才可能被轉(zhuǎn)換成一個寫鎖。一種有效的方法就是先釋放這個讀鎖,然后馬上再獲得一個寫鎖。如果有其它的讀進(jìn)程的話這個操作將會失敗。如果有其它進(jìn)程正在等待獲得一個寫鎖時,這個操作是否成功取決于具體的策略,而不是技術(shù)上的問題。將一個寫鎖降低優(yōu)先級為一個讀鎖問題可行的,并且不會出錯。19、在分布式事務(wù)中使用時間戳排序,假設(shè)寫操作write(T1,x)被傳給數(shù)據(jù)管理器,因為僅有的可能發(fā)生沖突的操作write(T2, x)的時間戳較早,為什么
54、讓調(diào)度管理器推遲傳遞write(T1,x )直到T2完成呢?答:通過推遲到T2完成,調(diào)度器可以避免由于T2運行的失敗而造成的其它一系列的運行失敗。20、樂觀并發(fā)控制與使用時間戳相比是更嚴(yán)格還是更不嚴(yán)格呢?為什么?答:它更加嚴(yán)格。因為通過使用樂觀并發(fā)控制的機制,如果一個事務(wù)正在交付并且發(fā)現(xiàn)另外一個事務(wù)也在更改當(dāng)前事務(wù)使用的文件,它問題會退出。如果使用時間戳的話,如果另一個事務(wù)的時間戳更低的話,這個事務(wù)有時候可能會成功。21、使用時間戳來進(jìn)行并發(fā)控制能保證串行性嗎?請討論。答:可以的。它要么按照事務(wù)的時間戳全部串行地完成,要么只完成一部分。22、我們常說事務(wù)被中止時,一切都恢復(fù)到它以前的狀態(tài),就好
55、像事務(wù)從來沒有發(fā)生一樣,實現(xiàn)上我們在說謊。請給出一個重新恢復(fù)一切是不可能的例子。答:物理I/O發(fā)生的事務(wù)不能夠被重置。比如說,一個進(jìn)程打印出了一些數(shù)據(jù),這些墨不能夠從紙上移掉。同樣,一個控制所有進(jìn)程的系統(tǒng)也不大可能會恢復(fù)一切事務(wù)到它們以前的狀態(tài)。第六章 一致性和復(fù)制1、對共享的JAVA對象的訪問可以通過將其方法聲明為同步的而被串行化.當(dāng)這種對象被復(fù)制時,這種方法足以保證訪問的串行化嗎?答: 不能.問題是對每一個復(fù)制對象的訪問是串行化的.但是對不同的復(fù)制對象可以在同一時間進(jìn)行不同的操作,使得復(fù)制的實例變量不一致.2、對于第一章所討論的監(jiān)視器,如果允許在一個復(fù)制的監(jiān)視器中阻塞多個線程,那么給條件變
56、量發(fā)信號時,需要保證什么?答: 在每一組復(fù)制線程中,相同的線程會被喚醒,所以所有的復(fù)制對象都發(fā)生了完全相同的流控制.實際上,這意味著運行時系統(tǒng)應(yīng)該完全控制著每一組復(fù)制對象的線程的運行過程.3、請用自己的語言解釋實際考慮一致性模型的主要原因.答: 弱一致性模型的出現(xiàn)是為了滿足性能復(fù)制的需要.但是,只有當(dāng)我們能夠阻止全局同步, 復(fù)制才會有效。而要達(dá)到這樣的目的,就得放松一致性的限制。4、請解釋DNS如何進(jìn)行復(fù)制,以及它實際運行很好的原因。答:基本思想是域名服務(wù)器預(yù)先查詢結(jié)果。結(jié)果可以存在高速緩存中很長一段時間,因為DNS認(rèn)定主機名IP地址的映射不會常常改變。5、討論一致性模型時,我們經(jīng)常提及軟件和
57、數(shù)據(jù)存儲間的合約。為什么需要這一合約?答:如果程序期望連續(xù)的一致性的數(shù)據(jù)存儲且不能缺少這些任何數(shù)據(jù),存儲必須保證連續(xù)一致。但是,為了提高性能,一些系統(tǒng)提供弱一點的模式。事實上軟件能遵守模式強加的規(guī)則??偟恼f來,這意味著遵守規(guī)則的程序可以感知到什么看起來像是連續(xù)一致的數(shù)據(jù)存儲。6、線性化假設(shè)存在一個全局時鐘。但是,我們已經(jīng)在嚴(yán)格一致性中指出,這種假設(shè)對于大多數(shù)分布式系統(tǒng)都是不現(xiàn)時的。線性化可以應(yīng)用于物理分布的數(shù)據(jù)存儲嗎?答:可以。線性化假設(shè)放松了同步時鐘,就是說,它假設(shè)幾個事件發(fā)生在同一時間段。這些事件需要根據(jù)時間分類。7、如果多處理器使用單一總路線,那么可以實現(xiàn)嚴(yán)格一致的存儲器嗎?答:可以???/p>
58、線連續(xù)請求因此它們以絕對的時間順序出現(xiàn)在內(nèi)存中。8、對于圖6。5(B),為什么W1(x)a R2(X)NIL R3(X)a是非法的?答:它違背了數(shù)據(jù)一致性。9、在圖6。7中,000000是僅滿足FIFO一致的分布式共享存儲器的合法輸出嗎?請解釋你的答案。答:是的。假設(shè)(a)第一個運行。它打印00?,F(xiàn)在(B)運行。如果存入(A)的還沒有到達(dá),它也打印00。現(xiàn)在(C)運行。如果前面的兩個在存儲的都沒到達(dá),它也打印00。10、在圖6。8中,001110是順序一致的存儲器的合法輸出嗎?請解釋你的答案。答:是的。如果程序以(a)(c)(b)的順序運行,就能得到這個結(jié)果。11、我們在6。2。2節(jié)的最后討論了一個形式模型,該模型規(guī)定順序一致的數(shù)據(jù)存儲上的每個操作集合可以用一個字符串H表示,從這個字符串H可以衍生出所有的單
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)保技術(shù)宣傳與公眾參與考核試卷
- 木制品生產(chǎn)現(xiàn)場的S管理實踐考核試卷
- 電機在工業(yè)機器人的靈活操作考核試卷
- 焊接工藝在盾構(gòu)機制造中的應(yīng)用考核試卷
- 2025年學(xué)黨章知識考試題庫及答案(新版)
- 推拿治療學(xué)試題庫及參考答案
- 《女媧造人》課件-4
- 經(jīng)濟管理內(nèi)部審計案例研究(5)模版課件
- 簡論中國廉政文化
- 中醫(yī)藥香囊課件
- 幼兒園美術(shù):交通工具
- 智慧閉店小程序操作指引
- 康養(yǎng)服務(wù)專業(yè)群建設(shè)方案
- 天津市部分區(qū)2023-2024學(xué)年七年級下學(xué)期4月期中考試數(shù)學(xué)試卷(含解析)
- 澳大利亞省公開課一等獎新名師比賽一等獎?wù)n件
- 2024年高考英語快速提閱讀-科技創(chuàng)新類詞匯記
- 2024年山東省高中自主招生數(shù)學(xué)模擬試卷試題(含答案)
- 《濕地資源資產(chǎn)評估和資源核算技術(shù)規(guī)范》報批稿及編制說明
- 水平垂直運輸專項方案
- (正式版)SHT 3227-2024 石油化工裝置固定水噴霧和水(泡沫)噴淋滅火系統(tǒng)技術(shù)標(biāo)準(zhǔn)
評論
0/150
提交評論