新聞中心

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

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

        作者: 時間:2012-03-31 來源:網絡 收藏

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

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

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

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

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

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

        6. 編寫LKM需要注意的問題

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

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

        7. LKM的不足之處

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

        第一,LKM對于內核版本的依賴性過強,每一個LKM都是靠內核提供的函數和數據結構組織起來的。當這些內核函數和數據結構因為內核版本變化而發生變動時,原先的LKM不經過修改就可能不能正常運行。

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

        本文作者創新點:針對內核,利用LKM,在實現了數據的(Zero-copy)的過程中,將LKM與普通應用程序進行比較,提出了LKM的優勢和不足。

        參考文獻

        [1] 任家東,梁哲,趙黎.網絡協議的構件化方法研究與實現,微計算機信息,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技術[J],計算機應用研究,2003,第四期:100-102.

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

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

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

        上一頁 1 2 3 下一頁

        關鍵詞: LKM Linux 零拷貝

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 乐业县| 喀喇沁旗| 丹凤县| 霍邱县| 龙泉市| 云阳县| 景宁| 南和县| 罗田县| 二连浩特市| 林芝县| 翁牛特旗| 山西省| 平顺县| 大同县| 镶黄旗| 海晏县| 威信县| 巩义市| 西平县| 潍坊市| 长兴县| 晋城| 江永县| 唐海县| 云龙县| 兰考县| 观塘区| 若羌县| 昌乐县| 花莲市| 张家港市| 满洲里市| 锦屏县| 新乐市| 桂平市| 砚山县| 庆阳市| 和顺县| 寿阳县| 车险|