遠(yuǎn)程過程調(diào)用_第1頁
遠(yuǎn)程過程調(diào)用_第2頁
遠(yuǎn)程過程調(diào)用_第3頁
遠(yuǎn)程過程調(diào)用_第4頁
遠(yuǎn)程過程調(diào)用_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、消息傳遞與過程調(diào)用的類似性1遠(yuǎn)程過程調(diào)用send / receive / reply這種通信形式與大多數(shù)傳統(tǒng)程序設(shè)計語言中的過程調(diào)用非常類似,見圖,其中,“調(diào)用者 / 源”先掛起,然后把“參數(shù) / 消息”傳遞給“被調(diào)用者 / 宿”,讓它們?nèi)?zhí)行相應(yīng)的任務(wù);當(dāng)任務(wù)執(zhí)行完后返回時,它(們)再把作為結(jié)果的“參數(shù) / 消息”回送給“調(diào)用者 / 源”,后者再繼續(xù)執(zhí)行下去。2遠(yuǎn)程過程調(diào)用遠(yuǎn)程過程調(diào)用(Remote Procedure Call 簡稱RPC)是一個會晤層協(xié)議.雖然這種描述不完全對,因?yàn)?允許存在與利用RPC實(shí)現(xiàn)的應(yīng)用層協(xié)議某些混合.RPC原理原先由Xerox的研究人員所開發(fā).3遠(yuǎn)程過程調(diào)用為

2、了實(shí)現(xiàn)NFS,Sun公司的工程師開發(fā)了他們自己的RPC技術(shù),通常稱為SunRPC或 ONC/RPC. ONC/RPC不僅用于NFS的實(shí)現(xiàn),也用于許多其它網(wǎng)絡(luò)應(yīng)用.存在和ONC/RPC不同的其它RPC技術(shù),例如DEC RPC.雖然它們都遵從同樣的概念途徑,但是它們有不同的內(nèi)部結(jié)構(gòu),因此,無互操作性.4RPC和本地過程調(diào)用的比較5遠(yuǎn)程過程調(diào)用過程調(diào)用把“數(shù)據(jù)”和“控制”這兩者從調(diào)用者傳遞給被調(diào)用者。過程是易于理解的,而且已經(jīng)廣泛地用作傳統(tǒng)程序設(shè)計語言的基本組成成份。基于此原因,人們自然想起應(yīng)把這個概念引入分布式操作系統(tǒng)。6遠(yuǎn)程過程調(diào)用遠(yuǎn)程過程調(diào)用(Remote Procedure Call)就是把

3、過程調(diào)用的概念加以擴(kuò)允后引入分析式環(huán)境中的一種形式。遠(yuǎn)程過程調(diào)用的形式和行為與傳統(tǒng)的過程調(diào)用的形式和行為類似,主要差別在于被調(diào)用的過程實(shí)際運(yùn)行在一個與調(diào)用者所在場點(diǎn)不同的場點(diǎn)上,見圖。因此,需要設(shè)計相應(yīng)的軟件來實(shí)現(xiàn)兩者之間的連接和信息溝通。7遠(yuǎn)程過程調(diào)用示意圖8RPC的通信模型圖9RPC機(jī)制的結(jié)構(gòu)及實(shí)現(xiàn)RPC機(jī)制的結(jié)構(gòu)由下列成份組成:stub:client和server 各一個;約束(binding):使client能夠定位到相應(yīng)的server;控制部分:為追蹤RPC的調(diào)用狀態(tài)所設(shè);傳送部分:確定如何將信息從一個場點(diǎn)傳送到另一個場點(diǎn)。10實(shí)現(xiàn)RPC的一般過程圖11實(shí)現(xiàn)RPC的一般過程實(shí)現(xiàn)RPC

