第4回 メモリ管理 主記憶(メインメモリ)の管理 固定区画方式と可変区画方式 空き領域の管理 スワッピング
主記憶の管理 プログラムの主記憶への配置 実行するプログラムは、いったん主記憶装置にロードされる 主記憶上へのプログラムの配置もOSの仕事 割り当てアルゴリズム 主記憶を効率良く使用するように割り当てる
割り当て方式 最も簡単な割り当て手法 マルチプログラミングシステムにおける割り当て OSとユーザプログラム1つが分割して使用 マルチプログラミングシステムでは、いちいちプログラムをロードし直さなければならない マルチプログラミングシステムにおける割り当て 固定区画方式 可変区画方式
固定区画方式 主記憶をサイズ固定の区画に分割 サイズは複数用意する 区画内に収まるプログラムを選んでロードする 一時にロードできるプログラム数、大きさに制限がある 内部断片化 区画A 区画B 区画C 区画D OS プログラムC プログラムB プログラムA
内部断片化 割り当てられた領域内で、使用されない無駄な空き領域が生じることをいう 主記憶の利用効率を下げる 空き領域 (内部断片化) 区画A 区画B 区画C 区画D OS 区画A 区画B 空き領域 (内部断片化) 区画C 区画D
可変区画方式 主記憶を可変長の区画に分割 一時に主記憶に格納されるプログラム数、大きさが動的に定まる 新しいプログラムをロードするとき、そのプログラムを格納するのに十分な空き領域を探し、そこに割り当てる 外部断片化 プログラムB プログラムC プログラムA OS
外部断片化 ロードされたプログラムが終了し、空き領域がまだらにできる 全体としての空き領域が大きくても、一つ一つの空き領域が小さいため、新たなプログラムが割り当てられない プログラムF プログラムE プログラムD まだらな空き領域 プログラムC プログラムB プログラムA OS
外部断片化の解消 メモリ詰め直し 主記憶上のプログラムを移動することによって、散在する空き領域を1つの大きい空き領域にまとめる 主記憶の利用効率を向上 プログラムの移動によるCPU時間の消費により頻繁に行えない プログラムは動的再配置可能でなければならない OS OS プログラムF プログラムH プログラムD
可変区画方式における 空き領域の割り当て手法 新しいプログラムをロードするための主記憶中に点在する空き領域を探す 初適合(first-fit)... 最初に見つかった十分な空き領域を割り当てる 探索が速く、実現が容易 最適適合(best-fit) ... 十分な領域を持つ最小な空き領域を割り当てる 使われない小さな空き領域が無数に生じる 実現が困難 最悪適合(worst-fit) ... 最大の空き領域を割り当てる 領域の利用効率が最も悪い 大きな空き領域を作る
空き領域の管理方法 リスト方式 ビットマップ方式 空き 0 150 B 150 空き 300 50 C 350 150 0 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 1 0 1 1 1 0 0 1 0 1 1 0 1 0 0 0 1 0 0 0 1
補助記憶へのスワッピング 主記憶容量には限りがあるため、Wait 状態になったプロセスを主記憶から一時的に補助記憶装置(HDDなど)に退避させる(Swapping) 主記憶から補助記憶にプログラムを書き出すことをスワップアウトといい、補助記憶から主記憶にプログラムを読み込むことをスワップインという 補助記憶装置は、主記憶装置に比べ非常に低速であるため、スワッピングは性能低下を引き起こす 可変区画方式においては、スワッピングによって不連続の空き領域をまとめて一つの大きな空き領域にすることが可能 実行するプログラムが主記憶にない場合は、補助記憶からプログラムを読み込む どのプログラムを主記憶に読み込むかを決定するのもスケジューリングの一つ たとえば、長時間主記憶に存在するプログラムをスワップアウトし、新しいプログラムをロードするようにするスケジューリングなど 長期スケジューリング cf. 短期スケジューリング(CPUスケジューリング) スワッピングとプログラムの実行を並列に処理することによりオーバヘッドを隠蔽することが可能