v6quiz (2)
昨晩エントリについてまごろくさんが見事な回答を tweet されてます。
カーネルは実行可能なプロセスが無くなるとidleとなり、事象の発生を待つ。割り込みがこの状態から遷移する唯一の契機となる。契機には時間の経過待ち又はIOの完了待ちがあり、前者はsleep(3)、後者はread(2)が典型として例示できる。
https://twitter.com/magoroku15/status/227408842340827137 より引用
そうか IO 完了な割り込みでも、なのか。
というか
実装として以下なんですが
2218 if(p == NULL) { 2219 p = rp; 2220 idle(); 2221 goto loop; 2222 }
あ、idle 手続きの実装が以下です。
1283 .globl _idle 1284 _idle: 1285 mov PS,-(sp) 1286 bic $340,PS 1287 wait 1288 mov (sp)+,PS 1289 rts PC
で、wait という命令は適当な時間待って戻るのだろう、と思ってたんですがダウトだった模様。Lions' 本によれば以下とのこと。
ハードウェア割り込みが起こるまで、プロセッサをアイドルにし、ユニバスを解放する。
(Lions' Commentary on UNIX より引用)
こうして見るに確かに回答は最強かも。