內核態、用戶態、內核空間、用戶空間、進程上下文、中斷上下文、cpu狀態


  關鍵詞:內核、上下文、空間、中斷

一、虛擬地址空間:

1、定義:

  實際物理內存空間的一種邏輯上的地址空間

2、注意:

(1)內核空間和用戶空間存在於虛擬地址中的,也可以簡單理解為物理內存就分為內核空間和用戶空間。
(2)每個進程運行時,操作系統會為每一個進程分配一個虛擬地址空間。
  在32位的系統中,用戶空間占3G,每個進程最多就只能夠占用3G的內存空間,正常情況下,每個進程的代碼就運行在這個空間中。內核空間占1G(實際是3-4G,它可以訪問所有的虛擬地址),它是供所有的進程所共有的;當一個進程想要具有更多權限進行相應的操作的時候,它就需要進入到這個空間。

二、內核空間&&用戶空間:

1、內核空間:

(1)定義:

  內核代碼運行的位置,在這個空間下運行的進程可以比在用戶空間下運行的進程擁有更多的訪問系統的權限。

(2)注意:

①linux操作系統、驅動程序運行於這個空間中。
②為了保證安全,是不允許進程直接操作內核的,因此把內核(代碼)存儲到內核空間中,只有進程處於內核空間中,它才能夠操作內核代碼,獲取更高權限,來進行需要的操作。
③內核是系統的核心,擁有內核,那么就可以直接操作底層硬件以及其他所有的權限。
④內核空間具有的權限:
  • 頁面置換、調度(即實現了高端內存的)權限:由於采用的虛擬存儲技術,所以肯定是需要不斷的調度“頁”的,但是這個權限只有內核擁有,也就是進程必須處於內核態下,它才能夠去操作內核代碼,實現相應的調度功能;
  • 所有的系統資源訪問、管理都是在內核空間中完成的;
  • ...
④進程處於內核態的目的就是為了運行內核代碼,然后去做“高級”的事情。因為處理在用戶空間時沒有足夠的權限。當進程做完事之后就會退出內核空間,返回到用戶空間繼續執行原來的程序。

2、用戶空間:

(1)定義:

  應用程序運行的位置 (用戶程序運行時,會被存儲到這個位置)

3、內核空間和用戶空間的總結:

(1)就是程序的兩種運行位置。
(2)內核代碼和應用程序肯定都是存儲在外存中的,只有運行時,才會被存到內存中,調入到內核空間和用戶空間。
(3) 注意:
①正常情況下,進程運行在用戶空間,當它需要獲取系統資源,或者訪問更多其他的內容時,那么就需要運行到內核空間中,獲取到數據之后,就返回用戶空間。
②其實所謂的進入內核空間,也就是要叫處於內核空間的內核或者其他“功能強大的”代碼幫我們做事,進入內核空間的進程運行對應的代碼來做事,做完事就沒事了,就可以走了。

三、內核態&&用戶態:

1、內核態:

  定義:進程運行於內核空間中,那么它就處於內核態

2、用戶態:

  定義:進程運行於用戶空間中,那么它就處於用戶態

3、內核態和用戶態的總結:

(1)內核態和用戶態指的是進程所處的兩種狀態,也指的是進程在不同空間下,進行具有不同權限的操作;
(2)每個進程都有內核態和用戶態。(如果進程想要進入內核態,說明它需要擁有更多的權限去獲取相對應的數據,因此它向系統申請進入內核空間,但是在內核空間處理完,也就是獲取到對應的數據之后,它就會從內核態切換回用戶態,重新運行用戶程序。)
(3)一個進程在運行過程中就是需要不斷的在內核態和用戶態之間來回切換。
(4) Linux使用兩級保護機制:0級供內核使用(內核空間中的程序),3級供用戶程序使用(用戶空間的程序)。  

四、cpu的狀態:

(正常情況下,一個處理器(cpu)運行一個進程。所以某個處理器在處理某個進程時,因進程處於不同的狀態,所以就會處於不同的狀態。)

1、運行於用戶空間,執行用戶進程:

  正常程序是運行於用戶空間中的。

2、運行於內核空間,處於進程上下文,代表某個特定的進程執行:

  表示此時某個進程需要獲取更多的操作權限去獲取相關的數據,因此需要向系統申請進入內核空間,此時原來的進程傳遞給內核空間的跟當前進程相關的變量、參數、以及其它值,還有進程在內核中運行時,所產生的那些結果、數據,也就是當時的“周圍環境”就稱為進程上下文。如果進程離開內核,那么其進程上下文就會沒有。如果當前進程操作完成,也就是獲取到相對應的數據之后,就會從內核態切換回用戶態,也就是回到用戶空間。(此時會把剛才進程上下文中的相關信息返回給用戶空間)

3、運行於內核空間,處於中斷上下文,與任何進程無關,處理某個特定的中斷:

  當某個進程運行過程中,發生了中斷的時候,比如軟中斷(缺頁中斷)時,它需要進行相對應的調度。由於它處於用戶態,它沒有那個權限,所以它需要向系統內核申請進入內核空間以獲取更多的權限,系統同意之后,它便進入內核空間,此時它變處於內核態。那么這個時候:進入內核空間的進程傳遞給內核的與當前進程相關的信息,以及這個進程在內核中的運行過程的所有“周圍的環境”就稱為中斷上下文。如果進程離開內核,那么其中斷上下文就會沒有(此時會把剛才中斷上下文中的相關信息返回給用戶空間)

五、中斷:

1、定義:

  就是進程運行過程中出現運行不下去的狀況。

2、分類:

(1)硬中斷:

  硬中斷可以理解為某個硬件有某個請求,此時硬中斷可以直接中斷CPU,讓當前正在運行的進程處於暫停。此時CPU就需要調度一個進程來處理這個硬件請求。然后由於此時要操作的是硬件,只有進程處於內核態才有這個權限進行處理,所以此時這個就會將處理這個中斷請求的內存調入內核空間,進行相應的處理,處理完成之后再返回用戶態。然后處理完成之后,cpu有會去調度之前的程序了。

(2)軟中斷:

  某個進程運行過程中出現運行不下去的狀況。比如說由於計算機采用的虛擬存儲技術,所以在運行過程可能會出現缺少某一頁的情況,那么此時進程就需要把對應的頁調度到內存當中進行運行,但是正常進程是處於用戶空間中,它沒有這個權限進行調度,所以發生了運行不下去的情況。此時就產生了軟中斷。此時就需要通過系統調用來進入內核空間處理中斷,然后處理完成之后再返回用戶空間。

3、解決中斷:

  通過某種方式進入內核空間交由內核來處理中斷,處理完之后再返回用戶空間即可正常運行之前的程序了。
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM