##タスク管理の役割
コンピュータは、私たちがアプリケーションで行う操作を、細かい仕事単位であるタスクに分解して、処理しています。タスクは、コンピュータから見た仕事の単位です。システムによってプロセスとも呼ばれます。OSは、コンピュータのあちこちで無駄な空き時間が出ないように、タスク単位で細かくCPUや主記憶を割り当て、コンピュータ全体として効率的な処理が行われるように制御しています。
##タスクの状態遷移
OSは、CPUの使用権を適切に割り当てるために、タスクを次の3つの状態に分けて管理します。
<タスクの3つの状態>
状態 | 概要 |
---|---|
実行可能状態 | CPUが使えるようになるのをタスクが待っている状態 |
実行状態 | タスクがCPUを使って実行されている状態 |
待ち状態 | 自分が要求した入出力動作が終わるのを待っている状態 |
###1,実行可能状態から実行状態へ
タスクが生成されると、まず実行可能状態となります。いくつものタスクがこの状態で待っています。自分の番が来てCPUが使えるようになると、実行状態へ移ります。
###2,実行状態から実行可能状態へ
割り当てられたCPUの使用時間を使い切ったときや、実行中に別のタスクからCPUの使用権を奪われた場合、実行状態のタスクは一時中断し、再び実行可能状態となります。
###3,実行状態から待ち状態へ
実行状態中に入出力動作が発生すると、自分が要求した入出力処理が終わるまで待ち状態となります。
###4,待ち状態から実行可能状態へ
入出力処理が終了すると、再び実行可能状態になります。
##タスクのスケジューリング方式
タスクがいくつも存在している場合、どういう順番でタスクを実行すべきかを決める必要があります。これをスケジューリングといい、OSの関わり方によって、次の2つ方式があります。
###プリエンティブ方式
OSが強制的にタスクを切り替えるスケジューリングの方法、プリエンティブといいます。以下のような方式があります。
<プリエンティブなスケジューリング方式>
方式 | 説明 |
---|---|
優先度方式 | プライオリティ法式ともいう。優先度や緊急度の高いタスクから順番に実行する方式 |
タイムスライス方式 | 複数のタスクに対して、均等にCPU処理時間を割り当て、順番に次々と実行する方式 |
###ノンプリエンティブ方式
OSがタスクを切り替えるのではなく、プログラムに任せる方法を、オンプリエンティブといいます。実行状態のタスクがみずから待ち状態に遷移するか終了するまで、他のタスクは実行状態に遷移しません。
<ノンプリエンティブなスケジューリング方式>
方式 | 説明 |
---|---|
到着順方式 | 実行可能状態になったタスクから順番に実行する方式 |
##マルチプログラミング
タイムスライス方式では、非常に小さな時間単位でタスク処理を実行していくため、まるで複数のタスクが同時並行で処理されているように見えます。見かけ上、いくつものプログラムが同時に実行されているように見えるOSの働きをマルチプログラミングといいます。マルチタスク、多重プログラミングとも呼ばれます。
マルチプログラミングにおけるタスクの切替え手順は、以下の図のとおりです。
##割り込み処理
実行中のタスクを一時中断して、別のタスクの処理に切り替える仕組みを割り込み処理といいます。割り込んだタスクの処理が終わると、割り込まれたタスクの処理が再開されます。割込みは、タスク自体にエラーなどが発生して起こる内部割込みと、ハードウェア故障といったタスク以外が原因となって起こる外部割込みに分けられます。
<内部割込み>
割込みの種類 | 説明 |
---|---|
プログラム割込み | 桁あふれやゼロにとる徐算など、プログラム上のエラーによって発生する割込み |
SVC割込み | プログラム内部から入出力装置を使うときなど、監視プログラム(SVC:SuperVisor Call)を呼び出すときに発生する割込み |
<外部割込み>
割込みの種類 | 説明 |
---|---|
マシンチェック割込み | ハードウェアの誤操作や故障により発生する割込み |
入出力割込み | 入出力動作が終了したときに発生する割込み |
タイマ割込み | プログラムの実行時間が割り当てられた時間を超えたときに、その旨を通知するインターバルタイマによって発生する割込み |
###スプーリング
タスクを実行するCPUの処理速度に比べると、入出力装置の処理速度は極端に遅くなります。そのため、タスクの実行結果である出力データを一時的に高速な補助記憶に蓄えることで、印刷など出力までの待ち時間を減らす方法をスプーリングといいます。また、処理速度の違いを緩和するために設けられた記憶域のことをバッファといいます。
###プリエンプティブ
OSが強制的にタスクを切り替える
###ノンプリエンプティブ
実行状態のタスクがみずから待ち状態に遷移するか終了するまで、他のタスクが実行状態に遷移しない
###スプーリング
低速な装置への出力データを一時的に高速な補助記憶に蓄え、待ち時間を減らす
###バッファ
処理速度の違いを緩和するために、入出力装置と処理装置の間に設けた記憶域