国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種基于Select函數(shù)的嵌入式網(wǎng)絡通信信息轉發(fā)機制設計

2013-12-29 00:00:00陳榮軍謝舜道譚洪舟李飛楊宇杰
電腦知識與技術 2013年1期

摘要:為了解決在嵌入式網(wǎng)絡多對多通信中出現(xiàn)網(wǎng)絡擁塞造成網(wǎng)絡性能指標下降、引起網(wǎng)絡帶寬資源浪費的問題,基于Select函數(shù),提出一種單一進程的多目標睡眠等待的信息轉發(fā)機制方法,當睡眠進程等待的幾個目標通道中的任何一個有輸入數(shù)據(jù)時,相應的設備驅動程序把睡眠中的進程喚醒。這樣,既達到了進程與多個數(shù)據(jù)通道進行通信的目的,又避免使用報文隊列增加資源消耗的弊端,使信息轉發(fā)保持了較高的效率。該機制已經(jīng)在Linux平臺上實現(xiàn)并通過測試。

關鍵詞: 嵌入式; 網(wǎng)絡通信; 網(wǎng)絡擁塞; 信息轉發(fā);Select函數(shù)

中圖分類號:TP338 文獻標識碼:A 文章編號:1009-3044(2013)01-0025-04

嵌入式系統(tǒng)正日益得到廣泛的應用, 隨著嵌入式系統(tǒng)的研究和應用的進一步深入, 嵌入式系統(tǒng)將向網(wǎng)絡化、智能化、規(guī)范化、集成化方向發(fā)展, 在嵌入式網(wǎng)絡通信中, 網(wǎng)絡擁塞容易造成數(shù)據(jù)傳輸、抖動和吞吐量等QoS(Quality of Service) 性能指標下降[1]。為了提升嵌入式網(wǎng)絡性能,近幾年對網(wǎng)絡擁塞問題及解決辦法的研究也日益增多,如文獻[2-4]就是從嵌入式網(wǎng)絡通信不同應用中的網(wǎng)絡擁塞問題進行研究。該文從嵌入式Linux技術的應用開發(fā)基礎出發(fā),提出一種基于Select函數(shù)[5-7]的嵌入式網(wǎng)絡通信信息轉發(fā)機制,很好地改善了網(wǎng)絡擁塞問題,實現(xiàn)對嵌入式網(wǎng)絡通信性能的提升。

1 信息轉發(fā)機制的思路

在嵌入式網(wǎng)絡應用系統(tǒng)中,服務器常常需要同時監(jiān)視多個用戶,即若干個 I/O 通道,等待來自其中任何一個通道的輸入數(shù)據(jù)并作出反應。Linux把一切對socket的操作視為對文件的操作,當多個用戶連接時,也就意味著多個文件被打開。當已打開文件是常規(guī)文件時,從文件的讀出宏觀上是同步的,只要尚未讀到文件的末尾,雖然啟動讀操作的進程也可能受阻而進入睡眠,等待用戶發(fā)送信息,但是這個進程在一個有限的短時期以后一定會被喚醒,這個時期的長短在很大程度上是可預測的。如果已經(jīng)信息發(fā)送完,則更是立即就可知道。可是,對于多用戶同時連接就會出現(xiàn)網(wǎng)絡阻塞。

為了實現(xiàn)多方通信,一種方法是系統(tǒng)采用查詢方式輪流查詢各個通道,就是把應用進程先通過系統(tǒng)調(diào)用 fcntl( )使通道的O_NONBLOCK 標志位設成1,然后再通過系統(tǒng)調(diào)用read( ),此時如果沒有數(shù)據(jù)可讀就會立即返回-1,而不會進入睡眠。這種方法從應用進程本身的角度看雖然可以達到目的,但是從系統(tǒng)的角度看卻大大降低了系統(tǒng)的效率,在多數(shù)情況下是不可接受的。另外一個方法利用進程間通信機制中的報文隊列,用一個報文隊列來作為輸入數(shù)據(jù)的匯集點。但是Linux為每個用戶設立一個服務進程,這個進程就監(jiān)視用戶一個通道,只要有輸入就把它轉換成報文,并發(fā)送到指定的報文隊列中,在相反的方面上,對來自進程間通信管道的數(shù)據(jù)也可以作相似的處理。這樣方法雖好,但系統(tǒng)中多了兩個進程,增加了進程調(diào)度的負擔,也會降低系統(tǒng)的效率。

