FE EXAM

主記憶管理(メモリ管理)

主記憶(メモリ)を複数のプログラムに効率よく割り当てて管理するOSの機能。

DIAGRAM
OS領域
プロセス
空き

① 主記憶を複数のプログラムに割り当てる全体像

主記憶(メモリ)OS領域カーネルが常駐プロセスA実行中のプログラムプロセスB実行中のプログラムプロセスC実行中のプログラム空き領域未割当て低位高位アドレスOS(主記憶管理)どのプログラムにどこを割り当てるかを決めて管理する・割当て / 解放・競合の防止・空き領域の把握割り当て

② 主記憶管理の方式の分類

主記憶管理の方式区画方式スワッピング仮想記憶固定区画方式可変区画方式ページングセグメンテーション
解説

📌
主記憶管理とは

1つの主記憶を複数のプログラムで分け合うOSプログラムAプログラムB空き

主記憶管理とは、容量に限りのある主記憶(=メモリのこと。プログラムやデータを一時的に置く高速な記憶装置)を、複数のプログラムへ効率よく割り当てて管理するOS(基本ソフトウェア)の機能のことです。

身近な例で考えると、1つの会議室を時間帯ごとに複数のチームへ貸し出す予約管理に似ています。部屋(メモリ)は限られているので、どのチーム(プログラム)にどの区画を貸すか、空きはどこか、使い終わったら返してもらう、といった調整役が必要です。その調整役がOSの主記憶管理です。

目的は、限られた主記憶を複数のプログラムに割り当て、競合(場所の取り合い)や無駄なく使えるようにすることです。上の図解で、OS領域・複数のプロセス領域・空き領域がどのように1つの主記憶を分け合っているかを確認できます。

🗂️
主要な方式

主記憶管理には、歴史的にいくつかの方式があります。代表的なものは次のとおりです。
区画方式:メモリをいくつかの区画(くぎり)に分けて割り当てる。区画サイズを決めておく固定区画方式と、必要なサイズだけ確保する可変区画方式がある
スワッピング:使っていないプログラムを丸ごと補助記憶(=ハードディスクやSSDのこと)に追い出し、空いた主記憶を別のプログラムに使わせる
仮想記憶:プログラムを小さな単位に分けて出し入れする。分け方によりページング(固定サイズに分割)とセグメンテーション(意味のある単位で分割)がある

これらは「より多くのプログラムを、より無駄なく動かしたい」という同じ目的に向かって発展してきました。単純な区画方式から始まり、追い出しを行うスワッピング、そして細かく出し入れする仮想記憶へと進化した、という流れで捉えると整理しやすいです。

上の図解②で、これらの方式が「主記憶管理」の下にどう枝分かれするかを示しています。区画方式の固定/可変、仮想記憶のページング/セグメンテーションという下位分類まで合わせて覚えておきましょう。

🔗
仮想記憶との関係

主記憶(少)物理メモリ補助記憶HDD/SSD併用大きく見せる=仮想記憶

主記憶はどうしても容量に限りがあります。そこで、物理メモリ(実際の主記憶)が不足しても、補助記憶(ハードディスクやSSD)を併用することで、各プログラムに大きなアドレス空間があるかのように見せる仕組みが登場しました。これが仮想記憶です。

身近な例で考えると、机(主記憶)が狭くても、本棚(補助記憶)から必要な本だけを机に出して作業し、使わない本は棚に戻すようなイメージです。机が狭くても、本棚を含めれば膨大な資料を扱えます。

つまり仮想記憶は、限られた主記憶を効率よく使うという主記憶管理の発展形です。区画方式やスワッピングの考え方を引き継ぎつつ、補助記憶を組み合わせることで「足りない主記憶を補う」ところまで踏み込んだものだと捉えると、全体像がつながります。

💡
なぜメモリ管理が必要か

管理なしの場合衝突!OS管理ありの場合ABOSが住み分けを管理することで衝突を防ぐ各プログラムは自分の領域だけ使う

なぜ専用の管理機能が必要か。それは、複数のプログラムが「どこにでも書いてよい」状態では、互いの領域を上書きして壊し合うからです。たとえばプログラムAが100番地から書き始め、プログラムBも同じ100番地に書き込むと、AのデータはBに上書きされて消えてしまいます。

これを防ぐために、OS(基本ソフト)が「どのプログラムがどの番地の範囲を使うか」を決めて管理します。各プログラムは自分に割り当てられた範囲だけを使うので、勝手に他の領域へ書けません。
競合(場所の取り合い)を防ぐ ― 同じ場所を2つのプログラムに渡さない
破壊から保護する ― 他のプログラムの領域を上書きできないようにする
空きを把握して有効活用する ― 終了したプログラムの領域を回収して次に貸す

身近な例で考えると、共有オフィスで席の予約システムがなければ、2人が同じ席に座ってしまうようなものです。予約管理(=主記憶管理)があって初めて、全員が安全に作業できます。現代のOSはこの管理を自動でやっているため、私たちがプログラムを使うときに席の取り合いが起きていないのです。

⚖️
区画方式の仕組みとトレードオフ

固定区画方式等しい大きさで区切る可変区画方式必要な大きさだけ確保

区画方式には、固定区画方式可変区画方式の2種類があります。どちらにも長所と短所があり、何を優先するかによって使い分けられます。

項目固定区画方式可変区画方式
区画サイズあらかじめ固定プログラムの要求に合わせて決める
管理の手間単純(管理しやすい)複雑(空きを追跡し続ける)
内部断片化起きやすい(区画が大きいと余る)ほぼ起きない
外部断片化起きにくい(区画サイズが一定)起きやすい(割り当て・解放を繰り返す)

固定区画方式は管理が単純ですが、プログラムが区画より小さいと余りが生じます(これを内部断片化=区画の内側の無駄な領域、と呼びます)。一方可変区画方式は無駄なく割り当てられますが、使用と解放を繰り返すと空きが細切れになり連続した大きな領域が取れなくなります(これを外部断片化と呼びます)。断片化については次のページ「フラグメンテーション」で詳しく学べます。

練習問題

🎯
基本情報技術者 練習問題

Q1.主記憶管理の説明として最も適切なものはどれか。
A.限られた主記憶を複数のプログラムに割り当て、競合や無駄なく使えるよう管理する機能
B.CPUの命令を1つずつ取り出して実行する機能
C.ファイルをフォルダ単位で整理して保存する機能
D.通信相手とコネクションを確立する機能
Q2.主記憶管理の方式に該当しないものはどれか。
A.区画方式(固定区画・可変区画)
B.スワッピング
C.仮想記憶(ページング・セグメンテーション)
D.ラウンドロビン
Q3.仮想記憶と主記憶管理の関係として正しいものはどれか。
A.仮想記憶は主記憶を一切使わず補助記憶だけで動く
B.物理メモリが不足しても補助記憶を併用し、大きなアドレス空間を見せる発展形である
C.仮想記憶を使うと主記憶管理は不要になる
D.仮想記憶は主記憶より必ず低速で利点がない

関連コンテンツ