- Linux內核完全注釋(20周年版·第2版)
- 趙炯編著
- 1660字
- 2024-05-10 12:20:17
2.1 Linux內核模式和體系結構
一個完整可用的操作系統主要由4部分組成:硬件、操作系統內核、操作系統服務和用戶應用程序,如圖2-1所示。用戶應用程序是指那些字處理程序、互聯網瀏覽器程序或用戶自行編制的各種應用程序;操作系統服務程序是指向用戶提供的服務,被看作是操作系統部分功能的程序。在Linux操作系統上,這些程序包括X窗口系統、shell命令解釋系統以及內核編程接口等系統程序;操作系統內核是本書所感興趣的部分,它主要用于對硬件資源的抽象和訪問調度。

圖2-1 操作系統組成部分
目前,操作系統內核的結構模式主要可分為整體式的單內核模式和層次式的微內核模式。而本書所注釋的Linux 0.11內核,則采用了單內核模式。單內核模式的主要優點是內核代碼結構緊湊、執行速度快,不足之處主要是層次結構性不強。
在單內核模式系統中,操作系統提供服務的流程為:應用主程序使用指定的參數執行系統調用指令(int x80),使CPU從用戶態(User Mode)切換到內核態(Kernel Mode),然后系統根據參數值調用特定的系統調用服務程序,而這些服務程序則根據需要調用底層的支持函數以完成特定的功能。在完成了應用程序要求的服務后,操作系統又從內核態切換回用戶態,回到應用程序中繼續執行后續指令。因此,單內核模式的內核也可粗略地分為三層:調用服務的主程序層、執行系統調用的服務層和支持系統調用的底層函數,如圖2-2所示。

圖2-2 單內核模式的簡單結構模型
Linux內核主要由5個模塊構成,它們分別是:進程調度模塊、內存管理模塊、文件系統模塊、進程間通信模塊和網絡接口模塊。
進程調度模塊用來負責控制進程對CPU資源的使用。所采取的調度策略使各進程能夠公平合理地訪問CPU,同時保證內核能及時地執行硬件操作。內存管理模塊用于確保所有進程能夠安全地共享機器主內存區,同時,內存管理模塊還支持虛擬內存管理方式,使Linux的進程可以使用比實際內存空間更多的內存容量。并可以利用文件系統把暫時不用的內存數據塊交換到外部存儲設備上去,當需要時再交換回來。文件系統模塊用于支持對外部設備的驅動和存儲。虛擬文件系統模塊通過向所有的外部存儲設備提供一個通用的文件接口,隱藏了各種硬件設備的不同細節,從而提供并支持與其他操作系統兼容的多種文件系統格式。進程間通信模塊子系統用于支持多種進程間的信息交換方式。網絡接口模塊提供對多種網絡通信標準的訪問并支持許多網絡硬件。
這幾個模塊之間的依賴關系見圖2-3。其中的連線代表它們之間的依賴關系,虛線和虛框部分表示Linux 0.11中還未實現的部分(從Linux 0.95版才開始逐步實現虛擬文件系統,而網絡接口的支持到0.96版才有)。

圖2-3 Linux內核系統模塊結構及相互依賴關系
由圖可以看出,所有的模塊都與進程調度模塊存在依賴關系。因為它們都需要依靠進程調度程序來掛起(暫停)或重新運行它們的進程。通常,一個模塊會在等待硬件操作期間被掛起,而在操作完成后才可繼續運行。例如,當一個進程試圖將一數據塊寫到軟盤上去時,軟盤驅動程序就可能在啟動軟盤加速期間將該進程置為掛起等待狀態,而在軟盤進入正常轉速后再使得該進程能繼續運行。另外3個模塊也是由于類似的原因而與進程調度模塊存在依賴關系。
其他幾個依賴關系有些不太明顯,但同樣很重要。進程調度子系統需要使用內存管理子系統來調整一些特定進程所使用的物理內存空間。進程間通信子系統則需要依靠內存管理子系統來支持共享內存通信機制。這種通信機制允許兩個進程訪問內存的同一個區域以進行進程間信息的交換。虛擬文件系統也會使用網絡接口來支持網絡文件系統(NFS),同樣也能使用內存管理子系統來提供內存虛擬盤(ramdisk)設備。而內存管理子系統也會使用文件系統來支持內存數據塊的交換操作。若從單內核模式結構模型出發,我們還可以根據Linux 0.11內核源代碼的結構將內核主要模塊繪制成圖2-4所示的框圖結構。
其中內核級中的幾個方框,除了硬件控制方框以外,其他粗線方框分別對應內核源代碼的目錄組織結構。除了這些圖中已經給出的依賴關系以外,所有這些模塊還會依賴于內核中的通用資源。這些資源包括內核所有子系統都會調用的內存分配和收回函數、打印警告或出錯信息函數以及一些系統調試函數。

圖2-4 內核結構框圖
- Linux運維之道(第3版)
- Citrix XenApp Performance Essentials
- 構建高可用Linux服務器(第4版)
- Google系統架構解密:構建安全可靠的系統
- Python基礎教程(第3版)
- Windows Server 2012網絡操作系統項目教程(第4版)
- 應急指揮信息系統設計
- 鴻蒙入門:HarmonyOS應用開發
- Implementing Domain-Specific Languages with Xtext and Xtend(Second Edition)
- Mastering AWS CloudFormation
- Instant Getting Started with VMware Fusion
- 用“芯”探核:基于龍芯的Linux內核探索解析
- 嵌入式Linux設備驅動程序開發指南(原書第2版)
- 嵌入式實時操作系統:基于ARM Mbed OS的應用實踐
- Instant XenMobile MDM