<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Linux可加載內核模塊機制的研究與應用

Linux可加載內核模塊機制的研究與應用

作者: 時(shí)間:2012-03-31 來(lái)源:網(wǎng)絡(luò ) 收藏

5. 與普通應用程序的比較

與普通應用程序之間的區別主要體現在四個(gè)方面。

第一,也是最重要的區別,普通應用程序運行在用戶(hù)空間,而運行在內核空間。通過(guò)區分不同的運行空間,操作系統能夠安全地保護操作系統中一些重要數據結構的內容不被普通應用程序所修改,達到保證操作系統正常運轉的目的。

第二,普通應用程序的目標很明確,它們從頭至尾都是為了完成某一項特定任務(wù)。而LKM是在內核中注冊并為后續應用程序的請求提供服務(wù)的。

第三,普通應用程序可以調用并沒(méi)有在其中定義的函數,但一個(gè)LKM是鏈接到內核上的,它所能調用的函數只有內核導出來(lái)的那些函數。

第四,普通應用程序和LKM處理錯誤的方式不同。當應用程序中出現錯誤時(shí)并不會(huì )給系統造成很大的傷害。LKM則不然,在其中出現的錯誤對子系統來(lái)說(shuō)通常是致命的,至少對于當前正在運行的進(jìn)程而言。LKM中的一個(gè)錯誤常常會(huì )導致整個(gè)系統崩潰。

6. 編寫(xiě)LKM需要注意的問(wèn)題

LKM運行在內核空間,它們擁有對整個(gè)系統所有資源的訪(fǎng)問(wèn)權限,因此,編寫(xiě)LKM首先要注意就是安全問(wèn)題,而且還應該避免將可能導致出現安全問(wèn)題的代碼帶到LKM中。

LKM加載后是作為操作系統內核的一部分運行的,因此,在設計、編寫(xiě)操作系統內核過(guò)程中應該注意的問(wèn)題在LKM中也應該引起足夠的重視。在這里,主要指的是并發(fā)問(wèn)題和指針引用問(wèn)題。并發(fā)是指在同一時(shí)間有多個(gè)進(jìn)程在操作系統內核中同時(shí)運行。并發(fā)結合共享資源最終會(huì )導致競態(tài)條件,在這種情況下應該對各個(gè)并發(fā)進(jìn)程訪(fǎng)問(wèn)共享資源進(jìn)行嚴格的控制。如果在LKM中出現指針引用錯誤,內核將沒(méi)有辦法將內存的虛擬地址映射到物理地址,從而導致出現內核中的意外,如內存訪(fǎng)問(wèn)沖突、除0以及非法操作等。

7. LKM的不足之處

LKM雖然在設備驅動(dòng)程序的編寫(xiě)和擴充內核功能中扮演著(zhù)非常重要的角色,但它仍有許多不足的地方。

第一,LKM對于內核版本的依賴(lài)性過(guò)強,每一個(gè)LKM都是靠?jì)群颂峁┑暮瘮岛蛿祿Y構組織起來(lái)的。當這些內核函數和數據結構因為內核版本變化而發(fā)生變動(dòng)時(shí),原先的LKM不經(jīng)過(guò)修改就可能不能正常運行。

第二,雖然現在有針對內核編程調試的工具kgdb,但是在LKM編寫(xiě)過(guò)程中調試仍非常麻煩,而且在調試過(guò)程中,系統所能提供的出錯信息極為晦澀。

本文作者創(chuàng )新點(diǎn):針對內核,利用LKM,在實(shí)現了數據的(Zero-copy)的過(guò)程中,將LKM與普通應用程序進(jìn)行比較,提出了LKM的優(yōu)勢和不足。

參考文獻

[1] 任家東,梁哲,趙黎.網(wǎng)絡(luò )協(xié)議的構件化方法研究與實(shí)現,微計算機信息,2006,22-17,85-87.

[2] Peter Jay Salzman, Michael Burian, Ori Pomerantz. The Kernel Module Program- ming Guide [M], 2001: 5-43.

[3] Henderson B. Loadable Kernel Module HOWTO, http://www6.uniovi.es/linux/H- OWTO/Module-HOWTO/, 2002.

[4] 徐偉,賈春福.擴充Linux系統功能的LKM技術(shù)[J],計算機應用研究,2003,第四期:100-102.

[5] 毛德操,胡希明.Linux內核源代碼情景分析[M],浙江:浙江大學(xué)出版社,2001年9月,277-280.

[6] Alessandro Rubini, Jonathan Corbet, Greg Kroah-Hartman. Linux Device Drivers Third Edition [M], O’Reilly

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: LKM Linux 零拷貝

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>