FE EXAM

可変区画方式(可変パーティション)

プログラムが必要とするサイズちょうどに主記憶を割り当てる方式。

INTERACTIVE VISUALIZATION
使用中
空き
分断された空き
フェーズ
idle
空き合計
400KB
最大の連続空き
400KB
シナリオ
ステップ1 / 6
STEP 1/6メモリ全体(割当て前)400KBの主記憶が、まるごと1つの空き領域として用意されています。可変区画方式では、固定区画方式のように区切りを先に作りません。プログラムが来たときに、必要なサイズだけを切り出して割り当てます。
主記憶(400KB)— サイズに合わせて動的に割当て0400KB空き400KB
解説

📌
可変区画方式とは

必要なサイズだけ切り出して割り当てるA 120KBB 80C 100空き区画サイズは固定しない

可変区画方式とは、プログラムが必要とするサイズだけ主記憶を動的に割り当てる方式のことです。固定区画方式と違い、区画のサイズはあらかじめ固定しません。

身近な例で考えると、長いベンチに後から来た人がちょうど座れる幅だけ詰めて座っていくイメージです。ロッカー(固定区画)のように決まった枠を使うのではなく、その人に必要な幅だけを使うので、座席に無駄な隙間ができにくくなります。

上のツールで▶ボタンを押すと、プログラムをサイズちょうどに割り当て、割当てと解放を繰り返すうちに空き領域が細切れ(外部断片化)になる流れを順に確認できます。

📐
動的割当の仕組み

可変区画方式では、プログラムが来るたびに要求サイズちょうどの領域を空き領域から切り出して確保します。区画の中に余りが出ないので、固定区画方式で問題だった内部断片化(区画内の未使用領域)は起きにくいのが利点です。

空き領域が複数あるとき、どこから切り出すかには、いくつかの代表的な選び方があります。
ファーストフィット:先頭から探して、最初に見つかった入る空きに割り当てる(速い)
ベストフィット:入る空きの中で最も無駄が小さい(最も近いサイズの)空きに割り当てる
ワーストフィット:最も大きい空きに割り当てる

どの選び方にも一長一短があります。速さを優先するか、無駄を減らすかで使い分けます。上のツールのSTEP2で、各プログラムが必要なサイズちょうどに割り当てられ、区画内に余りが出ない様子を確認できます。

⚠️
外部断片化の発生

空きの合計220KB > 最大の連続100KB空き120B空き100D180KBは連続して入る場所がない → 割当て不可コンパクションで寄せ集めれば解決

外部断片化(external fragmentation)とは、割当てと解放を繰り返すうちに空き領域が小さく分断され、合計は足りても連続した空きが足りなくなる現象のことです。可変区画方式の欠点です。

たとえば空き領域が120KB + 100KB = 220KBあっても、間に使用中の領域が挟まっていれば、ひとつながりの空きは最大でも120KBです。180KBのプログラムは合計では足りているのに割り当てられません。これが外部断片化のやっかいなところです。

対策としてよく使われるのがコンパクション(メモリ整理)です。使用中の領域を主記憶の片側に寄せ集めることで、散らばっていた空きをひとつながりにまとめます。ただし領域を移動するため処理コストがかかります。上のツールのSTEP5とSTEP6で、割当て不可の状態と、コンパクションで解決する様子を確認できます。

💡
なぜ外部断片化が起きるのか

①割当て直後A 80B 60空きA解放②A解放後空き80B 60空き③Cを40KB割当て後 → 空きが分断C 40空40B 60空き空き合計が足りても「ひとつながり」の空きが小さい→ これが外部断片化

結論:プログラムをサイズちょうどに割り当てて解放を繰り返すと、使用中の領域が「飛び石」状に散らばるからです。固定区画方式では区画が固定なので飛び石は起きません。しかし可変区画方式ではサイズがバラバラな領域が来ては消えを繰り返し、空き領域がだんだん細切れになっていきます。

身近な例で考えると、長いベンチで人が入れ替わり立ち替わり座ると、空席が「島」に分かれて、連続した長い空席が取れなくなるのに似ています。1席ずつの空席が各所に点在しても、グループが隣に座ろうとすると席が足りないのと同じ状態です。

固定区画方式と比べると、次のようなトレードオフ(長所と短所の関係)があります。
可変区画の長所:プログラムのサイズにぴったり合わせるため、区画内の無駄(内部断片化)が起きにくい
可変区画の短所:割当てと解放を繰り返すと外部断片化が起き、管理も複雑になる
固定区画の長所:管理がシンプルで、外部断片化が起きない
固定区画の短所:プログラムが区画より小さいと内部断片化でメモリが無駄になる

練習問題

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

Q1.可変区画方式の説明として最も適切なものはどれか。
A.主記憶をあらかじめ固定サイズの区画に分けて割り当てる
B.プログラムが必要とするサイズだけ主記憶を動的に割り当てる
C.プログラムを固定サイズのページに分けて出し入れする
D.使っていないプログラムを補助記憶に丸ごと追い出す
Q2.可変区画方式で発生する外部断片化の説明として正しいものはどれか。
A.区画の中に未使用領域が残ること
B.割当てと解放を繰り返すうち、空き領域が小さく分断され連続領域が足りなくなること
C.プログラムが区画より大きくて入らないこと
D.メモリ全体の容量が不足すること
Q3.空き領域の合計が220KBあるのに180KBのプログラムを割り当てられないことがある。この問題への対策として適切なものはどれか。
A.コンパクション(使用中の領域を寄せ集めて空きを連続させる整理)を行う
B.区画サイズをすべて同じに固定する
C.プログラムをすべて補助記憶に追い出す
D.空き領域を削除して容量を減らす

関連コンテンツ