4、的一般過程實(shí)現(xiàn)RPC的一般過程可概括如圖所示:其中,客戶的stub與一個客戶連接,它對于該客戶就像一個“服務(wù)器”。在調(diào)用時,它截取客戶的遠(yuǎn)程過程調(diào)用命令后,利用通信網(wǎng)絡(luò)向服務(wù)器發(fā)送“請求服務(wù)”的信息。在返回時,它獲取返回消息,并帶返回結(jié)果返回到客戶,然后客戶繼續(xù)執(zhí)行。12實(shí)現(xiàn)RPC的一般過程Servers stub與一個server連接,它對于該server就像一個“client”。在調(diào)用時,它收到遠(yuǎn)程調(diào)用請求后,產(chǎn)生一個本地調(diào)用,去執(zhí)行被請求的遠(yuǎn)程過程。在返回時,它截取遠(yuǎn)程過程的返回結(jié)果,并形成返回消息發(fā)送出去。13實(shí)現(xiàn)RPC的一般過程總之,stub包含了一組RPC機(jī)制的操作原話,這些原語構(gòu)

5、成了RPC調(diào)用的實(shí)現(xiàn)細(xì)節(jié),它可獨(dú)立于client和server編程,在編譯時再連接起來。14實(shí)現(xiàn)RPC的一般過程RPC的實(shí)現(xiàn)要考慮兩個方面的問題:第一,當(dāng)進(jìn)行遠(yuǎn)程過程調(diào)用時,調(diào)用場點(diǎn)必須能定位出被調(diào)用的過程實(shí)際上運(yùn)行在哪個場點(diǎn)上;第二,相關(guān)的兩個場點(diǎn)必須能協(xié)同合作交換信息。所有這些對用戶都是透明的,這些的工作是依次進(jìn)行的。下面介紹一種實(shí)現(xiàn)RPC的方法其實(shí)現(xiàn)思想已概括在圖中。15RPC的實(shí)現(xiàn)概況圖16RPC的實(shí)現(xiàn)概況如上所述,每個遠(yuǎn)程過程由若干成分組成:調(diào)用者(caller)或用戶(user),調(diào)用代碼段,以及被調(diào)用者(callee)或服務(wù)器,被調(diào)用代碼段。這些都可用常規(guī)的程序設(shè)計語言編寫,不需

6、要利用特別的設(shè)施,就象它們在同一場點(diǎn)上執(zhí)行一樣。另一些成分是與調(diào)用者相關(guān)的stub,與被調(diào)用者相關(guān)的stub以及RPC runtime子程序,后者可在系統(tǒng)中所有場點(diǎn)上運(yùn)行。17RPC的實(shí)現(xiàn)概況stub程序的功能是把這種過程調(diào)用中所帶的參數(shù)組裝和拆卸成消息形式,并進(jìn)行相應(yīng)的類型檢查,然后把這些消息傳遞給RPC runtime子程序,后者再把它們發(fā)送到系統(tǒng)中的其它場點(diǎn)。事實(shí)上,程序設(shè)計者定義了過程并寫好了過程體,而系統(tǒng)生成了對應(yīng)的stub。18主要工作環(huán)節(jié)實(shí)現(xiàn)一個遠(yuǎn)程過程調(diào)用的主要工作環(huán)節(jié)如下: 調(diào)用者用通常方式調(diào)用對應(yīng)stub中的一個過程;這個stub過程把有關(guān)的參數(shù)組裝成一個消息包或一組消息包

7、,以形成一條消息。運(yùn)行此過程的那個場點(diǎn)的“地址”和那個場點(diǎn)上指稱此過程的“標(biāo)識符”都應(yīng)包含在這條消息中;19主要工作環(huán)節(jié)將這條消息發(fā)送給對應(yīng)的RPC runtme子程序,該子程序再把它發(fā)送給指定的場點(diǎn)。在接收此消息時,遠(yuǎn)程runtime子程序引用與被調(diào)用者對應(yīng)的stub中的一個子程序,并讓它來處理這條消息;20主要工作環(huán)節(jié)被調(diào)用者對應(yīng)的stub中的這個子程序拆卸有關(guān)的參數(shù)并用通常的過程調(diào)用方式調(diào)用所需的過程。返回調(diào)用結(jié)果,整個遠(yuǎn)程過程調(diào)用以與調(diào)用者對應(yīng)的stub程序執(zhí)行“return”語句返回到用戶而終止。21遠(yuǎn)程過程調(diào)用注意,調(diào)用者產(chǎn)生一個過程調(diào)用,而被調(diào)用者由一個過程調(diào)用所引用。相應(yīng)的st

