今回は、オペレーティングシステムの役割の一つであるメモリ管理について解説します。
メモリとは?大事なところだけ解説!メモリとは
メモリとは、コンピューター内のデータを保存しておく領域のことです。オペレーティングシステムは、コンピューターがこのメモリを効率よく利用することが出来るようにメモリ管理をしています。
現在のほとんどのコンピュータは、プログラム記憶方式という方式を用いています。プログラム記憶方式とは、プログラムを主記憶装置に読み込んでおき、CPUが順次読み出し実行する方式です。プログラムは磁気ディスクなどの補助記憶装置に保存されていますが、実行時には主記憶装置上に配置し、実効が終われば主記憶装置上から消去されます。
実記憶管理
主記憶のことを実記憶ともいい、これを効率よく管理するために、以下のような方式があります。
- 区画方式
- スワッピング方式
- オーバーレイ方式
区画方式とは、主記憶をいくつかの区画に分割して、プログラムに割り当てる方式です。この区画方式には2つの方式があります。
- 固定区画方式
- 可変区画方式
主記憶をあらかじめ決まった大きさの区画に分割し、各プログラムは格納できる大きさの区画に配置されます。主記憶の使用効率は悪いですが、処理時間は一定で速くなります。
主記憶をプログラムが必要とする大きさの区画を割り当てて配置します。主記憶の使用効率は良いですが、処理時間は不定で遅くなります。
スワッピング方式とは主記憶の容量が不足した場合に、プログラムの一部を一時的に補助記憶装置に退避させる方式です。
主記憶に入りきらないプロセスが発生したとき、OSが不要と判断したプロセスをディスクのスワップ領域に書き出します。これをスワップアウトと言います。そして、空いたメモリ領域に、実行中のプロセスや新しいプロセスをロードします。
また、スワップアウトされたプロセスが再び実行される必要が生じた場合、スワップ領域からメモリに戻されます。これをスワップインと言います。
スワップ領域は補助記憶装置上の特別な領域で、「スワップファイル」または「スワップパーテーション」として用意されています。
オーバーレイ方式とは、あらかじめプログラムを同時に実行しない排他的な幾つかの単位(セグメント)に分割しておき、実行時に必要な部分だけを主記憶に配置して実行する方式です。これによりプログラム全体を主記憶上に配置せずにプログラムを実行することが出来るようになります。
この方式は、大きなプログラムを小容量の主記憶上で実行させる技術として、家電製品等に組み込まれて動作するプログラムで利用されています。
OSが主記憶の領域の獲得と解放を繰り返していくと、細切れの未使用領域が発生します。この現象をフラグメンテーションと言います。この発生によって、合計すると十分な未使用領域があるにもかかわらず、必要とする主記憶の領域の獲得が出来ないことがあります。
この問題を解決するためには、細切れの未使用領域を連続した一つの領域にまとめる必要があります。これをメモリコンパクションと言います。空き領域が一つにまとめられることで、再利用が可能になります。
また、どの方式においても起こりうる現象ですが、OSやアプリケーションのバグなどが原因で、動作中の確保した主記憶の領域が解放されないことがあります。その結果、主記憶中の利用可能な領域が減少してしまいます。これをメモリリークと言います。
メモリリークを解消するためには、不要になった領域を解放するガーベジコレクションを行うか、再起動をする必要があります。
仮想記憶方式
仮想記憶方式は、プログラムを仮想記憶空間に格納しておき、実行時に必要なプログラムやデータを実記憶に配置して実行する方式です。磁気ディスクやSSDなどの補助記憶を、仮想的な主記憶空間として使います。これにより、見かけ上の主記憶の容量が増え、主記憶の容量よりも大きなメモリを必要とするプログラムも実行できるようになります。
プログラムは仮想記憶空間に格納されているため、プログラムを実行するには仮想記憶上の番地(仮想アドレス)を主記憶上の番地(実アドレス)に変換する必要があります。この変換を、動的アドレス変換機構とよばれるハードウェアで行います。
仮想記憶管理の一つに、ページング方式があります。これは、主記憶とプログラムを固定長(ページ)に分割し、このページ単位で管理する方式です。大きなプログラムを実行するときも、ごく短い時間を見れば、必要なのは一部のみであることを利用しています。
実行するページが主記憶に存在しない場合は、ページフォルトと呼ばれる割り込みが発生し、不要なページを主記憶から補助記憶に追い出し(ページアウト)、必要なページを補助記憶から主記憶に配置します(ページイン)。
なお、ページフォルトが多発すると、処理効率が急激に低下する現象が発生します。この現象は、スラッシングと呼ばれています。この現象を抑えるためには、主記憶の増設や、ジョブの多重度を下げて主記憶の使用を抑制するなどの対策を取る必要があります。
ページング方式で、不要なページを決定する主な方法には以下のようなものがあります。
- FIFO方式
- LRU方式
- LFU方式
もっとも古くから主記憶に存在するページを置き換えます。
最後に参照されてから最も経過時間が長いページを置き換えます。
参照回数が最も少ないページを置き換えます。
まとめ
今回は、オペレーティングシステムの役割の一つであるメモリ管理について解説しました。メモリ管理には実記憶管理と仮想記憶方式がありました。実記憶管理では、区画方式やスワッピング方式、オーバーレイ方式がありました。仮想記憶方式では、ページング方式で主記憶を管理していました。
このサイトでは、ITに関する記事を投稿しています。ぜひ他の記事もご覧ください。