仮想記憶
virtual memory
プロセスがメモリを読む時に、
物理的なメモリのアドレス(物理アドレス)を直接見るのではなく、
仮想的なメモリのアドレス(仮想アドレス)を見て、関節的にアクセスする方法
仮想アドレス空間はプロセスごとに独立して作られる
故に、他のプロセスのメモリ空間にはアクセスできなくなる
ただし、カーネルのメモリに対応するページテーブルエントリは全プロセスの仮想アドレス空間にマップされている
が、カーネルモード専用という情報が付いているので、アクセスを制限できている
プログラマが目にするアドレスは基本的に全て仮想アドレス
プログラマが指定するアドレスや、コマンドの実行により得られるアドレスなどは全て仮想アドレス
プロセスが、物理アドレスに直接アクセスする方法はない
なぜ仮想記憶が必要になのか
仮想記憶が無いということは、全の場合において物理アドレスを使用するということ
プロセスにメモリを割り当てる時に、物理的なアドレス位置を考慮する必要がある
以下のような問題が生じる
メモリフラグメンテーション
別用途のメモリにアクセスできてしまう
プログラム内で、容易に別プロセスのメモリにアクセスできてしまう
そのアドレスが、自プロセスなのか、別プロセスなのかをいちいち人間が考慮してアクセスしないといけない
マルチプロセスの扱いが困難
/mrsekut-book-477419607X/110
大きく分けて2種類の方式がある
ページング方式
セグメント方式
https://ja.wikipedia.org/wiki/セグメント方式
https://ja.wikipedia.org/wiki/仮想記憶#セグメント方式
よくわからん #??
特にページング方式とどう異なるのか
サイズが可変な点?
まとめ
コピーオンライトとその周辺の復習をする
参考
/mrsekut-book-477419607X/113 (仮想記憶)
https://ja.wikipedia.org/wiki/仮想記憶