私の理解によると、CPUが特定のメモリ位置にアクセスするとき(たとえば、アドレスのあるメモリ位置が値に設定されている4
場合100
)、そのアドレスを仮想アドレスとして扱い、4
現在のLoadedを使用して仮想アドレスが指す物理アドレスを見つけます。 。プロセスページテーブル。
以下は、プロセスページテーブルの例です。
したがって、この例では、CPUは物理アドレスを持つメモリ位置を12346
値に設定します100
。
しかし、マッピングされた物理アドレスを持たない仮想アドレスにアクセスしていることをCPUはどのように知っていますか?プロセスページテーブルにこれを示すフラグがありますか?たとえば、プロセスページテーブルに「割り当てられたフラグ」がありますか?
答え1
x86について具体的に質問したので、そのアーキテクチャを使いましょう。ただし、これはメモリページングをサポートするアーキテクチャ全体ではなく、ほとんどに適用されます。
x86ページテーブルには、ページがメモリに存在するかどうかを示す「現在」ビットがあります。もしそうなら、権限などがこれを許可すると、CPUは(MMUの助けを借りて)メモリアクセスを直接処理します。それ以外の場合は例外が発生し、カーネルはページテーブルエントリの情報と独自のデータ構造を使用して何をするかを決定できます。つまり、物理ページの割り当て、ディスクからのデータの読み取り、物理ページのコピー(コピー用)の書き込み中)