使用者空間到核心空間的轉換

使用者空間到核心空間的轉換

無論是物理上(硬體、環)還是邏輯上(軟體),什麼是用戶空間到核心空間的轉換?反之亦然。

或者更一般地說,當發生「空間」(或環)轉變時會發生什麼?是什麼讓它成本高(Minix 的主要問題之一)?

這個問題如下以供評論回答。

答案1

從作業系統的角度來看,使用者空間是進程碼的執行,而核心空間是核心程式碼的執行。從用戶空間到核心空間的轉換是進入系統調用,從核心空間到用戶空間的轉換是系統呼叫的回傳。

從處理器的角度來看,用戶空間和核心空間是特權等級。 「Ring 3」和「ring 0」是Intel x86處理器上使用的名稱(有ring 1和ring 2,但大多數unice不使用它們,因為它們沒有太多用途)。其他 CPU 類型使用不同的名稱,例如 ARM 上的使用者模式和特權(或系統)模式。

模式之間的轉換是透過改變處理器模式並跳到不同位址的指令來完成的;這些指令的細節很大程度上取決於 CPU 類型。除了切換處理器模式和跳到不同的位址之外,模式轉換指令通常還執行一些其他任務,例如交換一些暫存器的值(同樣,這非常依賴 CPU)。

從使用者模式到核心模式的轉換必須跳到由核心設定的固定位址。為了維護系統的安全,用戶模式的程式碼不允許將處理器切換到核心模式,除非呼叫一段經過專門設計的程式碼(系統呼叫入口點),該程式碼無論在什麼情況下都可以安全地工作。態程式碼一直在做。系統呼叫入口點首先將暫存器值儲存到指定的記憶體區域,並執行任何其他必要的簿記,然後讀取系統呼叫參數並將系統呼叫分派到適當的函數。根據處理器類型,簿記可能涉及設置記憶體管理單元適當地表。核心可以在任何時候決定暫停呼叫進程並調度另一個進程。

從核心模式到使用者模式的轉換可以發生在內核認為合適的任何地方。內核恢復已保存的暫存器、MMU配置和其他任何必要的東西,並寫入系統呼叫的回傳值,最後跳回系統呼叫後進程中的指令。

相關內容