(57)【要約】【課題】キャッシュメモリにおいてデータに障害が発生した場合でも動作を継続させることができ、コストを低減しつつ信頼性を向上させることができる計算機を提供する。【解決手段】演算処理部１５７が、キャッシュメモリに記憶された実行情報をバックアップバッファ１５６に保存した後に、実行情報を用いて演算処理を実行し、エラー検出部１５４が、演算処理の実行中にキャッシュメモリから読み出される読出データに障害があるかを判定し、例外処理部１５５が、読出データに障害があると判定された場合に障害がある読出データがライトバック方式で記憶されているかを判定し、再演算管理部１５７が、読出データがライトバック方式で記憶されていると判定された場合に、キャッシュメモリを初期化するとともにバックアップバッファ１５６からキャッシュメモリに実行情報を読み出し、実行情報に基づいて演算処理を再実行する。【選択図】図５
2015176153.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）とメインメモリとを備える計算機において、
前記ＣＰＵは、演算処理の実行に用いる実行情報を記憶するキャッシュメモリを備え、
前記キャッシュメモリに記憶された前記実行情報を前記メインメモリにバックアップ情報として保存した後に、前記実行情報を用いて前記演算処理を前記ＣＰＵにより実行する演算処理部と、
前記演算処理の実行中に、前記ＣＰＵにより前記キャッシュメモリから読み出される読出データに障害があるかを判定する障害検出部と、
前記読出データに障害があると判定された場合、前記演算処理の実行を停止するとともに、前記障害がある読出データに対応する対応データが前記メインメモリに記憶されているかを判定する障害処理部と、
前記対応データが前記メインメモリに記憶されていないと判定された場合に、前記キャッシュメモリを初期化するとともに前記演算処理部により前記メインメモリに保存された前記バックアップ情報を前記実行情報として前記キャッシュメモリに読み出し、読み出した前記実行情報に基づいて前記演算処理を実行する再演算管理部と
を備えることを特徴とする計算機。
【請求項２】
前記障害処理部は、
前記読出データに障害があると判定された場合、前記障害がマルチビットエラーであるかを判定し、前記障害がマルチビットエラーであると判定した場合、前記障害がある読出データに対応する対応データが前記メインメモリに記憶されているか否かを判定することを特徴とする請求項１に記載の計算機。
【請求項３】
前記障害処理部は、前記障害がマルチビットエラーであると判定した場合、前記障害がある読出データがライトバック方式で記憶されたデータであるかを判定し、前記障害がある読出データがライトバック方式で記憶されたデータである場合に、前記対応データが前記メインメモリに記憶されていると判定することを特徴とする請求項２に記載の計算機。
【請求項４】
前記演算処理部は、
前記演算処理を複数に分割した複数の部分演算処理を順次実行し、
前記キャッシュメモリは、
前記複数の部分演算処理の各部分演算処理の実行に用いる前記実行情報を記憶し、
前記演算処理部は、
前記キャッシュメモリに記憶された前記実行情報を前記メインメモリにバックアップ情報として保存した後に、前記実行情報に基づいて前記ＣＰＵを用いて前記複数の部分演算処理の各部分演算処理を実行し、
前記障害検出部は、
前記複数の部分演算処理の各部分演算処理の実行中に前記ＣＰＵが前記キャッシュメモリから読み出す読出データに障害があるかを判定し、
前記再演算管理部は、
前記対応データが前記メインメモリに記憶されていないと判定された場合に、前記バックアップ情報を前記キャッシュメモリに前記実行情報として読みだし、読み出した前記実行情報に基づいて前記複数の部分演算処理の各部分演算処理を実行することを特徴とする請求項１〜３のいずれかに記載の計算機。
【請求項５】
前記複数の部分演算処理の各部分演算処理が終了したか否かを示す終了フラグ情報を備えることを特徴とする請求項４に記載の計算機。
【請求項６】
前記対応データが前記メインメモリに記憶されていないと判定された場合に、前記演算処理の処理負荷よりも小さい処理負荷の軽量演算処理を実行する軽量演算処理部をさらに備え、
前記演算処理部は、
前記軽量演算処理部による前記軽量演算処理の実行が完了した後に、前記バックアップ情報を前記実行情報として前記キャッシュメモリに読み出し、読み出した前記実行情報に基づいて前記演算処理を実行することを特徴とする請求項１〜５のいずれかに記載の計算機。
【請求項７】
前記演算処理部により実行された前記演算処理の演算結果を記憶する演算結果バッファと、
前記演算結果バッファに記憶された前記演算結果を出力情報として出力する出力処理部と、
前記出力処理部から出力された前記出力情報を記憶する過去値バッファと、
前記演算処理部による前記演算処理の実行が終了すると、前記過去値バッファに記憶されている前記出力情報に基づいて、前記演算処理の次に実行する次演算処理の演算結果を予測値として算出する演算結果予測部と、
前記演算結果予測部により算出された前記予測値を記憶する予測値バッファと
を備え、
前記出力処理部は、
前記演算結果バッファに前記出力情報が存在しない場合に、前記予測値バッファに記憶された前記予測値を前記出力情報として出力することを特徴とする請求項１〜６のいずれかに記載の計算機。
【請求項８】
演算処理の実行に用いる実行情報を記憶するキャッシュメモリを備えるＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）と、メインメモリとを備える計算機の障害処理方法において、
演算処理部が、前記キャッシュメモリに記憶された前記実行情報をバックアップ情報として前記メインメモリに保存した後に、前記実行情報を用いて前記演算処理を前記ＣＰＵにより実行し、
障害検出部が、前記演算処理の実行中に、前記ＣＰＵにより前記キャッシュメモリから読み出される読出データに障害があるか否かを判定し、
障害処理部が、前記読出データに障害があると判定された場合、前記演算処理の実行を停止するとともに、前記障害がある読出データに対応する対応データが前記メインメモリに記憶されているか否かを判定し、
再演算管理部が、前記対応データが前記メインメモリに記憶されていないと判定された場合に、前記キャッシュメモリを初期化するとともに前記演算処理部により前記メインメモリに保存された前記バックアップ情報を前記実行情報として前記キャッシュメモリに読み出し、読み出した前記実行情報に基づいて前記演算処理を実行することを特徴とする障害処理方法。
【請求項９】
演算処理の実行に用いる実行情報を記憶するキャッシュメモリを備えるＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）と、メインメモリとを備える計算機のプログラムにおいて、
前記キャッシュメモリに記憶された前記実行情報をバックアップ情報として前記メインメモリに保存した後に、前記キャッシュメモリに記憶された前記実行情報を用いて前記演算処理を前記ＣＰＵにより実行する演算実行処理と、
前記演算処理の実行中に、前記ＣＰＵにより前記キャッシュメモリから読み出される読出データに障害があるかを判定する障害検出処理と、
前記読出データに障害があると判定された場合、前記演算処理の実行を停止するとともに、前記障害がある読出データに対応する対応データが前記メインメモリに記憶されているか否かを判定するデータ判定処理と、
前記対応データが前記メインメモリに記憶されていないと判定された場合に、前記キャッシュメモリを初期化するとともに前記演算処理部により前記メインメモリに保存された前記バックアップ情報を前記実行情報として前記キャッシュメモリに読み出し、読み出した前記実行情報に基づいて前記演算処理を実行する再演算処理とをコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機、障害処理方法及びプログラムに関する。特に、規定実行周期で処理が周期実行される計算機と、この計算機における障害処理方法及びプログラムに関する。
【背景技術】
【０００２】
計算機では、計算機中に使用されている集積回路の何らかの異常動作により、計算機自体の誤動作を引き起こすことがある。このような障害のうち、集積回路の物理的な破損などを原因とする障害をハードエラーと呼び、アルファ線の衝突等により集積回路のセルの電荷量に発生する乱れなどに起因する一過性の障害をソフトエラーと呼ぶ。
ソフトエラーに対して、計算機の信頼性を確保するために、ＥＣＣ（Ｅｒｒｏｒ・Ｃｈｅｃｋ・ａｎｄ・Ｃｏｒｒｅｃｔ）機能を持ったメインメモリやキャッシュメモリが用いられている。ＥＣＣ機能は、メモリセルに生じたメモリエラーの検出及び訂正を行なう機能であり、一般にシングルビットエラーの検出及び訂正、マルチビットエラーの検出が可能である。
【０００３】
しかし近年、集積回路の微細化が飛躍的に進んでおり、アルファ線の１回の衝突で、集積回路の複数のセルが影響を受ける可能性が増加している。ＥＣＣ機能では、複数のビットにわたってエラーが発生するマルチビットエラーを訂正することはできないため、マルチビットエラーを含むソフトエラーへの対処方法が求められている。
【０００４】
キャッシュメモリの動作方式には、ライトスルーとライトバックの２通りがある。ライトスルーは、ＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）からメインメモリへ書き込みアクセスが行われる際に、キャッシュメモリへのデータの書き込みと同時に、メインメモリに対しても同一内容のデータを書き込む方式である。ライトバックは、ＣＰＵからメインメモリへ書き込みアクセスが行われる際に、キャッシュメモリに対してのみ書き込みを行ない、キャッシュメモリに格納されているデータの入れ替えが発生する際などに、メインメモリに対して書き込みが行なわれる。
ライトスルーでは、キャッシュメモリに存在するデータは、メインメモリにも必ず存在する。よって、キャッシュメモリのデータが破損した場合は、メインメモリに存在する同一のデータを読み出して復旧することが可能である。
【０００５】
特許文献１では、キャッシュメモリをライトスルーとして扱うことで、メインメモリからのデータの再読み出しを可能としている。しかし、特許文献１の方法では、キャッシュメモリでのソフトエラー発生時にメインメモリからデータを再読み出しすることができるのは、キャッシュメモリをライトスルーとしている領域のデータのみであり、それ以外領域のデータはソフトエラーから保護することができない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−２３７７３９号公報
【特許文献２】特開２０００−２２２２３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１の課題に対して、高い信頼性が要求される産業用計算機では、メインメモリの全ての領域をライトスルーで読み書きを行なうようにすることで、ソフトエラーに対処する例がある。しかし、メインメモリへの読み書きは、ＣＰＵの処理速度に比べて非常に低速であり、メインメモリへの書き込み完了を待たなければならないライトスルーは、ＣＰＵの能力を有効に活用することができず、ＣＰＵのスループットが低下する傾向がある。
この傾向はメモリバスを共有するＣＰＵコアが増えるほど顕著であり、マルチコアＣＰＵによる計算機の高性能化、高機能化を進める際に問題となる。
【０００８】
キャッシュメモリをライトバックで扱うことで、ライトスルーのときに比べてＣＰＵのスループットは向上するが、ソフトエラー発生時にメインメモリからキャッシュメモリへのデータの再読み込みができなくなるため、計算機の動作の信頼性を確保できなくなり、最悪の場合計算機の動作を継続できなくなるという課題がある。
産業用計算機では、外部に接続された機器に対して周期的に制御情報を出力し続ける必要があり、ソフトエラーによる計算機の停止は避けなければならない。また、産業用計算機では、外部機器を制御するための制御情報を規定された実行周期内に演算しており、当該制御情報の欠落や異常値は、外部に接続された機器の異常動作を引き起こす危険がある。
なお、ここで述べる産業用計算機とは、外部に接続された機器を直接操作するコントローラ、このコントローラを監視し制御する計算機など、一般にプラントで使用される計算機を指す。
【課題を解決するための手段】
【０００９】
本発明に係る計算機は、ＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）とメインメモリとを備える計算機において、
前記ＣＰＵは、演算処理の実行に用いる実行情報を記憶するキャッシュメモリを備え、
前記キャッシュメモリに記憶された前記実行情報を前記メインメモリにバックアップ情報として保存した後に、前記実行情報を用いて前記演算処理を前記ＣＰＵにより実行する演算処理部と、
前記演算処理の実行中に、前記ＣＰＵにより前記キャッシュメモリから読み出される読出データに障害があるか否かを判定する障害検出部と、
前記読出データに障害があると判定された場合、前記演算処理の実行を停止するとともに、前記障害がある読出データに対応する対応データが前記メインメモリに記憶されているか否かを判定する障害処理部と、
前記対応データが前記メインメモリに記憶されていないと判定された場合に、前記キャッシュメモリを初期化するとともに前記演算処理部により前記メインメモリに保存された前記バックアップ情報を前記実行情報として前記キャッシュメモリに読み出し、読み出した前記実行情報に基づいて前記演算処理を実行する再演算管理部とを備えることを特徴とする。
【発明の効果】
【００１０】
本発明に係る計算機によれば、演算処理部が、キャッシュメモリに記憶された実行情報をメインメモリにバックアップ情報として保存した後に、実行情報を用いて演算処理をＣＰＵにより実行し、障害検出部が、演算処理の実行中に、ＣＰＵによりキャッシュメモリから読み出される読出データに障害があるか否かを判定し、障害処理部が、読出データに障害があると判定された場合、演算処理の実行を停止するとともに、障害がある読出データに対応する対応データがメインメモリに記憶されているか否かを判定し、再演算管理部が、対応データがメインメモリに記憶されていないと判定された場合に、キャッシュメモリを初期化するとともにメインメモリに保存されたバックアップ情報を実行情報としてキャッシュメモリに読み出し、読み出した実行情報に基づいて演算処理を再実行するので、キャッシュメモリにおいてデータに障害が発生した場合でも、ハードウェアを追加することなく、計算機の動作を継続させることができ、コストを低減しつつ信頼性を向上させることができる。
【図面の簡単な説明】
【００１１】
【図１】実施の形態１で説明する計算機１００，１００ａの構成の一例を示す図である。
【図２】実施の形態１で説明する計算機１００，１００ａの周期実行の動作の一例を示す図である。
【図３】比較のための計算機１００ａのブロック構成の一例を示す図である。
【図４】比較のための計算機１００ａのエラー検出処理（工程）の動作の一例を示すフローチャートである。
【図５】実施の形態１に係る計算機１００のブロック構成の一例を示す図である。
【図６】実施の形態１に係る計算機１００の周期処理（工程）の一例を示すフローチャートである。
【図７】実施の形態１に係る計算機１００の障害対応方法における障害対応処理（工程）の一例を示すフローチャートである。
【図８】実施の形態１に係る計算機１００のハードウェア構成の一例を示す図である。
【図９】実施の形態２に係る計算機１０１のブロック構成の一例を示す図である。
【図１０】実施の形態２に係る計算機１０１の周期処理（工程）の一例を示すフローチャートである。
【図１１】実施の形態２に係る計算機１０１の障害対応方法における障害対応処理（工程）の一例を示すフローチャートである。
【図１２】実施の形態３に係る計算機１０２のブロック構成の一例を示す図である。
【図１３】実施の形態３に係る計算機１０２の周期処理（工程）の一例を示すフローチャートである。
【図１４】実施の形態３に係る計算機１０２の障害対応方法における障害対応処理（工程）の一例を示すフローチャートである。
【図１５】実施の形態４に係る計算機１０３のブロック構成の一例を示す図である。
【図１６】実施の形態４に係る計算機１０３の周期処理（工程）の一例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
実施の形態１．
図１は、本実施の形態で説明する計算機１００，１００ａの構成の一例を示す図である。図１を用いて、本実施の形態で説明する計算機１００，１００ａの構成について説明する。計算機１００は本実施の形態に係るであり、計算機１００ａは計算機１００と比較するためのものである。
計算機１００，１００ａは、外部に制御対象である外部機器２００が接続される。
計算機１００，１００ａは、入力ポート１１０、ＣＰＵ１２０、メインメモリ１３０、出力ポート１４０を備える。ＣＰＵ１２０は、キャッシュメモリ１２１を備える。
【００１３】
外部機器２００は、例えば、計算機１００，１００ａが発電プラントで用いるコントローラなどの機器であれば、タービン発電機などである。なお、外部機器２００は計算機１００，１００ａと通信を行い、計算機１００，１００ａから操作される機器であれば、タービン発電機に限定しない。
【００１４】
キャッシュメモリ１２１は、ＥＣＣ機能を備える。ＥＣＣ機能は、キャッシュメモリ１２１においてソフトエラーの発生したキャッシュラインを特定し、特定したキャッシュラインに対応するメインメモリ１３０のデータのアドレスを特定することができる。また、ＥＣＣ機能は、シングルビットエラーの検出及び訂正、マルチビットエラーの検出をすることができる。
【００１５】
計算機１００，１００ａと外部機器２００とは、情報通信可能な状態で接続されており、相互にデータを送受信可能である。外部機器２００は、この外部機器２００の動作状況、この外部機器２００の周辺状況をセンサ機器などによって取得する。そして、外部機器２００は、このセンサで取得した情報（以後、センサ情報と記述）を計算機１００，１００ａに送信する。
【００１６】
入力ポート１１０は、外部機器２００から送られたセンサ情報等のデータをメインメモリ１３０に保存する。
計算機１００，１００ａのＣＰＵ１２０では、外部機器２００から取得したセンサ情報や、計算機１００，１００ａの操作者からの操作情報などから、外部機器２００を制御するための制御情報（以後、制御情報と記述）を演算し、その演算結果を出力ポート１４０を介して外部機器２００へ送信する。
【００１７】
図２は、本実施の形態に係る計算機１００，１００ａの周期実行の動作の一例を示す図である。
計算機１００，１００ａでは、外部機器２００の動作を制御するためのプログラムが動作している。産業用計算機では規定実行周期以内で規定された処理を実行し、それを周期毎に繰り返す方式が一般的である。図２を用いて、このような周期実行がなされる計算機１００，１００ａの動作例を説明する。
【００１８】
図２は、計算機１００，１００ａで実行されているプログラムの動作を時系列で示したものである。図２の動作例では、規定された実行周期以内に、（１）入出力処理、（２）演算処理、（３）その他の処理が実行されている。実行周期は、例えば、５０ｍｓｅｃである。
【００１９】
（１）の入出力処理は、計算機１００，１００ａと外部機器２００との間で通信を行う処理であり、少なくとも、外部機器２００から計算機１００，１００ａに対してセンサ情報が送られる入力処理と、計算機１００，１００ａから外部機器２００に対して制御情報が送られる出力処理とが実行される。出力処理で外部機器２００に対して出力される制御情報は、前の実行周期にて演算されたものである。入出力処理の中で、前記入力処理と前記出力処理のどちらが先に実行されるかは、特に限定しない。
【００２０】
（２）の演算処理では、センサ情報や、計算機操作者からの操作情報を元に制御情報を演算する。この演算処理で演算された制御情報は、次の演算周期以降の入出力処理により外部機器２００に対して出力される。
【００２１】
（３）のその他の処理は、入出力処理、演算処理と比べると優先度の低い処理であり、実行周期の制限を受けない処理などが該当し、実行周期以内に処理が完了しない場合は、処理内容を分割し、複数の実行周期にわたって処理が実行される。
【００２２】
計算機１００，１００ａでは、キャッシュメモリ１２１上のデータがマルチビットエラーで破損した際に、メインメモリ１３０から同一のデータを読み出し、破損したデータを訂正できるようにしている。この方式を用いるためには、キャッシュメモリ１２１が持っているデータが、メインメモリ１３０にも存在している必要があり、メインメモリの全ての領域をライトスルーで扱う必要がある。ライトスルーとは、ＣＰＵ１２０がメインメモリ１３０に対してデータの読み書きを行なうときの方式であり、ＣＰＵ１２０がデータの書き込みを行なう際には、キャッシュメモリ１２１とメインメモリ１３０とに対して、同じデータが同時に書き込まれる方式である。
【００２３】
図３は、比較のための計算機１００ａの機能ブロックの一例を示す図である。
図３に示すように、計算機１００ａは、演算処理部１５１、入力処理部１５２、出力処理部１５３、エラー検出部１５４、例外処理部１５５を備える。
図３では、計算機１００の演算処理機能と、ソフトエラーが発生した際のエラー処理に関する機能とを示している。
【００２４】
演算処理部１５１は、ＣＰＵ１２０を用いて、外部機器２００へ出力するための制御情報を演算する。
入力処理部１５２は、入力ポート１１０を用いて、外部機器２００からのセンサ情報を取得し、センサ情報を演算処理部１５１から参照可能な状態にする。
出力処理部１５３は、出力ポート１４０を用いて、外部機器２００に対して、演算処理部１５１で演算された制御情報を出力する。
【００２５】
エラー検出部１５４は、ＣＰＵ１２０がキャッシュメモリ１２１に対して読み出しを行なった際に、ＥＣＣ機能によって、キャッシュメモリ１２１にソフトエラーが発生していないかを確認する。エラー検出部１５４は、ＥＣＣ機能により、キャッシュメモリ１２１にソフトエラーが発生しており、更にそれがシングルビットエラーであった場合は、シングルビットエラーを訂正する。また、エラー検出部１５４は、ＥＣＣ機能により、キャッシュメモリ１２１に発生したソフトエラーがマルチビットエラーであった場合は、ＣＰＵ１２０に対して割込みを通知する。エラー検出部１５４は、ＥＣＣ機能により、当該割込みに対応して呼び出されるハンドラ（プログラム）に対して、マルチビットエラーが発生したキャッシュラインと、当該キャッシュラインに対応するメインメモリのアドレスとを渡す。
エラー検出部１５４は、演算処理の実行中に、ＣＰＵによりキャッシュメモリ１２１から読み出される読出データにエラー（障害）があるか否かを判定する障害検出部の一例である。
【００２６】
例外処理部１５５は、エラー検出部１５４が通知した割込みに対応して呼び出されるハンドラである。例外処理部１５５は、マルチビットエラーが発生したキャッシュラインを無効化する。あるいは、例外処理部１５５は、マルチビットエラーが発生したキャッシュラインに対応するメインメモリのアドレスからデータを読み出す。例外処理部１５５は、マルチビットエラーが発生したキャッシュラインを無効化し、マルチビットエラーが発生したキャッシュラインに対応するメインメモリのアドレスからデータを読み出すことで、マルチビットエラーを訂正する。
【００２７】
図４は、比較のための計算機１００ａのエラー検出処理（工程）の動作の一例を示すフローチャートである。
図４を用いて、計算機１００ａのエラー検出処理（工程）における各部の動作について説明する。計算機１００ａのエラー検出処理（工程）は、計算機１００ａの各部が計算機１００ａの備えるＣＰＵ、入出力ポート、メモリなどのハードウェア資源と協働して処理を実行することにより実現される。
【００２８】
エラー検出処理は、ＣＰＵ１２０がキャッシュメモリ１２１のデータの読み出しを行なう際の処理である。
Ｓ１０１において、ＣＰＵ１２０がデータの読み出しを要求する。
【００２９】
Ｓ１０２において、エラー検出部１５４は、ＥＣＣ機能を用いて、読み出し対象のキャッシュメモリ１２１のキャッシュラインをチェックする。
Ｓ１０３においてエラー検出部１５４がキャッシュメモリ１２１にソフトエラーが発生していないと判定した場合（Ｓ１０３でＮＯ）、ＣＰＵ１２０は、キャッシュメモリ１２１のデータを読み出す。
Ｓ１０３においてエラー検出部１５４がキャッシュメモリ１２１にソフトエラーが発生していると判定した場合（Ｓ１０３でＹＥＳ）、Ｓ１０４に進む。
【００３０】
Ｓ１０４において、エラー検出部１５４は、キャッシュメモリに発生したソフトエラーはシングルビットエラーか、マルチビットエラーかを判定する。
ソフトエラーがシングルビットエラーであった場合（Ｓ１０４でＮＯ）は、エラー検出部１５４は、ＥＣＣ機能によりシングルビットエラーによって破損したデータを訂正する（Ｓ１０６）。
ソフトエラーがマルチビットエラーであった場合（Ｓ１０４でＹＥＳ）、Ｓ１０５に進む。
【００３１】
Ｓ１０５において、エラー検出部１５４は、ＥＣＣ機能により、ＣＰＵ１２０に割込みを実行することにより、例外処理部１５５を呼び出す。エラー検出部１５４は、ＥＣＣ機能により、当該割込みに対応して呼び出されるハンドラ（例外処理部１５５）に対して、マルチビットエラーが発生したキャッシュラインと、当該キャッシュラインに対応するメインメモリ１３０のアドレスとを渡す。
【００３２】
Ｓ１０７において、例外処理部１５５は、マルチビットエラーによって破損したデータのキャッシュラインを無効化する。この処理により、ＣＰＵ１２０が読み出しを要求したキャッシュメモリのデータが無効化される。
Ｓ１０８において、例外処理部１５５は、無効化したキャッシュラインに対応するメインメモリ１３０のアドレスに基づいて、無効化したキャッシュラインに対応するメインメモリ１３０のデータを、メインメモリ１３０からキャッシュメモリ１２１に読み出し（ロードし）、ＣＰＵ１２０はキャッシュメモリ１２１のデータを読み出す。
以上で、比較のための計算機１００ａのエラー検出処理（工程）を終了する。
【００３３】
以上のように、比較のための計算機１００ａは、メインメモリ１３０の全ての領域をライトスルーで扱うものである。
本実施の形態に係る計算機１００では、キャッシュメモリ１２１のデータが破損した場合、計算機１００の動作に支障が出るデータなどをライトスルーで扱い、ライトスルーで保護している領域のデータから再計算可能なデータをライトスルーで扱う。
【００３４】
具体的には、本実施の形態に係る計算機１００では、メインメモリ１３０の領域のうち、命令コードのような破損すると計算機の動作に支障の出るデータ、センサ情報などの外部機器から取得したデータ、外部機器との通信に使用するデータ、プログラム実行時に使用するグローバル変数、演算処理で求めた制御情報などのデータなどを記憶する領域をライトスルーで扱う。
また、本実施の形態に係る計算機１００では、メインメモリ１３０の領域のうち、キャッシュメモリ１２１の演算処理中に使用するスタック領域やヒープ領域、計算途中にデータを保存するバッファなどに対応する領域はライトバックで扱う。
【００３５】
ライトスルーで扱うメモリ領域と、ライトバックで扱うメモリ領域とは、明示的に分割されている。このため、キャッシュメモリ１２１に保存されているデータが、メインメモリ１３０上でライトスルーのメモリ領域と、ライトバックのメモリ領域のどちらに属するかを判定することができるものとする。
【００３６】
図５は、本実施の形態に係る計算機１００のブロック構成の一例を示す図である。
図５は、本実施の形態に係る計算機１００の演算処理機能と、ソフトエラーが発生した際のエラー処理に関する機能を示したブロック図である。図５に示す計算機１００では、図３で説明した計算機１００ａのブロック構成に加えて、バックアップバッファ１５６、再演算管理部１５７を備える。
【００３７】
バックアップバッファ１５６は、演算処理部１５１による演算処理（図２参照）の初期状態を保存するためのバッファであり、ライトスルーで読み書きを行う。
演算処理部１５１は、処理開始直後の時点ｔ１（図２参照）で、演算処理部１５１のスタックフレーム及びスタックフレームのアドレスをバックアップバッファ１５６へ保存する。このスタックフレームには、演算処理部１５１完了後の戻り先命令アドレス、演算処理部１５１が受け取る引数、演算処理部１５１内で使用するローカル変数や一時変数が含まれる。また、演算処理中で変更を行なうグローバル変数についても、バックアップバッファ１５６への保存を行なう。
【００３８】
再演算管理部１５７は、演算処理部１５１による演算処理の実行中にライトバックで扱っているメモリ領域でマルチビットエラーが起きた際に呼び出される。再演算管理部１５７は、演算処理の途中演算結果や演算処理開始以降に積み上げられたスタックフレームを破棄する。そして、再演算管理部１５７は、バックアップバッファ１５６に保存された演算処理開始時のスタックフレーム及びグローバル変数を読み出し、演算処理を最初から再実行させる。
【００３９】
図６は、本実施の形態に係る計算機１００の周期処理の流れの一例を示すフローチャートである。図６を用いて、計算機１００の周期処理について説明する。
【００４０】
Ｓ２０１において、計算機１００は、外部機器２００からセンサ情報を取得する（入力処理）。取得したセンサ情報は、ライトスルーのメモリ領域に保存される。すなわち、キャッシュメモリ１２１に記憶されるとともにメインメモリ１３０のライトスルーのメモリ領域に記憶される。
Ｓ２０２において、計算機１００は、前の周期の周期処理の実行中に演算された制御情報を、外部機器２００に対して出力する（出力処理）。
【００４１】
出力処理が完了すると、Ｓ２０３において、計算機１００は演算処理を開始する。演算処理の最初の段階では、演算処理の実行に用いられる、演算処理開始時のスタックフレーム、スタックフレームのアドレス、グローバル変数などの実行情報１５６１がキャッシュメモリ１２１に記憶されている。
【００４２】
Ｓ２０４において、演算処理部１５１は、演算処理の最初の段階で、演算処理開始時のスタックフレーム、スタックフレームのアドレス、グローバル変数をバックアップバッファ１５６へ保存する。なお、保存するスタックフレームは、演算処理の関数のもののみであり、それ以前に積まれているスタックフレームは保存する必要はない。ここで、バックアップバッファ１５６に保存する情報を実行情報１５６１とする。実行情報１５６１は、バックアップバッファ１５６にバックアップ情報として保存される。
【００４３】
計算機１００は、バックアップバッファ１５６はライトスルーで扱う。すなわち、演算処理部１５１は、スタックフレーム、スタックフレームのアドレス、グローバル変数を、キャッシュメモリ１２１に記憶するとともにメインメモリ１３０のライトスルーのメモリ領域に記憶する。
このとき、バックアップバッファ１５６のデータにソフトエラーが発生した場合には、エラー検出部１５４は比較のための計算機１００ａのエラー検出処理で示した方法によってデータの訂正をする。
【００４４】
Ｓ２０５において、演算処理部１５１は、センサ情報等から制御情報を算出するための演算処理を開始する。演算処理部１５１は、この演算処理の実行中において使用するスタック領域やヒープ領域、計算途中にデータを保存するバッファなどに対応する領域はライトバックで扱う。
【００４５】
Ｓ２０６において、演算処理部１５１は、演算処理により制御情報を算出すると、算出した制御情報をライトスルーのメモリ領域に保存する。すなわち、演算処理部１５１は、算出した制御情報を、キャッシュメモリ１２１に記憶するとともにメインメモリ１３０のライトスルーのメモリ領域に記憶する。また、演算処理部１５１は、キャッシュメモリ１２１に保存されているライトバック方式により扱われたデータを、メインメモリ１３０のライトバックのメモリ領域に書き戻す。
【００４６】
Ｓ２０７において、演算処理部１５１は、演算処理を終了する。
Ｓ２０８において、計算機１００は、その他の処理を実行し、その他の処理の実行が終了した時点で１周期の処理が終了となる。
【００４７】
図７は、本実施の形態に係る計算機１００の障害対応方法における障害対応処理（工程）の一例を示すフローチャートである。
図７を用いて、計算機１００の障害対応処理（工程）における各部の動作について説明する。計算機１００の障害対応処理（工程）は、計算機１００の各部が計算機１００の備えるＣＰＵ、入出力ポート、メモリなどのハードウェア資源と協働して処理を実行することにより実現される。
【００４８】
障害対応処理は、キャッシュメモリ１２１でソフトエラーが発生したときの動作の一例である。図７は、本実施の形態において、例えば、ＣＰＵ１２０がキャッシュメモリ１２１のデータの読み出しを行なう場合の動作フローである。
【００４９】
Ｓ３０１において、ＣＰＵ１２０がデータの読み出しを要求する。
Ｓ３０２において、エラー検出部１５４は、ＥＣＣ機能を用いて、読み出し対象のキャッシュメモリ１２１のキャッシュラインをチェックする。
【００５０】
Ｓ３０３においてエラー検出部１５４がキャッシュメモリ１２１にソフトエラーが発生していないと判定した場合（Ｓ３０３でＮＯ）、障害対応処理を終了し、ＣＰＵ１２０は、キャッシュメモリ１２１のデータを読み出す。
Ｓ３０３においてエラー検出部１５４がキャッシュメモリ１２１にソフトエラーが発生していると判定した場合（Ｓ３０３でＹＥＳ）、Ｓ３０４に進む。
【００５１】
Ｓ３０４において、エラー検出部１５４は、キャッシュメモリに発生したソフトエラーはシングルビットエラーか、マルチビットエラーかを判定する。
ソフトエラーがシングルビットエラーであった場合（Ｓ３０４でＮＯ）は、エラー検出部１５４は、ＥＣＣ機能によりシングルビットエラーによって破損したデータを訂正する（Ｓ３０７）。その後、障害対応処理を終了する。
【００５２】
ソフトエラーがマルチビットエラーであった場合（Ｓ３０４でＹＥＳ）、Ｓ３０５に進む。
Ｓ３０５において、エラー検出部１５４は、ＥＣＣ機能により、ＣＰＵ１２０に割込みを実行することにより、例外処理部１５５を呼び出す。エラー検出部１５４は、ＥＣＣ機能により、当該割込みに対応して呼び出されるハンドラ（例外処理部１５５）に対して、マルチビットエラーが発生したキャッシュラインと、当該キャッシュラインに対応するメインメモリ１３０のアドレスとを渡す。マルチビットエラーが発生したキャッシュラインと、当該キャッシュラインに対応するメインメモリ１３０のアドレスとを含む情報は障害信号の一例である。
【００５３】
Ｓ３０６において、例外処理部１５５は、マルチビットエラーが発生したキャッシュラインが、メインメモリ１３０において、ライトバックで扱うメモリ領域か、ライトスルーで扱うメモリ領域かを判定する。
【００５４】
例外処理部１５５は、キャッシュメモリ１２１から読み出されたキャッシュライン（読出データ）にエラー（障害）があると判定された場合、エラーがあるキャッシュラインに対応する対応データがメインメモリ１３０に記憶されているか否かを判定する障害処理部の一例である。例外処理部１５５は、すなわち、キャッシュライン（読出データ）がライトバック方式で記憶されているか、あるいは、ライトスルー方式で記憶されているかを判定する。このとき、演算処理部１５１の動作は停止する。演算処理部１５１の動作を停止するのは、エラー検出部１５４でもよいし、例外処理部１５５でもよい。
【００５５】
マルチビットエラーが発生したキャッシュラインがライトスルーで扱うメモリ領域に対応している場合（Ｓ３０６でＮＯ）、Ｓ３０９に進む。
Ｓ３０９において、例外処理部１５５は、マルチビットエラーによって破損したデータのキャッシュラインを無効化する。この処理により、ＣＰＵ１２０が読み出しを要求したキャッシュメモリのデータが無効化される。
Ｓ３１０において、例外処理部１５５は、障害信号に基づいて、無効化したキャッシュラインに対応するメインメモリ１３０のアドレスを取得する。例外処理部１５５は、取得したアドレスから、無効化したキャッシュラインに対応するメインメモリ１３０のデータをキャッシュメモリ１２１に読み出す（ロードする）。以上で、障害対応処理を終了し、ＣＰＵ１２０はキャッシュメモリ１２１のデータを読み出す。
【００５６】
マルチビットエラーが発生したキャッシュラインがライトスバックで扱うメモリ領域に対応している場合（Ｓ３０６でＹＥＳ）、Ｓ３０８に進む。
【００５７】
Ｓ３０８において、例外処理部１５５は、ＣＰＵ１２０に割込みを実行することにより、再演算管理部１５７を呼び出す。
【００５８】
Ｓ３１１において、再演算管理部１５７は、キャッシュメモリ１２１上の全データを無効化する。
Ｓ３１２において、再演算管理部１５７は、演算処理の最初の段階でバックアップバッファ１５６に保存した実行情報を読み出す（図６のＳ２０４参照）。
再演算管理部１５７は、バックアップバッファ１５６に保存されているスタックフレームのアドレスから演算処理開始時のスタックフレームの位置を確認し、バックアップバッファ１５６に保存されているスタックフレームのデータを読み出して上書きする。また、プログラム中で使用するグローバル変数についても、バックアップバッファ１５６に保存されているデータへロールバックする。その後、演算処理の最初から演算を再実行させる。
【００５９】
このように、再演算管理部１５７は、読出データ（対応データ）がメインメモリ１３０に記憶されていないと判定された場合に、キャッシュメモリ１２１を初期化するとともにバックアップバッファ１５６に保存された実行情報１５６１を前記キャッシュメモリに読み出し、読み出した実行情報１５６１に基づいて演算処理を再実行する。
以上で、計算機１００の障害対応処理（工程）を終了する。
【００６０】
図８は、本実施の形態に係る計算機１００，１００ａのハードウェア構成の一例を示す図である。図８を用いて、計算機１００のハードウェア構成例について説明する。
【００６１】
計算機１００，１００ａは、各構成要素をプログラムで実現することができる。
【００６２】
計算機１００，１００ａのハードウェア構成としては、バスに、演算装置９０１、外部記憶装置９０２、主記憶装置９０３、通信装置９０４、入出力装置９０５が接続されている。
図１のＣＰＵ１２０は演算装置９０１の一例である。メインメモリ１３０は外部記憶装置９０２、主記憶装置９０３の一例である。入力ポート１１０、出力ポート１４０は入出力装置９０５の一例である。
【００６３】
外部記憶装置９０２は、例えばＲＯＭ（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）やフラッシュメモリ、ハードディスク装置である。主記憶装置９０３は、ＲＡＭ（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）である。
【００６４】
通信装置９０４は、例えば通信ボード等であり、ＬＡＮ（Ｌｏｃａｌ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）等に接続されている。通信装置９０４は、ＬＡＮに限らず、ＩＰ−ＶＰＮ（Ｉｎｔｅｒｎｅｔ・Ｐｒｏｔｏｃｏｌ・Ｖｉｒｔｕａｌ・Ｐｒｉｖａｔｅ・Ｎｅｔｗｏｒｋ）、広域ＬＡＮ、ＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ・Ｔｒａｎｓｆｅｒ・Ｍｏｄｅ）ネットワークといったＷＡＮ（Ｗｉｄｅ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）、あるいは、インターネットに接続されていても構わない。ＬＡＮ、ＷＡＮ、インターネットは、ネットワークの一例である。
【００６５】
プログラムは、通常は外部記憶装置９０２に記憶されており、主記憶装置９０３にロードされた状態で、順次演算装置９０１に読み込まれ、実行される。
プログラムは、図３、図５などのブロック構成図に示す「〜部」として説明している機能を実現するプログラムである。
【００６６】
更に、外部記憶装置９０２にはオペレーティングシステム（ＯＳ）も記憶されており、ＯＳの少なくとも一部が主記憶装置９０３にロードされ、演算装置９０１はＯＳを実行しながら、図３、図５に示す「〜部」の機能を実現するプログラムを実行する。
また、アプリケーションプログラムも外部記憶装置９０２に記憶されており、主記憶装置９０３にロードされた状態で、順次演算装置９０１により実行される。
【００６７】
なお、図８の構成は、あくまでも計算機１００のハードウェア構成の一例を示すものであり、計算機１００のハードウェア構成は図８に記載の構成に限らず、他の構成であっても構わない。
【００６８】
以上のように、本実施の形態に係る計算機１００は、一部の命令やデータについてはキャッシュメモリをライトバックで扱うことで、ＣＰＵのスループット低下を防ぐ。具体的には、ＯＳやプログラムの命令コードや、外部機器から取得したデータなど、当該データがソフトエラーにより破損した場合、計算機の動作が継続できなくなったり、外部機器から取得し直さなければならないものはライトスルーで扱う。ライトスルーで扱うデータから再演算可能なデータに関してはライトバックで扱う。
また、キャッシュメモリでソフトエラーが発生した場合、それがシングルビットエラーであればＥＣＣで訂正を行なう。キャッシュメモリで発生したソフトエラーがマルチビットエラーであり、更にマルチビットエラーの起きたメモリ領域がライトスルーで扱う領域であった場合、エラーの発生したデータをメインメモリからキャッシュメモリへ読み出すことで訂正を行なう。キャッシュメモリで発生したマルチビットエラーがライトバックで扱う領域であった場合、ライトスルーで保護されているデータを再度読み出して、制御情報の演算処理を再実行することで動作を継続させる。
【００６９】
以上のように、本実施の形態に係る計算機１００よれば、マルチビットエラーにより破損すると計算機の動作に支障のあるデータや、外部機器から取得しなければならないデータなどをライトスルーで扱い、ライトスルーで扱うデータから再計算可能なデータをライトバックで扱うことによって、ＣＰＵのスループットを向上させつつも、マルチビットエラーが発生した際の計算機の動作継続性を高めると共に、外部機器の制御情報の出力の欠落を抑制する効果を得ることができる。また、このような効果は、計算機へのハードウェアの追加を必要とせず、ソフトウェアのみで機能の実現が可能であり、コストを低減することができる。
【００７０】
実施の形態２．
本実施の形態では、主に、実施の形態１との差異点について説明する。
本実施の形態において、実施の形態１で説明した構成部と同様の機能を有する構成部には同一の符号を付し、その説明を省略する場合がある。
【００７１】
上述した実施の形態１の演算処理の再実行では、演算処理を最初から実行し直すため、マルチビットエラーが発生する前に演算した処理を再度処理しなければならない。同じ演算を２回処理することは無駄である。このような無駄を削減する方法として、演算処理の実行中に所定時間間隔でＣＰＵのレジスタとキャッシュメモリのデータをバックアップし、ソフトエラー発生時には直前のチェックポイントまでロールバックを行い、再演算処理を効率化する方法がある。
しかし、この方法では、チェックポイントを作成する度にＣＰＵのレジスタとキャッシュメモリのデータをメインメモリへ書き込まなければならない。メインメモリへの書き込みはＣＰＵの動作速度に比べて極めて低速であるため、ＣＰＵに大きな待ち時間が発生し、ＣＰＵのスループットが低下してしまう。
そこで、本実施の形態に係る計算機１０１では、演算処理内の演算内容を複数のステップに分割し、そのステップの間隙にて直前のステップで求められた演算結果をライトスルーのメモリ領域へバックアップする。これにより、キャッシュメモリ全体をバックアップする方式に比べてＣＰＵの待ち時間を短縮することができる。
【００７２】
図９は、本実施の形態に係る計算機１０１のブロック構成の一例を示す図である。
図９では、計算機１０１の演算処理部１５１による演算処理機能と、キャッシュメモリ１２１にソフトエラーが発生した際のエラー処理に関する機能とを示したブロック図である。
【００７３】
図９に示す計算機１０１では、実施の形態１で説明した図５に示した計算機１００の構成に加えて、演算処理部１５１を２つ以上の処理セグメントに分割する。すなわち、演算処理部１５１は、演算処理を複数に分割した複数の処理セグメント（部分演算処理）を順次実行する。
図９に示すように、演算処理部１５１は、処理セグメント（１）１５１１、処理セグメント（２）１５１２、処理セグメント（３）１５１３を備える。また、計算機１０１は、各処理セグメントからの演算結果を格納する演算結果バッファ１５８を備える。
【００７４】
産業用計算機の演算処理では、複数の処理項目を段階的に処理している。例えば、工作機械を制御する計算機であれば、工具の回転速度、工具のＸ軸移動速度、工具のＹ軸移動速度、工具のＺ軸移動速度、工具のピッチ軸回転速度、工具のロール軸回転速度、工具のヨー軸回転速度などが段階的に計算されている。
計算機１０１では、これらの処理項目を、互いに影響しない処理セグメントとして分割し、各処理セグメントでの処理が終了した段階で、各処理セグメントの演算結果を個別に演算結果バッファ１５８へとライトスルーで保存する。
また、各処理セグメントでは、処理セグメントの先頭部分で、当該処理セグメントで使用する変数の初期化、センサ情報等の再読み出しを行なうものとする。
図９では、一例として処理セグメントが３つ存在する場合を示しているが、処理セグメントの数は任意である。
【００７５】
演算結果バッファ１５８は、各処理セグメントでの演算結果以外に、各処理セグメントが完了しているかを示す、処理セグメント完了フラグ１５８１（終了フラグ情報）を持つ。
各処理セグメントでは、処理を完了すると、その処理セグメントでの演算結果を演算結果バッファ１５８に格納するとともに、その処理セグメントの処理セグメント完了フラグをセットする。この処理セグメント完了フラグ１５８１によって、何番目の処理セグメントまで処理が完了しているかが判別可能となる。この演算結果バッファ１５８はライトスルーで扱う。
【００７６】
次に、本実施の形態に係る計算機１０１の動作を説明する。
図１０は、本実施の形態に係る計算機１０１の周期処理（工程）の一例を示すフローチャートである。
【００７７】
図１０は、一例として演算処理部１５１を処理セグメント（１）１５１１、処理セグメント（２）１５１２、及び処理セグメント（３）１５１３の３つの処理セグメントに分割した場合について説明する。
Ｓ４０１の処理は、図６のＳ２０１と同様の処理である。すなわち、入力処理部１５２により入力処理が実行され、外部機器２００からセンサ情報を取得する。取得したセンサ情報はライトスルーのメモリ領域に保存される。
【００７８】
Ｓ４０２の処理は、図６のＳ２０２と同様の処理である。出力処理部１５３により、出力処理が実行され、前の周期処理中に演算された制御情報を、外部機器２００に対して出力する。本実施の形態では、制御情報は演算結果バッファ１５８に格納されている。
【００７９】
Ｓ４０３〜Ｓ４０４の処理は、図６のＳ２０３〜２０４と同様の処理である。
すなわち、出力処理が完了すると、演算処理が開始される。
まず、演算処理部１５１は、処理セグメント（１）１５１１の演算処理を開始する。その演算処理では、その最初の段階で演算処理開始時のスタックフレーム、スタックフレームのアドレス、グローバル変数をバックアップバッファ１５６へ保存する（Ｓ４０４）。なお、保存するスタックフレームは演算処理の関数のもののみであり、それ以前に積まれているスタックフレームは保存する必要はない。バックアップバッファ１５６はライトスルーで扱う。バックアップバッファ１５６のデータにソフトエラーが発生した際は、エラー検出部１５４は比較のための計算機１００ａのエラー検出処理で示した方法によってデータの訂正をする。
【００８０】
次に、センサ情報等から制御情報を算出するための演算が開始される。この演算処理の実行中はライトバックで扱う。
演算処理部１５１では、処理セグメント（１）１５１１から順次処理が実行される。
【００８１】
処理セグメント（１）１５１１による処理が完了すると（Ｓ４０５）、その処理セグメント（１）１５１１での演算結果をライトスルーで演算結果バッファ１５８へ格納する（Ｓ４０６）。
演算結果の格納が終わると、処理セグメント（２）１５１２に処理が移る。
【００８２】
次に、演算処理部１５１は、処理セグメント（２）１５１２の演算処理を開始する。その演算処理の最初の段階で演算処理開始時のスタックフレーム、スタックフレームのアドレス、グローバル変数をバックアップバッファ１５６へ保存する（Ｓ４０７ａ）。
処理セグメント（２）１５１２による処理が完了すると（Ｓ４０７）、その処理セグメント（２）１５１２での演算結果をライトスルーで演算結果バッファ１５８へ格納する（Ｓ４０８）。
演算結果の格納が終わると、処理セグメント（３）１５１３に処理が移る。
【００８３】
次に、演算処理部１５１は、処理セグメント（３）１５１３の演算処理を開始する。その演算処理の最初の段階で演算処理開始時のスタックフレーム、スタックフレームのアドレス、グローバル変数をバックアップバッファ１５６へ保存する（Ｓ４０９ａ）。
処理セグメント（３）１５１３による処理が完了すると（Ｓ４０９）、その処理セグメント（３）１５１３での演算結果をライトスルーで演算結果バッファ１５８へ格納する（Ｓ４１０）。
【００８４】
このように、処理セグメント毎に繰り返される。本実施の形態では、一例として処理セグメントを３つとしているが、処理セグメントの数が４つ以上の場合であっても、上記の処理動作は変わらない。
【００８５】
以上で、処理セグメント（１）１５１１〜処理セグメント（３）１５１３の処理が終了する（Ｓ４１１）。
全ての処理セグメントが処理を完了すると、キャッシュメモリ１２１に保存されているデータを、メインメモリ１３０へ書き戻す。
【００８６】
Ｓ４１２の処理は、Ｓ２０８の処理と同様である。すなわち、計算機１０１は、その他の処理を実行し、その他の処理の実行が終了した時点で１周期の処理が終了となる。
【００８７】
図１１は、本実施の形態に係る計算機１０１の障害対応方法における障害対応処理（工程）の一例を示すフローチャートである。
図１１を用いて、キャッシュメモリ１２１でソフトエラーが発生したときの動作例について説明する。図１１は、本実施の形態に係る計算機１０１において、ＣＰＵ１２０がキャッシュメモリ１２１のデータの読み出しを行なう際の動作フローである。
【００８８】
図１１のＳ５０１から５１１の処理は、図７のＳ３０１からＳ３１１の処理と同様である。以下に、Ｓ５０１から５１１の処理の概要について説明する。
ＣＰＵ１２０がデータの読み出しを要求すると、読み出し対象のキャッシュメモリ１２１のキャッシュラインをＥＣＣがチェックする。
この時、キャッシュメモリにソフトエラーが発生していなければ、ＣＰＵ１２０はキャッシュメモリ１２１のデータを読み出す。
【００８９】
キャッシュメモリにソフトエラーが発生していた場合は、エラー検出部１５４はそのソフトエラーがシングルビットエラーか、マルチビットエラーかの判定を実施する。
当該ソフトエラーがシングルビットエラーであった場合は、ＥＣＣの機能によりシングルビットエラーによって破損したデータを訂正する。
当該ソフトエラーがマルチビットエラーであった場合、ＣＰＵに対して割込みが通知され、例外処理部１５５が割込みハンドラとして呼び出される。
【００９０】
例外処理部１５５は、マルチビットエラーが発生したキャッシュラインが、ライトバックで扱うメモリ領域か、ライトスルーで扱うメモリ領域かを判定する。
マルチビットエラーが発生したキャッシュラインがライトスルーで扱うメモリ領域に対応している場合は、例外処理部１５５は、当該キャッシュラインを無効化する。ＣＰＵ１２０が読み出しを要求したキャッシュメモリのデータが無効化されるため、メインメモリ１３０に存在する同一のデータがキャッシュメモリ１２１に読み出されてＣＰＵ１２０に渡される。
【００９１】
マルチビットエラーが発生したキャッシュラインがライトバックで扱うメモリ領域に対応している場合は、再演算管理部１５７が呼び出される。
再演算管理部１５７は、キャッシュメモリ上の全データを無効化する。
以上で、Ｓ５０１から５１１の処理の概要についての説明を終わる。
【００９２】
Ｓ５１２において、再演算管理部１５７は、演算結果バッファ１５８に格納されている処理セグメント完了フラグ１５８１をチェックし、処理セグメントがどこまで完了しているかを判定する。
処理セグメント（１）１５１１が完了していなかった場合（Ｓ５１２でＮＯ）、Ｓ５１６に進む。
【００９３】
Ｓ５１６において、再演算管理部１５７は、処理セグメント（１）１５１１の演算処理の最初の段階でバックアップバッファ１５６に保存した実行情報１５６１を読み出す。再演算管理部１５７は、バックアップバッファ１５６に保存されているスタックフレームのアドレスから演算処理開始時のスタックフレームの位置を確認し、バックアップバッファ１５６に保存されているスタックフレームのデータを読み出してキャッシュメモリ１２１に上書きする。また、再演算管理部１５７は、プログラム中で使用するグローバル変数についても、バックアップバッファ１５６に保存されているデータへロールバックし、処理セグメント（１）１５１１の演算処理を再実行させる。
【００９４】
処理セグメント（１）１５１１が完了していた場合（Ｓ５１２でＹＥＳ）、Ｓ５１３に進む。
処理セグメント（１）１５１１が完了し、処理セグメント（２）１５１２が完了していなかった場合（Ｓ５１３でＮＯ）、Ｓ５１５へ進む。
【００９５】
Ｓ５１５において、再演算管理部１５７は、処理セグメント（２）１５１２の先頭部分から演算を再実行させる。各処理セグメントの演算内容は、他の処理セグメントに影響を受けない形で分割している。更に、各処理セグメントの先頭部分で、変数の初期化及びセンサ情報の再読み出しが行なわれるため、各処理セグメントの先頭部分から再実行させたとしても、問題なく動作を継続可能である。
すなわち、再演算管理部１５７は、処理セグメント（２）１５１２の演算処理の最初の段階でバックアップバッファ１５６に保存した実行情報１５６１を読み出す。再演算管理部１５７は、バックアップバッファ１５６に保存されているスタックフレームのアドレスから演算処理開始時のスタックフレームの位置を確認し、バックアップバッファ１５６に保存されているスタックフレームのデータを読み出してキャッシュメモリ１２１に上書きする。また、再演算管理部１５７は、プログラム中で使用するグローバル変数についても、バックアップバッファ１５６に保存されているデータへロールバックし、処理セグメント（２）１５１２の演算処理を再実行させる。
【００９６】
処理セグメント（２）１５１２が完了していた場合（Ｓ５１３でＹＥＳ）、Ｓ５１４に進む。これは、処理セグメント（２）１５１２が完了し、処理セグメント（３）１５１３が完了していないことを意味する。
【００９７】
Ｓ５１４において、再演算管理部１５７は、処理セグメント（３）１５１３の先頭部分から演算を再実行させる。
すなわち、再演算管理部１５７は、処理セグメント（３）１５１３の演算処理の最初の段階でバックアップバッファ１５６に保存した実行情報１５６１を読み出す。再演算管理部１５７は、バックアップバッファ１５６に保存されているスタックフレームのアドレスから演算処理開始時のスタックフレームの位置を確認し、バックアップバッファ１５６に保存されているスタックフレームのデータを読み出してキャッシュメモリ１２１に上書きする。また、再演算管理部１５７は、プログラム中で使用するグローバル変数についても、バックアップバッファ１５６に保存されているデータへロールバックし、処理セグメント（３）１５１３の演算処理を再実行させる。
【００９８】
以上で、計算機１０１の障害対応処理（工程）についての説明を終わる。
【００９９】
本実施の形態では、処理セグメントが３つの場合で説明を実施したが、処理セグメント数が４つ以上となった場合でも動作は同様であり、未完了の処理セグメントの先頭から演算を再実行する処理となる。
【０１００】
以上のように、本実施の形態に係る計算機１０１によれば、実施の形態１の効果に加え、本実施の形態では、マルチビットエラー発生後の再演算処理の短縮を図ることが可能である。よって、規定実行周期以内に再演算処理が完了する可能性を高める効果がある。このような効果によって、マルチビットエラー発生後の計算機の動作継続性が向上すると共に、外部機器の制御情報の出力の欠落を抑制することができる。
【０１０１】
実施の形態３．
本実施の形態では、主に、実施の形態１との差異点について説明する。
本実施の形態において、実施の形態１で説明した構成部と同様の機能を有する構成部には同一の符号を付し、その説明を省略する場合がある。
【０１０２】
図１２は、本実施の形態に係る計算機１０２のブロック構成の一例を示す図である。
図１２は、本実施の形態において、計算機１０２の演算処理機能と、ソフトエラーが発生した際のエラー処理に関する機能とを示したブロック図である。
本実施の形態に係る計算機１０２は、実施の形態１で説明した図５の構成に加えて、軽量演算処理部１５９を備える。
【０１０３】
軽量演算処理部１５９は、センサ情報等を用いる点では演算処理部１５１と同様であるが、フィードバック制御等の演算負荷の高い処理を除外したものであり、演算処理部１５１での演算結果よりも精度は劣るが、短時間での処理が可能である。
以後、軽量演算処理部１５９での演算処理を軽量演算処理とし、演算結果を軽量演算結果とする。また、演算処理部１５１での演算処理を通常演算処理とし、演算結果を通常演算結果とする。
また、通常演算結果と軽量演算結果とは、通常演算処理と軽量演算処理とのどちらの演算結果であるか判別可能なフラグを有するものとする。通常演算結果、軽量演算結果のどちらもライトスルーで扱う。通常演算処理と軽量演算処理とを単に演算処理とする場合があり、通常演算結果と軽量演算結果とを単に演算結果とする場合がある。
【０１０４】
軽量演算処理の処理時間と軽量演算結果の精度とは、トレードオフの関係になる。この処理時間と精度との配分については、本実施の形態に係る計算機１０２を適用する適用先の計算機システム、プログラムの要件に合わせて適切に調整する。
【０１０５】
次に、本実施の形態に係る計算機１０２の動作を説明する。
図１３は、本実施の形態に係る計算機１０２の周期処理（工程）の一例を示すフローチャートである。
【０１０６】
Ｓ６０１の処理は、図６のＳ２０１と同様の処理である。すなわち、入力処理部１５２により入力処理が実行され、外部機器２００からセンサ情報を取得する。取得したセンサ情報はライトスルーのメモリ領域に保存される。
【０１０７】
Ｓ６０２〜Ｓ６０５において、出力処理部１５３は、出力処理を実行し、前の周期処理中に演算された制御情報を、外部機器２００に対して出力する。
Ｓ６０２において、出力処理部１５３は、前の周期の通常演算処理が完了しているか否かを判定する。前の周期の通常演算処理が完了している場合（Ｓ６０２でＹＥＳ）、出力処理部１５３は、演算処理部１５１での通常演算結果を出力する（Ｓ６０３）。前の周期の通常演算処理が完了していない場合（Ｓ６０２でＮＯ）、出力処理部１５３は、軽量演算処理部１５９での軽量演算結果を出力する（Ｓ６０４）。
このように、出力処理部１５３は、制御情報が通常演算結果または軽量演算結果のどちらであるかに関係なく出力する。
【０１０８】
Ｓ６０５〜Ｓ６１０の処理は、図６のＳ２０３〜２０８と同様の処理である。
以下に、Ｓ６０５〜Ｓ６１０の処理の概要について説明する。
すなわち、出力処理が完了すると、演算処理が開始される。演算処理では、その最初の段階で演算処理開始時のスタックフレーム、スタックフレームのアドレス、グローバル変数をバックアップバッファへ保存する。なお、保存するスタックフレームは演算処理の関数のもののみであり、それ以前に積まれているスタックフレームは保存する必要はない。バックアップバッファ１５６はライトスルーで扱う。バックアップバッファ１５６のデータにソフトエラーが発生した際は、エラー検出部１５４は比較のための計算機１００ａのエラー検出処理で示した方法によってデータの訂正をする。
次に、センサ情報等から制御情報を算出するための演算が開始される。この演算処理の実行中はライトバックで扱う。制御情報が算出されたら、得られた制御情報をライトスルーのメモリ領域に保存する。また、キャッシュメモリに保存されているデータを、メインメモリへ書き戻す。その後、その他の処理を実施し、１周期の処理が終了となる。
【０１０９】
図１４は、本実施の形態に係る計算機１０２の障害対応方法における障害対応処理（工程）の一例を示すフローチャートである。
図１４を用いて、キャッシュメモリ１２１でソフトエラーが発生したときの動作例を説明する。図１４は、当実施形態において、ＣＰＵがキャッシュメモリ１２１のデータの読み出しを行なう際の動作フローである。
【０１１０】
Ｓ７０１〜Ｓ７１１の処理は、図７のＳ３０１〜Ｓ３１１と同様の処理であるため、その説明を省略する。
以下に、Ｓ７０１〜Ｓ７１１の処理の概要について説明する。
ＣＰＵ１２０がデータの読み出しを要求すると、エラー検出部１５４がＥＣＣ機能を用いて、読み出し対象のキャッシュメモリ１２１のキャッシュラインをチェックする。
この時、キャッシュメモリ１２１にソフトエラーが発生していなければ、ＣＰＵ１２０はキャッシュメモリ１２１のデータを読み出す。
キャッシュメモリ１２１にソフトエラーが発生していた場合は、エラー検出部１５４はそのソフトエラーがシングルビットエラーか、マルチビットエラーかの判定を実施する。
ソフトエラーがシングルビットエラーであった場合は、ＥＣＣ機能によりシングルビットエラーによって破損したデータを訂正する。ソフトエラーがマルチビットエラーであった場合、ＣＰＵに対して割込みが通知され、例外処理部１５５が割込みハンドラとして呼び出される。例外処理部１５５では、マルチビットエラーが発生したキャッシュラインがライトバックで扱うメモリ領域か、ライトスルーで扱うメモリ領域かを判定する。
マルチビットエラーが発生したキャッシュラインがライトスルーで扱うメモリ領域に対応している場合は、このキャッシュラインを無効化する。ＣＰＵが読み出しを要求したキャッシュメモリのデータが無効化されるため、メインメモリに存在する同一のデータがキャッシュメモリに読み出されてＣＰＵに渡される。
マルチビットエラーが発生したキャッシュラインがライトバックで扱うメモリ領域に対応している場合は、例外処理部１５５は、キャッシュメモリ上の全データを無効化する。
以上で、Ｓ７０１〜Ｓ７１１の処理の概要の説明を終わる。
【０１１１】
Ｓ７１２において、例外処理部１５５は、軽量演算処理部１５９を呼び出す。
軽量演算処理部１５９は、センサ情報等から軽量演算結果を制御情報として算出し、ライトスルーのメモリ領域に保存する。
【０１１２】
軽量演算処理の処理が完了すると、例外処理部１５５は、再演算管理部１５７を呼び出す。再演算管理部１５７は、例えば、軽量演算処理の処理が完了した軽量演算処理部１５９が呼び出してもよい。
Ｓ７１３において、再演算管理部１５７は、通常演算処理の最初の段階でバックアップバッファ１５６に保存した実行情報を読み出す。
再演算管理部１５７は、バックアップバッファ１５６に保存されているスタックフレームのアドレスから通常演算処理開始時のスタックフレームの位置を確認し、バックアップバッファ１５６に保存されているスタックフレームのデータを読み出して上書きする。また、プログラム中で使用するグローバル変数についても、バックアップバッファ１５６に保存されているデータへロールバックする。その後、通常演算処理の最初から演算を再実行させる。
以上で、計算機１０２の障害対応処理（工程）を終了する。
【０１１３】
例えば、規定実行周期の終了直前にソフトエラーが発生した場合、実行周期以内で制御情報の演算処理（通常演算処理）の再実行が完了せず、制御情報を出力できなくなることがある。本実施の形態に係る計算機１０２では、通常の演算結果（通常演算結果）の精度を落とした軽量な演算結果（軽量演算結果）を使うことで対応する。一般に、産業用計算機で行なう演算処理は、外部に接続された機器から取得したデータに対して、フィードバック制御や機器使用者からの制御命令を反映した複雑な処理が行われる。このため、演算負荷の高いものとなっている。
【０１１４】
本実施の形態に係る計算機１０２では、マルチビットエラー発生時に演算処理（通常演算処理）の再実行を行なう前に、フィードバック制御等の演算負荷の高い処理を省いた軽量演算処理によって、演算結果の概算値を算出しておき、その後、フィードバック制御等を含めた通常演算処理の再演算処理を実行する。この再演算処理が規定周期時間以内に完了しなかった場合でも、再演算処理の実行前に算出した軽量演算処理の軽量演算結果を代わりに出力することで、計算機１０２から外部機器２００への制御情報出力の欠落を防止することができる。
【０１１５】
以上のように、本実施の形態に係る計算機１０２によれば、実施の形態１の効果に加え、マルチビットエラー発生時に、規定実行周期以内に再演算処理を完了できない状況であっても、軽量演算処理を用いることによって、外部機器に出力する制御情報を短時間で取得可能となる。これによって、マルチビットエラー発生後の計算機の動作継続性が向上すると共に、外部機器の制御情報の出力の欠落を抑制する効果が得られる。
【０１１６】
実施の形態４．
本実施の形態では、主に、実施の形態１との差異点について説明する。
本実施の形態において、実施の形態１で説明した構成部と同様の機能を有する構成部には同一の符号を付し、その説明を省略する場合がある。
【０１１７】
図１５は、本実施の形態に係る計算機１０３のブロック構成の一例を示す図である。
図１５は、本実施の形態において、計算機１０３の演算処理機能と、ソフトエラーが発生した際のエラー処理に関する機能とを示したブロック図である。
本実施の形態に係る計算機１０３は、実施の形態１で説明した図５の構成に加えて、過去値バッファ１６０、演算結果予測部１６１、予測値バッファ１６２を備える。
【０１１８】
過去値バッファ１６０は、各実行周期において計算機１０３が外部機器２００へ出力した制御情報のログである。過去値バッファ１６０に保存される制御情報は、演算処理部１５１で算出された演算結果、または演算結果予測部１６１で算出された演算結果予測値のどちらか一方であり、外部機器２００に対して出力された方のデータが保存される。なお、過去値バッファ１６０はライトスルーで扱う。
【０１１９】
演算結果予測部１６１は、過去値バッファ１６０に保存された制御情報を元に、次の実行周期において演算処理部１５１により算出される制御情報を予測する。予測値の精度と、演算処理部１５１の処理時間とはトレードオフの関係となる。この処理時間と精度との配分については、本実施の形態に係る計算機１０３を適用する適用先の計算機システム、プログラムの要件に合わせて適切に選択する。また、予測値を算出するアルゴリズムについては特に規定しない。
【０１２０】
予測値バッファ１６２は、演算結果予測部１６１が算出した予測値を格納するためのメモリ領域であり、ライトスルーで扱う。
【０１２１】
次に、本実施の形態に係る計算機１０３の動作を説明する。
図１６は、本実施の形態に係る計算機１０３の周期処理（工程）の一例を示すフローチャートである。
Ｓ８０１の処理は、図６のＳ２０１と同様の処理である。すなわち、入力処理部１５２により入力処理が実行され、外部機器２００からセンサ情報を取得する。取得したセンサ情報はライトスルーのメモリ領域に保存される。
【０１２２】
Ｓ８０２〜Ｓ８０５において、出力処理部１５３は、出力処理を実行し、前の周期処理中に演算された制御情報を、外部機器２００に対して出力する。
Ｓ８０２において、出力処理部１５３は、前の周期の演算処理（通常演算処理）が完了しているか否かを判定する。前の周期の演算処理が完了している場合（Ｓ８０２でＹＥＳ）、出力処理部１５３は、演算処理部１５１での演算結果を出力する（Ｓ８０３）。前の周期の演算処理が完了していない場合（Ｓ８０２でＮＯ）、出力処理部１５３は、前の周期での演算処理の結果予測値を出力する（Ｓ８０４）。
このように、出力処理部１５３は、制御情報が演算結果または結果予測値のどちらであるかに関係なく出力する。出力処理部１５３は、出力した制御情報を過去値バッファ１６０に保存する（Ｓ８０５）。
【０１２３】
Ｓ８０６〜Ｓ８０８の処理は、図６のＳ２０３〜Ｓ２０５と同様の処理である。
すなわち、演算処理では、演算処理部１５１は、演算処理の最初の段階で演算処理開始時のスタックフレーム、スタックフレームのアドレス、グローバル変数をバックアップバッファ１５６へ保存する。なお、保存するスタックフレームは演算処理の関数のもののみであり、それ以前に積まれているスタックフレームは保存する必要はない。バックアップバッファ１５６はライトスルーで扱うこととし、バックアップバッファのデータにソフトエラーが発生した際は、前記従来例で示した方法によってデータの訂正が可能である。
次に、センサ情報等から制御情報を算出するための演算が開始される。この演算処理の実行中はライトバックで扱う。
【０１２４】
Ｓ８０９において、演算処理部１５１は、制御情報を算出すると、得られた制御情報を、メインメモリ１３０のライトスルーのメモリ領域に保存する。また、キャッシュメモリ１２１に保存されているデータを、メインメモリ１３０へ書き戻す。これにより、演算処理を終了する（Ｓ８１０）。
【０１２５】
Ｓ８１１において、演算結果予測部１６１は、過去値バッファ１６０に保存されている過去の制御情報から、次の実行周期の演算処理で求められる演算結果、つまり次の実行周期（次演算処理）で算出される制御情報を予測値として予測する。演算結果予測部１６１は、予測により求めた予測値を、予測値バッファ１６２へライトスルーで保存する。
【０１２６】
Ｓ８１２の処理は、Ｓ２０８の処理と同様である。すなわち、計算機１０３は、その他の処理を実行し、その他の処理の実行が終了した時点で１周期の処理が終了となる。
【０１２７】
本実施の形態に係る計算機１０３において、キャッシュメモリ１２１でソフトエラーが発生したときの動作については、実施の形態１の図７と同様の処理であるため、その説明を昇略する。
【０１２８】
上述した実施の形態３の方式では、演算処理の完了間際にマルチビットエラーが発生した場合、軽量演算処理すら規定実行周期以内に完了しない場合が想定され、軽量演算処理による制御情報すら出力できなくなる可能性がある。本実施の形態では、各実行周期中において、次の実行周期の演算処理で求められる演算結果を予想しておくようにする。次の実行周期での演算結果を予測するために、現実行周期を含めた各実行周期での演算結果を保存しておく。
本実施の形態に係る計算機１０３では、演算処理の完了間際にマルチビットエラーが発生し、更にその周期中に演算結果を得ることができなかった場合には、直前の実行周期にて算出した、現実行周期での演算結果の予測値を用いて制御情報の出力が可能となり、計算機から外部機器への制御情報出力の欠落を防止可能である。
【０１２９】
以上のように、本実施の形態に係る計算機１０３によれば、実施の形態１の効果に加え、マルチビットエラー発生時に、規定実行周期以内に再演算処理を完了できない状況であっても、前の実行周期中に予め算出しておいた予測値を、外部機器に出力するための制御情報として使用可能である。これによって、マルチビットエラー発生後の計算機の動作継続性が向上すると共に、外部機器の制御情報の出力の欠落を抑制する効果が得られる。
【０１３０】
上記実施の形態の説明では、「入力処理部」、「出力処理部」、「演算処理部」、「エラー検出部」、「例外処理部」、「再演算管理部」、「軽量演算処理部」、「演算結果予測部」がそれぞれ独立した機能ブロックとして計算機１００，１０１，１０２，１０３を構成している。しかし、これに限られるわけではなく、例えば、「入力処理部」、「出力処理部」をひとつの機能ブロックで実現し、「エラー検出部」、「例外処理部」をひとつの機能ブロックで実現し、「再演算管理部」、「軽量演算処理部」、「演算結果予測部」をひとつの機能ブロックで実現しても良い。あるいは、ひとつの機能ブロックをさらに複数の機能ブロックに分割して計算機１００，１０１，１０２，１０３を構成してもよい。あるいは、これらの機能ブロックを、他のどのような組み合わせで構成しても構わない。これらの機能ブロックは任意であり、実施の形態１〜４に記載した機能を実現することができれば上記構成部はなくてもよく、新たな構成部、あるいは新たな他の組み合わせで構成しても構わない。
【０１３１】
また、本発明の実施の形態１〜４について説明したが、この実施の形態のうち、２つの実施の形態を組み合わせて実施してもよい。例えば、実施の形態２と実施の形態３を組み合わせてもよい。また、実施の形態２と実施の形態４を組み合わせてもよい。また、実施の形態３と実施の形態４を組み合わせてもよい。あるいは、１つの部分を実施しても構わない。あるいは、これらの実施の形態のうち、２つ以上の部分を組み合わせて実施しても構わない。なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【０１３２】
１００，１００ａ，１０１，１０２，１０３  計算機、１１０  入力ポート、１２０  ＣＰＵ、１２１  キャッシュメモリ、１３０  メインメモリ、１４０  出力ポート、１５１  演算処理部、１５２  入力処理部、１５３  出力処理部、１５４  エラー検出部、１５５  例外処理部、１５６  バックアップバッファ、１５７  再演算管理部、１５８  演算結果バッファ、１５９  軽量演算処理部、１６０  過去値バッファ、１６１  演算結果予測部、１６２  予測値バッファ、２００  外部機器、９０１  演算装置、９０２  外部記憶装置、９０３  主記憶装置、９０４  通信装置、９０５  入出力装置、１５１１  処理セグメント（１）、１５１２  処理セグメント（２）、１５１３  処理セグメント（３）、１５６１  実行情報、１５８１  処理セグメント完了フラグ。
【図１】
2015176153.tif 000003
【図２】
2015176153.tif 000004
【図３】
2015176153.tif 000005
【図４】
2015176153.tif 000006
【図５】
2015176153.tif 000007
【図６】
2015176153.tif 000008
【図７】
2015176153.tif 000009
【図８】
2015176153.tif 000010
【図９】
2015176153.tif 000011
【図１０】
2015176153.tif 000012
【図１１】
2015176153.tif 000013
【図１２】
2015176153.tif 000014
【図１３】
2015176153.tif 000015
【図１４】
2015176153.tif 000016
【図１５】
2015176153.tif 000017
【図１６】
2015176153.tif 000018