ディスク操作(ブロッキング操作)からread()がスレッドで呼び出されたとき。スレッドでは何が起こりますか?
1.)CPUアイドルユニットのデータはメモリに転送されますか?またはWait()とスケジューラーが別のスレッドに切り替わりますか?
2.)スレッドが待機状態の場合、どのようにウェイクアップしますか?
ありがとう!
ディスク操作(ブロッキング操作)からread()がスレッドで呼び出されたとき。スレッドでは何が起こりますか?
1.)CPUアイドルユニットのデータはメモリに転送されますか?またはWait()とスケジューラーが別のスレッドに切り替わりますか?
2.)スレッドが待機状態の場合、どのようにウェイクアップしますか?
ありがとう!
これは、簡潔に答えることができないかなり自由回答形式の質問です。何が起こるかは、使用しているオペレーティング システムに大きく依存します。Linux と言いますが、それでも、バージョン、構成、およびその他のさまざまな事柄に応じて、何が起こるか (または起こらないか) を言うことは不可能です。
Linux は、プリエンプティブなマルチタスキング カーネルです。そのようなカーネルがどのように機能するかをカバーする記事、ブログ、およびその他のリソースがたくさんあります。たとえば、http://en.wikipedia.org/wiki/Computer_multitaskingです。
質問に直接答えるには:
1.) ハードウェアとドライバーによっては、CPU がアイドル状態のときにデータがメモリに転送される可能性があります。実行する他のプロセスがある場合、カーネルはデータが読み取られるのを待っている間にそれらを実行することがあります。
2.) ディスク コントローラーによって生成されたハードウェア割り込みは、アイドル状態の CPU をウェイクアップさせ、カーネルが read() を呼び出したユーザーランド プロセスにデータを返させる可能性があります。
何が起こるのか正確に知りたい場合は、カーネル コードを掘り下げることをお勧めします。どなたでもご覧いただけますので、ぜひご覧ください。;)