仮想記憶シミュレーション プログラムが主記憶と仮想記憶上でどのように実行されるかをテストする。 標準入力からプログラムの実行制御に関する指示列を読み込む。 例えば以下のようにして実行する。 ./vmsim < vmsim_1.dat このとき、グラフィクスウィンドウがひとつ開き、キーを押すごとに 1ステップずつプログラムを読み込んだり、実行する際のメモリの動きを シミュレートする。 画面右側に、次にキーを押すと実行する処理内容が表示される。 主記憶へのロードや、仮想記憶への掃き出し(swap out)がアニメーションで 表示される。 例えば vmsim_1.dat の内容は以下のようになる。 -------------------- load 1 4 run 1 run 1 exit -------------------- □ 命令列の仕様 # ではじまる行はコメント load n l によって長さ l のプログラム n 番を仮想記憶上(同時に主記憶上) に読み込む。 run n によって既に読み込まれているプログラム n 番を頭から最後まで実行 する。 exit で処理終了。 □ オプション -v で若干のデバッグ出力が標準出力に出る。 -S を指定すると SKIP モードになり、キーを押すことなく自動的に最後まで 実行する。デフォルトは step by step 処理であり、キーを押すと一つ進む。 -L を指定すると非常にシンプルな LRU アルゴリズムを用いて主記憶上の 読み込まれたページを掃き出す。デフォルトは少しだけ改良を加えてある。 (具体的には「読み込もうとしているプログラムは掃き出し対象にしない」  という事をしているだけ。) -s 100 とすると、1 page の load, purge に 100ms の待ち時間を設定する。 もし最短時間で処理したければ -s 0 とすると良い。 -r n で主記憶を n pages とする。 -x n で仮想記憶を n pages とする。 □ 動作環境 X11 の動作するシステム上で、EGGX を利用している。 EGGX: http://phe.phyas.aichi-edu.ac.jp/~cyamauch/eggx_procall/ EGGX がインストールされているシステムでは % egg -o vmsim vmsim.c などとしてコンパイルすると良い。 □ スラッシングの再現 例えば、 ./vmsim -vS -r 6 -x 16 < vmsim_3.dat では若干スラッシング気味となる。-r 8 で普通、-r 10 程度でかなりまし。 -r 12 で全くスワップアウトを起こさない。