マルチプログラミング
主記憶に複数のプログラムを置き、あるプログラムが入出力などで待っている間に、別のプログラムにCPUを割り当てることで、CPUを有効に使う方式。同時に実行できるジョブの数を多重度という。
イマシルちゃんの解説
洗濯機を回している間に、料理を作る。料理を煮込んでいる間に、掃除をする。
こうやって、待ち時間に別のことをすれば、1日にたくさんの家事ができるよね。
コンピュータも同じで、あるプログラムがデータの読み込みを待っている間に、別のプログラムを動かすんだ。
これがマルチプログラミング!
CPUがぼーっと待っている時間を減らせるんだよ。
より深い解説
定義
マルチプログラミング(多重プログラミング)は、複数のプログラム(ジョブ)を主記憶に置いて並行して実行させ、あるジョブが入出力の完了を待っている間に、ほかのジョブにCPUを割り当てる方式である。入出力装置はCPUに比べて非常に遅いため、1つずつ実行すると、CPUが何もしていない時間が長くなる。マルチプログラミングによって、CPUの使用率とシステム全体のスループットを高められる。
多重度
同時に実行状態に置けるジョブの数を、多重度という。
| 多重度 | 動作 |
|---|---|
| 1 | 一度に1つのジョブだけを実行する。前のジョブが終わるまで、次のジョブは待つ |
| 2以上 | 複数のジョブを並行して実行する |
多重度が1のシステムでは、ジョブは到着順などの規則に従って1つずつ実行されるため、ターンアラウンドタイムは「前のジョブの終了を待つ時間」と「自分の処理時間」の合計になる。
多重度1と2の比較(CPUだけを使うジョブの例)
| ジョブ | 到着時刻 | 処理時間 |
|---|---|---|
| A | 0 | 4 |
| B | 0 | 4 |
| 多重度 | Aの終了 | Bの終了 |
|---|---|---|
| 1(到着順) | 4 | 8 |
| 2(CPUを半分ずつ使う) | 8 | 8 |
CPUだけを使うジョブでは、多重度を上げても全体の終了時刻は変わらず、個々のジョブの終了は遅くなることもある。マルチプログラミングの効果が大きいのは、入出力の待ちが多いジョブを組み合わせた場合である。
多重度を上げすぎると
多重度を上げるほどCPUを有効に使えるとは限らない。主記憶に載せるジョブが増えると、仮想記憶のページの置き換えが頻繁に起こり、処理のほとんどがページの入れ替えに費やされて、性能が急激に落ちることがある。これをスラッシングという。
似た用語との区別
| 用語 | 意味 |
|---|---|
| マルチプログラミング | 1つのCPUで、待ち時間を利用して複数のジョブを並行して実行する |
| マルチタスク | OSが、複数のタスク(プロセス)を短い時間で切り替えながら実行する。利用者からは同時に動いているように見える |
| マルチプロセッサ | 複数のCPU(コア)で、実際に同時に処理する |
| タイムシェアリング | CPUの時間を細かく区切って、複数の利用者に順番に割り当てる |