999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于OpenWrt平臺的進程間通信

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

張一弓

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

關鍵詞:進程間通信(IPC);Linux;消息總線

1 消息總線設計需求

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

2 消息總線總體設計

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

3 消息總線數(shù)據(jù)結構的設計

消息的自身是數(shù)據(jù)傳遞的載體并且消息具有相應的結構。消息結構組織分為兩類:一類是各模塊之間通信的消息結構;另一類是各模塊本地維護的消息結構。

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

圖1 消息頭數(shù)據(jù)結構示意圖

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

圖2 消息上下文數(shù)據(jù)結構示意圖

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

參考文獻

[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內核的開源路由器操作系統(tǒng),文章研究內容是,利用Linux進程間通信中的命名管道方法,設計一系列接口函數(shù),提供消息的注冊、注銷、發(fā)送、接收。使消息傳遞在簡單、方便的同時,也能滿足路由器系統(tǒng)的要求。這種函數(shù)庫稱為消息總線。

關鍵詞:進程間通信(IPC);Linux;消息總線

1 消息總線設計需求

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

2 消息總線總體設計

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

3 消息總線數(shù)據(jù)結構的設計

消息的自身是數(shù)據(jù)傳遞的載體并且消息具有相應的結構。消息結構組織分為兩類:一類是各模塊之間通信的消息結構;另一類是各模塊本地維護的消息結構。

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

圖1 消息頭數(shù)據(jù)結構示意圖

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

圖2 消息上下文數(shù)據(jù)結構示意圖

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

參考文獻

[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內核的開源路由器操作系統(tǒng),文章研究內容是,利用Linux進程間通信中的命名管道方法,設計一系列接口函數(shù),提供消息的注冊、注銷、發(fā)送、接收。使消息傳遞在簡單、方便的同時,也能滿足路由器系統(tǒng)的要求。這種函數(shù)庫稱為消息總線。

關鍵詞:進程間通信(IPC);Linux;消息總線

1 消息總線設計需求

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

2 消息總線總體設計

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

3 消息總線數(shù)據(jù)結構的設計

消息的自身是數(shù)據(jù)傳遞的載體并且消息具有相應的結構。消息結構組織分為兩類:一類是各模塊之間通信的消息結構;另一類是各模塊本地維護的消息結構。

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

圖1 消息頭數(shù)據(jù)結構示意圖

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

圖2 消息上下文數(shù)據(jù)結構示意圖

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

參考文獻

[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

主站蜘蛛池模板: 亚洲视频一区在线| 国产h视频免费观看| 日韩高清在线观看不卡一区二区| 色综合成人| 中文天堂在线视频| 免费国产高清精品一区在线| 狠狠v日韩v欧美v| 亚洲动漫h| 亚洲a级在线观看| 亚洲人视频在线观看| 99一级毛片| 亚洲欧美h| 国产网站一区二区三区| 亚洲综合色婷婷中文字幕| 在线观看av永久| 又大又硬又爽免费视频| 性网站在线观看| 又大又硬又爽免费视频| 亚洲日韩国产精品综合在线观看| 久久人人97超碰人人澡爱香蕉| 91福利免费| 激情在线网| 77777亚洲午夜久久多人| 国产精品欧美亚洲韩国日本不卡| 亚洲天堂日本| 国产亚洲精品yxsp| 亚洲成av人无码综合在线观看| 无套av在线| 91丝袜乱伦| 在线观看国产精美视频| 日本久久网站| 毛片在线播放网址| 色婷婷在线影院| 无码免费视频| 五月天福利视频| 国产小视频免费| 尤物国产在线| 中文字幕啪啪| 亚洲国产成熟视频在线多多| 欧美综合在线观看| 国产精品无码影视久久久久久久 | 国产经典在线观看一区| 婷婷激情亚洲| 91精品免费高清在线| 亚洲国产精品一区二区第一页免| 亚洲人成在线精品| 久久久久国色AV免费观看性色| 国产综合另类小说色区色噜噜 | 国产激情在线视频| 国产主播在线观看| 91一级片| www.亚洲一区| 98超碰在线观看| 国产自在线播放| 成年A级毛片| 国产成人免费手机在线观看视频| 蜜桃臀无码内射一区二区三区| 国产无码高清视频不卡| 99久视频| 国产精品成人啪精品视频| 国产欧美在线观看一区| 亚洲性影院| 日韩亚洲高清一区二区| 久久无码av一区二区三区| 九九热免费在线视频| 精久久久久无码区中文字幕| 69av在线| 久久国产乱子| 亚洲欧洲AV一区二区三区| 国产91丝袜在线播放动漫| 久久亚洲美女精品国产精品| 永久毛片在线播| 91久久夜色精品| 亚洲成人高清无码| 激情综合婷婷丁香五月尤物| 丁香婷婷激情网| 久久精品66| 波多野吉衣一区二区三区av| 国产又爽又黄无遮挡免费观看 | 国产精品观看视频免费完整版| 亚洲综合激情另类专区| 在线免费不卡视频|