主記憶(メモリ)を複数のプログラムに効率よく割り当てて管理するOSの機能。
主記憶管理とは、容量に限りのある主記憶(=メモリのこと。プログラムやデータを一時的に置く高速な記憶装置)を、複数のプログラムへ効率よく割り当てて管理するOS(基本ソフトウェア)の機能のことです。
身近な例で考えると、1つの会議室を時間帯ごとに複数のチームへ貸し出す予約管理に似ています。部屋(メモリ)は限られているので、どのチーム(プログラム)にどの区画を貸すか、空きはどこか、使い終わったら返してもらう、といった調整役が必要です。その調整役がOSの主記憶管理です。
目的は、限られた主記憶を複数のプログラムに割り当て、競合(場所の取り合い)や無駄なく使えるようにすることです。上の図解で、OS領域・複数のプロセス領域・空き領域がどのように1つの主記憶を分け合っているかを確認できます。
主記憶管理には、歴史的にいくつかの方式があります。代表的なものは次のとおりです。
・区画方式:メモリをいくつかの区画(くぎり)に分けて割り当てる。区画サイズを決めておく固定区画方式と、必要なサイズだけ確保する可変区画方式がある
・スワッピング:使っていないプログラムを丸ごと補助記憶(=ハードディスクやSSDのこと)に追い出し、空いた主記憶を別のプログラムに使わせる
・仮想記憶:プログラムを小さな単位に分けて出し入れする。分け方によりページング(固定サイズに分割)とセグメンテーション(意味のある単位で分割)がある
これらは「より多くのプログラムを、より無駄なく動かしたい」という同じ目的に向かって発展してきました。単純な区画方式から始まり、追い出しを行うスワッピング、そして細かく出し入れする仮想記憶へと進化した、という流れで捉えると整理しやすいです。
上の図解②で、これらの方式が「主記憶管理」の下にどう枝分かれするかを示しています。区画方式の固定/可変、仮想記憶のページング/セグメンテーションという下位分類まで合わせて覚えておきましょう。
主記憶はどうしても容量に限りがあります。そこで、物理メモリ(実際の主記憶)が不足しても、補助記憶(ハードディスクやSSD)を併用することで、各プログラムに大きなアドレス空間があるかのように見せる仕組みが登場しました。これが仮想記憶です。
身近な例で考えると、机(主記憶)が狭くても、本棚(補助記憶)から必要な本だけを机に出して作業し、使わない本は棚に戻すようなイメージです。机が狭くても、本棚を含めれば膨大な資料を扱えます。
つまり仮想記憶は、限られた主記憶を効率よく使うという主記憶管理の発展形です。区画方式やスワッピングの考え方を引き継ぎつつ、補助記憶を組み合わせることで「足りない主記憶を補う」ところまで踏み込んだものだと捉えると、全体像がつながります。
なぜ専用の管理機能が必要か。それは、複数のプログラムが「どこにでも書いてよい」状態では、互いの領域を上書きして壊し合うからです。たとえばプログラムAが100番地から書き始め、プログラムBも同じ100番地に書き込むと、AのデータはBに上書きされて消えてしまいます。
これを防ぐために、OS(基本ソフト)が「どのプログラムがどの番地の範囲を使うか」を決めて管理します。各プログラムは自分に割り当てられた範囲だけを使うので、勝手に他の領域へ書けません。
・競合(場所の取り合い)を防ぐ ― 同じ場所を2つのプログラムに渡さない
・破壊から保護する ― 他のプログラムの領域を上書きできないようにする
・空きを把握して有効活用する ― 終了したプログラムの領域を回収して次に貸す
身近な例で考えると、共有オフィスで席の予約システムがなければ、2人が同じ席に座ってしまうようなものです。予約管理(=主記憶管理)があって初めて、全員が安全に作業できます。現代のOSはこの管理を自動でやっているため、私たちがプログラムを使うときに席の取り合いが起きていないのです。
区画方式には、固定区画方式と可変区画方式の2種類があります。どちらにも長所と短所があり、何を優先するかによって使い分けられます。
| 項目 | 固定区画方式 | 可変区画方式 |
|---|---|---|
| 区画サイズ | あらかじめ固定 | プログラムの要求に合わせて決める |
| 管理の手間 | 単純(管理しやすい) | 複雑(空きを追跡し続ける) |
| 内部断片化 | 起きやすい(区画が大きいと余る) | ほぼ起きない |
| 外部断片化 | 起きにくい(区画サイズが一定) | 起きやすい(割り当て・解放を繰り返す) |
固定区画方式は管理が単純ですが、プログラムが区画より小さいと余りが生じます(これを内部断片化=区画の内側の無駄な領域、と呼びます)。一方可変区画方式は無駄なく割り当てられますが、使用と解放を繰り返すと空きが細切れになり連続した大きな領域が取れなくなります(これを外部断片化と呼びます)。断片化については次のページ「フラグメンテーション」で詳しく学べます。