分布式操作系統(tǒng)2(2)_第1頁(yè)
分布式操作系統(tǒng)2(2)_第2頁(yè)
分布式操作系統(tǒng)2(2)_第3頁(yè)
分布式操作系統(tǒng)2(2)_第4頁(yè)
分布式操作系統(tǒng)2(2)_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2.4遠(yuǎn)程過(guò)程調(diào)用遠(yuǎn)程過(guò)程調(diào)用 客戶-服務(wù)器模式為構(gòu)造分布式操作系統(tǒng)提供了一種便利的方法,但它也存在著無(wú)法克服的缺陷:即所有通信建立的基礎(chǔ)都是輸入/輸出。用1/0為基礎(chǔ)實(shí)現(xiàn)它并不是一個(gè)好的辦法。新方法就是允許程序去調(diào)用位于其他機(jī)器上的過(guò)程。 當(dāng)位于機(jī)器1的一進(jìn)程調(diào)用機(jī)器2上的某過(guò)程時(shí),機(jī)器1上的該進(jìn)程被掛起,被調(diào)用的過(guò)程在機(jī)器2上執(zhí)行。調(diào)用者將消息放在參數(shù)表中傳送給被調(diào)用者,結(jié)果作為過(guò)程的返回值返回給調(diào)用者。消息的傳送與I/0操作對(duì)于編程人員是不可見(jiàn)的。這種方法稱為遠(yuǎn)程過(guò)程調(diào)用(remote procedure call),或簡(jiǎn)稱為RPC。 1、由于調(diào)用的進(jìn)程與被調(diào)用的過(guò)程運(yùn)行在不同的機(jī)器上,

2、因而在不同的地址空間執(zhí)行,這就導(dǎo)致了問(wèn)題的復(fù)雜化。 2、調(diào)用者和被調(diào)用者都有可能會(huì)崩潰,任何一種可能的失敗都會(huì)引起不同的問(wèn)題。 RPC是廣泛應(yīng)用于分布式操作系統(tǒng)的一種技術(shù)。但有幾個(gè)問(wèn)題: 2.4.1 基本基本RPC操作操作 傳統(tǒng)的(單機(jī)上)過(guò)程調(diào)用:read(文件句柄,緩沖區(qū)地址,輸入最大字節(jié)數(shù))。例如:count=read(fd,buf,nbytes).這里fd是一個(gè)整數(shù),buf是一個(gè)字符型數(shù)組,nbytes是另一個(gè)整數(shù)。 功能是:從fd所指定的文件中輸入 nbytes個(gè)字節(jié)到起始地址為buf的緩沖區(qū)中。函數(shù)返回實(shí)際讀入到緩沖區(qū)中的數(shù)據(jù)的字節(jié)數(shù),如果出錯(cuò),返回-1,并設(shè)置錯(cuò)誤號(hào)碼errno.

3、在c語(yǔ)言中參數(shù)的調(diào)用分為值參調(diào)用與變參調(diào)用。 1、對(duì)被調(diào)用方,值參僅僅是一個(gè)初始化了的局部變量,其改變不影響調(diào)用方的初始值 。2、變參是一個(gè)指向變量的指針(即變量的地址),而不是變量的值。它的修改影響了調(diào)用方過(guò)程中的值。值參調(diào)用和變參調(diào)用的這種區(qū)別對(duì)RPC來(lái)說(shuō)是很重要的。 此外有C語(yǔ)言中不使用的參數(shù)傳遞機(jī)制,它叫做復(fù)制/恢復(fù)調(diào)用(call-by-copy/restore)。在調(diào)用者將變量拷入堆棧,這一點(diǎn)是與值參調(diào)用一樣。調(diào)用完成后,將棧中變量的值拷回并覆蓋原有的變量值,此方法與變參調(diào)用用效果一樣。 使用哪一種參數(shù)傳遞機(jī)制通常是由語(yǔ)言開發(fā)者決定的,它是語(yǔ)言的固有特性。它有時(shí)也與傳遞的數(shù)據(jù)類型相關(guān)

4、。例如在C語(yǔ)占中,整型與其他數(shù)值類型常作為值參傳遞,而數(shù)組總是以變參的形式傳遞。 RPC的內(nèi)在思想是使遠(yuǎn)程的過(guò)程調(diào)用看上去就像在本地響過(guò)程調(diào)用一樣。 RPC使用與本地調(diào)用相似的方法獲得透明性 。主要步驟是: (1)客戶過(guò)程以普通方式調(diào)用相應(yīng)的客戶存根: (2)客戶存根建立消息并激活內(nèi)核陷阱: (3)內(nèi)核將消息發(fā)送到遠(yuǎn)程內(nèi)核; (4)遠(yuǎn)程內(nèi)核將消息送到服務(wù)器存根: (5)服務(wù)器存根取出消息中的參數(shù)后調(diào)用服務(wù)器的過(guò)程: (6)服務(wù)器完成工作后將結(jié)果返回至服務(wù)器存根; (7)服務(wù)器存根將它打包并激活內(nèi)核陷阱; (8)遠(yuǎn)程內(nèi)核將消息發(fā)送至客戶內(nèi)核; (9)客戶內(nèi)核將消息交給客戶存根: 1O)客戶存根從

