裝置驅動程式的作用在於提供機制,而不是策略。 所謂機制,即“需要提供什麼樣的功能”;所謂“策略”,即“如何使用這些功能”。前者精於設計,專註細節;後者實現調用,不需要知道任何與硬體相關的資訊。 不同的環境需要不同的方式來使用硬體,而裝置驅動針對底層硬體,不可能為每一種方式都編寫一個策略。因此,我們讓驅動程式提供機制,而讓系統高層提供策略。 當然,有時候我們也要在驅動程式當中實現一些策略。例如,某個數字 I/O 驅動程式只提供以位元組為單位訪問硬體的方法,這樣就可以避免編寫額外的代碼來處理單個資料位元的麻煩。 1) 同時支援同步與非同步作業; 2) 驅動程式能夠被多次開啟; 3) 充分利用硬體特性; 4) 不具備用來“簡化任務”的 或 提供與策略相關的軟體層。 實際上,許多裝置驅動程式是與使用者程式一起發行的。這些使用者程式主要用來協助配置和訪問目標裝置。同時附帶發行的還有一個客戶程式庫,它提供了那些不必在驅動程式本身實現的功能。 #2 核心功能劃分 進程管理:建立和銷毀進程,進程處理,處理序間通訊,進程調度; 記憶體管理:核心在有限的可用資源之上為每個進程都建立了一個虛擬位址空間,核心的不同部分在和記憶體管理子系統互動時使用一組函數調用; 檔案系統:核心在沒有結構的硬體上構造結構化的檔案系統,而檔案抽象在整個系統中廣泛使用;檔案系統是一個軟體驅動程式,它將底層資料結構映射到高層資料結構; 裝置控制:幾乎每一個系統操作最終都會映射到物理裝置上,除了極少數的幾個對象之外,所有的裝置控制操作都由被控制裝置相關的代碼來完成,這段代碼就叫做驅動程式; 網路功能:由於資料包的傳入是非同步事件,因此大部分網路操作與具體進程無關,而必須由核心來完成; #3 可裝載模組和模組的分類 核心提供的特性可在運行時進行擴充,擴充包括添加和移除,這些可被擴充的代碼稱為“模組”;每個模組由目標程式碼群組成,我們可以使用 insmod 將模組串連到正在啟動並執行核心,也可以使用 rmmod 移除串連; 在核心中以模組方式實現的功能:檔案系統類型、塊裝置、字元裝置、IF drivers 等; 1) 字元裝置:字元裝置是個能夠像位元組流一樣被訪問的裝置,,例如:/dev/tty1 和 /dev/lp0 等;字元裝置檔案與普通檔案的唯一區別在於,,而對普通檔案的訪問則可以前後移動訪問位置; 2) 塊裝置:和字元裝置一樣,塊裝置也是通過 /dev 下的檔案系統節點來訪問的,不同的是,塊裝置上可以容納檔案系統;,而這些對使用者是不透明的; 3) 網路裝置(介面):任何網路事務都經過一個網路介面形成;網路介面由核心中的網路子系統驅動,負責發送和接收資料包,但不涉及資料包的映射問題;; #4 Linux 核心版本編號 核心版本號碼: 以版本號碼 2.6.9-5.ELsmp 為例:
r: 2 , 主要版本號
x: 6 , 次版本號碼,偶數表示穩定版本,奇數表示開發中版本
y: 9 , 修訂版本號碼 , 表示修改的次數
頭兩個數字合在一齊可以描述核心系列。如穩定版的2.6.0,它是2.6版核心系列。
-5: 表示這個目前的版本的第5次微調 patch
ELsmp : 指出了當前核心是為 EL 和 smp特別調校的
EL : Enterprise Linux ; smp : 表示支援多處理器
另外,還有支援大記憶體版本的 bigmem 或 hugemem