(57)【要約】【課題】ソフトウエアのバグをハードウエアで検出することができるメモリ初期化回路を提供する。【解決手段】メモリ初期化回路は、特定のデータパターンを持つ初期化データを生成する初期化データ生成手段と、メモリにＥＣＣとデータを書き込んで初期化するときにそのデータとして特定のデータパターンを持つ初期化データを書き込むようにメモリ初期化動作を制御するメモリ初期化制御手段と、初期化データの判別により、ソフトウエアのバグを検出する手段とを備える。【選択図】図１
2011008518.tif 000002
【特許請求の範囲】
【請求項１】
特定のデータパターンを持つ初期化データを生成し、メモリにＥＣＣとデータを書き込んで初期化するときにそのデータとして前記初期化データを書き込むようにメモリ初期化動作を制御するメモリ初期化制御手段と、
前記初期化データの判別により、ソフトウエアのバグを検出する手段とを備えたことを特徴とするメモリ初期化回路。
【請求項２】
前記メモリ初期化制御手段は、運用中のソフトウエアがメモリを開放するときに、ソフトウエアが使用していたメモリ領域のメモリアドレス情報を保持しておくことで、使用したアドレスのみ前記初期化データを書き込むようにメモリ初期化動作を制御することを特徴とする請求項１記載のメモリ初期化回路。
【請求項３】
前記メモリ初期化制御手段は、前記ソフトウエアが使用していたメモリ領域のメモリアドレス情報を保持するアドレスバッファを有する請求項２記載のメモリ初期化回路。
【請求項４】
前記メモリ初期化制御手段は、
前記初期化データとしてポイズン化した特定のデータパターンを持つポイズン化データを生成するポイズン化データ生成回路と、
前記初期化データとして前記ポイズン化データを書き込むようにメモリ初期化動作を制御するメモリ初期化制御回路とを有することを特徴とする請求項１から３のいずれか１項記載のメモリ初期化回路。
【請求項５】
特定のデータパターンを持つ初期化データを生成し、メモリにＥＣＣとデータを書き込んで初期化するときにそのデータとして前記初期化データを書き込むようにメモリ初期化動作を制御し、
前記初期化データの判別により、ソフトウエアのバグを検出することを特徴とするメモリ初期化方法。
【請求項６】
更に、運用中のソフトウエアがメモリを開放するときに、ソフトウエアが使用していたメモリ領域のメモリアドレス情報を保持しておくことで、使用したアドレスのみ前記初期化データを書き込むようにメモリ初期化動作を制御することを特徴とする請求項５記載のメモリ初期化方法。
【請求項７】
前記初期化データとしてポイズン化した特定のデータパターンを持つポイズン化データを生成し、
前記初期化データとして前記ポイズン化データを書き込むようにメモリ初期化動作を制御することを特徴とする請求項５又は６記載のメモリ初期化方法。
【請求項８】
請求項１から４のいずれか１項に記載のメモリ初期化回路と、
前記メモリ初期化回路により初期化されるメモリとを有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ初期化回路、メモリ初期化方法、及び情報処理装置に関する。
【背景技術】
【０００２】
従来、メモリデータの初期化は、システム立ち上げ時にＥＣＣ（Error Correcting Code：誤り訂正符号）とデータパターンをメモリの全ワード（Word）に書き込むことによって実施され、初期化完了後、システム運用を始めていた。
【０００３】
しかし、従来のメモリ初期化方法では、ソフトウエアにバグがあり、メモリにデータを書き込む前に、メモリリードを行った場合、初期化時に既にＥＣＣとデータが正しく書き込まれているため、運用中にソフトウエアが未書き込みワードを読み出してもハードウエア（ＨＷ）ではバグを検出できず、ソフトウエア（ＳＷ）にデータチェック記述がなければ、誤動作したままとなり、ソフトウエアのバグは発見されなかった。
【０００４】
これに関し、特許文献１には、ＦＢ−ＤＩＭＭ（Fully Buffered Dual Inline Memory Module）のメモリコントローラを使用して、パラレルにメモリ初期化を実施する方法が記載されている。また、特許文献２には、個別識別番号と誤り訂正符号を使用して、変換したデータを記憶手段に保持させることで、異なる個別識別番号からのアクセスを保護する装置が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２６２３２５号公報
【特許文献２】特開平０４−３１００２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
メモリ初期化に関しては、高速化が求められており、特許文献１は、メモリの初期化の高速化機能を実現するものであるが、ソフトウエアバグをハードウエア（ＨＷ）的に検出するものではない。また、特許文献２は、データ書き込み時に個別識別番号を用いて、データを符号化することにより、データ破壊を防ぐものであり、ソフトウエアバグをハードウエア的に検出するものではない。
【０００７】
本発明の目的は、上記課題を解決し、ソフトウエアのバグをハードウエアで検出することができるメモリ初期化回路を提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明に係るメモリ初期化回路は、特定のデータパターンを持つ初期化データを生成し、メモリにＥＣＣとデータを書き込んで初期化するときにそのデータとして前記初期化データを書き込むようにメモリ初期化動作を制御するメモリ初期化制御手段と、前記初期化データの判別により、ソフトウエアのバグを検出する手段とを備えたことを特徴とする。
【０００９】
本発明に係るメモリ初期化方法は、特定のデータパターンを持つ初期化データを生成し、メモリにＥＣＣとデータを書き込んで初期化するときにそのデータとして前記初期化データを書き込むようにメモリ初期化動作を制御し、前記初期化データの判別により、ソフトウエアのバグを検出することを特徴とする。
【００１０】
本発明に係る情報処理装置は、上記に記載のメモリ初期化回路と、前記メモリ初期化回路により初期化されるメモリとを有することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、メモリを初期化する際にメモリにＥＣＣとデータを書き込むときに特定のデータパターンを持つ初期化データを書き込むことにより、ソフトウエアのバグをハードウエアで検出することができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施の形態に係るメモリ初期化回路を備えた情報処理装置の主要部の構成を示す図である。
【図２】図１に示すメモリ初期化回路によるシステム立ち上げ時の初期化後のエラー検出に関する動作を説明する図である。
【図３】図１に示すメモリ初期化回路による運用中のアプリケーション終了後のメモリ初期化に関する動作を説明する図である。
【発明を実施するための形態】
【００１３】
次に、本発明の実施の形態について、図面を参照して詳細に説明する。
【００１４】
図１を参照すると、本発明の実施の形態に係る情報処理装置は、メモリ６００と、このメモリ６００を初期化するためのメモリ初期化回路とを有している。メモリ初期化回路は、メモリ（MEM）初期化制御回路１００、メモリコントローラ（MEM Controller）２００、ライトイネーブルセレクタ３００、ポイズン化データ（Poisoning Data）生成回路４００、書き込みデータセレクタ５００、ＥＣＣチェック（ECC check）回路７００、アドレスバッファ（Address Buffer）アドレスセレクタ８００、アドレスバッファ９００、及びアドレスセレクタ１０００から構成される。
【００１５】
メモリ初期化制御回路１００は、診断プロセッサ（非図示）からのメモリ初期化信号、またはＯＳ（Operating System）（非図示）からアプリケーション終了信号を入力して、メモリ初期化制御回路１００のデータセレクト信号、アドレスセレクト信号、アドレスバッファ９００のアドレスセレクト信号を生成する。
【００１６】
メモリコントローラ２００は、通常動作時の通常アドレス、ライトイネーブル、書き込みデータを生成する。
【００１７】
ライトイネーブルセレクタ３００は、データセレクト信号をセレクト信号として、通常動作時のメモリライトイネーブルか初期化時のメモリライトイネーブルか選択する。
【００１８】
ポイズン化データ生成回路４００は、メモリ６００にＥＣＣとデータを書き込むときに、特定のデータパターンを持つ初期化データとしてポイズン化したデータ（以下、「ポイズン化データ」という。）を生成する。
【００１９】
書き込みデータセレクタ５００は、メモリ６００への書き込みデータをセレクトする。
【００２０】
ＥＣＣチェック回路７００は、ハードウエア障害によるＥＣＣエラーとポイズン化データとを判別する。
【００２１】
アドレスバッファアドレスセレクタ８００は、アドレスバッファ９００の入力を選択する。
【００２２】
アドレスバッファ９００は、通常運用時のアドレスを保持する。
【００２３】
アドレスセレクタ１０００は、アドレスバッファ９００の出力か通常運用時のアドレスか初期化時のインクリメントアドレスか選択する。
【００２４】
次に、図１〜図３を用いて、動作の説明を行う。以下の説明では、便宜上、メモリ６００は０からｃ−１ワード（Ｗｏｒｄ）のｃワード幅を持つとする。
【００２５】
図２において、フェーズ（Ｐｈａｓｅ）０は、メモリ６００の初期化を実施する前のメモリ６００の全ワード未初期化の状態を示す。
【００２６】
まず、図２のシステム立ち上げ時の初期化フェーズのうち未初期化のフェーズ０とその次の初期化完了のフェーズ１において、運用開始前に診断プロセッサからのメモリ初期化信号の受信を契機に、メモリ６００の全ワードについて、未初期化の状態からポイズン化データを書き込んだ状態に初期化する動作を説明する。
【００２７】
メモリ初期化制御回路１００は、診断プロセッサからメモリ初期化信号を受信すると、データセレクト信号と、アドレスバッファアドレスセレクト信号と、アドレスセレクト信号と、メモリ初期化ライトイネーブル信号を出力する。
【００２８】
ライトイネーブルセレクタ３００は、データセレクト信号によりメモリ初期化ライトイネーブルが選択され、メモリ６００に送出される。また、書き込みデータセレクタ５００では、データセレクト信号より、ポイズン化データ生成回路４００で生成されるポイズン化データが選択され、メモリ６００に送出される。
【００２９】
メモリ初期化制御回路１００からのアドレスセレクト信号により、アドレスセレクタ１０００で＋１インクリメント信号を選択する。アドレスセレクタ１０００では、メモリ６００の１ワードを初期化するサイクル毎にアドレスが＋１インクリメントされ、メモリ６００のワード［ｃ−１］まで書き込むことにより、メモリ６００の全ワードにポイズン化データが書き込まれ、フェーズ１のメモリ初期化完了となる。
【００３０】
次に、図２のシステム立ち上げ時の初期化完了のフェーズ１後の運用中のフェーズ２とその次のフェーズ３でソフトウエアのバグが検出される動作を説明する。その一例として、フェーズ２においてメモリ６００のワード［ａ］にデータＡを書き込んだ後に、その次のフェーズ３において、本来は、メモリ６００の同一ワード［ａ］を読み出すところ、ソフトウエアバグでメモリ６００のワード［ｂ］を読んでしまった場合を説明する。
【００３１】
まず、図２の運用中のフェーズ２時に、メモリ初期化制御回路１００からのデータセレクト信号は、ライトイネーブルセレクタ３００で通常動作時のライトイネーブル信号を、書き込みデータセレクタ５００では通常データを、それぞれ選択するように送出される。
【００３２】
通常動作時のアドレス、データ制御を行うメモリコントローラ２００からのライトイネーブル、書き込みデータ、通常アドレスにより、メモリ６００のワード［ａ］にデータＡが書き込まれる。
【００３３】
次いで、図２の運用中のフェーズ３では、正しくはメモリ６００のワード［ａ］を読み出すところ、ソフトウエアのバグでメモリ６００のワード［ｂ］が読み出されたとする。この場合、メモリ６００のワード［ｂ］は、未書き込みのためメモリ初期化時のポイズン化データが書き込まれており、メモリ６００から読み出されたメモリ読み出しデータは、ポイズン化データとなる。ポイズン化データは、ＥＣＣチェック回路７００に入力され、ポイズン検出がアサートされる。
【００３４】
ＥＣＣチェック回路７００は、ポイズン以外のハードウエア障害によるＥＣＣエラーとポイズン化データを判別可能である。未書き込みのワード［ｂ］を読み出すと、ＥＣＣチェック回路７００でポイズン検出されることにより、書き込みを行っていないワードに対する読み出しが発生したことが検出される。この結果、図２のフェーズ３でソフトウエアのバグが存在することが検出可能となる。
【００３５】
次に、図３を用いて運用開始前のメモリ初期化時以降の運用中のアプリケーションソフトウエア（以下、「アプリケーション」という。）終了を契機とした実行メモリ空間初期化方法について説明する。
【００３６】
運用開始前のメモリ初期化では、メモリ６００の全ワードがポイズン化されているため、初期化直後に実行されるアプリケーションについては、ソフトウエアのバグが検出されるが、その後アプリケーション実行により書き込み済みワードが増えていき、ポイズン化されたワードが少なくなると、エラー検出可能なメモリ空間が減少していく。エラー検出をメモリ初期化直後と同等に可能にするため、アプリケーションが通常の運用で使用したアドレスを保持するアドレスバッファ９００と、アドレスバッファアドレスセレクタ８００を設ける。
【００３７】
ここで、図３の運用中のアプリケーション終了のフェーズ４とその次のフェーズ５において、メモリ初期化以降の通常アプリケーション実行後、次のアプリケーションがメモリ空間を使用する前に、メモリ６００の全ワードをメモリ初期化直後と同様にポイズン化する動作を説明する。
【００３８】
先ず、図３の運用中のアプリケーション終了のフェーズ４では、メモリ６００のワード［１、３、ａ、ｂ］の４ワードが書き込み済みとなっているとする。図１のアドレスバッファ９００は、通常運用時にメモリコントローラ２００からの通常アドレスを入力し保持する。
【００３９】
メモリ初期化制御回路１００は、ＯＳからアプリケーション終了信号を受信すると、アドレスバッファアドレスをクリア後、＋１インクリメント選択するようにアドレスバッファアドレスセレクト信号をアドレスバッファアドレスセレクタ８００に送る。
【００４０】
アドレスバッファ９００は、運用中に使用されたアドレスのみをアドレスセレクタ１０００に送出する。
【００４１】
メモリ初期化制御回路１００は、アドレスバッファ９００の出力を選択するようにアドレスセレクト信号をアドレスセレクタ１０００に送出する。
【００４２】
アドレスセレクタ１０００は、アドレスバッファ９００の出力をメモリ６００に送出する。
【００４３】
ライトイネーブルセレクタ３００は、メモリ初期化制御回路１００からのデータセレクト信号により、メモリ初期化ライトイネーブル信号を選択し、メモリ６００にライトイネーブル信号を送出する。
【００４４】
書き込みデータセレクタ５００は、メモリ初期化制御回路１００からのデータセレクト信号により、ポイズン化データを選択し、メモリ６００に送出する。この動作は、図３のフェーズ４後の次のフェーズ５のステップ１、２、３、４でメモリ６００のワード［１、３、ａ、ｂ］に対して実行される。
【００４５】
このように、アプリケーション終了後に、メモリ６００の全ワードを初期化することなく、書き込み済みの４ワードのみをアドレスバッファ９００と、アドレスバッファアドレスセレクタ８００を用いて選択的に、図３のフェーズ５のステップ１、２、３、４のようにポイズン化することにより、運用中に高速にメモリ初期化することが可能となる。
【００４６】
図３では、アプリケーション終了を契機として、運用中にメモリ初期化動作を行う例を説明したが、プロセスロールアウトを契機にしたメモリ初期化動作も同一動作となる。
【００４７】
上記のように、ＥＣＣチェック回路７００は、ハードウエア障害によるＥＣＣエラーとポイズンエラーを判別できる。本来、ソフトウエアでは、メモリデータはライト後に参照されるはずであるため、ソフトウエアバグのためライトシーケンスを誤って実行しなかったとき、ポイズン化データが読み出され、ポイズンエラーが検出される。ポイズンエラーが検出された時、該当するリードシーケンスのステップの前にソフトウエアバグがあったことが分かる。
【００４８】
以上説明したように、本実施の形態では、メモリ初期化時、ＥＣＣとデータを書き込むときにそのデータとして特定のデータパターンを持つポイズン化データ（初期化データ）を書き込む手段として、メモリ初期化制御回路１００と、ポイズン化データ生成回路４００と、ＥＣＣチェック回路７００と、アプリケーションがメモリ６００を開放するときにＯＳからアプリケーション終了情報を受信しアプリケーションが使用していたメモリ領域についてメモリアドレス情報を保持するアドレスバッファ９００を有している。
【００４９】
これにより、本実施の形態に係るメモリ初期化回路は、メモリ初期化時、メモリ６００にＥＣＣとデータを書き込むときにそのデータとして特定のデータパターンを持つポイズン化データを書き込むことにより、従来ハードウエアでは検出できなかった、ソフトウエアのバグを検出できる。
【００５０】
また、本実施の形態では、更にシステム立ち上げ時のメモリ初期化時以外に、アプリケーションがメモリ６００を開放するときに、ＯＳからアプリケーション終了情報を受信し、アプリケーションが使用していたメモリ領域について、アドレスバッファ９００に使用済みアドレス情報を保持し、使用したアドレスのみポイズン化データを書き込む手段を有することにより、高速にメモリ６００のポイズン化が可能且つ、継続してソフトウエアバグを検出することが可能である。
【００５１】
なお、上述したメモリ初期化回路のハードウェア構成は特に限定されるものではなく、上述した各構成要素の機能を実現可能であれば、いずれの構成でも適用可能である。
【００５２】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【産業上の利用可能性】
【００５３】
本発明は、メモリ初期化回路に適用することにより、ハードウエア機構によってソフトウエアバグを検出できる。特に、本発明は、高信頼性を求められる情報処理装置に適用することで信頼性を向上させることが可能である。
【符号の説明】
【００５４】
１００  メモリ初期化制御回路
２００  メモリコントローラ
３００  ライトイネーブルセレクタ
４００  ポイズン化データ生成回路
５００  書き込みデータセレクタ
６００  メモリ
７００  ＥＣＣチェック回路
８００  アドレスバッファアドレスセレクタ
９００  アドレスバッファ
１０００  アドレスセレクタ
【図１】
2011008518.tif 000003
【図２】
2011008518.tif 000004
【図３】
2011008518.tif 000005