<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 一種嵌入式RPC的設計與實(shí)現

一種嵌入式RPC的設計與實(shí)現

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

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

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

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

本文引用地址:http://dyxdggzs.com/article/150615.htm

a.JPG


1.3 RPC的結構模型
從描述的角度出發(fā),產(chǎn)生不同的RPC模型如Andrew S.Tanenhum在其著(zhù)作分布式操作系統中論述的模型以及B.J.Nelson論文中的RPC模型等。但這些模型的主要組件都是相同的。圖2是B.J.Nelson博士的RPC結構模型??蛻?hù)進(jìn)程、客戶(hù)存根和RPC運行庫實(shí)例在客戶(hù)端執行。服務(wù)進(jìn)程、服務(wù)器存根和RPC運行庫實(shí)例在服務(wù)器端執行??蛻?hù)過(guò)程調用相應的客戶(hù)存根??蛻?hù)存根打包參數??蛻?hù)端的RPC運行庫將打包好的參數通過(guò)網(wǎng)絡(luò )發(fā)送給服務(wù)器RPC運行庫。服務(wù)器存根拆包參數,然后調用服務(wù)器過(guò)程。完成后返回結果給服務(wù)器存根。服務(wù)器存根打包結果給服務(wù)器RPC運行庫。服務(wù)器RPC運行庫發(fā)送打包好的參數給客戶(hù)RPC運行庫??蛻?hù)存根拆包并將結果取出返回給客戶(hù)。

b.JPG


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

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

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

關(guān)鍵詞: 實(shí)現 設計 RPC 嵌入式

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>