5、消息中取出結(jié)果返回給客戶。 最主要是將客戶過(guò)程的本地調(diào)用轉(zhuǎn)化為客戶存根再轉(zhuǎn)化為服務(wù)器過(guò)程的本地調(diào)用,對(duì)客戶與服務(wù)器來(lái)說(shuō)是透明的。242 參數(shù)傳遞參數(shù)傳遞客戶存根的功能是獲取調(diào)用的參數(shù)并將參數(shù)打包放入消息中送往服務(wù)器存根。將參數(shù)打包形成消息的過(guò)程稱為參數(shù)組裝(Paralncter Marshaling)。 例如:遠(yuǎn)程調(diào)用函數(shù)sum(i,j),該函數(shù)有兩個(gè)整型參數(shù)并返回其代數(shù)和。 客戶存根獲取這兩個(gè)參數(shù)并將它們打包入消息中。因?yàn)橐粋€(gè)服務(wù)器可能支持多個(gè)調(diào)用,所以它也將被調(diào)用過(guò)程的名字或過(guò)程號(hào)放入消息中,以確定是哪一個(gè)調(diào)用。當(dāng)消息到達(dá)服務(wù)器后,由存根檢查消息以確定需要哪個(gè)過(guò)程,然后調(diào)用相應(yīng)的進(jìn)程。 服

6、務(wù)器進(jìn)程一結(jié)束,服務(wù)器存根再次取得控制權(quán),它獲取服務(wù)器提供的運(yùn)行結(jié)果并將其打包形成消息。這條消息被發(fā)送回客戶存根,客戶存根從消息中取出結(jié)果,最終將結(jié)果返回給客戶進(jìn)程。 只要客戶機(jī)與服務(wù)器機(jī)是同樣的機(jī)器,并且參數(shù)與結(jié)果都是像整型、字符型、布爾型這樣的標(biāo)量類型,那么上述模型將工作良好。例如lBM主機(jī)中使用的是EBCDlC碼,而IBMPC使用的是ASCII碼,服務(wù)器將會(huì)錯(cuò)誤地解釋所傳送的字符。 如在lntel486中字節(jié)是從右向左編號(hào),而在SPARC中正相反。Lntel的格式為最低有效位優(yōu)先,而SPARC的格式為最高有效字節(jié)優(yōu)先。例如,如果一個(gè)服務(wù)器有二個(gè)參數(shù),一個(gè)整數(shù)和一個(gè)四個(gè)字符的字符串。每個(gè)參

7、數(shù)占一個(gè)32位長(zhǎng)的字。 (a)說(shuō)明了intel486機(jī)上,整型參數(shù) 5,字符串JILL。(b)說(shuō)明了消息被SPARC機(jī)接收后。 5*2 的整數(shù),“JILL”的字符串。(c)將每個(gè)字倒置后,整數(shù)雖然是5,字符串卻成LLIJ。 24 對(duì)應(yīng)于有n個(gè)參數(shù)的遠(yuǎn)程過(guò)程調(diào)用的消息將會(huì)有n+l個(gè)字段,一個(gè)字段標(biāo)識(shí)過(guò)程,n個(gè)字段存放n個(gè)參數(shù)。客戶和服務(wù)器共問(wèn)建立一個(gè)表示基本數(shù)據(jù)類型的標(biāo)準(zhǔn),給定一個(gè)參數(shù)列表和消息后,它們就可以推斷出哪些字節(jié)屬于哪個(gè)參數(shù)。 信息在消息中是如何表示的?一種方法是針對(duì)整數(shù)、字符、布爾數(shù)以及浮點(diǎn)數(shù)等設(shè)計(jì)一個(gè)網(wǎng)絡(luò)標(biāo)準(zhǔn)或規(guī)范化形式,并且要求所有的發(fā)送者在參數(shù)編組時(shí)將其所有的數(shù)據(jù)的內(nèi)部表示轉(zhuǎn)換

8、為符合該標(biāo)準(zhǔn)的表示。 第二種方法,客戶使用自己本來(lái)的格式,并在消息的第一個(gè)字節(jié)中說(shuō)明它所使用的格式。這方法已經(jīng)知道消息中的參數(shù)是怎樣布局的以及客戶是采用什么格式,剩下的工作就容易了(只要一方轉(zhuǎn)換為另一方的格式)。 243 動(dòng)態(tài)捆綁動(dòng)態(tài)捆綁 客戶如何定位服務(wù)器呢?一種方法是將服務(wù)器的網(wǎng)絡(luò)地址固化到客戶機(jī)中。但是當(dāng)服務(wù)器移動(dòng)、復(fù)制或者在改變其接口后,需要重新編譯。為避免這些麻煩,一些分布式系統(tǒng)采用了動(dòng)態(tài)捆綁的技術(shù),以使客戶能夠定位服務(wù)器。 1、服務(wù)器 的形式說(shuō)明書 首先應(yīng)該提到的是服務(wù)器的形式說(shuō)明書 ,說(shuō)明書指出了服務(wù)器名字叫file_server,版本號(hào)為31,提供的服務(wù)器過(guò)程有(read,wr

9、ite,create,delete)。 每一過(guò)程都給出了參數(shù)類型。每個(gè)參數(shù)都被指明為輸入?yún)?shù)、輸出參數(shù)、或者輸入/輸出參數(shù)。 主要用途是作為存根生成器的輸入,以此來(lái)產(chǎn)生客戶和服務(wù)器的存根,然后將這兩個(gè)存根存放到相應(yīng)的存根庫(kù)陣中。 當(dāng)服務(wù)器程序開始執(zhí)行時(shí),main主循環(huán)外的初始化調(diào)用(initialize)輸出服務(wù)器的接口。這意味著服務(wù)器進(jìn)程向一個(gè)稱為binder的程序發(fā)送消息,通過(guò)binder使其他機(jī)器知道該服務(wù)器的存在。 2、 binder 進(jìn)程該進(jìn)程用于服務(wù)器的注冊(cè)。在注冊(cè)時(shí)要登記服務(wù)器的名字、版本號(hào)、通常有32位長(zhǎng)的唯一標(biāo)識(shí)符號(hào)以及用于定位的句柄,以便客戶進(jìn)程能尋服務(wù)器進(jìn)程。服務(wù)器進(jìn)程也

