各種システム開発・WEBコンテンツ制作・WEBデザイン・ホームページ制作・インフラ設計・構築・レンタルサーバー・ソフトウェア技術者のアウトソーシング事業を行っております。

6 月
1

ウォッチドッグタイマーとリセット

技術スタッフ


スマートフォンを使っていて、突然画面が消えて再起動したのを経験した人は少なくないと
思います。
使っている人にとっては「不良品じゃないか」と叫んでしまいたくなりますが、ソフトウェアを
作っている側からすれば無くてはならない機能なのです。
実際に、この時に何が起こっているのかを説明すると、ソフトウェア自身がリセットを起こして、
プログラムを0からスタートさせています。
ちなみに、この機能は、スマートフォンだけでなく全ての電化製品に組み込まれています。

 

ソフトウェアがリセットする機能は、ウオッチドッグタイマーと呼ばれるプログラムの動作を
監視するシステムで実現しています。
プログラムは、常にメインルーチンをぐるぐると回っているので、必ず一定の時間毎に指定の
場所を通ります。
ウオッチドッグタイマーは、常にカウントアップしていて、その指定した場所を通った時に
カウントをクリアします。
すなわち、正常に動作している間はカウント値が溢れることはないのです。
ところが、プログラムが何かしらの原因で止まってしまうと、今まで一定の時間毎に通っていた
場所を通らなくなります。
そうなると、カウンタ値をクリアすることができずにどんどん加算されていきます。
そして、カウンタが規定の値に達すると、ソフトウェアが正常に動作していないと判断して、
最初に述べたようにソフトウェア自身でリセットを起こしてプログラムを0からスタートさせます。

 

では、何故ソフトウェア自身でリセットを起こす機能が必要なのでしょうか。
プログラムが異常状態になることを暴走しているといいますが、暴走している時はどんな悪さを
するのか分かりません。
保存しているデータを破壊したり、個人情報を勝手に送信したり、電化製品自体が壊れて
動かなくなる可能性もあります。
そんな最悪な状況に陥らないためにも、ソフトウェア自身でリセットを起こして異常な状態を
終わらせる必要があるのです。

 

余談ですが、ウオッチドッグタイマーによるリセットは、正常な状態でも起こすことができます。
答えは簡単、プログラムで無限ループに入れればいいのです。
実際にプログラムに組み込むことも多く、プログラムの処理結果で異常な状態になった場合、
”for(;;){}”や”while(1){}”の中に入れる処理にすればプログラムはそこから出られなくなり、
ウオッチドッグタイマーのカウンタがオーバーフローしてリセットが発生します。

 

なので、今回この機能を知って下さった方、今後突然画面が消えて再起動しても、ソフトウェアが
最悪の状態にならないようにしてくれているのだと思って下さい。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

月別アーカイブ

カテゴリ