您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何進行Linux 內核架構分析,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
概述
通常地,Linux操作系統如下圖所示,由四大子系統組成:
用戶應用層: 特定Linux系統上使用的應用程序集會有所不同,具體取決于計算機系統的用途,但典型示例包括文字處理應用程序和Web瀏覽器,嵌入式Linux往往會進行大量的裁剪,將不需要的應用裁剪掉。
O/S 服務層: O/S服務通常被認為是操作系統的一部分(窗口系統,命令外殼等);此外,該子系統還包含內核的編程接口(編譯器工具和庫d)
Linux內核層:這是本文關注的主要子系統,內核抽象并調控對硬件資源(包括CPU)的訪問。
硬件控制層:該子系統由Linux安裝中的所有可能的物理設備組成;例如,CPU,內存硬件,硬盤和網絡硬件都是該子系統的成員
2.內核架構
2.1 內核之作用
Linux內核為用戶進程提供了虛擬機接口。 進程編程無需知道計算機上安裝了什么物理硬件,Linux內核將所有硬件抽象為一致的虛擬接口。
此外,Linux以對用戶進程透明的方式支持多任務:每個進程都可以像它是計算機上唯一的進程一樣工作,并且專用于占用主內存和其他硬件資源。內核實際上同時運行多個進程,并負責中介對硬件資源的訪問,以便在維護進程間安全性的同時,每個進程都具有公平的訪問權限。
2.2 內核之結構
內核主要由以下五大組成部分:
進程調度器(SCHED)負責控制對CPU的進程訪問。調度程序執行一項調度策略,以確保進程可以公平地訪問CPU,同時確保內核按時執行必要的硬件操作。
內存管理器(MM)允許多個進程安全地共享機器的主內存系統。此外,內存管理器還支持虛擬內存,該虛擬內存允許Linux支持使用的內存量超過系統可用內存的進程。使用文件系統將未使用的內存換出到持久性存儲,然后在需要時交換回來。
虛擬文件系統(VFS)通過為所有設備提供通用文件接口來抽象化各種硬件設備的詳細信息。此外,VFS支持幾種與其他操作系統兼容的文件系統格式。
網絡接口(NET)提供對幾種網絡標準和各種網絡硬件的訪問。
進程間通信(IPC)子系統實現在單個Linux系統上進行進程間通信的多種機制。
從依賴性的角度分析:
進程調度程序子系統使用內存管理器為恢復特定進程的特定進程調整硬件內存映射。
進程間通信子系統依賴于內存管理器來支持共享內存通信機制。此機制允許兩個進程除了訪問其通常的私有內存之外,還訪問公共內存的區域。
虛擬文件系統使用網絡接口來支持網絡文件系統(NFS),并且還使用內存管理器來提供ramdisk設備。
內存管理器使用虛擬文件系統來支持交換;這是內存管理器依賴進程調度程序的唯一原因。當某個進程訪問當前已換出的內存時,內存管理器會向文件系統發出請求,從持久性存儲中獲取內存,并掛起該進程。
2.3 內核之重要數據結構
任務鏈表(Task List):流程調度程序為每個活動的流程維護一個數據塊。這些數據塊存儲在稱為任務列表的鏈接列表中。進程調度程序始終維護一個指示當前活動進程的當前指針。
內存映射(memry map):內存管理器基于每個進程存儲虛擬地址到物理地址的映射,還存儲有關如何獲取和替換特定頁面的其他信息。此信息存儲在內存映射數據結構中,該結構存儲在流程調度程序的任務列表中。
索引節點(I-node):虛擬文件系統使用索引節點(索引節點)表示邏輯文件系統上的文件。索引節點數據結構存儲文件塊號到物理設備地址的映射。如果兩個進程打開了相同的文件,則可以在多個進程之間共享I節點數據結構。共享是通過兩個任務數據塊指向相同的i節點來完成的。
數據連接(Data Connection) 所有數據結構都植根于流程調度程序的任務列表。系統上的每個進程都有一個數據結構,該數據結構包含一個指向其內存映射信息的指針,以及指向代表所有打開文件的i節點的指針。最后,任務數據結構還包含指向數據結構的指針,該數據結構表示與每個任務關聯的所有打開的網絡連接。
3.各子系統架構分析
3.1 進程調度器架構
進程調度器是Linux內核中最重要的子系統。其目的是控制對計算機CPU的訪問。這不僅包括用戶進程的訪問,還包括其他內核子系統的訪問。
由上圖可知,進程調度器可分為四大模塊:
調度策略模塊負責判斷哪個進程可以訪問CPU;設計該策略是為了使進程可以公平地訪問CPU。
體系結構相關模塊特定于體系結構的模塊設計有一個公共接口,用于抽象任何特定計算機體系結構的詳細信息。這些模塊負責與CPU通信以掛起和恢復進程。這些操作涉及知道每個進程需要保留哪些寄存器和狀態信息,并執行匯編代碼以執行掛起或恢復操作。
體系結構無關模塊與體系結構無關的模塊與策略模塊進行通信,以確定下一步將執行哪個進程,然后調用特定于體系結構的模塊以恢復適當的進程。此外,此模塊調用內存管理器以確保為恢復的過程正確還原了內存硬件
系統調用接口模塊允許用戶進程僅訪問內核顯式導出的那些資源。這將用戶進程對內核的依賴性限制為一個定義良好的接口,盡管其他內核模塊的實現發生了變化,該接口很少更改
進程調度器維護一個數據結構,即任務列表,每個活動進程具有一個條目。此數據結構包含足夠的信息來暫停和恢復過程,但還包含其他記帳和狀態信息。該數據結構可在整個內核層公開使用。
如前所述,進程調度程序將調用內存管理器子系統。因此,進程調度程序子系統依賴于內存管理器子系統。此外,所有其他內核子系統都依賴進程調度程序來掛起和恢復進程,同時等待硬件請求完成。這些依賴關系通過函數調用和對共享任務列表數據結構的訪問來表示。所有內核子系統都讀取和寫入代表當前任務的數據結構,從而導致整個系統中的雙向數據流。
除了內核層中的數據和控制流之外,O / S服務層還為用戶進程提供了一個接口,用于注冊計時器通知。這對應于[Garlan 1994]中描述的隱式執行體系結構樣式。這導致控制從調度程序流向用戶進程。恢復休眠過程的通常情況在正常情況下不視為控制流程,因為用戶進程無法檢測到此操作。最后,調度程序與CPU通信以掛起和恢復進程。這導致數據流和控制流。CPU負責中斷當前正在執行的進程,并允許內核調度另一個進程。
3.2 內存管理器架構
內存管理器子系統負責控制對硬件內存資源的進程訪問。這是通過硬件內存管理系統完成的,該系統提供了進程內存引用與機器物理內存之間的映射。內存管理器子系統在每個進程的基礎上維護此映射,以便兩個進程可以訪問相同的虛擬內存地址并實際使用不同的物理內存位置。此外,內存管理器子系統還支持交換。它將未使用的內存頁面移至持久性存儲,以使計算機支持的虛擬內存多于物理內存。
3.2.1 模塊結構分析
內存管理器主要由以下三個模塊組成:
體系結構相關模塊為內存管理硬件提供了虛擬接口
體系結構無關模塊執行所有的每個進程映射和虛擬內存交換。此模塊負責確定在出現頁面錯誤時將收回哪些內存頁面-由于沒有預期將需要更改此策略,因此沒有單獨的策略模塊。
系統調用接口模塊提供對用戶進程的受限訪問。該接口允許用戶進程分配和釋放存儲,還可以執行內存映射文件I / O。
3.2.2 從數據表征的角度分析:
內存管理器存儲物理地址到虛擬地址的每個進程的映射。該映射作為參考存儲在流程調度程序的任務列表數據結構中。除了此映射之外,數據塊中的其他詳細信息還告訴內存管理器如何獲取和存儲頁面。例如,可執行代碼可以將可執行映像用作后備存儲,但是必須將動態分配的數據備份到系統頁面文件中。最后,內存管理器在此數據結構中存儲權限和記帳信息,以確保系統安全。
3.2.3 數據流,控制流和依賴關系
內存管理器控制內存硬件,并在發生頁面錯誤時從硬件接收通知-這意味著內存管理器模塊和內存管理器硬件之間存在雙向數據和控制流。另外,內存管理器使用文件系統來支持交換和內存映射的I / O。此要求意味著內存管理器需要對文件系統進行過程調用以存儲和從持久性存儲中獲取內存頁面。由于無法立即完成文件系統請求,因此內存管理器需要暫停一個過程,直到將內存換回為止。此要求導致內存管理器對過程調度程序進行過程調用。同樣,由于每個進程的內存映射都存儲在進程調度程序的數據結構中,因此在內存管理器和進程調度程序之間存在雙向數據流。用戶進程可以在進程地址空間內設置新的內存映射,并可以注冊自己以在新映射的區域內通知頁面錯誤。這引入了從內存管理器到系統調用接口模塊再到用戶進程的控制流。從傳統意義上講,沒有來自用戶進程的數據流,但是用戶進程可以使用系統調用接口模塊中的選擇系統調用從內存管理器中檢索某些信息。
3.3 虛擬文件系統架構
虛擬文件系統旨在提供存儲在硬件設備上的數據的一致視圖。計算機中幾乎所有的硬件設備都是使用通用設備驅動程序接口表示的。虛擬文件系統進一步發展,并允許系統管理員在任何物理設備上安裝一組邏輯文件系統中的任何一個。邏輯文件系統促進與其他操作系統標準的兼容性,并允許開發人員使用不同的策略來實現文件系統。虛擬文件系統抽象了物理設備和邏輯文件系統的詳細信息,并允許用戶進程使用通用接口訪問文件,而不必知道文件駐留在哪個物理或邏輯系統上。
除了傳統的文件系統目標之外,虛擬文件系統還負責加載新的可執行程序。該責任由邏輯文件系統模塊完成,這使Linux支持多種可執行格式。
故簡言之:
抽象物理設備和邏輯文件系統的詳細信息,提供公共訪問接口。
提供通用的設備驅動程序接口。
加載新的可執行程序。
3.3.1 模塊結構分析
可分為四大模塊:
公共驅動抽象模塊 由于存在大量不兼容的硬件設備,因此存在大量的設備驅動程序。Linux系統最常見的擴展是添加了新的設備驅動程序。設備獨立接口模塊提供了所有設備的一致視圖。
邏輯文件系統模塊,每個支持的文件系統都有一個邏輯文件系統模塊。
系統獨立接口層提供了硬件資源與硬件和邏輯文件系統無關的視圖。該模塊使用面向塊或面向字符的文件接口顯示所有資源。
系統調用接口層為用戶進程提供對文件系統的受控訪問。虛擬文件系統僅將特定功能導出到用戶進程。
3.4 網絡接口層架構
網絡子系統允許Linux系統通過網絡連接到其他系統。支持許多可能的硬件設備,以及可以使用的許多網絡協議。網絡子系統抽象了這兩個實現細節,因此用戶進程和其他內核子系統可以訪問網絡而不必知道正在使用什么物理設備或協議。
3.4.1 模塊結構組成
網絡設備驅動程序負責與硬件設備通信。每個可能的硬件設備都有一個設備驅動程序模塊。
設備無關的接口模塊提供了所有硬件設備的一致視圖,因此子系統中的更高級別不需要特定的使用硬件知識。
網絡協議模塊負責實現每種可能的網絡傳輸協議。
協議無關接口模塊提供獨立于硬件設備和網絡協議的接口。這是接口模塊,其他內核子系統使用該接口模塊訪問網絡,而無需依賴特定的協議或硬件。
簡言之,
網絡設備驅動實現底層硬件的控制
設備獨立接口層為上層提供對底層設備驅動層實現統一訪問接口
網絡協議層實現不同的網絡協議
協議獨立接口層用以抽象隱藏不同硬件、不同網絡協議
關于如何進行Linux 內核架構分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。