Linux核心 核心基礎知識

2021-09-29 03:50:10 字數 2907 閱讀 6455

核心的版本號主要有四個陣列組成。比如版本號:2.6.26.1 其中,

2 — 主版本號

6 — 從版本號或副版本號

26 — 修訂版本號

1 — 穩定版本號

副版本號表示這個版本是穩定版(偶數)還是開發版(奇數),上面例子中的版本號是穩定版。

穩定的版本可用於企業級環境。

修訂版本號的公升級包括bug修正,新的驅動以及新的特性的追加。

穩定版本號主要是一些關鍵性bug的修改。

微核心

linux核心雖是基於單核心的,但是經過這麼多年的發展,也具備微核心的一些特性。(這也體現了linux實用至上的原則)

所有的unix核心都是可重入核心,所謂的可重入核心意味著有幾個程序可以同時在核心態下執行。當然,在單核處理器下面只有乙個程序在真正執行。但是許多程序可以在核心態下被阻塞,或等待cpu,或等待一些i/o操作。

例如核心代表當前程序發布乙個讀磁碟的請求後,就讓磁碟處理該請求,並將會部分其他程序的執行。當裝置滿足了請求時,乙個中斷就會通知核心去執行原來的程序,原來的程序就恢復執行。

系統可重入的一種方式是編寫函式,以便這些函式值修改區域性變數,而不能修改全域性資料結構,這樣的函式就叫可重入函式。但是可重入核心不僅僅侷限於這樣的可重入函式。核心可以包含非重入函式,並且利用鎖機制保證一次只有乙個程序執行乙個非重入函式。處於核心態的每個程序只能作用於自己的記憶體空間,不能干預其他的程序。

發生硬體中斷時,可重入核心能掛起當前正在執行的程序,即使這個程序處於核心態。這種能力是非常重要的,因為這能提高發出終端的裝置控制器的吞吐量。一旦裝置發出乙個中斷,它一直等到cpu應答它為止。如果核心能夠快速應答,在cpu處理終端時候裝置控制器將能執行其他任務。

下面來看一下核心的可衝入量對核心組織的影響。

核心控制路徑(kernel control path)表示由核心執行的指令序列,從來處理系統呼叫、異常及中斷。

每個程序執行在它私有的位址空間。在使用者態下執行的程序涉及到私有棧、資料和**區。當核心態執行時,程序訪問核心的資料和**區,但是用另外的棧。

因為核心是可重入的,幾個核心控制幀路徑(每個程序與不同的程序相關)可以輪流執行。在這種情況下,每個核心控制路徑都有他自己的私有核心態堆疊。

實現可重入核心需要利用同步機制:如果作用於核心資料結構的核心控制幀路徑被掛起,那麼,其他的核心控制路徑就不能再作用於該資料結構,除非它已被重新設定成乙個一致性狀態。否則兩個控制路徑的互動作用將被破壞所儲存的資訊。

也就是說當兩個程序訪問同乙個資料結構時應該保持一致性。

當程序在核心態執行時,它不能被任意掛起,也不能被掛起,也不能被另乙個程序代替。因此,在單個處理器系統上,所有中斷異常處理程式不能更新的核心資料結構,核心對它們的訪問都將是安全的。

非搶占式核心是低效的,因為執行在不同的cpu的兩個核心控制路徑本可以併發的訪問相同的資料結構。

單處理器系統上的另一種機制是:在進入乙個臨界區之前禁止產生所有的硬體中斷。

為了擴充程序所用的虛擬位址空間的大小,unix作業系統使用磁碟上的交換區域。虛擬記憶體系統以乙個頁框的內容作為交換的基本單位。當一些程序引用已經換出頁時。mmu產生乙個異常,然後異常處理長鬚分配乙個新的頁框,並用儲存在磁碟在從磁碟上的舊內容初始化該頁框。

另一方面,物理記憶體也被用作磁碟和其他塊裝置的快取記憶體。這是因為硬碟非常慢,磁碟的訪問需要幾毫秒,與ram的訪問時間相比,這就相當漫長了。因此,磁碟通常是英系那個系統效能的瓶頸。作為一般規則,在最早的unix系統就已經實現的乙個策略是:通過把把從磁碟獨處的塊轉入到ram的一組磁碟緩衝區中來盡可能地推遲寫磁碟的時間。sync()系統呼叫把所有「髒」的緩衝區(即緩衝區的內容與對應磁碟塊的內容不一樣)寫入磁碟來使得磁碟同步。為了避免資料丟失,所有的作業系統都會注意會周期性地把髒緩衝寫回磁碟。

裝置通過裝置驅動程式(device sriver)與i/o裝置打交道。裝置驅動程式包含在核心中,由控制乙個或多個裝置的資料結構和函式組成,這些裝置包括硬碟、鍵盤、滑鼠、監視器、網路介面以及連線到scci匯流排上的裝置。通過特定的介面,每個驅動程式與核心中的其餘部分(甚至與其他驅動程式)相互作用,這個方式具有以下優點:

操作檔案呼叫關係如圖所示,其中p代表了利用常用的與檔案相關的系統呼叫及在/dev目錄下能找到的檔案向核心發出請求。實際上,裝置檔案是裝置驅動程式介面中使用者可見的部分。每個裝置檔案都有專門的裝置驅動程式,他們有核心呼叫以執行對硬體裝置的請求操作。

為了方便快速找到段選擇符,處理器提供段暫存器,且目的是存放段選擇符。這些段暫存器稱為:cs、ss、ds、es、fs和gs。儘管只有6個段暫存器,且程式可以把同乙個段暫存器用於不同的目的,方法是先將其值儲存在記憶體中,用完後再恢復。

六個暫存器中三個有專門用途:

cs:**段暫存器,指向存放程式指令的段。

ss:棧段暫存器,指向存放當前程式棧的段。

ds:資料段暫存器,指向存放靜態資料或者外部資料的段。

其他三個段暫存器作一般用途,可以用來訪問任意的段。

cs暫存器還有乙個很重要的功能:它含有乙個兩位的域,用以指明cpu的當前特權級(current privilege level,cpl)。值為0代表最高端,而值為3代表最低階。linux只用0~3級,分別稱之為核心態和使用者態。

核心與驅動 00 核心程式設計基礎知識

一般我們使用x86和x64平台進行編譯,它們的區別除了指標從四個位元組變為了8個位元組之外,其餘幾種型別位元組的寬度都沒有什麼變化。ntstatus myfun typedef struct unicode stringunicode string,punicode string 字串的字元是寬字元...

vfio核心實現分析 (1)基礎知識

1 vfio 是乙個可以安全的把裝置 i o 中斷 dma等暴露到使用者空間,從而可以在使用者空間完成裝置驅動的框架。2 虛擬機器裝置分配 device assignment 高效能應用等都可以受益於 vfio 低開銷的使用者空間直接裝置訪問,從而獲得更高的 i o效能。實現使用者空間裝置驅動,最困...

計算機核心基礎知識1

二 計算機組成原理 六 cpu詳解 說到程式設計,那就得先了解什麼是程式語言,程式語言就是人與計算機進行溝通的語言。程式設計就是把人類的思維邏輯用計算機能聽懂的語言翻譯下來,並儲存在檔案之中,這個過程就是程式設計。簡單來說,就是兩個步驟 1.先將邏輯 步驟理順 2.再將他們翻譯為python程式語言...