ウォッチドッグタイマー

コンピュータには、ウォッチドッグタイマー(wiki参照)があったんだけど。

使われているのかな?、動いているのかな?と言う、疑問。

1.ウォッチドッグタイマ基礎

コンピュータが、自分自身で、「おや?俺大丈夫か?」と気づくための仕組みの一つが、ウォッチドッグタイマーだったと思う。

データ異常の検出については、パリティーとか、チェックサムとか、CRC等があったと思うけど。

CPUがプログラムを実行する中で、「あれ?。俺これをやっていていいんだろうか?」と気づくためには、どんなアプローチが取れるか?、と言う命題への一つの回答として、昔々から搭載されている仕組みだったと思う。

どういう動きか?というと、昔々にTVでやっていたバラエティー番組のゲームに似ています。

そのバラエティー番組「危険信号」で、行われていたゲームは、決められた時間以内に、何らかの作業をこなすゲームでした。針の付いた、おもちゃの列車に、風船を割られると失格になります。だから風船を割られないように、「刻々と風船に近づく列車」を出発点にひきもどすべく、定期的にボタンを押して、風船と針の付いた列車の距離を確保しつつ、作業をこなすゲームでした。

ウォッチドッグタイマーのタイマーは、ハードウェア的に自動的にカウントアップします。オーバーフローするとか当初決めた値になったら、ハード割り込みが発生する仕組みになっています。

なので、CPUは、いろんな処理をする合間に、カウンターをリセットしないといけないのです。

考え方としては、CPUと言うか、システムがまともに動いているなら、カウンターをリセットする作業を忘れることもなく、遅れるはずもない(と言うか、規定時間内にカウンターリセットを出来るように設計をする)ので、まともに正常に正しく動いているなら、カウンターは適切に定期的にリセットされるので、ハード割り込みが発生することはない(はず)。と言う考え方です。

公共料金の支払期限までには、払わないと、怒らる。みたいな、そういう感じです。

旅行中の子供から、定期連絡が途絶えて、「えらいこっちゃー」と、緊急事態に気づいた。とか、そういう感じです。

2.ハードウェアウォッチドッグタイマと、ソフトウェアウォッチドッグタイマ

コンピュータシステムで、ハードウェアのウォッチドッグタイマーを使うのは、一番基底レベルで動くシステムが使うことになるんだろうと思います。一番最下層の基底レベルのシステムとかOSの、その下には、ハードウェアしか無いので、ハードウェアのウォッチドッグタイマーを使って、自分が正常かをチェックしていると思います。
そして、その基底レベルのシステムなりOSの上で動くプロセスには、ソフト的なウォッチドッグタイマーを使うようなんです。

アプリケーションの一つがコケても、OSは平然と動いているべきなので、アプリケーションのエラーで、そのアプリケーションの動作環境であるOSまで、コケるのは、まずいわけです。
つまり、最下層のOSが使っているハード的ウォッチドッグタイマーでは、アプリケーションの不調を検出出来ないのです。

そこで、(たぶん)アプリケーションはアプリケーションの都合で、ウォッチドッグタイマーを使いたいものもあるようなのです。そう云うアプリケーションの要望を満たすためには、OSがソフト的ウオッチドッグタイマーを、サービスとして提供することがあるようです。

3.まとめ
「使われているのかな?、動いているのかな?と言う、疑問。」ですが、
完全ハングアップで、画面が固まっていた。
うんともすんとも言わない、なんの反応もない。
マウスカーソルさえ動かない。
とは、どういうことなんだろう?と言う疑問です。

4.ちょっとした疑問
自分のパソコンで仮想環境を作って、複数の仮想コンピュータを運用していますが、仮想コンピュータの制御コンソールにある、ポーズボタンを押せば、好きなだけ、その仮想コンピュータを凍結しておけるのです。
凍結している間は、他の隣接コンピュータへのサービスや通信は当然停止しています。
アプリケーションレベルで、埋め込んでおいた隣接コンピュータへのレスポンス規定時間をオーバーしても異常動作には入らない。のだけど。当たり前ですよね。利用者がポーズボタンを押しているんだから。

で、これでいいのか?と言う疑問が沸くのです。

疑問は沸くけど、じゃ、ポーズボタンを押して停止したら、リブートしたほうがいいの?と言われると、それも困るなーとは思うのです。