1. 程式人生 > >Linux核心的五大模組

Linux核心的五大模組

在這裡插入圖片描述

一、程序排程模組

  Linux以程序作為系統資源分配的基本單位,並採用動態優先順序的程序高階演算法,保證各個程序使用處理機的合理性。程序排程模組主要是對程序使用的處理機進行管理和控制。

【程序建立】:

  在Linux環境程式設計時,一般採用fork()/vfork()函式(fork 是 建立一個子程序,並把父程序的記憶體資料copy到子程序中;vfork是 建立一個子程序,並和父程序的記憶體資料share一起用)來建立新的程序,當然,那是在使用者空間的函式,它會呼叫核心中的clone()系統呼叫,由clone()函式繼續呼叫do_fork()完成程序的建立。

fork()/vfork()/_clone--
->clone()--->do_fork()--->copy_process()

【程序撤銷】:

  程序終止後,需要通知核心以便核心釋放程序所擁有的資源,包括記憶體、開啟檔案以及其他資源,如訊號量。程序終止的一般方式是呼叫exit()庫函式,該函式釋放C函式庫所分配的資源,執行程式設計者所註冊的每個函式,並結束從系統回收程序的那個系統呼叫。

【程序切換】:

  程序切換又稱為任務切換、上下文切換。它是這樣一種行為,為了控制程序的執行,核心掛起當前在CPU上執行的程序,並恢復以前掛起的某個程序的執行。   在本質上,每個程序切換由兩部分組成:

  • 切換頁全域性目錄以安裝一個新的地址空間;
  • 切換核心態堆疊和硬體上下文,因為硬體上下文提供了核心執行新程序所需要的所有資訊,包括CPU暫存器,主要有switch_to()函式完成。

【程序排程】:

  現代的Linux中,排程演算法可以在固定時間內(與可執行程序數量無關)選中要執行的程序。首先,我們必須知道程序可以分為實時程序與普通程序。每個LInux程序總是按照如下的排程型別被排程:先進先出的實時程序、時間片輪轉的實時程序、普通的分時程序。排程演算法根據程序是普通程序還是實時程序而有很大不同。

二、程序間通訊模組

  程序間通訊主要用於控制不同程序之間在使用者空間的同步、資料共享和交換。由於不同的使用者程序擁有不同的程序空間,因此程序間的通訊要藉助於核心的中轉來實現。一般情況下,當一個程序等待硬體操作完成時,會被掛起。當硬體操作完成,程序被恢復執行,而協調這個過程的就是程序間的通訊機制   程序間通訊模組保證了Linux支援多種程序間通訊機制,包括管道、命名管道、訊息佇列、訊號量和共享記憶體等。

三、記憶體管理模組

  Linux的記憶體管理模組採用先進的虛擬儲存機制,實現對多程序的儲存管理。它提供了十分可靠的儲存保護措施,對程序賦予不同的許可權,使用者不能直接訪問系統的程式和資料,保證了系統的安全性。同時,為每個使用者程序分配一個相互獨立的虛擬地址空間。

四、檔案系統模組

  Linux 的檔案系統模組採用先進的虛擬檔案系統(VFS)技術,遮蔽了各種檔案系統的差別,為處理各種不同的檔案系統提供了統一的介面,支援多種不同的物理檔案系統達90多種。同時,Linux把各種硬體裝置看作一種特殊的檔案來處理,用管理檔案的方法管理裝置,非常方便、有效。

五、網路介面模組

  Linux具有最強大的網路功能。網路介面模組通過套接字(Socket)機制實現計算機之間的網路通訊,並採用網路層次模型提供對多種網路協議和網路硬體裝置的支援。   網路介面提供了對各種網路標準的實現和各種網路硬體的支援。網路介面一般分為網路協議和網路驅動程式。網路協議部分負責實現每一種可能的網路傳輸協議。網路裝置驅動程式則主要負責與硬體裝置進行通訊,每一種可能的網路硬體裝置都有相應的裝置驅動程式