プロセサの構造と故障検出
故障検出に関して、プロセサの構造を模式的に表すと図2.7のようになる。
プロセサというとデータを加工しているイメージが強いが、図2.7に示すように、データの値を変化させるのは演算器の部分だけで、メモリ、キャッシュ、レジスタファイルのところまでのプロセサのデータパスの大部分はデータの値を変えずに転送やコピーを行うだけである。
演算器の部分は、入力と出力でデータ値が変わるので、エラー検出には二重化比較や乗算器の場合は図2.5に示したモデュロチェックなどが使われる。一方、メモリからレジスタファイルの間のデータの転送部分では、図2.6のようにプレディクタとチェッカに同じユニットを用いるAlgorithmic Checkを用いることができる。
また、プロセサには全体の動きを制御する制御回路が存在するが、この部分は構造が複雑であり、エラー検出は容易ではない。良く用いられるエラー検出法は、ウオッチドッグタイマー(Watchdog Timer)という方法である。この方法では、制御回路のそれぞれの動作(例えば、ある命令の実行)を開始する時点でタイマーを起動し、クロックサイクルごとにカウントアップしていく。そして、その動作が完了すべき最大サイクル数を超えても動作が完了しないと、タイマーがエラーを通知する。すべてのエラーを検出できるわけではないが、制御回路のエラーで動作がハングアップしてしまったようなケースを検出することができる。
制御回路の動きを司る順序回路の状態ビットの中の"1"の個数に規則性(偶数個とか、一定のビット数とか)を持たせる状態割り当てを行い、常にその規則性が成立していることをチェックするという方法も提案されているが、あまり実用に供されてはいないようである。
ウオッチドッグタイマーは別として、制御回路についてはエラー検出を頑張るよりも、エラー発生頻度が高い状態ビットには中性子ヒットに強い回路構成のラッチを使用してエラー発生頻度を減らすなどの対策が実用的である。
このように、一口にプロセサといっても性格の異なる回路ブロックがあり、それぞれの部分の特性に応じて色々なエラー検出方法を組み合わせて用いている。