Linux内核功能及架构
簡介
??Linux內核的作用是將應用層序的請求傳遞給硬件,并充當底層驅動程序,對系統中的各種設備和組件進行尋址。Linux進程采用層次結構,每個進程都依賴于一個父進程。內核啟動 init 程序作為第一個進程。該進程負責進一步的系統初始化操作。init 進程是進程樹的根,所有的進程都直接或者間接起源于該進程。
從技術層面講,內核是硬件與軟件之間的一個中間層。作用是將應用程序的請求傳遞給硬件,并充當底層驅動程序,對系統中的各種設備和組件進行尋址。
從應用程序的層面講,應用程序與硬件沒有聯系,只與內核有聯系,內核是應用程序知道的層次中的最底層。在實際工作中內核抽象了相關細節。
內核是一個資源管理程序。負責將可用的共享資源(CPU時間、磁盤空間、網絡連接等)分配得到各個系統進程。
內核就像一個庫,提供了一組面向系統的命令。系統調用對于應用程序來說,就像調用普通函數一樣。
?
?
Linux內核的核心功能
1、進程管理
??內核負責創建和銷毀進程,并處理它們與外部世界的聯系(輸入和輸出)。 不同進程間通訊(通過信號,管道,或者進程間通訊原語)對整個系統功能來說是基本的,也由內核處理。 另外,調度器,控制進程如何共享 CPU, 是進程管理的一部分。 更通常地,內核的進程管理活動實現了多個進程在一個單個或者幾個 CPU 之上的抽象。
2、內存管理
??計算機的內存是主要的資源,處理它所用的策略對系統性能是至關重要的。 內核為所有進程的每一個都在有限的可用資源上建立了一個虛擬地址空間。 內核的不同部分與內存管理子系統通過一套函數調用交互,從簡單的 malloc/free 對到更多更復雜的功能。
3、文件系統
??Unix 在很大程度上基于文件系統的概念; 幾乎 Unix 中的任何東西都可看作一個文件。 內核在非結構化的硬件之上建立了一個結構化的文件系統,結果是文件的抽象非常多地在整個系統中應用。 另外, Linux 支持多個文件系統類型,就是說,物理介質上不同的數據組織方式。 例如,磁盤可被格式化成標準 Linux 的 ext3 文件系統,普遍使用的 FAT 文件系統,或者其他幾個文件系統。
4、設備控制
??幾乎每個系統操作最終都映射到一個物理設備上。 除了處理器,內存和非常少的別的實體之外,全部中的任何設備控制操作都由特定于要尋址的設備相關的代碼來進行。 這些代碼稱為設備驅動。 內核中必須嵌入系統中出現的每個外設的驅動,從硬盤驅動到鍵盤和磁帶驅動器。 內核功能的這個方面是本書中的我們主要感興趣的地方。
5、網絡
??網絡必須由操作系統來管理,因為大部分網絡操作不是特定于某一個進程: 進入系統的報文是異步事件。 報文在某一個進程接手之前必須被收集、識別、分發。 系統負責在程序和網絡接口之間遞送數據報文,它必須根據程序的網絡活動來控制程序的執行。 另外,所有的路由和地址解析問題都在內核中實現。
?
?
內核整體架構
根據內核的核心功能,Linux內核提出了5個子系統,分別為:
Process Scheduler(進程管理)、Memory Manager(內存管理)、VFS(Virtual File System 虛擬文件系統)、Network(網絡子系統)、IPC(Inter-Process Communication 進程間通信)
?
進程管理(Process Scheduler)
??進程管理是Linux內核中最重要的子系統,它主要提供對CPU的訪問控制。因為在計算機中,CPU資源是有限的,而眾多的應用程序都要使用CPU資源,所以需要“進程調度子系統”對CPU進行調度管理。進程調度子系統包括4個子模塊:
?
內存管理(Memory Manager)
??內存管理同樣是Linux內核中最重要的子系統,它主要提供對內存資源的訪問控制。Linux系統會在硬件物理內存和進程所使用的內存(稱作虛擬內存)之間建立一種映射關系,這種映射是以進程為單位,因而不同的進程可以使用相同的虛擬內存,而這些相同的虛擬內存,可以映射到不同的物理內存上。內存管理子系統包括3個子模塊:
Architecture Specific Managers,體系結構相關部分。提供用于訪問硬件Memory的虛擬接口。
Architecture Independent Manager,體系結構無關部分。提供所有的內存管理機制,包括:以進程為單位的memory mapping;虛擬內存的Swapping。
System Call Interface,系統調用接口。通過該接口,向用戶空間程序應用程序提供內存的分配、釋放,文件的map等功能。
虛擬文件系統(Virtual File System)
??傳統意義上的文件系統是一種存儲和組織計算機數據的方法。它用易懂、人性化的方法(文件和目錄結構),抽象計算機磁盤、硬盤等設備上冰冷的數據塊,從而使對它們的查找和訪問變得容易。因而文件系統的實質就是“存儲和組織數據的方法”,文件系統的表現形式就是“從某個設備中讀取數據 和 向某個設備寫入數據”。
??隨著計算機技術的進步,存儲和組織數據的方法也是在不斷進步的,從而導致有多種類型的文件系統,例如FAT、FAT32、NTFS、EXT2、EXT3等等。而為了兼容,操作系統或者內核,要以相同的表現形式,同時支持多種類型的文件系統,這就延伸出了虛擬文件系統(VFS)的概念。VFS的功能就是管理各種各樣的文件系統,屏蔽它們的差異,以統一的方式,為用戶程序提供訪問文件的接口。
??我們可以從磁盤、硬盤、NAND Flash等設備中讀取或寫入數據,因而最初的文件系統都是構建在這些設備之上的。這個概念也可以推廣到其它的硬件設備,例如內存、顯示器(LCD)、鍵盤、串口等等。我們對硬件設備的訪問控制,也可以歸納為讀取或者寫入數據,因而可以用統一的文件操作接口訪問。Linux內核就是這樣做的,除了傳統的磁盤文件系統之外,它還抽象出了設備文件系統、內存文件系統等等。這些邏輯,都是由VFS子系統實現。VFS子系統包括6個子模塊:
Device Drivers,設備驅動,用于控制所有的外部設備及控制器。由于存在大量不能相互兼容的硬件設備(特別是嵌入式產品),所以也有非常多的設備驅動。因此,Linux內核中將近一半的Source Code都是設備驅動,大多數的Linux底層工程師(特別是國內的企業)都是在編寫或者維護設備驅動,而無暇估計其它內容(它們恰恰是Linux內核的精髓所在)。
Device Independent Interface, 該模塊定義了描述硬件設備的統一方式(統一設備模型),所有的設備驅動都遵守這個定義,可以降低開發的難度。同時可以用一致的形勢向上提供接口。
Logical Systems,每一種文件系統,都會對應一個Logical System(邏輯文件系統),它會實現具體的文件系統邏輯。
System Independent Interface,該模塊負責以統一的接口(快設備和字符設備)表示硬件設備和邏輯文件系統,這樣上層軟件就不再關心具體的硬件形態了。
System Call Interface,系統調用接口,向用戶空間提供訪問文件系統和硬件設備的統一的接口。
?
網絡子系統(Network)
網絡子系統在Linux內核中主要負責管理各種網絡設備,并實現各種網絡協議棧,最終實現通過網絡連接其它系統的功能。在Linux內核中,網絡子系統幾乎是自成體系,它包括5個子模塊:
Network Device Drivers,網絡設備的驅動,和VFS子系統中的設備驅動是一樣的。
Device Independent Interface,和VFS子系統中的是一樣的。
Network Protocols,實現各種網絡傳輸協議,例如IP, TCP, UDP等等。
Protocol Independent Interface,屏蔽不同的硬件設備和網絡協議,以相同的格式提供接口(socket)。
System Call interface,系統調用接口,向用戶空間提供訪問網絡設備的統一的接口。
?
內容參考:Linux內核的整體架構、Linux內核功能
總結
以上是生活随笔為你收集整理的Linux内核功能及架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Systemd 入门及常用命令
- 下一篇: 备考一天速通计算机三级网络技术