(57)【要約】【課題】メモリに記憶された所定単位のデータ毎の要約値を計算する際の処理部の負荷を軽減する。【解決手段】メモリコントローラ１８は、メモリモジュール１４とＣＰＵ１６との間で、データの転送を行う。メモリコントローラ１８は、メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対してエラー検出及び訂正を行うメモリスクラビング処理の実行を制御するメモリスクラビング制御回路２２を備える。また、メモリコントローラ１８は、メモリスクラビング制御回路２２により読み出されたデータ、または、エラー検出訂正回路３０から出力されたデータを利用して、１ページ分のデータ毎のハッシュ値を計算するハッシュ値計算回路３４を備える。【選択図】図１
2015194877.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータを記憶するメモリと、前記メモリに記憶されたデータを用いた主となる処理を実行する処理部との間で、データの転送を行う転送装置であって、
前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御する制御部と、
前記制御部により読み出されたデータ、または、前記制御部による所定処理が行われたデータを利用して、複数の所定単位分のデータ毎の要約値を決定する決定部と、
を備えた転送装置。
【請求項２】
前記制御部は、前記メモリの予め定められた領域に記憶されたデータに対して、前記所定処理としてエラー検出及びエラー訂正を定期的に行うメモリスクラビング処理を行うように制御し、
前記決定部は、前記メモリから読み出されてから前記エラー検出及びエラー訂正が行われる前のデータ、または、前記エラー訂正が行われた場合は、エラー訂正後で、かつ前記メモリに書き戻される前のデータ、前記エラー検出によりエラーが検出されなかった場合には、エラー検出の処理後のデータを利用して、前記要約値を決定する
請求項１に記載の転送装置。
【請求項３】
前記決定部により決定された要約値は前記メモリに書き込まれ、
前記制御部による前記メモリからのデータの読み出し、及び前記決定部により決定された前記要約値の前記メモリへの書き込みの少なくとも一方は、前記処理部が前記主となる処理を実行していないアイドル状態の場合に行われる請求項１又は請求項２に記載の転送装置。
【請求項４】
前記メモリと前記転送装置との間のデータの転送距離は、前記メモリと前記処理部との間のデータの転送距離よりも短い請求項１〜請求項３の何れか１項に記載の転送装置。
【請求項５】
前記メモリから所定単位毎に読み出されてキャッシュに一旦記憶されるデータが、前記メモリに書き戻される際に書き換えられる可能性があるか否かを示す情報が、前記所定単位毎のデータに対応して前記メモリに書き込まれ、
前記決定部は、前記複数の所定単位分のデータに対応して前記メモリに書きこまれた前記書き換えられる可能性があるか否かを示す情報が、前記複数の所定単位分のデータに書き換えられる可能性のあるデータが含まれることを示す場合、予め定められた値を前記要約値として決定する
請求項１〜請求項４何れか１項に記載の転送装置。
【請求項６】
前記決定部により決定された要約値は前記メモリに記憶され、
前記メモリに記憶されたデータが書き換えられる可能性のあるデータを含む複数の所定単位分のデータの要約値を、予め定められた値に書き換える書換部を更に備える
請求項１〜請求項５何れか１項に記載の転送装置。
【請求項７】
前記決定部により決定された要約値は前記メモリに記憶され、
前記メモリに記憶されたデータが新しいデータに書き換えられる場合に、前記書き換えられるデータを含む複数の所定単位分のデータの要約値を、前記書き換えられるデータに代えて前記新しいデータを含む複数の所定単位分のデータの要約値に書き換える書換部を更に備える
請求項１〜請求項５の何れか１項に記載の転送装置。
【請求項８】
前記決定部を、ハードウェアの回路とした請求項１〜請求項７の何れか１項に記載の転送装置。
【請求項９】
複数のデータを記憶するメモリと、前記メモリに記憶されたデータを用いた主となる処理を実行する処理部との間で、データの転送を行う転送装置が実行する決定方法であって、
前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御し、
読み出されたデータ、または、前記所定処理が行われたデータを利用して、複数の所定単位分のデータ毎の要約値を決定する
ことを含む決定方法。
【請求項１０】
複数のデータを記憶するメモリと、
前記メモリに記憶されたデータを用いた主となる処理を実行する処理部と、
前記メモリと前記処理部との間で、データの転送を行うと共に、前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御する制御部と、前記制御部により読み出されたデータ、または、前記制御部による所定処理が行われたデータを利用して、複数の所定単位分のデータ毎の要約値を決定する決定部と、を備えた転送装置と、
を備えたデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
開示の技術は、転送装置、決定方法、及びデータ処理装置に関する。
【背景技術】
【０００２】
物理計算機上で動作する仮想機械（ＶＭ（Virtual Machine））は、ＲＡＭ（Random Access Memory）等の複数の記憶素子を備えた主記憶装置の所定数の記憶素子（メモリ）に記憶されたデータを１ページとして、ページ単位で管理する。ここで、一台の物理計算機上で動作する複数のＶＭの各々が、同じ内容のデータを、各ＶＭに対応する異なるページに記憶させると、同じ内容のデータが複数個所に存在することになり、主記憶装置の記憶容量を浪費する。よって、結果として一台の物理計算機上で動作させることができるＶＭの数を多くすることができなくなる。
【０００３】
そこで、従来、各ＶＭが、同じ内容のページを検出し、同じ内容のページを共通して利用することが行われている。同じ内容のページを検出する方法は次の通りである。まず、上記物理計算機のＣＰＵ（中央処理装置：Central Processing Unit）上でソフトウェア（ＶＭマネージャ）は、例えば１時間等の所定の間隔で、主記憶装置をスキャンしながら、各ページのハッシュ値を計算する。なお、ハッシュ値は、各ページのデータの内容に応じかつ当該内容を要約する要約値である。次に、ＶＭマネージャは、各ページに対応させて記憶された各ページのハッシュ値の対応表を作成する。ＶＭマネージャは、対応表に基づいて同じ内容のページの候補を見つけ、候補となったページの内容を改めて確認することで、同一内容のページを検出する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第６７８９１５６号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記のような各ページのハッシュ値の計算は、ＣＰＵ等の処理部により実行される主となる処理とは別に、ＣＰＵ等の処理部により実行される。従って、各ページのハッシュ値を計算するために、処理部には一定の負荷がかかる。
【０００６】
開示の技術は、１つの側面として、メモリに記憶された所定単位のデータ毎の要約値を計算する際の処理部の負荷を軽減することが目的である。
【課題を解決するための手段】
【０００７】
１つの態様では、転送装置は、複数のデータを記憶するメモリと、メモリに記憶されたデータを用いた主となる処理を実行する処理部との間で、データの転送を行う。転送装置は、前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御する制御部を備える。また、転送装置は、前記制御部により読み出されたデータ、または、前記制御部による所定処理が行われたデータを利用して、複数の所定単位分のデータ毎の要約値を決定する決定部を備える。
【発明の効果】
【０００８】
開示の技術は、１つの側面として、メモリに記憶された所定単位のデータ毎の要約値を計算する際の処理部の負荷を軽減することができる、という効果を有する。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態のデータ処理装置のブロック図である。
【図２】エラー検出訂正回路のブロック図である。
【図３】ハッシュ値計算回路のブロック図である。
【図４】読み書き用バッファ３２からの命令の処理、ハッシュ値のメモリへの書き込み、及びスクラビング処理を調停する調停回路及び各処理のタイミングを調整するタイミング調整回路のブロック図である。
【図５】第１の実施形態の制御回路のタイミングチャートの一部である。
【図６】第１の実施形態の制御回路のタイミングチャートの残りである。
【図７】従来の技術におけるハッシュ値の計算処理とメモリのスクラビング処理とのタイミングチャートである。
【図８】第１の実施形態におけるハッシュ値の計算処理とメモリのスクラビング処理とのタイミングチャートである。
【図９】第１の実施形態の変形例における、制御回路に代わるＭＰＵが実行するデータ処理の一例を示すフローチャートである。
【図１０】第２の実施形態のデータ処理装置のブロック図である。
【図１１】ＣＰＵとメモリコントローラとの間で送受信されるデータの内容を示す図である。
【図１２】第２の実施形態の変形例における、制御回路に代わるＭＰＵが実行するデータ処理の一例を示すフローチャートである。
【図１３】第２の実施形態の変形例のデータ処理装置のブロック図である。
【図１４】第３の実施形態のデータ処理装置のブロック図である。
【図１５】第３の実施形態の制御回路のタイミングチャートである。
【図１６】第４の実施形態のデータ処理装置のブロック図である。
【図１７】ハッシュ値の差分を計算することにより、ハッシュ値を更新する具体的内容を示す図である。
【図１８】第４の実施形態の制御回路のタイミングチャートである。
【発明を実施するための形態】
【００１０】
以下、図面を参照して開示の技術の実施形態の一例を詳細に説明する。
【００１１】
［第１の実施形態］
図１には、第１の実施形態のデータ処理装置１０のブロック図が示される。データ処理装置１０はサーバ装置に設けられる。図１に示すように、データ処理装置１０は、ＣＰＵチップ１２とメモリモジュール１４とを備えている。ＣＰＵチップ１２は、ＣＰＵ１６と、メモリコントローラ１８とを備える。メモリモジュール１４には、各々電荷を蓄積することによりデータを記憶する複数の記憶素子を有するメモリと、メモリの複数の記憶素子に対するデータの書き込み及び読み出しを制御するための制御部とが含まれる。複数の記憶素子は、後述するＣＰＵ１６によりデータの書き込み及び読み出しが行われるデータ記憶領域１４Ａと、後述するハッシュ値を記憶するためのハッシュ値記憶領域１４Ｂとに分かれて管理される。また、ＣＰＵ１６によるメモリに対するデータの読み出しや書き込みは、キャッシュ管理に都合のよい一定サイズの塊を単位として行われる。この単位を１キャッシュラインと呼び、以下では略して単に１ラインと言う。１ラインには、所定個数の記憶素子が対応する。
【００１２】
なお、ＣＰＵ１６と、メモリコントローラ１８とは、１つのチップに設けることに限定されず、別々のチップに設けてもよい。
【００１３】
データ処理装置１０を含む物理計算機上では複数の仮想機械（ＶＭ（Virtual Machine））が動作する。複数のＶＭの各々は、複数のラインに配置される所定数の記憶素子に記憶されたデータを１ページとして管理する。
【００１４】
メモリコントローラ１８は、制御回路２０、第１のセレクタ２６、３ステート制御回路２８、エラー検出訂正回路３０、読み書き用バッファ３２、ハッシュ値計算回路３４、溜め込みバッファ３６、及び第２のセレクタ３８を備える。制御回路２０は、メモリスクラビング制御回路２２及びハッシュ値計算制御回路２４を備える。メモリスクラビング制御回路２２は第１のアドレス保持回路２２Ａを備え、ハッシュ値計算制御回路２４は第２のアドレス保持回路２４Ａを備える。
【００１５】
制御回路２０の出力端子に接続された制御線Ｌ１は、第１のセレクタ２６の制御信号の入力端子に接続される。制御回路２０の別の出力端子に接続された制御線Ｌ２は、３ステート制御回路２８の制御信号の入力端子に接続される。制御回路２０の入力端子は制御線Ｌ３を介してエラー検出訂正回路３０の出力端子に接続される。制御回路２０と読み書き用バッファ３２とはデータ送信線Ｌ４により接続される。制御回路２０の別の出力端子に接続された制御線Ｌ５はハッシュ値計算回路３４の制御信号の入力端子に接続される。制御回路２０の別の出力端子に接続された制御線Ｌ６は溜め込みバッファ３６の制御信号の入力端子に接続される。制御回路２０の別の出力端子に接続された制御線Ｌ７は、第２のセレクタ３８の制御信号の入力端子に接続される。
【００１６】
制御回路２０の別の出力端子に接続されたデータ送信線Ｌ８は、第１のセレクタ２６の２つの入力端子の一方に接続される。第１のセレクタ２６の他方の入力端子には、読み書き用バッファ３２に接続されたデータ送信線Ｌ９が接続される。読み書き用バッファ３２に接続されたデータ送信線Ｌ９は、第２のセレクタ３８の２つの入力端子の一方に接続される。第２のセレクタ３８の他方の入力端子には、溜め込みバッファ３６に接続されたデータ送信線Ｌ１０が接続される。ハッシュ値計算回路３４は、データ送信線Ｌ１２を介して溜め込みバッファ３６に接続される。
【００１７】
３ステート制御回路２８の第１〜第３の端子の第１の端子は、データ送信線Ｌ１３を介して第２のセレクタ３８の出力端子に接続され、第２の端子はエラー検出訂正回路３０に、データ送信線Ｌ１４を介して接続される。エラー検出訂正回路３０のデータ送信線Ｌ１１は、読み書き用バッファ３２及びハッシュ値計算回路３４に接続される。
【００１８】
第１のセレクタ２６の出力端子は、データ送信線Ｌ１０２を介して、メモリモジュール１４に接続される。３ステート制御回路２８の第３の端子は、データ送信線Ｌ１０４を介してメモリモジュール１４に接続される。読み書き用バッファ３２とＣＰＵ１６とはデータ送信線Ｌ１０６により接続される。
【００１９】
第１のセレクタ２６は、制御線Ｌ１を介して制御回路２０から受信した信号の内容に応じて次の２つのデータのうちの選択されたデータをメモリモジュール１４に出力する。２つのデータの一方は、データ送信線Ｌ８を介して制御回路２０から入力されたデータである。他方のデータは、データ送信線Ｌ９を介して読み書き用バッファ３２から入力されたデータである。
【００２０】
第２のセレクタ３８は、制御線Ｌ７を介して制御回路２０から入力された信号の内容に応じて、次のようにデータを３ステート制御回路２８に出力する。第２のセレクタ３８は、データ送信線Ｌ９を介して読み書き用バッファ３２から入力されたデータ又はデータ送信線Ｌ１０を介して溜め込みバッファ３６から入力されたデータを、データ送信線Ｌ１３を介して３ステート制御回路２８に出力する。
【００２１】
３ステート制御回路２８は、制御線Ｌ２を介して制御回路２０から制御信号が入力されなければ、データ送信線Ｌ１０４を介して、メモリモジュール１４から入力されたデータを、データ送信線Ｌ１４を介してエラー検出訂正回路３０に出力する。３ステート制御回路２８は、制御線Ｌ２を介して制御回路２０から制御信号が入力された場合には、入力された制御信号に応じて、次のようにデータをメモリモジュール１４に出力する。３ステート制御回路２８は、データ送信線Ｌ１３を介して第２のセレクタ３８から入力されたデータ（１又は０）を、データ送信線Ｌ１０４を介してメモリモジュール１４に送信する。
【００２２】
メモリコントローラ１８は、開示の技術の「転送装置」の一例である。
メモリスクラビング制御回路２２は、開示の技術の「制御部」の一例である。
ハッシュ値計算回路３４は、開示の技術の「決定部」の一例である。
データ処理装置１０は、開示の技術の「データ処理装置」の一例である。
メモリモジュール１４におけるメモリは、開示の技術の「メモリ」の一例である。
ＣＰＵ１６は、開示の技術の「処理部」の一例である。
【００２３】
図２には、エラー検出訂正回路３０のブロック図が示される。図２に示すように、エラー検出訂正回路３０は、ＥＣＣ（誤り訂正符号：Error Correcting Code）計算回路４２、デコーダ４４、及び訂正可否判定回路４６を備える。また、エラー検出訂正回路３０は、ＥＯＲ（排他的論理和：Exclusive OR）回路４８、セレクタ５０、及び記憶素子５２を備える。
【００２４】
ＥＣＣ計算回路４２の入力端子、及びＥＯＲ回路４８の２つの入力端子の内の一方は、データ送信線Ｌ１４を介して３ステート制御回路２８に接続される。ＥＣＣ計算回路４２の出力端子は、デコーダ４４の入力端子及び訂正可否判定回路４６の入力端子の各々に接続される。デコーダ４４の出力端子は、ＥＯＲ回路４８の他方の入力端子に接続される。ＥＯＲ回路４８の出力端子は、セレクタ５０の２つの入力端子の一方に接続される。セレクタ５０の他方の入力端子には、訂正不可なエラー発生を示す特別な値が入力される。訂正可否判定回路４６の一方の出力端子は、セレクタ５０の制御信号の入力端子に接続される。訂正可否判定回路４６の他方の出力端子は、制御線Ｌ３を介して制御回路２０に接続される。セレクタ５０の出力端子は、記憶素子５２の入力端子に接続される。記憶素子５２の出力端子は、データ送信線Ｌ１１を介して、読み書き用バッファ３２及びハッシュ値計算回路３４に接続される。
【００２５】
ここで、エラー検出訂正回路３０の動作を説明する。メモリの記憶素子に、メモリコントローラ１８の外部から、例えば、宇宙線が照射されると、メモリの記憶素子における電荷の保持状態が反転し、メモリの記憶内容にエラーが発生する場合がある。エラー検出訂正回路３０は、このようなエラーを、次のように訂正する。
【００２６】
説明の便宜上、Ａ、Ｂ、Ｃ、及びＤとして識別される４ビットのデータが、同時にＥＣＣ計算回路４２及びＥＯＲ回路４８に入力されるとする。同時に入力されるデータには、４ビットのデータのみではなく、それらに対するＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）データも含まれる。ＥＣＣデータは、例えば、Ｅ、Ｆ、Ｇ、Ｈの４ビットで構成される。Ｅは、Ａ、Ｂ、及びＣのＥＯＲ、Ｆは、Ｂ、Ｃ、及びＤのＥＯＲ、Ｇは、Ｃ、Ｄ、及びＡのＥＯＲ、及びＨは、Ｄ、Ａ、及びＢのＥＯＲである。
【００２７】
なお、上記例では、データ送信線Ｌ１４は、Ａ、Ｂ、Ｃ、及びＤのデータと、それらに対するＥＣＣデータＥ、Ｆ、Ｇ、及びＨの合計８本の線を有する。また上記では、同時にＥＣＣ計算回路４２及びＥＯＲ回路４８に入力されるデータを、説明の便宜上、Ａ、Ｂ、Ｃ、及びＤのデータと、ＥＣＣデータＥ、Ｆ、Ｇ、及びＨとしている。しかし、実際にはより多いビット数のデータが、同時にＥＣＣ計算回路４２及びＥＯＲ回路４８に入力される。
【００２８】
Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、及びＨのデータが入力されたＥＣＣ計算回路４２は、入力されたＡ〜Ｈのデータから、第１〜第４のシンドローム・ビットを計算する。第１のシンドローム・ビットは、Ａ、Ｂ、Ｃ、及びＥのＥＯＲ、第２のシンドローム・ビットは、Ｂ、Ｃ、Ｄ、及びＦのＥＯＲ、第３のシンドローム・ビットは、Ｃ、Ｄ、Ａ、及びＧのＥＯＲ、第４のシンドローム・ビットは、Ｄ、Ａ、Ｂ、及びＨのＥＯＲである。そして、ＥＣＣ計算回路４２は、シンドロームをデコーダ４４及び訂正可否判定回路４６に出力する。
【００２９】
シンドロームは、具体的には、Ａ〜Ｈのデータに、例えば宇宙線により反転されたデータ等のエラーがあるか否か、エラーがある場合には、Ａ〜Ｈの内のどのデータにエラーがあるのかを示す信号である。デコーダ４４はシンドロームをデコードして訂正ベクタを生成する。例えば、Ａ〜Ｈのデータは本来０００１０１１１であったが、Ｂのデータにエラーがあり、入力されたＡ〜Ｈのデータが、０１０１０１１１であるとする。ＥＣＣ計算回路４２は、入力値０１０１０１１１に基づき、Ｂに訂正可能なエラーがあることを示すシンドローム１１０１を出力する。デコーダ４４は、シンドローム１１０１をデコードし、訂正ベクタとして０１００００００をＥＯＲ回路４８に出力する。ＥＯＲ回路４８は、０１０１０１１１のそれぞれと０１００００００のそれぞれとのＥＯＲを計算し、０００１０１１１のデータ、即ち、エラーが訂正された元のデータがセレクタ５０に入力される。
【００３０】
以上説明した例では、上記Ａ〜Ｈのデータの何れか１ビットにエラーがある場合に、エラーを訂正することができる。しかし、上記Ａ〜Ｈのデータに複数のエラーが存在する場合には、ＥＣＣ計算回路４２は、Ａ〜Ｈのどのデータにエラーがあるのかを判定することはできない。この場合には、ＥＣＣ計算回路４２は、訂正不可を示すシンドロームをデコーダ４４及び訂正可否判定回路４６に出力する。
【００３１】
このように、シンドロームには、エラーがないことを示す第１の種類のシンドロームと、訂正可能なエラーがどのデータに存在するのかを示す第２の種類のシンドロームと、エラーを訂正できないことを示す第３の種類のシンドロームとがある。訂正可否判定回路４６は、第１または第２の種類のシンドロームが入力された場合には、ＥＯＲ回路４８からの信号を選択するように、セレクタ５０を制御する信号をセレクタ５０に出力する。また、訂正可否判定回路４６は、第３の種類のシンドロームが入力された場合には、訂正不可なエラー発生を示す特別な値の信号を選択するように、セレクタ５０を制御する信号をセレクタ５０に出力する。セレクタ５０により選択された信号は、記憶素子５２を介してタイミングが調整されて、データ送信線Ｌ１１を介して、読み書き用バッファ３２及びハッシュ値計算回路３４に出力される。
【００３２】
なお、訂正可否判定回路４６は、第２の種類のシンドロームが入力された場合には、訂正可能なエラーがあったことを示す信号を、データ送信線Ｌ３を介して制御回路２０に出力する。また、第３の種類のシンドロームが入力された場合には、エラーを訂正できないことを示す信号を、データ送信線Ｌ３を介して制御回路２０に出力する。エラーを訂正できないことを示す信号が入力された制御回路２０は、図示しない表示装置にエラーを訂正できないことを表示させる。
【００３３】
詳細には後述するが、メモリスクラビング制御回路２２は、メモリモジュール１４からデータ記憶領域１４Ａの対象領域（例えば、全ての領域）の１ラインの例えば１／８の数毎に、アドレス順に順次データを読み出す。そして、読み出しされたデータはエラー検出訂正回路３０に入力され、エラーの検出及び訂正可能なエラーの訂正が行われる。このようなエラー検出及び訂正を、予め定められた範囲のデータ記憶領域に対し定期的に行い、エラーが訂正不能な水準にまで発展することを未然に防ぐ処理を、メモリのスクラビング処理という。
【００３４】
メモリの１ラインのデータの内の例えば１／８の合計４つのデータ（上記Ａ、Ｂ、Ｃ、及びＤ参照）は、開示の技術の「所定単位のデータ」の一例である。
【００３５】
図３には、ハッシュ値計算回路３４のブロック図が示される。図３に示すように、ハッシュ値計算回路３４は、中間状態保持回路５４、セレクタ５６、第１の組合せ回路５８、及び第２の組合せ回路６０を備える。
【００３６】
中間状態保持回路５４の入力端子には、第１の組合せ回路５８の出力端子が接続される。中間状態保持回路５４の出力端子は、セレクタ５６の２つの入力端子の一方に接続される。セレクタ５６の他方の入力端子には、所定値を示す初期Ｓｅｅｄが入力される。セレクタ５６の制御信号の入力端子には、制御線Ｌ５を介して制御回路２０に接続される。第１の組合せ回路５８の２つの入力端子の一方には、データ送信線Ｌ１１を介して、エラー検出訂正回路３０が接続される。第１の組合せ回路５８の他方の入力端子には、セレクタ５６の出力端子が接続される。第２の組合せ回路６０の入力端子には、第１の組合せ回路５８の出力端子が接続される。第２の組合せ回路６０の出力端子は、データ送信線Ｌ１２を介して溜め込みバッファ３６に接続される。
【００３７】
ここで、ハッシュ値計算回路３４の動作を説明する。データ処理装置１０を含む物理計算機上では複数のＶＭが動作する。複数のＶＭの各々は、複数のラインに配置される所定数の記憶素子に記憶されたデータを１ページとして管理する。各ＶＭが、同じ記憶内容のページを共通して利用する。メモリのハッシュ値記憶領域１４Ｂに各ページに対応させて各ページのハッシュ値が記憶される。ＣＰＵ１６上で動作するソフトウェア（ＶＭマネージャ）は、各ページに対応させて記憶された各ページのハッシュ値から対応表を作成し、対応表に基づいて同じ内容のページを検出する。ハッシュ値計算回路３４は、ページのハッシュ値を計算する。ハッシュ値は、各ページのデータの内容に応じかつ当該内容を要約する要約値である。以下、１ページのハッシュ値を計算する場合のハッシュ値計算回路３４の動作を説明する。なお、以下では、ハッシュ値を計算するためのハッシュ関数の一例として、ＣＲＣ３２関数が適用されたハッシュ値計算回路３４の動作を説明する。
【００３８】
１ページのハッシュ値を計算する際の第１番目のラインのデータを処理する初期の段階では、制御回路２０は、初期Ｓｅｅｄを選択するように、セレクタ５６を制御する。よって、セレクタ５６からは初期Ｓｅｅｄが第１の組合せ回路５８にCurrent stateとして入力される。また、第１の組合せ回路５８には、データ送信線Ｌ１１を介してエラー検出訂正回路３０から上記訂正可能なエラーが訂正されたデータが入力される。１ライン分のデータが入力されると、第１の組合せ回路５８は、次のようにデータを処理する。
【００３９】
例として、１ライン分のデータのビット数が６４ビットであるとする。第１の組合せ回路５８は、３２ビットのCurrent Stateと、入力された６４ビットのデータとをそれぞれビット単位に分割し、計９６ビットの入力とする。そして、９６ビットの入力から、別途予め定めた３２通りの異なる組み合わせ毎におよそ４８ビットずつを選択し、選択したおよそ４８ビットの全ＥＯＲを、３２通りの組み合わせの各々について計算する。そして、第１の組合せ回路５８は、３２通りの組み合わせの各々について計算したＥＯＲの値を、Next stateとして第２の組合せ回路６０と中間状態保持回路５４とに出力する。中間状態保持回路５４は、第１の組合せ回路５８から入力された値を保持する。
【００４０】
第２の組合せ回路６０は、第１の組合せ回路５８から入力された値をビット毎に全ビット反転させたものをハッシュ値として溜め込みバッファ３６に出力する。なお、第１番目のラインのデータが処理された段階で第２の組合せ回路６０からハッシュ値として出力された値は、１ページ分のデータのハッシュ値ではないので、制御回路２０は、当該ハッシュ値を記憶するように溜め込みバッファ３６を制御しない。
【００４１】
第２番目のラインから１ページの最終ラインのデータを処理するまで、制御回路２０は、中間状態保持回路５４からのデータを選択するように、セレクタ５６を制御する。よって、セレクタ５６からは中間状態保持回路５４からのデータが第１の組合せ回路５８に入力される。以降は、第１の組合せ回路５８及び第２の組合せ回路６０は、第２番目のラインから１ページの最終ラインまでのデータを、第１番目のラインのデータの処理と同様に処理する。
【００４２】
１ページの最終ラインのデータまで処理された段階で第２の組合せ回路６０からハッシュ値として出力された値は、１ページ分のデータのハッシュ値である。よって、制御回路２０は、当該ハッシュ値を記憶するように溜め込みバッファ３６を制御する。そして、ハッシュ値は、当該ハッシュ値に対応するページに対応して、ハッシュ値記憶領域１４Ｂに記憶される。
【００４３】
なお、１ページ分のデータは、開示の技術の「複数の所定単位分のデータ」の一例である。
【００４４】
従来では、ハッシュ値の計算をＣＰＵ１６が行っているので、メモリモジュール１４からのデータをＣＰＵ１６まで移動させなければならなかった。しかし、第１の実施形態では、図１に示すように、ハッシュ値計算回路３４及び溜め込みバッファ３６は、ＣＰＵ１６よりもメモリモジュール１４に物理的に近い位置に配置される。よって、第１の実施形態は、ハッシュ値の計算のためにメモリモジュール１４からのデータをＣＰＵ１６まで移動させず、より近い位置まで移動させれば済む。
【００４５】
また、上記のようなハッシュ値の計算を、ＥＯＲやＡＮＤ等の論理関数の組み合わせで実現するので、ハッシュ値計算回路３４を簡素なハードウェアで実現することができる。
【００４６】
ところで、メモリモジュール１４に記憶されたデータに対する処理は、スクラビング処理及びハッシュ値計算処理のみではない。ＣＰＵ１６は、主となる処理のために、メモリからデータを読み出したりメモリにデータを書き込んだりするように制御回路２０を制御する。具体的には、ＣＰＵ１６は、主となる処理のために、メモリからデータを読み出したりメモリにデータを書き込んだりすることを制御回路２０に命令する命令データ及びメモリに書き込むデータを読み書き用バッファ３２に記憶する。なお、主となる処理としては、ＣＰＵ１６上で実行されるＶＭ、ＶＭマネージャ、ＶＭ上で実行されるアプリケーションプログラム等の処理をいう。
【００４７】
ここで、ＣＰＵ１６の主となる処理のためにメモリからデータを読み出すこと等と、スクラビング処理及びハッシュ値計算処理のためにメモリからデータを読み出すこととの要求が、同時に発生することも考えられる。しかし、メモリモジュール１４におけるメモリからのデータ読み出しの処理能力には一定の限界がある。よって、このような場合に主となる処理を後回しにすると、主となる処理の実行時間を長くしてしまうおそれがある。
【００４８】
そこで、第１の実施形態では、制御回路２０は、ＣＰＵ１６が主となる処理を実行していない時間（アイドル時間）にスクラビング処理及びハッシュ値計算処理、並びにハッシュ値のメモリへの書き込み処理を実行する。即ち、制御回路２０は、メモリモジュールのデータバスやアドレスバス等のバスがアイドル状態の場合に、スクラビング処理及びハッシュ値計算処理、並びにハッシュ値のメモリへの書き込み処理を実行する。図４には、読み書き用バッファ３２からの命令の処理、ハッシュ値のメモリへの書き込み処理、及びスクラビング処理を調停する調停回路７０及び各処理のタイミングを調整するタイミング調整回路７２のブロック図が示される。なお、ハッシュ値の計算処理は、スクラビング処理で読み出されたデータを利用して行われるため、スクラビング処理と他の処理とを調停することにより、ハッシュ値の計算処理も調停される。
【００４９】
最初に、読み書き用バッファ３２の構成を説明する。図４に示すように、読み書き用バッファ３２は、比較回路６２、及び２つの入力端子のそれぞれに反転回路６４、６８が設けられたＡＮＤ回路６６を備える。また、ＣＰＵ１６は、主となる処理のために、メモリからデータを読み出したりメモリにデータを書き込んだりすることを制御回路２０に命令するための命令データを読み書き用バッファ３２に記憶する。読み書き用バッファ３２には、命令データを新たに記憶する領域を示すポインタを保持する、図示しない第１の保持部が設けられている。当該第１の保持部から命令データを新たに記憶する領域を示すポインタＢＵＦ＿ＷＰが比較回路６２の２つの入力端子の一方に入力される。
【００５０】
また、読み書き用バッファ３２に記憶された命令データは、記憶された時期が古い順に実行する。そのために、読み書き用バッファ３２には、既に実行した命令の次に実行する命令の命令データが記憶された領域を示すポインタを保持する、図示しない第２の保持部が設けられている。当該第２の保持部から次に実行する命令の命令データ記憶する領域を示すポインタＢＵＦ＿ＲＰが比較回路６２の他方の入力端子に入力される。
【００５１】
比較回路６２は、入力された２つの信号が等しい場合には、ハイ状態の信号を出力し、入力された２つの信号が異なる場合には、ロー状態の信号を出力する。
【００５２】
読み書き用バッファ３２に未実行の命令の命令データがある場合には、ポインタＢＵＦ＿ＷＰとポインタＢＵＦ＿ＲＰとは異なる領域を示す。この場合、比較回路６２はロー状態のＢＵＦ＿ＥＭＰＴＹ信号を出力する。一方、読み書き用バッファ３２における命令データに基づく命令が実行されたことにより、未実行の命令の命令データがない場合（アイドル状態）には、ポインタＢＵＦ＿ＷＰとポインタＢＵＦ＿ＲＰとは同じ領域を示す。この場合、比較回路６２はハイ状態のＢＵＦ＿ＥＭＰＴＹ信号を出力する。比較回路６２の出力端子は反転回路６４を介して、ＡＮＤ回路６６の一方の入力端子に接続される。
【００５３】
また、ＡＮＤ回路６６の他方の入力端子には、ＢＵＦ＿ＣＭＤ＿ＩＮＨ信号が反転回路６８を介して入力される。ＢＵＦ＿ＣＭＤ＿ＩＮＨ信号は、読み書き用バッファ３２の命令（コマンド）を制御回路２０が今は実行できない場合にはハイ状態、今実行できる場合にはロー状態となる信号である。例えば、メモリモジュール１４からデータを読み出しているときに、読み書き用バッファ３２に記憶された次の命令が、メモリにデータを書き込むための命令の場合などのように、読み書き用バッファ３２の命令を制御回路２０が実行できない場合がある。この場合には、ＢＵＦ＿ＣＭＤ＿ＩＮＨ信号がハイ状態であり、反転回路６８を介して、ロー状態の信号がＡＮＤ回路６６の他方の入力端子に入力される。
【００５４】
読み書き用バッファ３２のコマンドを制御回路２０が今実行できる場合には、ＢＵＦ＿ＣＭＤ＿ＩＮＨ信号がロー状態であり、反転回路６８を介して、ハイ状態の信号がＡＮＤ回路６６の他方の入力端子に入力される。この状態で、制御回路２０がアイドル状態でない場合、即ち、命令を実行する必要がある場合には、ＢＵＦ＿ＥＭＰＴＹ信号がロー状態であり、反転回路６４を介して、ＡＮＤ回路６６の一方の入力端子にハイ状態の信号が入力される。よって、ＡＮＤ回路６６は、ハイ状態のＢＵＦ＿ＲＥＱ信号を制御回路２０に出力する。すなわち、ＢＵＦ＿ＲＥＱ信号がハイ状態の場合には、読み書きバッファ３２からメモリへ読み出しまたは書き込みの要求があることを示し、ロー状態の場合には、要求がないことを示す。
【００５５】
次に、上記各処理を調停するための制御回路２０の構成を説明する。図４に示すように、制御回路２０は、メモリスクラビング制御回路２２及びハッシュ値計算制御回路２４の配置位置とは異なる位置に、調停回路７０及びタイミング調整回路７２を有する。
【００５６】
調停回路７０は、ＡＮＤ回路７４と、３つの入力端子の１つのみに反転回路８０が設けられたＡＮＤ回路７６と、４つの入力端子の２つの入力端子のそれぞれに反転回路８２、反転回路８４とが設けられたＡＮＤ回路７８とを備える。
【００５７】
ＡＮＤ回路７４の一方の入力端子、ＡＮＤ回路７６の、反転回路８０が設けられていない一方の入力端子、及びＡＮＤ回路７８の、反転回路８２、８４が設けられていない一方の入力端子には、ＢＵＳ＿ＣＭＤ＿ＲＥＡＤＹ信号が入力される。ＢＵＳ＿ＣＭＤ＿ＲＥＡＤＹ信号は、コマンドを出せるタイミングを示す信号であり、図示しない出力部から出力される。
【００５８】
ＡＮＤ回路７４の他方の入力端子には、ＢＵＦ＿ＲＥＱ信号が入力される。また、ＢＵＦ＿ＲＥＱ信号は、ＡＮＤ回路７６の入力端子に設けられた反転回路８０と、ＡＮＤ回路７８の入力端子に設けられた反転回路８２とに入力される。
【００５９】
溜め込みバッファ３６には、ＨＡＳＨ＿ＷＲ＿ＲＥＱ信号を、制御線Ｌ６を介して制御回路２０に出力する、図示しない出力回路が設けられている。ＨＡＳＨ＿ＷＲ＿ＲＥＱ信号は、溜め込みバッファ３６に記憶された複数のハッシュ値のメモリへの記憶を要求することを示す信号である。複数のハッシュ値とは、メモリへの書き込み単位であるメモリの１ライン分に記憶可能な個数のハッシュ値である。ＨＡＳＨ＿ＷＲ＿ＲＥＱ信号は、ＡＮＤ回路７６の、反転回路８０が設けられていない他方の入力端子と、ＡＮＤ回路７８の入力端子側に設けられた反転回路８４とに入力される。
【００６０】
制御回路２０には、ＣＰＵ１６から読み書き用バッファ３２を介して、スクラビング処理の要求がある場合にハイ状態となり、要求がない場合にロー状態となるＳＣＲＵＢ＿ＲＤ＿ＲＥＱ信号が入力される。ＳＣＲＵＢ＿ＲＤ＿ＲＥＱ信号は、ＡＮＤ回路７８の、反転回路８２、８４が設けられていない他方の入力端子に入力される。
【００６１】
制御回路２０がＣＰＵ１６からの命令を実行する必要がある状態（アイドル状態でない状態）の場合、ＡＮＤ回路６６から、ハイ状態のＢＵＦ＿ＲＥＱ信号がＡＮＤ回路７４に出力される。この状態でハイ状態のＢＵＳ＿ＣＭＤ＿ＲＥＡＤＹ信号がＡＮＤ回路７４に入力されると、ＡＮＤ回路７４は、ハイ状態のＥＸＥＣ＿ＢＵＦ＿ＣＭＤ信号を出力する。なお、ハイ状態のＢＵＦ＿ＲＥＱ信号は、ＡＮＤ回路７６の入力端子に設けられた反転回路８０、ＡＮＤ回路７８の入力端子に設けられた反転回路８２に入力される。よって、制御回路２０がアイドル状態でない状態の場合、ＡＮＤ回路７６及びＡＮＤ回路７８から出力される信号はロー状態となる。よって、スクラビング処理、ハッシュ値のメモリへの書きこみ、及び溜め込みバッファ３６に記憶されたハッシュ値のメモリへの書き込みの指示がされない。
【００６２】
一方、制御回路２０がアイドル状態の場合、ＢＵＦ＿ＲＥＱ信号はロー状態となる。よって、ＡＮＤ回路７４から出力される信号はロー状態となり、ＣＰＵ１６からのコマンドは実行されない。ＢＵＦ＿ＲＥＱ信号がロー状態の場合には、反転回路８０を介してＡＮＤ回路７６にハイ状態の信号が入力され、反転回路８２を介してＡＮＤ回路７８にハイ状態の信号が入力される。
【００６３】
制御回路２０がアイドル状態で、ＨＡＳＨ＿ＷＲ＿ＲＥＱ信号がロー状態で、かつハイ状態のＳＣＲＵＢ＿ＲＤ＿ＲＥＱ信号及びＢＵＳ＿ＣＭＤ＿ＲＥＡＤＹ信号がＡＮＤ回路７８に入力された場合に限って、ＡＮＤ回路７８は、次の信号を出力する。ＡＮＤ回路７８は、スクラビング処理を実行することを示すハイ状態のＥＸＥＣ＿ＳＣＲＵＢ＿ＲＤ＿ＣＭＤ信号を出力する。
【００６４】
また、制御回路２０がアイドル状態で、かつハイ状態のＨＡＳＨ＿ＷＲ＿ＲＥＱ信号及びＢＵＳ＿ＣＭＤ＿ＲＥＡＤＹ信号がＡＮＤ回路７６に入力された場合に限って、ＡＮＤ回路７６は、次の信号を出力する。ＡＮＤ回路７６は、溜め込みバッファ３６に記憶されたハッシュ値のメモリへの書き込みを実行することを示すＥＸＥＣ＿ＨＡＳＨ＿ＷＲ＿ＣＭＤ信号を出力する。なお、ＨＡＳＨ＿ＷＲ＿ＲＥＱ信号は、ＡＮＤ回路７８の入力端子に設けられた反転回路８４に入力される。そのため、ＨＡＳＨ＿ＷＲ＿ＲＥＱ信号がハイ状態の場合には、ＡＮＤ回路７８からハイ状態のＥＸＥＣ＿ＳＣＲＵＢ＿ＲＤ＿ＣＭＤ信号は出力されない。
【００６５】
タイミング調整回路７２は、ＡＮＤ回路７４、ＡＮＤ回路７６、及びＡＮＤ回路７８のそれぞれの出力端子に接続された、タイミングを調整するための記憶素子８６〜８８、記憶素子９０〜９２、及び記憶素子９４〜９６を備える。
【００６６】
タイミング調整回路７２は、ＡＮＤ回路７４、ＡＮＤ回路７６、及びＡＮＤ回路７８の各々から信号が出力されてから、所定のタイミングで次の制御を行うために、各処理の実行を指示する信号がセレクタ等に入力されるタイミングを調整する。各記憶素子８６〜８８、９０〜９２、及び９４〜９６には、ＡＮＤ回路７４、ＡＮＤ回路７６、及びＡＮＤ回路７８の各々から出力された信号が１サイクル毎にシフトしながら記憶される。また、各記憶素子８６〜８８、９０〜９２、及び９４〜９６は、記憶した信号を出力する。図４において、各記憶素子８６〜８８、９０〜９２、及び９４〜９６から出力された信号の末尾の「Ｔ１」は、１段目の記憶素子からの出力を表し、「Ｔｎ」は、ｎ段目の記憶素子からの出力を表す。従って、次の制御を行う所定のタイミングに応じた段数の記憶素子から信号を引き出し、次の制御を行うためのセレクタ等に出力する。これにより、ＡＮＤ回路７４、ＡＮＤ回路７６、及びＡＮＤ回路７８の各々から出力された信号により指示される処理のタイミングを調整することができる。
【００６７】
以上説明したように、第１の実施形態では、読み書き用バッファ３２からの命令の処理、ハッシュ値のメモリへの書き込み処理、及びスクラビング処理が調停されると共に、各処理のタイミングが調整される。
【００６８】
次に、図５及び図６のタイミングチャートを参照して、データ処理装置１０の作用を説明する。最初に、ＣＰＵ１６の主となる処理のためにメモリからデータを読み出す処理を説明する。
【００６９】
ＣＰＵ１６の主となる処理のためにメモリからデータを読み出す命令の命令データが読み書き用バッファ３２に書き込まれ、図５（Ａ）に示すように、読み書き用バッファ３２から制御回路２０にハイ状態のＢＵＦ＿ＲＥＱ信号（図４も参照）が入力される。そして図５には示していないＢＵＳ＿ＣＭＤ＿ＲＥＡＤＹ信号がハイ状態になったときに、図５（Ｂ）に示すように、制御回路２０は、読み書き用バッファ３２にハイ状態のＥＸＥＣ＿ＢＵＦ＿ＣＭＤ信号を出力する。ＥＸＥＣ＿ＢＵＦ＿ＣＭＤ信号は図４の記憶素子８６〜８８によりタイミングが調整され、制御回路２０は、ハイ状態のＥＸＥＣ＿ＢＵＦ＿ＣＭＤ信号を出力したときから一定期間経過したときに、次のように、第１のセレクタ２６を制御する。制御回路２０は、図５（Ｃ）（ＪＡ参照）に示すように、ＣＰＵ１６から読み書き用バッファ３２に書き込まれた、読み出しのコマンド及びアドレスを選択するように第１のセレクタ２６を制御する。よって、図５（Ｄ）（ＫＡ参照）及び図５（Ｆ）（ＬＡ参照）に示すように、読み書き用バッファ３２からの、読み出しのコマンド及びアドレスを示す信号がメモリモジュール１４に入力される。
【００７０】
メモリモジュール１４は、入力された信号に基づいて、指定されたアドレスからデータを読み出し、図５（Ｇ）に示すように、読み出されたデータ（Ｒｅａｄデータ）を、３ステート制御回路２８を介してエラー検出訂正回路３０に入力する。エラー検出訂正回路３０では、Ｒｅａｄデータについてエラー検出及び訂正の処理が施され、図５（Ｈ）に示すように、エラー検出及び訂正の処理が施されたＲｅａｄデータ（訂正済データ）が読み書き用バッファ３２に記憶される。その後、読み書き用バッファ３２に記憶された訂正済データはデータ送信線Ｌ１０６を介してＣＰＵ１６に送出され、ＣＰＵ１６が主となる処理を実行する。
【００７１】
次に、制御回路２０がアイドル状態となった時のメモリのスクラビング処理を説明する。上記のように制御回路２０がアイドル状態の場合には、ＢＵＦ＿ＲＥＱ信号はロー状態となる。よって、図４に示すＡＮＤ回路７８に、反転回路８２からハイ状態の信号が入力される。ここでは、ＨＡＳＨ＿ＷＲ＿ＲＥＱ信号はロー状態であるものとする。即ち、ＡＮＤ回路７８に反転回路８４からハイ状態の信号が入力される。ハイ状態のＢＵＳ＿ＣＭＤ＿ＲＥＤＹ信号、及びＣＰＵ１６からのハイ状態のＳＣＲＵＢ＿ＲＤ＿ＲＥＱ信号がＡＮＤ回路７８に入力されると、ハイ状態のＥＸＥＣ＿ＳＣＲＵＢ＿ＲＤ＿ＣＭＤ信号がメモリスクラビング制御回路２２に入力される。また、第１のアドレス保持回路２２Ａには、予め、図示されない手段で指定されたアドレスが保持されている。
【００７２】
メモリスクラビング制御回路２２は、図５（Ｃ）（ＪＢ参照）に示すように、制御回路２０からの、読み出しのコマンド及びアドレスを示す信号を選択するように、第１のセレクタ２６を制御する信号を出力する。メモリスクラビング制御回路２２は、図５（Ｅ）（ＭＢ参照）に示すように、データ記憶領域１４Ａのスクラビング処理の対象となる領域の最初のラインを示すアドレス及び当該ラインのデータを読み出すコマンドを第１のセレクタ２６に出力する。第１のセレクタ２６は、制御回路２０からのコマンド及びアドレスを示す信号を選択するように制御されるので、図５（Ｆ）（ＬＢ参照）に示すように、制御回路２０からの、読み出しのコマンド及びアドレスを示す信号がメモリモジュール１４に出力される。
【００７３】
メモリモジュール１４は、入力された信号に基づいて、指定されたアドレスからデータを読み出し、図５（Ｇ）に示すように、読み出されたデータ（Ｒｅａｄデータ）は３ステート制御回路２８を介してエラー検出訂正回路３０に入力される。エラー検出訂正回路３０では、Ｒｅａｄデータについてエラー検出及び訂正の処理が施される。図５（Ｈ）に示すように、エラー検出及び訂正の処理が施されたＲｅａｄデータ（訂正済データ）が、読み書き用バッファ３２及びハッシュ値計算回路３４に入力される。なお、Ｒｅａｄデータに訂正可能なエラーがあった場合には、読み書き用バッファ３２に記憶された訂正済データは、所定のタイミングで、メモリの同じ領域に書き戻される。
【００７４】
データ記憶領域１４Ａのスクラビング処理の対象となる領域において、ページ内の最初のラインの訂正済データがハッシュ値計算回路３４に入力される時は、ハッシュ値計算制御回路２４は、次のように、セレクタ５６（図３も参照）を制御する。ハッシュ値計算制御回路２４は、図５（Ｉ）に示すように、初期Ｓｅｅｄを選択するようにセレクタ５６（図３も参照）を制御する。ハッシュ値計算回路３４は、各ラインの例えば１／８の数のデータ毎にハッシュ値の中間結果を更新し、ページ先頭からその時点までのハッシュ値を出力する。上記のように１ページは、複数のラインのデータを有する。１ページ分の複数のラインの訂正済データが処理された時に第２の組合せ回路６０から出力された値が、１ページのハッシュ値である。そこで、ハッシュ値計算制御回路２４は、図５（Ｋ）に示すように、１ページ分の複数のラインの訂正済データが処理された時に、第２の組合せ回路６０から出力されたハッシュ値を記憶するように溜め込みバッファ３６を制御する。
【００７５】
以後、データ記憶領域１４Ａのスクラビング処理の対象となる全ての領域の最終のラインまで以上と同様の処理が実行される。メモリスクラビング制御回路２２は、各ラインのスクラビング処理が実行される毎に、次のラインのアドレスに第１のアドレス保持回路２２Ａのアドレスをインクリメントする。
【００７６】
なお、図５に示す例では、メモリモジュール１４は、１つのラインを読み出した場合、直ちに次のラインのデータを読み出し、メモリコントローラ１８に出力している。しかし、スクラビング処理は本来、主となる処理の邪魔にならないように、ＣＰＵ１６がアイドル状態のときに行われるのが普通であるため、１つのラインのメモリを読み出した後、時間を空けて、次のラインのデータをメモリに読み出す場合もある。
【００７７】
ところで、溜め込みバッファ３６には、全てのページのハッシュ値を記憶する程の記憶容量はない。そこで、第１の実施形態では、メモリの１ライン分に記憶可能な複数のハッシュ値が溜め込みバッファ３６に記憶された場合に、溜め込みバッファ３６に記憶された複数のハッシュ値をメモリのハッシュ値記憶領域１４Ｂに記憶する。この処理を、図６のタイミングチャートを参照して説明する。
【００７８】
溜め込みバッファ３６は、メモリの１ライン分の複数のハッシュ値が記憶された場合に、図４に示すＨＡＳＨ＿ＷＲ＿ＲＥＱ信号をハイ状態にして制御回路２０に出力する、図示しない出力回路を備える。溜め込みバッファ３６にメモリの１ライン分の複数のハッシュ値が記憶されると、ハイ状態のＨＡＳＨ＿ＷＲ＿ＲＥＱ信号が、ＡＮＤ回路７６に入力される。この状態で、さらに、読み書き用バッファ３２から出力されるＢＵＦ＿ＲＥＱ信号がロー状態で、反転回路８０からハイ状態の信号がＡＮＤ回路７６に入力され、かつハイ状態のＢＵＳ＿ＣＭＤ＿ＲＥＡＤＹ信号がＡＮＤ回路７６に入力されたとする。この場合、ＡＮＤ回路７６からハイ状態のＥＸＥＣ＿ＨＡＳＨ＿ＷＲ＿ＣＭＤ信号が出力され、ハッシュ値計算制御回路２４に入力される。
【００７９】
ハイ状態のＥＸＥＣ＿ＨＡＳＨ＿ＷＲ＿ＣＭＤ信号が入力されたハッシュ値計算制御回路２４は、図６（Ｌ）に示すように、溜め込みバッファ３６にハッシュ値の読み出し指示の信号を出力する。ハッシュ値計算制御回路２４は、記憶素子９０〜９２を利用し、ハッシュ値の読み出し指示の信号を出力したときから所定時間後に、制御回路２０からの書き込みのコマンド及びアドレスを示す信号を選択させる信号を第１のセレクタ２６に出力する。よって、書き込みのコマンド及びアドレスを示す信号が、図６（Ｅ）に示すように、制御回路２０から出力されると共に、図６（Ｆ）に示すように、第１のセレクタ２６を介して、メモリモジュール１４に出力される。従って、メモリモジュール１４は、所定時間後の次のタイミングでハッシュ値を１ライン分書き込むことができる状態となる。
【００８０】
そこで、ハッシュ値計算制御回路２４からの、図６（Ｌ）に示すハッシュ値の読み出し指示の信号に応じて、図６（Ｍ）に示すように、溜め込みバッファ３６から、メモリの１ライン分の複数のハッシュ値が読み出されて、第２のセレクタ３８に出力される。制御回路２０は、図６（Ｍ）に示す複数のハッシュ値が第２のセレクタ３８に出力されるタイミングで、図６（Ｎ）に示すように、溜め込みバッファ３６からのデータを選択するように制御する信号を第２のセレクタ３８に出力する。なお、３ステート制御回路２８も第２のセレクタ３８と同様に制御する。よって、溜め込みバッファ３６から読み出された、メモリの１ライン分の複数のハッシュ値が、第２のセレクタ３８及び３ステート制御回路２８を介してメモリモジュール１４に出力される。そして、ハッシュ値記憶領域１４Ｂにおける、指定されたアドレスの領域に、当該複数のハッシュ値が書き込まれる。なお、ハッシュ値を書き込むアドレスは、第２のアドレス保持回路２４Ａに、図示されない手段で予め設定されており、ハッシュ値をメモリに書き込んだ際には、書き込んだ分だけ第２のアドレス保持回路２４Ａに設定されたアドレスが増加される。
【００８１】
次に、第１の実施形態の効果を説明する。
【００８２】
（第１の効果）
従来、図７（Ａ）に示すように、ＣＰＵ上でＶＭマネージャが、ハッシュ値の計算のために、メモリからデータを読み出す指示をする。当該データを読み出す指示に基づいて、メモリコントローラは、図７（Ｂ）に示すように、メモリモジュールに、データの読み出しを指示する。メモリモジュールは、図７（Ｃ）に示すように、データを読み出し、メモリコントローラに出力し、メモリコントローラは、図７（Ｂ）に示すように、メモリからのデータをＣＰＵに出力する。ＶＭマネージャは、図７（Ａ）に示すように、ハッシュ値を計算し、続いて、ハッシュ値をハッシュ値記憶領域に記憶するようにメモリコントローラに指示する。メモリコントローラは、図７（Ｂ）に示すように、ハッシュ値を記憶するようにメモリモジュールに指示する。メモリモジュールは、ハッシュ値を記憶する。
【００８３】
以上のハッシュ値計算処理とは異なるタイミングで、メモリコントローラは、図７（Ｂ）に示すように、スクラビング処理のためにメモリからデータを再度読み出すように指示する。メモリモジュールは、図７（Ｃ）に示すように、データを再度読み出し、メモリコントローラに出力する。読み出されたデータがメモリコントローラに入力されると、図７（Ｂ）に示すように、メモリコントローラ内に設けられたエラー検出訂正装置が、エラー検出及び訂正の処理を実行する。訂正可能なエラーがあった場合には、訂正後のデータが書き戻されるように、メモリモジュールに指示する。訂正後のデータがメモリに書き戻される。
【００８４】
以上説明したように従来では、各ページのハッシュ値を計算するためにメモリをスキャンすることと、メモリのスクラビング処理のためにメモリをスキャンすることとは、無関係に行われる。従って、メモリの同じ記憶素子から、ハッシュ値を計算するためにデータが読み出されると共に、この読み出しとは異なるタイミングで、メモリのスクラビング処理のに当該データが再度読み出される。
【００８５】
一方、第１の実施形態では、図８（Ａ）に示すように、ＣＰＵ１６上でＶＭマネージャがアドレスを指示すると、メモリコントローラ１８は、図８(Ｂ)に示すように、スクラビング処理及びハッシュ値計算処理のために、メモリからデータを読み出す指示をする。メモリモジュール１４は、図８(Ｃ)に示すように、メモリからデータを読み取り、読み取ったデータをメモリコントローラ１８に出力する。メモリコントローラ１８では、図８(Ｂ)に示すように、スクラビング処理及びハッシュ値計算処理を実行する。即ち、メモリコントローラ１８は、メモリから読み出したデータに、訂正できるエラーがあった場合には、当該エラーを訂正して、メモリに書き戻す。また、メモリコントローラ１８は、スクラビング処理のために読み出しかつ上記エラー検出訂正処理が実行された訂正済みのデータを用いて１ページのハッシュ値を計算し、ハッシュ値をメモリに記憶させる。
【００８６】
従来では、図７(Ａ)に示すように、ＣＰＵ上でＶＭマネージャがハッシュ値を計算する。これに対し、第１の実施形態では、メモリコントローラ１８内にハッシュ値計算回路３４を設けている。そして、ハッシュ値計算回路３４は、スクラビング処理のためにメモリから読み出されたデータを利用して、すなわち、ハッシュ値計算のためにメモリから同一のデータを再度読み出すことなく、各ページのハッシュ値を計算する。このように、ＣＰＵ１６とは別に設けられたハッシュ値計算回路が、メモリコントローラ１８が通常備えているメモリスクラビングの機能を利用してハッシュ値を計算するため、ページ毎のハッシュ値を計算する際のＣＰＵ１６の負荷を軽減することができる。従って、ハッシュ値の計算のためにＣＰＵ１６の主となる処理の実行を阻害することを防止することができる。
【００８７】
（第２の効果）
ハッシュ値の計算は、ＥＯＲやＡＮＤ等の論理関数とシフトの組み合わせで行うので、ハッシュ値計算回路３４を簡素なハードウェアで実現することができる。よって、第１の実施形態は、メモリコントローラ１８への少量の回路の追加で、ハッシュ値の計算の分、ＣＰＵ１６の負荷を減らすことができる。
【００８８】
（第３の効果）
第１の実施形態では、制御回路２０が、ＣＰＵ１６の主となる処理を実行しないアイドル状態の場合に、スクラビング処理及びハッシュ値計算処理、並びにハッシュ値のメモリへの書きこみ処理を実行する。よって、第１の実施形態は、ＣＰＵ１６の主となる処理のためにメモリからデータを読み出す処理の実行時間が長くなる状態が生ずることを従来技術より少なくすることができる。
【００８９】
（第４の効果）
従来、ハッシュ値の計算をＣＰＵが行っているので、メモリモジュールからのデータをＣＰＵまで移動させなければならなかった。しかし、第１の実施形態では、図１に示すように、ハッシュ値計算回路３４及び溜め込みバッファ３６は、ＣＰＵ１６よりもメモリモジュール１４に物理的に近い位置に配置される。よって、第１の実施形態は、ハッシュ値の計算のためにメモリモジュール１４からのデータをＣＰＵ１６まで移動させず、より近い位置まで移動させれば済む。従って、第１の実施形態は、従来技術より電力消費を抑えることができる。
【００９０】
（第５の効果）
第１の効果で述べたように、第１の実施形態は、スクラビング処理のためにメモリから読み出したデータを用いて各ページのハッシュ値を計算する。従って、メモリの対象の領域のスキャンを一度で済ませることができる。よって、第１の実施形態は、スクラビング処理及びハッシュ値計算処理における電力消費を、図７に示す例よりも減らすことができる。
【００９１】
次に、第１の実施形態の変形例を説明する。
【００９２】
（第１の変形例）
第１の変形例では、メモリコントローラ１８は、制御回路２０に代えて、ＭＰＵ（マイクロプロセッサ：Micro−Processing Unit）を備える。第１の変形例では、エラー検出訂正回路３０及びハッシュ値計算回路３４の少なくとも一方が省略される。第１の変形例では、エラー検出訂正回路３０及びハッシュ値計算回路３４の少なくとも一方が省略されたことに対応してエラー検出及び訂正の処理とハッシュ値の計算との少なくとも一方をプログラムに従ってＭＰＵが実行する。
【００９３】
第１の変形例は、第１の実施形態の第１〜第５の効果の他に、エラー検出訂正回路３０及びハッシュ値計算回路３４の少なくとも一方を省略するので、メモリコントローラ１８の構成を、第１の実施形態よりも簡易にできる効果を有する。
【００９４】
以下、エラー検出訂正回路３０を用いるがハッシュ値計算回路３４を省略し、エラー検出及び訂正の処理後の訂正済データがＭＰＵに入力されかつハッシュ値の計算をプログラムに従ってＭＰＵが実行する例を説明する。なお、データ処理のプログラムは、ＭＰＵ内に設けられるＲＯＭに記憶される。ＭＰＵはＲＯＭから当該プログラムを読み出し、以下の処理を実行する。図９には、ＭＰＵが実行するデータ処理の一例がフローチャートとして示される。図９に示すように、ＭＰＵは、ステップ１０２で、溜め込みバッファ３６にハッシュ値を記憶する領域（エントリ）を識別する変数ｎを０に初期化する。ＭＰＵは、ステップ１０４で、上記と同様にスクラビング処理を実行するように各素子を制御すると共に、スクラビング処理の実行に伴い得られた訂正済データに基づいて１ページ分のハッシュ値を計算する。ＭＰＵは、ステップ１０６で、溜め込みバッファ３６のｎ番エントリに、ステップ１０４で計算されたハッシュ値を記憶する。
【００９５】
ＭＰＵは、ステップ１０８で、変数ｎを１インクリメントし、ステップ１１０で、変数ｎで識別されるエントリに基づいて、メモリの１ライン（メモリへの書き込み単位）分溜まったか否かを判断する。ステップ１１０の判定結果が否定判定の場合には、データ処理はステップ１０４に戻って、ＭＰＵは、以上の処理（ステップ１０４〜ステップ１１０）を実行する。ステップ１１０の判定結果が肯定判定の場合には、データ処理はステップ１１２に進む。ＭＰＵは、ステップ１１２で、メモリモジュール１４へのバスがアイドル状態の場合に、溜め込みバッファ３６に記憶されたメモリの１ライン分の複数のハッシュ値をメモリの指定されたアドレスの領域に書き出す。
【００９６】
ＭＰＵは、ステップ１１４で、溜め込みバッファ３６を空にし、メモリの書き込みアドレスを１ライン分進める。ＭＰＵは、ステップ１１６で、メモリの書き込みアドレスに基づいて、メモリのスクラビング処理の対象の領域の全てについて処理が終了したか否かを判断する。ステップ１１６の判定結果が否定判定の場合には、データ処理はステップ１０２に戻って、ＭＰＵは、以上の処理（ステップ１０２〜ステップ１１６）を実行する。ステップ１１６の判定結果が肯定判定の場合には、データ処理は終了する。
【００９７】
上記例は、第１の実施形態の第１〜第５の効果の他に、ハッシュ値計算回路３４を省略するので、メモリコントローラ１８の構成を、第１の実施形態のメモリコントローラ１８よりも簡易にすることができる。
【００９８】
（第２の変形例）
第１の実施形態及び第１の変形例では、データ記憶領域１４Ａの全ての領域について、スクラビング処理を実行する。第２の変形例では、第１に、データ記憶領域１４Ａの全ての領域ではなく選択された領域のみについて、第２に、ハッシュ値記憶領域１４Ｂについてもスクラビング処理を実行する。第１の場合は、必要な場所のみについてスクラビング処理を実行し、第２の場合は、ハッシュ値記憶領域１４Ｂのデータについてエラーを訂正することができる。
【００９９】
（第３の変形例）
第１の実施形態におけるハッシュ値の計算方法は一例であり、第３の変形例では、各ページのデータの内容に応じかつ当該内容を要約するハッシュ値を求めることができる上記例以外の計算方法で要約値を計算する。例えば、Bob Jenkins関数、ＭＤ５（Message Digest Algorithm 5）、ＳＨＡ（Secure Hash Algorithm）−１等が適用可能である。
【０１００】
（第４の変形例）
第１の実施形態は、ＶＭ間のメモリ共有を例にとり説明した。第４の変形例は、通常のＯＳ（オペレーティングシステム：Operating System）の仮想メモリにおける、ページ重複排除を支援する。
【０１０１】
（その他の変形例）
第１の実施形態では、１ページのデータの数は、メモリの１ラインのデータの整数倍や１ラインのデータの内の１／８の合計４つのデータ（上記Ａ、Ｂ、Ｃ、及びＤ参照）の整数倍としているが、整数倍でなくともよい。
【０１０２】
また、第１の実施形態では、各ページのハッシュ値を計算する場合、エラー検出訂正回路３０からのデータがハッシュ値計算回路３４に入力される。即ち、ハッシュ値計算回路３４は、エラー検出訂正回路３０からのデータをそのまま用いて各ページのハッシュ値を計算する。開示の技術では、エラー検出訂正回路３０からのデータではなく、メモリから読み出され、エラー検出訂正回路３０に入力される前のデータを用いて各ページのハッシュ値を計算してもよい。
【０１０３】
また、第１の実施の形態では、スクラビング処理のために読み出されたデータをハッシュ値の計算に利用する場合について説明したが、これに限定されない。ページ毎のハッシュ値を計算する場合と同様に、メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出すことを含む処理により呼び出された処理を利用することにより、第１の実施形態と同様の効果が得られる。
【０１０４】
更に、ハッシュ値計算制御回路２４、ハッシュ値計算回路３４、溜め込みバッファ３６第２のセレクタ３８を、メモリコントローラ１８の外に配置してもよい。
【０１０５】
また、ハッシュ値計算回路３４及び溜め込みバッファ３６は、ＣＰＵ１６よりもメモリモジュール１４に物理的に近い位置に配置される。しかし、ハッシュ値計算回路３４及び溜め込みバッファ３６の少なくとも一方とメモリモジュール１４との間のデータの移動距離は、ＣＰＵ１６とメモリモジュール１４との間のデータの移動距離より長くてもよい。
【０１０６】
［第２の実施形態］
次に、第２の実施形態を説明する。第２の実施形態のデータ処理装置１０の構成は、第１の実施形態のデータ処理装置１０とほぼ同様である。そこで、以下、第２の実施形態のデータ処理装置１０の構成のうち、第１の実施形態とは異なる部分のみを説明し、第１の実施形態と同一の構成の部分には同一の符号を付して、その説明を省略する。
【０１０７】
図１０には、第２の実施形態のデータ処理装置１０のブロック図が示される。図１０に示すように、ＣＰＵ１６にはキャッシュ１６Ｃが設けられる。メモリには、各ラインに対応して、当該ライン内のデータのアドレスに対応して、後述するディレクトリ情報を記憶するディレクトリ情報記憶領域１４Ｃが設けられる。
【０１０８】
メモリコントローラ１８は、ディレクトリチェック回路１２２及び第３のセレクタ１２４を更に備える。エラー検出訂正回路３０からのデータ送信線Ｌ１１は、ディレクトリチェック回路１２２の入力端子にも接続される。ディレクトリチェック回路１２２の出力端子は制御線Ｌ２２を介して、第３のセレクタ１２４の制御信号を入力する入力端子に接続される。ハッシュ値計算回路３４の出力端子に接続されたデータ送信線Ｌ１２は、第３のセレクタ１２４の２つの入力端子の一方に接続される。第３のセレクタ１２４の他方の入力端子には、無効を示す値（例えば、全てのビットが０）が入力される。ハッシュ値計算制御回路２４からの、ハッシュ値を記憶する指示信号を送信するための制御線Ｌ６は、ディレクトリチェック回路１２２にも接続される。
【０１０９】
次に、第２の実施形態のデータ処理装置１０の作用を説明する。第２の実施形態のデータ処理装置１０の作用は、第１の実施形態のデータ処理装置１０とほぼ同様である。そこで、以下、第２の実施形態のデータ処理装置１０の作用のうち、主として第１の実施形態とは異なる部分のみを説明する。
【０１１０】
第２の実施形態では、ＣＰＵ１６のキャッシュ１６Ｃがライトバック(Write back)方式である。即ち、ライトバック方式では、メモリへデータを新たに書き込む場合、まずキャッシュ１６Ｃにデータが書き込まれ、メモリモジュール１４まではデータは転送されない。そして、キャッシュ１６Ｃに新たなデータを書き込むための領域が無くなった場合等に、キャッシュ１６Ｃに書き込まれているキャッシュラインのうち、例えばＣＰＵ１６による使用回数が少ないキャッシュラインのデータがメモリに書き込まれる。よって、メモリに新たに書き込むデータがキャッシュ１６Ｃに書き込まれた段階では、新たなデータはキャッシュ１６Ｃにのみ存在し、メモリには書き込まれていない。
【０１１１】
従って、この段階で、メモリから読み出されたデータを利用して各ページのハッシュ値を計算すると、キャッシュ１６Ｃに記憶されている新たなデータを含むページのハッシュ値は、書き換えられていない古いデータに基づいて計算される。よって、新たなデータにより本来一致していないページが、古いデータに基づくハッシュ値を参照したため、他のページとたまたま一致し、複数のＶＭにより共有されるページの候補（以下、「共有候補」という）となる場合がある。第２の実施形態は、このようなキャッシュ１６Ｃがライトバック方式のために本来一致していないページが複数のＶＭの共有候補となることに対処する。
【０１１２】
図１１には、ＣＰＵ１６とメモリコントローラ１８との間で入出力されるデータの内容が示される。図１１に示すように、ＣＰＵ１６からメモリコントローラ１８には次のデータが入力される。ＭＣ＿ＩＮ＿ＶＡＬＩＤ、ＭＣ＿ＩＮ＿ＣＯＭＭＡＮＤ＿ＩＤ、ＭＣ＿ＩＮ＿ＯＰＣＯＤＥ、ＭＣ＿ＩＮ＿ＲＥＱＵＥＳＴＥＲ＿ＩＤ、ＭＣ＿ＩＮ＿ＡＤＤＲＥＳＳ、及びＭＣ＿ＩＮ＿ＤＡＴＡである。かっこ内の数字はデータ送信線Ｌ１０６の一部の線の数を示す。上記ＭＣ＿ＩＮ＿ＯＰＣＯＤＥは、ＣＰＵ１６からの命令の具体的な内容を示すコードであり、０００、０１０、０１１、１１１等がある。
【０１１３】
図１１の例では、「０００」は、メモリからデータを単に読み出すことを示す（Read（Share））。「１００」は、データをメモリコントローラ１８に戻すことを示す（Write back）。「０１０」は、データを独占的に利用するための読み出しを示す（Read（Own））。この場合、メモリに書き戻されるデータは書き換えられる可能性がある。「０１１」も同様に、データを独占的に利用するための読み出しを示す。ただし、該当のデータ自体はすでに要求元のＣＰＵ１６が非独占的に持っており、メモリから読み出したデータをＣＰＵ１６へ転送する必要がないことを示す（（Dir Change（Own)）。
【０１１４】
ディレクトリ情報は、ＭＣ＿ＩＮ＿ＯＰＣＯＤＥ、及びＭＣ＿ＩＮ＿ＲＥＱＵＥＳＴＥＲ＿ＩＤの内容に応じて定まる。ＭＣ＿ＩＮ＿ＡＤＤＲＥＳＳは、ＣＰＵ１６が処理するデータが記憶されるアドレスを示す。制御回路２０は、ＭＣ＿ＩＮ＿ＡＤＤＲＥＳＳが示すアドレスに対応して、ＭＣ＿ＩＮ＿ＯＰＣＯＤＥ及びＭＣ＿ＩＮ＿ＲＥＱＵＥＳＴＥＲ＿ＩＤに応じたディレクトリ情報がディレクトリ情報記憶領域１４Ｃに記憶されるように、メモリモジュール１４を制御する。
【０１１５】
なお、メモリコントローラ１８からＣＰＵ１６には、ＭＣ＿ＯＵＴ＿ＶＡＬＩＤ、ＭＣ＿ＯＵＴ＿ＣＯＭＭＡＮＤ＿ＩＤ、ＭＣ＿ＯＵＴ＿ＤＡＴＡ、及びＭＣ＿ＯＵＴ＿ＥＲＲＯＲが出力する。
【０１１６】
スクラビング処理及びハッシュ値計算のためにメモリから各ラインのデータが読み出される際には、ディレクトリ情報記憶領域１４Ｃの内容も読み出される。エラー検出訂正回路３０によりエラー検出及び訂正がなされたデータの中で、ディレクトリ情報記憶領域１４Ｃのディレクトリ情報は、ディレクトリチェック回路１２２に入力される。ディレクトリチェック回路１２２は、入力されたディレクトリ情報の内容に応じて第３のセレクタ１２４を制御する。ディレクトリチェック回路１２２は、ハッシュ値計算回路３４がハッシュ値を計算する１ページの中に、書き換えられる可能性のあるデータが含まれるか否かを認識することができる。ハッシュ値計算回路３４は、書き換えられていない古いデータに基づいて、書き換えられる可能性のあるデータを含むページのハッシュ値を計算する。よって、当該ハッシュ値を溜め込みバッファ３６に記憶し、ハッシュ値記憶領域１４Ｂに記憶すると、他のページのハッシュ値とたまたま一致し、複数のＶＭの共有候補となる場合がある。
【０１１７】
これを避けるため、まず、ハッシュ値計算制御回路２４は、ハッシュ値を記憶する指示信号をディレクトリチェック回路１２２に入力する。指示信号が入力されたディレクトリチェック回路１２２は、無効を示す値を選択させるための信号を第３のセレクタ１２４に出力する。よって、第３のセレクタ１２４は、無効を示す値を溜め込みバッファ３６に出力する。ハッシュ値計算制御回路２４から、ハッシュ値を記憶する指示信号が入力された溜め込みバッファ３６は、第３のセレクタ１２４からの無効を示す値を、当該ページのハッシュ値として記憶する。溜め込みバッファ３６に記憶された無効を示す値であるハッシュ値は、当該ページに対応してハッシュ値記憶領域１４Ｂに記憶される。
【０１１８】
なお、ハッシュ値計算回路３４がハッシュ値を計算する１ページの中に、書き換えられる可能性があるデータが含まれない場合は、ディレクトリチェック回路１２２は、エラー検出訂正回路３０からのハッシュ値を選択するように第３のセレクタ１２４を制御する。
【０１１９】
第２の実施形態におけるハッシュ値計算回路３４、ディレクトリチェック回路１２２、及び第３のセレクタ１２４は、開示の技術の「決定部」の一例である。
【０１２０】
次に、第２の実施形態の効果を説明する。
【０１２１】
（第１の効果）
【０１２２】
上記のように、スクラビング処理及びハッシュ値計算のためにメモリから各ラインのデータが読み出される際には、ディレクトリ情報記憶領域１４Ｃに記憶されたディレクトリ情報も読み出される。エラー検出訂正回路３０によりエラー検出及び訂正がなされたデータの中で、ディレクトリ情報記憶領域１４Ｃに記憶されたディレクトリ情報は、ディレクトリチェック回路１２２に入力される。ハッシュ値計算回路３４が古いデータに基づいて書き換えられる可能性のあるデータを含むページのハッシュ値を計算する場合がある。この場合、ディレクトリチェック回路１２２は、第３のセレクタ１２４に、当該ハッシュ値に代えて、無効を示す値を溜め込みバッファ３６に出力させる。溜め込みバッファ３６に記憶された無効を示す値であるハッシュ値は、当該ページに対応してハッシュ値記憶領域１４Ｂに記憶される。無効を示す値であるハッシュ値は、例えば、全てのビットが０の特異な値であり、通常のデータに基づくハッシュ値とは区別される。よって、無効を示す値であるハッシュ値のページの内容は、通常のデータに基づくハッシュ値のページの内容とは異なると判定される。よって、キャッシュ１６Ｃがライトバック方式のために本来一致していないページが複数のＶＭの共有候補となることを防止することができる。
【０１２３】
（その他の効果）
第２の実施形態は、第１の実施形態における上記第１〜第５の効果と同様の効果を有する。
【０１２４】
次に、第２の実施形態の変形例を説明する。
【０１２５】
（第１の変形例）
第１の変形例では、第１の実施形態の第１の変形例と同様に、メモリコントローラ１８は、制御回路２０に代えて、ＭＰＵを備える。エラー検出訂正回路３０及びハッシュ値計算回路３４の少なくとも一方が省略される。第１の変形例では、エラー検出訂正回路３０及びハッシュ値計算回路３４の少なくとも一方が省略されたことに対応して、エラー検出及び訂正の処理とハッシュ値の計算の少なくとも一方をプログラムに従ってＭＰＵが実行する。
【０１２６】
第１の変形例は、第１の実施形態の第１〜第５の効果の他に、メモリコントローラ１８の構成を、第２の実施形態のメモリコントローラ１８よりも簡易にすることができる。
【０１２７】
以下、エラー検出訂正回路３０を用いるが、ハッシュ値計算回路３４、ディレクトリチェック回路１２２、及び第３のセレクタ１２４を省略し、エラー検出及び訂正の処理後の訂正済データがＭＰＵに入力される例を説明する。本例では、ハッシュ値の計算をプログラムに従ってＭＰＵが実行する。なお、データ処理のプログラムは、ＭＰＵ内に設けられるＲＯＭに記憶される。ＭＰＵはＲＯＭから当該プログラムを読み出し、以下の処理を実行する。図１２には、第２の実施形態の変形例における、制御回路に代わるＭＰＵが実行するデータ処理の一例を示すフローチャートが示される。なお、図１２に示すＭＰＵが実行するデータ処理は、図９に示す処理とほぼ同様であるので、同一のステップには同一の符号を付して当該ステップの説明を省略し、異なるステップのみについて説明する。
【０１２８】
ステップ１０４の後、データ処理はステップ１３２へ進む。ステップ１３２で、ＭＰＵは、ステップ１０４で計算に用いた全ラインの各々のディレクトリ情報に基づいて、ステップ１０４において１ページ分のハッシュ値を計算する際、当該ページに、書き換えられる可能性のあるデータが含まれていたか否かを判断する。
【０１２９】
ステップ１０４の判定結果が否定判定の場合には、ステップ１３４で、ＭＰＵは、ｘに、ステップ１０４で計算されたハッシュ値を設定する。一方、ステップ１０４の判定結果が肯定判定の場合には、ステップ１３６で、ＭＰＵは、ｘに、無効を示す値を設定する。
【０１３０】
ステップ１３８で、溜め込みバッファ３６のｎ番目のエントリにｘに設定された値を記憶する。
【０１３１】
上記例は、第２の実施形態の第１〜第４の効果の他に、ハッシュ値計算回路３４を省略するので、メモリコントローラ１８の構成を、第２の実施形態のメモリコントローラ１８よりも簡易にすることができる。
【０１３２】
（第２の変形例）
第２の変形例のデータ処理装置１０の構成は、第２の実施形態のデータ処理装置１０とほぼ同様である。そこで、以下、主として第２の変形例のデータ処理装置１０の構成のうち、第２の実施形態とは異なる部分のみを説明し、第２の実施形態と同一の構成の部分には同一の符号を付して、その説明を省略する。
【０１３３】
図１３には、第２の実施形態の第２の変形例のデータ処理装置１０のブロック図が示される。図１３に示すように、ＣＰＵチップ１２は、処理装置１４０及びディレクトリキャッシュ１４２を備える。ディレクトリキャッシュ１４２は、ライトバック方式であるものとする。処理装置１４０は、第２の実施形態におけるキャッシュ１６Ｃを備えたＣＰＵ１６と、ディレクトリキャッシュ１４２の管理を含む処理を実行するシステムコントローラとを備える。メモリコントローラ１８は、ディレクトリチェック回路１２２と第３のセレクタ１２４との間に設けられた判定回路１４４を備える。制御回路２０の出力端子に接続されたデータ送信線Ｌ８は、ディレクトリキャッシュ１４２にも接続される。ディレクトリキャッシュ１４２は、信号線群Ｌ１０８を介して処理装置１４０と接続される。ディレクトリキャッシュ１４２の出力端子は、データ送信線Ｌ１１０を介して、判定回路１４４の第１〜第３の入力端子の第１の入力端子に接続される。ハッシュ値計算制御回路２４からの制御線Ｌ６は、第２の実施形態における例（図１０参照）とは異なり、ディレクトリチェック回路１２２には接続されず、判定回路１４４の第２の入力端子に接続される。判定回路１４４の第３の入力端子には、データ送信線Ｌ２２を介してディレクトリチェック回路１２２の出力端子に接続される。判定回路１４４の出力端子は、制御線Ｌ２６を介して、第３のセレクタ１２４の制御信号を入力するための入力端子に接続される。
【０１３４】
次に、第２の変形例のデータ処理装置１０の作用を説明する。第２の変形例のデータ処理装置１０の作用は、第２の実施形態のデータ処理装置１０とほぼ同様である。そこで、以下、第２の変形例のデータ処理装置１０の作用のうち、主として第２の実施形態とは異なる部分のみを説明する。
【０１３５】
処理装置１４０のシステムコントローラは、ＭＣ＿ＩＮ＿ＯＰＣＯＤＥの内容に基づいて、データが書き換えられる可能性があることを示すディレクトリ情報を把握する。システムコントローラは、把握したディレクトリ情報を、ＭＣ＿ＩＮ＿ＡＤＤＲＥＳＳにより示されるアドレスに対応して、ディレクトリキャッシュ１４２に記憶する。
【０１３６】
しかし、ディレクトリキャッシュ１４２の記憶容量はあまり多くはない。よって、ディレクトリキャッシュ１４２に新たなデータを書き込むための領域が無い場合等に、処理装置１４０は、例えばＣＰＵ１６による使用回数が少ないディレクトリ情報をディレクトリ情報記憶領域１４Ｃに記憶するようにメモリコントローラ１８に指示する。
【０１３７】
ここで、ディレクトリ情報記憶領域１４Ｃに記憶されたディレクトリ情報は、ディレクトリ情報が新たに書き込まれるまで同じ内容である。よって、ディレクトリキャッシュ１４２にディレクトリ情報が記憶された場合、ディレクトリ情報記憶領域１４Ｃに記憶されたディレクトリ情報は、ディレクトリキャッシュ１４２の内容より古い。よって、ディレクトリキャッシュ１４２にディレクトリ情報が記憶された場合には、ディレクトリキャッシュ１４２のディレクトリ情報が、ディレクトリ情報記憶領域１４Ｃの内容に優先される。そこで、第２の変形例では、判定回路１４４にはディレクトリキャッシュ１４２から、ディレクトリキャッシュ１４２のディレクトリ情報が、ディレクトリ情報記憶領域１４Ｃの内容に優先されることを示す信号が入力される。
【０１３８】
スクラビング処理及びハッシュ値計算のためにメモリから各ラインのデータが読み出される際には、ディレクトリ情報記憶領域１４Ｃの内容も読み出される。エラー検出訂正回路３０によりエラー検出訂正処理が施されたデータの中で、ディレクトリ情報記憶領域１４Ｃの内容は、ディレクトリチェック回路１２２に入力される。
【０１３９】
ディレクトリチェック回路１２２は、ディレクトリ情報記憶領域１４Ｃに、書き換えられる可能性があることを示すディレクトリ情報がある場合、無効を示す値を選択する指示信号を判定回路１４４に出力する。しかし、ディレクトリチェック回路１２２は、ディレクトリ情報記憶領域１４Ｃに、書き換えられる可能があることを示すディレクトリ情報がない場合、無効を示す値を選択する指示信号を判定回路１４４に出力しない。
【０１４０】
制御回路２０は、メモリから１ラインのデータを読み出す際のコマンド及びアドレスを、ディレクトリキャッシュ１４２にも入力する。ディレクトリキャッシュ１４２は、制御回路２０から入力されたアドレスに対応して、ディレクトリ情報がディレクトリキャッシュ１４２内にある場合、信号を判定回路１４４に出力する。しかし、ディレクトリキャッシュ１４２は、上記入力されたアドレスのデータに対応するディレクトリ情報がディレクトリキャッシュ１４２にない場合、信号を判定回路１４４に出力しない。
【０１４１】
判定回路１４４は、ディレクトリキャッシュ１４２から上記信号が入力されなければ、ディレクトリチェック回路１２２の指示に従う。まず、書き換えられる可能性があるデータを含むページのハッシュ値がハッシュ値計算回路３４から出力されるタイミングで、制御回路２０から判定回路１４４に信号が出力される。判定回路１４４は、ディレクトリチェック回路１２２から無効を示す値を選択する指示信号が入力された場合、制御回路２０から判定回路１４４に信号が入力されたタイミングで、無効を示す値を選択するように、第３のセレクタ１２４を制御する。判定回路１４４は、ディレクトリチェック回路１２２から上記指示信号が入力されなかった場合、制御回路２０から判定回路１４４に信号が入力されたタイミングで、ハッシュ値計算回路３４からのハッシュ値を選択するように、第３のセレクタ１２４を制御する。
【０１４２】
一方、判定回路１４４は、ディレクトリキャッシュ１４２から上記信号が入力された場合、ディレクトリチェック回路１２２の指示に従わない。即ち、判定回路１４４は、ディレクトリチェック回路１２２から上記指示信号が入力されたか否かに関わらず、制御回路２０から判定回路１４４に信号が入力されたタイミングで、第３のセレクタ１２４を制御する。具体的には、ディレクトリキャッシュ１４２から読み出したディレクトリ情報に従い、データが書き換えられる可能性があれば無効を示す値を、なければハッシュ値計算回路３４からのハッシュ値を選択するように、第３のセレクタ１２４を制御する。
【０１４３】
第２の変形例は、第２の実施形態の効果の他に、以下の効果を有する。
【０１４４】
上記のように、データが書き換えられる可能性のある場合、ハッシュ値記憶領域１４Ｂの内容にかかわらず、判定回路１４４は、無効を示す値を選択する指示のための信号を第３のセレクタ１２４に出力する。よって、第２の変形例は、ディレクトリキャッシュ１４２を設けても、キャッシュ１６Ｃがライトバック方式のために本来一致していないページが複数のＶＭの共有候補となることを防止することができる。
【０１４５】
なお、第２の変形例において、第２の実施形態の第１の変形例のように、制御回路２０に代えてＭＰＵを備えた場合、図１２に示す処理では、ステップ１３２の判定結果が否定判定の場合には、ＭＰＵは、次のステップを実行する。まずＭＰＵは、ディレクトリキャッシュ１４２にディレクトリ情報があるか否かを判断する。ディレクトリキャッシュ１４２にディレクトリ情報がないと判断された場合、メモリから読みだされたディレクトリ情報に従い、データが書き換えられる可能性があれば、データ処理はステップ１３６に進み。一方、データが書き換えられる可能性がなければ、データ処理はステップ１３４に進む。ディレクトリキャッシュ１４２にディレクトリ情報があると判断された場合は、メモリから読み出されたディレクトリ情報ではなくディレクトリキャッシュ１４２から読み出された情報に従う。すなわち、上記と同様に、データが書き換えられる可能性があれば、データ処理はステップ１３６に進む。一方、データが書き換えられる可能性がなければ、データ処理はステップ１３４に進む。
【０１４６】
第２の実施形態における、ハッシュ値計算回路３４、ディレクトリチェック回路１２２、第３のセレクタ１２４、ディレクトリキャッシュ１４２、及び判定回路１４４は、開示の技術の「決定部」の一例である。
【０１４７】
なお、第１の実施形態における第２の変形例、第３の変形例、第４の変形例、及びその他の変形例も第２の実施形態の変形例として適用できる。
【０１４８】
また、第２の実施形態では、書き換えられる可能性のあるデータが含まれるページのハッシュ値が他のページのハッシュ値とたまたま一致し、本来一致していないページが複数のＶＭの共有候補となることを防止する。このため、第２の実施形態では、書き換えられる可能性のあるデータが含まれるページのハッシュ値を、無効を示す値としている。ハッシュ値が無効を示す値であれば、当該ハッシュ値に対応するページは、書き換えられる可能性のあるデータが含まれるページであると判定できる。書き換えられる可能性のあるデータが含まれるページであることが判定できれば、本来一致していないページが複数のＶＭの共有候補となることを防止することができる。
【０１４９】
なお、ハッシュ関数によっては、所定の「無効を示す値」が、ハッシュ値の計算により偶然に正当な値として生成される場合もある。そのようなハッシュ値が計算されたページは、共有候補から除外されてしまう。しかし、例えばハッシュ値として３２ｂｉｔの値を計算するハッシュ関数を使う場合は、ハッシュ値が適切に分布していると仮定すると、正当なハッシュ値が「無効を示す値」になってしまう確率は４３億分の１（２の３２乗＝およそ４３億）である。また、例えばハッシュ値として６４ｂｉｔの値を計算するハッシュ関数を使う場合は、およそ１８４５京分の１である。従って、書き換えられる可能性のあるデータを含むページのハッシュ値を「無効を示す値」としても、そのようなページが共有候補から除外されてしまう場合は、極めて少ないため、問題とならない。すなわち、予め決めたハッシュ関数における通常の計算で算出される可能性がある値を「無効を示す値」として取り決めても、問題はない。
【０１５０】
［第３の実施形態］
次に、第３の実施形態を説明する。第３の実施形態のデータ処理装置１０の構成は、第１の実施形態のデータ処理装置１０とほぼ同様である。そこで、以下、第３の実施形態のデータ処理装置１０の構成のうち、第１の実施形態とは異なる部分のみを説明し、第１の実施形態と同一の構成の部分には同一の符号を付して、その説明を省略する。
【０１５１】
図１４には、第３の実施形態のデータ処理装置１０のブロック図が示される。図１４に示すように、メモリコントローラ１８は、制御回路２０に接続された、データの書き換えが起こるアドレスを記憶するアドレス記憶バッファ１５２を更に備えている。また、メモリコントローラ１８は、ハッシュ値計算回路３４と溜め込みバッファ３６との間に、セレクタ１５４を備える。セレクタ１５４の第１の入力端子Ｒには、エラー検出訂正回路３０からのデータ送信線Ｌ１１が接続される。セレクタ１５４の第２の入力端子Ｃには、ハッシュ値計算回路３４の出力端子が、データ送信線Ｌ１２を介して接続される。セレクタ１５４の第３の入力端子Ｌには、無効を示す値が入力される。セレクタ１５４の制御信号の入力端子には、制御線Ｌ３０を介して制御回路２０が接続される。セレクタ１５４の出力端子はデータ送信線Ｌ３２を介して溜め込みバッファ３６に接続される。
【０１５２】
次に、第３の実施形態のデータ処理装置１０の作用を説明する。第３の実施形態のデータ処理装置１０の作用は、第１の実施形態のデータ処理装置１０とほぼ同様である。以下、第３の実施形態のデータ処理装置１０の作用のうち、主として第１の実施形態とは異なる部分のみを説明する。
【０１５３】
第３の実施形態でも、第１の実施形態における上記スクラビング処理及びハッシュ値計算処理を実行する。なお、上記スクラビング処理及びハッシュ値計算処理において、ハッシュ値計算回路３４からの各ページのハッシュ値を溜め込みバッファ３６に記憶させるタイミングで、制御回路２０は、入力端子Ｃを選択するようにセレクタ１５４を制御する。
【０１５４】
ところで、第２の実施形態は、ディレクトリ情報を用いて書き換えられる可能性のあるデータを含むページを把握する。これに対し、第３の実施形態は、アドレス記憶バッファ１５２に記憶されたアドレスに基づいて、書き換えられる可能性のあるデータを含むページを把握する。
【０１５５】
また、第２の実施形態は、スクラビング処理においてメモリからデータが読み出される際に、書き換えられる可能性のあるデータを含むページのハッシュ値として無効を示す値を、ハッシュ値記憶領域１４Ｂに記憶する。これに対し、第３の実施形態は、スクラビング処理とは無関係に、データが書き換えられる可能性のある場合に、当該データを含むページのハッシュ値として無効を示す値を、ハッシュ値記憶領域１４Ｂに記憶する。
【０１５６】
図１５には、第３の実施形態の制御回路２０における当該ハッシュ値を、無効を示す値に変更する動作を含む動作のタイミングチャートが示される。
【０１５７】
ＣＰＵ１６から制御回路２０に、例えば、「０１０」（Read To Own）が出力された場合、制御回路２０は、図１５（Ａ）（ＴＡ参照）に示すように、コマンド及びアドレスをメモリモジュール１４に出力する。上記のように、「０１０」はデータを独占的に利用するための読み出しを示すので、コマンドは読み出しを示す。
【０１５８】
制御回路２０は、図１５(Ｂ)に示すように、所定時間後の次のタイミングで、アドレス記憶バッファ１５２に上記データが新たに書き込まれる可能性のあるアドレスを、図１５（Ａ）（ＴＣ参照）に示すデータの書き戻しの指示があるまで記憶させる。
【０１５９】
上記コマンド及びアドレスが入力されたメモリモジュール１４は、図１５（Ｃ）（ＵＡ参照）に示すように、指定されたアドレスを含む１ラインのデータをメモリコントローラ１８に出力する。よって、エラー検出訂正回路３０からは、図１５（Ｄ）（ＷＡ参照）に示すように、所定時間後の次のタイミングで、訂正済データを読み書き用バッファ３２に出力する。その後、当該訂正済データは、ＣＰＵ１６に出力される。
【０１６０】
次に、制御回路２０は、アイドル状態となった場合、図１５（Ａ）（ＴＢ参照）に示すように、メモリモジュール１４に、コマンド及びアドレスを出力する。このアドレスは、ハッシュ値記憶領域１４Ｂの１ラインのアドレスであって、書き換えられる可能性があるデータを含むページのハッシュ値を含む１ラインのアドレスである。
【０１６１】
上記コマンド及びアドレスが入力されたメモリモジュール１４は、図１５（Ｃ）（ＵＢ参照）に示すように、指定されたアドレスを含む１ラインのデータ（複数のハッシュ値）をメモリコントローラ１８に出力する。よって、エラー検出訂正回路３０からは、図１５（Ｅ）（ＷＢ参照）に示すように、所定時間後の次のタイミングで、１ラインのデータ（複数のハッシュ値）がセレクタ１５４の入力端子Ｒに入力される。図１５（Ｅ）には、１ラインのデータ（複数のハッシュ値）のうち、データが新たに書き込まれる可能性があるアドレスのデータを含むページのハッシュ値がセレクタ１５４の入力端子Ｒに入力されるタイミングが「Ｐ」で示される。
【０１６２】
セレクタ１５４の入力端子Ｒに入力される１ラインのデータ（複数のハッシュ値）の内、「Ｐ」で示されるタイミング以外のタイミングでは、制御回路２０は、入力端子Ｒからの値を選択するようにセレクタ１５４を制御する。よって、「Ｐ」で示されるタイミング以外のタイミングでは、セレクタ１５４はハッシュ値記憶領域１４Ｂに記憶されたハッシュ値を選択する。一方、データが新たに書き込まれる可能性があるアドレスのデータを含むページのハッシュ値がセレクタ１５４の入力端子Ｒに入力されるタイミングでは、制御回路２０は、入力端子Ｌからの値を選択するようにセレクタ１５４を制御する。入力端子Ｌからの値は無効を示す値である。
【０１６３】
以上より、１ラインのデータ（複数のハッシュ値）のうち、データが新たに書き込まれる可能性があるアドレスのデータを含むページ以外では、ハッシュ値記憶領域１４Ｂに記憶されたハッシュ値が溜め込みバッファ３６に記憶される。これに対し、データが新たに書き込まれる可能性があるアドレスのデータを含むページについては、無効を示す値がハッシュ値として溜め込みバッファ３６に記憶される。そして、制御回路２０から溜め込みバッファ３６に、図１５（Ａ）（ＴＣ参照）に示すように、データの書き戻しが指示されると、上記１ライン分のデータ（複数のハッシュ値）が、図１５（Ｆ）に示すように、元のアドレスの１ラインに書き戻される。元のアドレスの１ラインに書き戻される１ライン分のデータ（複数のハッシュ値）における、データが新たに書き込まれる可能性があるアドレスのデータを含むページには、当該ページのハッシュ値として無効を示す値が記憶される（Ｑ１参照）。
【０１６４】
アドレス記憶バッファ１５２、セレクタ１５４、溜め込みバッファ３６、第２のセレクタ３８、及び３ステート制御回路２８は、開示の技術の「書換部」の一例である。
【０１６５】
次に、第３の実施形態の効果を説明する。
【０１６６】
（第１の効果）
第３の実施形態の制御回路２０は、スクラビング処理とは無関係に、アドレス記憶バッファ１５２に記憶されたアドレスに基づいて、書き換えられる可能性のあるデータを含むページを把握する。そして、制御回路２０は、当該ページのハッシュ値として無効を示す値を、ハッシュ値記憶領域１４Ｂに記憶する。よって、本来一致していないページが複数のＶＭの共有候補となることを防止することができる。
【０１６７】
（その他の効果）
第３の実施形態は、第１の実施形態における上記第１〜第５の効果と同様の効果を有する。
【０１６８】
次に、第３の実施形態の変形例を説明する。
【０１６９】
第３の実施形態の変形例においても、第１の実施形態の第１の変形例と同様に、メモリコントローラ１８は、制御回路２０に代えてＭＰＵを有する。また、第３の実施形態の変形例では、エラー検出訂正回路３０と、ハッシュ値計算回路３４、セレクタ１５４、及びエラー検出訂正回路３０からセレクタ１５４の入力端子Ｒまでの線を含む部分との少なくとも一方が省略される。更に、第３の実施形態の変形例では、当該省略に対応して、エラー検出及び訂正の処理と、ハッシュ値の計算との少なくとも一方をプログラムに従ってＭＰＵが実行する。第３の実施形態の変形例は、第１の実施形態の第１の変形例と同様の効果を有する。
【０１７０】
なお、第１の実施形態における第２の変形例、第３の変形例、第４の変形例、及びその他の変形例も第３の実施形態の変形例として適用できる。
【０１７１】
［第４の実施形態］
次に、第４の実施形態を説明する。第４の実施形態のデータ処理装置１０の構成は、第３の実施形態のデータ処理装置１０とほぼ同様である。そこで、以下、第４の実施形態のデータ処理装置１０の構成のうち、第３の実施形態とは異なる部分のみを説明し、第３の実施形態と同一の構成の部分には同一の符号を付して、その説明を省略する。
【０１７２】
図１６には、第４の実施形態のデータ処理装置１０のブロック図が示される。図１６に示すように、メモリコントローラ１８は、ハッシュ値計算回路３４とは別のハッシュ値計算回路１５６、一時バッファ１５８、第１のＥＯＲ回路１６０、複数の一時バッファ１６２、及び第２のＥＯＲ回路１６４を備える。
【０１７３】
ハッシュ値計算回路１５６は、データ送信線Ｌ９を介して読み書き用バッファ３２に接続され、制御線Ｌ４２を介して制御回路２０に接続される。ハッシュ値計算回路３４の出力端子は、一時バッファ１５８の入力端子にも接続される。一時バッファ１５８の出力端子は第１のＥＯＲ回路１６０の２つの入力端子の一方に接続される。一時バッファ１５８は、制御線Ｌ４４を介して制御回路２０に接続される。第１のＥＯＲ回路１６０の他方の入力端子には、ハッシュ値計算回路１５６の出力端子が、データ送信線Ｌ５０を介して、接続される。第１のＥＯＲ回路１６０の出力端子は、複数の一時バッファ１６２の各入力端子に接続される。
【０１７４】
エラー検出訂正回路３０の出力端子に接続されかつセレクタ１５４の入力端子Ｒに接続されたデータ送信線Ｌ１１には、第２のＥＯＲ回路１６４の２つの入力端子の一方が接続される。第２のＥＯＲ回路１６４の他方の入力端子には、複数の一時バッファ１６２の各出力端子が接続される。複数の一時バッファ１６２のそれぞれは、複数の制御線Ｌ４６のそれぞれを介して制御回路２０に接続される。
【０１７５】
第４の実施形態におけるセレクタ１５４には、入力端子Ｒ、Ｃ、Ｌの他に別の入力端子Ｓが設けられる。第２のＥＯＲ回路１６４の出力端子は、データ送信線Ｌ５６を介してセレクタ１５４の入力端子Ｓに接続される。
【０１７６】
次に、第４の実施形態のデータ処理装置１０の作用を説明する。第４の実施形態のデータ処理装置１０の作用は、第３の実施形態のデータ処理装置１０とほぼ同様である。以下、第４の実施形態のデータ処理装置１０の作用のうち、主として第３の実施形態とは異なる部分を説明する。第４の実施形態でも、第３の実施形態における上記スクラビング処理及びハッシュ値計算処理を実行する。
【０１７７】
ところで、第４の実施形態における、メモリへのデータの書き込みは、Ｒｅａｄ−ｍｏｄｉｆｙ−ｗｒｉｔｅである。詳細には、メモリコントローラ１８は、ＣＰＵ１６からあるラインのメモリへの書き込みデータを受け取った場合、受け取ったデータをそのままメモリへ書き込まない。Ｒｅａｄ−ｍｏｄｉｆｙ−ｗｒｉｔｅでは、該当ラインのデータを一旦メモリから読み出し（ｒｅａｄ）、必要に応じて制御情報等（ディレクトリ情報等）の内容を検査する。そして、ＣＰＵ１６から受け取ったデータで読み出したデータを上書きし（ｍｏｄｉｆｙ）、メモリに書き戻す（ｗｒｉｔｅ）。第４の実施形態は、新たに書き込まれるデータを含む１ページのハッシュ値を、次のように計算する。元のデータを含めたデータに基づく部分ハッシュ値と、新たに書き込まれるデータを含めたデータに基づく部分ハッシュ値との差分を、元の１ページのハッシュ値に適用する。よって、第４の実施形態では、ハッシュ値を求めるためのハッシュ関数として、差分が計算可能なハッシュ関数を用いる。
【０１７８】
図１７には、ハッシュ値の差分を計算することにより、ハッシュ値を更新する具体的内容が示される。詳細には後述するが、まず、ハッシュ値を更新する内容を概説する。メモリコントローラ１８は、１ページのハッシュ値を次のように計算する。図１７（Ａ）に示すように、メモリコントローラ１８は、まず、複数のライン（＃０、＃１、・・・最終ライン）の各々において、複数のデータからハッシュ値（部分ハッシュ値）を計算する。そして、メモリコントローラ１８は、各ラインのハッシュ値のＥＯＲを計算することにより、１ページのハッシュ値を計算する。
【０１７９】
次に、例えば、ライン＃ｍが新しいデータに書き換えられるとする。メモリコントローラ１８は、新しいライン＃ｍのデータからハッシュ値（部分ハッシュ値）を計算する。メモリコントローラ１８は、ライン＃ｍにおける、新しいデータから計算された部分ハッシュ値と、書き換えられる前の古いデータから計算された部分ハッシュ値との差分（ＥＯＲ）を計算する（図１７（Ｂ）参照）。
【０１８０】
そして、メモリコントローラ１８は、図１７（Ｃ）に示すように、書き換えられる前のページ全体に対するハッシュ値と、部分ハッシュ値の差分とのＥＯＲを計算することにより、当該ページのハッシュ値を更新する計算をする。
【０１８１】
図１８には、第４の実施形態の制御回路２０の、ハッシュ値を更新する動作を含む動作のタイミングチャートが示される。
【０１８２】
ＣＰＵ１６からメモリの１ライン分のデータの書き込みが指示された場合、メモリコントローラ１８は、当該データが書き込まれる前に、当該１ライン分のデータの部分ハッシュ値を計算するため、当該１ライン分のデータの読み出しをする。即ち、制御回路２０は、図１８（Ａ）（ＦＡ参照）に示すように、当該１ライン分のデータのアドレス及び読み出しのコマンドを、メモリモジュール１４に出力する。その後、メモリモジュール１４は、指定されたラインのデータを読み出し、読み出したデータを、図１８（Ｃ）（ＧＡ参照）に示すように、メモリコントローラ１８に出力する。読み出されたデータは、エラー検出訂正回路３０に入力される。エラー検出訂正回路３０から訂正済データが図１８（Ｄ）（ＨＡ参照）に示すようにハッシュ値計算回路３４に出力される。ハッシュ値計算回路３４で当該１ライン分のデータに基づいて計算されたハッシュ値が出力されるタイミングで、制御回路２０は、図１８（Ｆ）に示すように、ハッシュ値計算回路３４からのハッシュ値を記憶するように一時バッファ１５８を制御する。一時バッファ１５８は、ハッシュ値を第１のＥＯＲ回路１６０に出力する。
【０１８３】
ＣＰＵ１６から上記１ラインの新しいデータの書き込みの指示があると、制御回路２０は、図１８（Ａ）（ＦＢ参照）に示すように、当該１ライン分のデータのアドレス及び読み出しのコマンドを、メモリモジュール１４に出力する。当該アドレスは、図１８（Ｂ）に示すように、制御回路２０から溜め込みバッファ３６に、図１８（Ａ）（ＦＤ参照）に示す、データの書き戻しが指示されるまで、アドレス記憶バッファ１５２に記憶される。上記１ラインの新しいデータは、ＣＰＵ１６から読み書き用バッファ３２に一旦保存され、図１８（Ｈ）に示すように、メモリモジュール１４に出力されると共に、図１８（Ｉ）に示すように、ハッシュ値計算回路１５６に出力される。ハッシュ値計算回路１５６で上記１ラインの新しいデータに基づいて計算されたハッシュ値が出力されるタイミングで、以下の処理が行われる。すなわち、図１８（Ｊ）に示すように、第１のＥＯＲ回路１６０は、ハッシュ値計算回路１５６からのハッシュ値と、一時バッファ１５８からのハッシュ値との差分を計算する。制御回路２０は、そのタイミングで、第１のＥＯＲ回路１６０から出力される差分を、複数の一時バッファ１６２の何れか指定した一時バッファ１６２に記憶するよう制御する。
【０１８４】
制御回路２０は、アイドル状態の場合、上記１ラインの新しいデータを含む１ページのハッシュ値を含む１ラインのデータ（複数のハッシュ値）をハッシュ値記憶領域１４Ｂから読み出すように、メモリモジュール１４を制御する（図１８（Ａ）：ＦＣ参照）。
【０１８５】
メモリモジュール１４は、指定されたラインのデータ（複数のハッシュ値）を読み出し、図１８（Ｃ）（ＧＣ参照）に示すように、メモリコントローラ１８に出力する。当該ラインのデータ（複数のハッシュ値）はエラー検出訂正回路３０に入力される。エラー検出訂正回路３０からは、図１８（Ｋ）（ＨＣ参照）に示すように訂正済データが出力される。訂正済データは、セレクタ１５４の入力端子Ｒに入力されると共に第２のＥＯＲ回路１６４にも入力される。図１８（Ｋ）には、１ラインのデータ（複数のハッシュ値）のうち、データが新たに書き込まれたアドレスのデータを含むページのハッシュ値がセレクタ１５４の入力端子Ｒに入力されるタイミングが「Ｐ」で示される。
【０１８６】
セレクタ１５４の入力端子Ｒに入力される１ラインのデータ（複数のハッシュ値）のうち、「Ｐ」で示されるタイミング以外のタイミングでは、制御回路２０は、図１８（Ｐ）に示すように、入力端子Ｒからの値を選択するようにセレクタ１５４を制御する。よって、「Ｐ」で示されるタイミング以外のタイミングでは、セレクタ１５４はハッシュ値記憶領域１４Ｂに記憶されたハッシュ値を選択する。
【０１８７】
一方、制御回路２０は、データが新たに書き込まれたアドレスのデータを含むページのハッシュ値がセレクタ１５４の入力端子Ｒに入力されるタイミングでは、指定された一時バッファ１６２に保持されたハッシュ値の差分を元のハッシュ値に適用させる。即ち、まず、制御回路２０は、図１８（Ｍ）に示すように、ハッシュ値の差分を保持する一時バッファ１６２に、当該差分を出力させる。第２のＥＯＲ回路１６４は、エラー検出訂正回路３０からの元のハッシュ値と、一時バッファ１６２からの差分とのＥＯＲを計算し、図１８（Ｎ）に示すように、結果をセレクタ１５４の入力端子Ｓに入力する。制御回路２０は、図１８（Ｐ）に示すように、データが新たに書き込まれたアドレスのデータを含むページのハッシュ値がセレクタ１５４の入力端子Ｒに入力されるタイミングで、入力端子Ｓを選択するようにセレクタ１５４を制御する。
【０１８８】
以上より、図１８（Ｑ）に示すように、１ラインのデータ（複数のハッシュ値）のうち、データが新たに書き込まれたアドレスのデータを含むページ以外では、ハッシュ値記憶領域１４Ｂに記憶されたハッシュ値が溜め込みバッファ３６に記憶される。これに対し、データが新たに書き込まれたアドレスのデータを含むページについては、更新されたハッシュ値が溜め込みバッファ３６に記憶される。そして、制御回路２０から溜め込みバッファ３６に、図１８（Ａ）（ＦＤ参照）に示すように、データの書き戻しが指示されると、上記１ライン分のデータ（複数のハッシュ値）が、図１８（Ｌ）に示すように、元のアドレスの１ラインに書き戻される。元のアドレスの１ラインに書き戻される１ライン分のデータ（複数のハッシュ値）における、データが新たに書き込まれたアドレスのデータを含むページには、更新されたハッシュ値が記憶される（Ｑ１参照）。
【０１８９】
上記素子（１５２〜１６４、３６、３８、及び２８）は、開示の技術の「書換部」の一例である。
【０１９０】
次に、第４の実施形態の効果を説明する。
【０１９１】
（第１の効果）
例えば、メモリのライン＃ｍの中のあるデータが新しいデータに書き換えられるため、新しいデータが入力された場合、メモリコントローラ１８は、新しいデータを含むライン＃ｍの複数のデータから計算された新しい部分ハッシュ値を計算する。メモリコントローラ１８は、ライン＃ｍの新しい部分ハッシュ値と、書き換えられる前の古いデータを含むライン＃ｍの古い部分ハッシュ値との差分を計算する。メモリコントローラ１８は、書き換えられる前のページ全体に対するハッシュ値と、部分ハッシュ値の差分とのＥＯＲを計算することにより、当該ページのハッシュ値を計算する。そして、メモリコントローラ１８は、計算されたハッシュ値を、ハッシュ値記憶領域１４Ｂの元のアドレスの領域に記憶させることにより、ハッシュ値を更新する。
【０１９２】
よって、第４の実施形態では、メモリ内のデータの書き換えに追従して、ハッシュ値記憶領域１４Ｂをメンテナンスすることができる。
【０１９３】
ここで、第３の実施形態では、書き換えられる可能性のあるデータを含むページのハッシュ値を、無効を示す値に変える。これに対し、第４の実施形態では、書き換えられるデータを含むページのハッシュ値を、新しいデータを含むページの複数のデータに基づくハッシュ値に変えることができる。
【０１９４】
（その他の効果）
第４の実施形態は、第１の実施形態における上記第１〜第４の効果と同様の効果を有する。
【０１９５】
次に、第４の実施形態の変形例を説明する。
【０１９６】
第４の実施形態の変形例としても、第１の実施形態の第１の変形例と同様に、制御回路２０に代えてＭＰＵが設けられる。また、第４の実施形態の変形例では、エラー検出訂正回路３０と、ハッシュ値計算回路３４を含む各回路（１５４〜１６４）及びエラー検出訂正回路３０からセレクタ１５４の入力端子Ｒまでの線を含む部分との少なくとも一方が省略される。第４の実施形態の変形例では、当該省略に対応して、エラー検出及び訂正の処理と、ハッシュ値の計算との少なくとも一方をプログラムに従ってＭＰＵが実行する。第４の実施形態の変形例は、第１の実施形態の第１の変形例と同様の効果を有する。
【０１９７】
なお、第１の実施形態における第２の変形例、第４の変形例、その他の変形例も第４の実施形態の変形例として適用できる。
【０１９８】
本明細書に記載された全ての文献、特許出願及び技術規格は、個々の文献、特許出願及び技術規格が参照により取り込まれることが具体的かつ個々に記された場合と同程度に、本明細書中に参照により取り込まれる。
【０１９９】
以上の実施形態に関し、更に以下の付記を開示する。
【０２００】
（付記１）
複数のデータを記憶するメモリと、前記メモリに記憶されたデータを用いた主となる処理を実行する処理部との間で、データの転送を行う転送装置であって、
前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御する制御部と、
前記制御部により読み出されたデータ、または、前記制御部による所定処理が行われたデータを利用して、複数の所定単位分のデータ毎の要約値を決定する決定部と、
を備えた転送装置。
【０２０１】
（付記２）
前記制御部は、前記メモリの予め定められた領域に記憶されたデータに対して、前記所定処理としてエラー検出及びエラー訂正を定期的に行うメモリスクラビング処理を行うように制御し、
前記決定部は、前記メモリから読み出されてから前記エラー検出及びエラー訂正が行われる前のデータ、または、前記エラー訂正が行われた場合は、エラー訂正後で、かつ前記メモリに書き戻される前のデータ、前記エラー検出によりエラーが検出されなかった場合には、エラー検出の処理後のデータを利用して、前記要約値を決定する
付記１に記載の転送装置。
【０２０２】
（付記３）
前記エラー訂正は、前記メモリから読み出されたデータから訂正可能なエラーが検出された場合に、検出されたデータの値を訂正することである付記２に記載の転送装置。
【０２０３】
（付記４）
前記エラーは、前記メモリを構成する各記憶素子に記憶されたデータの値が、制御していない場合に変更されたこと、または、制御した通りに変更されていないことである付記２または付記３に記載の転送装置。
【０２０４】
（付記５）
前記決定部により決定された要約値は前記メモリに書き込まれ、
前記制御部による前記メモリからのデータの読み出し、及び前記決定部により決定された前記要約値の前記メモリへの書きこみの少なくとも一方は、前記処理部が前記主となる処理を実行していないアイドル状態の場合に、行われる付記１〜付記４の何れか１項に記載の転送装置。
【０２０５】
（付記６）
前記メモリと前記転送装置との間のデータの転送距離は、前記メモリと前記処理部との間のデータの転送距離よりも短い付記１〜付記５の何れか１項に記載の転送装置。
【０２０６】
（付記７）
前記メモリから所定単位毎に読み出されてキャッシュに一旦記憶されるデータが、前記メモリに書き戻される際に書き換えられる可能性があるか否かを示す情報が、前記所定単位毎のデータに対応して前記メモリに書き込まれ、
前記決定部は、前記複数の所定単位分のデータに対応して前記メモリに書きこまれた前記書き換えられる可能性があるか否かを示す情報が、前記複数の所定単位分のデータに書き換えられる可能性のあるデータが含まれることを示す場合、予め定められた値を前記要約値として決定する付記１〜付記６の何れか１項に記載の転送装置。
【０２０７】
（付記８）
前記決定部により決定された要約値は前記メモリに記憶され、
前記メモリに記憶されたデータが書き換えられる可能性のあるデータを含む複数の所定単位分のデータの要約値を、予め定められた値に書き換える書換部を更に備える
付記１〜付記７の何れか１項に記載の転送装置。
【０２０８】
（付記９）
前記決定部により決定された要約値は前記メモリに記憶され、
前記メモリに記憶されたデータが新しいデータに書き換えられる場合に、前記書き換えられるデータを含む複数の所定単位分のデータの要約値を、前記書き換えられるデータに代えて前記新しいデータを含む前記複数の所定単位分のデータの要約値に書き換える書換部を更に備える
付記１〜付記７の何れか１項に記載の転送装置。
【０２０９】
（付記１０）
前記決定部を、ハードウェアの回路とした付記１〜付記９の何れか１項に記載の転送装置。
【０２１０】
（付記１１）
複数のデータを記憶するメモリと、前記メモリに記憶されたデータを用いた主となる処理を実行する処理部との間で、データの転送を行うと共に、前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御する制御部を備えた転送装置に設けられたコンピュータに、
前記制御部により読み出されたデータ、または、前記制御部による所定処理が行われたデータを利用して、複数の所定単位分のデータ毎の要約値を決定する
ことを含む処理を実行させるための決定プログラム。
【０２１１】
（付記１２）
複数のデータを記憶するメモリと、前記メモリに記憶されたデータを用いた主となる処理を実行する処理部との間で、データの転送を行うと共に、要約値を決定する決定回路を備えた転送装置に設けられたコンピュータに、
前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御し、  読み出され、前記メモリに書き戻される前のデータを利用して、前記決定回路で複数の所定単位分のデータ毎の要約値が決定されるように、前記読み出され、前記メモリに書き戻される前のデータを前記決定回路に入力する
ことを含む処理を実行させるための決定プログラム。
【０２１２】
（付記１３）
複数のデータを記憶するメモリと、前記メモリに記憶されたデータを用いた主となる処理を実行する処理部との間で、データの転送を行う転送装置に設けられたコンピュータに、
前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御し、
前記所定処理を行うために読み出され、前記メモリに書き戻される前のデータを利用して、複数の所定単位分のデータ毎の要約値を決定する
ことを含む処理を実行させるための決定プログラム。
【０２１３】
（付記１４）
複数のデータを記憶するメモリと、前記メモリに記憶されたデータを用いた主となる処理を実行する処理部との間で、データの転送を行う転送装置が実行する決定方法であって、
前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御し、
読み出されたデータ、または、前記所定処理が行われたデータを利用して、複数の所定単位分のデータ毎の要約値を決定する
ことを含む決定方法。
【０２１４】
（付記１５）
複数のデータを記憶するメモリと、
前記メモリに記憶されたデータを用いた主となる処理を実行する処理部と、
前記メモリと前記処理部との間で、データの転送を行うと共に、前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御する制御部と、前記制御部により読み出されたデータ、または、前記制御部による所定処理が行われたデータを利用して、複数の所定単位分のデータ毎の要約値を決定する決定部と、を備えた転送装置と、
を備えたデータ処理装置。
【符号の説明】
【０２１５】
１０    データ処理装置
１２    ＣＰＵチップ
１４    メモリモジュール
１６    ＣＰＵ
１６Ｃ  キャッシュ
１８    メモリコントローラ
２０    制御回路
２２    メモリスクラビング制御回路
２４    ハッシュ値計算制御回路
２６    第１のセレクタ
２８    ３ステート制御回路
３０    エラー検出訂正回路
３２    読み書き用バッファ
３４    ハッシュ値計算回路
３６    溜め込みバッファ
３８    第２のセレクタ
１２２  ディレクトリチェック回路
１２４  第３のセレクタ
１４２  ディレクトリキャッシュ
１４４  判定回路
１５２  アドレス記憶バッファ
１５４  セレクタ
１５６  ハッシュ値計算回路
１５８  一時バッファ
１６０  第１のＥＯＲ回路
１６２  一時バッファ
１６４  第２のＥＯＲ回路
【図１】
2015194877.tif 000003
【図２】
2015194877.tif 000004
【図３】
2015194877.tif 000005
【図６】
2015194877.tif 000006
【図７】
2015194877.tif 000007
【図８】
2015194877.tif 000008
【図９】
2015194877.tif 000009
【図１０】
2015194877.tif 000010
【図１１】
2015194877.tif 000011
【図１２】
2015194877.tif 000012
【図１３】
2015194877.tif 000013
【図１４】
2015194877.tif 000014
【図１５】
2015194877.tif 000015
【図１６】
2015194877.tif 000016
【図１７】
2015194877.tif 000017
【図１８】
2015194877.tif 000018
【図４】
2015194877.tif 000019
【図５】
2015194877.tif 000020