8、ub和runtime協(xié)同合作給了我們這種印象,即好像調(diào)用者直接引用了被凋用者,22遠(yuǎn)程過程調(diào)用不難察覺,在上面的述中,我們回避了一個重要的問題,即與用戶對應(yīng)的stub如何知道實(shí)際運(yùn)行遠(yuǎn)程過程的場點(diǎn)之地址呢?例如,給定遠(yuǎn)程過程調(diào)用procX(pal,pa2),與調(diào)用者對應(yīng)的stub如何確定procX將運(yùn)行在哪個場點(diǎn)上呢?已經(jīng)研究出了一些解決這一向題的方法。23遠(yuǎn)程過程調(diào)用當(dāng)系統(tǒng)生成與調(diào)用者對應(yīng)的stub時,可把該遠(yuǎn)程場地的地址也一同并入其中,不過這種做法不太靈活。在進(jìn)行調(diào)用之前,與調(diào)用者對應(yīng)的stub向系統(tǒng)中的其它場點(diǎn)進(jìn)行廣播,請求有關(guān)的場點(diǎn)通報其地址,這必然引起一系列的消息傳遞。特別,當(dāng)這種廣

9、播是在若干網(wǎng)絡(luò)之間進(jìn)行時,其傳遞速度是很慢的。24遠(yuǎn)程過程調(diào)用由系統(tǒng)管理一個表,其表項(xiàng)的內(nèi)容為:場點(diǎn)地址;該場點(diǎn)上將運(yùn)行的遠(yuǎn)程過程的名字?!霸敢狻碑a(chǎn)生一個可供其它場點(diǎn)引用的過程的那些場點(diǎn)就造一個表項(xiàng)到這個表中,該表項(xiàng)給出了這些場點(diǎn)的地址和此遠(yuǎn)程過程的名字。希望引用遠(yuǎn)程過程的用戶可通過查詢此表獲取有關(guān)信息。25RPC執(zhí)行時各部分之間的關(guān)系圖26RPC執(zhí)行時各部分之間的關(guān)系RPC執(zhí)行時,各部分的關(guān)系如圖所示。其中,傳輸部分是RPC的最低層,其主要功能為:提供對網(wǎng)絡(luò)傳輸層協(xié)議的選擇。建立 / 釋放邏輯信道,發(fā)送 / 接收消息等;管理RPC中的消息緩沖區(qū)。27控制部分的主要功能控制部分的主要功能是:確

10、定RPC中消息的方向(發(fā)送或接收);當(dāng)client的stub開始一次RPC調(diào)用或者server向server的stub返回調(diào)用結(jié)果時,該部分負(fù)責(zé)控制傳輸部分進(jìn)行發(fā)送。28控制部分的主要功能場點(diǎn)間會合(rendezvous)與進(jìn)程同步;場點(diǎn)間會合是指為使兩個場點(diǎn)間進(jìn)程同步,它們必須同意“會合”,即早到達(dá)的進(jìn)程要等待晚到達(dá)的進(jìn)程。會話進(jìn)程通過場點(diǎn)間會合建立一致的起點(diǎn),并以該起點(diǎn)作為進(jìn)程同步點(diǎn)進(jìn)行對話。29控制部分的主要功能若干狀態(tài)信息的處理。由上可知,由于client的stub的作用,使得client可用常規(guī)過程調(diào)用方式去調(diào)用遠(yuǎn)程過程;由于server的stub的作用,使得server程序可以獨(dú)立

11、于調(diào)用者來編程,因而比較靈活。30遠(yuǎn)程過程調(diào)用31RPC的語義本地調(diào)用和遠(yuǎn)程過程調(diào)用之間存在許多不同之處。如果遠(yuǎn)程調(diào)用是在兩種異型機(jī)器間進(jìn)行,這就存在數(shù)據(jù)表示問題,例如,這兩類機(jī)器的字長可能不同。32RPC的語義解決這一向題的方法之一是它在傳遞數(shù)據(jù)之前,讓RPC機(jī)制將有關(guān)的數(shù)據(jù)轉(zhuǎn)換成一種統(tǒng)一的格式,接收場點(diǎn)在接收數(shù)據(jù)時,再把它們轉(zhuǎn)換成本地所允許的數(shù)據(jù)格式。33RPC的語義第二個問題是如何解釋指針,更確切地說,一個指針到底訪問的是什么,在不具有共享地址空間的情況下,RPC不可能允許在網(wǎng)絡(luò)范圍內(nèi)傳遞指針。因此,在RPC中是不可能用“引用(reference)方式”傳遞參數(shù)的。34RPC的語義更嚴(yán)重

