- 認識linux核心
- Linux核心實現策略
- 哪些地方用到了核心機制?
- Linux程序
- Linux核心原始碼的目錄結構
- Linux核心體系結構
- (1)系統呼叫介面
- (2)程序管理
- (3)記憶體管理
- (4)虛擬檔案系統
- Linux核心體系結構(就是Linux系統是怎麼構成的)
- Linux體系結構和核心結構區別
- Linux核心實現策略
認識linux核心
1.從技術層面講,核心是硬體與軟體之間的一箇中間層。作用是將應用層序的請求傳遞給硬體,並充當底層驅動程式,對系統中的各種裝置和元件進行定址。
2.從應用程式的層面講,應用程式與硬體沒有聯絡,只與核心有聯絡,核心是應用程式知道的層次中的最底層。在實際工作中核心抽象了相關細節。
3.核心是一個資源管理程式。負責將可用的共享資源(CPU時間、磁碟空間、網路連線等)分配得到各個系統程序。
4.核心就像一個庫,提供了一組面向系統的命令。系統呼叫對於應用程式來說,就像呼叫普通函式一樣。
( Linux核心的作用是將應用層序的請求傳遞給硬體,並充當底層驅動程式,對系統中的各種裝置和元件進行定址。目前支援模組的動態裝卸(裁剪)。Linux核心就是基於這個策略實現的)
Linux核心實現策略
1.微核心。最基本的功能由中央核心(微核心)實現。所有其他的功能都委託給一些獨立程序,這些程序透過明確定義的通訊介面與中心核心通訊。
2.單核心。核心的所有程式碼,包括子系統(如記憶體管理、檔案管理、裝置驅動程式)都打包到一個檔案中。核心中的每一個函式都可以訪問到核心中所有其他部分。目前支援模組的動態裝卸(裁剪)。Linux核心就是基於這個策略實現的
哪些地方用到了核心機制?
1.程序(在cpu的虛擬記憶體中分配地址空間,各個程序的地址空間完全獨立;同時執行的程序數最多不超過cpu數目)之間進行通 信,需要使用特定的核心機制。
2.程序間切換(同時執行的程序數最多不超過cpu數目),也需要用到核心機制。
程序切換也需要像FreeRTOS任務切換一樣儲存狀態,並將程序置於閒置狀態/恢復狀態。
3.程序的排程。確認哪個程序執行多長的時間。
Linux程序
1.採用層次結構,每個程序都依賴於一個父程序。核心啟動init程式作為第一個程序。該程序負責進一步的系統初始化操作。init程序是程序樹的根,所有的程序都直接或者間接起源於該程序。
2.透過pstree命令查詢。實際上得系統第一個程序是systemd,而不是init(這也是疑問點)
3.系統中每一個程序都有一個唯一識別符號(ID),使用者(或其他程序)可以使用ID來訪問程序。
Linux核心原始碼的目錄結構
- 核心核心程式碼,包括第3章所描述的各個子系統和子模組,以及其它的支撐子系統,例如電源管理、Linux初始化等
- 其它非核心程式碼,例如庫檔案(因為Linux核心是一個自包含的核心,即核心不依賴其它的任何軟體,自己就可以編譯透過)、韌體集合、KVM(虛擬機器技術)等
- 編譯指令碼、配置檔案、幫助文件、版權說明等輔助性檔案
Linux核心體系結構
Linux核心的主要元件有:系統呼叫介面、程序管理、記憶體管理、虛擬檔案系統、網路堆疊、裝置驅動程式、硬體架構的相關程式碼。
(1)系統呼叫介面
SCI 層提供了某些機制執行從使用者空間到核心的函式呼叫。正如前面討論的一樣,這個介面依賴於體系結構,甚至在相同的處理器家族內也是如此。SCI 實際上是一個非常有用的函式呼叫多路複用和多路分解服務。在 ./linux/kernel 中您可以找到 SCI 的實現,並在 ./linux/arch 中找到依賴於體系結構的部分。
(2)程序管理
程序管理的重點是程序的執行。在核心中,這些程序稱為執行緒,代表了單獨的處理器虛擬化(執行緒程式碼、資料、堆疊和 CPU 暫存器)。在使用者空間,通常使用程序 這個術語,不過 Linux 實現並沒有區分這兩個概念(程序和執行緒)。核心透過 SCI 提供了一個應用程式程式設計介面(API)來建立一個新程序(fork、exec 或 Portable Operating System Interface [POSIX] 函式),停止程序(kill、exit),並在它們之間進行通訊和同步(signal 或者 POSIX 機制)。
程序管理還包括處理活動程序之間共享 CPU 的需求。核心實現了一種新型的排程演算法,不管有多少個執行緒在競爭 CPU,這種演算法都可以在固定時間內進行操作。這種演算法就稱為 O(1) 排程程式,這個名字就表示它排程多個執行緒所使用的時間和排程一個執行緒所使用的時間是相同的。O(1) 排程程式也可以支援多處理器(稱為對稱多處理器或 SMP)。您可以在 ./linux/kernel 中找到程序管理的原始碼,在 ./linux/arch 中可以找到依賴於體系結構的原始碼。
(3)記憶體管理
核心所管理的另外一個重要資源是記憶體。為了提高效率,如果由硬體管理虛擬記憶體,記憶體是按照所謂的記憶體頁 方式進行管理的(對於大部分體系結構來說都是 4KB)。Linux 包括了管理可用記憶體的方式,以及物理和虛擬對映所使用的硬體機制。不過記憶體管理要管理的可不止 4KB 緩衝區。Linux 提供了對 4KB 緩衝區的抽象,例如 slab 分配器。這種記憶體管理模式使用 4KB 緩衝區為基數,然後從中分配結構,並跟蹤記憶體頁使用情況,比如哪些記憶體頁是滿的,哪些頁面沒有完全使用,哪些頁面為空。這樣就允許該模式根據系統需要來動態調整記憶體使用。為了支援多個使用者使用記憶體,有時會出現可用記憶體被消耗光的情況。由於這個原因,頁面可以移出記憶體並放入磁碟中。這個過程稱為交換,因為頁面會被從記憶體交換到硬碟上。記憶體管理的原始碼可以在 ./linux/mm 中找到。
(4)虛擬檔案系統
虛擬檔案系統(VFS)是 Linux 核心中非常有用的一個方面,因為它為檔案系統提供了一個通用的介面抽象。VFS 在 SCI 和核心所支援的檔案系統之間提供了一個交換層
Linux核心體系結構(就是Linux系統是怎麼構成的)
Linux核心的主要元件有:系統呼叫介面、程序管理、記憶體管理、虛擬檔案系統、網路堆疊、裝置驅動程式、硬體架構的相關程式碼。
Linux體系結構和核心結構區別
(1)使用者空間:使用者空間中又包含了,使用者的應用程式,C庫
(2)核心空間:核心空間包括,系統呼叫,核心,以及與平臺架構相關的程式碼