新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一種嵌入式RPC的設(shè)計(jì)與實(shí)現(xiàn)

一種嵌入式RPC的設(shè)計(jì)與實(shí)現(xiàn)

作者: 時(shí)間:2011-06-10 來(lái)源:網(wǎng)絡(luò) 收藏

摘要:在研究遠(yuǎn)程過(guò)程調(diào)用的原理和系統(tǒng)特點(diǎn)的基礎(chǔ)上,提出一種遠(yuǎn)程過(guò)程調(diào)用的以及在VxWorks操作系統(tǒng)上服務(wù)器端和在Win-dows探作系統(tǒng)上客戶端的。經(jīng)在項(xiàng)目中的應(yīng)用,本體現(xiàn)了良好的實(shí)用性、移植性和擴(kuò)展性。
關(guān)鍵詞:遠(yuǎn)程過(guò)程調(diào)用;系統(tǒng);網(wǎng)絡(luò);狀態(tài)機(jī)

遠(yuǎn)程過(guò)程調(diào)用(Renmte Procedure call,)最早是在B.J.Nelson的博士論文中論述的。這里的過(guò)程等價(jià)于例程,函數(shù)的意思。的思想源于大多數(shù)的程序都以過(guò)程作為最小單位。擴(kuò)展了過(guò)程調(diào)用機(jī)制,允許客戶端的過(guò)程通過(guò)網(wǎng)絡(luò)調(diào)用服務(wù)器端的過(guò)程。
從RPC的思想出發(fā),不同的組織和公司開(kāi)發(fā)了不同的RPC協(xié)議。有SUN公司的ONC RPC,開(kāi)放軟件基金會(huì)的DCE RPC,微軟公司的MSRPC等。這些RPC都依賴與特定操作系統(tǒng),并且定義了自己的接口描述語(yǔ)言(IDL),對(duì)于開(kāi)發(fā)過(guò)于復(fù)雜。

1 RPC的機(jī)制
1.1 過(guò)程調(diào)用
典型的過(guò)程調(diào)用就是過(guò)程A將參數(shù)和控制權(quán)交給過(guò)程B,過(guò)程B經(jīng)過(guò)一系列運(yùn)算或者下一級(jí)過(guò)程,最后把結(jié)果和控制權(quán)返回給過(guò)程A。
1.2 RPC流程
RPC分為同步RPC和異步RPC。在同步RPC中客戶端發(fā)出RPC調(diào)用的線程將被阻塞,直到從服務(wù)器端完成。異步RPC中客戶端發(fā)出調(diào)用的線程不會(huì)被阻塞而是繼續(xù)執(zhí)行。本文以同步RPC為研究對(duì)象。
RPC的思想就是使遠(yuǎn)程過(guò)程調(diào)用看上去就像在本地的過(guò)程調(diào)用一樣。從程序運(yùn)行角度來(lái)看,其流程如圖1所示??蛻舳?MACHINE A)的進(jìn)程通過(guò)網(wǎng)絡(luò)發(fā)送遠(yuǎn)程過(guò)程調(diào)用請(qǐng)求給服務(wù)器(MACHINE B)。服務(wù)器收到請(qǐng)求后處理,調(diào)用相應(yīng)的過(guò)程執(zhí)行,執(zhí)行完畢后服務(wù)器返回結(jié)果給客戶進(jìn)程??蛻暨M(jìn)程在發(fā)出遠(yuǎn)程過(guò)程調(diào)用后被阻塞,直到服務(wù)器返回結(jié)果給客戶進(jìn)程。

本文引用地址:http://butianyuan.cn/article/150615.htm

a.JPG


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(jìn)程、客戶存根和RPC運(yùn)行庫(kù)實(shí)例在客戶端執(zhí)行。服務(wù)進(jìn)程、服務(wù)器存根和RPC運(yùn)行庫(kù)實(shí)例在服務(wù)器端執(zhí)行??蛻暨^(guò)程調(diào)用相應(yīng)的客戶存根。客戶存根打包參數(shù)??蛻舳说腞PC運(yùn)行庫(kù)將打包好的參數(shù)通過(guò)網(wǎng)絡(luò)發(fā)送給服務(wù)器RPC運(yùn)行庫(kù)。服務(wù)器存根拆包參數(shù),然后調(diào)用服務(wù)器過(guò)程。完成后返回結(jié)果給服務(wù)器存根。服務(wù)器存根打包結(jié)果給服務(wù)器RPC運(yùn)行庫(kù)。服務(wù)器RPC運(yùn)行庫(kù)發(fā)送打包好的參數(shù)給客戶RPC運(yùn)行庫(kù)??蛻舸娓鸢⒔Y(jié)果取出返回給客戶。

b.JPG


盡管RPC的思想比較簡(jiǎn)單,但有很多問(wèn)題需要考慮。由于有很多不同的CPU,如X86、ARM、SPARC等以及各種DSP、單片機(jī),產(chǎn)生了參數(shù)傳遞問(wèn)題。如X86采用最低有效字節(jié)優(yōu)先,而SPARC是最高字節(jié)優(yōu)先。有些大型機(jī)采用EBCDIC碼,而其他處理器采用ASCII碼。存根就是用來(lái)解決這些問(wèn)題。還有指針問(wèn)題,涉及物理地址、虛擬地址、地址空間等很多考慮。我們知道不同計(jì)算機(jī)之間無(wú)法直接訪問(wèn)彼此的地址。還有過(guò)程的參數(shù)如果為數(shù)據(jù)結(jié)構(gòu),這就引出數(shù)據(jù)對(duì)齊的問(wèn)題。由此可以推斷所有的RPC都在一定的范圍適用。本文的RPC設(shè)計(jì)假定客戶端和服務(wù)器端有相同的大小端和并且都是32位處理器。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

上一頁(yè) 1 2 3 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