記 憶 管 理(1) オペレーティングシステム 第9回
記 憶 管 理 と は プログラムの実行開始時に必要なメモリを割り当てる 実行終了時にメモリを解放する 別のプログラムに割り当てられるようにするため 他の機能もある
大 き な 問 題 プログラムを実行するためには,メモリに格納する メモリの大きさよりも,大きなプログラムを実行することはできない メモリを大きくしても,それより大きなプログラムを実行したくなる
よ く 考 え て み る と プログラム全体をメモリに格納する必要はない プログラムを分割し,実行するのに必要な部分のみをメモリに格納 必要ない部分はディスクなどの補助記憶装置に格納 実際には,全体をディスクに格納しておき,必要になった部分だけをメモリに格納する
オ ー バ レ イ(1) プログラムの分割方法や,実行に必要な部分の指示を利用者(プログラマ)が行う overlay 重ね割付け
オ ー バ レ イ(2) AがCを呼び出す A,B,C,Dの4つの部分(モジュール)からなるプログラム Bが終了→Aに戻る (Bは不要になる) AがCを呼び出す Cが終了→Aに戻る (Cは不要になる) AがDを呼び出す Dが終了→Aに戻る Aが終了→プログラムの終了
オ ー バ レ イ(3) AがBを呼び出すときに,Bをメモリに格納する メモリを読み込む単位をオーバレイセグメントと呼ぶ 先の例では,モジュール=オーバレイセグメント いくつかのモジュールをひとつのオーバレイセグメントとする場合もある
オ ー バ レ イ(4) この大きさのメモリがあれば,実行できる
オ ー バ レ イ(5) プログラムの分割と必要な部分の指示はプログラマが行わなければならない プログラムのことは,プログラムを作った者がよく知っているはず しかし,易しいことではない
仮 想 記 憶(1) プログラムの分割,メモリへの読み込みを自動的に行う オペレーティングシステムが行う 実際のメモリよりも,大きな仮想メモリ(仮想記憶)があるようになる プログラマにメモリの大きさを意識させない 重要!!!
仮 想 記 憶(2) プログラムが格納されている仮想記憶を一定の大きさのページに分割 ページの大きさを4096バイトとする 物理的記憶装置(メモリ 実記憶)も同じ大きさのページ枠(ブロック)に分割
仮 想 記 憶(3) 仮想記憶はディスクなどの補助記憶装置に格納 プログラムの実行に伴い,必要なページのみを実記憶のページ枠に格納
仮 想 記 憶(4) ページ表 仮想記憶の各ページに対して 実記憶に格納されている ページ枠の番号又はページ枠の先頭番地 実記憶に格納されていない そのことが分かるような印 ここでは省略しているので注意!
仮 想 記 憶(5) プログラム中でデータや命令を参照 データや命令の番地は 格納されているページ番号 ページ1の先頭 からの相対番地 プログラム中でデータや命令を参照 データや命令の番地は 格納されているページ番号 そのページの先頭からの相対番地 (0~4095) 前提 ページの大きさを 4096としている
仮 想 記 憶(6) 仮想記憶の4098番地 ページ番号が1で,相対番地が2である (相対番地は0~4095:12ビット)
仮 想 記 憶(7) 仮想記憶のページ1が,65536番地から始まるページ枠に格納 仮想記憶の4098番地の実記憶での番地 4098番地は ページ1の 2番地
仮 想 記 憶(8) ページ番号1のページ ページ表を調べると65536番地から始まるページ枠 実記憶での番地は65536 + 2 = 65538番地 ページ枠の先頭からの番地は,ページの先頭からの番地と同じ(相対番地)
仮 想 記 憶(9) プログラムの実行に伴いある番地を参照 その番地のページ番号 ページ番号をページ表で調べる 該当ページが実記憶にない ページフォールトという割込み 該当ページの実記憶への読み込みと ページ表更新
仮 想 記 憶(10) 空いているページ枠がない 使用中のページ枠を空けて,そこに読み込む 空けるページ枠の決め方 ページ置換えアルゴリズム 次回
仮 想 記 憶(11) あるページがいつも,同じページ枠に格納されるとは限らない 格納されるたびに変わると考えるべき 番地を参照するたびに,番地の計算を行う 動的番地変換
仮 想 記 憶(12) 仮想記憶や実記憶を同じ大きさに分割する方式をページ方式 セグメント方式と呼ばれるものもある