オーバーヘッドと多重度(overhead / multiprogramming level)
本来の仕事とは別にかかる手間がオーバーヘッド。同時に抱えている処理の数が多重度。
もう少し詳しい説明
この2つは、セットで出題されます。多重度を上げても性能が思ったほど上がらない理由が、オーバーヘッドにあるためです。
- オーバーヘッド … 本来やりたい仕事とは別にかかる手間
- 多重度 … 同時に抱えている処理の数
オーバーヘッド:目的ではない手間
オーバーヘッドは、やりたいことそのものではないのに、やらないと進まない手間です。
引っ越しにたとえます。荷物を運ぶのが目的です。けれども実際には、段ボールを組み立て、荷物を詰め、ガムテープを貼り、着いたら開けて中身を出す作業が入ります。このあいだ、荷物を運ぶ作業は1つも進んでいません。
コンピュータの中にも、同じものがいくつもあります。
- コンテキストスイッチ(動かす相手を切り替えるときに、途中までの状態をしまって、別の状態を取り出す作業)
- 通信のヘッダ(データ本体の前に付ける、宛先などを書いた部分)
- 仮想化(1台のコンピュータを複数台に見せる仕組み)での、命令の読み替え
- 排他制御(同時に触られると困るデータに鍵をかける仕組み)での、鍵の取り合い
どれも無駄ではありません。けれどもそれ自体は成果を生みません。
ゼロにはできないところが要点です。減らす工夫はできますが、無くすと仕組みが成り立ちません。
多重度:同時に抱えている数
多重度は、同時に実行状態(いまCPUをもらって動いている状態、またはその順番を待っている状態)にある処理の数です。多重度が3なら、3つの処理を抱えている状態を指します。
ここで言う「同時」は、本当に同時に走っているという意味とは違います。プロセッサ(計算と命令の実行を受け持つ部品。CPUと同じものを指します)が1つなら、ある瞬間に進められるのは1つだけです。細かく切り替えて、交互に少しずつ進めます。これを多重プログラミングと呼びます。
なぜ多重にするのか
1つずつ順番に片づけたほうが、切り替えの手間が無くて済みそうに見えます。それでも多重にするのは、処理が待っている時間が長いためです。
プログラムは、ディスクから読む、通信の返事を待つ、人の入力を待つといった場面で止まります。この待ちのあいだ、プロセッサは何もしていません。
そこで、待っているあいだに別の処理を進めます。遊んでいた時間が仕事に変わるので、全体で片づく量が増えます。
上げすぎると、逆に減る
上の図の実線を見てください。途中から下がっています。 試験で問われるのは、この形です。
多重度を上げるほど、次の3つが増えていきます。
- 切り替えの回数が増える。 切り替えのたびに、状態のしまい出しが入る
- 主記憶(いま使うプログラムとデータを置いておく記憶装置)が足りなくなる。 1つぶんの置き場を全員が要るので、数が増えると入りきらない
- 取り合いが増える。 同じデータや同じ装置を待つ列が長くなる
とくに主記憶が足りなくなると、仮想記憶(主記憶が足りないぶんを補助記憶で補い、大きく見せる仕組み)の入れ替えばかりが起きて、仕事が進まなくなります。この状態をスラッシングと呼びます。
ちょうどよい多重度がある、というのがこの図の読み方です。多ければよいのでも、少なければよいのでもありません。
1件あたりの速さは、別の話
全体で片づく量と、1件あたりの速さは、同じ方向に動きません。
多重度を上げると、1つの処理から見れば順番待ちが増えます。自分が止められて、ほかの処理が進む時間が挟まるためです。
全体の量は増えても、1件あたりは遅くなることがあります。 ターンアラウンドタイム(依頼を出してから結果が全部出そろうまでの時間)が伸びるのは、このためです。
同じ「多重度」という別の言葉
ここは混ざりやすいところです。多重度という語は、試験の中で2か所に出てきます。
| どこで出るか | 何を指すか |
|---|---|
| ソフトウェア(この項目) | 同時に実行状態にある処理の数 |
| クラス図 | 線の両端に書く、つながる相手が何個あるか |
綴りも読みも同じですが、中身は関係ありません。問題文がプロセッサや主記憶の話なら前者、図や矢印の話なら後者です。
試験ではこう出る
科目A(旧・午前)のソフトウェア分野(OSの働き)で出ます。
いちばん多いのは、多重度を上げたときにどうなるかを選ばせる問題です。「ある点を超えると、かえって処理量が減る」が答えの向きになります。グラフを見せて、頂点のある曲線を選ばせる形もあります。
オーバーヘッドは、単独では用語の説明を選ばせる形で出ます。「本来の処理に直接寄与しない、付随的な処理の負荷」という表現が答えになります。
誤答として並ぶのは、比例して増え続けるという選択肢です。比例するなら、多重度をいくらでも上げればよいことになります。そうならない理由がオーバーヘッドだと押さえてください。
応用情報では、スラッシング(入れ替えばかりが起きて仕事が進まない状態)と結び付けた形まで出ます。多重度を上げる→主記憶が足りなくなる→入れ替えが増える、という順でつながっています。
関連する用語
- プロセスとスレッド
- 実行の単位。切り替えるたびにオーバーヘッドがかかる
- ターンアラウンドタイムとレスポンスタイム
- 速さの測り方。多重度を上げすぎると、どちらも悪くなる
- 仮想記憶
- 主記憶より大きく見せる仕組み。多重度を上げすぎるとスラッシングが起きる
- マルチプロセッサ
- プロセッサを複数並べる構成。こちらも台数に比例しては速くならない
- クラス図と多重度
- 同じ「多重度」という語だが、こちらは図の中の個数を表す別の意味
ミニクイズ
1つのプロセッサで複数の処理を切り替えながら実行するとき、多重度(同時に実行状態にある処理の数)を上げていった場合の説明として、最も適切なものはどれか。
正解は 2番:ある程度までは処理できる量が増えるが、切り替えなどの手間が増えるため、上げすぎると逆に減る
多重度を上げると、入出力の待ち時間にほかの処理を進められるので、はじめのうちは処理できる量が増えます。ただし切り替えの手間や主記憶の取り合いが増えていき、ある点から先は上げるほど減ります。この「本来の仕事ではない手間」がオーバーヘッドです。比例してどこまでも増えることはなく、まったく変わらないわけでもありません。1件あたりの所要時間については、多重度を上げると順番待ちが増えるため、短くなるとは限りません。
この分野をまとめて解く → システム構成要素とソフトウェアのミニテスト(全28問)
最終更新:2026-11-05