日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

高性能路由器硬件的關(guān)鍵技術(shù)研究


1 引 言
隨著Internet的飛速發(fā)展和寬帶技術(shù)的不斷出現(xiàn),骨干網(wǎng)絡(luò)核心路由器的體系結(jié)構(gòu)也發(fā)生了一些變化 。近年來,高性能路由器體系結(jié)構(gòu)的研究和國(guó)內(nèi)外主流廠商生產(chǎn)的大部分商用高端路由器的實(shí)現(xiàn)方案中,普遍采用了集中式交換、分布式報(bào)文處理和轉(zhuǎn)發(fā)的體系結(jié)構(gòu)[1,2] 。
文獻(xiàn)[3]提出了硬件抽象層(Hardware AbstractionLayer,HAL)的設(shè)計(jì)思想,成功地解決了分布式路由器面臨的通用性支撐軟件系統(tǒng)結(jié)構(gòu)設(shè)計(jì)問題,為構(gòu)建開放通用的路由器軟件基礎(chǔ)平臺(tái)提供了保證 。硬件抽象層包括虛擬驅(qū)動(dòng)、系統(tǒng)治理和內(nèi)部通信3大模塊,在整個(gè)路由器系統(tǒng)中的位置如圖1所示 。
 
結(jié)合國(guó)家863重大課題“高性能IPv6路由器基礎(chǔ)平臺(tái)及實(shí)驗(yàn)系統(tǒng)”,將文獻(xiàn)[3]中提出的硬件抽象層在嵌入式實(shí)時(shí)操作系統(tǒng)Hard HatLinux中進(jìn)行了實(shí)現(xiàn) 。本文針對(duì)高性能路由器體系結(jié)構(gòu)的特點(diǎn),研究了硬件抽象層在實(shí)現(xiàn)過程中的要害技術(shù) 。主要包括虛擬驅(qū)動(dòng)的動(dòng)態(tài)加載模式、基于分隔符的TCP實(shí)時(shí)傳輸方法、基于地址映射的內(nèi)核態(tài)與用戶態(tài)間的阻塞式數(shù)據(jù)交換機(jī)制幾個(gè)內(nèi)容 。
2 支撐軟件在高性能IPv6路由器中實(shí)現(xiàn)的要害技術(shù)
2.1 虛擬驅(qū)動(dòng)的動(dòng)態(tài)加載模式
虛擬驅(qū)動(dòng)模塊是模擬線路接口單元?jiǎng)幼鞯闹匾糠?,他的靈活性和可擴(kuò)展性直接影響硬件抽象層的可用性 。
在Linux操作系統(tǒng)下,該模塊是作為一個(gè)內(nèi)核模塊來實(shí)現(xiàn)的 。他可以實(shí)現(xiàn)實(shí)時(shí)動(dòng)態(tài)加載,與靜態(tài)加載相比具有很大的靈活性 。編譯時(shí),內(nèi)核模塊可單獨(dú)進(jìn)行模塊的編譯調(diào)試,縮短了調(diào)試時(shí)間;使用時(shí),將該模塊鏈接到內(nèi)核,便可發(fā)揮模擬線路接口單元的作用;擴(kuò)展或升級(jí)時(shí),可以將其卸載后進(jìn)行修改 。除此之外,動(dòng)態(tài)加載還可以縮減Linux內(nèi)核的大小,使編譯后的內(nèi)核小巧,占用內(nèi)存較少,提高了運(yùn)轉(zhuǎn)速度 。
2.2 基于地址映射的內(nèi)核態(tài)與用戶態(tài)間的阻塞式數(shù)據(jù)交換機(jī)
Linux操作系統(tǒng)中的進(jìn)程分為用戶態(tài)進(jìn)程和內(nèi)核態(tài)進(jìn)程2類,用戶態(tài)進(jìn)程不能直接執(zhí)行運(yùn)行在內(nèi)核態(tài)的內(nèi)核代碼或者存取操作系統(tǒng)內(nèi)核的數(shù)據(jù)結(jié)構(gòu) 。在內(nèi)存治理方面,Linux系統(tǒng)采用虛擬內(nèi)存治理機(jī)制,設(shè)置了兩級(jí)頁表結(jié)構(gòu),通過頁面地址和在該頁中的偏移量就可以惟一確定虛擬地址所對(duì)應(yīng)的物理地址 。
在硬件抽象層的實(shí)現(xiàn)中,內(nèi)部通信處于用戶態(tài),虛擬驅(qū)動(dòng)處于內(nèi)核態(tài) 。而他們之間不可避免地需要進(jìn)行一些數(shù)據(jù)的傳遞,即處于Linux不同空間的2個(gè)進(jìn)程要進(jìn)行通信 。但是,這2個(gè)模塊分處于Linux系統(tǒng)的用戶空間和內(nèi)核空間,數(shù)據(jù)指針如何傳遞是一個(gè)問題,指針傳遞后如何映射又是一個(gè)問題 。因此用戶態(tài)與內(nèi)核態(tài)之間內(nèi)存地址的傳遞和轉(zhuǎn)換成為了提高硬件抽象層工作效率的要害 。
2.2.1 內(nèi)核態(tài)與用戶態(tài)的指針傳遞
先來解決內(nèi)存地址的傳遞問題,根據(jù)Linux驅(qū)動(dòng)程序的特點(diǎn),選擇ioctl()函數(shù)來傳遞指針 。該函數(shù)屬于系統(tǒng)調(diào)用,調(diào)用后將一個(gè)類型為ifreq的結(jié)構(gòu)指針變量ral_ifr從用戶態(tài)傳入內(nèi)核態(tài),該結(jié)構(gòu)的定義在/include/linux/if.h中 。
使用了其中的ifrn_name和ifru_data兩個(gè)域,其中ifrn_name代表設(shè)備的名稱,即虛擬網(wǎng)絡(luò)接口設(shè)備名,ifru_data為所要傳遞的數(shù)據(jù)指針 。使用系統(tǒng)調(diào)用ioctl()之后,用戶空間到內(nèi)核空間的指針傳遞就完成了 。內(nèi)核空間到用戶空間的指針傳遞過程與其相反 。因此,下一步要進(jìn)行的是內(nèi)核空間與用戶空間數(shù)據(jù)指針的映射 。
2.2.2 內(nèi)核態(tài)與用戶態(tài)的內(nèi)存映射
由2.2.1可知,用戶空間的指針通過ioctl傳入內(nèi)核空間后,他本身并沒有發(fā)生改變,需要進(jìn)行虛擬地址到物理地址的映射才可以對(duì)其進(jìn)行讀寫操作 。

推薦閱讀