マルチスレッドプログラミング相談室 その7
at TECH
859:デフォルトの名無しさん
09/09/09 03:16:16
うーん、なんか論点がずれてきているような…
> ドライバ開発で、割り込みハンドラでさわるリソースが、
> 通常コンテキストで触るリソースと競合するなら、
> 割り込み禁止以外ないと思ってたけど、そうでない
> 一般的なやり方があるなら教えてほしいのぉ。
ってのに対して「少なくともSolarisは違うよ」と言いたいだけなんだけど…
>>857
> たとえコンテクストスイッチしたとしても、その間に再度ハード割り込みが
> 次々に入ったらどうなりますか?それを避けるのが割禁の役目だと思います。
たとえば、ディスクIOに関する割り込み処理を行なっているときに
クロック割り込みが発生したら、クロックの処理を優先させるべきだからそっちの割り込み処理を先におこなう。
でも、クロック割り込みを処理しているときにディスク割り込みが発生しても、ディスク割り込みの処理は後回しにされる。
そういう制御を行なうために「割り込みレベル」ってのはある。
# これは「割り込みスレッドの優先度」とは違うもの。
でも、これはリソースの排他のためのものじゃないよね。
> そのwikipediaからの引用部分の前段には、割り込みハンドラが第1レベルと
> 第2レベルの2つの部分に別れているとあります。Solarisの場合であれば、
> カーネル(デバイス)内にあるのが第1レベルであり、その「実行中は割禁」される。
> また、デベロッパが作る割り込みハンドラが第2レベルであり、
> 一般的には「割り込みスレッド」と呼ばれている、と自分は解釈しています。
第2レベルもカーネル内にあるものだよ。
というか、Solarisでは第1レベルと第2レベルが明確に分かれておらず、
割り込みハンドラは、最初のうちは割り込んだスレッドのコンテキストを「借りて」処理をおこなう。
で、mutexでブロックすることになった時点で、完全なカーネルスレッドとして設定され、コンテキストスイッチが起こるの。
ただ、このとき優先度逆転現象が起こって競合したmutexがいつまで経っても開放されなかったらマズいので、優先度継承の仕組みが働くってこと。
次ページ続きを表示1を表示最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5397日前に更新/232 KB
担当:undef