使用者態和核心態 中斷處理機制

2021-10-14 23:28:56 字數 3287 閱讀 8005

1.1.1 定義:什麼是使用者態和核心態?

kernel 執行在超級許可權模式(supervisor mode)下,所以擁有很高的許可權。按照許可權管理的原則,多數應用程式應該執行在最小許可權下。因此,很多作業系統,將記憶體分成了兩個區域:

1.1.2 使用者態和核心態

使用者空間中的**被限制了只能使用乙個區域性的記憶體空間,我們說這些程式在使用者態(user mode)執行。

核心空間中的**可以訪問所有記憶體,我們稱這些程式在核心態(kernal mode)執行。

系統呼叫過程

如果使用者態程式需要執行系統呼叫,就需要切換到核心態執行。下面我們來講講這個過程的原理。

如上圖所示:核心程式執行在核心態(kernal mode),使用者程式執行在使用者態(user mode)。當發生系統呼叫時,使用者態的程式發起系統呼叫。因為系統呼叫中牽扯特權指令,使用者態程式許可權不足,因此會中斷執行,也就是 trap(trap 是一種中斷)。

發生中斷後,當前 cpu 執行的程式會中斷,跳轉到中斷處理程式。核心程式開始執行,也就是開始處理系統呼叫。核心處理完成後,主動觸發 trap,這樣會再次發生中斷,切換回使用者態工作。

1.2.1 中斷機制的產生

早期計算機各個程式只能序列執行、系統資源利用低。為了解決上述問題,人們就發明了作業系統,引入了中斷機制,實現了多道程式的併發執行,提高了系統資源的利用率。

中斷是多程式併發執行的前提條件。

(1) 以兩個程序併發執行為例,程序1在使用者態執行了一段時間後,cpu會接收到計時部件(作業系統核心的時鐘管理部件)發出的中斷訊號,表示程序1已經用完了乙個時間片,cpu會切換到核心態,把cpu的使用許可權交還給作業系統,作業系統核心就會對剛才的中斷進行處理,作業系統知道程序1的時間片用完,就需要切換程序,在完成切換程序的一系列工作後,作業系統又會將cpu的使用權交還給使用者程序。

(2) 接著程序2拿到cpu執行權就會在使用者態下執行,程序2執行一段時間後,程序2發出系統呼叫(內中斷訊號),請求輸出,主動要求作業系統介入工作,cpu會立即切換到核心態,把許可權交還給作業系統,作業系統核心接管程序2系統呼叫請求,呼叫io裝置開始輸出工作,然後作業系統交還cpu執行權,io裝置也會並行執行,程序2需要等待io操作完成,所以程序1拿到cpu執行權開始執行。當執行一段時間後,io操作完成,io裝置向cpu傳送乙個中斷訊號,此時cpu由使用者態再次轉換為核心態,對剛才的中斷訊號處理,由於io操作完成,所以作業系統知道程序2可以恢復執行了,以完成後續工作,所以作業系統再次交還cpu執行權,讓程序2再次執行。

(1) 當中斷發生時,cpu立即進入核心態。

(2) 當中斷發生後,當前執行的程序暫停執行,並由作業系統核心對中斷程序處理。

(3) 對於不同的中斷訊號,會進行不同的處理。

1.2.2 中斷的本質

發生中斷就意味著需要作業系統介入,開展管理工作。

當發生了中斷,就意味著需要作業系統的介入,開展管理工作。由於作業系統的管理工作(**如程序切換、分配io裝置)需要使用特權指令,因此cpu要從使用者態轉換為核心態。**中斷就可以使cpu從使用者態轉換為核心態,使作業系統獲得計算機的控制權。因此,有了中斷,才能實現多道程式併發執行。

使用者態到核心態的轉換就是通過中斷機制實現的,並且中斷是唯一途徑。

核心態到使用者態的切換時通過執行乙個特權指令,將程式狀態字(psw)標誌位設定為使用者態。

1.2.3 中斷的分類

1.2.3.1 內中斷和關中斷

1.2.3.2 開中斷和關中斷

​ 關中斷和開中斷其實就是像我們生活中的開關一樣。 關中斷是為了保護一些不能中途停止執行的程式而設計的,計算機的cpu進行的是時分復用,即每個時鐘週期內,cpu只能執行一條指令。在多道程式設計的環境下(就是我們通常所說的多個程式同時執行時),cpu是不斷地交替地將這些程式的指令一條一條的分別執行,這樣從巨集觀上看我們就感覺多個程式是在同時執行,但從微觀上看則是cpu在不同的時間段(極短)內執行著不同程式的單條指令。而cpu在這些指令之間的切換就是通過中斷來實現的。

關中斷就是為了讓cpu在一段時間內執行同一程式的多條指令而設計的,比如在出現了非常事件後又恢復正常時,cpu就會忙於恢復非常事件出現之前計算機的工作環境(通常叫做恢復現場),在恢復現場的時候,cpu是不允許被其他的程式打擾的,此時就要啟動關中斷,不再相應其他的請求。當現場恢復完畢後,cpu就啟動開中斷,其他等待著的程式的指令就開始被cpu執行,計算機恢復正常。

1.2.4 中斷的處理過程

【中斷遮蔽】

【中斷優先順序】

不同型別的作業系統有不同的中斷優先順序

【中斷的巢狀處理】

【多中斷的響應與處理】

【多重中斷處理-1】

【多重中斷處理-2】

1.2.5 中斷、異常和系統異常區別

1.2.5 總結

(1) 中斷是為了實現多道程式併發執行而引入的一種技術。

(2) 中斷的本質就是發生中斷時需要作業系統介入開展管理工作。

(3) 發生cpu會立即進入核心態,針對不同的中斷訊號,採取不同的處理方式。

(4) 中斷是cpu從使用者態進入核心態的唯一途徑。

(5) 中斷分為內中斷和外中斷。

(6) 程序中斷時,作業系統會儲存cpu的執行環境,如程式狀態字(psw)、程式計數器、各種通用暫存器,這是為了當程序再次執行時可以從中斷的狀態處繼續執行。

核心態和使用者態

在核心態下,cpu可執行任何指令,在使用者態下cpu只能執行非特權指令。當cpu處於核心態,可以隨意進入使用者態 而當cpu處於使用者態,只能通過中斷的方式進入核心態。一般程式一開始都是執行於使用者態,當程式需要使用系統資源時,就必須通過呼叫軟中斷進入核心態。當乙個任務 程序 執行系統呼叫而陷入核心...

核心態和使用者態

複習的時候發現 作業系統 書上竟然沒有找到使用者態和核心態的概念,還納悶了半天以為是自己上課的時候沒有認真聽講.核心態 cpu可以訪問記憶體所有資料,包括外圍裝置,例如硬碟,網絡卡.cpu也可以將自己從乙個程式切換到另乙個程式 使用者態 只能受限的訪問記憶體,且不允許訪問外圍裝置.占用cpu的能力被...

使用者態和核心態

從巨集觀上來看,linux作業系統的體系架構分為使用者態和核心態。核心從本質上看是一種軟體 控制計算機的硬體資源,並提供上層應用程式執行的環境。使用者態即上層應用程式的活動空間,應用程式的執行必須依託於核心提供的資源,包括cpu資源 儲存資源 i o資源等。為了使上層應用能夠訪問到這些資源,核心必須...