10、可通過(guò)調(diào)用binder來(lái)注銷登記以停止服務(wù)。 P58 表2-3 綁定接口客戶進(jìn)程第一次調(diào)用某個(gè)遠(yuǎn)程過(guò)程時(shí),客戶存根發(fā)現(xiàn)其未與服務(wù)器捆綁,則向binder發(fā)送消息要求檢查,如果當(dāng)前運(yùn)行的服務(wù)器不支持這樣的接口,則調(diào)用失敗。另一方面,如果存在合適的服務(wù)器進(jìn)程,binder將它的句柄和唯一標(biāo)識(shí)符交給客戶存根??蛻舸娓丫浔鳛榈刂?,向它發(fā)送請(qǐng)求消息。消息包含送往服務(wù)器進(jìn)程的參數(shù)和唯一標(biāo)識(shí)符。當(dāng)一臺(tái)機(jī)器上運(yùn)行多個(gè)服務(wù)進(jìn)程時(shí),服務(wù)器內(nèi)核利用唯一標(biāo)識(shí)符把到來(lái)的消息發(fā)送到正確的服務(wù)進(jìn)程上。 動(dòng)態(tài)捆綁: binder可以根據(jù)需要隨機(jī)地將客戶進(jìn)程分配給多個(gè)服務(wù)器進(jìn)程,以使服務(wù)器負(fù)載均衡。它還可以通過(guò)周期性測(cè)試,

11、自動(dòng)注銷任何不能響應(yīng)調(diào)用的服務(wù)器進(jìn)程,以提高容錯(cuò)性,還可以用來(lái)確認(rèn)合法的使用者。 動(dòng)態(tài)捆綁的不足: 由于客戶進(jìn)程的生存期短,而每個(gè)進(jìn)程運(yùn)行時(shí)都要從頭開始,極大地影響了系統(tǒng)的性能。另外,billder會(huì)成為瓶頸,因此需要多個(gè)binder程序。無(wú)論注冊(cè)還是注銷接口,都需要有大量的消息傳遞來(lái)保持多個(gè)binder的同步與更新,這就需要更多的開銷。 我們將討論RPC可能發(fā)生的一些錯(cuò)誤及其解決方法。RPC系統(tǒng)可能能出現(xiàn)的五類問(wèn)題: (1) 客戶無(wú)法證位服務(wù)器;(2)客戶發(fā)給服務(wù)器的請(qǐng)求消息丟失;(3)服務(wù)器發(fā)給客戶的應(yīng)答消息丟失;(4)服務(wù)器在收到請(qǐng)求后崩潰;(5)客戶機(jī)在發(fā)送請(qǐng)求后崩潰。客戶無(wú)法定位服務(wù)

12、器客戶無(wú)法定位服務(wù)器服務(wù)器可能已關(guān)閉。服務(wù)器產(chǎn)生一個(gè)新版本的接口,當(dāng)客戶進(jìn)程運(yùn)行時(shí),binder就無(wú)法將客戶進(jìn)程與服務(wù)器進(jìn)程相匹配,只能報(bào)出錯(cuò)。處理錯(cuò)誤方法: 1、每個(gè)過(guò)程都有一個(gè)返回值,不同的返回值說(shuō)明各種錯(cuò)誤類型。加入一條新的錯(cuò)誤類型無(wú)法定位服務(wù)器。 2、一種可能的解決辦法是在出錯(cuò)時(shí)產(chǎn)生一個(gè)異常。定義新的信號(hào)類型SIGNOSERVER,讓它像其他信號(hào)一樣處理錯(cuò)誤。 客戶內(nèi)核在發(fā)送請(qǐng)求時(shí)啟動(dòng)計(jì)時(shí)器。如果在計(jì)時(shí)器時(shí)滿之前無(wú)應(yīng)答或無(wú)確認(rèn)消息返回,內(nèi)核重發(fā)消息。如果請(qǐng)求消息確實(shí)丟失了,服務(wù)器是無(wú)法區(qū)分收到的請(qǐng)求是原來(lái)的還是重發(fā)的,而一切運(yùn)行良好。當(dāng)然,如果消息被多次重發(fā)而得不到應(yīng)答,客戶會(huì)放棄請(qǐng)求

13、并認(rèn)為服務(wù)器已經(jīng)關(guān)閉。 客戶請(qǐng)求消息丟失客戶請(qǐng)求消息丟失服務(wù)器應(yīng)答消息丟失服務(wù)器應(yīng)答消息丟失 根據(jù)計(jì)時(shí)器重傳即如果在合理的時(shí)間內(nèi)未收到應(yīng)答,就重發(fā)請(qǐng)求。是請(qǐng)求丟失還是應(yīng)答丟失,或是服務(wù)器速度太慢? 不同原因,有不問(wèn)處理方法。 要解決這個(gè)問(wèn)題,一種方法是將每個(gè)請(qǐng)求(操作能多次安全地重復(fù)執(zhí)行而不產(chǎn)生危害)構(gòu)造成冪等的。然而,有些請(qǐng)求事實(shí)上是非冪等的。 另一種方法是給要發(fā)送的請(qǐng)求消息分配一個(gè)序號(hào)。服務(wù)器內(nèi)核保留那些最近來(lái)自每個(gè)客戶的請(qǐng)求序號(hào)。這樣服務(wù)器內(nèi)核可以區(qū)別第一次發(fā)送的請(qǐng)求和重發(fā)的請(qǐng)求,排除了兩次執(zhí)行某個(gè)請(qǐng)求的可能性。 另一個(gè)附加的保護(hù)是在消息頭上增加一位以區(qū)分是原來(lái)的還是重發(fā)的消息。服務(wù)器崩