12、的問題是調(diào)用者和被調(diào)用者都可能在調(diào)用期間發(fā)生故障,而且經(jīng)常是被調(diào)用者故障,留下調(diào)用者掛起。如果發(fā)生這種情況,調(diào)用者可能不得不夭折,這在本地調(diào)用中是決不會出現(xiàn)的。一個遠(yuǎn)程過程調(diào)用故障之后,調(diào)用者很難得知在故障發(fā)生前,該過程調(diào)用已經(jīng)進(jìn)行到了哪一步。這通常有三種可能:35RPC的語義在被調(diào)用者接收到調(diào)用它的命令之前,它發(fā)生了故障。在執(zhí)行其過程體時,被調(diào)用者發(fā)生了故障;被調(diào)用者正確地完成了其過程體的執(zhí)行,但在把結(jié)果返回給調(diào)用者之前發(fā)生了故障。此外,還有調(diào)用者在發(fā)出調(diào)用命令之后并在獲得調(diào)用結(jié)果之前發(fā)生了故障。36RPC語義的規(guī)則由于調(diào)用者無法知道到底出現(xiàn)哪種情況,因此,系統(tǒng)必須提供一些基本的保護(hù)機(jī)制來確

13、保RPC正確效果。不過,這個問題由于通信方面也可能出錯以及系統(tǒng)試圖進(jìn)行錯誤矯正而混雜在一起,使得一個遠(yuǎn)程過程在成功地完成其執(zhí)行之前,實(shí)際上可能引用了若干次。不同的RPC實(shí)現(xiàn)方案定義的這種效果或RPC語義是有差別的。37RPC語義的規(guī)則幾種常用的定義RPC語義的規(guī)則是:1ast-of-many 對執(zhí)行一個遠(yuǎn)程過程調(diào)用而言,被調(diào)用的過程可能執(zhí)行若干次,但規(guī)定其最后一次執(zhí)行的結(jié)果作為返回結(jié)果;38RPC語義的規(guī)則at-most-once 若調(diào)用者收到了回復(fù)消息,則被調(diào)用的過程正確地完成了它的一次(僅僅一次)執(zhí)行。如果調(diào)用者沒收到回復(fù)消息,或者,如果調(diào)用者在獲得回復(fù)消息之前發(fā)生故障,那么,這時的調(diào)用效

14、果就看作是根本就沒有執(zhí)行相應(yīng)的過程。39RPC語義的規(guī)則at-1east-once 在場點(diǎn)正常情況下,則遠(yuǎn)程過程至少執(zhí)行一次,且回復(fù)消息可能返回一次或多次。在場點(diǎn)故障時,就不能保證遠(yuǎn)程過程是否已被執(zhí)行或曾返回任何回復(fù)消息。40RPC語義的規(guī)則exactly- once 若server正常,則遠(yuǎn)程過程將恰好執(zhí)行一次,并返回一個調(diào)用結(jié)果。同send/receive 通信原語有許多變種一樣,RPC也有一些不同的形式。例如可以允許異步遠(yuǎn)程過程調(diào)用,因此,調(diào)用者和被調(diào)用者可以并行執(zhí)行,調(diào)用者負(fù)責(zé)在稍后某一時刻執(zhí)行一個所謂的會合(rendezvous)來獲取調(diào)用結(jié)果。41ONC/RPC協(xié)議頭42ONC/R

