內存管理
內核所管理的另外一個重要資源是內存。為了提高效率,如果由硬件管理虛擬內存,內存是按照所謂的內存頁 方式進行管理的(對於大部分體系結構來說都是 4KB)。Linux 包括了管理可用內存的方式,以及物理和虛擬映射所使用的硬件機制。
不過內存管理要管理的可不止 4KB 緩沖區。Linux 提供了對 4KB 緩沖區的抽象,例如 slab 分配器。這種內存管理模式使用 4KB 緩沖區為基數,然後從中分配結構,並跟蹤內存頁使用情況,比如哪些內存頁是滿的,哪些頁面沒有完全使用,哪些頁面為空。這樣就允許該模式根據系統需要來動態調整內存使用。
為了支持多個用戶使用內存,有時會出現可用內存被消耗光的情況。由於這個原因,頁面可以移出內存並放入磁盤中。這個過程稱為 交換 ,因為頁面會被從內存 交換 到硬盤上。內存管理的源代碼可以在 ./linux/mm 中找到。
虛擬文件系統
虛擬文件系統(VFS)是 Linux 內核中非常有用的一個方面,因為它為文件系統提供了一個通用的接口抽象。VFS 在 SCI 和內核所支持的文件系統之間提供了一個交換層(請參看圖 4)。
圖 4. VFS 在用戶和文件系統之間提供了一個交換層
在 VFS 上面,是對諸如 open、close、read 和 write 之類的函數的一個通用 API 抽象。在 VFS 下面是文件系統抽象,它定義了上層函數的實現方式。它們是給定文件系統(超過 50 個)的插件。文件系統的源代碼可以在 ./linux/fs 中找到。
文件系統層之下是緩沖區緩存,它為文件系統層提供了一個通用函數集(與具體文件系統無關)。這個緩存層通過將數據保留一段時間(或者隨即預先讀取數據以便在需要是就可用)優化了對物理設備的訪問。緩沖區緩存之下是設備驅動程序,它實現了特定物理設備的接口。
網絡堆棧
網絡堆棧在設計上遵循模擬 協議 本身的分層體系結構。回想一下,Internet Protocol (IP) 是傳輸 協議 (通常稱為傳輸控制 協議 或 TCP)下面的核心網絡層協議。TCP 上面是 socket 層,它是通過 SCI 進行調用的。
socket 層是網絡子系統的標准 API,它為各種網絡協議提供了一個用戶接口。從原始幀訪問到 IP 協議數據單元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 層提供了一種標准化的方法來管理連接,並在各個終點之間移動數據。內核中網絡源代碼可以在 ./linux/net 中找到。
設備驅動程序
Linux 內核中有大量代碼都在設備驅動程序中,它們能夠運轉特定的硬件設備。Linux 源碼樹提供了一個驅動程序子目錄,這個目錄又進一步劃分為各種支持設備,例如 Bluetooth、I2C、serial 等。設備驅動程序的代碼可以在 ./linux/drivers 中找到。
依賴體系結構的代碼
盡管 Linux 很大程度上獨立於所運行的體系結構,但是有些元素則必須考慮體系結構才能正常操作並實現更高效率。./linux/arch 子目錄定義了內核源代碼中依賴於體系結構的部分,其中包含了各種特定於體系結構的子目錄(共同組成了 BSP)。對於一個典型的桌面系統來說,使用的是 i386 目錄。每個體系結構子目錄都包含了很多其他子目錄,每個子目錄都關注內核中的一個特定方面,例如引導、內核、內存管理等。這些依賴體系結構的代碼可以在 ./linux/arch 中找到。
Linux 內核的一些有用特性
如果 Linux 內核的可移植性和效率還不夠好,Linux 還提供了其他一些特性,它們無法劃分到上面的分類中。
作為一個生產操作系統和開源軟件,Linux 是測試新協議及其增強的良好平台。Linux 支持大量網絡協議,包括典型的 TCP/IP,以及高速網絡的擴展(大於 1 Gigabit Ethernet [GbE] 和 10 GbE)。Linux 也可以支持諸如流控制傳輸協議(SCTP)之類的協議,它提供了很多比 TCP 更高級的特性(是傳輸層協議的接替者)。
Linux 還是一個動態內核,支持動態添加或刪除軟件組件。被稱為動態可加載內核模塊,它們可以在引導時根據需要(當前特定設備需要這個模塊)或在任何時候由用戶插入。
Linux 最新的一個增強是可以用作其他操作系統的操作系統(稱為系統管理程序)。最近,對內核進行了修改,稱為基於內核的虛擬機(KVM)。這個修改為用戶空間啟用了一個新的接口,它可以允許其他操作系統在啟用了 KVM 的內核之上運行。除了運行 Linux 的其他實例之外, Microsoft? Windows ? 也可以進行虛擬化。惟一的限制是底層處理器必須支持新的虛擬化指令。