14、潰服務(wù)器崩潰 在(b)中,系統(tǒng)不得不向客戶報(bào)告失?。ㄈ纾阂鹨粋€(gè)異常中斷),而在(c)中只需重發(fā)請(qǐng)求。但客戶的內(nèi)核不能區(qū)分這兩種情況。它只知道計(jì)時(shí)器到時(shí)。有三種方法可以解決這個(gè)問(wèn)題。1、等待服務(wù)器重新啟動(dòng),然后重發(fā)請(qǐng)求。這種方法要求不斷重試直至應(yīng)答消息到來(lái)并傳給客戶。這是至少一次語(yǔ)義,RPC至少要執(zhí)行一次,但也有可能執(zhí)行多次。2、立即放棄并報(bào)告失敗。這是最多一次語(yǔ)義, RPC最多執(zhí)行一次,但可能沒(méi)有執(zhí)行。3、不作任何保證。當(dāng)服務(wù)器崩潰時(shí),客戶得不到任何幫助和保證。RPC可以不被執(zhí)行或執(zhí)行相當(dāng)多次。這種方法最大的優(yōu)點(diǎn)就是易實(shí)現(xiàn)。 這三種方法都不是成熟的方法。人們需要的是精確的執(zhí)行一次的語(yǔ)義,但通

15、常它是不容易實(shí)現(xiàn)的。簡(jiǎn)而言之,服務(wù)器崩潰在很大程度上改變了RPC的性質(zhì)。在單處理機(jī)系統(tǒng)中,服務(wù)器的崩潰往往意味著客戶的崩潰。所以恢復(fù)既不可能也沒(méi)必要。而分布式系統(tǒng)中則可以采取一些措施來(lái)處理這種情況。客戶機(jī)崩潰客戶機(jī)崩潰 如果客戶巳發(fā)出請(qǐng)求但在應(yīng)答到來(lái)之前崩潰了,這時(shí)會(huì)發(fā)生什么?此時(shí)已經(jīng)激活了服務(wù)器中的相應(yīng)汁算,但沒(méi)有客戶在等待結(jié)果。這樣的計(jì)算稱為孤兒(orphan)。 孤兒會(huì)導(dǎo)致一系列的問(wèn)題。起碼它浪費(fèi)了CPU周期,同時(shí)又鎖住了文件或其他寶貴的資源。此外,如果客戶重新啟動(dòng)并再次調(diào)用了這個(gè)RPC,客戶會(huì)很快得到那個(gè)孤兒的返回值,這將引起調(diào)用結(jié)果的混淆。孤兒?jiǎn)栴}的四種解決方法。 方法一,在客戶存根

16、發(fā)送一個(gè)RPC前,日志文件中記下要執(zhí)行操作的信息。該文件保存在不受崩潰影響的磁盤和其他媒介上。當(dāng)客戶重新舊動(dòng)后,系統(tǒng)檢查日志文件,并準(zhǔn)確地清除孤兒。這種方法稱為根絕。缺點(diǎn)是對(duì)每個(gè)RPC都進(jìn)行磁盤記錄,極大增加了系統(tǒng)開銷。此外,孤兒還可以執(zhí)行RPC,這樣又生成了子RPC,很難找到和清除??傊?,這種方法不好。 方法二,稱為再生。這種方法不必做磁盤記錄。該方法將時(shí)間劃分成序編號(hào)叫紀(jì)元。當(dāng)一客戶重新啟動(dòng)時(shí),它向所有機(jī)器廣播一個(gè)新紀(jì)元的開始,此后,所有遠(yuǎn)程計(jì)算被終止。當(dāng)然,如果網(wǎng)絡(luò)是分段的,有些孤兒還會(huì)遺留下來(lái)。但當(dāng)這些孤兒的應(yīng)答返回時(shí),消息上帶有它們過(guò)時(shí)的紀(jì)元號(hào)。這些應(yīng)答還是容易識(shí)別和清除的。方法三,

17、是對(duì)第二種方法的改進(jìn),稱作溫和再生。當(dāng)接到某客戶開始新紀(jì)元的廣播后,每臺(tái)機(jī)器檢查自己是否有遠(yuǎn)程計(jì)算,若有則試圖去找到該遠(yuǎn)程計(jì)算的調(diào)用者。若沒(méi)有找到該計(jì)算的調(diào)用者,則終止該計(jì)算。 方法四,稱為過(guò)期。每一個(gè)RPC執(zhí)行時(shí)事先分給一個(gè)標(biāo)準(zhǔn)時(shí)間段T,當(dāng)T到期而調(diào)用未完成時(shí)就必需申請(qǐng)一個(gè)T。另一方面,如果客戶崩潰,服務(wù)器在客戶重新啟動(dòng)前等候了一個(gè)T后,所有孤兒都被清除。由于RPC有各種不同的請(qǐng)求,如何選擇T的合適值呢?終止一個(gè)孤兒可能會(huì)造成不可預(yù)見(jiàn)的后果。例如,假設(shè)一個(gè)孤兒正鎖住一個(gè)或多個(gè)文件或數(shù)擁記錄等,如果突然清除該孤兒,那么這些資源可能會(huì)一直處于被占用的狀態(tài)。另外,一個(gè)孤兒可能已在某些遠(yuǎn)程的進(jìn)程調(diào)用

18、隊(duì)列中等待,期望將來(lái)能調(diào)用其他進(jìn)程。這樣,即使去除了這個(gè)孤兒也不能去除孤兒遺留下的痕跡。2.4.52.4.5實(shí)現(xiàn)的問(wèn)題實(shí)現(xiàn)的問(wèn)題 分布式系統(tǒng)的成敗往往取決于它的性能。系統(tǒng)的性能在很大程度上取決于通信的速度。而通信的速度主要取決于對(duì)它的實(shí)現(xiàn)方法。討論RPC系統(tǒng)的實(shí)現(xiàn)問(wèn)題,重點(diǎn)在于系統(tǒng)性能和耗時(shí)情況。 RPC協(xié)議族協(xié)議族 1、如何選擇RPC的協(xié)議。采用面向連接還是面向非連接的協(xié)議。面向連接的協(xié)議是任何時(shí)候客戶進(jìn)程都與服務(wù)器進(jìn)程捆綁,它們之間建立一個(gè)連接。該協(xié)議的優(yōu)點(diǎn)是通信簡(jiǎn)單,可靠性高。不用擔(dān)心消息丟失,也不用處理確認(rèn)消息。其缺點(diǎn)是性能下降,尤其表現(xiàn)在LAN。額外的軟件開銷是性能下降的原因。盡管面

