Show page source of internal24-6-プロセスの状態遷移 #25257

[[PageNavi(internal24-navi)]]

{{{ comment
h2w-title:プロセスの状態遷移
}}}
 

= プロセスの状態遷移 = #SECTION02120000000000000000

プロセスは以下の状態のいずれかをとる。CPU上で実行可能なプロセスはTASK_RUNNING状態になっている。複数あるTASK_RUNNING状態のプロセスのうち最も高いプライオリティを持つタスクにCPUが与えられる。

TASK_INTERRUPTIBLE、TASK_UNINTERRUPTIBLEは、共にある条件の成立を待って実行を中断している状態である(ディスクへのI/O要求を発行した後にI/Oが完了するのを待っている状態,TTY端末からの入力を待っている状態など)。この待ち状態に二つの状態が用意されているのは、待っている間にシグナルを送られたとき、この待ちを解除するか否かを制御するためである。TASK_INTERRUPTIBLE状態で待ちに入っている場合は、強制的に起床される。(ディスクへのI/O完了待ちでは、I/O処理完了までシグナルのハンドリングを遅らせるためにTASK_UNINTERRUPTIBLEで待つようにするが、起床する時が保証されないTTY端末I/O待ちの場合は、TASK_INTERRUPTIBLEで待ちに入る)

TASK_STOPPED状態は、サスペンドシグナル(SIGSTOPやSIGTTINなど〕を送られて実行中断状態になった状態を示す。この状態のプロセスはスケジューリングの対象とならない。リジュームシグナル(SIGCONT)が送られると、TASK_RUNNING状態に戻され、スケージューリングの対象となる。

TASK_ZOMBIE状態は、exitしてから消滅するまでの間のプロセス状態である。プロセスは死んだ後も親プロセスにwaitを実行してもらうまでは、TASK_ZOMBIE状態としてシステム内に存在し続ける。

とうとうlinuxではプロセス全体のswapはで実装されず、ヘッダに予約定義されてていたTASK_SWAPPINGという状態は、v2.4で削除された。

||状態 || 説明 ||
||TASK_RUNNING || 実行可能状態 ||
|| TASK_INTERRUPTIBLE || 待ち状態。シグナル受信可能 ||
|| TASK_UNINTERRUPTIBLE || 待ち状態。シグナル受信不可 ||
|| TASK_ZOMBIE || ゾンビ状態。exit後の状態 ||
|| TASK_STOPPED || サスペンド状態 ||

linuxで定義されているプロセス状態に直行性がなく、待ち状態でかつサスペンド中という状態は存在しない。

linuxでは待ち状態のプロセスに、SIGSTOPなどを送るとサスペンド要求があったことを記録(保留)しておき、プロセスがTASK_RUNNINGになったときに、記録していた要求に従って、プロセスをTASK_STOPPEDに変化させる。

 [[Embed(internal24-images:img3.gif)]]
 

----

''(NIS)HirokazuTakahashi [[BR]]2000年12月09日 (土) 23時55分06秒 JST''1

[[PageNavi(internal24-navi)]]