15、PC協(xié)議頭程序號:實(shí)現(xiàn)該程序的服務(wù)器.版本號:程序的版本.過程號:辨識服務(wù)器上的目的過程.發(fā)送方向:RPC請求為0,響應(yīng)為1.事務(wù)處理標(biāo)識符:辨識每個個別 RPC請求.43外部數(shù)據(jù)表示(XDR)外部數(shù)據(jù)表示(External Data Representation簡稱XDR)是表示層的一個協(xié)議,在RFC 1014 (Sun Microsystems, 1987)予以規(guī)定。XDR涉及數(shù)據(jù)編碼格式的定義。XDR沒有象其它協(xié)議那樣的協(xié)議頭或其它協(xié)議元素。44背景對于表示層的協(xié)議有良種操作模式:明顯格式(explicit format):個別元素的描述和數(shù)據(jù)一道傳送,因此,能夠使接收者恢復(fù)數(shù)據(jù)記錄的結(jié)

16、構(gòu)(如ASN.1 Basic Encoding Rules(BER)。隱含格式(implicit format):在數(shù)據(jù)傳送之前,在兩個通信方之間就元素的結(jié)構(gòu)和 表示包含一個協(xié)議。45隱含格式在隱含格式中存在兩種不同的數(shù)據(jù)編碼格式:經(jīng)典格式(canonocal format):發(fā)送者總歸把數(shù)據(jù)轉(zhuǎn)換為一個公共統(tǒng)一的格式,由接收者重新轉(zhuǎn)換回。服務(wù)器使之正確格式(server makes it right format):發(fā)送者將數(shù)據(jù)保留為自己本地的表示格式,并且加一個標(biāo)識符到消息,給接收者以發(fā)送者的格式信號。46外部數(shù)據(jù)表示(XDR)外部數(shù)據(jù)表示(XDR)使用隱含的經(jīng)典格式。47數(shù)據(jù)編碼(Data

17、 encoding)二進(jìn)制整數(shù)表示有兩種形式:低位字節(jié)在最低內(nèi)存地址(little-endian)低位字節(jié)在最高內(nèi)存地址(big-endian)理論上,在一個字節(jié)中位的次序有同樣的差別,但是,在實(shí)際上所有的處理機(jī)都采用big-endian格式安排在一個字節(jié)中位的次序。48數(shù)格式49正文的編碼數(shù)值的編碼通常由處理機(jī)硬件決定,而軟件在正文和復(fù)雜的數(shù)據(jù)對象的編碼中是至關(guān)重要的。有了一個從代碼到字符的映照,正文簡單地是一個無意義的字節(jié)序列。標(biāo)準(zhǔn)化的聯(lián)結(jié)數(shù)值和字母的映照表包括ASCII和EBCDIC代碼。不幸地,這些具有功能上不同的結(jié)構(gòu)。例如,字母A在EBCDIC中表示為C1(16),在ASCII中表示

18、為41(16)。50復(fù)雜數(shù)據(jù)對象的編碼聯(lián)合(union)和結(jié)構(gòu)(structure)是由上述基本數(shù)據(jù)類型構(gòu)造的復(fù)雜數(shù)據(jù)對象;它們由程序員或編譯程序確定。程序的說明原則上是可互交換的,這些對象在二進(jìn)制交換中最常見的問題是它們所含元素的不同的校準(zhǔn)。51復(fù)雜數(shù)據(jù)對象的編碼一個最佳訪問在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)通常假定單個元素位于處理機(jī)字邊界(因此,它們的開始地址是偶數(shù)或可被4整除)。大多數(shù)處理機(jī)對超過邊界的操作要求一個附加的周期,某些處理機(jī)(例如大多數(shù)RISC CPU)不能在非校準(zhǔn)的地址上工作。因?yàn)樵诮Y(jié)構(gòu)中的元素不總有字長的倍數(shù),大多數(shù)編譯程序自動地嵌入52復(fù)雜數(shù)據(jù)對象的編碼4整除)。53復(fù)雜數(shù)據(jù)對象的編碼一個最佳訪問在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)通常假定單個元素位于處理機(jī)字邊界(因此,它們的開始地址是偶數(shù)或可被4整除)。54復(fù)雜數(shù)據(jù)對象的編碼一個最佳訪問在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)通常假定單個元素位于處理機(jī)字邊界(因此,它們的開始地址是偶數(shù)或可被4整除)。55復(fù)

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論