(57)【要約】【課題】  演算処理装置からメモリコントローラへのデータ転送の待機時間の増加を抑制する。【解決手段】  メモリコントローラは、不揮発性メモリに書き込むデータを保持する不揮発性のバッファ部と、バッファ部に格納するデータの格納位置を示す入力ポインタとバッファ部から読み出すデータの読み出し位置を示す出力ポインタとを保持する不揮発性のポインタ保持部と、演算処理装置から受信したデータをバッファ部における入力ポインタが示す格納位置に格納し、演算処理装置から受信した順序制限命令により指示されたライト命令の実行順を制限する処理が完了したことを示す完了情報を、バッファ部への先行データの格納が完了した場合に演算処理装置に通知する受信処理部と、バッファ部に格納されたデータを出力ポインタが示す読み出し位置から読み出して不揮発性メモリに書き込むメモリアクセス部とを有する。【選択図】  図１
2018005655.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリを含むメモリ部を制御するメモリコントローラにおいて、
前記不揮発性メモリに書き込むデータを保持する不揮発性の第１バッファ部と、
前記第１バッファ部に格納するデータの格納位置を示す入力ポインタと前記第１バッファ部から読み出すデータの読み出し位置を示す出力ポインタとを保持する不揮発性のポインタ保持部と、
前記不揮発性メモリに書き込むデータを演算処理装置から受信した場合、前記演算処理装置から受信したデータを前記第１バッファ部における前記入力ポインタが示す格納位置に格納し、前記メモリ部にデータを書き込むライト命令の実行順の制限を指示する順序制限命令を前記演算処理装置から受信した場合、前記順序制限命令より前に前記演算処理装置から転送された先行データが前記第１バッファ部に格納されたかを判定し、前記第１バッファ部への前記先行データの格納が完了した場合に、前記順序制限命令により指示されたライト命令の実行順を制限する処理が完了したことを示す完了情報を前記演算処理装置に通知する受信処理部と、
前記第１バッファ部に格納されたデータを前記出力ポインタが示す読み出し位置から読み出し、前記第１バッファ部から読み出したデータを前記不揮発性メモリに書き込むメモリアクセス部と
を有することを特徴とするメモリコントローラ。
【請求項２】
請求項１に記載のメモリコントローラにおいて、
前記メモリ部は揮発性メモリをさらに含み、
前記演算処理装置から転送されるデータのうち、前記揮発性メモリに書き込むデータを保持する揮発性の第２バッファ部をさらに有し、
前記受信処理部は、
前記演算処理装置から受信したデータの書き込み先のメモリに対応する前記第１バッファ部および前記第２バッファ部のいずれかにデータを出力し、出力先が前記第１バッファ部に設定されている場合、前記入力ポインタが示す格納位置にデータを格納する第１スイッチ部と、
前記不揮発性メモリにデータを書き込むライト命令を前記演算処理装置から受信した場合、前記第１スイッチ部の出力先を前記第１バッファ部に設定する第１制御部とを有し、
前記メモリアクセス部は、
前記第１バッファ部にアクセス可能な第１状態に設定された場合、前記第１バッファ部に格納されたデータを前記出力ポインタが示す読み出し位置から読み出し、前記第２バッファ部にアクセス可能な第２状態に設定された場合、前記第２バッファ部に格納されたデータを読み出す第２スイッチ部と、
前記第１バッファ部から前記第２スイッチ部を介して転送されたデータを前記不揮発性メモリに書き込み、前記第２バッファ部から前記第２スイッチ部を介して転送されたデータを前記揮発性メモリに書き込むアクセス処理部とを有する
ことを特徴とするメモリコントローラ。
【請求項３】
請求項２に記載のメモリコントローラにおいて、
前記第１制御部は、前記メモリ部の記憶領域を示すアドレスと命令とを前記演算処理装置から受信し、前記演算処理装置から受信したアドレスが前記不揮発性メモリに割り当てられたアドレスであり、かつ、前記演算処理装置から受信した命令がライト命令である場合、前記第１スイッチ部の出力先を前記第１バッファ部に設定する
ことを特徴とするメモリコントローラ。
【請求項４】
請求項２または請求項３に記載のメモリコントローラにおいて、
前記第１スイッチ部は、前記第１バッファ部へのデータの格納が完了した後、前記入力ポインタを更新する
ことを特徴とするメモリコントローラ。
【請求項５】
請求項２ないし請求項４のいずれか１項に記載のメモリコントローラにおいて、
前記第２スイッチ部は、前記第１バッファ部に格納されたデータを前記不揮発性メモリに書き込む場合、前記出力ポインタが示す読み出し位置から読み出したデータを前記不揮発性メモリへ書き込んだ後、前記出力ポインタを更新する
ことを特徴とするメモリコントローラ。
【請求項６】
請求項２ないし請求項５のいずれか１項に記載のメモリコントローラにおいて、
前記不揮発性メモリおよび前記揮発性メモリからデータを受信し、受信したデータを前記演算処理装置に転送するメモリ読み出し部をさらに有し、
前記第１スイッチ部は、電源投入時に前記演算処理装置により実行される初期化処理中では、出力先が前記第２バッファ部に設定され、
前記第２スイッチ部は、前記初期化処理中では、前記第２状態に設定され、前記初期化処理の後に、前記第１状態に切り替わり、前記入力ポインタと前記出力ポインタとの比較結果に基づいて、電源遮断前の前回の動作で前記不揮発性メモリに書き込まれずに前記第１バッファ部に残った残データが存在するかを判定し、前記残データが前記第１バッファ部に保持されている場合、前記第１バッファ部に保持された前記残データを前記アクセス処理部を介して前記不揮発性メモリに書き込む
ことを特徴とするメモリコントローラ。
【請求項７】
請求項２ないし請求項６のいずれか１項に記載のメモリコントローラにおいて、
前記第２スイッチ部は、前記第１状態と前記第２状態とをアクセス毎に交互に選択する
ことを特徴とするメモリコントローラ。
【請求項８】
請求項２ないし請求項６のいずれか１項に記載のメモリコントローラにおいて、
前記メモリアクセス部は、
前記第２スイッチ部から出力される命令および前記メモリ部の記憶領域を示すアドレスを受信し、前記第２スイッチ部から受信したアドレスが前記不揮発性メモリに割り当てられたアドレスであり、かつ、前記第２スイッチ部から受信した命令がライト命令である場合、前記出力ポインタが更新されるまで前記第２スイッチ部を前記第２状態に設定し、前記出力ポインタの更新に応じて前記第２スイッチ部を前記第１状態に切り替える第２制御部をさらに有する
ことを特徴とするメモリコントローラ。
【請求項９】
請求項１に記載のメモリコントローラにおいて、
前記メモリ部は揮発性メモリをさらに含み、
前記演算処理装置から転送されるデータのうち、前記揮発性メモリに書き込むデータを保持する揮発性の第２バッファ部と、
前記不揮発性メモリから読み出されるデータを受信し、受信したデータを保持する第１応答バッファ部と、
前記揮発性メモリから読み出されるデータを受信し、受信したデータを保持する第２応答バッファ部と、
前記第１応答バッファ部にアクセス可能な第１応答状態に設定された場合、前記第１応答バッファ部に保持されたデータを前記演算処理装置に転送し、前記第２応答バッファ部にアクセス可能な第２応答状態に設定された場合、前記第２応答バッファ部に保持されたデータを前記演算処理装置に転送する応答スイッチ部とをさらに有し、
前記受信処理部は、
前記演算処理装置から受信したデータの書き込み先のメモリに対応する前記第１バッファ部および前記第２バッファ部のいずれかにデータを出力し、出力先が前記第１バッファ部に設定されている場合、前記入力ポインタが示す格納位置にデータを格納する第１スイッチ部と、
前記不揮発性メモリにデータを書き込むライト命令を前記演算処理装置から受信した場合、前記第１スイッチ部の出力先を前記第１バッファ部に設定する第１制御部とを有し、
前記メモリアクセス部は、
前記第１バッファ部に格納されたデータを前記出力ポインタが示す読み出し位置から読み出す第１バッファ読み出し部と、
前記第２バッファ部に格納されたデータを読み出す第２バッファ読み出し部と、
前記第１バッファ部から前記第１バッファ読み出し部を介して転送されたデータを前記不揮発性メモリに書き込む第１アクセス処理部と、
前記第２バッファ部から前記第２バッファ読み出し部を介して転送されたデータを前記揮発性メモリに書き込む第２アクセス処理部とを有する
ことを特徴とするメモリコントローラ。
【請求項１０】
メモリコントローラによる不揮発性メモリを含むメモリ部のメモリアクセス方法において、
前記メモリコントローラが有する不揮発性のポインタ保持部は、前記メモリコントローラが有する不揮発性の第１バッファ部に格納するデータの格納位置を示す入力ポインタと前記第１バッファ部から読み出すデータの読み出し位置を示す出力ポインタとを保持し、
前記メモリコントローラが有する受信処理部は、前記不揮発性メモリに書き込むデータを演算処理装置から受信した場合、前記演算処理装置から受信したデータを前記第１バッファ部における前記入力ポインタが示す格納位置に格納し、前記メモリ部にデータを書き込むライト命令の実行順の制限を指示する順序制限命令を前記演算処理装置から受信した場合、前記順序制限命令より前に前記演算処理装置から転送された先行データが前記第１バッファ部に格納されたかを判定し、前記第１バッファ部への前記先行データの格納が完了した場合に、前記順序制限命令により指示されたライト命令の実行順を制限する処理が完了したことを示す完了情報を前記演算処理装置に通知し、
前記メモリコントローラが有するメモリアクセス部は、前記第１バッファ部に格納されたデータを前記出力ポインタが示す読み出し位置から読み出し、前記第１バッファ部から読み出したデータを前記不揮発性メモリに書き込む
ことを特徴とするメモリアクセス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラおよびメモリアクセス方法に関する。
【背景技術】
【０００２】
メモリは、電力の供給がなくてもデータを保持するフラッシュメモリ等の不揮発性メモリと、データを保持するために電力の供給が必要なＤＲＡＭ（Dynamic Random Access Memory）等の揮発性メモリとに大別される。例えば、フラッシュメモリへのデータの書き込み速度は、フラッシュメモリが接続されるホスト装置の動作速度に比べて、遅い。このため、フラッシュメモリを制御するコントローラは、ＳＲＡＭ（Static Random Access Memory）等のバッファメモリを有する（例えば、特許文献１参照）。この種のコントローラは、ホスト装置から受信したデータをバッファメモリに保持し、バッファメモリに保持したデータをフラッシュメモリに書き込む。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−２９３８９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
近年、ＭＲＡＭ（Magnetoresistive Random Access Memory）、ＰＣＭ（Phase Change Memory）、ＲｅＲＡＭ（Resistive Random Access Memory）等のストレージクラスメモリと呼ばれる不揮発性メモリが登場している。以下、ストレージクラスメモリは、ＳＣＭ（Storage Class Memory）とも称される。ＳＣＭでは、バイト単位のアクセスが可能であり、従来の不揮発性メモリに比べて高速にアクセスすることができる。
【０００５】
このため、例えば、コンピュータに搭載されるＣＰＵ（Central Processing Unit）等の演算処理装置の主記憶装置として、不揮発性メモリと、ＤＲＡＭ等の揮発性メモリとを併用し、コンピュータの性能を向上させることが検討されている。不揮発性メモリを含む主記憶装置と演算処理装置との間のデータ転送は、メモリコントローラにより制御される。
【０００６】
ここで、例えば、主記憶装置として不揮発性メモリを使用することが想定されていないコンピュータアーキテクチャでは、不揮発性メモリへのデータの書き込み順を制限する仕組みがない。このため、不揮発性メモリへのデータの書き込み順がメモリコントローラ内で入れ替わるおそれがある。例えば、主記憶装置へのデータの書き込み順を制限することにより正常に動作するプログラムをコンピュータが実行した場合、書き込み順を制限したデータの不揮発性メモリへの書き込み順が入れ替わると、プログラムは正常に動作しない。また、例えば、不揮発性メモリへのデータの順番を入れ替えた書き込み処理を実行中にコンピュータがクラッシュした場合、不揮発性メモリに正しいデータが書き込まれないおそれがある。
【０００７】
このため、メモリコントローラから不揮発性メモリにデータを書き込む順番を制限する命令を追加したアーキテクチャが検討されている。この種のアーキテクチャでは、演算処理装置は、不揮発性メモリへのデータの書き込み順を制限する命令を発行した後、主記憶装置に書き込むデータのメモリコントローラへの転送を、不揮発性メモリへのデータ書き込みが完了するまで待機する。演算処理装置からメモリコントローラへのデータ転送の待機時間が増加すると、コンピュータの処理性能が低下する。例えば、演算処理装置の待機時間の増加に伴い、演算処理装置によるプログラムの処理時間が増加する。
【０００８】
１つの側面では、本件開示のメモリコントローラおよびメモリアクセス方法は、演算処理装置からメモリコントローラへのデータ転送の待機時間の増加を抑制することを目的とする。
【課題を解決するための手段】
【０００９】
一観点によれば、不揮発性メモリを含むメモリ部を制御するメモリコントローラは、不揮発性メモリに書き込むデータを保持する不揮発性の第１バッファ部と、第１バッファ部に格納するデータの格納位置を示す入力ポインタと第１バッファ部から読み出すデータの読み出し位置を示す出力ポインタとを保持する不揮発性のポインタ保持部と、不揮発性メモリに書き込むデータを演算処理装置から受信した場合、演算処理装置から受信したデータを第１バッファ部における入力ポインタが示す格納位置に格納し、メモリ部にデータを書き込むライト命令の実行順の制限を指示する順序制限命令を演算処理装置から受信した場合、順序制限命令より前に演算処理装置から転送された先行データが第１バッファ部に格納されたかを判定し、第１バッファ部への先行データの格納が完了した場合に、順序制限命令により指示されたライト命令の実行順を制限する処理が完了したことを示す完了情報を演算処理装置に通知する受信処理部と、第１バッファ部に格納されたデータを出力ポインタが示す読み出し位置から読み出し、第１バッファ部から読み出したデータを不揮発性メモリに書き込むメモリアクセス部とを有する。
【００１０】
別の観点によれば、メモリコントローラによる不揮発性メモリを含むメモリ部のメモリアクセス方法では、メモリコントローラが有する不揮発性のポインタ保持部は、メモリコントローラが有する不揮発性の第１バッファ部に格納するデータの格納位置を示す入力ポインタと第１バッファ部から読み出すデータの読み出し位置を示す出力ポインタとを保持し、メモリコントローラが有する受信処理部は、不揮発性メモリに書き込むデータを演算処理装置から受信した場合、演算処理装置から受信したデータを第１バッファ部における入力ポインタが示す格納位置に格納し、メモリ部にデータを書き込むライト命令の実行順の制限を指示する順序制限命令を演算処理装置から受信した場合、順序制限命令より前に演算処理装置から転送された先行データが第１バッファ部に格納されたかを判定し、第１バッファ部への先行データの格納が完了した場合に、順序制限命令により指示されたライト命令の実行順を制限する処理が完了したことを示す完了情報を演算処理装置に通知し、メモリコントローラが有するメモリアクセス部は、第１バッファ部に格納されたデータを出力ポインタが示す読み出し位置から読み出し、第１バッファ部から読み出したデータを不揮発性メモリに書き込む。
【発明の効果】
【００１１】
本件開示のメモリコントローラおよびメモリアクセス方法は、演算処理装置からメモリコントローラへのデータ転送の待機時間の増加を抑制できる。
【図面の簡単な説明】
【００１２】
【図１】メモリコントローラおよびメモリアクセス方法の一実施形態を示す図である。
【図２】メモリコントローラおよびメモリアクセス方法の別の実施形態を示す図である。
【図３】図２に示した受信処理部の一例を示す図である。
【図４】図２に示したポインタの更新の一例を示す図である。
【図５】図２に示した第１制御部および第１スイッチ部の動作の一例を示す図である。
【図６】図２に示した第２スイッチ部の動作の一例を示す図である。
【図７】図２に示したメモリコントローラが搭載される情報処理装置によるデータ更新の一例を示す図である。
【図８】図２に示したメモリコントローラが搭載される情報処理装置の動作の一例を示す図である。
【図９】メモリコントローラおよびメモリアクセス方法の別の実施形態を示す図である。
【図１０】図９に示した第２スイッチ部および第２制御部の動作の一例を示す図である。
【図１１】メモリコントローラおよびメモリアクセス方法の別の実施形態を示す図である。
【発明を実施するための形態】
【００１３】
以下、実施形態について、図面を用いて説明する。図１は、メモリコントローラおよびメモリアクセス方法の一実施形態を示す。図１に示すメモリコントローラＭＣＬａは、不揮発性メモリＭＥＭ１を含むメモリ部ＭＭＥＭを制御する。メモリ部ＭＭＥＭは、ＣＰＵ等の演算処理装置ＰＵの主記憶装置である。以下、メモリ部ＭＭＥＭは、主記憶装置ＭＭＥＭとも称される。すなわち、不揮発性メモリＭＥＭ１は、演算処理装置ＰＵの主記憶装置として使用される不揮発性メモリデバイス（ＮＶＤＩＭＭ：Non-Volatile Dual In-line Memory Module）である。例えば、コンピュータ等の情報処理装置ＩＰＥａは、メモリコントローラＭＣＬａ、演算処理装置ＰＵおよび主記憶装置ＭＭＥＭを有する。メモリコントローラＭＣＬａは、バスＭＢＵＳを介して不揮発性メモリＭＥＭ１に接続され、演算処理装置ＰＵと不揮発性メモリＭＥＭ１との間のデータ転送を制御する。
【００１４】
例えば、メモリコントローラＭＣＬａは、命令ＳＦＥＮ等の命令を含む要求情報ＲＥＱを演算処理装置ＰＵから受信する。命令ＳＦＥＮは、主記憶装置ＭＭＥＭにデータを書き込むライト命令の実行順の制限を指示する順序制限命令であり、メモリバリアまたはメモリフェンスと呼ばれる命令の１種である。以下、命令ＳＦＥＮは、フェンス命令ＳＦＥＮとも称される。例えば、演算処理装置ＰＵは、フェンス命令ＳＦＥＮを発行した後、フェンス命令ＳＦＥＮに基づく処理の完了を示す完了情報を受信するまで、ライト命令の発行を停止する。フェンス命令ＳＦＥＮを含む要求情報ＲＥＱを演算処理装置ＰＵから受信した場合のメモリコントローラＭＣＬａの動作は、後述する受信処理部ＲＰＵａの動作を説明する際に説明する。
【００１５】
演算処理装置ＰＵがライト命令を発行した場合、メモリコントローラＭＣＬａは、ライト命令、書き込み対象のデータおよびアドレスを含む要求情報ＲＥＱを演算処理装置ＰＵから受信する。そして、メモリコントローラＭＣＬａは、演算処理装置ＰＵから受信した要求情報ＲＥＱに含まれるライト命令およびアドレス等に基づいて、要求情報ＲＥＱに含まれるデータを主記憶装置ＭＭＥＭに書き込む。アドレスは、例えば、主記憶装置ＭＭＥＭの記憶領域を示す物理アドレスである。
【００１６】
また、主記憶装置ＭＭＥＭからデータを読み出すリード命令を演算処理装置ＰＵが発行した場合、メモリコントローラＭＣＬａは、リード命令およびアドレスを含む要求情報ＲＥＱを演算処理装置ＰＵから受信する。そして、メモリコントローラＭＣＬａは、演算処理装置ＰＵから受信した要求情報ＲＥＱに含まれるリード命令およびアドレス等に基づいて、読み出し対象のデータを主記憶装置ＭＭＥＭから読み出し、読み出したデータを演算処理装置ＰＵに出力する。
【００１７】
メモリコントローラＭＣＬａは、第１バッファ部ＢＵＦ１、ポインタ保持部ＰＭＥＭ、受信処理部ＲＰＵａおよびメモリアクセス部ＭＡＵａを有する。以下、第１バッファ部ＢＵＦ１は、バッファ部ＢＵＦ１とも称される。
【００１８】
バッファ部ＢＵＦ１は、例えば、演算処理装置ＰＵから転送される要求情報ＲＥＱのうち、不揮発性メモリＭＥＭ１に書き込むデータを含む要求情報ＲＥＱを保持する不揮発性のバッファである。すなわち、バッファ部ＢＵＦ１は、不揮発性メモリＭＥＭ１に書き込むデータを保持する。
【００１９】
ポインタ保持部ＰＭＥＭは、バッファ部ＢＵＦ１へのアクセスに使用するポインタＰＴ（ＰＴＩ、ＰＴＯ）を保持する不揮発性のメモリである。ポインタＰＴＩは、バッファ部ＢＵＦ１に格納するデータの格納位置を示す入力ポインタである。ポインタＰＴＯは、バッファ部ＢＵＦ１から読み出すデータの読み出し位置を示す出力ポインタである。
【００２０】
受信処理部ＲＰＵａは、演算処理装置ＰＵから要求情報ＲＥＱを受信する。例えば、受信処理部ＲＰＵａは、不揮発性メモリＭＥＭ１に書き込むデータを含む要求情報ＲＥＱを演算処理装置ＰＵから受信した場合、演算処理装置ＰＵから受信した要求情報ＲＥＱを入力ポインタＰＴＩを参照してバッファ部ＢＵＦ１に格納する。このように、受信処理部ＲＰＵａは、不揮発性メモリＭＥＭ１に書き込むデータをバッファ部ＢＵＦ１に格納する際、入力ポインタＰＴＩが示す格納位置にデータを格納する。なお、入力ポインタＰＴＩは、例えば、要求情報ＲＥＱがバッファ部ＢＵＦ１に格納された後に更新される。
【００２１】
また、受信処理部ＲＰＵａは、フェンス命令ＳＦＥＮを演算処理装置ＰＵから受信した場合、フェンス命令ＳＦＥＮより前に演算処理装置ＰＵから転送された先行データがバッファ部ＢＵＦ１に格納されたかを判定する。そして、受信処理部ＲＰＵａは、バッファ部ＢＵＦ１への先行データの格納が完了した場合に、フェンス命令ＳＦＥＮにより指示されたライト命令の実行順を制限する処理が完了したことを示す完了情報を演算処理装置ＰＵに通知する。これにより、演算処理装置ＰＵは、ライト命令の発行を再開する。以下、フェンス命令ＳＦＥＮにより指示されたライト命令の実行順を制限する処理が完了したことを示す完了情報を演算処理装置ＰＵに通知することは、フェンス命令ＳＦＥＮを解除するとも称される。
【００２２】
メモリアクセス部ＭＡＵａは、バッファ部ＢＵＦ１に格納されたデータを出力ポインタＰＴＯが示す読み出し位置から読み出し、バッファ部ＢＵＦ１から読み出したデータを不揮発性メモリＭＥＭ１に書き込む。例えば、メモリアクセス部ＭＡＵａは、データ等を含む要求情報ＲＥＱの読み出し位置を出力ポインタＰＴＯを参照して特定し、要求情報ＲＥＱをバッファ部ＢＵＦ１の特定した読み出し位置から読み出す。そして、メモリアクセス部ＭＡＵａは、バッファ部ＢＵＦ１から読み出した要求情報ＲＥＱに基づいて不揮発性メモリＭＥＭ１に命令を発行し、要求情報ＲＥＱに含まれるデータを不揮発性メモリＭＥＭ１に書き込む。なお、出力ポインタＰＴＯは、例えば、要求情報ＲＥＱに含まれるデータが不揮発性メモリＭＥＭ１に書き込まれた後に更新される。
【００２３】
すなわち、データが不揮発性メモリＭＥＭ１に書き込まれた後に、次のデータがバッファ部ＢＵＦ１から読み出される。したがって、データの不揮発性メモリＭＥＭ１への書き込みは、データがバッファ部ＢＵＦ１に格納された順に、実行される。これにより、フェンス命令ＳＦＥＮに先行する先行データのバッファ部ＢＵＦ１への格納が完了した場合にフェンス命令ＳＦＥＮを解除しても、データの不揮発性メモリＭＥＭ１への書き込みは、演算処理装置ＰＵからデータを受信した順に実行される。
【００２４】
このように、メモリコントローラＭＣＬａは、フェンス命令ＳＦＥＮに先行する先行データのバッファ部ＢＵＦ１への格納が完了した場合にフェンス命令ＳＦＥＮを解除する。したがって、メモリコントローラＭＣＬａは、先行データの不揮発性メモリＭＥＭ１への書き込みが完了するまでライト命令の発行を待機する構成に比べて、ライト命令の発行を再開するタイミングを早くできる。この結果、演算処理装置ＰＵからメモリコントローラＭＣＬａへのデータ転送の待機時間を低減することができる。これにより、メモリコントローラＭＣＬａは、演算処理装置ＰＵによるプログラムの処理時間が増加することを抑制できる。なお、メモリコントローラＭＣＬａの構成は、図１に示す例に限定されない。
【００２５】
以上、図１に示す実施形態では、不揮発性のバッファ部ＢＵＦ１は、不揮発性メモリＭＥＭ１に書き込むデータを保持し、不揮発性のポインタ保持部ＰＭＥＭは、バッファ部ＢＵＦ１の入力ポインタＰＴＩおよび出力ポインタＰＴＯを保持する。そして、受信処理部ＲＰＵａは、不揮発性メモリＭＥＭ１に書き込むデータを演算処理装置ＰＵから受信した場合、演算処理装置ＰＵから受信したデータをバッファ部ＢＵＦ１における入力ポインタＰＴＩが示す格納位置に格納する。また、受信処理部ＲＰＵａは、フェンス命令ＳＦＥＮを演算処理装置ＰＵから受信した場合、フェンス命令ＳＦＥＮに先行する先行データがバッファ部ＢＵＦ１に格納されたかを判定する。そして、受信処理部ＲＰＵａは、バッファ部ＢＵＦ１への先行データの格納が完了した場合に、フェンス命令ＳＦＥＮにより指示されたライト命令の実行順を制限する処理が完了したことを示す完了情報を演算処理装置ＰＵに通知する。
【００２６】
このように、メモリコントローラＭＣＬａは、フェンス命令ＳＦＥＮの解除を先行データの不揮発性メモリＭＥＭ１への書き込みが完了するまで待機せずに実行する。このため、メモリコントローラＭＣＬａでは、先行データの不揮発性メモリＭＥＭ１への書き込みが完了した場合にフェンス命令ＳＦＥＮが解除される構成に比べて、演算処理装置ＰＵがライト命令等の発行を再開するまでの待機時間を短くすることができる。すなわち、メモリコントローラＭＣＬａは、演算処理装置ＰＵからメモリコントローラＭＣＬａへのデータ転送の待機時間の増加を抑制できる。
【００２７】
図２は、メモリコントローラおよびメモリアクセス方法の別の実施形態を示す。図１で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図２に示すメモリコントローラＭＣＬｂは、不揮発性メモリＭＥＭ１および揮発性メモリＭＥＭ２を含む主記憶装置ＭＭＥＭを制御する。例えば、メモリコントローラＭＣＬｂは、図１に示した受信処理部ＲＰＵａおよびメモリアクセス部ＭＡＵａの代わりに、受信処理部ＲＰＵｂおよびメモリアクセス部ＭＡＵｂを有する。さらに、メモリコントローラＭＣＬｂでは、第２バッファ部ＢＵＦ２、レジスタＲＥＧおよびメモリ読み出し部ＭＲＵが図１に示したメモリコントローラＭＣＬａに追加される。メモリコントローラＭＣＬｂのその他の構成は、図１に示したメモリコントローラＭＣＬａと同一または同様である。例えば、情報処理装置ＩＰＥｂは、メモリコントローラＭＣＬｂ、演算処理装置ＰＵおよび主記憶装置ＭＭＥＭを有する。メモリコントローラＭＣＬｂは、不揮発性メモリＭＥＭ１および揮発性メモリＭＥＭ２にバスＭＢＵＳを介して接続され、不揮発性メモリＭＥＭ１および揮発性メモリＭＥＭ２を含む主記憶装置ＭＭＥＭと演算処理装置ＰＵとの間のデータ転送を制御する。
【００２８】
メモリコントローラＭＣＬｂは、第１バッファ部ＢＵＦ１、第２バッファ部ＢＵＦ２、ポインタ保持部ＰＭＥＭ、受信処理部ＲＰＵｂ、メモリアクセス部ＭＡＵｂ、レジスタＲＥＧおよびメモリ読み出し部ＭＲＵを有する。以下、第２バッファ部ＢＵＦ２は、バッファ部ＢＵＦ２とも称される。
【００２９】
バッファ部ＢＵＦ１は、図１に示したバッファ部ＢＵＦ１と同一または同様である。例えば、バッファ部ＢＵＦ１は、演算処理装置ＰＵから転送されるデータのうち、不揮発性メモリＭＥＭ１に書き込むデータを保持する不揮発性のバッファである。
【００３０】
バッファ部ＢＵＦ２は、例えば、演算処理装置ＰＵから転送される要求情報ＲＥＱのうち、第１バッファ部ＢＵＦ１に保持されない要求情報ＲＥＱを保持する揮発性のバッファである。例えば、第２バッファ部ＢＵＦ２は、演算処理装置ＰＵから転送されるデータのうち、揮発性メモリＭＥＭ２に書き込むデータを保持する。
【００３１】
受信処理部ＲＰＵｂは、第１スイッチ部ＳＷ１および第１制御部ＣＬ１を有する。以下、第１スイッチ部ＳＷ１および第１制御部ＣＬ１は、スイッチ部ＳＷ１および制御部ＣＬ１ともそれぞれ称される。
【００３２】
スイッチ部ＳＷ１は、演算処理装置ＰＵから受信したデータの書き込み先のメモリに対応するバッファ部ＢＵＦ１、ＢＵＦ２のいずれかにデータを出力する。なお、スイッチ部ＳＷ１は、制御部ＣＬ１の制御により、演算処理装置ＰＵから受信したデータの書き込み先に応じてデータの出力先がバッファ部ＢＵＦ１、ＢＵＦ２のいずれかに設定される。例えば、スイッチ部ＳＷ１は、出力先がバッファ部ＢＵＦ１に設定されている場合、演算処理装置ＰＵから受信した要求情報ＲＥＱを、入力ポインタＰＴＩが示す格納位置に格納する。これにより、要求情報ＲＥＱに含まれるデータは、入力ポインタＰＴＩが示す格納位置に格納される。そして、例えば、スイッチ部ＳＷ１は、要求情報ＲＥＱをバッファ部ＢＵＦ１に格納した後に、入力ポインタＰＴＩを更新する。また、スイッチ部ＳＷ１は、出力先がバッファ部ＢＵＦ２に設定されている場合、演算処理装置ＰＵから受信した要求情報ＲＥＱをバッファ部ＢＵＦ２に格納する。
【００３３】
制御部ＣＬ１は、演算処理装置ＰＵからスイッチ部ＳＷ１に転送される要求情報ＲＥＱに含まれる情報のうち、命令およびアドレスを受信する。そして、制御部ＣＬ１は、不揮発性メモリＭＥＭ１にデータを書き込むライト命令を演算処理装置ＰＵから受信した場合、スイッチ部ＳＷ１の出力先をバッファ部ＢＵＦ１に設定する。例えば、制御部ＣＬ１は、演算処理装置ＰＵから受信したアドレスが不揮発性メモリＭＥＭ１に割り当てられたアドレスであり、かつ、演算処理装置ＰＵから受信した命令がライト命令である場合、スイッチ部ＳＷ１の出力先をバッファ部ＢＵＦ１に設定する。なお、制御部ＣＬ１は、演算処理装置ＰＵから受信したアドレスが揮発性メモリＭＥＭ２のアドレスである場合、または、演算処理装置ＰＵから受信した命令がライト命令以外である場合、スイッチ部ＳＷ１の出力先をバッファ部ＢＵＦ２に設定する。
【００３４】
また、制御部ＣＬ１は、フェンス命令ＳＦＥＮを演算処理装置ＰＵから受信した場合、フェンス命令ＳＦＥＮに先行する先行データがバッファ部ＢＵＦ１、ＢＵＦ２のいずれかに格納されたかを判定する。そして、制御部ＣＬ１は、バッファ部ＢＵＦ１、ＢＵＦ２のいずれかへの先行データの格納が完了した場合に、フェンス命令ＳＦＥＮにより指示されたライト命令の実行順を制限する処理が完了したことを示す完了情報を演算処理装置ＰＵに通知する。ポインタ保持部ＰＭＥＭは、図１に示したポインタ保持部ＰＭＥＭと同一または同様である。
【００３５】
メモリアクセス部ＭＡＵｂは、第２スイッチ部ＳＷ２ｂおよびアクセス処理部ＡＣＰを有する。以下、第２スイッチ部ＳＷ２ｂは、スイッチ部ＳＷ２ｂとも称される。スイッチ部ＳＷ２ｂは、バッファ部ＢＵＦ１にアクセス可能な第１状態に設定された場合、バッファ部ＢＵＦ１に格納されたデータを出力ポインタＰＴＯが示す読み出し位置から読み出す。また、スイッチ部ＳＷ２ｂは、バッファ部ＢＵＦ２にアクセス可能な第２状態に設定された場合、バッファ部ＢＵＦ２に格納されたデータを読み出す。例えば、スイッチ部ＳＷ２ｂは、第１状態と第２状態とをアクセス毎に交互に選択する。
【００３６】
アクセス処理部ＡＣＰは、バッファ部ＢＵＦ１からスイッチ部ＳＷ２ｂを介して転送されたデータを不揮発性メモリＭＥＭ１に書き込み、バッファ部ＢＵＦ２からスイッチ部ＳＷ２ｂを介して転送されたデータを揮発性メモリＭＥＭ２に書き込む。例えば、アクセス処理部ＡＣＰは、メモリマッピング部ＭＭＡＰ、調停部ＡＲＢおよびコマンド生成部ＣＧＥＮを有する。
【００３７】
メモリマッピング部ＭＭＡＰは、演算処理装置ＰＵからスイッチ部ＳＷ２ｂ等を介して転送されたアドレスを、不揮発性メモリＭＥＭ１および揮発性メモリＭＥＭ２のうちのアクセス先のメモリのアドレスに変換する。例えば、メモリマッピング部ＭＭＡＰは、バッファ部ＢＵＦ１から読み出されたアドレスを不揮発性メモリＭＥＭ１のアドレスに変換し、バッファ部ＢＵＦ２から読み出されたアドレスを揮発性メモリＭＥＭ２のアドレスに変換する。調停部ＡＲＢは、演算処理装置ＰＵからスイッチ部ＳＷ２ｂ等を介して転送された命令のスケジューリングを実行する。
【００３８】
コマンド生成部ＣＧＥＮは、演算処理装置ＰＵから調停部ＡＲＢ等を介して転送された命令を、不揮発性メモリＭＥＭ１および揮発性メモリＭＥＭ２のうちのアクセス先のメモリの命令に変換し、変換した命令をアクセス先のメモリに出力する。例えば、コマンド生成部ＣＧＥＮは、バッファ部ＢＵＦ１から読み出された命令を不揮発性メモリＭＥＭ１の命令に変換し、バッファ部ＢＵＦ２から読み出されたアドレスを揮発性メモリＭＥＭ２の命令に変換する。
【００３９】
メモリ読み出し部ＭＲＵは、リード命令で要求された読み出し対象のデータを主記憶装置ＭＭＥＭ等から受信し、受信したデータを演算処理装置ＰＵに転送する。すなわち、メモリ読み出し部ＭＲＵは、不揮発性メモリＭＥＭ１および揮発性メモリＭＥＭ２からデータを受信し、受信したデータを演算処理装置ＰＵに転送する。
【００４０】
レジスタＲＥＧは、アクセス処理部ＡＣＰから出力されたデータ等を順次保持する。これにより、メモリコントローラＭＣＬｂは、リード命令で要求された読み出し対象のデータが主記憶装置ＭＭＥＭに書き込まれている最中（書き込みが完了していない状態）でも、読み出し対象のデータをレジスタＲＥＧからメモリ読み出し部ＭＲＵに転送できる。なお、メモリコントローラＭＣＬｂの構成は、図２に示す例に限定されない。
【００４１】
図３は、図２に示した受信処理部ＲＰＵｂの一例を示す。なお、受信処理部ＲＰＵｂの構成は、図３に示す例に限定されない。
【００４２】
受信処理部ＲＰＵｂは、図２で説明したように、スイッチ部ＳＷ１および制御部ＣＬ１を有する。スイッチ部ＳＷ１は、データ、アドレスおよび命令等を含む要求情報ＲＥＱを受信する。なお、命令の種類によっては、要求情報ＲＥＱは、データ等を含まない場合もある。また、ライト命令は、例えば、フェンス命令ＳＦＥＮの対象であることを示すフェンス命令ＳＦＥＮ用のフラグを有する。例えば、フェンス命令ＳＦＥＮの対象であるライト命令では、フェンス命令ＳＦＥＮ用のフラグは、論理値”１”にセットされる。
【００４３】
制御部ＣＬ１は、例えば、不揮発性メモリＭＥＭ１に割り当てられたアドレスを記憶するレジスタＡＲＥＧと、フェンス命令ＳＦＥＮ用のテーブルＴＡＢＬとを有する。テーブルＴＡＢＬは、ライト命令を識別するためのライト識別子ＷＩＤと、ライト命令で要求された書き込み対象のデータがバッファ部ＢＵＦ１に格納された場合に論理値”１”にセットされる格納完了フラグＳＦＬＧとを有する。以下、ライト識別子ＷＩＤおよび格納完了フラグＳＦＬＧは、識別子ＷＩＤおよびフラグＳＦＬＧとも称される。
【００４４】
制御部ＣＬ１は、スイッチ部ＳＷ１が受信する要求情報ＲＥＱに含まれる情報のうち、アドレスおよび命令を受信する。例えば、制御部ＣＬ１は、演算処理装置ＰＵから受信したアドレスをレジスタＡＲＥＧに記憶されたアドレスと比較し、演算処理装置ＰＵから受信したアドレスが不揮発性メモリＭＥＭ１に割り当てられたアドレスであるか否かを判定する。また、制御部ＣＬ１は、演算処理装置ＰＵから受信した命令がライト命令であるか否かを判定する。そして、制御部ＣＬ１は、演算処理装置ＰＵから受信したアドレスが不揮発性メモリＭＥＭ１に割り当てられたアドレスであり、かつ、演算処理装置ＰＵから受信した命令がライト命令である場合、スイッチ部ＳＷ１の出力先をバッファ部ＢＵＦ１に設定する。なお、初期状態では、スイッチ部ＳＷ１の出力先は、例えば、バッファ部ＢＵＦ２に設定されている。
【００４５】
また、制御部ＣＬ１は、フェンス命令ＳＦＥＮ用のフラグが論理値”１”にセットされたライト命令を受信した場合、受信した命令をテーブルＴＡＢＬに登録する。これにより、フェンス命令ＳＦＥＮの対象となるライト命令の識別子ＷＩＤがテーブルＴＡＢＬに記憶されるとともに、識別子ＷＩＤに対応するフラグＳＦＬＧが論理値”０”にリセットされる。そして、制御部ＣＬ１は、ライト命令で要求された書き込み対象のデータのバッファ部ＢＵＦ１、ＢＵＦ２のいずれかへの格納が完了した場合、格納が完了したライト命令に対応するフラグＳＦＬＧを論理値”１”にセットする。
【００４６】
図４は、図２に示したポインタＰＴＩ、ＰＴＯの更新の一例を示す。図４に示す符号Ｐ（Ｐ０−Ｐ７）は、バッファ部ＢＵＦ１内の格納領域の位置を示す。図４に示す濃い網掛けの格納領域は、要求情報ＲＥＱが格納されたことを示し、薄い網掛けの格納領域は、要求情報ＲＥＱを格納中であることを示す。また、図４に示す太枠の格納領域は、データが不揮発性メモリＭＥＭ１に書き込まれたことを示し、破線で囲んだ格納領域は、データを不揮発性メモリＭＥＭ１に書き込み中であることを示す。先ず、入力ポインタＰＴＩの更新について説明する。
【００４７】
演算処理装置ＰＵから受信する要求情報ＲＥＱをバッファ部ＢＵＦ１に格納する前では、入力ポインタＰＴＩは、格納位置として位置Ｐ４を示している（図４の（ａ１））。このため、スイッチ部ＳＷ１は、演算処理装置ＰＵから受信した要求情報ＲＥＱを、入力ポインタＰＴＩが示す位置Ｐ４に格納する。バッファ部ＢＵＦ１への要求情報ＲＥＱの格納が開始されても、バッファ部ＢＵＦ１への要求情報ＲＥＱの格納が完了するまで、入力ポインタＰＴＩは、更新されない。したがって、要求情報ＲＥＱの格納中では、入力ポインタＰＴＩが示す格納位置は、位置Ｐ４に維持される（図４の（ａ２））。バッファ部ＢＵＦ１への要求情報ＲＥＱの格納が完了した後、入力ポインタＰＴＩが示す格納位置は、位置Ｐ５に更新される（図４の（ａ３））。この順番を守って入力ポインタＰＴＩを更新することにより、不揮発性メモリＭＥＭ１へのデータの書き込み順の一貫性が維持される。次に、出力ポインタＰＴＯの更新について説明する。
【００４８】
演算処理装置ＰＵから受信したデータをバッファ部ＢＵＦ１から読み出す前では、出力ポインタＰＴＯは、読み出し位置として位置Ｐ１を示している（図４の（ｂ１））。このため、スイッチ部ＳＷ２ｂは、不揮発性メモリＭＥＭ１に書き込むデータを、出力ポインタＰＴＯが示す位置Ｐ１から読み出す。バッファ部ＢＵＦ１からデータが読み出されても、不揮発性メモリＭＥＭ１へのデータの書き込みが完了するまで、出力ポインタＰＴＯは、更新されない。したがって、不揮発性メモリＭＥＭ１へのデータの書き込み中では、出力ポインタＰＴＯが示す読み出し位置は、位置Ｐ１に維持される（図４の（ｂ２））。不揮発性メモリＭＥＭ１へのデータの書き込みが完了した後、出力ポインタＰＴＯが示す読み出し位置は、位置Ｐ２に更新される（図４の（ｂ３））。この順番を守って出力ポインタＰＴＯを更新することにより、不揮発性メモリＭＥＭ１へのデータの書き込み順の一貫性が維持される。すなわち、メモリコントローラＭＣＬｂは、入力ポインタＰＴＩおよび出力ポインタＰＴＯの更新を図４に示す順番を守って実行することにより、不揮発性メモリＭＥＭ１へのデータの書き込み順の一貫性を保証する。
【００４９】
図５は、図２に示した第１制御部ＣＬ１および第１スイッチ部ＳＷ１の動作の一例を示す。なお、図５に示す動作は、要求情報ＲＥＱをバッファ部ＢＵＦ１、ＢＵＦ２のいずれかに格納する際のメモリコントローラＭＣＬｂの動作である。また、図５に示す例では、不揮発性メモリＭＥＭ１にデータを書き込むライト命令は、フェンス命令ＳＦＥＮ用のフラグが論理値”１”にセットされて、演算処理装置ＰＵからメモリコントローラＭＣＬｂに転送される。
【００５０】
ステップＳ１００では、スイッチ部ＳＷ１は、演算処理装置ＰＵから要求情報ＲＥＱを受信し、制御部ＣＬ１は、スイッチ部ＳＷ１が受信する要求情報ＲＥＱに含まれる情報のうち、アドレスおよび命令を取得する。
【００５１】
次に、ステップＳ１１０では、制御部ＣＬ１は、ステップＳ１００で取得した命令がフェンス命令ＳＦＥＮであるか否かを判定する。ステップＳ１００で取得した命令がフェンス命令ＳＦＥＮである場合、メモリコントローラＭＣＬｂの動作は、ステップＳ２５０に移る。一方、ステップＳ１００で取得した命令がフェンス命令ＳＦＥＮでない場合、メモリコントローラＭＣＬｂの動作は、ステップＳ１２０に移る。
【００５２】
ステップＳ１２０では、制御部ＣＬ１は、ステップＳ１００で取得したアドレスが不揮発性メモリＭＥＭ１に割り当てられたアドレスであるか否かを判定する。ステップＳ１００で取得したアドレスが不揮発性メモリＭＥＭ１に割り当てられたアドレスである場合、メモリコントローラＭＣＬｂの動作は、ステップＳ１３０に移る。一方、ステップＳ１００で取得したアドレスが不揮発性メモリＭＥＭ１に割り当てられたアドレスでない場合、メモリコントローラＭＣＬｂの動作は、ステップＳ２００に移る。
【００５３】
ステップＳ１３０では、制御部ＣＬ１は、ステップＳ１００で取得した命令がライト命令であるか否かを判定する。ステップＳ１００で取得した命令がライト命令である場合、メモリコントローラＭＣＬｂの動作は、ステップＳ１４０に移る。一方、ステップＳ１００で取得した命令がライト命令でない場合、メモリコントローラＭＣＬｂの動作は、ステップＳ２００に移る。
【００５４】
ステップＳ１４０では、制御部ＣＬ１は、スイッチ部ＳＷ１の出力先として、バッファ部ＢＵＦ１を選択する。すなわち、制御部ＣＬ１は、スイッチ部ＳＷ１の出力先をバッファ部ＢＵＦ１に設定する。
【００５５】
次に、ステップＳ１５０では、制御部ＣＬ１は、ステップＳ１００で取得した命令をテーブルＴＡＢＬに登録する。
【００５６】
次に、ステップＳ１６０では、スイッチ部ＳＷ１は、入力ポインタＰＴＩを参照して、格納位置を特定する。
【００５７】
次に、ステップＳ１７０では、スイッチ部ＳＷ１は、バッファ部ＢＵＦ１の格納領域のうち、入力ポインタＰＴＩが示す格納位置に、演算処理装置ＰＵから受信した要求情報ＲＥＱを格納する。すなわち、スイッチ部ＳＷ１は、ステップＳ１００で受信した要求情報ＲＥＱを、ステップＳ１６０で特定した格納位置に格納する。バッファ部ＢＵＦ１への要求情報ＲＥＱの格納が完了した後、ステップＳ１８０の処理が実行される。
【００５８】
ステップＳ１８０では、スイッチ部ＳＷ１は、入力ポインタＰＴＩを更新する。このように、スイッチ部ＳＷ１は、要求情報ＲＥＱをバッファ部ＢＵＦ１に格納した後に、入力ポインタＰＴＩを更新する。ステップＳ１８０の処理が実行された後、メモリコントローラＭＣＬｂの動作は、ステップＳ１９０に移る。
【００５９】
ステップＳ１９０では、制御部ＣＬ１は、バッファ部ＢＵＦ１、ＢＵＦ２のいずれかへのデータの格納が完了したライト命令に対応するフラグＳＦＬＧを論理値”１”にセットする。例えば、メモリコントローラＭＣＬｂの動作がステップＳ１７０を経由してステップＳ１９０に移った場合、制御部ＣＬ１は、ステップＳ１５０でテーブルＴＡＢＬに登録したライト命令に対応するフラグＳＦＬＧを論理値”１”にセットする。また、メモリコントローラＭＣＬｂの動作が後述するステップＳ２３０を経由してステップＳ１９０に移った場合、制御部ＣＬ１は、後述するステップＳ２２０でテーブルＴＡＢＬに登録したライト命令に対応するフラグＳＦＬＧを論理値”１”にセットする。なお、フラグＳＦＬＧの更新は、スイッチ部ＳＷ１により実行されてもよい。ステップＳ１９０の処理が実行された後、メモリコントローラＭＣＬｂの動作は、ステップＳ１００に戻る。
【００６０】
ステップＳ２００では、制御部ＣＬ１は、スイッチ部ＳＷ１の出力先として、バッファ部ＢＵＦ２を選択する。すなわち、制御部ＣＬ１は、スイッチ部ＳＷ１の出力先をバッファ部ＢＵＦ２に設定する。
【００６１】
次に、ステップＳ２１０では、制御部ＣＬ１は、ステップＳ１００で取得した命令がフェンス命令ＳＦＥＮの対象であるか否かを判定する。例えば、ステップＳ１００で取得した命令に含まれるフェンス命令ＳＦＥＮ用のフラグが論理値”１”にセットされているか否かを判定する。ステップＳ１００で取得した命令がフェンス命令ＳＦＥＮの対象である場合、メモリコントローラＭＣＬｂの動作は、ステップＳ２２０に移る。一方、ステップＳ１００で取得した命令がフェンス命令ＳＦＥＮの対象でない場合、メモリコントローラＭＣＬｂの動作は、ステップＳ２４０に移る。
【００６２】
ステップＳ２２０では、制御部ＣＬ１は、ステップＳ１００で取得した命令をテーブルＴＡＢＬに登録する。
【００６３】
次に、ステップＳ２３０では、スイッチ部ＳＷ１は、演算処理装置ＰＵから受信した要求情報ＲＥＱをバッファ部ＢＵＦ２に格納する。すなわち、スイッチ部ＳＷ１は、ステップＳ１００で受信した要求情報ＲＥＱをバッファ部ＢＵＦ２に格納する。ステップＳ２３０の処理が実行され、バッファ部ＢＵＦ２への要求情報ＲＥＱの格納が完了した後、メモリコントローラＭＣＬｂの動作は、ステップＳ１９０に移る。
【００６４】
ステップＳ２４０では、スイッチ部ＳＷ１は、演算処理装置ＰＵから受信した要求情報ＲＥＱをバッファ部ＢＵＦ２に格納する。すなわち、スイッチ部ＳＷ１は、ステップＳ１００で受信した要求情報ＲＥＱをバッファ部ＢＵＦ２に格納する。ステップＳ２４０の処理が実行された後、メモリコントローラＭＣＬｂの動作は、ステップＳ１００に戻る。
【００６５】
ステップＳ２５０では、制御部ＣＬ１は、ステップＳ１５０、Ｓ２２０等でテーブルＴＡＢＬに登録されたライト命令に対応するフラグＳＦＬＧが全て論理値”１”にセットされたか否かを判定する。すなわち、制御部ＣＬ１は、フェンス命令ＳＦＥＮを受信する前に受信したデータのうち、フェンス命令ＳＦＥＮの対象となる全てのデータがバッファ部ＢＵＦ１、ＢＵＦ２のいずれかに格納されたか否かを判定する。判定対象のフラグＳＦＬＧが全て論理値”１”にセットされた場合、メモリコントローラＭＣＬｂの動作は、ステップＳ２６０に移る。
【００６６】
一方、判定対象のフラグＳＦＬＧのいずれかが論理値”１”にセットされていない場合、すなわち、判定対象のフラグＳＦＬＧのいずれかが論理値”０”の場合、メモリコントローラＭＣＬｂの動作は、ステップＳ２５０に戻る。すなわち、メモリコントローラＭＣＬｂは、判定対象のフラグＳＦＬＧが全て論理値”１”にセットされるまで、ステップＳ２６０の処理を実行せずに待機する。
【００６７】
ステップＳ２６０では、制御部ＣＬ１は、フェンス命令ＳＦＥＮを解除する。例えば、制御部ＣＬ１は、フェンス命令ＳＦＥＮにより指示されたライト命令の実行順を制限する処理が完了したことを示す完了情報を演算処理装置ＰＵに通知する。これにより、演算処理装置ＰＵは、フェンス命令ＳＦＥＮに基づいて停止していたライト命令の発行を再開する。ステップＳ２６０の処理が実行された後、メモリコントローラＭＣＬｂの動作は、ステップＳ１００に戻る。
【００６８】
このように、メモリコントローラＭＣＬｂは、フェンス命令ＳＦＥＮを演算処理装置ＰＵから受信した場合、フェンス命令ＳＦＥＮの対象となる先行データがバッファ部ＢＵＦ１、ＢＵＦ２のいずれかに全て格納されたかを判定する。そして、メモリコントローラＭＣＬｂは、フェンス命令ＳＦＥＮの対象となる先行データがバッファ部ＢＵＦ１、ＢＵＦ２のいずれかに全て格納された場合に、フェンス命令ＳＦＥＮを解除する。なお、制御部ＣＬ１およびスイッチ部ＳＷ１の動作は、図５に示す例に限定されない。
【００６９】
図６は、図２に示した第２スイッチ部ＳＷ２ｂの動作の一例を示す。なお、図６に示す動作は、バッファ部ＢＵＦ１、ＢＵＦ２のいずれかから要求情報ＲＥＱを読み出す際のメモリコントローラＭＣＬｂの動作である。
【００７０】
ステップＳ４００では、スイッチ部ＳＷ２ｂは、バッファ部ＢＵＦ１にアクセス可能な第１状態に設定されているか否かを判定する。バッファ部ＢＵＦ１にアクセス可能な第１状態に設定されている場合、メモリコントローラＭＣＬｂの動作は、ステップＳ４１０に移る。一方、バッファ部ＢＵＦ１にアクセス可能な第１状態に設定されていない場合、すなわち、バッファ部ＢＵＦ２にアクセス可能な第２状態に設定されている場合、メモリコントローラＭＣＬｂの動作は、ステップＳ４７０に移る。
【００７１】
ステップＳ４１０では、スイッチ部ＳＷ２ｂは、読み出されていない要求情報ＲＥＱがバッファ部ＢＵＦ１に存在するか否かを判定する。例えば、スイッチ部ＳＷ２ｂは、入力ポインタＰＴＩと出力ポインタＰＴＯとが互いに同じ位置を示しているか否かを判定する。入力ポインタＰＴＩと出力ポインタＰＴＯとが互いに同じ位置を示している場合、スイッチ部ＳＷ２ｂは、不揮発性メモリＭＥＭ１に書き込むデータがバッファ部ＢＵＦ１に存在しないと判定する。すなわち、入力ポインタＰＴＩと出力ポインタＰＴＯとが互いに異なる位置を示している場合、スイッチ部ＳＷ２ｂは、不揮発性メモリＭＥＭ１に書き込むデータを含む要求情報ＲＥＱがバッファ部ＢＵＦ１に存在すると判定する。
【００７２】
読み出されていない要求情報ＲＥＱがバッファ部ＢＵＦ１に存在する場合、メモリコントローラＭＣＬｂの動作は、ステップＳ４２０に移る。一方、読み出されていない要求情報ＲＥＱがバッファ部ＢＵＦ１に存在しない場合、メモリコントローラＭＣＬｂの動作は、ステップＳ４６０に移る。
【００７３】
ステップＳ４２０では、スイッチ部ＳＷ２ｂは、出力ポインタＰＴＯを参照して、読み出し位置を特定する。
【００７４】
次に、ステップＳ４３０では、スイッチ部ＳＷ２ｂは、バッファ部ＢＵＦ１に格納された要求情報ＲＥＱを、ステップＳ４２０で特定した読み出し位置から読み出す。このように、スイッチ部ＳＷ２ｂは、バッファ部ＢＵＦ１にアクセス可能な第１状態に設定された場合、バッファ部ＢＵＦ１に格納されたデータを出力ポインタＰＴＯが示す読み出し位置から読み出す。
【００７５】
スイッチ部ＳＷ２ｂによりバッファ部ＢＵＦ１から読み出された要求情報ＲＥＱは、アクセス処理部ＡＣＰに転送される。そして、アクセス処理部ＡＣＰは、バッファ部ＢＵＦ１からスイッチ部ＳＷ２ｂを介して転送された要求情報ＲＥＱに含まれるデータを、不揮発性メモリＭＥＭ１に書き込む。
【００７６】
次に、ステップＳ４４０では、スイッチ部ＳＷ２ｂは、一定時間が経過したか否かを判定する。一定時間は、例えば、バッファ部ＢＵＦ１からデータが読み出されてから、不揮発性メモリＭＥＭ１へのデータの書き込みが完了するまでの時間である。一定時間が経過した場合、メモリコントローラＭＣＬｂの動作は、ステップＳ４５０に移る。一方、一定時間が経過していない場合、メモリコントローラＭＣＬｂの動作は、ステップＳ４４０に戻る。すなわち、ステップＳ４５０の処理は、ステップＳ４３０でバッファ部ＢＵＦ１から読み出されたデータの不揮発性メモリＭＥＭ１への書き込みが完了するまで待機される。
【００７７】
ステップＳ４５０では、スイッチ部ＳＷ２ｂは、出力ポインタＰＴＯを更新する。このように、スイッチ部ＳＷ２ｂは、要求情報ＲＥＱに含まれるデータが不揮発性メモリＭＥＭ１に書き込まれた後に、出力ポインタＰＴＯを更新する。ステップＳ４５０の処理が実行された後、メモリコントローラＭＣＬｂの動作は、ステップＳ４６０に移る。
【００７８】
ステップＳ４６０では、スイッチ部ＳＷ２ｂは、バッファ部ＢＵＦ２にアクセス可能な第２状態に状態を切り替える。ステップＳ４６０の処理が実行された後、メモリコントローラＭＣＬｂの動作は、ステップＳ４７０に移る。
【００７９】
ステップＳ４７０では、スイッチ部ＳＷ２ｂは、読み出されていない要求情報ＲＥＱがバッファ部ＢＵＦ２に存在するか否かを判定する。読み出されていない要求情報ＲＥＱがバッファ部ＢＵＦ２に存在する場合、メモリコントローラＭＣＬｂの動作は、ステップＳ４８０に移る。一方、読み出されていない要求情報ＲＥＱがバッファ部ＢＵＦ２に存在しない場合、メモリコントローラＭＣＬｂの動作は、ステップＳ４９０に移る。
【００８０】
ステップＳ４８０では、スイッチ部ＳＷ２ｂは、バッファ部ＢＵＦ２に格納された要求情報ＲＥＱを読み出す。このように、スイッチ部ＳＷ２ｂは、バッファ部ＢＵＦ２にアクセス可能な第２状態に設定された場合、バッファ部ＢＵＦ２に格納されたデータを読み出す。スイッチ部ＳＷ２ｂによりバッファ部ＢＵＦ２から読み出された要求情報ＲＥＱは、アクセス処理部ＡＣＰに転送される。
【００８１】
ステップＳ４９０では、スイッチ部ＳＷ２ｂは、バッファ部ＢＵＦ１にアクセス可能な第１状態に状態を切り替える。ステップＳ４９０の処理が実行された後、メモリコントローラＭＣＬｂの動作は、ステップＳ４１０に戻る。
【００８２】
このように、スイッチ部ＳＷ２ｂは、第１状態と第２状態とをアクセス毎に交互に選択する。なお、スイッチ部ＳＷ２ｂの動作は、図６に示す例に限定されない。
【００８３】
図７は、図２に示したメモリコントローラＭＣＬｂが搭載される情報処理装置ＩＰＥｂによるデータ更新の一例を示す。また、図７の括弧内に、比較例を示す。図７に示す比較例は、メモリコントローラから不揮発性メモリＭＥＭ１にデータを書き込む順番を制限する命令ＰＣＭＴを含むアーキテクチャを採用した場合の情報処理装置の動作を示す。なお、命令ＳＴは、データをメモリにストアするストア命令であり、命令ＷＢは、演算処理装置ＰＵ内のキャッシュメモリに格納されたデータを主記憶装置ＭＭＥＭに書き戻すライトバック命令である。命令ＳＴ等は、演算処理装置ＰＵ内のＣＰＵコアから発行される。
【００８４】
なお、図７に示す動作は、ツリー構造のデータを状態１から状態２に更新し、状態２から状態３に更新する際の情報処理装置ＩＰＥｂの動作である。図７に示す符号Ｒ（Ｒ１、Ｒ２、Ｒ３）は、ルートポイントを示す。また、図７に示す符号Ｂ（Ｂ１、Ｂ２、Ｂ３）、Ｃ（Ｃ１、Ｃ２）、Ｄ（Ｄ１、Ｄ２）、Ｅは、データ構造を示す。以下、ルートポイントＲ、データ構造Ｂ、Ｃ、Ｄ、Ｅは、データＲ、Ｂ、Ｃ、Ｄ、Ｅとも称される。
【００８５】
先ず、演算処理装置ＰＵ内のＣＰＵコアからストア命令ＳＴが発行され、データＤ２が演算処理装置ＰＵ内のキャッシュメモリに格納される。ＣＰＵコアからライトバック命令ＷＢが発行され、キャッシュメモリに格納されたデータＤ２がメモリコントローラＭＣＬｂに転送される。同様に、ＣＰＵコアからストア命令ＳＴおよびライトバック命令ＷＢが順次発行され、データＢ２がキャッシュメモリに格納され、キャッシュメモリに格納されたデータＢ２がメモリコントローラＭＣＬｂに転送される。そして、データＤ２、Ｂ２がメモリコントローラＭＣＬｂに到達することを保証するためにフェンス命令ＳＦＥＮがＣＰＵコアからメモリコントローラＭＣＬｂに発行される。メモリコントローラＭＣＬｂは、データＤ２、Ｂ２をバッファ部ＢＵＦ１に格納した後、フェンス命令ＳＦＥＮを解除する。
【００８６】
フェンス命令ＳＦＥＮが解除された後、ＣＰＵコアからストア命令ＳＴおよびライトバック命令ＷＢが順次発行され、データＲ２がキャッシュメモリに格納され、キャッシュメモリに格納されたデータＲ２がメモリコントローラＭＣＬｂに転送される。そして、データＲ２がメモリコントローラＭＣＬｂに到達することを保証するためにフェンス命令ＳＦＥＮがＣＰＵコアからメモリコントローラＭＣＬｂに発行され、データＲ２がバッファ部ＢＵＦ１に格納された後、フェンス命令ＳＦＥＮが解除される。これにより、ツリー構造のデータを状態１から状態２に更新する処理が終了し、ツリー構造のデータを状態２から状態３に更新する処理が実行される。
【００８７】
これに対し、比較例では、データＤ２、Ｂ２がメモリコントローラＭＣＬｂに到達することを保証するためにフェンス命令ＳＦＥＮがＣＰＵコアからメモリコントローラＭＣＬｂに発行された後、命令ＰＣＭＴが発行される。そして、比較例では、命令ＰＣＭＴに基づく処理が完了した後、データＤ２、Ｂ２が不揮発性メモリＭＥＭ１に書き込まれたことを保証するためにフェンス命令ＳＦＥＮが再度発行される。フェンス命令ＳＦＥＮが発行された後、データＲ１をデータＲ２に更新するために、データＤ２、Ｂ２の更新時と同様に、命令ＳＴ、ＷＢ、ＳＦＥＮ、ＰＣＭＴ、ＳＦＥＮが順次発行される。これにより、ツリー構造のデータを状態１から状態２に更新する処理が終了し、ツリー構造のデータを状態２から状態３に更新する処理が実行される。命令ＰＣＭＴを発行したＣＰＵコアは、不揮発性メモリＭＥＭ１へのデータの書き込みが完了するまで、メモリコントローラへの次の書き込みを待機する。
【００８８】
これに対し、メモリコントローラＭＣＬｂが搭載される情報処理装置ＩＰＥｂでは、命令ＰＣＭＴを省くことができる。このため、メモリコントローラＭＣＬｂでは、比較例に比べて、演算処理装置ＰＵがライト命令等の発行を再開するまでの待機時間を短くすることができる。すなわち、メモリコントローラＭＣＬｂは、演算処理装置ＰＵからメモリコントローラＭＣＬａへのデータ転送の待機時間の増加を抑制できる。これにより、メモリコントローラＭＣＬｂは、演算処理装置ＰＵの処理性能が低下することを抑制できる。
【００８９】
図８は、図２に示したメモリコントローラＭＣＬｂが搭載される情報処理装置ＩＰＥｂの動作の一例を示す。なお、図８は、情報処理装置ＩＰＥｂのブートシーケンスの一例を示す。
【００９０】
ステップＳ１０００では、情報処理装置ＩＰＥｂは、ＢＩＯＳ（Basic Input/Output System）をスタートする。
【００９１】
次に、ステップＳ１１００では、情報処理装置ＩＰＥｂは、演算処理装置ＰＵおよびメモリコントローラＭＣＬｂ等のハードウェアを初期化する。例えば、演算処理装置ＰＵは、電源投入時に初期化処理を実行する。なお、初期状態では、スイッチ部ＳＷ１の出力先は、バッファ部ＢＵＦ２に設定され、スイッチ部ＳＷ２ｂは、バッファ部ＢＵＦ２にアクセス可能な第２状態に設定されている。これにより、ハードウェアの初期化時に揮発性のバッファ部ＢＵＦ２のみを初期化し、不揮発性のバッファ部ＢＵＦ１内のデータが消去されることを防止することができる。また、従来のメモリコントローラの初期化手法をそのまま適用することができる。
【００９２】
次に、ステップＳ１２００では、メモリコントローラＭＣＬｂは、スイッチ部ＳＷ２ｂをバッファ部ＢＵＦ１にアクセス可能な第１状態に切り替える。
【００９３】
次に、ステップＳ１３００では、メモリコントローラＭＣＬｂのスイッチ部ＳＷ２ｂは、入力ポインタＰＴＩと出力ポインタＰＴＯとが互いに同じ位置を示しているか否かを判定する。入力ポインタＰＴＩと出力ポインタＰＴＯとが互いに同じ位置を示している場合、すなわち、不揮発性メモリＭＥＭ１に書き込むデータがバッファ部ＢＵＦ１に存在しない場合、情報処理装置ＩＰＥｂの動作は、ステップＳ１５００に移る。一方、入力ポインタＰＴＩと出力ポインタＰＴＯとが互いに異なる位置を示している場合、すなわち、不揮発性メモリＭＥＭ１に書き込むデータを含む要求情報ＲＥＱがバッファ部ＢＵＦ１に存在する場合、情報処理装置ＩＰＥｂの動作は、ステップＳ１４２０に移る。
【００９４】
このように、スイッチ部ＳＷ２ｂは、入力ポインタＰＴＩと出力ポインタＰＴＯとの比較結果に基づいて、電源遮断前の前回の動作で不揮発性メモリＭＥＭ１に書き込まれずにバッファ部ＢＵＦ１に残った残データが存在するかを判定する。
【００９５】
ステップＳ１４２０、Ｓ１４３０、Ｓ１４４０、Ｓ１４５０は、図６に示したステップＳ４２０、Ｓ４３０、Ｓ４４０、Ｓ４５０と同一または同様である。ステップＳ１４２０、Ｓ１４３０、Ｓ１４４０、Ｓ１４５０により、スイッチ部ＳＷ２ｂは、バッファ部ＢＵＦ１に保持された残データをアクセス処理部ＡＣＰに転送する。すなわち、スイッチ部ＳＷ２ｂは、残データがバッファ部ＢＵＦ１に保持されている場合、バッファ部ＢＵＦ１に保持された残データを、アクセス処理部ＡＣＰを介して不揮発性メモリＭＥＭ１に書き込む。ステップＳ１４５０の処理が実行された後、情報処理装置ＩＰＥｂの動作は、ステップＳ１３００に戻る。
【００９６】
ステップＳ１５００では、情報処理装置ＩＰＥｂは、ＯＳ（Operating System）をブートする。このように、情報処理装置ＩＰＥｂは、残データがバッファ部ＢＵＦ１に保持されていない場合には、ハードウェアの初期化後、そのままＯＳをブートする。また、情報処理装置ＩＰＥｂは、残データがバッファ部ＢＵＦ１に保持されている場合には、バッファ部ＢＵＦ１に保持されている残データを不揮発性メモリＭＥＭ１に書き出した後に、ＯＳをブートする。なお、情報処理装置ＩＰＥｂの動作は、図８に示す例に限定されない。
【００９７】
以上、図２から図８に示す実施形態においても、図１に示した実施形態と同様の効果を得ることができる。例えば、スイッチ部ＳＷ１は、不揮発性メモリＭＥＭ１に書き込むデータを演算処理装置ＰＵから受信した場合、演算処理装置ＰＵから受信したデータをバッファ部ＢＵＦ１における入力ポインタＰＴＩが示す格納位置に格納する。また、制御部ＣＬ１は、フェンス命令ＳＦＥＮを演算処理装置ＰＵから受信した場合、フェンス命令ＳＦＥＮに先行する先行データがバッファ部ＢＵＦ１、ＢＵＦ２のいずれかに格納されたかを判定する。そして、制御部ＣＬ１は、バッファ部ＢＵＦ１、ＢＵＦ２のいずれかへの先行データの格納が完了した場合に、フェンス命令ＳＦＥＮにより指示されたライト命令の実行順を制限する処理が完了したことを示す完了情報を演算処理装置ＰＵに通知する。
【００９８】
このように、メモリコントローラＭＣＬｂは、フェンス命令ＳＦＥＮの解除を先行データの不揮発性メモリＭＥＭ１への書き込みが完了するまで待機せずに実行する。この結果、演算処理装置ＰＵからメモリコントローラＭＣＬｂへのデータ転送の待機時間の増加を抑制することができる。
【００９９】
さらに、メモリコントローラＭＣＬｂは、不揮発性のバッファ部ＢＵＦ１の他に、揮発性メモリＭＥＭ２用の揮発性のバッファ部ＢＵＦ２を有する。これにより、揮発性メモリＭＥＭ２に書き込むデータに先行する複数の先行データが不揮発性メモリＭＥＭ１に書き込まれる場合でも、全ての先行データが不揮発性メモリＭＥＭ１に書き込まれる前に、揮発性メモリＭＥＭ２にデータを書き込むことができる。この結果、メモリコントローラＭＣＬｂから主記憶装置ＭＭＥＭへのデータの書き込み時間の増加を抑制することができる。
【０１００】
図９は、メモリコントローラおよびメモリアクセス方法の別の実施形態を示す。図１から図８で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図９に示すメモリコントローラＭＣＬｃは、不揮発性メモリＭＥＭ１および揮発性メモリＭＥＭ２を含む主記憶装置ＭＭＥＭを制御する。例えば、メモリコントローラＭＣＬｃは、図２に示したメモリアクセス部ＭＡＵｂの代わりにメモリアクセス部ＭＡＵｃを有することを除いて、図２に示したメモリコントローラＭＣＬｂと同一または同様である。例えば、情報処理装置ＩＰＥｃは、メモリコントローラＭＣＬｃ、演算処理装置ＰＵおよび主記憶装置ＭＭＥＭを有する。メモリコントローラＭＣＬｃは、不揮発性メモリＭＥＭ１および揮発性メモリＭＥＭ２にバスＭＢＵＳを介して接続され、不揮発性メモリＭＥＭ１および揮発性メモリＭＥＭ２を含む主記憶装置ＭＭＥＭと演算処理装置ＰＵとの間のデータ転送を制御する。
【０１０１】
メモリコントローラＭＣＬｃは、第１バッファ部ＢＵＦ１、第２バッファ部ＢＵＦ２、ポインタ保持部ＰＭＥＭ、受信処理部ＲＰＵｂ、メモリアクセス部ＭＡＵｃ、レジスタＲＥＧおよびメモリ読み出し部ＭＲＵを有する。
【０１０２】
バッファ部ＢＵＦ１、ＢＵＦ２、受信処理部ＲＰＵｂおよびポインタ保持部ＰＭＥＭは、図２に示したバッファ部ＢＵＦ１、ＢＵＦ２、受信処理部ＲＰＵｂおよびポインタ保持部ＰＭＥＭと同一または同様である。
【０１０３】
メモリアクセス部ＭＡＵｃは、図２に示した第２スイッチ部ＳＷ２ｂの代わりに第２スイッチ部ＳＷ２ｃを有する。また、メモリアクセス部ＭＡＵｃでは、第２制御部ＣＬ２が図２に示したメモリアクセス部ＭＡＵｂに追加される。メモリアクセス部ＭＡＵｃのその他の構成は、図２に示したメモリアクセス部ＭＡＵｂと同一または同様である。すなわち、メモリアクセス部ＭＡＵｂは、第２スイッチ部ＳＷ２ｃ、第２制御部ＣＬ２およびアクセス処理部ＡＣＰを有する。以下、第２スイッチ部ＳＷ２ｃおよび第２制御部ＣＬ２は、スイッチ部ＳＷ２ｃおよび制御部ＣＬ２とも称される。スイッチ部ＳＷ２ｃは、バッファ部ＢＵＦ１にアクセス可能な第１状態に設定された場合、バッファ部ＢＵＦ１に格納されたデータを出力ポインタＰＴＯが示す読み出し位置から読み出す。また、スイッチ部ＳＷ２ｃは、バッファ部ＢＵＦ２にアクセス可能な第２状態に設定された場合、バッファ部ＢＵＦ２に格納されたデータを読み出す。例えば、スイッチ部ＳＷ２ｃは、バッファ部ＢＵＦ１用の読み出しフラグＲＦＬＧを有し、制御部ＣＬ２により第１状態と第２状態とのいずれかに設定される。以下、読み出しフラグＲＦＬＧは、フラグＲＦＬＧとも称される。
【０１０４】
制御部ＣＬ２は、スイッチ部ＳＷ２ｃから出力される命令および主記憶装置ＭＭＥＭの記憶領域を示すアドレスを受信する。例えば、制御部ＣＬ２は、スイッチ部ＳＷ２ｃから受信したアドレスおよび命令が不揮発性メモリＭＥＭ１に割り当てられたアドレスおよびライト命令である場合、出力ポインタＰＴＯが更新されるまでスイッチ部ＳＷ２ｃを第２状態に設定する。そして、制御部ＣＬ２は、出力ポインタＰＴＯの更新に応じてスイッチ部ＳＷ２ｃを第１状態に切り替える。
【０１０５】
アクセス処理部ＡＣＰは、図２に示したアクセス処理部ＡＣＰと同一または同様である。なお、図９では、図を見やすくするために、図２に示したメモリマッピング部ＭＭＡＰ、調停部ＡＲＢおよびコマンド生成部ＣＧＥＮの記載を省略している。
【０１０６】
メモリ読み出し部ＭＲＵおよびレジスタＲＥＧは、図２に示したメモリ読み出し部ＭＲＵおよびレジスタＲＥＧと同一または同様である。なお、メモリコントローラＭＣＬｃの構成は、図９に示す例に限定されない。
【０１０７】
図１０は、図９に示した第２スイッチ部ＳＷ２ｃおよび第２制御部ＣＬ２の動作の一例を示す。なお、図１０に示す動作は、バッファ部ＢＵＦ１、ＢＵＦ２のいずれかから要求情報ＲＥＱを読み出す際のメモリコントローラＭＣＬｃの動作である。図６で説明したステップと同一または同様なステップについては、同一または同様の符号を付し、これ等については、詳細な説明を省略する。
【０１０８】
ステップＳ４００では、スイッチ部ＳＷ２ｃは、バッファ部ＢＵＦ１にアクセス可能な第１状態に設定されているか否かを判定する。バッファ部ＢＵＦ１にアクセス可能な第１状態に設定されている場合、メモリコントローラＭＣＬｃの動作は、ステップＳ４１０に移る。一方、バッファ部ＢＵＦ１にアクセス可能な第１状態に設定されていない場合、すなわち、バッファ部ＢＵＦ２にアクセス可能な第２状態に設定されている場合、メモリコントローラＭＣＬｃの動作は、ステップＳ４７０に移る。
【０１０９】
ステップＳ４１０では、スイッチ部ＳＷ２ｃは、読み出されていない要求情報ＲＥＱがバッファ部ＢＵＦ１に存在するか否かを判定する。読み出されていない要求情報ＲＥＱがバッファ部ＢＵＦ１に存在する場合、メモリコントローラＭＣＬｃの動作は、ステップＳ４２０に移る。これにより、スイッチ部ＳＷ２ｃがステップＳ４２０の処理を実行する。一方、読み出されていない要求情報ＲＥＱがバッファ部ＢＵＦ１に存在しない場合、メモリコントローラＭＣＬｃの動作は、ステップＳ５１０に移る。これにより、制御部ＣＬ２がステップＳ５１０の処理を実行する。
【０１１０】
ステップＳ４２０では、スイッチ部ＳＷ２ｃは、出力ポインタＰＴＯを参照して、読み出し位置を特定する。
【０１１１】
次に、ステップＳ４３０では、スイッチ部ＳＷ２ｃは、バッファ部ＢＵＦ１に格納された要求情報ＲＥＱを、ステップＳ４２０で特定した読み出し位置から読み出す。ステップＳ４３０の処理が実行された後、メモリコントローラＭＣＬｃのスイッチ部ＳＷ２ｃの動作は、ステップＳ４３４に移り、メモリコントローラＭＣＬｃの制御部ＣＬ２の動作は、ステップＳ５００に移る。
【０１１２】
ステップＳ４３４では、スイッチ部ＳＷ２ｃは、フラグＲＦＬＧを論理値”１”にセットする。
【０１１３】
次に、ステップＳ４４０では、スイッチ部ＳＷ２ｃは、一定時間が経過したか否かを判定する。一定時間が経過した場合、スイッチ部ＳＷ２ｃの動作は、ステップＳ４５０に移る。一方、一定時間が経過していない場合、スイッチ部ＳＷ２ｃの動作は、ステップＳ４４０に戻る。
【０１１４】
ステップＳ４５０では、スイッチ部ＳＷ２ｃは、出力ポインタＰＴＯを更新する。
【０１１５】
次に、ステップＳ４６２では、スイッチ部ＳＷ２ｃは、フラグＲＦＬＧを論理値”０”にリセットする。このように、フラグＲＦＬＧは、バッファ部ＢＵＦ１からデータが読み出される際に論理値”１”にセットされ、出力ポインタＰＴＯが更新された場合に論理値”０”にリセットされる。すなわち、フラグＲＦＬＧは、バッファ部ＢＵＦ１から読み出されたデータが不揮発性メモリＭＥＭ１に書き込まれるまで、論理値”１”に維持される。ステップＳ４６２の処理が実行された後、スイッチ部ＳＷ２ｃの動作は、制御部ＣＬ２が後述するステップＳ５３０の処理等を実行することにより、ステップＳ４００に戻る。
【０１１６】
ステップＳ４７０では、スイッチ部ＳＷ２ｃは、読み出されていない要求情報ＲＥＱがバッファ部ＢＵＦ２に存在するか否かを判定する。読み出されていない要求情報ＲＥＱがバッファ部ＢＵＦ２に存在する場合、メモリコントローラＭＣＬｃの動作は、ステップＳ４８０に移る。これにより、スイッチ部ＳＷ２ｃがステップＳ４８０の処理を実行する。一方、読み出されていない要求情報ＲＥＱがバッファ部ＢＵＦ２に存在しない場合、メモリコントローラＭＣＬｃの動作は、ステップＳ５２０に移る。これにより、制御部ＣＬ２がステップＳ５２０の処理を実行する。
【０１１７】
ステップＳ４８０では、スイッチ部ＳＷ２ｃは、バッファ部ＢＵＦ２に格納された要求情報ＲＥＱを読み出す。ステップＳ４８０の処理が実行された後、メモリコントローラＭＣＬｃの動作は、ステップＳ５００に移る。これにより、制御部ＣＬ２がステップＳ５００の処理を実行する。
【０１１８】
ステップＳ５００では、制御部ＣＬ２は、スイッチ部ＳＷ２ｃにより読み出された要求情報ＲＥＱに含まれるアドレスおよび命令が不揮発性メモリＭＥＭ１に割り当てられたアドレスおよびライト命令であるか否かを判定する。スイッチ部ＳＷ２ｃにより読み出されたアドレスが不揮発性メモリＭＥＭ１に割り当てられたアドレスであり、かつ、スイッチ部ＳＷ２ｃにより読み出された命令がライト命令である場合、制御部ＣＬ２の動作は、ステップＳ５１０に移る。すなわち、スイッチ部ＳＷ２ｃにより読み出されたデータが不揮発性メモリＭＥＭ１に書き込まれるデータである場合、制御部ＣＬ２の動作は、ステップＳ５１０に移る。
【０１１９】
一方、スイッチ部ＳＷ２ｃにより読み出されたアドレスが不揮発性メモリＭＥＭ１に割り当てられたアドレスでない場合、あるいは、スイッチ部ＳＷ２ｃにより読み出された命令がライト命令でない場合、制御部ＣＬ２の動作は、ステップＳ５２０に移る。すなわち、スイッチ部ＳＷ２ｃにより読み出されたデータが不揮発性メモリＭＥＭ１に書き込まれるデータでない場合、制御部ＣＬ２の動作は、ステップＳ５２０に移る。
【０１２０】
ステップＳ５１０では、制御部ＣＬ２は、スイッチ部ＳＷ２ｃをバッファ部ＢＵＦ２にアクセス可能な第２状態に切り替える。ステップＳ５１０の処理が実行された後、メモリコントローラＭＣＬｃの動作は、ステップＳ４００に戻る。これにより、スイッチ部ＳＷ２ｃがステップＳ４００の処理を実行する。
【０１２１】
ステップＳ５２０では、制御部ＣＬ２は、フラグＲＦＬＧが論理値”０”であるか否かを判定する。フラグＲＦＬＧが論理値”０”である場合、制御部ＣＬ２の動作は、ステップＳ５３０に移る。一方、フラグＲＦＬＧが論理値”０”でない場合、すなわち、フラグＲＦＬＧが論理値”１”である場合、メモリコントローラＭＣＬｃの動作は、ステップＳ４００に戻る。これにより、スイッチ部ＳＷ２ｃがステップＳ４００の処理を実行する。
【０１２２】
ステップＳ５３０では、制御部ＣＬ２は、スイッチ部ＳＷ２ｃをバッファ部ＢＵＦ１にアクセス可能な第１状態に切り替える。ステップＳ５３０の処理が実行された後、メモリコントローラＭＣＬｃの動作は、ステップＳ４００に戻る。これにより、スイッチ部ＳＷ２ｃがステップＳ４００の処理を実行する。
【０１２３】
このように、制御部ＣＬ２は、スイッチ部ＳＷ２ｃから受信したアドレスおよび命令が不揮発性メモリＭＥＭ１に割り当てられたアドレスおよびライト命令である場合、出力ポインタＰＴＯが更新されるまでスイッチ部ＳＷ２ｃを第２状態に設定する。そして、制御部ＣＬ２は、出力ポインタＰＴＯが更新された場合に、スイッチ部ＳＷ２ｃを第１状態に切り替える。これにより、不揮発性メモリＭＥＭ１にデータを書き込みしている間、バッファ部ＢＵＦ２に格納された要求情報ＲＥＱに基づく処理を実行することができ、情報処理装置ＩＰＥｃの処理能力を向上させることができる。なお、スイッチ部ＳＷ２ｃの動作は、図１０に示す例に限定されない。
【０１２４】
以上、図９から図１０に示す実施形態においても、図２から図８に示した実施形態と同様の効果を得ることができる。例えば、制御部ＣＬ１は、演算処理装置ＰＵから受信したフェンス命令ＳＦＥＮの解除を、フェンス命令ＳＦＥＮに先行する先行データがバッファ部ＢＵＦ１、ＢＵＦ２のいずれかに格納された場合に実行する。これにより、演算処理装置ＰＵからメモリコントローラＭＣＬｃへのデータ転送の待機時間の増加を抑制することができる。
【０１２５】
さらに、制御部ＣＬ２は、不揮発性メモリＭＥＭ１にデータを書き込む処理が実行されている間、スイッチ部ＳＷ２ｃを第２状態に設定する。これにより、メモリコントローラＭＣＬｃは、不揮発性メモリＭＥＭ１にデータを書き込みしている間でも、バッファ部ＢＵＦ２に格納された要求情報ＲＥＱを順次読み出し、読み出した要求情報ＲＥＱに基づく処理を順次実行できる。この結果、メモリコントローラＭＣＬｃから主記憶装置ＭＭＥＭへのデータの書き込み等を効率よく実行することができ、メモリコントローラＭＣＬｃを含む情報処理装置ＩＰＥｃの処理能力を向上させることができる。
【０１２６】
図１１は、メモリコントローラおよびメモリアクセス方法の別の実施形態を示す。図１から図１０で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図１１に示すメモリコントローラＭＣＬｄは、不揮発性メモリＭＥＭ１および揮発性メモリＭＥＭ２を含む主記憶装置ＭＭＥＭを制御する。例えば、メモリコントローラＭＣＬｄは、図２に示したメモリアクセス部ＭＡＵｂの代わりにメモリアクセス部ＭＡＵｄを有する。また、メモリコントローラＭＣＬｄは、図２に示したメモリ読み出し部ＭＲＵの代わりに、応答スイッチ部ＳＷ３、第１応答バッファ部ＲＢＵＦ１および第２応答バッファ部ＲＢＵＦ２を有する。さらに、メモリコントローラＭＣＬｄは、図２に示したレジスタＲＥＧの代わりに、レジスタＲＥＧ１、ＲＥＧ２を有する。メモリコントローラＭＣＬｄのその他の構成は、図２に示したメモリコントローラＭＣＬｂと同一または同様である。
【０１２７】
例えば、情報処理装置ＩＰＥｄは、メモリコントローラＭＣＬｄ、演算処理装置ＰＵおよび主記憶装置ＭＭＥＭを有する。メモリコントローラＭＣＬｄは、不揮発性メモリＭＥＭ１にバスＭＢＵＳ１を介して接続され、揮発性メモリＭＥＭ２にバスＭＢＵＳ２を介して接続される。そして、メモリコントローラＭＣＬｄは、不揮発性メモリＭＥＭ１および揮発性メモリＭＥＭ２を含む主記憶装置ＭＭＥＭと演算処理装置ＰＵとの間のデータ転送を制御する。
【０１２８】
メモリコントローラＭＣＬｄは、第１バッファ部ＢＵＦ１、第２バッファ部ＢＵＦ２、ポインタ保持部ＰＭＥＭ、受信処理部ＲＰＵｂおよびメモリアクセス部ＭＡＵｄを有する。さらに、メモリコントローラＭＣＬｄは、レジスタＲＥＧ（ＲＥＧ１、ＲＥＧ２）、第１応答バッファ部ＲＢＵＦ１、第２応答バッファ部ＲＢＵＦ２および応答スイッチ部ＳＷ３を有する。以下、第１応答バッファ部ＲＢＵＦ１および第２応答バッファ部ＲＢＵＦ２は、バッファ部ＲＢＵＦ１、ＲＢＵＦ２とも称され、応答スイッチ部ＳＷ３は、スイッチ部ＳＷ３とも称される。
【０１２９】
受信処理部ＲＰＵｂは、図２に示した受信処理部ＲＰＵｂと同一または同様である。例えば、受信処理部ＲＰＵｂは、制御部ＣＬ１およびスイッチ部ＳＷ１を有する。なお、図１１に示す制御部ＣＬ１は、演算処理装置ＰＵから受信したアドレスが不揮発性メモリＭＥＭ１に割り当てられたアドレスである場合、命令の種類に拘わらず、スイッチ部ＳＷ１の出力先をバッファ部ＢＵＦ１に設定する。すなわち、制御部ＣＬ１は、演算処理装置ＰＵから受信したアドレスが揮発性メモリＭＥＭ２に割り当てられたアドレスである場合、命令の種類に拘わらず、スイッチ部ＳＷ１の出力先をバッファ部ＢＵＦ２に設定する。図１１に示す制御部ＣＬ１のその他の動作は、図２に示した制御部ＣＬ１と同一または同様である。
【０１３０】
また、図１１に示すスイッチ部ＳＷ１は、図２に示したスイッチ部ＳＷ１と同一または同様である。例えば、スイッチ部ＳＷ１は、バッファ部ＢＵＦ１へのデータの格納が完了した後、入力ポインタＰＴＩを更新する
バッファ部ＢＵＦ１、ＢＵＦ２およびポインタ保持部ＰＭＥＭは、図２に示したバッファ部ＢＵＦ１、ＢＵＦ２およびポインタ保持部ＰＭＥＭと同一または同様である。
【０１３１】
メモリアクセス部ＭＡＵｄは、図２に示した第２スイッチ部ＳＷ２ｂの代わりに、バッファ読み出し部ＢＲＵ１、ＢＲＵ２を有する。また、メモリアクセス部ＭＡＵｄは、図２に示したアクセス処理部ＡＣＰの代わりに、アクセス処理部ＡＣＰ１、ＡＣＰ２を有する。メモリアクセス部ＭＡＵｄのその他の構成は、図２に示したメモリアクセス部ＭＡＵｂと同一または同様である。すなわち、メモリアクセス部ＭＡＵｄは、バッファ読み出し部ＢＲＵ１、ＢＲＵ２、アクセス処理部ＡＣＰ１、ＡＣＰ２を有する。
【０１３２】
バッファ読み出し部ＢＲＵ１は、バッファ部ＢＵＦ１に格納された要求情報ＲＥＱを出力ポインタＰＴＯが示す読み出し位置から読み出す。そして、バッファ読み出し部ＢＲＵ１は、バッファ部ＢＵＦ１から読み出した要求情報ＲＥＱをアクセス処理部ＡＣＰ１に転送する。また、バッファ読み出し部ＢＲＵ１は、出力ポインタＰＴＯが示す読み出し位置から読み出した要求情報ＲＥＱに含まれるデータが不揮発性メモリＭＥＭ１に書き込まれた後、出力ポインタＰＴＯを更新する。
【０１３３】
このように、バッファ読み出し部ＢＲＵ１は、バッファ部ＢＵＦ１に格納されたデータを出力ポインタＰＴＯが示す読み出し位置から読み出し、読み出したデータが不揮発性メモリＭＥＭ１に書き込まれた後、出力ポインタＰＴＯを更新する。
【０１３４】
バッファ読み出し部ＢＲＵ２は、バッファ部ＢＵＦ２に格納されたデータを読み出し、読み出したデータをアクセス処理部ＡＣＰ２に転送する。
【０１３５】
アクセス処理部ＡＣＰ１、ＡＣＰ２は、図２に示したアクセス処理部ＡＣＰと同一または同様である。なお、図１１では、図を見やすくするために、図２に示したメモリマッピング部ＭＭＡＰ、調停部ＡＲＢおよびコマンド生成部ＣＧＥＮの記載を省略している。例えば、アクセス処理部ＡＣＰ１は、バッファ部ＢＵＦ１からバッファ読み出し部ＢＲＵ１を介して転送されたデータを不揮発性メモリＭＥＭ１に書き込む。また、例えば、アクセス処理部ＡＣＰ２は、バッファ部ＢＵＦ２からバッファ読み出し部ＢＲＵ２を介して転送されたデータを揮発性メモリＭＥＭに書き込む。
【０１３６】
レジスタＲＥＧ１は、アクセス処理部ＡＣＰ１から出力されたデータ等を順次保持する。これにより、メモリコントローラＭＣＬｄは、リード命令で要求された読み出し対象のデータが不揮発性メモリＭＥＭ１に書き込まれている最中でも、読み出し対象のデータをレジスタＲＥＧ１からバッファ部ＲＢＵＦ１に転送できる。
【０１３７】
レジスタＲＥＧ２は、アクセス処理部ＡＣＰ２から出力されたデータ等を順次保持する。これにより、メモリコントローラＭＣＬｄは、リード命令で要求された読み出し対象のデータが揮発性メモリＭＥＭ２に書き込まれている最中でも、読み出し対象のデータをレジスタＲＥＧ２からバッファ部ＲＢＵＦ２に転送できる。
【０１３８】
バッファ部ＲＢＵＦ１は、リード命令で要求された読み出し対象のデータを不揮発性メモリＭＥＭ１またはレジスタＲＥＧ１等から受信し、受信したデータを保持する。すなわち、バッファ部ＲＢＵＦ１は、不揮発性メモリＭＥＭ１から読み出されるデータを受信し、受信したデータを保持する。
【０１３９】
バッファ部ＲＢＵＦ２は、リード命令で要求された読み出し対象のデータを揮発性メモリＭＥＭ２またはレジスタＲＥＧ２等から受信し、受信したデータを保持する。すなわち、バッファ部ＲＢＵＦ２は、揮発性メモリＭＥＭ２から読み出されるデータを受信し、受信したデータを保持する。
【０１４０】
スイッチ部ＳＷ３は、バッファ部ＲＢＵＦ１にアクセス可能な第１応答状態に設定された場合、バッファ部ＲＢＵＦ１に保持されたデータを演算処理装置ＰＵに転送する。また、スイッチ部ＳＷ３は、バッファ部ＲＢＵＦ２にアクセス可能な第２応答状態に設定された場合、バッファ部ＲＢＵＦ２に保持されたデータを演算処理装置ＰＵに転送する。
【０１４１】
このように、メモリコントローラＭＣＬｄでは、不揮発性メモリＭＥＭ１は、揮発性メモリＭＥＭ２が接続されるバスＭＢＵＳ２と異なるバスＭＢＵＳ１に接続される。このため、メモリコントローラＭＣＬｄから主記憶装置ＭＭＥＭへの出力は、２系統に分離される。この場合、上述したように、制御部ＣＬ１は、演算処理装置ＰＵから受信したアドレスが不揮発性メモリＭＥＭ１に割り当てられたアドレスか否かを判定して、スイッチ部ＳＷ１の出力先を切り替える。また、ブートシーケンス時のハードウェアの初期化では、スイッチ部ＳＷ１の出力先は、図８で説明したように、バッファ部ＢＵＦ２に設定されている。これにより、メモリコントローラＭＣＬｄは、バッファ部ＢＵＦ１に格納されたデータが消去されることを防止できる。情報処理装置ＩＰＥｄのブートシーケンス時の動作は、図８に示した動作からステップＳ１２００を省き、スイッチ部ＳＷ２ｂをバッファ読み出し部ＢＲＵ１に読み替えることにより、説明される。なお、メモリコントローラＭＣＬｄの構成は、図１１に示す例に限定されない。
【０１４２】
以上、図１１に示す実施形態においても、図２から図８に示した実施形態と同様の効果を得ることができる。例えば、制御部ＣＬ１は、演算処理装置ＰＵから受信したフェンス命令ＳＦＥＮの解除を、フェンス命令ＳＦＥＮに先行する先行データがバッファ部ＢＵＦ１、ＢＵＦ２のいずれかに格納された場合に実行する。これにより、演算処理装置ＰＵからメモリコントローラＭＣＬｄへのデータ転送の待機時間の増加を抑制することができる。
【０１４３】
さらに、メモリコントローラＭＣＬｄでは、主記憶装置ＭＭＥＭへの出力が、不揮発性メモリＭＥＭ１への出力と揮発性メモリＭＥＭ２への出力との２系統に分離される。これにより、メモリコントローラＭＣＬｄは、不揮発性メモリＭＥＭ１にデータを書き込みしている間でも、バッファ部ＢＵＦ２に格納された要求情報ＲＥＱを順次読み出し、読み出した要求情報ＲＥＱに基づく処理を順次実行できる。この結果、メモリコントローラＭＣＬｄから主記憶装置ＭＭＥＭへのデータの書き込み等を効率よく実行することができ、メモリコントローラＭＣＬｄを含む情報処理装置ＩＰＥｄの処理能力を向上させることができる。
【０１４４】
以上の実施形態において説明した発明を整理して、付記として開示する。
（付記１）
不揮発性メモリを含むメモリ部を制御するメモリコントローラにおいて、
前記不揮発性メモリに書き込むデータを保持する不揮発性の第１バッファ部と、
前記第１バッファ部に格納するデータの格納位置を示す入力ポインタと前記第１バッファ部から読み出すデータの読み出し位置を示す出力ポインタとを保持する不揮発性のポインタ保持部と、
前記不揮発性メモリに書き込むデータを演算処理装置から受信した場合、前記演算処理装置から受信したデータを前記第１バッファ部における前記入力ポインタが示す格納位置に格納し、前記メモリ部にデータを書き込むライト命令の実行順の制限を指示する順序制限命令を前記演算処理装置から受信した場合、前記順序制限命令より前に前記演算処理装置から転送された先行データが前記第１バッファ部に格納されたかを判定し、前記第１バッファ部への前記先行データの格納が完了した場合に、前記順序制限命令により指示されたライト命令の実行順を制限する処理が完了したことを示す完了情報を前記演算処理装置に通知する受信処理部と、
前記第１バッファ部に格納されたデータを前記出力ポインタが示す読み出し位置から読み出し、前記第１バッファ部から読み出したデータを前記不揮発性メモリに書き込むメモリアクセス部と
を有することを特徴とするメモリコントローラ。
（付記２）
付記１に記載のメモリコントローラにおいて、
前記メモリ部は揮発性メモリをさらに含み、
前記演算処理装置から転送されるデータのうち、前記揮発性メモリに書き込むデータを保持する揮発性の第２バッファ部をさらに有し、
前記受信処理部は、
前記演算処理装置から受信したデータの書き込み先のメモリに対応する前記第１バッファ部および前記第２バッファ部のいずれかにデータを出力し、出力先が前記第１バッファ部に設定されている場合、前記入力ポインタが示す格納位置にデータを格納する第１スイッチ部と、
前記不揮発性メモリにデータを書き込むライト命令を前記演算処理装置から受信した場合、前記第１スイッチ部の出力先を前記第１バッファ部に設定する第１制御部とを有し、
前記メモリアクセス部は、
前記第１バッファ部にアクセス可能な第１状態に設定された場合、前記第１バッファ部に格納されたデータを前記出力ポインタが示す読み出し位置から読み出し、前記第２バッファ部にアクセス可能な第２状態に設定された場合、前記第２バッファ部に格納されたデータを読み出す第２スイッチ部と、
前記第１バッファ部から前記第２スイッチ部を介して転送されたデータを前記不揮発性メモリに書き込み、前記第２バッファ部から前記第２スイッチ部を介して転送されたデータを前記揮発性メモリに書き込むアクセス処理部とを有する
ことを特徴とするメモリコントローラ。
（付記３）
付記２に記載のメモリコントローラにおいて、
前記第１制御部は、前記メモリ部の記憶領域を示すアドレスと命令とを前記演算処理装置から受信し、前記演算処理装置から受信したアドレスが前記不揮発性メモリに割り当てられたアドレスであり、かつ、前記演算処理装置から受信した命令がライト命令である場合、前記第１スイッチ部の出力先を前記第１バッファ部に設定する
ことを特徴とするメモリコントローラ。
（付記４）
付記２または付記３に記載のメモリコントローラにおいて、
前記第１スイッチ部は、前記第１バッファ部へのデータの格納が完了した後、前記入力ポインタを更新する
ことを特徴とするメモリコントローラ。
（付記５）
付記２ないし付記４のいずれか１項に記載のメモリコントローラにおいて、
前記第２スイッチ部は、前記第１バッファ部に格納されたデータを前記不揮発性メモリに書き込む場合、前記出力ポインタが示す読み出し位置から読み出したデータを前記不揮発性メモリへ書き込んだ後、前記出力ポインタを更新する
ことを特徴とするメモリコントローラ。
（付記６）
付記２ないし付記５のいずれか１項に記載のメモリコントローラにおいて、
前記不揮発性メモリおよび前記揮発性メモリからデータを受信し、受信したデータを前記演算処理装置に転送するメモリ読み出し部をさらに有し、
前記第１スイッチ部は、電源投入時に前記演算処理装置により実行される初期化処理中では、出力先が前記第２バッファ部に設定され、
前記第２スイッチ部は、前記初期化処理中では、前記第２状態に設定され、前記初期化処理の後に、前記第１状態に切り替わり、前記入力ポインタと前記出力ポインタとの比較結果に基づいて、電源遮断前の前回の動作で前記不揮発性メモリに書き込まれずに前記第１バッファ部に残った残データが存在するかを判定し、前記残データが前記第１バッファ部に保持されている場合、前記第１バッファ部に保持された前記残データを前記アクセス処理部を介して前記不揮発性メモリに書き込む
ことを特徴とするメモリコントローラ。
（付記７）
付記２ないし付記６のいずれか１項に記載のメモリコントローラにおいて、
前記第２スイッチ部は、前記第１状態と前記第２状態とをアクセス毎に交互に選択する
ことを特徴とするメモリコントローラ。
（付記８）
付記２ないし付記６のいずれか１項に記載のメモリコントローラにおいて、
前記メモリアクセス部は、
前記第２スイッチ部から出力される命令および前記メモリ部の記憶領域を示すアドレスを受信し、前記第２スイッチ部から受信したアドレスが前記不揮発性メモリに割り当てられたアドレスであり、かつ、前記第２スイッチ部から受信した命令がライト命令である場合、前記出力ポインタが更新されるまで前記第２スイッチ部を前記第２状態に設定し、前記出力ポインタの更新に応じて前記第２スイッチ部を前記第１状態に切り替える第２制御部をさらに有する
ことを特徴とするメモリコントローラ。
（付記９）
付記１に記載のメモリコントローラにおいて、
前記メモリ部は揮発性メモリをさらに含み、
前記演算処理装置から転送されるデータのうち、前記揮発性メモリに書き込むデータを保持する揮発性の第２バッファ部と、
前記不揮発性メモリから読み出されるデータを受信し、受信したデータを保持する第１応答バッファ部と、
前記揮発性メモリから読み出されるデータを受信し、受信したデータを保持する第２応答バッファ部と、
前記第１応答バッファ部にアクセス可能な第１応答状態に設定された場合、前記第１応答バッファ部に保持されたデータを前記演算処理装置に転送し、前記第２応答バッファ部にアクセス可能な第２応答状態に設定された場合、前記第２応答バッファ部に保持されたデータを前記演算処理装置に転送する応答スイッチ部とをさらに有し、
前記受信処理部は、
前記演算処理装置から受信したデータの書き込み先のメモリに対応する前記第１バッファ部および前記第２バッファ部のいずれかにデータを出力し、出力先が前記第１バッファ部に設定されている場合、前記入力ポインタが示す格納位置にデータを格納する第１スイッチ部と、
前記不揮発性メモリにデータを書き込むライト命令を前記演算処理装置から受信した場合、前記第１スイッチ部の出力先を前記第１バッファ部に設定する第１制御部とを有し、
前記メモリアクセス部は、
前記第１バッファ部に格納されたデータを前記出力ポインタが示す読み出し位置から読み出す第１バッファ読み出し部と、
前記第２バッファ部に格納されたデータを読み出す第２バッファ読み出し部と、
前記第１バッファ部から前記第１バッファ読み出し部を介して転送されたデータを前記不揮発性メモリに書き込む第１アクセス処理部と、
前記第２バッファ部から前記第２バッファ読み出し部を介して転送されたデータを前記揮発性メモリに書き込む第２アクセス処理部とを有する
ことを特徴とするメモリコントローラ。
（付記１０）
付記９に記載のメモリコントローラにおいて、
前記第１スイッチ部は、前記第１バッファ部へのデータの格納が完了した後、前記入力ポインタを更新する
ことを特徴とするメモリコントローラ。
（付記１１）
付記９または付記１０に記載のメモリコントローラにおいて、
前記第１バッファ読み出し部は、前記出力ポインタが示す読み出し位置から読み出したデータを前記不揮発性メモリへ書き込んだ後、前記出力ポインタを更新する
ことを特徴とするメモリコントローラ。
（付記１２）
付記９ないし付記１１のいずれか１項に記載のメモリコントローラにおいて、
前記第１スイッチ部は、電源投入時に前記演算処理装置により実行される初期化処理中では、出力先が前記第２バッファ部に設定され、
前記第１バッファ読み出し部は、前記初期化処理の後に、前記入力ポインタと前記出力ポインタとの比較結果に基づいて、電源遮断前の前回の動作で前記不揮発性メモリに書き込まれずに前記第１バッファ部に残った残データが存在するかを判定し、前記残データが前記第１バッファ部に保持されている場合、前記第１バッファ部に保持された前記残データを前記第１アクセス処理部を介して前記不揮発性メモリに書き込む
ことを特徴とするメモリコントローラ。
（付記１３）
付記９ないし付記１１のいずれか１項に記載のメモリコントローラにおいて、
前記第１制御部は、前記メモリ部の記憶領域を示すアドレスを前記演算処理装置から受信し、前記演算処理装置から受信したアドレスが前記不揮発性メモリに割り当てられたアドレスである場合、前記第１スイッチ部の出力先を前記第１バッファ部に設定する
ことを特徴とするメモリコントローラ。
（付記１４）
メモリコントローラによる不揮発性メモリを含むメモリ部のメモリアクセス方法において、
前記メモリコントローラが有する不揮発性のポインタ保持部は、前記メモリコントローラが有する不揮発性の第１バッファ部に格納するデータの格納位置を示す入力ポインタと前記第１バッファ部から読み出すデータの読み出し位置を示す出力ポインタとを保持し、
前記メモリコントローラが有する受信処理部は、前記不揮発性メモリに書き込むデータを演算処理装置から受信した場合、前記演算処理装置から受信したデータを前記第１バッファ部における前記入力ポインタが示す格納位置に格納し、前記メモリ部にデータを書き込むライト命令の実行順の制限を指示する順序制限命令を前記演算処理装置から受信した場合、前記順序制限命令より前に前記演算処理装置から転送された先行データが前記第１バッファ部に格納されたかを判定し、前記第１バッファ部への前記先行データの格納が完了した場合に、前記順序制限命令により指示されたライト命令の実行順を制限する処理が完了したことを示す完了情報を前記演算処理装置に通知し、
前記メモリコントローラが有するメモリアクセス部は、前記第１バッファ部に格納されたデータを前記出力ポインタが示す読み出し位置から読み出し、前記第１バッファ部から読み出したデータを前記不揮発性メモリに書き込む
ことを特徴とするメモリアクセス方法。
【０１４５】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１４６】
ＡＣＰ、ＡＣＰ１、ＡＣＰ２‥アクセス処理部；ＢＲＵ１、ＢＲＵ２‥バッファ読み出し部；ＢＵＦ１、ＢＵＦ２‥バッファ部；ＣＬ１、ＣＬ２‥制御部；ＩＰＥａ、ＩＰＥｂ、ＩＰＥｃ、ＩＰＥｄ‥情報処理装置；ＭＡＵａ、ＭＡＵｂ、ＭＡＵｃ‥メモリアクセス部；ＭＢＵＳ、ＭＢＵＳ１、ＭＢＵＳ２‥バス；ＭＣＬａ、ＭＣＬｂ、ＭＣＬｃ、ＭＣＬｄ‥メモリコントローラ；ＭＥＭ１‥不揮発性メモリ；ＭＥＭ２‥揮発性メモリ；ＭＭＥＭ‥主記憶装置；ＭＲＵ‥メモリ読み出し部；ＰＭＥＭ‥ポインタ保持部；ＰＵ‥演算処理装置；ＲＢＵＦ１、ＲＢＵＦ２‥バッファ部；ＲＥＧ、ＲＥＧ１、ＲＥＧ２‥レジスタ；ＲＰＵａ、ＲＰＵｂ‥受信処理部；ＳＷ１、ＳＷ２ｂ、ＳＷ２ｃ、ＳＷ３‥スイッチ部
【図１】
2018005655.tif 000003
【図２】
2018005655.tif 000004
【図３】
2018005655.tif 000005
【図４】
2018005655.tif 000006
【図５】
2018005655.tif 000007
【図６】
2018005655.tif 000008
【図７】
2018005655.tif 000009
【図８】
2018005655.tif 000010
【図９】
2018005655.tif 000011
【図１０】
2018005655.tif 000012
【図１１】
2018005655.tif 000013