一種嵌入式RPC的設(shè)計與實現(xiàn)
摘要:在研究遠程過程調(diào)用的原理和嵌入式系統(tǒng)特點的基礎(chǔ)上,提出一種遠程過程調(diào)用的設(shè)計以及在VxWorks操作系統(tǒng)上服務(wù)器端和在Win-dows探作系統(tǒng)上客戶端的實現(xiàn)。經(jīng)在項目中的應(yīng)用,本設(shè)計與實現(xiàn)體現(xiàn)了良好的實用性、移植性和擴展性。
關(guān)鍵詞:遠程過程調(diào)用;嵌入式系統(tǒng);網(wǎng)絡(luò);狀態(tài)機
遠程過程調(diào)用(Renmte Procedure call,RPC)最早是在B.J.Nelson的博士論文中論述的。這里的過程等價于例程,函數(shù)的意思。RPC的思想源于大多數(shù)的程序都以過程作為最小設(shè)計單位。RPC擴展了過程調(diào)用機制,允許客戶端的過程通過網(wǎng)絡(luò)調(diào)用服務(wù)器端的過程。
從RPC的思想出發(fā),不同的組織和公司開發(fā)了不同的RPC協(xié)議。有SUN公司的ONC RPC,開放軟件基金會的DCE RPC,微軟公司的MSRPC等。這些RPC都依賴與特定操作系統(tǒng),并且定義了自己的接口描述語言(IDL),對于嵌入式開發(fā)過于復(fù)雜。
1 RPC的機制
1.1 過程調(diào)用
典型的過程調(diào)用就是過程A將參數(shù)和控制權(quán)交給過程B,過程B經(jīng)過一系列運算或者下一級過程,最后把結(jié)果和控制權(quán)返回給過程A。
1.2 RPC流程
RPC分為同步RPC和異步RPC。在同步RPC中客戶端發(fā)出RPC調(diào)用的線程將被阻塞,直到從服務(wù)器端完成。異步RPC中客戶端發(fā)出調(diào)用的線程不會被阻塞而是繼續(xù)執(zhí)行。本文以同步RPC為研究對象。
RPC的思想就是使遠程過程調(diào)用看上去就像在本地的過程調(diào)用一樣。從程序運行角度來看,其流程如圖1所示??蛻舳?MACHINE A)的進程通過網(wǎng)絡(luò)發(fā)送遠程過程調(diào)用請求給服務(wù)器(MACHINE B)。服務(wù)器收到請求后處理,調(diào)用相應(yīng)的過程執(zhí)行,執(zhí)行完畢后服務(wù)器返回結(jié)果給客戶進程。客戶進程在發(fā)出遠程過程調(diào)用后被阻塞,直到服務(wù)器返回結(jié)果給客戶進程。
1.3 RPC的結(jié)構(gòu)模型
從描述的角度出發(fā),產(chǎn)生不同的RPC模型如Andrew S.Tanenhum在其著作分布式操作系統(tǒng)中論述的模型以及B.J.Nelson論文中的RPC模型等。但這些模型的主要組件都是相同的。圖2是B.J.Nelson博士的RPC結(jié)構(gòu)模型??蛻暨M程、客戶存根和RPC運行庫實例在客戶端執(zhí)行。服務(wù)進程、服務(wù)器存根和RPC運行庫實例在服務(wù)器端執(zhí)行??蛻暨^程調(diào)用相應(yīng)的客戶存根??蛻舸娓虬鼌?shù)??蛻舳说腞PC運行庫將打包好的參數(shù)通過網(wǎng)絡(luò)發(fā)送給服務(wù)器RPC運行庫。服務(wù)器存根拆包參數(shù),然后調(diào)用服務(wù)器過程。完成后返回結(jié)果給服務(wù)器存根。服務(wù)器存根打包結(jié)果給服務(wù)器RPC運行庫。服務(wù)器RPC運行庫發(fā)送打包好的參數(shù)給客戶RPC運行庫??蛻舸娓鸢⒔Y(jié)果取出返回給客戶。
盡管RPC的思想比較簡單,但有很多問題需要考慮。由于有很多不同的CPU,如X86、ARM、SPARC等以及各種DSP、單片機,產(chǎn)生了參數(shù)傳遞問題。如X86采用最低有效字節(jié)優(yōu)先,而SPARC是最高字節(jié)優(yōu)先。有些大型機采用EBCDIC碼,而其他處理器采用ASCII碼。存根就是用來解決這些問題。還有指針問題,涉及物理地址、虛擬地址、地址空間等很多考慮。我們知道不同計算機之間無法直接訪問彼此的地址。還有過程的參數(shù)如果為數(shù)據(jù)結(jié)構(gòu),這就引出數(shù)據(jù)對齊的問題。由此可以推斷所有的RPC實現(xiàn)都在一定的范圍適用。本文的RPC設(shè)計假定客戶端和服務(wù)器端有相同的大小端和并且都是32位處理器。
評論