欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

支持linux的硬件抽象層的虛擬網(wǎng)卡設(shè)計方法

文檔序號:6427301閱讀:194來源:國知局
專利名稱:支持linux 的硬件抽象層的虛擬網(wǎng)卡設(shè)計方法
技術(shù)領(lǐng)域
本發(fā)明屬于嵌入式系統(tǒng)設(shè)計領(lǐng)域,具體涉及支持Iinux的硬件抽象層中虛擬網(wǎng)卡設(shè)備的設(shè)計方法。
背景技術(shù)
硬件抽象層(簡稱HAL)旨在對驅(qū)動框架分層,將設(shè)備無關(guān)部分和設(shè)備相關(guān)部分分開。以網(wǎng)絡(luò)設(shè)備為例,通過設(shè)計一個公共的、抽象的虛擬網(wǎng)絡(luò)設(shè)備,將原先具體設(shè)備的驅(qū)動分成兩層。虛擬設(shè)備之上(即客戶操作系統(tǒng),簡稱Guest OS)屬于設(shè)備無關(guān)部分,而虛擬設(shè)備與具體設(shè)備之間(即虛擬機監(jiān)控器,簡稱VMM)則屬于設(shè)備相關(guān)部分。設(shè)備無關(guān)部分在各個網(wǎng)絡(luò)設(shè)備之間是通用的,且可以被復(fù)用。當(dāng)為新的網(wǎng)絡(luò)設(shè)備設(shè)計驅(qū)動時,只需改寫設(shè)備相關(guān)部分,即重寫虛擬網(wǎng)絡(luò)設(shè)備與物理網(wǎng)絡(luò)設(shè)備之間的映射。本發(fā)明將虛擬網(wǎng)絡(luò)設(shè)備與具體設(shè)備之間的映射放在VMM中實現(xiàn),而不是在Linux 中,這樣使得linux (Guest OS)屏蔽具體的硬件細(xì)節(jié),硬件細(xì)節(jié)全部在VMM得到處理,而 Iinux作為Guest 0S,只操作虛擬的設(shè)備。通過硬件抽象層中對虛擬網(wǎng)卡的設(shè)計,可以將一個物理網(wǎng)卡映射為多個虛擬網(wǎng)卡,從而使得多個Guest OS可以在橋接的情況下,各使用一個虛擬網(wǎng)卡,同時連接網(wǎng)絡(luò),接收及發(fā)送網(wǎng)絡(luò)包。其具體結(jié)構(gòu)框架見圖1,圖中的Guest OS代表Linux操作系統(tǒng)?,F(xiàn)有的流行虛擬化方案有VMware和Xen,他們均針對網(wǎng)絡(luò)設(shè)備進行了虛擬化。前者主要應(yīng)用于全虛擬化方案,即運行不經(jīng)修改的Guest 0S,對原網(wǎng)絡(luò)設(shè)備驅(qū)動可不加修改的應(yīng)用于虛擬機環(huán)境中;后者采用分離驅(qū)動模型,即多個客戶操作系中一個作為domain 0,具有較高優(yōu)先級,并直接復(fù)用已有網(wǎng)絡(luò)驅(qū)動使用網(wǎng)絡(luò)設(shè)備,其余客戶操作系統(tǒng)通過向 domain 0申請網(wǎng)絡(luò)服務(wù)來上網(wǎng)。但他們均應(yīng)用于PC、服務(wù)器領(lǐng)域,而本專利主要應(yīng)用于嵌入式領(lǐng)域,并同前者相比具有較低的性能損耗、易于移植的特點。

