作業系統 使用者態與核心態

2021-10-09 07:28:24 字數 2561 閱讀 5968

1、linux程序有4gb位址空間,如圖所示:

3g-4g大部分是共享的,是核心態的位址空間。這裡存放整個核心的**和所有的核心模組以及核心所維護的資料。

2、特權級的概念:

對於任何作業系統來說,建立乙個程序是核心功能。建立程序要做很多任務作,會消耗很多物理資源。比如分配物理記憶體,父子程序拷貝資訊,拷貝設定頁目錄頁表等等,這些工作得由特定的程序去做,所以就有了特權級別的概念。最關鍵的工作必須交給特權級最高的程序去執行,這樣可以做到集中管理,減少有限資源的訪問和使用衝突。inter x86架構的cpu一共有四個級別,0-3級,0級特權級最高,3級特權級最低。

特權指令:只能由作業系統使用、使用者程式不能使用的指令。 舉例:啟動i/o 記憶體清零 修改程式狀態字 設定時鐘 允許/禁止終端 停機

非特權指令:使用者程式可以使用的指令。 舉例:控制轉移 算數運算 取數指令 訪管指令(使使用者程式從使用者態陷入核心態)

3、使用者態和核心態的概念:

當乙個程序在執行使用者自己的**時處於使用者執行態(使用者態),此時特權級最低,為3級,是普通的使用者程序執行的特權級,大部分使用者直接面對的程式都是執行在使用者態。ring3狀態不能訪問ring0的位址空間,包括**和資料;當乙個程序因為系統呼叫陷入核心**中執行時處於核心執行態(核心態),此時特權級最高,為0級。執行的核心**會使用當前程序的核心棧,每個程序都有自己的核心棧。

使用者執行乙個程式,該程式建立的程序開始時執行自己的**,處於使用者態。如果要執行檔案操作、網路資料傳送等操作必須通過write、send等系統呼叫,這些系統呼叫會呼叫核心的**。程序會切換到ring0,然後進入3g-4g中的核心位址空間去執行核心**來完成相應的操作。核心態的程序執行完後又會切換到ring3,回到使用者態。這樣,使用者態的程式就不能隨意操作核心位址空間,具有一定的安全保護作用。這說的保護模式是指通過記憶體頁表操作等機制,保證程序間的位址空間不會互相衝突,乙個程序的操作不會修改另乙個程序位址空間中的資料。

4、使用者態和核心態的切換

當在系統中執行乙個程式時,大部分時間是執行在使用者態下的,在其需要作業系統幫助完成一些使用者態自己沒有特權和能力完成的操作時就會切換到核心態。

使用者態切換到核心態的3種方式

(1)系統呼叫

**這是使用者態程序主動要求切換到核心態的一種方式,使用者態程序通過系統呼叫申請使用作業系統提供的服務程式完成工作。**比如前例中fork()實際上就是執行了乙個建立新程序的系統呼叫。

而系統呼叫的機制其核心還是使用了作業系統為使用者特別開放的乙個中斷來實現,例如linux的int 80h中斷。

使用者程式通常呼叫庫函式,由庫函式再呼叫系統呼叫,因此有的庫函式會使使用者程式進入核心態(只要庫函式中某處呼叫了系統呼叫),有的則不會。

(2)異常

當cpu在執行執行在使用者態下的程式時,發生了一些沒有預知的異常,這時會觸發由當前執行程序切換到處理此異常的核心相關程序中,也就是切換到了核心態,如缺頁異常

(3)外圍裝置的中斷

當外圍裝置完成使用者請求的操作後,會向cpu發出相應的中斷訊號,這時cpu會暫停執行下一條即將要執行的指令而轉到與中斷訊號對應的處理程式去執行,如果前面執行的指令時使用者態下的程式,那麼轉換的過程自然就會是 由使用者態到核心態的切換。如硬碟讀寫操作完成,系統會切換到硬碟讀寫的中斷處理程式中執行後邊的操作等。

這三種方式是系統在執行時由使用者態切換到核心態的最主要方式,其中系統呼叫可以認為是使用者程序主動發起的,異常和外圍裝置中斷則是被動的。

從觸發方式上看,切換方式都不一樣,但從最終實際完成由使用者態到核心態的切換操作來看,步驟都是一樣的,都相當於執行了乙個中斷響應的過程。系統呼叫實際上最終是中斷機制實現的,而異常和中斷的處理機制基本一致。

5、使用者態到核心態具體的切換步驟:

(1)從當前程序的描述符中提取其核心棧的ss0及esp0資訊。

(2)使用ss0和esp0指向的核心棧將當前程序的cs,eip,eflags,ss,esp資訊儲存起來,這個過程也完成了由使用者棧到核心棧的切換過程,同時儲存了被暫停執行的程式的下一條指令。

(3)將先前由中斷向量檢索得到的中斷處理程式的cs,eip資訊裝入相應的暫存器,開始執行中斷處理程式,這時就轉到了核心態的程式執行了。

6、核心態—>使用者態:設定程式狀態字psw

7、區別:

核心態與使用者態是作業系統的兩種執行級別,當程式執行在3級特權級上時,就可以稱之為執行在使用者態。因為這是最低特權級,是普通的使用者程序執行的特權級,大部分使用者直接面對的程式都是執行在使用者態;

當程式執行在0級特權級上時,就可以稱之為執行在核心態。

執行在使用者態下的程式不能直接訪問作業系統核心資料結構和程式。當我們在系統中執行乙個程式時,大部分時間是執行在使用者態下的,在其需要作業系統幫助完成某些它沒有權力和能力完成的工作時就會切換到核心態(比如操作硬體)。

這兩種狀態的主要差別是

處於使用者態執行時,程序所能訪問的記憶體空間和物件受到限制,其所處於占有的處理器是可被搶占的

處於核心態執行時,則能訪問所有的記憶體空間和物件,且所占有的處理器是不允許被搶占的。

作業系統核心態與使用者態

核心態與核心態 處理機 cpu 在執行使用者程式和執行作業系統核心程式時的模式是有區別的,這是因為處理機在執行系統核心程式時,可以獲得更多的特權,以便作業系統程式實現更強的功能,這叫做核心態。而在執行使用者程式的時候,僅有有限的許可權,這樣保障了系統的安全性,這是使用者態。劃分理由 劃分特權與非特權...

作業系統使用者態和核心態

核心態 cpu可以訪問記憶體所有資料,包括外圍裝置,例如硬碟,網絡卡.cpu也可以將自己從乙個程式切換到另乙個程式 使用者態 只能受限的訪問記憶體,且不允許訪問外圍裝置.占用cpu的能力被剝奪,cpu資源可以被其他程式獲取 為什麼要有使用者態和核心態 由於需要限制不同的程式之間的訪問能力,防止他們獲...

作業系統 使用者態和核心態

3g 4g大部分是共享的,是核心態的位址空間。這裡存放整個核心的 和所有的核心模組以及核心所維護的資料。2 特權級的概念 對於任何作業系統來說,建立乙個程序是核心功能。建立程序要做很多任務作,會消耗很多物理資源。比如分配物理記憶體,父子程序拷貝資訊,拷貝設定頁目錄頁表等等,這些工作得由特定的程序去做...