使用者模式與核心模式的差異:指令、記憶體、切換、成本、保護比較
CPU 具有應用程式執行的使用者模式,以及 OS 核心執行的核心模式(特權模式)。在使用者模式下,無法執行設定分頁表、操作輸入輸出、禁止中斷等特權指令,也只能存取自己行程的記憶體。需要讀寫檔案等操作時,要透過系統呼叫請核心處理。如此一來,就能避免單一應用程式的錯誤或惡意行為波及其他行程、OS 或硬體。
| 項目 | 使用者模式 | 核心模式 |
|---|---|---|
| 執行的程式 | 應用程式 | OS 核心、大部分的裝置驅動程式 |
| 可執行的指令 | 只有一般指令。執行特權指令會發生例外 | 所有指令。切換分頁表、允許與禁止中斷、設定控制暫存器等 |
| 可存取的記憶體 | 只有自己行程的虛擬位址空間中,允許使用者存取的分頁 | 包含核心區域在內的全部。也能處理實體記憶體與裝置的暫存器 |
| 裝置的操作 | 無法直接操作。透過系統呼叫請核心處理 | 直接讀寫暫存器,並處理中斷 |
| 在架構中的名稱(例) | x86 的 ring 3、Arm 的 EL0、RISC-V 的 U 模式 | x86 的 ring 0、Arm 的 EL1、RISC-V 的 S 模式 |
| 模式切換的觸發條件 | 因系統呼叫指令(syscall、svc、ecall 等)、裝置或計時器的中斷、例外(分頁錯誤、除以 0、非法指令等)而進入核心模式 | 以專用的返回指令(sret、eret 等)同時還原返回位址與模式,回到使用者模式 |
| 切換的成本(參考值) | 系統呼叫往返大約 100 ns 至 1 µs。也可能因漏洞的防護措施而增加 | 核心內的處理之間是函式呼叫,沒有模式切換。行程的切換(上下文切換)則更重 |
| 錯誤的影響 | 只有該行程會被強制終止 | 整個系統可能停止(核心恐慌等) |
數值為具代表性的大致參考值,會因世代或產品而異。