実記憶管理(区画方式・フラグメンテーション・スワッピング・オーバーレイ)(real memory management)

分類
テクノロジ系 ソフトウェア
出る試験
基本情報応用情報
重要度
★★★☆☆

主記憶をどう分けて貸し出すかの決め方。空きが散らばるフラグメンテーションと、その手当てが中心になる。

もう少し詳しい説明

主記憶(いま使うプログラムとデータを置いておく記憶装置)は有限で、しかも何本ものプログラムが同時に欲しがります。そこで、OSが誰にどこを貸すかを決めています。この仕事が実記憶管理です。

仮想記憶を使わず、主記憶をそのまま分けて貸すやり方を指します。

区画方式

主記憶を区画に分けて貸し出します。分け方が2通りあります。

方式分け方困るところ
固定区画方式あらかじめ決めた大きさに区切っておく小さいプログラムを大きい区画に入れると、余りが無駄になる
可変区画方式必要な大きさだけ切り出して貸す貸し借りを繰り返すと、空きが散らばる

固定区画方式の無駄は、区画の中に生まれます。6マスの区画に4マスのプログラムを入れると、残りの2マスは誰も使えません。

可変区画方式はこの無駄が出ませんが、代わりに次の問題が起きます。

フラグメンテーション

可変区画方式で起きるのが、フラグメンテーションです。どういう状態になるのかを、先に図で見ます。

はじめABCDBとDが終わるとA空き2C空き2詰め直すとAC続いた空き4
主記憶を8マスとして、A・B・C・Dが2マスずつ使っています。BとDが終わると空きは合わせて4マスになりますが、続いているのは2マスずつです。3マス欲しいものは、合計では足りているのに置けません。いちばん下は、使用中を前へ詰めて空きを1か所に集めた状態です。

フラグメンテーション(断片化)は、空き領域が細切れに散らばり、合計では足りているのに続いた領域が取れない状態です。

借りたり返したりを繰り返すと、使用中の領域のあいだにすき間が残ります。すき間は1つ1つが小さいので、大きなプログラムはどこにも入りません。

「合計は足りているのに置けない」という言い方が、この語の目印です。

手当てはコンパクション(記憶の詰め直し)です。使用中の領域を前へずらして、空きを1か所に集めます。

コンパクションは重い作業です。 動かした領域を参照している場所も全部直すので、そのあいだ処理は止まります。頻繁にやるものではありません。

メモリリークとは別の話です。メモリリークは空きの合計そのものが減っていくのに対して、断片化は合計は減っていないまま置けなくなります。

空き領域の選び方

可変区画方式では、どの空きから貸すかにも決め方があります。

決め方どこから貸すか
最初適合(ファーストフィット)前から見て、最初に入る空き
最適適合(ベストフィット)入る空きのうち、いちばん小さいもの
最悪適合(ワーストフィット)入る空きのうち、いちばん大きいもの

最適適合がいちばん良さそうに見えますが、そうとも言えません。 ぴったりに近い空きを選ぶので、残るすき間が極端に小さくなり、どこにも使えない細片が増えていきます。

スワッピング

主記憶が足りないとき、OSは動いていないプロセス(実行中のプログラム1本ぶん)を丸ごと補助記憶へ追い出します。

スワップアウトスワップイン主記憶の中実行可能・実行・待ち補助記憶へ追い出された休止状態
主記憶が足りなくなると、OSはプロセスごと補助記憶へ追い出します。追い出されているあいだが休止状態です。追い出すことをスワップアウト、連れ戻すことをスワップインと呼びます。
言葉向き
スワップアウト(ロールアウト)主記憶から補助記憶へ
スワップイン(ロールイン)補助記憶から主記憶へ

追い出されているあいだ、そのプロセスは休止状態です。続きをやるための情報は保存されているので、連れ戻されたところから再開します。

仮想記憶のページングと混ざります。単位が違います。

入れ替える単位
スワッピングプロセス丸ごと
ページングページ(固定長の小さな塊)

オーバーレイ方式

プログラムが主記憶より大きいときの、古くからあるしのぎ方です。

プログラムを同時には使わない部分に分けておき、必要になった部分だけを同じ場所に上書きで読み込みます。

たとえば「入力」「集計」「印刷」の3つに分けておけば、集計中は入力の部分を主記憶に置いておく必要がありません。

どこで入れ替えるかを、作る人が決めておきます。 ここが仮想記憶との大きな違いで、仮想記憶ではOSが自動で入れ替えるため、作る人は主記憶の大きさを気にせずに書けます。

試験ではこう出る

科目A(旧・午前)では、フラグメンテーションとコンパクションの組合せがいちばんよく出ます。「空き領域の合計は十分あるのに割当てができない」という言い方が目印です。

紛らわしい言葉が並べて出されます。

言葉何が起きているか
フラグメンテーション空きが散らばり、続いた領域が取れない
コンパクション使用中を詰め直し、空きを1か所に集める
メモリリーク返し忘れで、空きの合計が減り続ける
スラッシング仮想記憶で入れ替えばかりになり、処理が進まない

スワップアウトとページアウトの区別も問われます。プロセス丸ごとか、ページ単位かで分かれます。

応用情報では、空き領域の並びと要求サイズを与えて、どの方式でどこに割り当てられるかを追わせる形で出ます。最初適合と最適適合で結果が変わる例が使われます。

関連する用語

主記憶
貸し出す対象そのもの。容量と速さの位置づけ
仮想記憶
主記憶より大きく見せるしくみ。実記憶管理の次に学ぶ
メモリリークとガベージコレクション
返し忘れと自動回収。断片化の詰め直しもこちらで扱う
プロセスの状態(実行可能状態・実行状態・待ち状態)
追い出されているあいだの休止状態は、状態遷移図のほうにも出る
メモリインタリーブ
主記憶を速く読むための工夫。管理の話ではなく速度の話

ミニクイズ

可変区画方式で主記憶の割当てと解放を繰り返したとき、空き領域の合計は十分あるのに新しいプログラムを読み込めないことがある。この現象と、その手当ての組合せとして適切なものはどれか。

正解は 2番:フラグメンテーション ― コンパクション

空き領域が細切れに散らばり、合計では足りているのに続いた領域が取れない状態をフラグメンテーション(断片化)と呼びます。手当ては、使用中の領域を前へ詰め直して空きを1か所に集めるコンパクションです。スワップインは、補助記憶へ追い出したプロセスを主記憶へ連れ戻す動きで、散らばりは直りません。スラッシングは、仮想記憶でページの入れ替えが頻発して処理が進まなくなった状態です。メモリリークは、使い終わった領域を返し忘れて空きが減り続けることで、こちらは合計そのものが減っていきます。

間違えた用語の復習リストを見る →

この分野をまとめて解く → システム構成要素とソフトウェアのミニテスト(全28問)

最終更新:2026-10-20