19、向連接不會(huì)丟失信包,由于LAN的可靠性高,所以沒(méi)有必要。大多數(shù)校園網(wǎng)或在同一建筑物內(nèi)的分布式系統(tǒng)均采用面向非連接的協(xié)議。2、選擇一個(gè)標(biāo)準(zhǔn)的通用協(xié)議還是專門為RPC設(shè)計(jì)的協(xié)議。 一些分布式系統(tǒng)使用lP(或UDP)作為基本協(xié)議:(1)協(xié)議已存在,省去了大量的工作;(2)協(xié)議有許多個(gè)現(xiàn)成的工具,這也省去了許多工作:(3)絕大部分UNlX系統(tǒng)中都可發(fā)送和接收該信包:(4)大多數(shù)現(xiàn)有網(wǎng)絡(luò)支持IP與UDP信包。 總之,IP與UDP適用于大多數(shù)現(xiàn)有的UNIX系統(tǒng)和網(wǎng)絡(luò)系統(tǒng)(lntemet)。這樣,編寫在UNlX系統(tǒng)上運(yùn)行的客戶或服務(wù)器程序較容易,這樣加快了代碼運(yùn)行和測(cè)試的速度。 IP與UDP在性能上也有缺陷

20、。 IP不是為最終使用者設(shè)計(jì)的協(xié)議。它被設(shè)計(jì)為一個(gè)基礎(chǔ),其上可以建立在不同內(nèi)部網(wǎng)絡(luò)的可靠的TCP連接。 另一種方法是使用一個(gè)專門適用于RPC的協(xié)議,它不像 lP協(xié)議那樣去處理信包,這些信包在網(wǎng)絡(luò)中傳送幾分鐘后,會(huì)突然在某個(gè)時(shí)候到達(dá)。當(dāng)然這樣的協(xié)議需要設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試并嵌入到現(xiàn)有系統(tǒng)中,從長(zhǎng)遠(yuǎn)的觀點(diǎn)看開發(fā)和廣泛地接受一個(gè)高性能的RPC協(xié)議是可取的。3、信包和報(bào)文的長(zhǎng)度。RPC有一個(gè)大而固定的獨(dú)立于發(fā)送數(shù)據(jù)的頭信息。所以,發(fā)送一個(gè)64k的文件,一次發(fā)送64K明顯要比發(fā)送64次lK要高效得多。因此,協(xié)議和網(wǎng)絡(luò)能否允許較大長(zhǎng)度的信包傳送是很重要的。有的RPC系統(tǒng)只能傳送小尺寸的信息(例如:Sun 是8

21、K),許多網(wǎng)絡(luò)也不能處理很大的信包(如:以太網(wǎng)的最大限制為1536bytes),所以一個(gè)RPC不得不拆分成多個(gè)信包,從而增加了開銷。一個(gè)大的RPC需要被拆分成多個(gè)信息包,是否每個(gè)信包都要確認(rèn)。例如一個(gè)客戶要向文件服務(wù)器寫入一個(gè)4K的數(shù)據(jù)塊。但是系統(tǒng)能處理的信包最大為lK。一種策略稱為停等協(xié)議,客戶進(jìn)程先發(fā)送lK長(zhǎng)的信包0后,等侍服務(wù)器的確認(rèn),然后,客戶再發(fā)送下一個(gè)lK長(zhǎng)的信包,等待下一個(gè)確認(rèn)。 另一種策略叫爆發(fā)協(xié)議。是客戶進(jìn)程盡快將所有的信包發(fā)送完,當(dāng)所有信包到達(dá)服務(wù)器后,服務(wù)器發(fā)回確認(rèn)消息。確認(rèn)確認(rèn)這兩種協(xié)議的性質(zhì)有很大的不同。在停等協(xié)議中,如一個(gè)信包被破壞或丟失,客戶不可能收到確認(rèn),于是重

22、新發(fā)送該信包。在爆發(fā)協(xié)議中,如果信包l丟失而信包2隨后正確到達(dá),服務(wù)器會(huì)面臨選擇。服務(wù)器可以丟棄收到的信包,等客戶計(jì)時(shí)器超時(shí)后重發(fā)整條消息。或?qū)?、2這兩個(gè)正確到達(dá)的信包放入緩沖區(qū),等待信包3正確到達(dá)后,客戶指明重新發(fā)送信包1,這種技術(shù)叫做選擇重發(fā)。停等協(xié)議和丟棄所有信包在發(fā)生錯(cuò)誤時(shí)都易于實(shí)現(xiàn)。有選擇重發(fā)策略需要大量的管理工作,但使用了較少網(wǎng)絡(luò)帶寬。一般可靠性高的局域網(wǎng),幾乎不會(huì)有信包丟失,因此使用有選擇重發(fā)得不償失。對(duì)于廣域網(wǎng)而言,使用有選擇重發(fā)更為合適。 當(dāng)接收者不能接收到來(lái)的信包時(shí)就出現(xiàn)了一個(gè)稱作超限的錯(cuò)誤,該信包隨之丟失。這種錯(cuò)誤更為嚴(yán)重。以停等方式發(fā)送不會(huì)出現(xiàn)超限錯(cuò)誤。在爆發(fā)協(xié)議中,

