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