假設我們有一個具有MMU,其工作原理如下的CPU:內核空間和用戶空間佈局
- 內存管理只使用尋呼
- 每個進程都有自己的頁表 的每 過程
- 虛擬地址被分成用戶空間與內核空間 (如使用尋呼不許多CPU)
- 內核空間(具體他的虛擬地址)被所有之間共享進程(例如更高地址)
現在想象一下,我們正在運行多個進程(當然在非特權模式下)。當我們想爲任何進程分配額外的內存時,它只是在我看來應用以下場景。我們執行系統調用,並通過更新進程頁表或者報告一些錯誤代碼來爲系統調用提供服務(在特權模式下)。
我的問題:但是現在,當我們要分配給內核的一些記憶,我們必須更新都在各自的核心部分地址的所有進程的表?據我所知,沒有任何核心頁面表,理論上可以解決這個問題(但帶來其他問題),在類似的CPU中。那麼如何解決這種情況,如果有可能發生?
對不起,我的英文。
如果您的頁面表存儲爲樹形結構(例如https://www.kernel.org/doc/gorman/html/understand/understand-html006.png from https://www.kernel.org/doc/gorman /html/understand/understand006.html),有少量的指針來描述內核空間;您甚至可以將這些指針指向內核空間的單個pmd-subtree。在這種情況下,您將只爲所有進程執行一個子樹更新。 – osgx
@osgx謝謝你的回答,但是你想告訴我,當一個進程啓動它的頁面表時,指向了屬於內核空間(多級頁面)的頁表的指針?下面的情況會不會更好?我們有兩個用於指向頁表的指針寄存器 - 第一個用於用戶空間,第二個用於內核空間。兩者都描述了所有虛擬空間,而每一個頁面都描述了它們的地址空間部分。這種結構中的關鍵問題是每個進程與其他進程具有完全相同的內核空間,還是在內核空間中有一些例外? –