インタビューでこんな質問をされました。割り込みサービス ルーチンの下半分にスリープを含めることが許可されていないのはなぜですか。私の答えは、ISR の実行中に割り込みがマスクされるため、下半分にスリープがあるといくつかの割り込みを見逃すというものでした。私は考えることができませんでした。これは正しい答えですか? 誰かがこれについて他の理由を考えることができますか?
1079 次
1 に答える
3
以下はLinux用です。
下半分には2つのタイプがあります。1つ目は、softirqとタスクレットで構成されています。タスクレットはsoftirqに基づいて構築されており、非常によく似ています。これら2つはプロセスコンテキストで実行されないため、スリープできません。
2番目のタイプは、カーネルスレッドで実行され、スリープできるワークキューです。
眠らなければならない下半分がいくつかあります。私の知る限り、ネットワークシステムはワークキューを使用しています。私は眠る下半分を書きました。
たぶんあなたは2つの理由から眠ることができない上半分について尋ねていました。これらはプロセスコンテキストで実行されていないため、実行できません。可能な限り高速に実行し、すべての作業を下半分に延期する必要があります。必要に応じてスリープ状態になります。
于 2011-04-30T10:49:48.773 に答える