優先順位の逆転

優先順位の逆転 - Wikipedia http://ja.wikipedia.org/wiki/%E5%84%AA%E5%85%88%E9%A0%86%E4%BD%8D%E3%81%AE%E9%80%86%E8%BB%A2
優先度継承 - Wikipedia http://ja.wikipedia.org/wiki/%E5%84%AA%E5%85%88%E5%BA%A6%E7%B6%99%E6%89%BF
優先度上限プロトコル - Wikipedia http://ja.wikipedia.org/wiki/%E5%84%AA%E5%85%88%E5%BA%A6%E4%B8%8A%E9%99%90%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB

火星探査船「マーズ・パスファインダー」で発生した問題は、リアルタイムシステムでの優先順位の逆転が引き起こした典型的な例である

なるほど、たとえば僕のマシンが常時起動で10分に1回どこかのサーバになんかの情報を読み出してを送り、その定時報告が20分間途絶えたらマシンがハングしているという旨を僕の携帯に送るようにしたとする、と。でこの報告の送信タスクXは一番高い優先度にしてあるとする。それとは別にマシンがアイドル状態の時になんかの計算をして結果を書き出すようなプログラムYを走らせていたとする。これは低い優先度で走らせてある。で、DVDを見るのは中くらいの優先度だとする。
そうすると、たまたま僕が「DVDでも見るか」と思った瞬間が、まさにYが計算を完了して結果の書き出しをしようとロックをかけた瞬間だったとすると、Yが情報を書き出すのよりもDVDの再生のほうが優先されてしまう。そして優先度の高いXが情報を読み出すためのロックを獲得できずにブロックされる。結果としてDVDを見ているとなぜか携帯に「マシンがハングアップしています」というメールが届くことになる。
この例では単に「ハングしていないのにハングしたというメールが届く」というだけですむけども、マーズ・パスファインダーのような「ハングしたときに人間がリセットできないシステム」は万が一のために「ウォッチドッグタイマ」という「定時報告がなかったらリセットする仕組み」をつんであるらしく、もし僕のパソコンにそれが入っていたとしたら「DVDを見ていたらなぜかリセットされて計算結果も全部パー」という悲しいことになるわけか。

ウォッチドッグタイマー - Wikipedia http://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A9%E3%83%83%E3%83%81%E3%83%89%E3%83%83%E3%82%B0%E3%82%BF%E3%82%A4%E3%83%9E

マルチタスクって難しいなぁーー。