两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

基于嵌入式系統(tǒng)的網(wǎng)絡(luò)交互體系及網(wǎng)絡(luò)交互方法

文檔序號(hào):6366899閱讀:225來源:國(guó)知局
專利名稱:基于嵌入式系統(tǒng)的網(wǎng)絡(luò)交互體系及網(wǎng)絡(luò)交互方法
技術(shù)領(lǐng)域
本發(fā)明涉及嵌入式系統(tǒng),特別涉及ー種基于嵌入式系統(tǒng)的網(wǎng)絡(luò)交互體系及網(wǎng)絡(luò)交
互方法。
背景技術(shù)
當(dāng)前計(jì)算機(jī)系統(tǒng)發(fā)展的趨勢(shì)是體積的減小,于是便出現(xiàn)了掌上電腦和與之適應(yīng)的嵌入式系統(tǒng)。嵌入式系統(tǒng)為ー種計(jì)算機(jī)操作系統(tǒng),當(dāng)其運(yùn)行在如掌上電腦ー類的計(jì)算機(jī)上,往往具有實(shí)時(shí)系統(tǒng)的特征,但嵌入式系統(tǒng)在體積、內(nèi)存容量以及電源等方面受到限制。這就要求操作系統(tǒng)和應(yīng)用程序必須有效地對(duì)內(nèi)存進(jìn)行管理。由于嵌入式系統(tǒng)一般不使用虛擬儲(chǔ)存技術(shù),開發(fā)人員往往僅能對(duì)有限的物理內(nèi)存做適應(yīng)開發(fā)。現(xiàn)有技術(shù)的處理器或處理器核能夠在兩種模式下運(yùn)行,即內(nèi)核態(tài)和用戶態(tài)。當(dāng)嵌入式系統(tǒng)通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核態(tài)時(shí),處理器執(zhí)行內(nèi)核代碼。完成嵌入式系統(tǒng)的ー些功能。當(dāng)嵌入式系統(tǒng)進(jìn)入內(nèi)核態(tài)時(shí),應(yīng)用程序的上下文將從當(dāng)前執(zhí)行的處理器或處理內(nèi)核上切換出去,即現(xiàn)有技術(shù)的嵌入式系統(tǒng)采用了“上下文切換”來支持內(nèi)核態(tài)與用戶態(tài)的切換。這種上下文切換機(jī)制帶來了許多物理內(nèi)存上的開銷,尤其是對(duì)于ー些操作系統(tǒng)密集型應(yīng)用,若頻繁進(jìn)行上下文切換對(duì)性能有較大的影響,降低嵌入式系統(tǒng)的運(yùn)行速度。為了在嵌入式系統(tǒng)的網(wǎng)絡(luò)交互方面克服上述問題,當(dāng)前的許多嵌入式系統(tǒng)已將網(wǎng)絡(luò)驅(qū)動(dòng)及網(wǎng)絡(luò)協(xié)議棧從內(nèi)核態(tài)實(shí)現(xiàn)變?yōu)樵谟脩魬B(tài)實(shí)現(xiàn),一般的網(wǎng)絡(luò)應(yīng)用程序可通過修改其內(nèi)部代碼以支持網(wǎng)絡(luò)協(xié)議棧,其基于的網(wǎng)絡(luò)交互體系包括網(wǎng)絡(luò)接ロ ;實(shí)現(xiàn)于用戶態(tài)的網(wǎng)絡(luò)驅(qū)動(dòng),將消息讀取至網(wǎng)絡(luò)接ロ ;實(shí)現(xiàn)于用戶態(tài)的網(wǎng)絡(luò)協(xié)議棧,包括多個(gè)特定的網(wǎng)絡(luò)協(xié)議層;IO接ロ,被安排用于從網(wǎng)絡(luò)應(yīng)用程序接收消息與向網(wǎng)絡(luò)應(yīng)用程序傳遞消息;所述的消息為攜帶為由特定網(wǎng)絡(luò)協(xié)議層執(zhí)行的通用命令。這種將網(wǎng)絡(luò)驅(qū)動(dòng)以及網(wǎng)絡(luò)協(xié)議棧實(shí)現(xiàn)在用戶態(tài)的嵌入式系統(tǒng)能夠在很大程度上減少了內(nèi)核態(tài)與用戶態(tài)之間的上下文切換,縮短了數(shù)據(jù)的傳遞路徑,并且提高了網(wǎng)絡(luò)交互性能,嵌入式系統(tǒng)的內(nèi)存也得到了有效的利用。但此種嵌入式系統(tǒng)的網(wǎng)絡(luò)驅(qū)動(dòng)無法與內(nèi)核網(wǎng)絡(luò)協(xié)議棧銜接。由于ー些網(wǎng)絡(luò)應(yīng)用程序(包括網(wǎng)絡(luò)調(diào)試工具)無法修改其內(nèi)部代碼,故僅支持內(nèi)核協(xié)議棧,網(wǎng)絡(luò)驅(qū)動(dòng)無法直接與這些網(wǎng)絡(luò)應(yīng)用程序進(jìn)行數(shù)據(jù)交換。因此,這種將網(wǎng)絡(luò)驅(qū)動(dòng)以及網(wǎng)絡(luò)協(xié)議棧實(shí)現(xiàn)在用戶態(tài)的嵌入式系統(tǒng)會(huì)導(dǎo)致部分網(wǎng)絡(luò)應(yīng)用程序無法使用
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種基于嵌入式系統(tǒng)的網(wǎng)絡(luò)交互體系及網(wǎng)絡(luò)交互方法,能夠?qū)τ脩魬B(tài)網(wǎng)絡(luò)驅(qū)動(dòng)與內(nèi)核網(wǎng)絡(luò)協(xié)議棧進(jìn)行銜接,實(shí)現(xiàn)了僅支持內(nèi)核網(wǎng)絡(luò)協(xié)議棧的網(wǎng)絡(luò)應(yīng)用程序也能在用戶態(tài)網(wǎng)絡(luò)驅(qū)動(dòng)場(chǎng)景下使用,該類型的嵌入式系統(tǒng)得到了普適。
一種基于嵌入式系統(tǒng)的網(wǎng)絡(luò)交互體系,所述的嵌入式系統(tǒng)能夠通過系統(tǒng)調(diào)用進(jìn)入用戶態(tài)以及內(nèi)核態(tài),所述的網(wǎng)絡(luò)交互體系包括用戶態(tài)中的網(wǎng)絡(luò)接ロ、網(wǎng)絡(luò)驅(qū)動(dòng)、用戶態(tài)網(wǎng)絡(luò)協(xié)議棧以及第一 IO接ロ ;第二 IO接ロ以及驅(qū)動(dòng)接ロ;核心態(tài)中的內(nèi)核網(wǎng)絡(luò)協(xié)議棧、虛擬網(wǎng)絡(luò)驅(qū)動(dòng)以及虛擬字符設(shè)備驅(qū)動(dòng);以及,共享內(nèi)存;所述的第一 IO接ロ以及第ニ接ロ用于從網(wǎng)絡(luò)應(yīng)用程序接收消息以及向網(wǎng)絡(luò)應(yīng)用程序傳遞消息;其中,通過第一 IO接ロ進(jìn)行交互的消息攜帯由用戶態(tài)網(wǎng)絡(luò)協(xié)議棧的特定網(wǎng)絡(luò)協(xié)議層執(zhí)行的通用命令,通過第二 IO接ロ進(jìn)行交互的消息攜帯由內(nèi)核網(wǎng)絡(luò)協(xié)議棧的特 定網(wǎng)絡(luò)協(xié)議層執(zhí)行的通用命令;所述的用戶態(tài)網(wǎng)絡(luò)協(xié)議棧,處理用于執(zhí)行的通用命令,依據(jù)通用命令生成由網(wǎng)絡(luò)驅(qū)動(dòng)執(zhí)行的特定命令;所述的內(nèi)核網(wǎng)絡(luò)協(xié)議棧,處理用于執(zhí)行的通用命令,依據(jù)通用命令生成由虛擬網(wǎng)絡(luò)驅(qū)動(dòng)執(zhí)行的特定命令;虛擬網(wǎng)絡(luò)驅(qū)動(dòng),執(zhí)行內(nèi)核網(wǎng)絡(luò)協(xié)議棧的特定命令,訪問內(nèi)核網(wǎng)絡(luò)協(xié)議棧并實(shí)現(xiàn)共享內(nèi)存與內(nèi)核網(wǎng)絡(luò)協(xié)議棧之間的消息交互;驅(qū)動(dòng)接ロ,訪問共享內(nèi)存并實(shí)現(xiàn)網(wǎng)絡(luò)驅(qū)動(dòng)與共享內(nèi)存之間的消息交互;以及,虛擬字符設(shè)備驅(qū)動(dòng),用于向驅(qū)動(dòng)接ロ提供內(nèi)核態(tài)的控制接ロ以及將所述的共享內(nèi)存映射至用戶態(tài)的地址空間。下面介紹本發(fā)明的優(yōu)選技術(shù)方案。具體地,所述的第二 IO接ロ為套接字接ロ。進(jìn)ー步地,所述的共享內(nèi)存被組織成循環(huán)緩沖區(qū),并采用無鎖的方式進(jìn)行讀寫。進(jìn)ー步地,所述的驅(qū)動(dòng)接ロ通過調(diào)用vn_put函數(shù)以及vn_get函數(shù)讀取共享內(nèi)存中的數(shù)據(jù)。進(jìn)ー步地,虛擬字符設(shè)備驅(qū)動(dòng)的控制接ロ包括ioctl接ロ以及_ap接ロ。ー種利用如上所述網(wǎng)絡(luò)交互體系實(shí)現(xiàn)的網(wǎng)絡(luò)交互方法,包括以下步驟(I)對(duì)網(wǎng)絡(luò)交互體系的初始化,加載虛擬絡(luò)驅(qū)動(dòng)以及虛擬字符設(shè)備驅(qū)動(dòng),建立共享內(nèi)存;(2)當(dāng)所述的消息攜帯由用戶態(tài)網(wǎng)絡(luò)協(xié)議棧執(zhí)行的通用命令,消息的接收或發(fā)送包括步驟在網(wǎng)絡(luò)接ロ或第一 IO接口中載入消息;讀取所述的消息;基于所述的消息,對(duì)網(wǎng)絡(luò)驅(qū)動(dòng)以及用戶態(tài)網(wǎng)絡(luò)協(xié)議棧發(fā)起操作;向網(wǎng)絡(luò)應(yīng)用程序發(fā)送消息或從網(wǎng)絡(luò)應(yīng)用程序傳送消息,并在完成操作時(shí)在網(wǎng)絡(luò)接ロ或第一 IO接口中載入響應(yīng);以及,讀取所述的響應(yīng);(3)當(dāng)所述的消息攜帯由內(nèi)核網(wǎng)絡(luò)協(xié)議棧執(zhí)行的通用命令,消息的接收或發(fā)送包括步驟在網(wǎng)絡(luò)接ロ或第二 IO接口中載入消息;
讀取所述的消息;基于所述的消息,對(duì)網(wǎng)絡(luò)驅(qū)動(dòng)、驅(qū)動(dòng)接ロ、共享內(nèi)存、虛擬網(wǎng)絡(luò)驅(qū)動(dòng)以及內(nèi)核網(wǎng)絡(luò)協(xié)議棧發(fā)起操作;向網(wǎng)絡(luò)應(yīng)用程序發(fā)送消息或從網(wǎng)絡(luò)應(yīng)用程序傳送消息,并在完成操作時(shí)在網(wǎng)絡(luò)接ロ或第二 IO接口中載入響應(yīng);以及,讀取所述的響應(yīng)。在步驟(I)中,所述的建立共享內(nèi)存,包括步驟(I. I)申請(qǐng)兩段各512個(gè)頁(yè)面大小的空間,計(jì)算出每個(gè)頁(yè)的頁(yè)框號(hào),將這些頁(yè)全設(shè)置成為保留頁(yè);(I. 2)網(wǎng)絡(luò)驅(qū)動(dòng)通過驅(qū)動(dòng)接ロ控制所述的虛擬字符設(shè)備驅(qū)動(dòng),將所述兩段空間映射到用戶態(tài)的地址空間。進(jìn)ー步地,所述的共享內(nèi)存包括發(fā)送緩沖區(qū)以及接收緩沖區(qū),在步驟(3)中,所述的向網(wǎng)絡(luò)應(yīng)用程序發(fā)送消息,包括步驟網(wǎng)絡(luò)驅(qū)動(dòng)調(diào)用驅(qū)動(dòng)接ロ檢查共享內(nèi)存的接收緩沖區(qū)是否滿,若滿則丟包,不滿則通過驅(qū)動(dòng)接ロ將消息發(fā)送至接收緩沖區(qū);以及,內(nèi)核網(wǎng)絡(luò)協(xié)議棧調(diào)用虛擬網(wǎng)絡(luò)驅(qū)動(dòng)輪詢接收緩沖區(qū),通過虛擬網(wǎng)絡(luò)驅(qū)動(dòng)讀取接收緩沖區(qū)內(nèi)的消息并與網(wǎng)絡(luò)應(yīng)用程序進(jìn)行消息交互;所述的從網(wǎng)絡(luò)應(yīng)用程序傳送消息,包括步驟內(nèi)核網(wǎng)絡(luò)協(xié)議棧調(diào)用虛擬網(wǎng)絡(luò)驅(qū)動(dòng)檢查共享內(nèi)存的發(fā)送緩沖區(qū)是否滿,若滿則丟包,不滿則通過虛擬網(wǎng)絡(luò)驅(qū)動(dòng)將消息放入共享內(nèi)存的發(fā)送緩沖區(qū);以及,網(wǎng)絡(luò)驅(qū)動(dòng)調(diào)用驅(qū)動(dòng)接ロ輪詢發(fā)送緩沖區(qū),通過驅(qū)動(dòng)接ロ讀取發(fā)送緩沖區(qū)內(nèi)的消息并與網(wǎng)絡(luò)接ロ進(jìn)行消息交互。更進(jìn)一歩地,所述的輪詢包括步驟a、在共享內(nèi)存上建立工作隊(duì)列;b、將輪詢?nèi)蝿?wù)放入到工作隊(duì)列;C、檢查共享內(nèi)存的緩沖區(qū)是否為空,如果未空則一直讀取消息;如果共享內(nèi)存的緩沖區(qū)為空,則將輪詢?nèi)蝿?wù)放入工作隊(duì)列等待指定的時(shí)間。為了將網(wǎng)絡(luò)驅(qū)動(dòng)收到的消息傳遞給內(nèi)核網(wǎng)絡(luò)協(xié)議棧(即消息的接收)或?qū)?nèi)核上層網(wǎng)絡(luò)協(xié)議棧需要發(fā)送的網(wǎng)絡(luò)消息包傳遞給用戶態(tài)網(wǎng)絡(luò)驅(qū)動(dòng)程序(即消息的發(fā)送),首先得有ー種內(nèi)核態(tài)與用戶態(tài)的通訊方式。由于傳統(tǒng)的內(nèi)核態(tài)與用戶態(tài)通訊方式是系統(tǒng)調(diào)用,頻繁地系統(tǒng)調(diào)用會(huì)帶來頻繁的上下文切換,帶來較大的性能損失,另外由于內(nèi)核態(tài)和用戶態(tài)地址空間的不同,通過系統(tǒng)調(diào)用的方式在兩態(tài)間傳遞消息必須進(jìn)行消息拷貝,這又會(huì)帶來性能損失,為了避免這些性能損失,采用建立共享內(nèi)存的方式實(shí)現(xiàn)內(nèi)核態(tài)與用戶態(tài)的通訊,大大減少了系統(tǒng)調(diào)用的次數(shù)與消息的拷貝次數(shù)。同時(shí),為了優(yōu)化共享內(nèi)存,可將所述的共享內(nèi)存組織為ー循環(huán)緩沖區(qū),并采用無鎖方式進(jìn)行讀寫,能夠避免使用互斥鎖帶來的開銷。但這種讀寫方式必須使用輪詢方式來查看緩沖區(qū)是否為滿或?yàn)榭?。但一般的輪詢由于一直檢測(cè)緩沖區(qū)會(huì)導(dǎo)致CPU負(fù)荷過重,造成很大的性能損失。因此,本發(fā)明在傳統(tǒng)的輪詢方式上進(jìn)行優(yōu)化,在緩沖區(qū)的讀取端讀端若有消息則移植讀取,、直到緩沖區(qū)空,即將讀取操作放入至ー個(gè)工作隊(duì)列等候,并在指定的時(shí)間間隔后重啟讀取操作,這時(shí)緩沖區(qū)若有新的消息則開始讀消息;若此時(shí)緩沖區(qū)再空,則再次將讀取操作放入工作隊(duì)列中等待指定的時(shí)間,這樣就避免了持續(xù)讀取操作帶來的CPU性能開銷。實(shí)現(xiàn)內(nèi)核態(tài)與用戶態(tài)之間的通訊需要將消息與上層網(wǎng)絡(luò)協(xié)議棧銜接起來,通過虛擬網(wǎng)絡(luò)驅(qū)動(dòng)能夠?qū)崿F(xiàn)內(nèi)核網(wǎng)絡(luò)協(xié)議棧與用戶態(tài)網(wǎng)絡(luò)驅(qū)動(dòng)的消息交互虛擬網(wǎng)絡(luò)驅(qū)動(dòng)可按網(wǎng)絡(luò)驅(qū)動(dòng)模型編寫,實(shí)現(xiàn)消息的收發(fā)。虛擬字符設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)了對(duì)系統(tǒng)控制,包括建立共享內(nèi)存,用戶態(tài)網(wǎng)絡(luò)驅(qū)動(dòng)可通過操作該虛擬字符設(shè)備驅(qū)動(dòng)對(duì)應(yīng)的設(shè)備文件對(duì)系統(tǒng)進(jìn)行控制,如ioctl以及_ap,建立的共享內(nèi)存申請(qǐng)分配也是通過該字符設(shè)備驅(qū)動(dòng)的_ap方法實(shí)現(xiàn)。本發(fā)明能夠在網(wǎng)絡(luò)驅(qū)動(dòng)下實(shí)現(xiàn)內(nèi)核網(wǎng)絡(luò)功能,基于傳統(tǒng)套接字的網(wǎng)絡(luò)應(yīng)用程序能夠在用戶態(tài)網(wǎng)絡(luò)驅(qū)動(dòng)下執(zhí)行,同時(shí)保證很高的性能;本發(fā)明將用戶態(tài)的網(wǎng)絡(luò)接ロ與內(nèi)核網(wǎng)絡(luò)協(xié)議棧進(jìn)行銜接,實(shí)現(xiàn)了傳統(tǒng)網(wǎng)絡(luò)應(yīng)用程序也能在用戶態(tài)網(wǎng)絡(luò)驅(qū)動(dòng)下使用,并且優(yōu)化了網(wǎng)絡(luò)通訊的性能。


圖I是本發(fā)明網(wǎng)絡(luò)交互體系的結(jié)構(gòu)示意圖;圖2是本發(fā)明網(wǎng)絡(luò)交互方法的流程示意圖;圖3是本發(fā)明網(wǎng)絡(luò)交互方法中消息接收流程示意圖;圖4是本發(fā)明網(wǎng)絡(luò)交互方法中消息發(fā)送流程示意圖。
具體實(shí)施例方式下面結(jié)合附圖詳細(xì)介紹本發(fā)明的具體實(shí)施方式
。一種基于嵌入式系統(tǒng)的網(wǎng)絡(luò)交互體系,如圖I所示,包括系統(tǒng)用戶態(tài)中的網(wǎng)絡(luò)接ロ、網(wǎng)絡(luò)驅(qū)動(dòng)、第一 IO接ロ、第二 IO接ロ、驅(qū)動(dòng)接ロ以及用戶態(tài)網(wǎng)絡(luò)協(xié)議棧,系統(tǒng)內(nèi)核態(tài)中的虛擬字符設(shè)備驅(qū)動(dòng)、虛擬網(wǎng)絡(luò)驅(qū)動(dòng)以及內(nèi)核網(wǎng)絡(luò)協(xié)議棧,共享內(nèi)存。所述的用戶態(tài)網(wǎng)絡(luò)協(xié)議棧以及內(nèi)核網(wǎng)絡(luò)協(xié)議棧均包括多個(gè)特定的網(wǎng)絡(luò)協(xié)議層。由于絕大部分的網(wǎng)絡(luò)應(yīng)用程序(下稱一類網(wǎng)絡(luò)應(yīng)用程序)支持用戶態(tài)網(wǎng)絡(luò)協(xié)議棧,且實(shí)現(xiàn)于用戶態(tài)的網(wǎng)絡(luò)驅(qū)動(dòng)能直接訪問用戶態(tài)網(wǎng)絡(luò)協(xié)議棧,因此,所述的網(wǎng)絡(luò)交互體系在一類網(wǎng)絡(luò)應(yīng)用程序的網(wǎng)絡(luò)交互中能夠在用戶態(tài)直接實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用程序的網(wǎng)絡(luò)交互過程,具體地,網(wǎng)絡(luò)交互體系包括第一 IO接ロ,用于從ー類網(wǎng)絡(luò)應(yīng)用程序接收消息以及向一類網(wǎng)絡(luò)應(yīng)用程序傳遞消息;所述的消息攜帯由用戶態(tài)網(wǎng)絡(luò)協(xié)議棧的特定網(wǎng)絡(luò)協(xié)議層執(zhí)行的通用命令;用戶態(tài)網(wǎng)絡(luò)協(xié)議棧,處理用于執(zhí)行的通用命令,依據(jù)通用命令生成由網(wǎng)絡(luò)驅(qū)動(dòng)執(zhí) 行的特定命令;網(wǎng)絡(luò)驅(qū)動(dòng),執(zhí)行用戶態(tài)網(wǎng)絡(luò)協(xié)議棧的特定命令,訪問用戶態(tài)網(wǎng)絡(luò)協(xié)議棧并實(shí)現(xiàn)網(wǎng)絡(luò)接ロ與網(wǎng)絡(luò)協(xié)議棧之間的消息交互。在用戶態(tài)的網(wǎng)絡(luò)應(yīng)用程序中,存在部分的網(wǎng)絡(luò)應(yīng)用程序(下稱ニ類網(wǎng)絡(luò)應(yīng)用程序)僅支持內(nèi)核網(wǎng)絡(luò)協(xié)議棧,且實(shí)現(xiàn)于用戶態(tài)的網(wǎng)絡(luò)驅(qū)動(dòng)不能直接訪問內(nèi)核網(wǎng)絡(luò)協(xié)議棧,因此,所述的網(wǎng)絡(luò)交互體系在ニ類網(wǎng)絡(luò)應(yīng)用程序的網(wǎng)絡(luò)交互中須在內(nèi)核態(tài)實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用程序的網(wǎng)絡(luò)交互過程。具體地,網(wǎng)絡(luò)交互體系包括第二 IO接ロ,用于從ニ類網(wǎng)絡(luò)應(yīng)用程序接收消息以及向ニ類 網(wǎng)絡(luò)應(yīng)用程序傳遞消息;所述的消息攜帯由內(nèi)核網(wǎng)絡(luò)協(xié)議棧的特定網(wǎng)絡(luò)協(xié)議層執(zhí)行的通用命令;內(nèi)核網(wǎng)絡(luò)協(xié)議棧,處理用于執(zhí)行的通用命令,依據(jù)通用命令生成由虛擬網(wǎng)絡(luò)驅(qū)動(dòng)執(zhí)行的特定命令;虛擬網(wǎng)絡(luò)驅(qū)動(dòng),執(zhí)行內(nèi)核網(wǎng)絡(luò)協(xié)議棧的特定命令,訪問內(nèi)核網(wǎng)絡(luò)協(xié)議棧并實(shí)現(xiàn)共享內(nèi)存與內(nèi)核網(wǎng)絡(luò)協(xié)議棧之間的消息交互;驅(qū)動(dòng)接ロ,訪問共享內(nèi)存并實(shí)現(xiàn)網(wǎng)絡(luò)驅(qū)動(dòng)與共享內(nèi)存之間的消息交互;以及,虛擬字符設(shè)備驅(qū)動(dòng),用于向驅(qū)動(dòng)接ロ提供內(nèi)核態(tài)的控制接ロ以及將所述的共享內(nèi)存映射至用戶態(tài)的地址空間。所述的共享內(nèi)存由兩塊內(nèi)存構(gòu)成,一塊用于作為發(fā)送緩沖區(qū),另ー塊用于作為接收緩沖區(qū)。兩塊緩沖區(qū)均被組織成循環(huán)緩沖區(qū),并采用無鎖的方式進(jìn)行讀寫,這樣能夠避免使用互斥鎖帶來的開銷。以共享內(nèi)存的方式實(shí)現(xiàn)內(nèi)核態(tài)與用戶態(tài)的通信,能夠大大減少系統(tǒng)調(diào)用的次數(shù)與數(shù)據(jù)的拷貝次數(shù)。所述的第二 IO接ロ為套接字接ロ。為了實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用程序與內(nèi)核網(wǎng)絡(luò)協(xié)議棧進(jìn)行消息交互,創(chuàng)建ー個(gè)套接字接ロ,并設(shè)置套接字接ロ的設(shè)置通訊類型(如TCP、UDP、廣播等)。在網(wǎng)絡(luò)應(yīng)用程序與內(nèi)核網(wǎng)絡(luò)協(xié)議棧進(jìn)行消息交互時(shí),調(diào)用send、recv等用戶態(tài)套接字庫(kù)函數(shù)進(jìn)行消息交互。在本實(shí)施例中,由于用戶態(tài)的網(wǎng)絡(luò)驅(qū)動(dòng)無法對(duì)網(wǎng)絡(luò)交互體系內(nèi)核態(tài)的部分進(jìn)行控制,也無法直接對(duì)共享內(nèi)存進(jìn)行訪問,因此本體系首先設(shè)置了驅(qū)動(dòng)接ロ,能夠?qū)崿F(xiàn)網(wǎng)絡(luò)驅(qū)動(dòng)對(duì)共享內(nèi)存中數(shù)據(jù)的讀寫。更為具體地,由于網(wǎng)絡(luò)驅(qū)動(dòng)需對(duì)體系數(shù)據(jù)傳遞的控制,驅(qū)動(dòng)接ロ具體需實(shí)現(xiàn)如下功能I、為網(wǎng)絡(luò)驅(qū)動(dòng)提供操作共享內(nèi)存的方法,包括通過該驅(qū)動(dòng)接ロ執(zhí)行vn_put函數(shù)以及vn_get函數(shù),其中,vn_put函數(shù)實(shí)現(xiàn)了將數(shù)據(jù)寫入接收緩沖區(qū)的功能,vn_get函數(shù)實(shí)現(xiàn)了將數(shù)據(jù)從發(fā)送緩沖區(qū)讀取的功能;2、系統(tǒng)初始化,即在網(wǎng)絡(luò)驅(qū)動(dòng)運(yùn)行時(shí),對(duì)內(nèi)核態(tài)中虛擬網(wǎng)絡(luò)驅(qū)動(dòng)以及虛擬字符設(shè)備驅(qū)動(dòng)的程序加載;包括通過該驅(qū)動(dòng)接ロ執(zhí)行vn_init函數(shù),其中,vn_init函數(shù)實(shí)現(xiàn)了系統(tǒng)的初始化,配置共享內(nèi)存的在用戶空間的mac地址,即將共享內(nèi)存映射至用戶態(tài)的地址,并發(fā)送開始收發(fā)命令字。3、封裝屏蔽共享內(nèi)存的內(nèi)部細(xì)節(jié)。由于驅(qū)動(dòng)接ロ無法直接調(diào)用內(nèi)核態(tài)中的文件,為了實(shí)現(xiàn)驅(qū)動(dòng)接ロ的上述功能并進(jìn)一步完善上述功能,本體系還于內(nèi)核態(tài)設(shè)置了虛擬字符設(shè)備驅(qū)動(dòng)。虛擬字符設(shè)備驅(qū)動(dòng)用于向驅(qū)動(dòng)接ロ提供內(nèi)核態(tài)的控制接ロ以及將所述的共享內(nèi)存映射至用戶態(tài)的地址空間;通過驅(qū)動(dòng)接ロ以及虛擬字符設(shè)備驅(qū)動(dòng),實(shí)現(xiàn)于用戶態(tài)的網(wǎng)絡(luò)驅(qū)動(dòng)能夠?qū)?nèi)核態(tài)中相應(yīng)的文件進(jìn)行讀寫特定操作并能夠在內(nèi)核態(tài)中觸發(fā)執(zhí)行表I所示函數(shù)功能。表I函數(shù)及其執(zhí)行功能
權(quán)利要求
1.一種基于嵌入式系統(tǒng)的網(wǎng)絡(luò)交互體系,所述的嵌入式系統(tǒng)能夠通過系統(tǒng)調(diào)用進(jìn)入用戶態(tài)以及內(nèi)核態(tài),其特征在于,所述的網(wǎng)絡(luò)交互體系包括 用戶態(tài)中的網(wǎng)絡(luò)接口、網(wǎng)絡(luò)驅(qū)動(dòng)、用戶態(tài)網(wǎng)絡(luò)協(xié)議棧以及第一 IO接口 ;第二 IO接口以及驅(qū)動(dòng)接口; 核心態(tài)中的內(nèi)核網(wǎng)絡(luò)協(xié)議棧、虛擬網(wǎng)絡(luò)驅(qū)動(dòng)以及虛擬字符設(shè)備驅(qū)動(dòng);以及, 共享內(nèi)存; 所述的第一 IO接口以及第二接口用于從網(wǎng)絡(luò)應(yīng)用程序接收消息以及向網(wǎng)絡(luò)應(yīng)用程序傳遞消息;其中,通過第一 IO接口進(jìn)行交互的消息攜帶由用戶態(tài)網(wǎng)絡(luò)協(xié)議棧的特定網(wǎng)絡(luò)協(xié)議層執(zhí)行的通用命令,通過第二 IO接口進(jìn)行交互的消息攜帶由內(nèi)核網(wǎng)絡(luò)協(xié)議棧的特定網(wǎng)絡(luò)協(xié)議層執(zhí)行的通用命令; 所述的用戶態(tài)網(wǎng)絡(luò)協(xié)議棧,處理用于執(zhí)行的通用命令,依據(jù)通用命令生成由網(wǎng)絡(luò)驅(qū)動(dòng)執(zhí)行的特定命令; 所述的內(nèi)核網(wǎng)絡(luò)協(xié)議棧,處理用于執(zhí)行的通用命令,依據(jù)通用命令生成由虛擬網(wǎng)絡(luò)驅(qū)動(dòng)執(zhí)行的特定命令; 虛擬網(wǎng)絡(luò)驅(qū)動(dòng),執(zhí)行內(nèi)核網(wǎng)絡(luò)協(xié)議棧的特定命令,訪問內(nèi)核網(wǎng)絡(luò)協(xié)議棧并實(shí)現(xiàn)共享內(nèi)存與內(nèi)核網(wǎng)絡(luò)協(xié)議棧之間的消息交互; 驅(qū)動(dòng)接口,訪問共享內(nèi)存并實(shí)現(xiàn)網(wǎng)絡(luò)驅(qū)動(dòng)與共享內(nèi)存之間的消息交互;以及, 虛擬字符設(shè)備驅(qū)動(dòng),用于向驅(qū)動(dòng)接口提供內(nèi)核態(tài)的控制接口以及將所述的共享內(nèi)存映射至用戶態(tài)的地址空間。
2.如權(quán)利要求I所述的網(wǎng)絡(luò)交互體系,其特征在于,所述的第二IO接口為套接字接口。
3.如權(quán)利要求I所述的網(wǎng)絡(luò)交互體系,其特征在于,所述的共享內(nèi)存被組織成循環(huán)緩沖區(qū),并采用無鎖的方式進(jìn)行讀寫。
4.如權(quán)利要求I所述的網(wǎng)絡(luò)交互體系,其特征在于,所述的驅(qū)動(dòng)接口通過調(diào)用vn_put函數(shù)以及vn_get函數(shù)讀取共享內(nèi)存中的數(shù)據(jù)。
5.如權(quán)利要求I所述的網(wǎng)絡(luò)交互體系,其特征在于,虛擬字符設(shè)備驅(qū)動(dòng)的控制接口包括ioctl接口以及mmap接口。
6.一種利用如權(quán)利要求I所述網(wǎng)絡(luò)交互體系實(shí)現(xiàn)的網(wǎng)絡(luò)交互方法,其特征在于,包括以下步驟 (1)對(duì)網(wǎng)絡(luò)交互體系的初始化,加載虛擬絡(luò)驅(qū)動(dòng)以及虛擬字符設(shè)備驅(qū)動(dòng),建立共享內(nèi)存; (2)當(dāng)所述的消息攜帶由用戶態(tài)網(wǎng)絡(luò)協(xié)議棧執(zhí)行的通用命令,消息的接收或發(fā)送包括步驟 在網(wǎng)絡(luò)接口或第一 IO接口中載入消息; 讀取所述的消息; 基于所述的消息,對(duì)網(wǎng)絡(luò)驅(qū)動(dòng)以及用戶態(tài)網(wǎng)絡(luò)協(xié)議棧發(fā)起操作; 向網(wǎng)絡(luò)應(yīng)用程序發(fā)送消息或從網(wǎng)絡(luò)應(yīng)用程序傳送消息,并在完成操作時(shí)在網(wǎng)絡(luò)接口或第一 IO接口中載入響應(yīng);以及, 讀取所述的響應(yīng); (3)當(dāng)所述的消息攜帶由內(nèi)核網(wǎng)絡(luò)協(xié)議棧執(zhí)行的通用命令,消息的接收或發(fā)送包括步驟 在網(wǎng)絡(luò)接口或第二 IO接口中載入消息; 讀取所述的消息; 基于所述的消息,對(duì)網(wǎng)絡(luò)驅(qū)動(dòng)、驅(qū)動(dòng)接口、共享內(nèi)存、虛擬網(wǎng)絡(luò)驅(qū)動(dòng)以及內(nèi)核網(wǎng)絡(luò)協(xié)議棧發(fā)起操作; 向網(wǎng)絡(luò)應(yīng)用程序發(fā)送消息或從網(wǎng)絡(luò)應(yīng)用程序傳送消息,并在完成操作時(shí)在網(wǎng)絡(luò)接口或第二 IO接口中載入響應(yīng);以及, 讀取所述的響應(yīng)。
7.如權(quán)利要求6所述的網(wǎng)絡(luò)交互方法,其特征在于,在步驟(I)中,所述的建立共享內(nèi)存,包括步驟 (I. D申請(qǐng)兩段各512個(gè)頁(yè)面大小的空間,計(jì)算出每個(gè)頁(yè)的頁(yè)框號(hào),將這些頁(yè)全設(shè)置成為保留頁(yè); (I. 2)網(wǎng)絡(luò)驅(qū)動(dòng)通過驅(qū)動(dòng)接口控制所述的虛擬字符設(shè)備驅(qū)動(dòng),將所述兩段空間映射到用戶態(tài)的地址空間。
8.如權(quán)利要求6所述的網(wǎng)絡(luò)交互方法,其特征在于,所述的共享內(nèi)存包括發(fā)送緩沖區(qū)以及接收緩沖區(qū),在步驟(3)中, 所述的向網(wǎng)絡(luò)應(yīng)用程序發(fā)送消息,包括步驟 網(wǎng)絡(luò)驅(qū)動(dòng)調(diào)用驅(qū)動(dòng)接口檢查共享內(nèi)存的接收緩沖區(qū)是否滿,若滿則丟包,不滿則通過驅(qū)動(dòng)接口將消息發(fā)送至接收緩沖區(qū);以及, 內(nèi)核網(wǎng)絡(luò)協(xié)議棧調(diào)用虛擬網(wǎng)絡(luò)驅(qū)動(dòng)輪詢接收緩沖區(qū),通過虛擬網(wǎng)絡(luò)驅(qū)動(dòng)讀取接收緩沖區(qū)內(nèi)的消息并與網(wǎng)絡(luò)應(yīng)用程序進(jìn)行消息交互; 所述的從網(wǎng)絡(luò)應(yīng)用程序傳送消息,包括步驟 內(nèi)核網(wǎng)絡(luò)協(xié)議棧調(diào)用虛擬網(wǎng)絡(luò)驅(qū)動(dòng)檢查共享內(nèi)存的發(fā)送緩沖區(qū)是否滿,若滿則丟包,不滿則通過虛擬網(wǎng)絡(luò)驅(qū)動(dòng)將消息放入共享內(nèi)存的發(fā)送緩沖區(qū);以及, 網(wǎng)絡(luò)驅(qū)動(dòng)調(diào)用驅(qū)動(dòng)接口輪詢發(fā)送緩沖區(qū),通過驅(qū)動(dòng)接口讀取發(fā)送緩沖區(qū)內(nèi)的消息并與網(wǎng)絡(luò)接口進(jìn)行消息交互。
9.如權(quán)利要求8所述的網(wǎng)絡(luò)交互方法,其特征在于,所述的輪詢包括步驟 a、在共享內(nèi)存上建立工作隊(duì)列; b、將輪詢?nèi)蝿?wù)放入到工作隊(duì)列; C、檢查共享內(nèi)存的緩沖區(qū)是否為空,如果未空則一直讀取消息;如果共享內(nèi)存的緩沖區(qū)為空,則將輪詢?nèi)蝿?wù)放入工作隊(duì)列等待指定的時(shí)間。
全文摘要
本發(fā)明公開了一種基于嵌入式系統(tǒng)的網(wǎng)絡(luò)交互體系及網(wǎng)絡(luò)交互方法,所述的網(wǎng)絡(luò)交互體系包括用戶態(tài)中的網(wǎng)絡(luò)接口、網(wǎng)絡(luò)驅(qū)動(dòng)、用戶態(tài)網(wǎng)絡(luò)協(xié)議棧以及第一IO接口;第二IO接口以及驅(qū)動(dòng)接口;核心態(tài)中的內(nèi)核網(wǎng)絡(luò)協(xié)議棧、虛擬網(wǎng)絡(luò)驅(qū)動(dòng)以及虛擬字符設(shè)備驅(qū)動(dòng);以及,共享內(nèi)存。所述的網(wǎng)絡(luò)交互方法包括以下步驟初始化;以及當(dāng)消息攜帶由用戶態(tài)網(wǎng)絡(luò)協(xié)議棧執(zhí)行的通用命令時(shí),消息的接收與發(fā)送;當(dāng)消息攜帶由內(nèi)核網(wǎng)絡(luò)協(xié)議棧執(zhí)行的通用命令時(shí),消息的接收與發(fā)送。本發(fā)明將用戶態(tài)的網(wǎng)絡(luò)驅(qū)動(dòng)與內(nèi)核網(wǎng)絡(luò)協(xié)議棧進(jìn)行銜接,實(shí)現(xiàn)了傳統(tǒng)網(wǎng)絡(luò)應(yīng)用程序也能在用戶態(tài)網(wǎng)絡(luò)驅(qū)動(dòng)下使用,優(yōu)化了網(wǎng)絡(luò)通訊的性能。
文檔編號(hào)G06F15/173GK102662910SQ201210081358
公開日2012年9月12日 申請(qǐng)日期2012年3月23日 優(yōu)先權(quán)日2012年3月23日
發(fā)明者王總輝, 陳文智, 黃大鵬 申請(qǐng)人:浙江大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
饶阳县| 东安县| 遂溪县| 杭锦旗| 全州县| 唐山市| 浦城县| 青河县| 友谊县| 甘肃省| 神池县| 汶上县| 抚远县| 新干县| 青州市| 新郑市| 无极县| 东海县| 突泉县| 高雄县| 贵定县| 四会市| 武安市| 平塘县| 双牌县| 伊通| 昭平县| 中山市| 罗江县| 澄江县| 宝山区| 元朗区| 三台县| 湛江市| 黄梅县| 桂平市| 西和县| 仙居县| 上栗县| 金山区| 甘孜县|