發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種支持Iinux的硬件抽象層的虛擬網(wǎng)卡設(shè)計方法。通過虛擬網(wǎng)卡設(shè)備,多個客戶操作系統(tǒng)能夠同時進行網(wǎng)絡(luò)操作。另外,硬件抽象層的分層設(shè)計減少了網(wǎng)卡設(shè)備驅(qū)動移植的工作量。為了達到上述目的,本發(fā)明采用以下技術(shù)方案予以實現(xiàn)通過將虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包抽象為特定的數(shù)據(jù)結(jié)構(gòu),并以鏈表的方式組織,然后通過消息和中斷注入機制分別實現(xiàn)網(wǎng)絡(luò)包的發(fā)送和接收過程(見圖2)。(1)虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包的組織每個虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包在硬件抽象層端被抽象為一個結(jié)構(gòu)體,其所包含的 Ien字段和addr字段分別代表數(shù)據(jù)包的長度及其在內(nèi)存中的地址。由該結(jié)構(gòu)體相連接的鏈表表示由網(wǎng)絡(luò)設(shè)備發(fā)送或接收的一系列數(shù)據(jù)包。當(dāng)數(shù)據(jù)包在HAL層中傳遞時,僅需傳送其 addr字段,并據(jù)此實現(xiàn)數(shù)據(jù)在客戶操作系統(tǒng)與硬件緩沖區(qū)之間的拷貝。圖3顯示虛擬網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)包組織形式,其中兩個環(huán)形鏈表分別代表暫存發(fā)送和接收的虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包結(jié)構(gòu)體,實線和虛線分別代表發(fā)送和接收網(wǎng)絡(luò)包的過程。(2)虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包的存儲管理虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包在客戶操作系統(tǒng)(Iinux)中以結(jié)構(gòu)體sk_buff表示,其網(wǎng)絡(luò)數(shù)據(jù)位于sk_buff_ > data所指向的內(nèi)存地址中。對于客戶操作系統(tǒng)中的每個sk_buff, 都由HAL端虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包鏈表的一個元素的索引。虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包(sk_ buff)在客戶操作系統(tǒng)中創(chuàng)建和釋放,對應(yīng)HAL端虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包鏈表元素的增加和刪除。通過該方式,HAL端不進行虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包空間的分配與釋放,相應(yīng)的工作由客戶操作系統(tǒng)完成。當(dāng)需要發(fā)送網(wǎng)絡(luò)包時,只需要把sk_buff- > data (即上文的addr字段)傳遞給HAL,并由后者將該指針指向的內(nèi)存空間拷貝至硬件緩沖區(qū)中,完成發(fā)送操作, 接著由客戶操作系統(tǒng)將網(wǎng)絡(luò)包(sk_buff)的空間釋放。當(dāng)接收網(wǎng)絡(luò)包時,客戶操作系統(tǒng)創(chuàng)建預(yù)先分配固定大小負(fù)載空間的sk_buff,并由HAL將接收到的網(wǎng)絡(luò)數(shù)據(jù)拷貝至該負(fù)載空間中(sk_buff_ > data,即上文的addr字段)。該過程參考圖5。(3)客戶操作系統(tǒng)的網(wǎng)絡(luò)包發(fā)送過程每個客戶操作系統(tǒng)在硬件抽象層中對應(yīng)一個網(wǎng)絡(luò)發(fā)送實時任務(wù)。當(dāng)需要發(fā)送網(wǎng)絡(luò)數(shù)據(jù)時,將數(shù)據(jù)映射進HAL端的虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包鏈表,封裝發(fā)送消息內(nèi)容,進而將消息傳遞給實時任務(wù)。該任務(wù)收到消息后被喚醒并調(diào)度執(zhí)行,讀取數(shù)據(jù)包鏈表中的一個元素, 根據(jù)其中的addr字段將數(shù)據(jù)拷貝到物理網(wǎng)卡緩沖區(qū),設(shè)置相應(yīng)寄存器后,完成發(fā)送任務(wù)。 客戶操作系統(tǒng)接著被通知釋放該虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包空間。(3)客戶操作系統(tǒng)的網(wǎng)絡(luò)包接收過程a)物理網(wǎng)卡接收到數(shù)據(jù)包時,會觸發(fā)相應(yīng)中斷,調(diào)用網(wǎng)絡(luò)包接收中斷服務(wù)程序。該服務(wù)程序首先驗證網(wǎng)絡(luò)包是否有效,如有效則從客戶操作系統(tǒng)內(nèi)核取出一個空的數(shù)據(jù)包鏈表元素。如鏈表元素取出過程失敗,則將物理網(wǎng)卡中的數(shù)據(jù)取出,存入臨時緩沖區(qū),不向客戶操作系統(tǒng)傳遞。否則轉(zhuǎn)入b)。b)將物理網(wǎng)卡中的數(shù)據(jù)取出,存入網(wǎng)絡(luò)數(shù)據(jù)鏈表元素的addr字段所代表的內(nèi)存處,并向客戶操作系統(tǒng)注入網(wǎng)絡(luò)包接收中斷,即設(shè)置其虛擬中斷標(biāo)志為1。接著轉(zhuǎn)到C)。c)客戶操作系統(tǒng)被調(diào)度執(zhí)行時,首先處理已觸發(fā)的虛擬中斷。在調(diào)用相應(yīng)的網(wǎng)絡(luò)虛擬中斷服務(wù)程序時,會通過網(wǎng)絡(luò)接收數(shù)據(jù)包鏈表依次處理每個從VMM端發(fā)送來的數(shù)據(jù)包,將其傳遞到更高層的網(wǎng)絡(luò)協(xié)議棧進行處理。每個包(即鏈表中的每個元素)處理完成后,均需要為該元素分配一段新的負(fù)載空間。本發(fā)明設(shè)計了支持Iinux的硬件抽象層的虛擬網(wǎng)絡(luò)設(shè)備,抽象化網(wǎng)絡(luò)包數(shù)據(jù)組織結(jié)構(gòu),并通過消息和中斷注入機制實現(xiàn)虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送和接收。


