• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于OpenWrt平臺(tái)的進(jìn)程間通信

      2014-07-08 02:34:17張一弓
      科技創(chuàng)新與應(yīng)用 2014年21期

      張一弓

      摘 要:OpenWrt是一款基于Linux內(nèi)核的開(kāi)源路由器操作系統(tǒng),文章研究?jī)?nèi)容是,利用Linux進(jìn)程間通信中的命名管道方法,設(shè)計(jì)一系列接口函數(shù),提供消息的注冊(cè)、注銷(xiāo)、發(fā)送、接收。使消息傳遞在簡(jiǎn)單、方便的同時(shí),也能滿(mǎn)足路由器系統(tǒng)的要求。這種函數(shù)庫(kù)稱(chēng)為消息總線(xiàn)。

      關(guān)鍵詞:進(jìn)程間通信(IPC);Linux;消息總線(xiàn)

      1 消息總線(xiàn)設(shè)計(jì)需求

      D-Bus消息總線(xiàn)是面向桌面系統(tǒng)設(shè)計(jì),接口豐富,但占用資源較多。重新設(shè)計(jì)的消息總線(xiàn)將滿(mǎn)足占用系統(tǒng)資源少,且可以滿(mǎn)足路由器軟件系統(tǒng)的消息轉(zhuǎn)發(fā)需求。消息總線(xiàn)(Message Bus,以后簡(jiǎn)稱(chēng)M-Bus)模塊作為路由器軟件系統(tǒng)的基礎(chǔ)軟件模塊,M-Bus被設(shè)計(jì)成了一個(gè)為路由器操作系統(tǒng)各應(yīng)用程序提供模塊間通信的唯一上層平臺(tái)。M-Bus自身被抽象化成一個(gè)提供進(jìn)程間通信方法的函數(shù)功能庫(kù),負(fù)責(zé)路由器軟件系統(tǒng)各模塊間的消息轉(zhuǎn)發(fā)和消息廣播,實(shí)現(xiàn)的方式是向整個(gè)系統(tǒng)提供C的API接口以供其他應(yīng)用程序調(diào)用。M-Bus底層是使用套接字、信號(hào)量、管道等Linux基本進(jìn)程間通信方法進(jìn)行封裝。M-Bus在消息處理方式是消息的直接轉(zhuǎn)發(fā)。消息的直接轉(zhuǎn)發(fā)使用命名管道來(lái)實(shí)現(xiàn),參與通信的各個(gè)進(jìn)程直接調(diào)用M-Bus庫(kù)函數(shù),各個(gè)應(yīng)用程序根據(jù)自身注冊(cè)到消息總線(xiàn)上的消息處理函數(shù),做出下一步的動(dòng)作。

      2 消息總線(xiàn)總體設(shè)計(jì)

      消息總線(xiàn)被設(shè)計(jì)成了一個(gè)為路由器操作系統(tǒng)各應(yīng)用程序提供模塊間通信的唯一上層平臺(tái)。消息總線(xiàn)自身被抽象化成一個(gè)提供進(jìn)程間通信方法的函數(shù)功能庫(kù),負(fù)責(zé)路由器軟件系統(tǒng)各模塊間的消息轉(zhuǎn)發(fā)和消息廣播,實(shí)現(xiàn)的方式是向整個(gè)系統(tǒng)提供C的API接口以供其他應(yīng)用程序調(diào)用。消息總線(xiàn)底層是使用套接字、信號(hào)量、管道等Linux基本進(jìn)程間通信方法進(jìn)行封裝。消息總線(xiàn)在消息處理方式是消息的直接轉(zhuǎn)發(fā)。消息的直接轉(zhuǎn)發(fā)使用命名管道來(lái)實(shí)現(xiàn),參與通信的各個(gè)進(jìn)程直接調(diào)用消息總線(xiàn)庫(kù)函數(shù),各個(gè)應(yīng)用程序根據(jù)自身注冊(cè)到消息總線(xiàn)上的消息處理函數(shù),做出下一步的動(dòng)作。消息總線(xiàn)包括以下三個(gè)子模塊:(1)消息總線(xiàn)的接口集合,包括消息的發(fā)送、消息的接收、消息發(fā)送者與接收者的登記等一系列消息總線(xiàn)能夠提供的API函數(shù)。(2)消息總線(xiàn)的守護(hù)進(jìn)程。(3)消息總線(xiàn)內(nèi)部工作處理,為上層API函數(shù)提供基礎(chǔ)。路由器的各應(yīng)用程序通過(guò)調(diào)用消息總線(xiàn)的API函數(shù)來(lái)使用消息總線(xiàn)的功能。消息總線(xiàn)提供了本地資源初始化、銷(xiāo)毀本地資源、注冊(cè)、卸載、發(fā)送消息、接收消息、登記消息處理等API函數(shù)。消息總線(xiàn)中所定義的消息,是進(jìn)程間傳遞數(shù)據(jù)的載體,消息的定義遵循以下原則:(1)每個(gè)消息都有自身的名字,消息的名字表示要發(fā)送的消息是什么命令。(2)消息的名字在系統(tǒng)中是唯一的。(3)系統(tǒng)能處理消息的種類(lèi)的能力是有限的。各個(gè)模塊收到消息后會(huì)跟據(jù)消息的名字執(zhí)行相應(yīng)的處理函數(shù),(4)消息具有統(tǒng)一定義的數(shù)據(jù)結(jié)構(gòu),包括消息頭、攜帶數(shù)據(jù)、消息上下文(Context)。消息的名字(也可稱(chēng)為消息的類(lèi)型)作為消息頭中的一個(gè)數(shù)據(jù)域的形式存在。

      3 消息總線(xiàn)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)

      消息的自身是數(shù)據(jù)傳遞的載體并且消息具有相應(yīng)的結(jié)構(gòu)。消息結(jié)構(gòu)組織分為兩類(lèi):一類(lèi)是各模塊之間通信的消息結(jié)構(gòu);另一類(lèi)是各模塊本地維護(hù)的消息結(jié)構(gòu)。

      其中,消息頭被定義成各模塊間通信的唯一結(jié)構(gòu),各模塊間的通信是通過(guò)解析消息頭來(lái)提取數(shù)據(jù),從而實(shí)現(xiàn)進(jìn)程間的通信。而各模塊本地維護(hù)的消息結(jié)構(gòu)稱(chēng)之為消息上下文,每個(gè)模塊都會(huì)有自身的消息上下文,由各個(gè)模塊自己組織與管理,與外界隔離。圖1描述了消息頭的數(shù)據(jù)結(jié)構(gòu):

      圖1 消息頭數(shù)據(jù)結(jié)構(gòu)示意圖

      消息頭中包含以下定義內(nèi)容:(1)消息的發(fā)送者:定義該消息是由哪個(gè)模塊發(fā)送的,路由器所有模塊的名稱(chēng)均用宏定義。(2)當(dāng)前進(jìn)程PID:該消息的發(fā)送進(jìn)程的PID。(3)消息的名字:該消息發(fā)的是什么指令。(4)消息的同步:當(dāng)接收進(jìn)程收到消息后需要做反饋操作,回復(fù)發(fā)送進(jìn)程進(jìn)行收到確認(rèn)。如果不做同步操作則不需要回復(fù)。(5)數(shù)據(jù)長(zhǎng)度:消息所攜帶的數(shù)據(jù)長(zhǎng)度。(6)攜帶數(shù)據(jù)起始位:所攜帶數(shù)據(jù)的起始位地址。起始位地址加上所攜帶數(shù)據(jù)的長(zhǎng)度就可以表示該消息攜帶的所有數(shù)據(jù),即消息的消息體。作者稱(chēng)各模塊自身維護(hù)的消息為本地消息,描述本地消息的數(shù)據(jù)結(jié)構(gòu)稱(chēng)為消息上下文,路由器軟件系統(tǒng)中每個(gè)模塊(每個(gè)應(yīng)用程序)自身只能存在一個(gè)消息上下文。設(shè)計(jì)消息上下文的原因在于是想把使用消息總線(xiàn)的所有數(shù)據(jù)與操作方式都組織到一起,然后封裝成統(tǒng)一的結(jié)構(gòu)來(lái)進(jìn)行描述。每個(gè)應(yīng)用程序注冊(cè)到消息總線(xiàn)上的時(shí)候,都會(huì)生成自身的消息上下文。圖2描述了消息上下文的數(shù)據(jù)結(jié)構(gòu)定義。

      圖2 消息上下文數(shù)據(jù)結(jié)構(gòu)示意圖

      消息上下文中包括了以下內(nèi)容:(1)注冊(cè)到消息總線(xiàn)上的應(yīng)用程序自身名字。名字由字符串表示,系統(tǒng)中所有的應(yīng)用程序名字均使用宏進(jìn)行定義。(2)當(dāng)前注冊(cè)到消息總線(xiàn)上的進(jìn)程ID。進(jìn)程ID用于表示消息總線(xiàn)使用者的身份。(3)當(dāng)前接收消息的文件描述符。當(dāng)一個(gè)進(jìn)程新注冊(cè)到消息總線(xiàn)上時(shí),該文件描述符設(shè)置為-1。當(dāng)該進(jìn)程參與消息的發(fā)送或接收時(shí),該文件描述符表示文件操作句柄。(4)進(jìn)程退出函數(shù)指針,typedef void(*pf_user_exit)(void)。當(dāng)一個(gè)已在消息總線(xiàn)上注冊(cè)過(guò)的進(jìn)程想要從消息總線(xiàn)上卸載時(shí),調(diào)用自身定義的退出函數(shù)實(shí)現(xiàn)退出。(5)消息處理函數(shù)指針。當(dāng)應(yīng)用程序收到消息時(shí)解析該消息,根據(jù)解析到的消息名字調(diào)用相對(duì)應(yīng)的消息處理函數(shù)。當(dāng)應(yīng)用程序向消息總線(xiàn)上注冊(cè)時(shí),必須注冊(cè)對(duì)應(yīng)消息的處理函數(shù)。(6)默認(rèn)消息處理函數(shù)指針。(7)消息頭。

      參考文獻(xiàn)

      [1]Bird Intern Articles on Routing Software Openwrt[M].Hephaestus Books,2011:115-120.

      [2]Jim Brown.Articles on Routers[M].Hephaestus Books,2011:45-59.

      [3]Andrew.Network Security Hacks Lockhart[M].USA:Media Inc,2006:245-230.endprint

      摘 要:OpenWrt是一款基于Linux內(nèi)核的開(kāi)源路由器操作系統(tǒng),文章研究?jī)?nèi)容是,利用Linux進(jìn)程間通信中的命名管道方法,設(shè)計(jì)一系列接口函數(shù),提供消息的注冊(cè)、注銷(xiāo)、發(fā)送、接收。使消息傳遞在簡(jiǎn)單、方便的同時(shí),也能滿(mǎn)足路由器系統(tǒng)的要求。這種函數(shù)庫(kù)稱(chēng)為消息總線(xiàn)。

      關(guān)鍵詞:進(jìn)程間通信(IPC);Linux;消息總線(xiàn)

      1 消息總線(xiàn)設(shè)計(jì)需求

      D-Bus消息總線(xiàn)是面向桌面系統(tǒng)設(shè)計(jì),接口豐富,但占用資源較多。重新設(shè)計(jì)的消息總線(xiàn)將滿(mǎn)足占用系統(tǒng)資源少,且可以滿(mǎn)足路由器軟件系統(tǒng)的消息轉(zhuǎn)發(fā)需求。消息總線(xiàn)(Message Bus,以后簡(jiǎn)稱(chēng)M-Bus)模塊作為路由器軟件系統(tǒng)的基礎(chǔ)軟件模塊,M-Bus被設(shè)計(jì)成了一個(gè)為路由器操作系統(tǒng)各應(yīng)用程序提供模塊間通信的唯一上層平臺(tái)。M-Bus自身被抽象化成一個(gè)提供進(jìn)程間通信方法的函數(shù)功能庫(kù),負(fù)責(zé)路由器軟件系統(tǒng)各模塊間的消息轉(zhuǎn)發(fā)和消息廣播,實(shí)現(xiàn)的方式是向整個(gè)系統(tǒng)提供C的API接口以供其他應(yīng)用程序調(diào)用。M-Bus底層是使用套接字、信號(hào)量、管道等Linux基本進(jìn)程間通信方法進(jìn)行封裝。M-Bus在消息處理方式是消息的直接轉(zhuǎn)發(fā)。消息的直接轉(zhuǎn)發(fā)使用命名管道來(lái)實(shí)現(xiàn),參與通信的各個(gè)進(jìn)程直接調(diào)用M-Bus庫(kù)函數(shù),各個(gè)應(yīng)用程序根據(jù)自身注冊(cè)到消息總線(xiàn)上的消息處理函數(shù),做出下一步的動(dòng)作。

      2 消息總線(xiàn)總體設(shè)計(jì)

      消息總線(xiàn)被設(shè)計(jì)成了一個(gè)為路由器操作系統(tǒng)各應(yīng)用程序提供模塊間通信的唯一上層平臺(tái)。消息總線(xiàn)自身被抽象化成一個(gè)提供進(jìn)程間通信方法的函數(shù)功能庫(kù),負(fù)責(zé)路由器軟件系統(tǒng)各模塊間的消息轉(zhuǎn)發(fā)和消息廣播,實(shí)現(xiàn)的方式是向整個(gè)系統(tǒng)提供C的API接口以供其他應(yīng)用程序調(diào)用。消息總線(xiàn)底層是使用套接字、信號(hào)量、管道等Linux基本進(jìn)程間通信方法進(jìn)行封裝。消息總線(xiàn)在消息處理方式是消息的直接轉(zhuǎn)發(fā)。消息的直接轉(zhuǎn)發(fā)使用命名管道來(lái)實(shí)現(xiàn),參與通信的各個(gè)進(jìn)程直接調(diào)用消息總線(xiàn)庫(kù)函數(shù),各個(gè)應(yīng)用程序根據(jù)自身注冊(cè)到消息總線(xiàn)上的消息處理函數(shù),做出下一步的動(dòng)作。消息總線(xiàn)包括以下三個(gè)子模塊:(1)消息總線(xiàn)的接口集合,包括消息的發(fā)送、消息的接收、消息發(fā)送者與接收者的登記等一系列消息總線(xiàn)能夠提供的API函數(shù)。(2)消息總線(xiàn)的守護(hù)進(jìn)程。(3)消息總線(xiàn)內(nèi)部工作處理,為上層API函數(shù)提供基礎(chǔ)。路由器的各應(yīng)用程序通過(guò)調(diào)用消息總線(xiàn)的API函數(shù)來(lái)使用消息總線(xiàn)的功能。消息總線(xiàn)提供了本地資源初始化、銷(xiāo)毀本地資源、注冊(cè)、卸載、發(fā)送消息、接收消息、登記消息處理等API函數(shù)。消息總線(xiàn)中所定義的消息,是進(jìn)程間傳遞數(shù)據(jù)的載體,消息的定義遵循以下原則:(1)每個(gè)消息都有自身的名字,消息的名字表示要發(fā)送的消息是什么命令。(2)消息的名字在系統(tǒng)中是唯一的。(3)系統(tǒng)能處理消息的種類(lèi)的能力是有限的。各個(gè)模塊收到消息后會(huì)跟據(jù)消息的名字執(zhí)行相應(yīng)的處理函數(shù),(4)消息具有統(tǒng)一定義的數(shù)據(jù)結(jié)構(gòu),包括消息頭、攜帶數(shù)據(jù)、消息上下文(Context)。消息的名字(也可稱(chēng)為消息的類(lèi)型)作為消息頭中的一個(gè)數(shù)據(jù)域的形式存在。

      3 消息總線(xiàn)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)

      消息的自身是數(shù)據(jù)傳遞的載體并且消息具有相應(yīng)的結(jié)構(gòu)。消息結(jié)構(gòu)組織分為兩類(lèi):一類(lèi)是各模塊之間通信的消息結(jié)構(gòu);另一類(lèi)是各模塊本地維護(hù)的消息結(jié)構(gòu)。

      其中,消息頭被定義成各模塊間通信的唯一結(jié)構(gòu),各模塊間的通信是通過(guò)解析消息頭來(lái)提取數(shù)據(jù),從而實(shí)現(xiàn)進(jìn)程間的通信。而各模塊本地維護(hù)的消息結(jié)構(gòu)稱(chēng)之為消息上下文,每個(gè)模塊都會(huì)有自身的消息上下文,由各個(gè)模塊自己組織與管理,與外界隔離。圖1描述了消息頭的數(shù)據(jù)結(jié)構(gòu):

      圖1 消息頭數(shù)據(jù)結(jié)構(gòu)示意圖

      消息頭中包含以下定義內(nèi)容:(1)消息的發(fā)送者:定義該消息是由哪個(gè)模塊發(fā)送的,路由器所有模塊的名稱(chēng)均用宏定義。(2)當(dāng)前進(jìn)程PID:該消息的發(fā)送進(jìn)程的PID。(3)消息的名字:該消息發(fā)的是什么指令。(4)消息的同步:當(dāng)接收進(jìn)程收到消息后需要做反饋操作,回復(fù)發(fā)送進(jìn)程進(jìn)行收到確認(rèn)。如果不做同步操作則不需要回復(fù)。(5)數(shù)據(jù)長(zhǎng)度:消息所攜帶的數(shù)據(jù)長(zhǎng)度。(6)攜帶數(shù)據(jù)起始位:所攜帶數(shù)據(jù)的起始位地址。起始位地址加上所攜帶數(shù)據(jù)的長(zhǎng)度就可以表示該消息攜帶的所有數(shù)據(jù),即消息的消息體。作者稱(chēng)各模塊自身維護(hù)的消息為本地消息,描述本地消息的數(shù)據(jù)結(jié)構(gòu)稱(chēng)為消息上下文,路由器軟件系統(tǒng)中每個(gè)模塊(每個(gè)應(yīng)用程序)自身只能存在一個(gè)消息上下文。設(shè)計(jì)消息上下文的原因在于是想把使用消息總線(xiàn)的所有數(shù)據(jù)與操作方式都組織到一起,然后封裝成統(tǒng)一的結(jié)構(gòu)來(lái)進(jìn)行描述。每個(gè)應(yīng)用程序注冊(cè)到消息總線(xiàn)上的時(shí)候,都會(huì)生成自身的消息上下文。圖2描述了消息上下文的數(shù)據(jù)結(jié)構(gòu)定義。

      圖2 消息上下文數(shù)據(jù)結(jié)構(gòu)示意圖

      消息上下文中包括了以下內(nèi)容:(1)注冊(cè)到消息總線(xiàn)上的應(yīng)用程序自身名字。名字由字符串表示,系統(tǒng)中所有的應(yīng)用程序名字均使用宏進(jìn)行定義。(2)當(dāng)前注冊(cè)到消息總線(xiàn)上的進(jìn)程ID。進(jìn)程ID用于表示消息總線(xiàn)使用者的身份。(3)當(dāng)前接收消息的文件描述符。當(dāng)一個(gè)進(jìn)程新注冊(cè)到消息總線(xiàn)上時(shí),該文件描述符設(shè)置為-1。當(dāng)該進(jìn)程參與消息的發(fā)送或接收時(shí),該文件描述符表示文件操作句柄。(4)進(jìn)程退出函數(shù)指針,typedef void(*pf_user_exit)(void)。當(dāng)一個(gè)已在消息總線(xiàn)上注冊(cè)過(guò)的進(jìn)程想要從消息總線(xiàn)上卸載時(shí),調(diào)用自身定義的退出函數(shù)實(shí)現(xiàn)退出。(5)消息處理函數(shù)指針。當(dāng)應(yīng)用程序收到消息時(shí)解析該消息,根據(jù)解析到的消息名字調(diào)用相對(duì)應(yīng)的消息處理函數(shù)。當(dāng)應(yīng)用程序向消息總線(xiàn)上注冊(cè)時(shí),必須注冊(cè)對(duì)應(yīng)消息的處理函數(shù)。(6)默認(rèn)消息處理函數(shù)指針。(7)消息頭。

      參考文獻(xiàn)

      [1]Bird Intern Articles on Routing Software Openwrt[M].Hephaestus Books,2011:115-120.

      [2]Jim Brown.Articles on Routers[M].Hephaestus Books,2011:45-59.

      [3]Andrew.Network Security Hacks Lockhart[M].USA:Media Inc,2006:245-230.endprint

      摘 要:OpenWrt是一款基于Linux內(nèi)核的開(kāi)源路由器操作系統(tǒng),文章研究?jī)?nèi)容是,利用Linux進(jìn)程間通信中的命名管道方法,設(shè)計(jì)一系列接口函數(shù),提供消息的注冊(cè)、注銷(xiāo)、發(fā)送、接收。使消息傳遞在簡(jiǎn)單、方便的同時(shí),也能滿(mǎn)足路由器系統(tǒng)的要求。這種函數(shù)庫(kù)稱(chēng)為消息總線(xiàn)。

      關(guān)鍵詞:進(jìn)程間通信(IPC);Linux;消息總線(xiàn)

      1 消息總線(xiàn)設(shè)計(jì)需求

      D-Bus消息總線(xiàn)是面向桌面系統(tǒng)設(shè)計(jì),接口豐富,但占用資源較多。重新設(shè)計(jì)的消息總線(xiàn)將滿(mǎn)足占用系統(tǒng)資源少,且可以滿(mǎn)足路由器軟件系統(tǒng)的消息轉(zhuǎn)發(fā)需求。消息總線(xiàn)(Message Bus,以后簡(jiǎn)稱(chēng)M-Bus)模塊作為路由器軟件系統(tǒng)的基礎(chǔ)軟件模塊,M-Bus被設(shè)計(jì)成了一個(gè)為路由器操作系統(tǒng)各應(yīng)用程序提供模塊間通信的唯一上層平臺(tái)。M-Bus自身被抽象化成一個(gè)提供進(jìn)程間通信方法的函數(shù)功能庫(kù),負(fù)責(zé)路由器軟件系統(tǒng)各模塊間的消息轉(zhuǎn)發(fā)和消息廣播,實(shí)現(xiàn)的方式是向整個(gè)系統(tǒng)提供C的API接口以供其他應(yīng)用程序調(diào)用。M-Bus底層是使用套接字、信號(hào)量、管道等Linux基本進(jìn)程間通信方法進(jìn)行封裝。M-Bus在消息處理方式是消息的直接轉(zhuǎn)發(fā)。消息的直接轉(zhuǎn)發(fā)使用命名管道來(lái)實(shí)現(xiàn),參與通信的各個(gè)進(jìn)程直接調(diào)用M-Bus庫(kù)函數(shù),各個(gè)應(yīng)用程序根據(jù)自身注冊(cè)到消息總線(xiàn)上的消息處理函數(shù),做出下一步的動(dòng)作。

      2 消息總線(xiàn)總體設(shè)計(jì)

      消息總線(xiàn)被設(shè)計(jì)成了一個(gè)為路由器操作系統(tǒng)各應(yīng)用程序提供模塊間通信的唯一上層平臺(tái)。消息總線(xiàn)自身被抽象化成一個(gè)提供進(jìn)程間通信方法的函數(shù)功能庫(kù),負(fù)責(zé)路由器軟件系統(tǒng)各模塊間的消息轉(zhuǎn)發(fā)和消息廣播,實(shí)現(xiàn)的方式是向整個(gè)系統(tǒng)提供C的API接口以供其他應(yīng)用程序調(diào)用。消息總線(xiàn)底層是使用套接字、信號(hào)量、管道等Linux基本進(jìn)程間通信方法進(jìn)行封裝。消息總線(xiàn)在消息處理方式是消息的直接轉(zhuǎn)發(fā)。消息的直接轉(zhuǎn)發(fā)使用命名管道來(lái)實(shí)現(xiàn),參與通信的各個(gè)進(jìn)程直接調(diào)用消息總線(xiàn)庫(kù)函數(shù),各個(gè)應(yīng)用程序根據(jù)自身注冊(cè)到消息總線(xiàn)上的消息處理函數(shù),做出下一步的動(dòng)作。消息總線(xiàn)包括以下三個(gè)子模塊:(1)消息總線(xiàn)的接口集合,包括消息的發(fā)送、消息的接收、消息發(fā)送者與接收者的登記等一系列消息總線(xiàn)能夠提供的API函數(shù)。(2)消息總線(xiàn)的守護(hù)進(jìn)程。(3)消息總線(xiàn)內(nèi)部工作處理,為上層API函數(shù)提供基礎(chǔ)。路由器的各應(yīng)用程序通過(guò)調(diào)用消息總線(xiàn)的API函數(shù)來(lái)使用消息總線(xiàn)的功能。消息總線(xiàn)提供了本地資源初始化、銷(xiāo)毀本地資源、注冊(cè)、卸載、發(fā)送消息、接收消息、登記消息處理等API函數(shù)。消息總線(xiàn)中所定義的消息,是進(jìn)程間傳遞數(shù)據(jù)的載體,消息的定義遵循以下原則:(1)每個(gè)消息都有自身的名字,消息的名字表示要發(fā)送的消息是什么命令。(2)消息的名字在系統(tǒng)中是唯一的。(3)系統(tǒng)能處理消息的種類(lèi)的能力是有限的。各個(gè)模塊收到消息后會(huì)跟據(jù)消息的名字執(zhí)行相應(yīng)的處理函數(shù),(4)消息具有統(tǒng)一定義的數(shù)據(jù)結(jié)構(gòu),包括消息頭、攜帶數(shù)據(jù)、消息上下文(Context)。消息的名字(也可稱(chēng)為消息的類(lèi)型)作為消息頭中的一個(gè)數(shù)據(jù)域的形式存在。

      3 消息總線(xiàn)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)

      消息的自身是數(shù)據(jù)傳遞的載體并且消息具有相應(yīng)的結(jié)構(gòu)。消息結(jié)構(gòu)組織分為兩類(lèi):一類(lèi)是各模塊之間通信的消息結(jié)構(gòu);另一類(lèi)是各模塊本地維護(hù)的消息結(jié)構(gòu)。

      其中,消息頭被定義成各模塊間通信的唯一結(jié)構(gòu),各模塊間的通信是通過(guò)解析消息頭來(lái)提取數(shù)據(jù),從而實(shí)現(xiàn)進(jìn)程間的通信。而各模塊本地維護(hù)的消息結(jié)構(gòu)稱(chēng)之為消息上下文,每個(gè)模塊都會(huì)有自身的消息上下文,由各個(gè)模塊自己組織與管理,與外界隔離。圖1描述了消息頭的數(shù)據(jù)結(jié)構(gòu):

      圖1 消息頭數(shù)據(jù)結(jié)構(gòu)示意圖

      消息頭中包含以下定義內(nèi)容:(1)消息的發(fā)送者:定義該消息是由哪個(gè)模塊發(fā)送的,路由器所有模塊的名稱(chēng)均用宏定義。(2)當(dāng)前進(jìn)程PID:該消息的發(fā)送進(jìn)程的PID。(3)消息的名字:該消息發(fā)的是什么指令。(4)消息的同步:當(dāng)接收進(jìn)程收到消息后需要做反饋操作,回復(fù)發(fā)送進(jìn)程進(jìn)行收到確認(rèn)。如果不做同步操作則不需要回復(fù)。(5)數(shù)據(jù)長(zhǎng)度:消息所攜帶的數(shù)據(jù)長(zhǎng)度。(6)攜帶數(shù)據(jù)起始位:所攜帶數(shù)據(jù)的起始位地址。起始位地址加上所攜帶數(shù)據(jù)的長(zhǎng)度就可以表示該消息攜帶的所有數(shù)據(jù),即消息的消息體。作者稱(chēng)各模塊自身維護(hù)的消息為本地消息,描述本地消息的數(shù)據(jù)結(jié)構(gòu)稱(chēng)為消息上下文,路由器軟件系統(tǒng)中每個(gè)模塊(每個(gè)應(yīng)用程序)自身只能存在一個(gè)消息上下文。設(shè)計(jì)消息上下文的原因在于是想把使用消息總線(xiàn)的所有數(shù)據(jù)與操作方式都組織到一起,然后封裝成統(tǒng)一的結(jié)構(gòu)來(lái)進(jìn)行描述。每個(gè)應(yīng)用程序注冊(cè)到消息總線(xiàn)上的時(shí)候,都會(huì)生成自身的消息上下文。圖2描述了消息上下文的數(shù)據(jù)結(jié)構(gòu)定義。

      圖2 消息上下文數(shù)據(jù)結(jié)構(gòu)示意圖

      消息上下文中包括了以下內(nèi)容:(1)注冊(cè)到消息總線(xiàn)上的應(yīng)用程序自身名字。名字由字符串表示,系統(tǒng)中所有的應(yīng)用程序名字均使用宏進(jìn)行定義。(2)當(dāng)前注冊(cè)到消息總線(xiàn)上的進(jìn)程ID。進(jìn)程ID用于表示消息總線(xiàn)使用者的身份。(3)當(dāng)前接收消息的文件描述符。當(dāng)一個(gè)進(jìn)程新注冊(cè)到消息總線(xiàn)上時(shí),該文件描述符設(shè)置為-1。當(dāng)該進(jìn)程參與消息的發(fā)送或接收時(shí),該文件描述符表示文件操作句柄。(4)進(jìn)程退出函數(shù)指針,typedef void(*pf_user_exit)(void)。當(dāng)一個(gè)已在消息總線(xiàn)上注冊(cè)過(guò)的進(jìn)程想要從消息總線(xiàn)上卸載時(shí),調(diào)用自身定義的退出函數(shù)實(shí)現(xiàn)退出。(5)消息處理函數(shù)指針。當(dāng)應(yīng)用程序收到消息時(shí)解析該消息,根據(jù)解析到的消息名字調(diào)用相對(duì)應(yīng)的消息處理函數(shù)。當(dāng)應(yīng)用程序向消息總線(xiàn)上注冊(cè)時(shí),必須注冊(cè)對(duì)應(yīng)消息的處理函數(shù)。(6)默認(rèn)消息處理函數(shù)指針。(7)消息頭。

      參考文獻(xiàn)

      [1]Bird Intern Articles on Routing Software Openwrt[M].Hephaestus Books,2011:115-120.

      [2]Jim Brown.Articles on Routers[M].Hephaestus Books,2011:45-59.

      [3]Andrew.Network Security Hacks Lockhart[M].USA:Media Inc,2006:245-230.endprint

      阳新县| 荣成市| 澄迈县| 丹阳市| 南乐县| 仲巴县| 南靖县| 沂南县| 渝北区| 鸡西市| 新疆| 济阳县| 广河县| 平陆县| 汽车| 博客| 安泽县| 肥乡县| 格尔木市| 宾阳县| 芜湖县| 五寨县| 论坛| 荔浦县| 乐东| 泾阳县| 江陵县| 通道| 襄汾县| 灯塔市| 延吉市| 抚顺市| 嘉荫县| 隆回县| 读书| 双峰县| 日土县| 嘉祥县| 多伦县| 德清县| 报价|