23、它明顯比停等協(xié)議高效得多,但也可能會(huì)出現(xiàn)超限錯(cuò)誤。 一方面,如果這個(gè)超限錯(cuò)誤是由于芯片處理中斷而暫時(shí)無(wú)法接收信包而引起的,那么,發(fā)送者可在發(fā)送兩個(gè)信包之間加入一段延遲時(shí)間,使得芯片能在這個(gè)時(shí)間間隔內(nèi)從中斷返回到接收狀態(tài)。另一方面,若超限錯(cuò)誤是出于芯片的緩沖區(qū)不夠而引起的,那么如果緩沖區(qū)容量為n個(gè)信包,則可在發(fā)送n個(gè)信包后留一個(gè)間隙,或是在發(fā)出n個(gè)信包后,得到一個(gè)確認(rèn)后再發(fā)送后面的信包。 超限錯(cuò)誤 協(xié)議包括請(qǐng)求、應(yīng)答、確認(rèn)。確認(rèn)用來(lái)告訴服務(wù)器應(yīng)答已經(jīng)安全到達(dá)客戶,可以將之丟棄了。現(xiàn)在假設(shè)確認(rèn)在傳送過(guò)程中丟失了,那么服務(wù)器會(huì)保留這個(gè)應(yīng)答,但是對(duì)客戶來(lái)說(shuō)這個(gè)協(xié)議已經(jīng)完成,不再計(jì)時(shí)和等待信包。 我們可

