- CPUの有効活用
プログラムを1つずつ実行するのではなく、処理の空き時間を見て他のプログラムを実行できるとより効率よく作業ができます。
また、複数のプログラムを同時に実行することでプログラム間でのデータ交換なども可能になります。これらを実現するためにCPUとOSは様々な技術を組み合わせて相互に連携しています。
- マルチプログラミング(タスク:スレッド)
複数のプログラムを実行
※CPUは1つ
|
↓(見かけ上:擬似的) |
空き時間を利用
※入出力処理など(生産性向上)
|
例)プログラムの仕様
(優先度) |
プログラム |
CPU |
IO |
CPU |
(各トータル) |
高い |
PA |
3ms |
5ms |
4ms |
12ms |
低い |
PB |
2ms |
7ms |
3ms |
12ms |
※1つずつでは、合計24msかかる
<タイムチャート>
時間(ms) |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
P(A) |
CPU |
IO |
CPU |
PA終了 |
P(B) |
待ち |
CPU |
IO |
CPU |
PB終了 |
|
|
空き |
|
※IO並列可能の場合、全体は15msで完了
- 割込み
処理を中断して、別の処理を行う
(処理の切り替えタイミング)
外部割込み
(ハードウェア) |
機械チェック
割込み |
ハードウェアの異常 |
タイマー割込み |
CPUの使用時間切れ
(ラウンドロビン) |
入出力割込み |
入出力完了 |
コンソール割込み |
オペレータ入力(手動) |
内部割込み
(ソフトウェア) |
プログラム割込み |
プログラムエラー
(0除算、桁あふれ) |
スーパーバイザ
コール(SVC) |
OS共通機能呼び出し |
<割込み制御の流れ>
- 処理の中断
- 状態の退避(コンテキスト情報)
- 割込み実行
- 状態の復旧
※ディスパッチャ
- マルチタスクとタイムシェアリング
- マルチタスク(スレッド)
<切り替え方式>
プリエンティブ |
CPU使用時間をOSが管理
(WindowsXP、Unix) |
ノンプリエンティブ |
CPU使用時間を各タスクが管理
(Windows95、MacOS)
※疑似マルチタスク |
(発展の流れ)
- プログラム自主規制(プログラム制御)
※区切りの良いところ
↓
- システムコール利用時(OS制御)
↓
- タイマー切替え(ハードウェア制御)
- タイムシェアリング(TSS:時分割)
時間ごとに機器の使用を切り替え
|