? 操作系統內核
操作系統的內核是指在計算機硬體上擴充的第一層軟體。通常是一些與硬體緊密相關的模塊。內核的實現是通過原語實現的,而原語又是由原子操作構成的。 原語是由若干指令構成的,用於完成一定功能的過程。而原子操作是指在這過程中的行為 ,要麼全做,要麼不做,不可中斷(以保證操作的完整性)。 操作系統主要包含以下功能:
- 時鐘管理(以後會講)
- 中斷處理(下篇會講)
- 原語操作(剛剛提到的)
核心態與用戶態
核心態(又稱為系統態),在此狀態下,能能執行一切指令,訪問所有的寄存器內容及存區域(用一句不嚴謹的話說,啥都能幹) 用戶態,是相對核心態而言的,在此狀態下,只能執行特定的一些指令,特定的一些寄存器和一些特定的區域。 那麼問題來了,為什麼要區分用戶態和核心態呢?原因很簡單,就是為了保護操作系統,因為操作系統中的一些重要數據,比如PCB,是不允許修改和破壞的。 記得我們上一篇博文提到過,系統調用,是系統提供的給應用程序使用內核功能的介面。它是用戶取得操作系統服務的唯一途徑。所以當用戶程序需要操作系統服務而而調用系統調用的時候,處理機應該從用戶態轉到核心態,當系統調用返回用戶程序的時候,處理機的狀態從核心態回到用戶態。
核心態與用戶態的轉換過程
在說這個問題之前,我們需要深入了解一下系統調用,我們前面知道,系統調用就是一個程序介面(注意,這不是指我們平時用的AIP,比如一些庫函數,一些自定義函數)。而操作系統中的各種共享資源由操作系統統一管理,因此,顯然對操作系統資源進行的操作都是在內核態進行的,包括我們後面要學到的各種管理(進程管理,I/O管理,內存管理等等)。顯然系統調用是一定運行在核心態。 那麼,我們可以得到大致的用戶態到核心態之間的一個轉換過程: