萌えハッカーニュースリーダー

2025/09/27 15:28 Fundamental of Virtual Memory

出典: https://nghiant3223.github.io/2025/05/29/fundamental_of_virtual_memory.html
hakase
博士

やあ、ロボ子!今日は仮想メモリについて話すのじゃ。

roboko
ロボ子

仮想メモリですか、博士。なんだか難しそうですね。

hakase
博士

難しくないぞ!簡単に言うと、RAMが足りない時に、ディスクの一部をRAMの代わりに使う技術のことじゃ。

roboko
ロボ子

なるほど。記事によると、「CPUはメインメモリ(RAM)からのみデータにアクセス可能」とありますね。でも、RAMって容量が限られていますよね。

hakase
博士

そうじゃ!そこで仮想メモリの出番じゃ。OSがプロセスごとにメモリを割り当てることで、互いに干渉しないようにするのじゃ。

roboko
ロボ子

プロセスごとに可変サイズの連続したメモリブロックを割り当てるんですね。でも、それだと「外部フラグメンテーション」が起きる可能性があると。

hakase
博士

その通り!外部フラグメンテーションは、メモリの空き容量が細切れになって、大きなデータを保存できなくなる現象じゃ。それを解決するために、ページングという技術を使うのじゃ。

roboko
ロボ子

ページングですか。メインメモリを固定サイズのブロック(フレーム)に分割して、仮想メモリを物理メモリから分離するんですね。

hakase
博士

そうじゃ!仮想メモリはページに分割されて、物理メモリのフレームと同じサイズになるのじゃ。そして、ページテーブルを使って、仮想ページと物理フレームのマッピングを管理するのじゃ。

roboko
ロボ子

なるほど。さらに、「デマンドページング」という技術もあるんですね。必要なページだけをオンデマンドでメモリにロードする、と。

hakase
博士

そうじゃ!これによって、メモリの効率的な利用が可能になるのじゃ。Linuxでは、RSS(物理メモリ使用量)とVSZ(仮想メモリ割り当て量)という指標があるぞ。

roboko
ロボ子

仮想アドレスレイアウトについても書かれていますね。カーネル仮想メモリ空間、スタック、ヒープなど、色々な領域があるんですね。

hakase
博士

スタックは、ローカル変数や関数呼び出しを追跡するメモリセグメントじゃ。各スレッドには独自のスタックがあるから、同期は不要なのじゃ。

roboko
ロボ子

ヒープは、動的にメモリを割り当てるために使うんですね。mallocを使って、以前にfreeされたメモリブロックを探す、と。

hakase
博士

そうじゃ!そして、メモリマッピングには、ファイルマッピングと匿名マッピングの2種類があるのじゃ。匿名マッピングは、Goのような独自のメモリ割り当て戦略を実装するプログラムに最適なのじゃ。

roboko
ロボ子

mmapシステムコールを使って、プロセスの仮想アドレス空間に新しいメモリマッピングを作成するんですね。

hakase
博士

その通り!仮想メモリは、現代のOSにとって不可欠な技術なのじゃ。これがないと、プログラムはすぐにメモリ不足になってしまうぞ。

roboko
ロボ子

よくわかりました、博士!仮想メモリのおかげで、メモリが少なくてもたくさんのプログラムが動かせるんですね。

hakase
博士

そういうことじゃ!ところでロボ子、もしメモリが無限にあったらどうする?

roboko
ロボ子

えーと、そうですね…全てのデータをRAMに置いて、世界中の猫の動画を高画質で見放題にします!

hakase
博士

さすがロボ子、私もそうするのじゃ!でも、電気代で破産するかも…!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search