D状態のプロセス
D状態のプロセス
シグナルによる中断が不可能になってしまったプロセスのこと。 Dはdreadedを意味する
タスクにこのフラグが付けられた場合、タスクはwaitしているタスク以外のタスクによって起動されることは想定されていない。
例えば、ハードディスクをスピンアップしたり、あるいはシークしたり ページフォルト発生時や
IO性能に依存する処理など?
この間プロセスはハードウェアをブロックし、sleep状態にいる
プロセスがユーザーモードにあるときは、いつでも中断可能
カーネルがユーザーモードに移行する際、カーネルは保留中のシグナル(たとえばSIGKILLやSIGTERMなど)があるかどうかを確認する
なんで? 同じマシン上にある他のすべてのプロセスによって用いられるカーネル構造を壊してしまう恐れがあるため。
the same way killing a thread can potentially corrupt data structures used by other threads in the same process
When the kernel needs to do something which could take a long time (waiting on a pipe written by another process or waiting for the hardware to do something, for instance), it sleeps by marking itself as sleeping and calling the scheduler to switch to another process (if there is no non-sleeping process, it switches to a "dummy" process which tells the cpu to slow down a bit and sits in a loop — the idle loop).
カーネルが長い時間がかかると思われる何かをする必要にある際、プロセスはそれ自体をsleepに設定した上でsleepし、スケジューラを呼びだして他のプロセスに切り替えてもらう(ここで、sleepしていないプロセスもなかったら、「ダミー」のプロセスに切り替える。「ダミー」プロセスはCPUにクロックを遅くするよう伝え、ループ状態に入る=これがアイドル)。 ダミープロセスはつまりidle task
WindowsだとSystem Idle Processとして表示されるやつ
シグナルがスリープ中のプロセスに送信された際、プロセスはユーザーモードに復帰し、起きて、保留中のシグナルを処理する。
ここで、スリープには違いがある。