裝置驅動程式、塊裝置和字元裝置
裝置驅動程式用於與系統連線的輸入/輸出裝置通訊,如硬碟、軟碟機、各種介面、音效卡等。按照經典的unix箴言「萬物皆檔案」(everything is a file),對外設的訪問可利用/dev目錄下的裝置檔案來完成,程式對裝置的處理完全類似於常規的檔案 網路
網絡卡也可以通過裝置驅動程式控制,但在核心中屬於特殊狀況,因為網絡卡不能利用裝置檔案訪問。原因在於在網路通訊期間,資料打包到了各種協議層中。在接收到資料時,核心必須針對各協議層的
處理,對資料進行拆包與分析,然後才能將有效資料傳遞給應用程式。在傳送資料時,核心必須首先根據各個協議層的要求打包資料,然後才能傳送。
為支援通過檔案介面處理網路連線(按照應用程式的觀點), linux使用了源於bsd的套接字抽象。套接字可以看作應用程式、檔案介面、核心的網路實現之間的**
檔案系統
linux系統由數以千計乃至百萬計的檔案組成,其資料儲存在硬碟或其他塊裝置(例如zip驅動、軟碟機、光碟等)。儲存使用了層次式檔案系統。檔案系統使用目錄結構組織儲存的資料,並將其他元資訊(例如所有者、訪問許可權等)與實際資料關聯起來
核心必須提供乙個額外的軟體層,將各種底層檔案系統的具體特性與應用層(和核心自身)隔離開來。該軟體層稱為vfs
(virtual filesystem或virtual filesystem switch,虛擬檔案系統或虛擬檔案系統交換器)。vfs
既是向下的介面(所有檔案系統都必須實現該介面),同時也是向上的介面(使用者程序通過系統呼叫最終能夠訪問檔案系統功能)
模組和熱插拔
模組用於在執行時動態地向核心新增功能,如裝置驅動程式、檔案系統、網路協議等,實際上核心的任何子系統幾乎都可以模組化
模組還可以在執行時從核心解除安裝,這在開發新的核心元件時很有用。模組在本質上不過是普通的程式,只是在核心空間而不是使用者空間執行而已。模組必須提供某些**段在模組初始化(和終止)時執行,以便向核心註冊和登出模組。另外,模組**與普通核心**的權利(和義務)都是相同的,可以像編譯到核心中的**一樣,訪問核心中所有的函式和資料
快取核心使用快取來改進系統效能。從低速的塊裝置讀取的資料會暫時保持在記憶體中,即使資料在當時已經不再需要了。在應用程式下一次訪問該資料時,它可以從訪問速度較快的記憶體中讀取,因而繞
過了低速的塊裝置。由於核心是通過基於頁的記憶體對映來實現訪問塊裝置的,因此快取也按頁組織,也就是說整頁都快取起來,故稱為頁快取
(page cache)
物件管理和引用計數
核心中很多地方都需要跟蹤記錄c語言中結構的例項。儘管這些物件的用法大不相同,但各個不同子系統的某些操作非常類似,例如引用計數。這導致了**複製。由於這是個糟糕的問題,因此在核心版本2.5的開發期間,核心採用了一般性的方法來管理核心物件。所引入的框架並不只是為了防止**複製,同時也為核心不同部分管理的物件提供了一致的檢視,在核心的許多部分可以有效地使用相關資訊,如電源管理
一般性的核心物件機制可用於執行下列物件操作:
下列資料結構將嵌入其他資料結構中,用作核心物件的基礎
資料型別
核心使用typedef
來定義各種資料型別,以避免依賴於體系結構相關的特性,比如,各個處理器上標準資料型別的位長可能都不見得相同。定義的型別名稱如sector_t
(用於指定塊裝置上的扇區編號)、pid_t
(表示程序id)等
核心定義了若干整數資料型別,不僅明確標明了是有符號數還是無符號數,而且還指定了相關型別的精確位數。例如,__s8
和__u8
分別是有符號(__s8)和無符號(__u8)的8位整數。__u16
和__s16
、__u32
和__s32
、__u64
和__s64
的定義類似
源**中的多處指標都標記為__user
,該識別符號對使用者空間程式設計是未知的。核心使用該記號來標識指向使用者位址空間中區域的指標,在沒有進一步預防措施的情況下,不能輕易訪問這些指標指向的區域。這是因為記憶體是通過頁表對映到虛擬位址空間的使用者空間部分的,而不是由物理記憶體直接對映的。因此核心需要確保指標所指向的頁幀確實存在於物理記憶體中
【完】
Linux核心的組成部分
linux核心主要有 5個子系統組成 程序排程 sched 記憶體管理 mm 虛擬檔案系統 vfs 網路介面 net 和程序間通訊 ipc 1 程序排程 程序在程序排程子系統中微觀序列,巨集觀並行。其餘 4 個子系統都依賴於程序排程系統,因為每個子系統也需要掛起或恢復程序,當它們需要做這些工作時,都...
linux核心的5大組成部分
乙個完整的linux核心一般由5部分組成,它們分別是記憶體管理 程序管理 程序間通訊 虛擬檔案系統和網路介面。1 記憶體管理 記憶體管理主要完成的是如何合理有效地管理整個系統的物理記憶體,同時快速響應核心各個子系統對記憶體分配的請求。linux記憶體管理支援虛擬記憶體,而多餘出的這部分記憶體就是通過...
Linux系統的組成部分
核心是系統的核心,是執行程式和管理諸如磁碟和印表機等硬體裝置的核心程式。作業系統是乙個用來和硬體打交道並為使用者程式提供有限服務集的低階支撐軟體。乙個計算機系統是乙個硬體和軟體的共生體,它們相互依賴 不可分割。外圍裝置 處理器 記憶體 硬碟和其他的電子塞河北組成了計算機的發動機,但是如果沒有軟體來操...