網(wǎng)絡設(shè)備輪詢設(shè)計與實現(xiàn)

網(wǎng)絡設(shè)備輪詢設(shè)計與實現(xiàn)

ID:38798701

大?。?20.00 KB

頁數(shù):17頁

時間:2019-06-19

網(wǎng)絡設(shè)備輪詢設(shè)計與實現(xiàn)_第1頁
網(wǎng)絡設(shè)備輪詢設(shè)計與實現(xiàn)_第2頁
網(wǎng)絡設(shè)備輪詢設(shè)計與實現(xiàn)_第3頁
網(wǎng)絡設(shè)備輪詢設(shè)計與實現(xiàn)_第4頁
網(wǎng)絡設(shè)備輪詢設(shè)計與實現(xiàn)_第5頁
資源描述:

《網(wǎng)絡設(shè)備輪詢設(shè)計與實現(xiàn)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫

1、網(wǎng)絡設(shè)備輪詢設(shè)計與實現(xiàn)--BSD操作系統(tǒng)核心新技術(shù)作者:xie_minix(謝小榮)1.1引言polling(輪詢)技術(shù)是一種在一定時間內(nèi)不斷的探測目標,以獲取目標在滿足條件后進行相應處理的技術(shù)。從大多數(shù)情況來講,這種技術(shù)并沒有以中斷為代表的技術(shù)先進。但是在一些特定場合,如主機作為一個大型的網(wǎng)關(guān),并且流量巨大,選用輪詢技術(shù)還是比較合適的。本文是針對FreeBSD操作系統(tǒng)及其代碼來進行分析其設(shè)計思路和實現(xiàn)過程。目前BSD類操作系統(tǒng)中只有FreeBSD4.10和FreeBSD5.3以上版本才加入了對輪詢的支持,NetBSD和Open

2、BSD還未實現(xiàn)。作為大多數(shù)防火墻首選的操作系統(tǒng)OpenBSD到是應該實現(xiàn)輪詢技術(shù)。在《TCP/IP詳解》第二卷中,書中作者曾經(jīng)提到過該技術(shù),而且好象馮.杰克布森已經(jīng)在一些實驗中實現(xiàn)過。直到不久前我們才看到這些代碼在FreeBSD中實現(xiàn),要知道在核心中加入一項新的技術(shù)工作量是非常之大,輪詢代碼不但是要在核心中增加一些代碼文件,而且把所有網(wǎng)卡驅(qū)動程序都要進行大量相應的改動。我們以VIARhine(威盛的萊因型芯片,通常的DLINK530TX網(wǎng)卡使用的芯片)的驅(qū)動程序if_vr.c和他的頭文件if_vrreg.h(后面具體涉及到硬件驅(qū)

3、動程序的代碼都以vr代碼做實例分析)來簡單講述代碼的一些改動。A.XX_softc結(jié)構(gòu)中的改動:XX是代表各芯片的簡稱,本文使用的是vr芯片代碼,所以是vr_softc結(jié)構(gòu)。在結(jié)構(gòu)的最后部分,增加了以下代碼:#ifdefDEVICE_POLLINGintrxcycles;#endif以上代碼出現(xiàn)在源代碼if_vrreg.h中的第472行中。DEVICE_POLLING是由核心配置決定。如果核心配置文件中加入了該定義,則在#ifdef和#endif行之間的代碼將編譯進核心。也就是說,所有的支持POLLING的代碼都應該在#ifde

4、fDEVICE_POLLING定義之下和#endif之上。圖中的rxcycles變量是用來存放在核心進入vr驅(qū)動程序時,POLLING要求驅(qū)動程序的底半部分(即讀出和寫入)進行多少次的循環(huán)。B.在連接該設(shè)備驅(qū)動程序到設(shè)備程序鏈表時的一些改動:任何以太網(wǎng)絡設(shè)備在探測到該設(shè)備存在后(xx_probe函數(shù),xx在這是代表芯片在系統(tǒng)中的簡稱),緊接著執(zhí)行設(shè)備鏈入函數(shù)(xx_attach),他的工作主要是進行硬件的一些初始化(中斷的分配、網(wǎng)卡緩存的內(nèi)存映射等等)和ifnet結(jié)構(gòu)的初始化。#ifdefDEVICE_POLLINGifp->i

5、f_capabilities

6、=IFCAP_POLLING;#endif上圖是if_vr.c中的第742行中關(guān)于對POLLING支持時候的一段代碼。if_capabilities成員是用來判斷網(wǎng)卡支持性能的成員。比如對VLAN技術(shù)的支持,POLLING技術(shù)的支持等標志都是放在此成員中。1.2代碼介紹所有的輪詢代碼主體在1個C文件和各支持輪詢的網(wǎng)絡設(shè)備驅(qū)動程序中,以及一些相關(guān)的支撐文件。圖1-1中沒有列出所有的網(wǎng)絡設(shè)備驅(qū)動程序。文件說明net/if_var.hpci/if_vrreg.h申明一些函數(shù)修改ifnet結(jié)構(gòu)以支持輪詢ke

7、rn/kern_poll.ckern/kern_clock.cnet/netisr.cpci/if_vr.c…輪詢的核心部分代碼一段定時調(diào)用kern_poll.c中輪詢代碼網(wǎng)絡軟中斷代碼網(wǎng)絡設(shè)備驅(qū)動程序(基于vr芯片的卡)其他的網(wǎng)絡設(shè)備驅(qū)動程序圖1-1本文包含的文件1.2.1全局變量從第106行開始,都是POLLING相關(guān)的全局變量.首先是建立一SYSCTL樹的節(jié)點.下圖中的SYSCTL_NODE宏代表在父節(jié)點_kern下建立一個_kern_polling節(jié)點.SYSCTL_NODE(_kern,OID_AUTO,polling

8、,CTLFLAG_RW,0,"Devicepollingparameters");下圖中的變量全部可用sysctl來查看,大部分都可以調(diào)整設(shè)置.這些全局變量都是使用宏SYSCTL_UINT把他們加入到_kern_polling節(jié)點下,成為該節(jié)點的葉子.之所以這樣,是因為可以通過用戶區(qū)來調(diào)整這些參數(shù).staticu_int32_tpoll_burst=5;------kern_poll.cstaticu_int32_tpoll_each_burst=5;staticu_int32_tpoll_burst_max=150;stati

9、cu_int32_tpoll_in_idle_loop=0;u_int32_tpoll_in_trap;staticu_int32_tuser_frac=50;staticu_int32_treg_frac=20;staticu_int32_tshort_tic

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。