《深入分析Linux核心原始碼》筆記:Linux 核心結構
一、Linux 核心在整個作業系統中的位置
圖1 Linux核心在整個作業系統中的位置
1)使用者程序
使用者程序位於作業系統的最上層,它執行在作業系統上,成為一個作業系統中的一個程序。
2)系統呼叫介面
應用程式中,可以通過系統呼叫來呼叫作業系統核心中特定的程序,系統呼叫執行在核心態,一般程序執行在使用者態,在linux中,系統呼叫是核心的一部分。
3)Linux核心
核心是作業系統的靈魂,它負責管理磁碟上的檔案、記憶體,負責啟動並執行程式,負責從網路上接收和傳送資料包等。簡言之,核心實際是抽象的資源操作到具體硬體操作細節之間的介面。
4)硬體
這個子系統包括了 Linux 安裝時需要的所有可能的物理裝置。例如,CPU、 記憶體、硬碟、網路硬體等。
二、Linux核心的作用
1、作業系統的核心提供了一個與計算機硬體等價的擴充套件或虛擬的計算平臺。它抽象了許多硬體細節,程式可以以某種統一的方式進行資料處理,而程式設計師則可以避開許多硬體細節。
2、普通使用者則把作業系統看成是一個資源管理者,在它的幫助下,使用者可以以某種易於理解的方式組織自己的資料,完成自己的工作並和其他人共享資源。
3、Linux支援多工,每一個程序執行起來就好像只有他一個程序 執行在計算機一樣,獨佔記憶體和其他硬體資源,實際上,核心可以併發的執行多個程序,他們之間互不干擾,合理公平的使用硬體資源。
三、Linux核心的抽象結構
Linux子系統由5個子系統組成,如圖所示。
圖2 Linux核心子系統之間的關係
1、程序排程(SCHED)控制著程序對CPU的訪問。Linux使用基於優先順序的程序排程演算法選擇新的程序。
2、記憶體管理(MM)允許多個程序安全地共享主記憶體區域。Linux 的記憶體管理支援虛擬記憶體,即在計算機中執行的程式,其程式碼、資料和堆疊的總量可以超過實際記憶體的大小,作業系統只將當前使用的程式塊保留在記憶體中,其餘的程式塊則保留在磁碟上。必要時,作業系統負責在磁碟和記憶體之間交換程式塊。記憶體管理從邏輯上可以分為硬體無關的部分和硬體相關的部分。硬體無關的部分提供了程序的對映和虛擬記憶體的對換;硬體相關的部分為記憶體管理硬體提供了虛擬介面。
3、虛擬檔案系統(VFS)隱藏了各種不同硬體的具體細節,為所有裝置提供了統一的介面,VFS 還支援多達數十種不同的檔案系統。虛擬檔案系統可分為邏輯檔案系統和裝置驅動程式。邏輯檔案系統指Linux 所支援的檔案系統,如 ext2,fat等,裝置驅動程式指為每一種硬體控制器所編寫的裝置驅動程式模組。
4、網路介面(NET)提供了對各種網路標準協議的存取和各種網路硬體的支援。網路介面可分為網路協議和網路驅動程式兩部分。網路協議部分負責實現每一種可能的網路傳輸協議,網路裝置驅動程式負責與硬體裝置進行通訊,每一種可能的硬體裝置都有相應的裝置驅動程式。
5、程序間通訊(IPC) 支援程序間各種通訊機制。從圖2所示可以看出,處於中心位置的是程序排程,所有其他的子系統都依賴於它,因為每個子系統都需要掛起或恢復程序。一般情況下,當一個程序等待硬體操作完成時,它被掛起;當操作真正完成時,程序被恢復執行。例如,當一個程序通過網路傳送一條訊息時,網路介面需要掛起傳送程序,直到硬體成功地完成訊息的傳送,當訊息被髮送出去以後,網路介面給程序返回一個程式碼,表示操作的成功或失敗。其他子系統(記憶體管理,虛擬檔案系統及程序間通訊)以相似的理由依賴於程序排程。
各個子系統之間的依賴關係如下。
1、程序排程與記憶體管理之間的關係:這兩個子系統互相依賴。在多道程式環境下,程式要執行必須為之建立程序,而建立程序的第一件事,就是要將程式和資料裝入記憶體。
2、程序間通訊與記憶體管理的關係:程序間通訊子系統要依賴記憶體管理支援共享記憶體通訊機制,這種機制允許兩個程序除了擁有自己的私有記憶體,還可存取共同的記憶體區域。
3、虛擬檔案系統與網路介面之間的關係:虛擬檔案系統利用網路介面支援網路檔案系統(NFS),也利用記憶體管理支援 RAMDISK 裝置。
4、記憶體管理與虛擬檔案系統之間的關係:記憶體管理利用虛擬檔案系統支援交換,交換程序(swapd)定期地由排程程式排程,這也是記憶體管理依賴於程序排程的唯一原因。當一個程序存取的記憶體對映被換出時,記憶體管理向檔案系統發出請求,同時,掛起當前正在執行的程序。