因此,綜合上面的方法,最好的方法是把進程的單一目標的睡眠等待變成多目標的睡眠等待實現(xiàn)信息轉發(fā)機制。這樣只要應用進程說明確定好等待的目標是哪幾個通道,當這幾個通道中的任何一個有輸入數(shù)據(jù)時,相應的設備驅動程序就會把睡眠中的進程喚醒。這樣,既達到了嵌入式多方通信的目標,又保持了系統(tǒng)較高的效率。

2 轉發(fā)機制的設計

2.1 底層函數(shù)設計

(1)永遠等待下去:僅在有一個描述字準備好I/O時才返回。為此,把該參數(shù)設置為空指針。

(2)等待一段固定時間:在有一個描述字準備好I/O時返回,但是不超過由該參數(shù)所指向的timeval結構中指定的秒數(shù)和微秒數(shù)。

(3)根本不等待:檢查描述字后立即返回,這稱為輪詢。為此,該參數(shù)必須指向一個timeval結構,而且其中的定時器值必須為0。

中間的三個參數(shù)readset、writeset和exceptset指定要讓內(nèi)核測試讀、寫和異常條件的描述字。如果某一個的條件不感興趣,就可以把它設為空指針。struct fd_set可以理解為一個集合,這個集合中存放的是文件描述符,可通過以下四個宏進行設置:

(1)清空文件描述符集合:void FD_ZERO(fd_set *fdset)。

(2)將一個給定的文件描述符加入集合之中:void FD_SET(int fd, fd_set *fdset)。

(3)將一個給定的文件描述符從集合中刪除:void FD_CLR(int fd, fd_set *fdset)。

(4)檢查集合中指定的文件描述符是否可以讀寫:int FD_ISSET(int fd, fd_set *fdset)。

目前支持的異常條件只有兩個:

(1)某個套接口的帶外數(shù)據(jù)的到達。

(2)某個已置為分組方式的偽終端存在可從其主端讀取的控制狀態(tài)信息。

第一個參數(shù)maxfdp1指定待測試的描述字個數(shù),它的值是待測試的最大描述字加1(因此把該參數(shù)命名為maxfdp1),描述字0、1、2...maxfdp1-1均將被測試。

2.2 具體設計與實現(xiàn)

2.2.1 總體設計流程

本設計實現(xiàn)的是多用戶之間通信的功能。多用戶之間信息轉發(fā)的機制建立在服務器用戶信息管理的基礎上,設計的一種實時通信方式。操作流程如圖1所示。

2.2.2 實現(xiàn)的核心代碼

本系統(tǒng)信息轉發(fā)機制部分核心代碼如2所示,服務器管理128個用戶連接請求,以select函數(shù)待其管理,當有用戶發(fā)送請求時,select函數(shù)管理的文件描述符集合中的某一位就會發(fā)生變化,select返回值改變,從而建立通信通道。

南靖县| 黑龙江省| 磐石市| 横峰县| 庐江县| 奉贤区| 古蔺县| 庆云县| 东山县| 马关县| 兰西县| 开江县| 锡林郭勒盟| 博客| 宁武县| 兴化市| 东乡县| 尚志市| 巍山| 萝北县| 淳安县| 五台县| 迭部县| 横山县| 城固县| 麻江县| 东阳市| 安康市| 淮滨县| 克拉玛依市| 石泉县| 南平市| 军事| 太仆寺旗| 华亭县| 双城市| 揭西县| 万荣县| 黄浦区| 白城市| 工布江达县|