24、以修改協(xié)議,讓確認(rèn)消息再被確認(rèn)一次,這種做法增加復(fù)雜性和額外開銷,得不償失。實(shí)際上,只需在服務(wù)器上設(shè)置一個(gè)計(jì)時(shí)器,在應(yīng)答發(fā)送后計(jì)時(shí),計(jì)時(shí)到后,不論客戶是否收到應(yīng)答,服務(wù)器都將應(yīng)答丟棄,或者在收到一確認(rèn)后將應(yīng)答丟棄。當(dāng)然,若收到客戶的新的請(qǐng)求時(shí),也可以認(rèn)為應(yīng)答是到達(dá)了,將應(yīng)答丟棄。確認(rèn)的確認(rèn)關(guān)鍵路徑關(guān)鍵路徑 每個(gè)RPC執(zhí)行的一系列指令順序稱為關(guān)鍵路徑??蛻羰紫日{(diào)用客戶存根,接著激活客戶內(nèi)核陷阱中斷,發(fā)送消息到服務(wù)器的內(nèi)核,同時(shí)引起服務(wù)器內(nèi)核中斷,最后消息經(jīng)服務(wù)器存根送至服務(wù)器進(jìn)程。它執(zhí)行操作并返回結(jié)果。 在關(guān)鍵路徑中的什么地方耗時(shí)最多?如果知道問(wèn)題出在哪里,就可以想辦法減少時(shí)耗。 (圖2-24

25、固定的頭信息 )在無(wú)數(shù)據(jù)RPC中,耗時(shí)主要在信包到來(lái)時(shí)服務(wù)器內(nèi)核的現(xiàn)場(chǎng)轉(zhuǎn)換、服務(wù)器的中斷例程以及將信包傳送到接口。在有數(shù)據(jù) RPC中,數(shù)據(jù)在以太網(wǎng)上傳送時(shí)耗時(shí)最多,其次是將信包送入和移出內(nèi)部接口響耗時(shí)。忠告:建議避免使用離奇的硬件。其次,UDP協(xié)議有不足,UDP頭字段中的校驗(yàn)和很耗時(shí),有些得不償失,一個(gè)簡(jiǎn)單的用戶自定義的RPC協(xié)議將會(huì)工作得更好一些。最后,讓服務(wù)器存根用忙等待而不是睡眠將大大減少2-24(a)中耗時(shí)最多的那一步(第 13步)的操作時(shí)間。在RPC中從客戶到服務(wù)器的14步:(1)調(diào)用存根(2)獲得消息緩沖區(qū)(3)組裝參數(shù)(4)填入頭信息(5)計(jì)算UDP校驗(yàn)和(6)陷阱內(nèi)核(7)傳送

26、請(qǐng)求包(8)通過(guò)QBus移動(dòng)信包到控制者(9)以太網(wǎng)傳輸時(shí)間(10)從控制者獲得信息(11)中斷服務(wù)例程(12)計(jì)算UDP校驗(yàn)和(13)切換到用戶空間(14)服務(wù)器存根代碼圖2-24 RPC關(guān)鍵路徑(a)空的RPC(b)共有1440字節(jié)數(shù)組作為參數(shù)的RPC拷貝拷貝( (copying)copying) 一個(gè)與RPC執(zhí)行時(shí)間密切相關(guān)的問(wèn)題是拷貝。根據(jù)硬件、軟件和調(diào)用類型的不同,消息可能需要拷貝一次到八次不等。 最好的情況:接口芯片支持DMA,它將消息直接從客戶存根取到網(wǎng)上(拷貝1),并且實(shí)時(shí)地存放到服務(wù)器內(nèi)核的存儲(chǔ)區(qū)。內(nèi)核檢查該信包,并且包含它的頁(yè)映射到服務(wù)器進(jìn)程的地址空間。如果不允許做該映射,

27、那么內(nèi)核將信包拷貝到服務(wù)器存根(拷貝2)。最壞的情況:內(nèi)核將消息從客戶存根拷貝到內(nèi)核緩沖區(qū)(拷貝1)。內(nèi)核拷貝消息到接口芯片的硬件緩沖區(qū)(拷貝2)。硬件啟動(dòng),消息經(jīng)網(wǎng)絡(luò)傳送到服務(wù)器接口芯片的緩沖區(qū)(拷貝3)。服務(wù)器內(nèi)核將消息拷貝到內(nèi)核緩沖區(qū)(拷貝4)。最后,消息從內(nèi)核的緩沖區(qū)傳送到服務(wù)器存根(拷貝5)。此外,如果此調(diào)用含有一個(gè)大的值參數(shù)組時(shí),那么還需另外三步拷貝:將數(shù)組拷入客戶進(jìn)程的堆棧以調(diào)用客戶存根;客戶存根組裝時(shí),將數(shù)組從堆??截惖较⒕彌_區(qū)中;服務(wù)器存根將數(shù)組從消息中取出,放入服務(wù)器進(jìn)程的堆棧中??傂枰舜慰截悺#ɡ}p68)1、分散-集中。具有分散-集中功能的網(wǎng)絡(luò)接口芯片能夠通過(guò)連結(jié)兩

28、個(gè)或多個(gè)內(nèi)存緩沖區(qū)裝配一個(gè)信包。優(yōu)點(diǎn)是可以在內(nèi)核空間建立信包的頭字段,用戶數(shù)據(jù)仍放在客戶存根中。要發(fā)送信包時(shí),該部件將這兩個(gè)部分連接起來(lái)形成信包。在發(fā)送方,從多個(gè)信包源集成一個(gè)信包避免了拷貝。同樣,在接收方,可將消息頭和消息體分別分散存放到不同的緩沖區(qū)中。2、內(nèi)核可以改變內(nèi)存映肘,將內(nèi)核中放置信包的緩沖區(qū)映射到服務(wù)器進(jìn)程的地址空間。同樣,也可以將服務(wù)器存根的緩沖區(qū)映射到內(nèi)核的緩沖區(qū)。當(dāng)服務(wù)器存根開始運(yùn)行時(shí),信包就出現(xiàn)在它的緩沖區(qū)內(nèi),免去了從服務(wù)器內(nèi)核到存根的拷貝。計(jì)時(shí)管理計(jì)時(shí)管理 在實(shí)際系統(tǒng)中,存在若消息由于線路中的雜音或是超限錯(cuò)誤而偶然丟失的情況。在消息已發(fā)送而等候回答(應(yīng)答或確認(rèn))時(shí),設(shè)置

29、了計(jì)時(shí)器。若計(jì)時(shí)期滿卻沒(méi)有應(yīng)答,就需多次重發(fā)消息,或在多次重發(fā)后放棄發(fā)送。 管理計(jì)時(shí)所需要的時(shí)間是不可低估的。設(shè)置一個(gè)計(jì)時(shí)器需要建立一個(gè)數(shù)據(jù)結(jié)構(gòu),指出何時(shí)計(jì)時(shí)到期并且怎樣處理。然后,將該數(shù)據(jù)結(jié)構(gòu)插入到未到時(shí)的計(jì)時(shí)器的鏈表中。一般此鏈表是按時(shí)間順序排序的,離到期時(shí)間最近的排在鏈表的首部,離到期時(shí)間最遠(yuǎn)的排在鏈表尾部。如圖2-25所示。 當(dāng)應(yīng)答或確認(rèn)消息到達(dá)時(shí),必須找到計(jì)時(shí)鏈表并將該數(shù)據(jù)結(jié)構(gòu)從鏈表中移走。實(shí)際上,許多應(yīng)答并不超時(shí),因此,查找鏈表并將該數(shù)據(jù)結(jié)構(gòu)移走的大部分工作是浪費(fèi)了。此外,計(jì)時(shí)也無(wú)須特別精確。 一個(gè)新的更有效的計(jì)時(shí)方法。許多系統(tǒng)都有一個(gè)進(jìn)程表,該表中每一項(xiàng)都包括了系統(tǒng)中每個(gè)進(jìn)程的所

30、有信息。當(dāng)RPC開始執(zhí)行時(shí),內(nèi)核中用一個(gè)局部指針指向當(dāng)前進(jìn)程的表項(xiàng)。將計(jì)時(shí)值放入該進(jìn)程對(duì)應(yīng)的表項(xiàng)的一個(gè)字段中,如圖2-25(b)所示。這樣設(shè)置的RPC計(jì)時(shí)器包括在當(dāng)前時(shí)間上加上計(jì)時(shí)的長(zhǎng)度,并且將該值寫入進(jìn)程表。如果要停止某個(gè)計(jì)時(shí)的話,則在計(jì)時(shí)字段中寫入0。這樣在清除計(jì)時(shí)時(shí)可減少許多操作。 欲使這個(gè)方法付諸實(shí)施,內(nèi)核可以周期地檢查整個(gè)進(jìn)程表,如果發(fā)現(xiàn)一個(gè)非0的計(jì)時(shí)值小于或等于當(dāng)前的時(shí)間,則說(shuō)明超時(shí)了。在采取相應(yīng)的操作后,重置該計(jì)時(shí)器。例如,有一個(gè)系統(tǒng)發(fā)送100個(gè)信包/秒,每秒掃描一次進(jìn)程表的工作僅僅是查找和更新上述鏈表(每秒200次)的 1/200。這種周期按序遍歷一個(gè)表的算法叫掃描算法。246

31、 問(wèn)題領(lǐng)域基于客戶-服務(wù)器模型的RPC廣泛應(yīng)用于分而式操作系統(tǒng)。理想的RPC是透明的,現(xiàn)行的分布式系統(tǒng)幾乎沒(méi)有一個(gè)稱得上是透明的。透明性的研究仍需不斷地進(jìn)行下去。1、全局變量的問(wèn)題。允許本地過(guò)程不受限制地訪間遠(yuǎn)程的全局變量,是不能夠?qū)崿F(xiàn)的,應(yīng)用中要求該變量對(duì)編程人員是可見(jiàn)的。這種對(duì)訪問(wèn)的禁止違反了透明性的原則。 2、有些語(yǔ)言結(jié)構(gòu)不嚴(yán)謹(jǐn),如C語(yǔ)言。編譯器和存根對(duì)參數(shù)類型、大小等了解得不很清楚,存根并不總能推斷出參數(shù)的類型,參數(shù)的組裝工作不好完成。將指問(wèn)復(fù)雜圖形的指針作為參數(shù)也是一個(gè)難點(diǎn),若要在RPC時(shí)傳送此類指針,客戶存根很難找到整個(gè)圖形。UNIX命令的執(zhí)行: softf1f2sort可以讀標(biāo)準(zhǔn)

