Linux
“核心模式”和“使用者模式”是硬體特性還是軟體特性?
我讀到有兩種模式稱為“核心模式”和“使用者模式”來處理程序的執行。(了解 Linux 核心,第 3 版。)這是由 Linux 控制的硬體開關(核心/使用者),還是由 Linux 核心提供的軟體功能?
核心模式和使用者模式是硬體特性,特別是處理器的特性。專為中高端系統(PC、功能手機、智能手機、除了最簡單的網路設備之外的所有設備……)而設計的處理器包括此功能。核心模式可以有不同的名稱:主管模式、特權模式等。在 x86(PC 中的處理器類型)上,它被稱為“環 0”,而使用者模式被稱為“環 3”。
處理器在寄存器中有一些儲存空間,指示它是處於核心模式還是使用者模式。(在具有兩種以上此類模式的處理器上,這可能不止一位。)某些操作只能在核心模式下執行,特別是通過修改控制MMU的寄存器來更改虛擬記憶體配置。此外,從使用者模式切換到核心模式的方法很少,而且都需要跳轉到核心程式碼控制的地址。這允許在核心模式下執行的程式碼控制在使用者模式下執行的程式碼可以訪問的記憶體。
類 Unix 作業系統(以及大多數其他具有程序隔離的作業系統)分為兩部分:
- 核心在核心模式下執行。核心可以做任何事情。
- 程序在使用者模式下執行。程序不能訪問硬體,也不能訪問其他程序的記憶體(明確共享的除外)。
因此,作業系統利用硬體特性(特權模式,MMU)來強制程序之間的隔離。
基於微核心的作業系統具有更細粒度的架構,在核心模式下執行的程式碼更少。
當使用者模式程式碼需要執行它不能直接執行的操作(例如訪問文件、訪問外圍設備、與另一個程序通信……)時,它會進行系統呼叫:跳轉到核心程式碼中的預定義位置。
當硬體外圍設備需要請求 CPU 關注時,它會將 CPU 切換到核心模式並跳轉到核心程式碼中的預定義位置。這稱為中斷。
進一步閱讀