圖1為兩個Guest OS通過硬件抽象層中的虛擬網(wǎng)絡(luò)設(shè)備橋接方式上網(wǎng);圖2為網(wǎng)絡(luò)包的發(fā)送和接收過程示意圖;圖3為抽象后的虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包的組織形式示意圖;圖4為虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包鏈表在初始化時的組織形式;圖5虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包鏈表在發(fā)送和接收包時的組織形式;
圖6為虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動層次模型示意圖。
具體實施例方式下面結(jié)合附圖對本發(fā)明做進一步詳細(xì)描述參見圖1-6,網(wǎng)絡(luò)設(shè)備虛擬化技術(shù)主要體現(xiàn)在數(shù)據(jù)包的組織、發(fā)送、接收過程。(1)虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包的組織客戶操作系統(tǒng)利用虛擬網(wǎng)絡(luò)設(shè)備進行網(wǎng)絡(luò)數(shù)據(jù)的接收和發(fā)送是通過虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包鏈表實現(xiàn)的,該鏈表中的每個元素描述一個數(shù)據(jù)包,元素的Ien字段和addr字段分別代表數(shù)據(jù)包的長度和其在內(nèi)存中的地址。該數(shù)據(jù)包的數(shù)據(jù)存放客戶操作系統(tǒng)內(nèi)核中,當(dāng)數(shù)據(jù)包進行轉(zhuǎn)移時,一般僅傳遞其addr字段。在客戶操作系統(tǒng)間虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包發(fā)送和接收時,需要相應(yīng)的系統(tǒng)間虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包鏈表數(shù)據(jù)結(jié)構(gòu),若一個客戶操作系統(tǒng)需要向另一個發(fā)送數(shù)據(jù)包時,需要將數(shù)據(jù)包的內(nèi)存地址和長度字段寫入鏈表中的空白元素。另一個客戶操作系統(tǒng)從該鏈表中取出一個元素,讀出其數(shù)據(jù)包地址,并據(jù)此拷貝至該客戶操作系統(tǒng)內(nèi)核中。(2)虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包的存儲管理考慮到網(wǎng)絡(luò)包數(shù)據(jù)量大,網(wǎng)絡(luò)傳輸頻繁,需要減少不必要的內(nèi)存拷貝。虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包在客戶操作系統(tǒng)(Iinux)中創(chuàng)建和存儲,以結(jié)構(gòu)體sk_buff表示,其網(wǎng)絡(luò)數(shù)據(jù)位于Sk_buff->data所指向的內(nèi)存地址中(該地址同樣位于客戶操作系統(tǒng))。當(dāng)需要發(fā)送網(wǎng)絡(luò)包時,只需要把sk_buff- > data(即上文的addr字段)傳遞給HAL,并由后者將該指針指向的內(nèi)存拷貝至硬件緩沖區(qū)中;當(dāng)接收網(wǎng)絡(luò)包時,客戶操作系統(tǒng)創(chuàng)建預(yù)先分配固定大小負(fù)載空間的sk_buff,并由HAL將接收到的網(wǎng)絡(luò)數(shù)據(jù)拷貝至Iinux的sk_buff- > data(即上文的addr字段)中。這使得HAL利用虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包鏈表作為網(wǎng)絡(luò)發(fā)送或接收包的中介,在避免額外拷貝的情況下實現(xiàn)網(wǎng)絡(luò)操作(如圖5所示)。a)網(wǎng)絡(luò)發(fā)送數(shù)據(jù)包的存儲管理發(fā)送緩沖區(qū)鏈表中的每個元素(unit)被初始化為空(如圖4上)。當(dāng)Iinux需要發(fā)送網(wǎng)絡(luò)包時(如圖5上),將其創(chuàng)建的帶網(wǎng)絡(luò)數(shù)據(jù)的sk_buff通過tx_write_index指針寫入一個unit,接著HAL被通知需要發(fā)送網(wǎng)絡(luò)包,通過tx_read_index指針取得當(dāng)前unit 的addr字段(即sk_bUff->data),將該字段處的內(nèi)容拷貝至硬件網(wǎng)卡緩沖區(qū)中。最后通知Iinux發(fā)送已完成,客戶操作系統(tǒng)接著通過tx_release_index指針將已讀過的unit所指向的sk_buff銷毀,并將unit重新置為空。b)網(wǎng)絡(luò)接收數(shù)據(jù)包的存儲管理接收緩沖區(qū)鏈表中的每個元素被初始化為指向一個預(yù)先分配帶固定內(nèi)存大小負(fù)載空間的sk_buff (如圖4下)。當(dāng)虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包到達時,觸發(fā)硬件中斷。該中斷服務(wù)程序會向接收緩沖區(qū)鏈表申請一個新的元素(利用rx_write_index指針),將硬件接收到的網(wǎng)絡(luò)數(shù)據(jù)專遞到接收緩沖區(qū)鏈表元素(unit)的addr字段所指向的Iinux內(nèi)存地址, 并通知客戶操作系統(tǒng)收到虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包。Iinux讀取收到的虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包(利用rx_read_index),并將其傳遞給上層網(wǎng)絡(luò)協(xié)議棧進行處理。在處理的過程中,unit 對應(yīng)的sk_buff會被釋放,此時需要重新為unit分配一個帶固定內(nèi)存大小負(fù)載空間的sk_ buff (圖 5 下)。
(3)虛擬設(shè)備初始化過程虛擬網(wǎng)絡(luò)設(shè)備的模塊將在客戶操作系統(tǒng)針對外設(shè)的初始化時加載,并調(diào)用相應(yīng)函數(shù)進行與硬件無關(guān)的初始化工作。接著向HAL層發(fā)送消息,要求進行與網(wǎng)卡硬件相關(guān)的初始化,該消息會喚醒與該客戶操作系統(tǒng)在HAL層對應(yīng)的網(wǎng)絡(luò)實時任務(wù)。在任務(wù)中檢查物理網(wǎng)絡(luò)設(shè)備啟動標(biāo)識,如果該標(biāo)志顯示尚未啟動,則調(diào)用相應(yīng)的函數(shù)完成初始化工作,否則直接退出。(4)數(shù)據(jù)包發(fā)送a)要發(fā)送的數(shù)據(jù)包經(jīng)過TCP/IP封裝后,首先暫停內(nèi)核與驅(qū)動程序間數(shù)據(jù)傳遞,準(zhǔn)備發(fā)送數(shù)據(jù)包。將該數(shù)據(jù)包在內(nèi)存中的地址和長度信息存入從鏈表中的一個空數(shù)據(jù)包結(jié)構(gòu)體,轉(zhuǎn)入b)。b)向HAL中與虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包發(fā)送相關(guān)的任務(wù)發(fā)送虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包消息,設(shè)置該消息的類型為“服務(wù)請求”,任務(wù)類型為“網(wǎng)絡(luò)數(shù)據(jù)發(fā)送”,附加參數(shù)為網(wǎng)絡(luò)包目的地類型,這可通過對比虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包的目的MAC地址和已知的MAC地址得到, 轉(zhuǎn)入c)。c)消息發(fā)送后,等待相應(yīng)的響應(yīng)消息。若沒有立即得到響應(yīng),則將該Iinux進程阻塞;否則將該虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包釋放,并重新進行內(nèi)核一驅(qū)動程序間數(shù)據(jù)傳遞,繼續(xù)發(fā)送新的數(shù)據(jù)包。d)在b)中發(fā)送的消息喚醒HAL中與網(wǎng)絡(luò)數(shù)據(jù)發(fā)送相關(guān)的實時任務(wù),該任務(wù)驗證消息的任務(wù)類型為“網(wǎng)絡(luò)數(shù)據(jù)發(fā)送”,接著,根據(jù)附加參數(shù),選擇將數(shù)據(jù)包發(fā)送到外部網(wǎng)絡(luò)或者其他客戶操作系統(tǒng)中。當(dāng)數(shù)據(jù)包需要發(fā)送至外部網(wǎng)絡(luò)時,從客戶操作系統(tǒng)獲取要發(fā)送數(shù)據(jù)包的內(nèi)存地址和長度,利用該信息將網(wǎng)絡(luò)數(shù)據(jù)拷貝至網(wǎng)卡硬件緩沖區(qū),并設(shè)置相應(yīng)的寄存器完成發(fā)送請求。當(dāng)數(shù)據(jù)包發(fā)送至其他客戶操作系統(tǒng)時,其操作見(6)。完成發(fā)送操作后, 向Guest OS發(fā)送響應(yīng)消息。接著,該實時任務(wù)等待數(shù)據(jù)包發(fā)送的請求消息,此時會將自身阻塞。(5)數(shù)據(jù)包接收a)當(dāng)接收到虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包時,物理網(wǎng)卡觸發(fā)硬件中斷,此時轉(zhuǎn)入VMM的網(wǎng)絡(luò)接收數(shù)據(jù)中斷服務(wù)程序。b)該服務(wù)程序通過對網(wǎng)卡接收到的數(shù)據(jù)進行有效性驗證,并通過比較數(shù)據(jù)包的 MAC地址判斷向哪一個客戶操作系統(tǒng)發(fā)送。如果向當(dāng)前Guest OS發(fā)送數(shù)據(jù)包,那么向該客戶操作系統(tǒng)申請一個空的數(shù)據(jù)包結(jié)構(gòu)體,并將接收到的數(shù)據(jù)包拷貝到該結(jié)構(gòu)體addr字段對應(yīng)的內(nèi)存地址處,同時向客戶操作系統(tǒng)注入一次網(wǎng)絡(luò)接收中斷。如果向被阻塞的客戶操作系發(fā)送數(shù)據(jù)包,其具體操作見(6)。c)當(dāng)客戶操作系統(tǒng)作為一個任務(wù)被調(diào)度執(zhí)行時,會首先處理被注入的中斷,這包括執(zhí)行客戶操作系統(tǒng)的網(wǎng)絡(luò)接收中斷服務(wù)程序。該服務(wù)程序會通過網(wǎng)絡(luò)接收數(shù)據(jù)包鏈表依次處理每個從HAL發(fā)送來的數(shù)據(jù)包,識別其發(fā)送目標(biāo),并傳遞到更高層的網(wǎng)絡(luò)協(xié)議層進行處理。每個包處理完成后,均需要為對應(yīng)的接收數(shù)據(jù)包鏈表中的元素申請一段新的內(nèi)存空間。(6)客戶操作系統(tǒng)間數(shù)據(jù)包的發(fā)送和接收a)在HAL端接收到客戶操作系統(tǒng)的發(fā)送虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包請求(見(4)的d)步驟),識別其消息類型為廣播包或特意向其他某個客戶操作系統(tǒng)發(fā)送數(shù)據(jù)包。此時將要發(fā)送的數(shù)據(jù)包中的數(shù)據(jù)拷貝至操作系統(tǒng)間虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包鏈表中的一個空的元素,并通過信號量向另外某個客戶操作系統(tǒng)發(fā)送網(wǎng)絡(luò)包到達的消息。轉(zhuǎn)入b)。b)網(wǎng)絡(luò)包接收實時任務(wù)在接收到消息后被喚醒,進而調(diào)度執(zhí)行,它會從操作系統(tǒng)間網(wǎng)絡(luò)數(shù)據(jù)鏈表讀取一個元素。接著從Guest OS內(nèi)核取出一個空的數(shù)據(jù)包結(jié)構(gòu)體,將元素中的數(shù)據(jù)包內(nèi)容拷貝到數(shù)據(jù)包結(jié)構(gòu)體addr字段在內(nèi)存中的地址。轉(zhuǎn)入c)。c)向需要接收數(shù)據(jù)包的Guest OS注入網(wǎng)絡(luò)接收中斷,該客戶操作系統(tǒng)進而讀取該數(shù)據(jù)包并進行TCP/IP協(xié)議棧解析。通過試驗對本發(fā)明的虛擬網(wǎng)絡(luò)設(shè)備的效率進行了驗證,具體方法如下本試驗主要采用ftp下載大量數(shù)據(jù)的方法計算網(wǎng)絡(luò)速率。首先在mini6410開發(fā)板上運行Iinux操作系統(tǒng),利用ftp工具分別下載1M、2M、4M、8M、16M、32M大小的文件,依次計算其下載速度。接著在同樣的開發(fā)板上運行基于虛擬網(wǎng)絡(luò)設(shè)備的客戶操作系統(tǒng)(Iinux), 同樣利用ftp下載從IM到32M大小不同的文件,并計算得相應(yīng)的網(wǎng)絡(luò)速度。最后,將這兩次下載速度進行對比。實驗結(jié)果表明,虛擬后的網(wǎng)絡(luò)設(shè)備運行效率在最差情況下是虛擬前的94%,證明虛擬化過程造成的額外開銷不大。以上內(nèi)容是結(jié)合具體的優(yōu)選實施方式對本發(fā)明所作的進一步詳細(xì)說明,不能認(rèn)定本發(fā)明的具體實施方式
僅限于此,對于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡單的推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明由所提交的權(quán)利要求書確定專利保護范圍。
權(quán)利要求
1.支持Iinux的硬件抽象層的虛擬網(wǎng)卡設(shè)計方法,其特征在于所述設(shè)計方法包括虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包的組織、虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包的存儲管理、客戶操作系統(tǒng)的網(wǎng)絡(luò)包發(fā)送過程和客戶操作系統(tǒng)的網(wǎng)絡(luò)包接收過程。
2.如權(quán)利要求1所述支持Iinux的硬件抽象層的虛擬網(wǎng)卡設(shè)計方法,其特征在于所述虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包的組織按照如下步驟進行,每個虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包在硬件抽象層端被抽象為一個結(jié)構(gòu)體,其所包含的Ien字段和addr字段分別代表虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包長度和其在內(nèi)存中的地址;由該結(jié)構(gòu)體相連接的鏈表表示由網(wǎng)絡(luò)設(shè)備發(fā)送或接收的一系列數(shù)據(jù)包;當(dāng)數(shù)據(jù)包在HAL中傳遞時,僅需傳送其addr字段,并據(jù)此實現(xiàn)數(shù)據(jù)在客戶操作系統(tǒng)與硬件緩沖區(qū)之間的拷貝。
3.如權(quán)利要求1所述支持Iinux的硬件抽象層的虛擬網(wǎng)卡設(shè)計方法,其特征在于所述虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包的存儲管理按照如下步驟進行,虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包在客戶操作系統(tǒng)Iinux中以結(jié)構(gòu)體sk_buff表示,其網(wǎng)絡(luò)數(shù)據(jù)位于sk_buff_ > data所指向的內(nèi)存地址中;對于客戶操作系統(tǒng)中的每個sk_buff,都由HAL端虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包鏈表的一個元素的索引;虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包sk_buff在客戶操作系統(tǒng)中創(chuàng)建和釋放,對應(yīng)HAL端虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包鏈表元素的增加和刪除;通過該方式,HAL端不進行虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包空間的分配與釋放,相應(yīng)的工作由客戶操作系統(tǒng)完成;每當(dāng)需要發(fā)送網(wǎng)絡(luò)包時,只需要把sk_buff- > data,即上文的addr字段傳遞給HAL,并由后者將該指針指向的內(nèi)存拷貝至硬件緩沖區(qū)中,發(fā)送完成后由客戶操作系統(tǒng)將網(wǎng)絡(luò)包sk_buff的空間釋放;當(dāng)接收網(wǎng)絡(luò)包時,客戶操作系統(tǒng)創(chuàng)建預(yù)先分配固定大小負(fù)載空間的sk_buff,并由HAL將接收到的網(wǎng)絡(luò)數(shù)據(jù)拷貝至Iinux的sk_buff- > data,即上文的addr字段中。
4.如權(quán)利要求1所述支持Iinux的硬件抽象層的虛擬網(wǎng)卡設(shè)計方法,其特征在于所述客戶操作系統(tǒng)的網(wǎng)絡(luò)包發(fā)送過程按照如下步驟進行,每個客戶操作系統(tǒng)在硬件抽象層對應(yīng)一個網(wǎng)絡(luò)發(fā)送實時任務(wù),當(dāng)需要發(fā)送網(wǎng)絡(luò)數(shù)據(jù)時,將數(shù)據(jù)映射進HAL端的虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包鏈表,封裝發(fā)送消息,進而將消息傳遞給實時任務(wù);該任務(wù)收到消息后被喚醒并調(diào)度執(zhí)行時,讀取數(shù)據(jù)包鏈表中的一個元素,根據(jù)其中的addr字段將數(shù)據(jù)拷貝到物理網(wǎng)卡緩沖區(qū),設(shè)置相應(yīng)寄存器后,完成發(fā)送任務(wù);接著客戶操作系統(tǒng)被通知將該虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包釋放。
5.如權(quán)利要求1所述支持Iinux的硬件抽象層的虛擬網(wǎng)卡設(shè)計方法,其特征在于所述客戶操作系統(tǒng)的網(wǎng)絡(luò)包接收過程按照如下步驟進行,(1)物理網(wǎng)卡接收到的數(shù)據(jù)包時,會觸發(fā)相應(yīng)中斷,調(diào)用網(wǎng)絡(luò)包接收中斷服務(wù)程序;該服務(wù)程序會確定網(wǎng)絡(luò)包發(fā)送的目標(biāo)客戶操作系統(tǒng),并從該客戶操作系統(tǒng)取出一個空的數(shù)據(jù)包鏈表元素,如失敗,將物理網(wǎng)卡中的數(shù)據(jù)取出至臨時緩沖區(qū),不向客戶操作系統(tǒng)傳遞;否則轉(zhuǎn)入⑴;(2)將物理網(wǎng)卡中的數(shù)據(jù)取出,存入網(wǎng)絡(luò)數(shù)據(jù)鏈表元素的addr字段所代表的內(nèi)存處, 并向客戶操作系統(tǒng)注入網(wǎng)絡(luò)包接收中斷,設(shè)置其虛擬中斷標(biāo)志位;(3)客戶操作系統(tǒng)被調(diào)度執(zhí)行時,會處理網(wǎng)絡(luò)接收虛擬中斷;在該中斷的服務(wù)程序中,依次處理每個從VMM端發(fā)送來的數(shù)據(jù)包,并將其傳遞至更高層次的網(wǎng)絡(luò)協(xié)議棧進行處理。
全文摘要
本發(fā)明公開了一種支持linux的硬件抽象層的虛擬網(wǎng)卡設(shè)計方法,所述設(shè)計方法包括虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包的組織、虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包的存儲管理、客戶操作系統(tǒng)的網(wǎng)絡(luò)包發(fā)送過程和客戶操作系統(tǒng)的網(wǎng)絡(luò)包接收過程。本發(fā)明通過虛擬網(wǎng)卡設(shè)備,多個客戶操作系統(tǒng)能夠同時進行網(wǎng)絡(luò)操作。另外,硬件抽象層的分層設(shè)計減少了網(wǎng)卡設(shè)備驅(qū)動移植的工作量。設(shè)計了支持linux的硬件抽象層的虛擬網(wǎng)絡(luò)設(shè)備,抽象化網(wǎng)絡(luò)包數(shù)據(jù)組織結(jié)構(gòu),并通過消息和中斷注入機制實現(xiàn)虛擬網(wǎng)卡中網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送和接收。
文檔編號G06F9/455GK102404253SQ20111017593
公開日2012年4月4日 申請日期2011年6月28日 優(yōu)先權(quán)日2011年6月28日
發(fā)明者馮升, 李博良, 李國輝, 李鐵強, 梅魁志 申請人:西安交通大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
方正县| 察雅县| 延边| 建宁县| 体育| 海盐县| 永安市| 连平县| 荔波县| 柘城县| 五常市| 临洮县| 通城县| 襄汾县| 清水河县| 阳城县| 惠水县| 甘孜| 宁国市| 喀什市| 汉寿县| 连江县| 河北区| 赣榆县| 北票市| 华池县| 兴海县| 高要市| 黑河市| 德钦县| 南漳县| 涞水县| 浪卡子县| 兰西县| 林甸县| 尤溪县| 葵青区| 天等县| 诏安县| 武威市| 建湖县|