32、輸入、寫標(biāo)準(zhǔn)輸出,它可以作為輸入和輸出的客戶,執(zhí)行從文件服務(wù)器讀取f1,向文件服務(wù)器寫入f2的RPC操作。Grep ratf3f4Grep 作為客戶從文件f3讀出含有rat內(nèi)容的行,并寫入到文件f4中。UNIX管道: grep ratf6grep和sort都可以作為標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出的客戶。在這里grep與sort對(duì)其中一個(gè)必須作為服務(wù)器(被動(dòng)的)。但是在前兩條指令中,grep與sort均作為客戶(主動(dòng)的)使用,在這里客戶/服務(wù)器模型顯然是不合適的。 基于客戶/服務(wù)器模型的Rpc并不適合這種通信模式。解決此問(wèn)題的方法是將管道作為雙向的服務(wù)器,既響應(yīng)左邊酌寫請(qǐng)求,又響應(yīng)右邊的讀請(qǐng)求。 2 .5

33、2 .5 組通信組通信 RPC的通信方式只包括兩個(gè)成員,即客戶與服務(wù)器。通信涉及到多個(gè)進(jìn)程時(shí),客戶希望向所有服務(wù)器發(fā)送消息,以確保即使其中一個(gè)服務(wù)器崩潰仍能執(zhí)行該請(qǐng)求。RPC不能處理一個(gè)發(fā)送者給多個(gè)接收者發(fā)送消息的通信方式。組通信:一次操作中將一條消息發(fā)送給多個(gè)接收者的通信機(jī)制。25.1 組通信的引入 組:在某系統(tǒng)或用戶指定方式下協(xié)同工作的多個(gè)進(jìn)程的集合。 主要的性質(zhì)是:當(dāng)一條消息發(fā)送到該組后,組內(nèi)的所有成員都能收到該消息。 組是動(dòng)態(tài)的,可創(chuàng)建,也可注銷。進(jìn)程可以同時(shí)成為多個(gè)組的成員。引入組的目的是將多個(gè)進(jìn)程的集合當(dāng)作一個(gè)獨(dú)立的抽象物處理。本書里指的是進(jìn)程組,但在計(jì)算機(jī)系統(tǒng)中有其他的組。組通信

34、的實(shí)現(xiàn)在很大程度上依賴于硬件。1、多點(diǎn)傳送(multicasting):創(chuàng)建一個(gè)專門網(wǎng)絡(luò)地址,多臺(tái)機(jī)器可通過(guò)這個(gè)地址來(lái)監(jiān)聽。當(dāng)包發(fā)送到該地址上時(shí),該包就會(huì)自動(dòng)地投遞給所有在該地址上監(jiān)聽的機(jī)器。2、廣播通信(broadcasting):包含某一特定地址的包可以發(fā)送給網(wǎng)上所有的機(jī)器。廣播通信同樣也用于實(shí)現(xiàn)組通信,但效率要低一些。 3、單點(diǎn)傳送(unicasting):通過(guò)讓發(fā)送者將包分別送往組的每個(gè)成員的方法來(lái)實(shí)現(xiàn)組通信。盡管效率較低,但是可行的,特別是在大多數(shù)組都比較小的情況下。 2 25 52 2 設(shè)計(jì)的問(wèn)題設(shè)計(jì)的問(wèn)題組通信和通常的消息傳遞機(jī)制在設(shè)計(jì)上有相似的地方,但發(fā)送消息給組與發(fā)送消息給進(jìn)

35、程在本質(zhì)上是不同的。 一、封閉組:只允許組內(nèi)成員給該組發(fā)送消息。組外成員不能向作為一個(gè)整體的組發(fā)送消息。盡管它們可以給單個(gè)成員發(fā)送消息。開放組:系統(tǒng)內(nèi)的任何進(jìn)程可以給任何組發(fā)送消息。 二、對(duì)等二、對(duì)等(或同位或同位)組與分層組組與分層組 封閉組和開放組的區(qū)別在于誰(shuí)能與該組通信。兩者的另一個(gè)重要的區(qū)別在于它們的內(nèi)部結(jié)構(gòu)上。對(duì)等組:在一些組中,所有的進(jìn)程的地位相同,沒(méi)有哪個(gè)進(jìn)程作為領(lǐng)導(dǎo),決議是由進(jìn)程集體作出的。分層組:在另一些組中,存在某種類型的分層組織。例如,一個(gè)進(jìn)程作為“協(xié)調(diào)員”,其他所有的進(jìn)程作為“工作人員。這兩種組織方式各有其優(yōu)缺點(diǎn)。 對(duì)等組是對(duì)稱的而且沒(méi)有單點(diǎn)故障。其中一個(gè)進(jìn)程崩潰只會(huì)使組變小,而組中其他的進(jìn)程仍能繼續(xù)工作。缺點(diǎn)是組內(nèi)每一個(gè)決定更為復(fù)雜,都需進(jìn)行組內(nèi)成員的表決,會(huì)有一定的時(shí)延和系統(tǒng)開銷。 分層組卻有著相反的性質(zhì)。如果協(xié)調(diào)員一崩潰,則整個(gè)系統(tǒng)就會(huì)癱瘓。但只要協(xié)調(diào)員在運(yùn)行,它無(wú)須打擾其他任何成員就可作出決定。當(dāng)一個(gè)組內(nèi)工作人員空閑時(shí),便請(qǐng)求協(xié)調(diào)員分給其新的工作。在這種方式下,協(xié)調(diào)員控制搜索策略和修剪游戲樹,實(shí)際的計(jì)算留給組內(nèi)工作人員完成。 組的成員組的成員 使用組

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論