Process

程序的頁表如何知道交換了哪個頁?

  • August 28, 2021

我指的是這些連結:

當我們要查找的物理頁在交換區時的頁表內容

上下文切換後linux如何更新頁表

核心如何定址交換分區\文件上的交換記憶體頁?

我仍然很困惑一個程序如何知道它的一個頁面是否被交換到輔助記憶體。

例子:

程序 A1 分配 1 幀物理記憶體,在其上寫入。PTE 中的預設、修改和最近位將設置為 1。

現在輪到程序 A2 了——它需要更多記憶體,並且MMU核心決定將程序 A1 的頁面寫入輔助記憶體,因為修改位已設置。

程序 A1 又回來了——恢復他的上下文和 PT,現在準備讀/寫它的頁面(假設目前位仍然設置為 1)並將訪問程序 A2s 頁面。(?)

我知道該程序並不直接知道哪些頁面位於何處,並且 MMU 以某種方式知道一個頁面位於輔助記憶體上 - 但不知何故必須修改程序 A1 的 PTE?MMU 或 PT 中必須有一些資訊表明該頁面現在已換出並且必須從中恢復。編輯:即使 PT / PTE 在堆棧上,目前位是否會更改為 0?

程序不知道,核心知道。

MMU 決定將程序 A1 的頁面寫入輔助儲存器

MMU 不決定這一點,核心決定:如果 A2 需要更多記憶體,核心被告知它,並尋找頁面給 A2。如果沒有任何空閒,它將執行其頁面回收。無論頁面最終被驅逐到它們的備份儲存中,它們的“目前”位都將被清除,無論它們“屬於”哪個程序(如果有的話)——核心都會跟踪這類資訊。

當控制權交還給 A1 時,核心將使用核心擁有的資訊來恢復 A1 的 PTE。因此,被逐出的頁面將清除其 PTE 存在位。如果 A1 訪問其中一個頁面,MMU 將出現故障,核心將再次參與解決該問題。

引用自:https://unix.stackexchange.com/questions/666615