linux 內核 組成 內核空間 用戶空間 頁表

內核組成

簡介

 

內核的任務

  • 應用程序角度看 內核可以被視爲增強計算機

如內核尋址硬盤時,一系列操作都是內核完成,與程序不相干。

  • 從多程序併發運行角度看 可以將內核視爲資源管理程序

共享資源 包括CPU時間、磁盤空間、網絡連接等

  • 內核視爲庫 提供一組面向系統的命令

實現策略

微內核

最基本的功能直接由中央內核實現,

宏內核

內核組成 部分

內核空間

核心內核 調用設備驅動程序

用戶空間

應用程序 c庫 系統調用內核 核心內核

進程 以及切換 、調度

進程

傳統上 UNIX操作系統下運行的應用程序、服務器以及其他應用程序統稱爲進程。每個進程都在CPU的虛擬內存中分配地址空間。每個進程的地址空間是完全獨立的、因此進程不會意識到彼此的存在。

如果彼此需要通信,必須使用特定的內核機制

切換

由於linux是多任務系統,支持併發執行的若干進程。系統中真正運行的進程數據不能超過cpu數目,因此內核會按照短的時間間隔在不同的進程之間切換

調度

  1. 內核藉助於cpu的幫助,負責進程切換。通過在撤銷進程的Cpu資源之前保存進程所有與狀態相關的要素
  2. 內核必須確定如何在進程之間共享CPU時間。確定哪個進程運行多長時間的過程稱爲調度。

Unix進程

UNIX操作系統有兩種創建新進程的機制分別是fork和exec

Fork

Fork可以創建當前進程的一個副本,父進程和子進程共享一個PID(進程id不同)

爲了提高fork效率,使用copy on write

Exec

將一個新程序加載到當前進程的內存中並執行,舊程序的內存也將刷出,內容替換爲新的數據

線程

Linux採用clone方法創建線程,啓用精確檢查,確認哪些資源與父進程共享,哪些資源爲線程獨立創建

命名空間

每個命名空間可以包含一個特定的PID集合,或可以提供文件系統的不同視圖,在某個命名空間中掛載的卷不會傳播到其他命名空間中。

地址空間與特權級別

容量單位

KIB 2^10

MIB 2^20

GIB 2^30

32位操作系統,2^32 也就是4GIB

64位

虛擬地址劃分

地址空間的最大長度與實際可用的物理內存數量無關,因此被稱爲虛擬內存地址。

LINUX將虛擬地址劃分爲內核空間和用戶空間。

每個用戶進程都有自身的虛擬地址範圍,從0到TASK_SIZE,

用戶空間之上的區域,從TASK_SIZE到2^32或2^62保留給內核專用,用戶進程不能訪問。

特權級別

CPU特權級別 比如IA-32 體系用4中特權級別構成系統,各級別可以看做是環,內環可以訪問更多的功能,外環更少。

lINUX只有兩種不同的狀態:核心態和用戶狀態

兩種狀態的關鍵差別在於對於高於TASK_SIZE 內存區域的訪問。

簡而言之,在用戶狀態禁止訪問內核空間。

用戶進程不能操作或讀取內核空間中的數據,也無法執行內核空間中的代碼。這是內核專用領域,這種機制可以防止進程無意間修改彼此的數據而造成相互干擾。

從用戶狀態到核心狀態的轉換通過系統調用特定的轉換手段完成,

如果普通進程想要執行任何影響整個系統的操作,只能藉助於系統調用內核發出請求。

除了代表用戶程序執行代碼之外,內核還可以由異步硬件中斷激活,然後在中斷上下文中進行。

虛擬和物理地址空間

虛擬地址空間被內核劃分爲很多等長的部分,這部分稱之爲頁。物理內存也劃分爲同樣大小的頁。

頁幀

物理內存頁經常稱作頁幀,頁則專指虛擬地址空間中的頁。

虛擬地址空間和物理內存之間的映射使得進程之間的隔離有一點鬆動。

內核負責將虛擬地址空間映射到物理地址空間,因此可以決定哪些內存區域在進程之間共享,哪些不共享。

用戶空間 用戶層

稱呼用戶運行的應用程序時,有兩個等價的名詞可用,其中之一是用戶層,

另一種說法是某個應用程序在用戶空間運行。

用戶層這個名詞總是指應用程序本身,而用戶空間則不僅可以表示應用程序,還指代了應用程序所運行的虛擬地址空間的一部分,與內核空間相對。

 

 

頁表

定義

用來將虛擬地址空間映射到物理地址空間的數據結構稱爲頁表。

因爲虛擬地址空間的大部分區域都沒有使用,因而就沒有關聯到頁幀,那麼就可以使用功能相同的內存用量少得多的模型,多級分頁。

多級分頁

全局頁表 PGD

虛擬地址的第一部分稱爲全局頁目錄,PGD Page global directory。PGD用於索引進程中的一個數組(每個進程有且僅有一個),該數組就是所謂的全局頁目錄或PGD,PGD的數組項指向另一些數組的起始地址,這些數組稱爲中間頁目錄PMD

中間頁表 PMD

在通過PGD數組項找到對應的PMD之後,則使用PMD來索引,PMD的數組項也是指針,指向下一級數組,稱爲頁表或頁目錄

頁表 PTE

虛擬地址的第三部分稱爲PTE,用作頁表的索引,虛擬內存頁的映射和頁幀的映射就此完成,因爲頁表的數組項是指向頁幀的。

頁表的特色在於,對虛擬地址中不需要的區域,不必創建中間頁目錄或頁表,多級頁表節省了大量內存。

頁幀 Offset

虛擬地址最後一部分稱爲偏移量,指定了頁內部的一個字節位置、

物理內存的分配

內存分配時,必須記錄頁幀的已分配或空間狀態,以免兩個進程使用同樣的內存區域。內核可以分配完整的頁幀,具體的內存更小部分可以交給用戶空間中的標準庫。

夥伴系統

很多時候需要分配連續頁,內核採用古老的技術 夥伴系統

系統中的內存都是兩兩分組,每組中的兩個內存塊稱作夥伴

slab緩存

 

內核本身需要比完整頁幀小得多的內存塊。

一般性緩存 slab緩存

  1. 對頻繁使用的對象,內核定義了只包含了所需類型對象實例的緩存
  2. 通常情況下小內存塊的分配,定義一組slab緩存,用相同函數調用緩存,加K

如kmalloc 和 free

頁面交換和頁面回收

頁面交換

通過利用磁盤空間作爲擴展內存,從而增大了可用的內存,在內核需要使用更多內存時,不經常使用的頁可以寫入硬盤

頁面回收

用於將內存映射被修改的內容與底層的塊設備同步,爲此有時也簡稱爲數據回寫。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章