仮想メモリ空間

仮想メモリ空間

はじめに

この記事は下記の参考資料を元にした筆者の解釈の記述です。

正確さについては保証されませんので詳しくは下記の参考元をご参照ください。

仮想メモリとは

アプリケーションなどのプログラムは常に主記憶装置にロードされた上で実行される。

ロードされたプログラムの実行はプロセスという単位で管理される。

システムは複数のプロセスを同時に処理する必要がある場合があり、それが可能なシステムをマルチタスクと呼ぶ。

実際には一つのCPUが同じ瞬間に別のプロセスを実行することはできないので、プログラムは細かな単位に分けられて(プロセススケジューラにより)実行される。

このプロセス切り替えのことをコンテキストスイッチとよぶ。

コンテキストスイッチを十分に速く行うためには主記憶装置に同時に複数のプログラムがロードされている必要がある。

同じメモリ上に互いに無関係な複数のプログラムがロードされていて、かつそれらが互いにデータを参照できるような仕組みでは問題があるため、それらを明確に分けて管理するための仕組みが必要である。

その仕組みが仮想メモリと呼ばれるものである。

仮想メモリでは複数のプロセスが物理的に同じメモリを共有しているものの論理的にそれらの使用できる領域を分けて管理し、互いに干渉することを防ぐ仕組みである。

セグメント

プログラムがメモリにロードされる際は各データはセグメントと呼ばれる領域に分けてロードされる。

  • OSのカーネル領域
    • 全てのプログラムを最終的に実行するカーネルの領域。
    • プログラムからアクセスすることはできない。
  • テキストセグメント
    • プログラムの命令を格納する領域
  • データセグメント
    • プログラムのうちデータを格納する領域
      • 読み込み専用データ(定数)
      • 静的読み書き領域(静的変数)
      • 動的読み書き領域(ヒープ)
        • プログラムからカーネルに割り当てを要求して獲得される領域
  • スタックセグメント
    • プログラムの実行中に自動的に使用される領域
      • 関数からの戻り先アドレスなどスタックを使って管理されるデータ。