
在使用者模式下如何進行位址轉換?如果使用者有單獨的頁表,那麼它們儲存在哪裡?此外,在具有硬體頁表遍歷機制的系統中,使用者如何存取儲存在核心位址空間中的頁表?
答案1
核心為每個行程設定頁表。從虛擬位址到實體位址的對應是由硬體中的記憶體管理單元(MMU)完成的。這對於使用者模式程式碼來說是透明地完成的。使用者模式不會更改頁表,並且它們僅對核心可見。
進程的虛擬位址空間被劃分為具有不同屬性的區域:有些區域是唯讀的,有些區域是讀寫的,通常大多數虛擬位址完全沒有對應。存取衝突由核心處理。例如,當進程存取沒有映射到物理記憶體幀的記憶體位置時,就會引發異常。此異常(陷阱)由核心程式碼處理,核心程式碼可以終止進程,向其發送訊號,或者核心可以透明地為頁面建立映射。
透明地(對於使用者模式代碼)映射頁面可能會發生,因為頁面已被換出。在這種情況下,所謂的頁面錯誤處理程序將頁面映射到空閒的實體 RAM 幀,並安排從交換空間讀入頁面。當頁面恢復後,進程被安排再次運行,並且進程可以繼續執行,就好像什麼也沒發生一樣。