1. ホーム
  2. linux

[解決済み] Linuxのプロセス状態

2023-02-20 17:51:21

質問

Linuxでは、ディスクからブロックを読み込む必要がある場合、プロセスの状態はどうなるのでしょうか?ブロックされるのでしょうか?もしそうなら、どのようにして他のプロセスが実行されるように選択されるのでしょうか?

どのように解決するのですか?

を待っている間 read() または write() をファイル記述子から返すと、プロセスは "D" または "Disk Sleep" として知られる特別な種類のスリープ状態になります。これは特殊で、この状態にある間はプロセスを強制終了したり、中断したりすることができないからです。ioctl() からの返事を待っているプロセスも、この方法でスリープ状態になります。

例外は、ファイル (端末や他の文字デバイスなど) を開く際に O_NONBLOCK モードで開かれ、デバイス (モデムなど) が初期化するのに時間がかかると想定される場合です。しかし、質問ではブロックデバイスを指定されています。また、私は ioctl() のような、ノンブロッキングモードで開かれた fd でブロックしそうなものは試したことがありません (少なくとも知っているわけではありません)。

他のプロセスがどのように選択されるかは、使用しているスケジューラーに完全に依存し、また、そのスケジューラー内で他のプロセスがその重みを修正するために行ったかもしれないことです。

特定の状況下でのユーザー空間プログラムのいくつかは、再起動するまで永遠にこの状態のままであることが知られています。これらは通常、他のゾンビと一緒にグループ化されますが、技術的に消滅しているわけではないので、この用語は正確ではありません。