(57)【特許請求の範囲】
【請求項１】
不揮発メモリと、
前記不揮発メモリに対するデータの書き込みを要求する書き込み要求を、ホスト装置から受け取った後に、該書き込み要求に基づくデータの書き込みを行うコントローラと、を備え、
前記コントローラは、前記ホスト装置から、送信済みの１以上の前記書き込み要求に基づくデータの書き込みが行われたことの確認を要求する書き込み順序確認要求を受け取ると、前記書き込み順序確認要求を受け取る前に受け取った前記書き込み要求に基づくデータの書き込みを行った後に、前記書き込み順序確認要求に対する応答を前記ホスト装置へ送信する、
メモリデバイス。
【請求項２】
不揮発メモリと、
前記不揮発メモリに対するデータの書き込みを要求する書き込み要求を、ホスト装置から受け取った後に、該書き込み要求に基づくデータの書き込みを行うコントローラと、を備え、
前記書き込み要求には、前記書き込み要求に基づくデータの書き込みを行った後に、前記書き込み要求に対する応答を前記ホスト装置に送信することを要求するリプライ付きの書き込み要求と、前記書き込み要求に基づくデータの書き込みを行った後に、前記書き込み要求に対する応答を前記ホスト装置に送信することを必要としないリプライ無しの書き込み要求とがあり、
前記コントローラは、前記リプライ付きの書き込み要求を前記ホスト装置から受け取ると、前記リプライ付きの書き込み要求を受け取る前に受け取った前記リプライ無しの書き込み要求に基づくデータの書き込みを行った後に、前記リプライ付きの書き込み要求に基づくデータの書き込みを行い、前記リプライ付きの書き込み要求に対する応答を前記ホスト装置へ送信する、
メモリデバイス。
【請求項３】
不揮発メモリと、
前記不揮発メモリに対するデータの書き込みを要求する書き込み要求を、ホスト装置から受け取った後に、該書き込み要求に基づくデータの書き込みを行うコントローラと、
前記ホスト装置から受け取った前記書き込み要求を、受け取った順に記憶する記憶部と、を備え、
前記書き込み要求には、前記書き込み要求に基づくデータの書き込みを行った後に、前記書き込み要求に対する応答を前記ホスト装置に送信することを要求するリプライ付きの書き込み要求と、前記書き込み要求に基づくデータの書き込みを行った後に、前記書き込み要求に対する応答を前記ホスト装置に送信することを必要としないリプライ無しの書き込み要求とがあり、
前記コントローラは、前記リプライ付きの書き込み要求を前記ホスト装置から受け取ると、前記リプライ付きの書き込み要求を受け取る前に受け取った前記リプライ無しの書き込み要求に基づくデータの書き込みと前記リプライ付きの書き込み要求に基づくデータの書き込みを行った後、前記リプライ付きの書き込み要求に対する応答を前記ホスト装置へ送信する、
メモリデバイス。
【請求項４】
不揮発メモリと、
前記不揮発メモリに対するデータの書き込みを要求する書き込み要求を、ホスト装置から受け取った後に、該書き込み要求に基づくデータの書き込みを行うコントローラと、を備え、
前記コントローラは、前記不揮発メモリのうち特定の位置からのデータの読み出しを要求する特定読み出し要求を前記ホスト装置から受け取ると、前記特定読み出し要求を受け取る前に受け取った前記書き込み要求に基づくデータの書き込みを行った後に、前記特定読み出し要求に基づくデータの読み出しを行い、前記特定読み出し要求に対する応答を前記ホスト装置に送信する、
メモリデバイス。
【請求項５】
不揮発メモリと、
前記不揮発メモリに対するデータの書き込みを要求する書き込み要求を、ホスト装置から受け取った後に、該書き込み要求に基づくデータの書き込みを行うコントローラと、を備え、
前記コントローラは、前記不揮発メモリのうち特定の位置に対するデータの書き込みを要求する前記書き込み要求を示す特定書き込み要求を前記ホスト装置から受け取ると、前記特定書き込み要求を受け取る前に受け取った前記書き込み要求に基づくデータの書き込みを行った後に、前記特定書き込み要求に基づくデータの書き込みを行い、前記特定書き込み要求に対する応答を前記ホスト装置に送信する、
メモリデバイス。
【請求項６】
不揮発メモリと、
前記不揮発メモリに対するデータの書き込みを要求する書き込み要求を、ホスト装置から受け取った後に、該書き込み要求に基づくデータの書き込みを行うコントローラと、
前記ホスト装置から受け取った前記書き込み要求を、受け取った順に記憶する記憶部と、を備え、
前記不揮発メモリのうち特定の位置に対するデータの書き込みを要求する特定書き込み要求は、前記特定書き込み要求に基づくデータの書き込みを行った後に、前記特定書き込み要求に対する応答を前記ホスト装置に送信することを要求し、
前記コントローラは、前記特定書き込み要求を前記ホスト装置から受け取ると、前記特定書き込み要求を受け取る前に受け取った前記書き込み要求に基づくデータの書き込みと前記特定書き込み要求に基づくデータの書き込みを行った後に、前記特定書き込み要求に対する応答を前記ホスト装置に送信する、
メモリデバイス。
【請求項７】
複数の領域から構成される不揮発メモリと、
前記不揮発メモリに対するデータの書き込みを要求する書き込み要求を、ホスト装置から受け取った後に、該書き込み要求に基づくデータの書き込みを行うコントローラと、を備え、
前記コントローラは、前記ホスト装置から、前記複数の領域のうちの何れかを示す対象領域に対応する送信済みの１以上の前記書き込み要求に基づくデータの書き込みが行われたことの確認を要求する書き込み順序確認要求を受け取ると、前記書き込み順序確認要求を受け取る前に受け取った、前記対象領域に対応する１以上の前記書き込み要求に基づくデータの書き込みを行った後に、前記書き込み順序確認要求に対する応答を前記ホスト装置へ送信する、
メモリデバイス。
【請求項８】
前記複数の領域の各々は、前記不揮発メモリのアドレス空間を、予め定められているサイズで区切ることで得られる領域である、
請求項７のメモリデバイス。
【請求項９】
前記複数の領域の各々は、前記不揮発メモリのアドレス空間を分割することで得られる領域であり、
前記コントローラは、前記複数の領域の各々に対応するアドレスの範囲を設定する、
請求項７のメモリデバイス。
【請求項１０】
不揮発メモリと、
前記不揮発メモリに対するデータの書き込みを要求する書き込み要求を、ホスト装置から受け取った後に、該書き込み要求に基づくデータの書き込みを行うコントローラと、を備え、
前記書き込み要求は、前記書き込み要求に対応する処理を含む１以上の処理の集合を示すグループを識別するグループ識別情報を含み、
前記コントローラは、前記ホスト装置から、何れかの前記グループ識別情報を示す対象グループ識別情報を含む送信済みの１以上の前記書き込み要求に基づくデータの書き込みが行われたことの確認を要求する書き込み順序確認要求を受け取ると、前記書き込み順序確認要求を受け取る前に受け取った、前記対象グループ識別情報を含む１以上の前記書き込み要求に基づくデータの書き込みを行った後に、前記書き込み順序確認要求に対する応答を前記ホスト装置へ送信する、
メモリデバイス。
【請求項１１】
ホスト装置とメモリデバイスとを備えた情報処理装置であって、
前記メモリデバイスは、
不揮発メモリと、
前記不揮発メモリに対するデータの書き込みを要求する書き込み要求を、前記ホスト装置から受け取った後に、該書き込み要求に基づくデータの書き込みを行うコントローラと、を備え、
前記コントローラは、前記ホスト装置から、前記メモリデバイスへ送信済みの１以上の前記書き込み要求に基づくデータの書き込みが行われたことの確認を要求する書き込み順序確認要求を受け取ると、前記書き込み順序確認要求を受け取る前に受け取った前記書き込み要求に基づくデータの書き込みを行った後に、前記書き込み順序確認要求に対する応答を前記ホスト装置へ送信し、
前記ホスト装置は、
第１の書き込み集合に含まれる１以上の前記書き込み要求を前記メモリデバイスに送信した後に、前記書き込み順序確認要求を前記メモリデバイスに送信し、前記メモリデバイスから前記書き込み順序確認要求に対する応答を受け取った後に、前記第１の書き込み集合よりも書き込み順序が後の第２の書き込み集合に含まれる１以上の前記書き込み要求を前記メモリデバイスへ送信する、
情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリデバイスおよび情報処理装置に関する。
【背景技術】
【０００２】
ＭＲＡＭやＰＣＭやＭｅｍｒｉｓｔｏｒのような、プロセッサのメモリバスに直結できるバイトアドレッサブルな不揮発メモリを、メインメモリとして使用するコンピュータシステムにおいて、障害が発生してもその直前の一貫性のある状態から処理を継続できるようにするためには、プロセッサ上で実行するプログラムによる不揮発メモリへの書き込みのオーダリング（順序性）やアトミシティ（書き込み途中の状態で終わらない性質）を保証する必要がある。
【０００３】
例えばオーダリングを保証する技術として、プロセッサから不揮発メモリに書き込まれるデータ群を、エポックと呼ばれる世代番号で識別されるグループに分け、キャッシュメモリから不揮発メモリへのライトバックの順番がエポック順になるように制御する技術が知られている。
【０００４】
また、近年では、メモリの動作速度の高速化とともに、メモリデバイス側に、メモリに対するデータの書き込みを制御するコントローラが搭載されたメモリデバイスが開発されている（例えば、ＨＭＣ（Ｈｙｂｒｉｄ  Ｍｅｍｏｒｙ  Ｃｕｂｅ）、ＱＰＩ（ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）接続メモリデバイス等）。プロセッサのメモリコントローラからメモリデバイスに送信された書き込み対象のデータは、さらにメモリデバイス側のコントローラを経由してメモリに書き込まれる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第８５３３４０４号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、コントローラを内蔵するメモリデバイスの場合、該コントローラ内での遅延や書き込み順序の最適化処理によって、プロセッサが想定している不揮発メモリへのデータの書き込み順序と異なる順序で、不揮発メモリに対するデータの書き込みが行われる可能性がある。そのため、オーダリングを保証することができない。
【課題を解決するための手段】
【０００７】
実施形態のメモリデバイスは、不揮発メモリと、不揮発メモリに対するデータの書き込みを要求する書き込み要求を、ホスト装置から受け取った後に、該書き込み要求に基づくデータの書き込みを行うコントローラと、を備える。コントローラは、ホスト装置から、メモリデバイスへ送信済みの１以上の書き込み要求に基づくデータの書き込みが行われたことの確認を要求する書き込み順序確認要求を受け取ると、書き込み順序確認要求を受け取る前に受け取った書き込み要求に基づくデータの書き込みを行った後に、書き込み順序確認要求に対する応答をホスト装置へ送信する。
【図面の簡単な説明】
【０００８】
【図１】第１の実施形態の情報処理装置の構成の一例を示す図。
【図２】第１の実施形態のリクエストの形式の一例を示す図。
【図３】第１の実施形態のリプライの形式の一例を示す図。
【図４】第１の実施形態の書き込み要求の一例を示す図。
【図５】第１の実施形態の読み出し要求の一例を示す図。
【図６】第１の実施形態の読み出し要求に対する応答の一例を示す図。
【図７】第１の実施形態の書き込み順序確認要求の一例を示す図。
【図８】第１の実施形態の書き込み順序確認要求に対する応答の一例を示す図。
【図９】第１の実施形態の不揮発メモリの構成の一例を示す図。
【図１０】第１の実施形態のメモリデバイスの構成の一例を示す図。
【図１１】第１の実施形態のリクエスト受信部の動作例を示す図。
【図１２】第１の実施形態のメモリアクセス部の動作例を示す図。
【図１３】変形例のメモリデバイスの構成の一例を示す図。
【図１４】変形例のメモリデバイスとプロセッサとの接続例を示す図。
【図１５】変形例のメモリデバイスとプロセッサとの接続例を示す図。
【図１６】変形例のメモリデバイスとプロセッサとの接続例を示す図。
【図１７】変形例のリクエストの形式の一例を示す図。
【図１８】変形例のメモリデバイスとプロセッサとの接続例を示す図。
【図１９】変形例のメモリデバイスの構成の一例を示す図。
【図２０】変形例のメモリデバイスの構成の一例を示す図。
【図２１】第２の実施形態のリプライ付きの書き込み要求を示す図。
【図２２】第２の実施形態のリプライ付きの書き込み要求に対する応答を示す図。
【図２３】第２の実施形態のメモリアクセス部の動作例を示す図。
【図２４】第３の実施形態のメモリアクセス部の動作例を示す図。
【図２５】第４の実施形態のメモリアクセス部の動作例を示す図。
【図２６】第５の実施形態のメモリアクセス部の動作例を示す図。
【図２７】第６の実施形態のメモリアクセス部の動作例を示す図。
【図２８】第７の実施形態のブロックの一例を示す図。
【図２９】第７の実施形態のブロックの一例を示す図。
【図３０】第７の実施形態の書き込み順序確認要求の一例を示す図。
【図３１】第７の実施形態の書き込み順序確認要求に対する応答の一例を示す図。
【図３２】変形例のメモリデバイスの構成の一例を示す図。
【図３３】変形例のリクエスト受信部の動作例を示す図。
【図３４】変形例のメモリデバイスの構成の一例を示す図。
【図３５】変形例のメモリデバイスの構成の一例を示す図。
【図３６】第８の実施形態のコマンドの形式の一例を示す図。
【図３７】第８の実施形態の書き込み順序確認要求の一例を示す図。
【図３８】変形例のメモリデバイスの構成の一例を示す図。
【図３９】変形例のリクエスト受信部の動作例を示す図。
【発明を実施するための形態】
【０００９】
以下、添付図面を参照しながら、本発明に係るメモリデバイスおよび情報処理装置の実施形態を詳細に説明する。
【００１０】
（第１の実施形態）
具体的な内容を説明する前に、従来技術と併せて本実施形態の概要を説明する。ＭＲＡＭ（Magnetoresistive  Random  Access  Memory）、ＰＣＭ（Phase  Change  Memory）、Ｍｅｍｒｉｓｔｏｒのような、プロセッサのメモリバスに直結できるバイトアドレッサブルな不揮発メモリを、メインメモリ（主記憶装置）として使用するコンピュータシステムでは、予期しない電源障害やハードウェア故障が発生しても、障害や故障を取り除いてリブート（再起動）した後、不揮発メモリ（メインメモリ）に残されている状態（データ）を用いて、障害や故障の発生の直前の一貫性のある状態から処理を継続することができる。そのために、プロセッサ上で動作するプログラムは、どのタイミングで障害や故障が発生しても、常にその直前の一貫性のある状態を再現できるように決めた順序で、不揮発メモリへのデータの書き込みを行う。
【００１１】
例えば、不揮発メモリ上にデータベースの更新ログをリンクトリストで管理する場合、個々のトランザクションの更新ログをログエントリに書き込む処理と、それらのログエントリをリンクトリストにつなぐ処理とが必要であるが、必ずログエントリへの書き込みが完了した後（ログエントリへの書き込みが不揮発メモリのメモリセルに書き込まれて、データが永続的になった後）に、そのログエントリへのポイントをリンクトリストにつなぐための書き込みを行う。この順序が守られないと、完全に書き込まれていない不完全なログエントリがリンクトリストにつながれている状態が発生し、その時点で障害が発生すると、リブート後に不完全なログを元にデータベースのリカバリを行うことになり、データベースの一貫性が壊れる。
【００１２】
しかし、このようにプロセッサ上で動作するプログラムが、決まった順序で不揮発メモリへのデータの書き込みを行っても、実際に不揮発メモリにデータが書き込まれるまでには、プロセッサのキャッシュメモリやライトバッファやメモリコントローラなどを経由するので、その段階で書き込み順序の入れ替えや書き込みの遅延が発生するので、プログラムが想定している順序で不揮発メモリにデータの書き込みが行われないというオーダリング（Ｏｒｄｅｒｉｎｇ）の問題が生じる。オーダリングの問題を解決するために従来から提案されている方法の一つとして、プロセッサから不揮発メモリに書き込まれるデータ群を、エポックと呼ばれる世代番号で識別されるグループに分け、キャッシュメモリから不揮発メモリへのライトバックの順番がエポック順になるように制御するエポックバリアと呼ばれる制御方式が知られている。
【００１３】
ここで、従来のＤＤＲ方式のＤＲＡＭを搭載したＤＩＭＭのようなメモリデバイス（メモリモジュール）の場合は、メモリデバイス上のメモリ（チップ、あるいはダイ）への書き込みのタイミングは、それが接続されたプロセッサのメモリコントローラがコントロールするので、メモリコントローラは、データ書き込みの順序を制御できるとともに書き込みの完了を認識することができた。しかし、メモリの動作速度の高速化とともに、メモリデバイス側に、メモリに対するデータの書き込みを制御するコントローラを搭載するメモリデバイスが登場してきている。例えば、ＨＭＣ（Ｈｙｂｒｉｄ  Ｍｅｍｏｒｙ  Ｃｕｂｅ）はそのようなメモリデバイスの一つである。他にも、ＱＰＩ（ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）で接続するメモリデバイスや、各種プロセッサの持つ専用のバスで接続されるメモリデバイス（メモリコントローラとメモリを組み合わせたもの）など、さまざまな実現形態がある（後述する本実施形態は、これらの何れの形態にも適用できる）。
【００１４】
以上のような、メモリに対するデータの書き込みを制御するコントローラが搭載されたメモリデバイスに接続されたプロセッサのメモリコントローラは、メモリデバイスに対するデータの送信（書き込み対象のデータの送信）が完了すれば、データの書き込みが完了したものと認識する。しかしながら、メモリデバイスに送信された書き込み対象のデータは、さらにメモリデバイス側のコントローラを経由してメモリに書き込まれるため、プロセッサのメモリコントローラがデータの書き込みが完了したと認識した時点では、書き込み対象のデータがメモリ内のメモリセルまで到達している保証は無い。また、メモリデバイスに搭載されたコントローラは、データの書き込み順序の最適化（書き込み順序の変更など）を行った上で、不揮発メモリのメモリセルへデータを書き込んで永続的にする。
【００１５】
メモリデバイスに搭載されたコントローラが行うデータの書き込み順序の最適化には、様々な方式がある。第１の最適化としては、同じロウページへの書き込みをまとめる方式が考えられる。一般的には、それぞれが行方向に延びる複数のワード線と、それぞれが列方向に延びる複数のビット線との各交差に対応してマトリクス状に配置される複数のメモリセルを有する不揮発メモリ内のメモリセルの位置を指定するためのアドレス情報のうち、上位のビット部分をロウアドレス（行方向のアドレス）、下位のビット部分をカラムアドレス（列方向のアドレス）として使い、不揮発メモリにアクセスする際は、まずロウアドレスを指定してロウページ（１本のワード線に接続される複数のメモリセル分のデータサイズを「ロウページ」と称する）を指定し、そのロウページ内のリード（データの読み出し）やライト（データの書き込み）を行う。そのため、同じロウアドレスを持つリードやライトのアクセスは続けて行うことで、ロウページのオープン（アクティベートとも呼ぶ）やクローズ（プリチャージとも呼ぶ）の回数を減らし、それに必要な時間も削減することができる。そのため、コントローラは、受け取ったリードやライトのリクエストの順序を、できるだけ同じロウページのものが連続するように入れ替える。
【００１６】
第２の最適化としては、メモリデバイス内に複数の不揮発メモリを内蔵し、それらが並列に動作（リードやライト）できる場合、リードやライトのリクエストを受け取ったコントローラは、アクセスしたい不揮発メモリが動作可能な状態（例えばリードやライトの処理中ではない状態）であればすぐにアクセスを開始し、アクセスしたい不揮発メモリが他のリクエストによる処理を実行中であれば、キューに入れて待たせる方式が考えられる。そのため、不揮発メモリに対する書き込み順序は、コントローラがライトリクエストを受け取った順序とは異なる。第２の最適化のような順序の入れ替えは、複数のメモリデバイスがプロセッサに接続されている場合に、異なるメモリデバイス間でも発生し得る。つまり、プロセッサが第１のメモリデバイスに対して、不揮発メモリに対するデータの書き込みを要求するライトリクエスト（第１のライトリクエスト）を送信した後に、第２のメモリデバイスに対してライトリクエスト（第２のライトリクエスト）を送信したとしても、第１のメモリデバイスは、第１のリクエストを受け取ったときに、それよりも前に受け取ったライトリクエストに基づくデータの書き込みを実行中であり、第２のメモリデバイスは、第２のライトリクエストを受け取ったときにアイドル状態（何も処理を行ってない状態）であれば、第２のライトリクエストに基づくデータの書き込みが、第２のライトリクエストよりも前に発行された第１のライトリクエストに基づくデータの書き込みよりも先に完了する。
【００１７】
メモリデバイスに搭載されたコントローラによる不揮発メモリへの書き込み順序は、基本的には到着順であるが、それに対して、上記の第１の最適化や第２の最適化の一方または両方を組み合わせて順序を決めるように実施することができる。さらに、上記の第１の最適化や第２の最適化以外の最適化を組み合わせて実施することもできる。
【００１８】
以上のような、コントローラを内蔵するメモリデバイスの場合、該コントローラ内での遅延や書き込み順序の最適化処理によって、プロセッサが想定している不揮発メモリへのデータの書き込み順序と異なる順序で、不揮発メモリに対するデータの書き込みが行われる可能性がある。そのため、オーダリングを保証することができない。
【００１９】
本実施形態は、コントローラと、１以上の不揮発メモリとを含むメモリデバイスにおいて、該コントローラ内での書き込み順序の入れ替えをコントロールし、メモリデバイスに接続されたプロセッサ（ないしはその上で動作するプログラム）が指定した順序で不揮発メモリのメモリセルへのデータの書き込みが行われることを保証するためのメカニズムを提供する。具体的には、ある時点までにメモリデバイスが受け取ったライトリクエストに基づくデータの書き込み（不揮発メモリのセルへの書き込み）が完了して永続的になっていることを確認するためのコマンド（後述のオーダリングリクエスト）を用いて、オーダリングを保証するためのメカニズムを実現する。
【００２０】
以下、添付図面を参照しながら、本実施形態の具体的な内容を詳細に説明する。
【００２１】
図１は、本実施形態の情報処理装置１のハードウェア構成の一例を示す図である。例えば情報処理装置１は、サーバ計算機、ＰＣ（Personal  Computer）、携帯型情報端末（可搬型のタブレットも含む）、携帯電話端末などで構成され得る。図１に示すように、情報処理装置１は、プロセッサ１０と、メモリデバイス２０（メモリモジュール（他の実施形態でも同様））とを備える。図１の例では、メモリデバイス２０は、アクセス用のポートを１つ持ち、そこにプロセッサ１０を接続しているが、これに限られるものではない。
【００２２】
ホスト装置の一例であるプロセッサ１０は、プロセッサコア（ＣＰＵ（Central  Processing  Unit）とも称する）１１と、キャッシュメモリ１２と、メモリコントローラ１３とを備える。
【００２３】
プロセッサコア１１が実行するプログラムによるメモリデバイス２０へのデータ書き込みの手順としては、まず、書き込み対象のデータがキャッシュメモリ１２に書き込まれる。キャッシュメモリ１２は、適切なタイミングで、メモリコントローラ１３に対してデータをメモリデバイス２０に書き込むことを指示する。メモリコントローラ１３は、キャッシュメモリ１２に書き込まれたデータをメモリデバイス２０に書き込むために、メモリデバイス２０に対して、適切なタイミングで書き込み要求（ライトリクエスト）を発行する。書き込み要求とは、メモリデバイス２０の不揮発メモリ２１に対するデータの書き込みを要求する情報である。本実施形態における書き込み要求は、書き込み対象のデータと、メモリデバイス２０の不揮発メモリ２１のうち該書き込み対象のデータが書き込まれる位置を示す情報（アドレス情報）とを少なくとも含む。プロセッサコア１１が実行するプログラムによるメモリデバイス２０へのデータ書き込みの別の手順としては、キャッシュメモリ１２をスキップして、直接メモリコントローラ１３に対してデータをメモリデバイス２０に書き込むことを指示する。また、メモリデバイス２０からデータを読み出す場合は、メモリコントローラ１３は、プロセッサコア１１からの指示に従って、読み出し要求（リードリクエスト）を発行する。読み出し要求とは、メモリデバイス２０の不揮発メモリ２１からのデータの読み出しを要求する情報である。本実施形態における読み出し要求は、メモリデバイス２０の不揮発メモリ２１のうち読み出し対象のデータが格納されている位置を示すアドレス情報を少なくとも含む。
【００２４】
また、本実施形態のプロセッサ１０は、メモリデバイス２０に対して１以上の書き込み要求を送信した後、該送信済みの１以上の書き込み要求に基づくデータの書き込みが行われたことの確認を要求する書き込み順序確認要求（以下の説明では、「オーダリングリクエスト」と称する場合がある）をメモリデバイス２０へ送信（例えばメモリコントローラ１３から送信）する。例えば、プロセッサ１０は、第１の書き込み集合に含まれる１以上の書き込み要求をメモリデバイス２０に送信した後に、該第１の書き込み集合に含まれる１以上の書き込み要求に基づくデータの書き込みが行われたことを確認するために、書き込み順序確認要求をメモリデバイス２０に送信する。そして、プロセッサ１０は、メモリデバイス２０から該書き込み順序確認要求に対する応答（リプライ）を受け取った後に、第１の書き込み集合よりも書き込み順序が後の第２の書き込み集合に含まれる１以上の書き込み要求をメモリデバイス２０へ送信する。
【００２５】
本実施形態のプロセッサ１０は、メモリデバイス２０に対して、第１の書き込み集合に含まれる１以上の書き込み要求を送信した後に書き込み順序確認要求を送信した後は、該書き込み順序確認要求に対する応答（リプライ）をメモリデバイス２０から受け取るまでは、第２の書き込み集合に含まれる１以上の書き込み要求をメモリデバイス２０に送信することはしないので、メモリデバイス２０に内蔵されたコントローラ２２内での遅延や書き込み順序の最適化処理などの影響を受けることなく、第１の書き込み集合に基づくデータの書き込み後に第２の書き込み集合に基づくデータの書き込みが行われることを保証できる。
【００２６】
以下の説明では、書き込み要求（ライトリクエスト）、読み出し要求（リードリクエスト）、書き込み順序確認要求（オーダリングリクエスト）を区別しない場合は、単に「リクエスト」と称する場合がある。
【００２７】
図２は、本実施形態のリクエストの形式の一例を示す図である。図２の例では、リクエストは、コマンド情報とタグ情報とアドレス情報とデータとＣＲＣとを含む。コマンド情報は、リクエストの種類を識別する情報である。タグ情報は、リクエストと、該リクエストに対する応答を示すリプライを対応付けるための情報（例えば番号等）である。アドレス情報は、メモリデバイス２０の不揮発メモリ２１の位置を示す情報である。データは、例えばリクエストが書き込み要求（ライトリクエスト）の場合、書き込み対象のデータとなる。ＣＲＣは、リクエストがエラー無く送られたかどうかを検証するための情報である。これらの情報は、リクエストの種類によっては存在しない場合もあり、例えば読み出し要求の場合は、「データ」の部分は存在しない。なお、図２に示す情報に加えて、リクエスト全体の長さを示す情報が含まれてもよい。
【００２８】
図３は、本実施形態のリクエストに対する応答を示すリプライの形式の一例を示す図である。図３の例では、リプライは、コマンド情報とタグ情報とデータとＣＲＣとを含む。コマンド情報は、リプライの種類を識別する情報である。タグ情報は、対応するリクエストに含まれるタグ情報と同一の情報である。データは、例えば読み出し要求に対するリプライの場合、読み出し結果のデータとなる。ＣＲＣは、リプライがエラー無く送られたかどうかを検証するための情報である。これらの情報は、リプライの種類によっては存在しない場合もあり、例えば書き込み要求に対するリプライの場合は、「データ」の部分は存在しない。なお、図３に示す情報に加えて、リプライ全体の長さを示す情報が含まれてもよい。
【００２９】
図４は、本実施形態における書き込み要求（ライトリクエスト）の一例を示す図である。本実施形態の書き込み要求は、該書き込み要求に対する応答を要求しない「リプライ無しの書き込み要求」であるが、後述の他の実施形態においては、リプライを要求する「リプライ付きの書き込み要求」が含まる場合もある。図３の例では、コマンド情報として、１６バイトのデータの書き込みを要求し、該データの書き込みを行った後に応答(リプライ)を返す必要が無いリクエストであることを識別する情報（図４の例では「１６−ｂｙｔｅ  ＰＯＳＴＥＤ  ＷＲＩＴＥ  ｒｅｑｕｅｓｔ」）が指定される。図４の例では、リプライが不要であるため、タグ情報は存在しない。また、図４の例では、アドレス情報として「１２ＥＦ００」が指定され、データとして、「Ｂ８、２６、・・・、９Ａ、０１」という書き込み対象の１６バイトのデータが指定される。つまり、図４の書き込み要求は、メモリデバイス２０の不揮発メモリ２１のうち「１２ＥＦ００」が示す位置に対して、「Ｂ８、２６、・・・、９Ａ、０１」という１６バイトのデータの書き込みを要求し、該データの書き込みを行った後に応答を返す必要が無いリプライ無しの書き込み要求であると考えることができる。
【００３０】
図５は、本実施形態における読み出し要求（リードリクエスト）の一例を示す図である。図５の例では、コマンド情報として、６４バイトのデータの読み出しを要求するリクエストであることを識別する情報（図５の例では「６４−ｂｙｔｅ  ＲＥＡＤ  ｒｅｑｕｅｓｔ」）が指定される。また、タグ情報として「７」を示す番号が指定され、アドレス情報として「２１Ｂ４９８」が指定される。つまり、図５の読み出し要求は、メモリデバイス２０の不揮発メモリ２１のうち「２１Ｂ４９８」が示す位置から６４バイトのデータの読み出しを要求する読み出し要求であると考えることができる。
【００３１】
図６は、図５の読み出し要求に対する応答を示すリプライの一例を示す図である。図６の例では、コマンド情報として、６４バイトのデータの読み出しを要求する読み出し要求に対するリプライであることを識別する情報（図６の例では「６４−ｂｙｔｅ  ＲＥＡＤ  ｒｅｓｐｏｎｓｅ」）が指定される。また、図６の例では、タグ情報として、図５の読み出し要求に含まれるタグ情報と同一の情報（「７」を示す番号）が指定される。また、図６の例では、アドレス情報は存在せず、データとして、「４８、ＢＤ、・・・、５３、Ａ４」という図５の読み出し要求に基づくデータの読み出し結果を示す６４バイトのデータが指定される。
【００３２】
図７は、本実施形態における書き込み順序確認要求（オーダリングリクエスト）の一例を示す図である。基本的には、図２のリクエスト形式に基づいており、コマンド情報として、書き込み順序確認要求であることを識別する情報（図７の例では「ＯＲＤＥＲＩＮＧ  ｒｅｑｕｅｓｔ」）が指定される。また、図７の例では、タグ情報として「５」を示す番号が指定され、アドレス情報およびデータは存在しない。
【００３３】
図８は、図７の書き込み順序確認要求に対する応答を示すリプライの一例を示す図である。図８の例では、コマンド情報として、書き込み順序確認要求に対するリプライであることを識別する情報（図８の例では「ＯＲＤＥＲＩＮＧ  ｒｅｓｐｏｎｓｅ」）が指定される。また、図８の例では、タグ情報として、図７の書き込み順序確認要求に含まれるタグ情報と同一の情報（「５」を示す番号）が指定される。同一のタグ情報を用いることで、リクエストとリプライとを対応付けている。
【００３４】
図１に戻り、メモリデバイス２０の構成を説明する。図１に示すように、メモリデバイス２０は、不揮発メモリ２１と、コントローラ２２とを備える。メモリデバイス２０は、半導体装置の一例であると考えることができる。
【００３５】
本実施形態では、不揮発メモリ２１は、ＭＲＡＭ（Magnetoresistive  Random  Access  Memory）で構成されるが、これに限られるものではない。例えば不揮発メモリ２１は、ＰＣＭ（Phase  Change  Memory）、ＲｅＲＡＭ（Resistive  Random  Access  Memory）、ＦｅＲＡＭ（Ferroelectric  Random  Access  Memory）、Ｍｅｍｒｉｓｔｏｒでもよいし、ＤＲＡＭ（Dynamic  Random  Access  Memory）とＮＡＮＤ  Ｆｌａｓｈを組み合わせたＮＶＤＭＭであっても構わない。また、不揮発メモリ２１は、バッテリバックアップした揮発メモリ（ＤＲＡＭやＳＲＡＭなど）であっても構わない。
【００３６】
図９は、本実施形態における不揮発メモリ２１の概略構成の一例を示す図である。図９に示すように、不揮発メモリ２１は、不揮発メモリセルアレイ２０１と、揮発性のメモリであるロウバッファ（ページバッファ）２０２とを有する。
【００３７】
詳細な図示は省略するが、不揮発メモリセルアレイ２０１には、行方向（図９の左右方向）に延在する複数のワード線、および、列方向（図９の上下方向）に延在する複数のビット線が配置され、不揮発メモリセルアレイ２０１は、複数のワード線と複数のビット線との各交差に対応してマトリクス状に配置される複数のメモリセルを有する。また、詳細な図示は省略するが、不揮発メモリセルアレイ２０１は、コントローラ２２の制御の下、各ワード線の電圧を制御する回路や各ビット線の電圧を制御する回路などを備えている。以上の構成は、公知の様々な構成を利用することができる。なお、この例では１本のワード線に接続される複数のメモリセル分のデータサイズを「ページ」と称し、ロウバッファ２０２は、データの書き込み時またはデータの読み出し時において選択されたワード線に対応する１ページ分のデータを一時的に格納する。本実施形態では、不揮発メモリ２１へのデータの書き込みや不揮発メモリ２１からのデータの読み出しは、このロウバッファ２０２を経由して行われるが、これは、公知の方法と同様である。
【００３８】
図１に戻って説明を続ける。コントローラ２２は、不揮発メモリ２１に対するデータの書き込みを要求する書き込み要求を、プロセッサ１０のメモリコントローラ１３から受け取った後に、該書き込み要求に基づくデータの書き込みを行う。また、コントローラ２２は、不揮発メモリ２１に対するデータの読み出しを要求する読み出し要求を、プロセッサ１０のメモリコントローラ１３から受け取った後に、該読み出し要求に基づくデータの読み出しを行う。
【００３９】
また、本実施形態では、コントローラ２２は、プロセッサ１０から、メモリデバイス２０へ送信済みの１以上の書き込み要求に基づくデータの書き込みが行われたことの確認を要求する書き込み順序確認要求（オーダリングリクエスト）を受け取ると、該書き込み順序確認要求を受け取る前に受け取った書き込み要求に基づくデータの書き込みを行った後に、書き込み順序確認要求に対する応答（リプライ）をプロセッサ１０へ送信する。本実施形態のコントローラ２２の詳細な内容については後述する。
【００４０】
図１０は、メモリデバイス２０の詳細なハードウェア構成の一例を示す図である。図１０に示すように、コントローラ２２は、リクエスト受信部２１１と、リクエスト記憶部２１２と、メモリアクセス部２１３と、リプライ送信部２１４とを備える。これらの各要素は、半導体回路で構成され、それぞれ独立して設けられてもよいし、任意の２以上の要素が集積されて設けられてもよい。
【００４１】
リクエスト受信部２１１は、プロセッサ１０からリクエスト（書き込み要求、読み出し要求および書き込み順序確認要求のうちの何れか）を受け取り、受け取った順にリクエスト記憶部２１２に記録する。つまり、リクエスト記憶部２１２は、プロセッサ１０から受け取ったリクエストを、受け取った順に記憶する。例えばリクエスト記憶部２１２は、リクエスト受信部２１１が受け取ったリクエストを、そのままの形式で管理することもできるし、受け取ったリクエストに対応する（関する）情報を、メモリアクセス部２１３が処理し易い形式に加工した状態で、受け取った順に１次元のキューあるいはリンクトリストにして管理することもできる。
【００４２】
メモリアクセス部２１３は、リクエスト記憶部２１２に記録されているリクエスト（あるいはリクエストに対応する情報）を順次取り出して、そのリクエストが書き込み要求であれば、該書き込み要求に基づいて不揮発メモリ２１に対するデータの書き込みを行い、そのリクエストが読み出し要求であれば、該読み出し要求に基づいて不揮発メモリ２１からのデータの読み出しを行う。
【００４３】
また、本実施形態では、メモリアクセス部２１３は、リクエスト記憶部２１２内に書き込み順序確認要求が記憶されている場合は、該書き込み順序確認要求よりも古い書き込み要求（該書き込み順序確認要求よりも先にリクエスト記憶部２１２に記憶された書き込み要求）に基づくデータの書き込みを行った後に、該書き込み順序確認要求を取り出し、リプライ送信部２１４に対して、該書き込み順序確認要求に対する応答（リプライ）の送信を指示する。すなわち、メモリアクセス部２１３は、該書き込み順序確認要求を受け取る前に受け取った書き込み要求に基づくデータの書き込みを行った後に、リプライ送信部２１４に対して、該書き込み順序確認要求に対する応答の送信を指示する。この指示を受けたリプライ送信部２１４は、該書き込み順序確認要求に対する応答をプロセッサ１０へ送信する。
【００４４】
図１１は、リクエスト受信部２１１の動作例を示すフローチャートである。リクエスト受信部２１１は、プロセッサ１０からリクエストを受信すると（ステップＳ１）、その受信したリクエストを、受信した順序でリクエスト記憶部２１２に記録する（ステップＳ２）。
【００４５】
図１２は、メモリアクセス部２１３の動作例を示すフローチャートである。まず、メモリアクセス部２１３は、リクエスト記憶部２１２内に書き込み順序確認要求（オーダリングリクエスト）が記憶されているかどうかを確認する（ステップＳ１１）。リクエスト記憶部２１２内に書き込み順序確認要求が記憶されている場合（ステップＳ１１：Ｙｅｓ）、メモリアクセス部２１３は、最も古い書き込み順序確認要求よりも古い書き込み要求がリクエスト記憶部２１２内に記憶されているかどうかを確認する（ステップＳ１２）。最も古い書き込み順序確認要求よりも古い書き込み要求が記憶されている場合（ステップＳ１２：Ｙｅｓ）、または、上述のステップＳ１１において、リクエスト記憶部２１２内に書き込み順序確認要求が記憶されていない場合（ステップＳ１１：Ｎｏ）、処理は後述のステップＳ１３に移行する。
【００４６】
ステップＳ１３において、メモリアクセス部２１３は、リクエスト記憶部２１２内に書き込み要求または読み出し要求が記憶されているかどうかを確認する。リクエスト記憶部２１２内に書き込み要求も読み出し要求も記憶されていない場合（ステップＳ１３：Ｎｏ）は、処理はステップＳ１１に戻る一方、リクエスト記憶部２１２内に書き込み要求または読み出し要求が記憶されている場合（ステップＳ１３：Ｙｅｓ）は、メモリアクセス部２１３は、リクエスト記憶部２１２から書き込み要求または読み出し要求を取り出す（ステップＳ１４）。ステップＳ１４における書き込み要求または読み出し要求の取り出し方法は任意であるが、最も単純な方法としては、リクエスト記憶部２１２内の書き込み要求および読み出し要求の中で最も古いものを取り出すという方法である。別の方法としては、例えば同じロウページに対する書き込み要求または読み出し要求が連続するように取り出すという方法も考えられる。さらに別の方法としては、同じロウページに対する書き込み要求または読み出し要求が連続するように取り出すものの、一定時間以上にわたってリクエスト記憶部２１２から取り出されていないリクエストは優先的に取り出すという方法も考えられる。他にも様々な方法を用いて構わない。
【００４７】
ステップＳ１４で取り出したリクエストが書き込み要求である場合（ステップＳ１５：Ｙｅｓ）、メモリアクセス部２１３は、取り出した書き込み要求に基づくデータの書き込み（不揮発メモリ２１へのデータの書き込み）を行い（ステップＳ１６）、処理はステップＳ１１に戻る。一方、ステップＳ１４で取り出したリクエストが読み出し要求である場合（ステップＳ１５：Ｎｏ）、メモリアクセス部２１３は、取り出した読み出し要求に基づくデータの読み出し（不揮発メモリ２１からのデータの読み出し）を行い（ステップＳ１７）、読み出したデータを含むリプライ（読み出し要求に対する応答）の送信をリプライ送信部２１４に指示する（ステップＳ１８）。この指示を受けたリプライ送信部２１４は、ステップＳ１４で取り出した読み出し要求に対するリプライをプロセッサ１０へ送信する。そして、処理はステップＳ１１に戻る。
【００４８】
一方、上述のステップＳ１２において、最も古い書き込み順序確認要求よりも古い書き込み要求が記憶されていない場合（ステップＳ１２：Ｎｏ）、すなわち、最も古い書き込み順序確認要求を受け取る前に受け取った書き込み要求に基づくデータの書き込みが完了している場合、メモリアクセス部２１３は、その最も古い書き込み順序確認要求をリクエスト記憶部２１２から取り出し、該書き込み順序確認要求に対する応答の送信をリプライ送信部２１４に指示する（ステップＳ１９）。この指示を受けたリプライ送信部２１４は、書き込み順序確認要求に対する応答（リプライ）をプロセッサ１０へ送信する。そして、処理はステップＳ１１に戻る。
【００４９】
以下に、本実施形態における書き込み順序確認要求（オーダリングリクエスト）の利用例を挙げて説明する。例えば、キャッシュメモリ１２が上述のエポックバリア機能を備える場合、キャッシュメモリ１２は、書き込み対象のデータをキャッシュする際に、キャッシュメモリ１２へのデータの書き込みの単位であるキャッシュラインに対してエポックと呼ばれる世代番号を記録していく。エポックは、プロセッサ１０上のプログラムからの指示によってインクリメントされる。メモリコントローラ１３は、キャッシュラインを不揮発メモリ２１にライトバックする時に、必ずエポック番号の順にライトバックするように制御する。つまり、あるエポック番号のキャッシュラインをすべてライトバックした後で、次のエポック番号のキャッシュラインのライトバックを行うように制御する。これにより、プログラムで想定されている順番（プログラマが意図した順番）に、不揮発メモリ２１（不揮発メモリ２１のメモリセル）への書き込みを行うことができる。以上のような形態に対して、本実施形態を適用する場合は、メモリコントローラ１３は、あるエポック番号のキャッシュラインをすべてライトバックした後、書き込み順序確認要求（オーダリングリクエスト）をメモリデバイス２０に送り、それに対する応答（リプライ）が返ってきたことを確認した後、次のエポック番号のキャッシュラインのライトバックを開始する。このようにすることで、あるエポック番号のキャッシュラインのデータが確実に不揮発メモリのメモリセルに書き込まれた後に、次のエポック番号のキャッシュラインのデータの書き込み（不揮発メモリ２１のメモリセルへの書き込み）が行われることを保証できる。
【００５０】
また、例えばプロセッサ１０上で動作するプログラム自身が、書き込み順序確認要求をメモリデバイス２０に発行する形態に対して、本実施形態を適用することもできる。例えば、それぞれが、メモリデバイス２０の不揮発メモリ２１に対する１以上の書き込み要求を含む書き込み集合Ａおよび書き込み集合Ｂがあって、書き込み集合Ａに基づくデータの書き込みが確実に完了してから（書き込み集合Ａに対応するデータが不揮発メモリ２１のメモリセルに確実に書き込まれてから）、書き込み集合Ｂに基づくデータの書き込みを行うことが望まれる場合を考える。一例として、ログの書き込み例に対応させ、書き込み集合Ａはログエントリの書き込みで、書き込み集合Ｂはログエントリを管理するリンクの付け替えのための書き込みである場合を想定する。このような場合に、書き込み順序確認要求（オーダリングリクエスト）を用いてログの書き込みを実行するには、まず書き込み集合Ａに属するデータ群をキャッシュメモリ１２に書き込んだ後、それらの書き込んだアドレスに対応するキャッシュフラッシュ命令を実行してライトバックさせる。次にメモリデバイス２０に対して書き込み順序確認要求を送り、それに対する応答（リプライ）を待つ。書き込み順序確認要求に対する応答の受け取りを確認した後、書き込み集合Ｂに属するデータ群をキャッシュメモリ１２に書き込む。そして、必要に応じて、書き込み集合Ｂに属するデータ群を書き込んだアドレスに対応するキャッシュフラッシュ命令を実行する。なお、キャッシュメモリ１２に書き込んだ後にキャッシュフラッシュ命令を実行する代わりに、キャッシュをスキップする書き込み命令を実行することもできる。
【００５１】
また、プロセッサ１０によっては、書き込み対象のデータがメモリセルまで到達していることを確認するための特殊命令を利用する場合がある。例えばＩｎｔｅｌアーキテクチャにおけるＰＣＯＭＭＩＴ命令などが上記特殊命令に相当する。このような特殊命令をプロセッサ１０が実行すると、プロセッサ１０は、プロセッサ１０と接続されているメモリデバイス２０に対して書き込み順序確認要求（オーダリングリクエスト）を送り、それに対する応答（リプライ）の受け取りを待って、次の命令の実行に移るようにすることで、オーダリングを保証できる。
【００５２】
なお、本実施形態におけるオーダリング保証方式では、プロセッサ１０上で同時に実行する複数のアプリケーション、あるいは複数のトランザクション、あるいは複数のスレッド、さらには複数のプロセッサ１０から、それぞれが独自に書き込み順序確認要求（オーダリングリクエスト）を発行しても矛盾を生じない。
【００５３】
以上に説明したように、メモリデバイス２０のコントローラ２２は、プロセッサ１０から、メモリデバイス２０へ送信済みの１以上の書き込み要求に基づくデータの書き込みが行われたことの確認を要求する書き込み順序確認要求（オーダリングリクエスト）を受け取ると、該書き込み順序確認要求を受け取る前に受け取った書き込み要求に基づくデータの書き込みを行った後に、該書き込み順序確認要求に対する応答をプロセッサ１０へ返す。
【００５４】
例えば、プロセッサ１０は、第１の書き込み集合に基づくデータの書き込みが確実に完了してから、第２の書き込み集合に基づくデータの書き込みを行うことを保証するために（第１の書き込み集合と第２の書き込み集合との書き込み順序を保証するために）、第１の書き込み集合に含まれる１以上の書き込み要求をメモリデバイス２０に送信した後に、書き込み順序確認要求をメモリデバイス２０に送信し、該書き込み順序確認要求に対する応答（リプライ）をメモリデバイス２０から受け取った後に、第２の書き込み集合に含まれる１以上の書き込み要求をメモリデバイス２０へ送信する。すなわち、プロセッサ１０は、メモリデバイス２０に対して、第１の書き込み集合に含まれる１以上の書き込み要求を送信した後に書き込み順序確認要求を送信した後は、該書き込み順序確認要求に対する応答をメモリデバイス２０から受け取るまでは、第２の書き込み集合に含まれる１以上の書き込み要求をメモリデバイス２０に送信することはしないので、メモリデバイス２０に内蔵されたコントローラ２２内での遅延や書き込み順序の最適化処理などの影響を受けることなく、第１の書き込み集合に基づくデータの書き込みの後に第２の書き込み集合に基づくデータの書き込みが行われることを保証できる。
【００５５】
したがって、本実施形態によれば、メモリデバイス２０にコントローラ２２が搭載される構成においてもオーダリングを保証することができる。
【００５６】
（第１の実施形態の変形例１）
例えばメモリデバイス２０は、複数のアクセスポートを有する形態であってもよい。
【００５７】
例えばメモリデバイス２０とプロセッサ１０とを複数のアクセスポートで接続することで、データ転送能力を向上させることができる。例えば図１３に示すように、コントローラ２２が、リクエストを受信またはリプライを送信するためのアクセスポートを２つ有する形態であってもよい。このように２つのアクセスポートを使ってメモリデバイス２０とプロセッサ１０とを接続することで、データ転送のバンド幅を２倍にすることができる。また、図１３の例では、リクエスト受信部２１１は、受信したリクエストをリクエスト記憶部２１２に記録する際に、そのリクエストが送られてきたアクセスポートを示す情報を関連付けて記録しておき、メモリアクセス部２１３は、リプライ送信部２１４に対してリプライの送信を指示する際に、どのアクセスポートから受け取ったリクエストに対するリプライかを伝えることで、リプライ送信部２１４は、リクエストの送信元に対応するリプライを送り返すことができる。
【００５８】
また、例えばメモリデバイス２０を複数のプロセッサ１０と接続することもできる。例えば図１４に示すように、アクセスポートを２つ有するメモリデバイス２０に対して、２つのプロセッサ１０ａおよび１０ｂを接続することもできる。この例では、プロセッサ１０ａとプロセッサ１０ｂがデータを共有することができる。
【００５９】
また、例えばメモリデバイス２０に対して、プロセッサ１０と、別のメモリデバイス（以下、「第２のメモリデバイス２００」と称する）とを接続し、プロセッサ１０からの書き込み要求を、必要に応じて第２のメモリデバイス２００に転送する構成であってもよい。図１５に示すように、メモリデバイス２０は第２のメモリデバイス２００と接続され、メモリデバイス２０のコントローラ２２は、プロセッサ１０のメモリコントローラ１３から、第２のメモリデバイス２００に対するデータの書き込みを要求する書き込み要求を受け取ると、該書き込み要求を第２のメモリデバイス２００に転送する構成でもよい。このように接続することで、例えばプロセッサ１０がメモリデバイスとの接続用のポートを１つしか持たない場合でも、複数のメモリデバイスと接続することができる。
【００６０】
また、例えば図１６に示すように、第２のメモリデバイス２００が、プロセッサ１０とは別の第２のプロセッサ１００と接続される構成とすることもできる。
【００６１】
図１５や図１６のように、ホストとなるプロセッサ（プロセッサ１０または第２のプロセッサ１００）が、一のメモリデバイス（メモリデバイス２０および第２のメモリデバイス２００のうちの何れか一方のメモリデバイス、以下では「第１のメモリデバイス」と称する）を介して他のメモリデバイス（メモリデバイス２０および第２のメモリデバイス２００のうちの何れか他方のメモリデバイス、以下では「第２のメモリデバイス」と称する）にアクセスする場合、プロセッサが第１のメモリデバイスに送ったリクエストは、第１のメモリデバイスで処理するリクエストであるのか第２のメモリデバイスへ転送するリクエストであるのかを判断する必要がある。この判断は、例えばリクエスト中のアドレス情報の上位ビットで判断するように実施することができる。別の実施方法としては、例えば図１７に示すように、リクエスト中に、対象となるメモリデバイスを識別する「デバイスＩＤ」を指定するフィールドを設け、リクエストを受け取った第１のメモリデバイスは、このデバイスＩＤに従って、該第１のメモリデバイスで処理すべきか、他のメモリデバイス（第２のメモリデバイス）に転送するかを判断するようにしてもよい。
【００６２】
また、例えば図１８に示すように、プロセッサ１０がメモリデバイスとの接続用のポートを複数（図１８の例では２つ）持つ場合には、該プロセッサ１０に複数のメモリデバイス（図１８の例では、メモリデバイス２０と第２のメモリデバイス２００）を直結することもできる。
【００６３】
（第１の実施形態の変形例２）
例えばＨＭＣのように、メモリデバイス２０内に複数の不揮発メモリ２１のダイまたはチップを持たせる場合も考えられるので、図１９に示すように、メモリデバイス２０は、複数の不揮発メモリ２１を備える形態であってもよい。図１９の例では、複数の不揮発メモリ２１が設けられる点、および、複数の不揮発メモリ２１と１対１に対応する複数のメモリアクセス部２１３が設けられる点以外の構成は、上述の第１の実施形態と同様である。
【００６４】
複数のメモリアクセス部２１３の各々は、該メモリアクセス部２１３に接続されている不揮発メモリ２１に対する書き込み要求に基づくデータの書き込みや読み出し要求に基づくデータの読み出しを行う。複数の不揮発メモリ２１の各々には互いに異なるアドレスが割り当てられているので、各メモリアクセス部２１３は、リクエスト記憶部２１３のリクエスト（あるいはリクエストに対応する情報）に含まれるアドレス情報を参照して、該リクエストが、該メモリアクセス部２１３に対応する（該メモリアクセス部２１３に接続されている）不揮発メモリ２１に対するリクエストであるかどうかを判断できる。
【００６５】
図２０は、図１９の変形例で、コントローラ２２が、リクエストを受信またはリプライを送信するためのアクセスポートを２つ有する構成を示す。なお、これに限らず、コントローラ２２が有するアクセスポートの数は任意に変更可能である。
【００６６】
（第２の実施形態）
次に、第２の実施形態について説明する。上述の第１の実施形態と共通する部分については適宜に説明を省略する。第２の実施形態の情報処理装置１のハードウェア構成は上述の第１の実施形態と同様であるので、詳細な説明は省略する。本実施形態では、プロセッサ１０が発行する書き込み要求の中に、書き込み順序確認要求を兼ねる書き込み要求を設けた点で上述の第１の実施形態と異なる。
【００６７】
本実施形態では、書き込み要求には、書き込み要求に基づくデータの書き込みを行った後に、該書き込み要求に対する応答（リプライ）をプロセッサ１０に送信することを要求するリプライ付きの書き込み要求と、書き込み要求に基づくデータの書き込みを行った後に、該書き込み要求に対する応答をプロセッサ１０に送信することを必要としないリプライ無しの書き込み要求とがある。
【００６８】
図２１は、リプライ付きの書き込み要求の一例を示す図である。図２１では、コマンド情報として、６４バイトのデータの書き込みを要求するリプライ付きの書き込み要求であることを識別する情報（図２１の例では「６４−ｂｙｔｅ  ＷＲＩＴＥ  ｒｅｑｕｅｓｔ」）が指定される。また、図２１の例では、タグ情報として「４」を示す番号が指定され、アドレス情報として「１０８Ａ０」が指定され、データとして、「８Ｆ、４２、・・・、０Ｂ、９Ｄ」という書き込み対象の６４バイトのデータが指定される。つまり、図２１のリプライ付きの書き込み要求は、メモリデバイス２０の不揮発メモリ２１のうち「１０８Ａ０」が示す位置に対して、「８Ｆ、４２、・・・、０Ｂ、９Ｄ」という６４バイトのデータの書き込みを要求し、該データの書き込みを行った後に応答（リプライ）を返すことを要求するリプライ付きの書き込み要求であると考えることができる。
【００６９】
図２２は、図２１のリプライ付きの書き込み要求に対する応答を示すリプライの一例を示す図である。図２２の例では、コマンド情報として、リプライ付きの書き込み要求に対するリプライであることを識別する情報（図２２の例では「ＷＲＩＴＥ  ｒｅｓｐｏｎｓｅ」）が指定される。また、図２２の例では、タグ情報として、図２１のリプライ付きの書き込み要求に含まれるタグ情報と同一の情報（「４」を示す番号）が指定される。また、図２２の例では、アドレス情報やデータは存在しない。
【００７０】
本実施形態では、コントローラ２２は、リプライ付きの書き込み要求をプロセッサ１０から受け取ると、リプライ付きの書き込み要求を受け取る前に受け取ったリプライ無しの書き込み要求に基づくデータの書き込みを行った後に、リプライ付きの書き込み要求に基づくデータの書き込みを行い、リプライ付きの書き込み要求に対する応答をホスト装置へ送信する。
【００７１】
すなわち、リプライ付きの書き込み要求を、書き込み順序確認要求（オーダリングリクエスト）として利用することができる。例えば、１以上の書き込み要求の集合である第２の書き込み集合よりも前にデータの書き込みが行われる第１の書き込み集合に含まれる１以上の書き込み要求のうち、最後にメモリデバイス２０に送り込まれる書き込み要求はリプライ付きの書き込み要求であり、それ以外の書き込み要求はリプライ無しの書き込み要求であるという形態にすることができる。
【００７２】
また、例えば、１以上の書き込み要求の集合である第１の書き込み集合に含まれる１以上の書き込み要求はリプライ無しの書き込み要求であり、第１の書き込み集合よりも後にデータの書き込みが行われる第２の書き込み集合に含まれる１以上の書き込み要求のうち、最初にメモリデバイス２０に送り込まれる書き込み要求は前記リプライ付きの書き込み要求であり、それ以外の書き込み要求は前記リプライ無しの書き込み要求であるという形態にすることもできる。
【００７３】
図２３は、本実施形態のメモリアクセス部２１３の動作例を示すフローチャートである。まず、メモリアクセス部２１３は、リクエスト記憶部２１２内にリプライ付きの書き込み要求が記憶されているかどうかを確認する（ステップＳ２１）。リクエスト記憶部２１２内にリプライ付きの書き込み要求が記憶されている場合（ステップＳ２１：Ｙｅｓ）、メモリアクセス部２１３は、最も古いリプライ付きの書き込み要求よりも古いリプライ無しの書き込み要求が記憶されているかどうかを確認する（ステップＳ２２）。最も古いリプライ付きの書き込み要求よりも古いリプライ無しの書き込み要求が記憶されている場合（ステップＳ２２：Ｙｅｓ）、または、上述のステップＳ２１において、リクエスト記憶部２１２内にリプライ付きの書き込み要求が記憶されていない場合（ステップＳ２１：Ｎｏ）、処理は後述のステップＳ２３に移行する。
【００７４】
ステップＳ２３において、メモリアクセス部２１３は、リクエスト記憶部２１２内にリプライ無しの書き込み要求または読み出し要求が記憶されているかどうかを確認する。リクエスト記憶部２１２内にリプライ無しの書き込み要求または読み出し要求が記憶されていない場合（ステップＳ２３：Ｎｏ）は、処理はステップＳ２１に戻る一方、リクエスト記憶部２１２内にリプライ無しの書き込み要求または読み出し要求が記憶されている場合（ステップＳ２３：Ｙｅｓ）は、メモリアクセス部２１３は、リクエスト記憶部２１２からリプライ無しの書き込み要求または読み出し要求を取り出す（ステップＳ２４）。ステップＳ２４におけるリプライ無しの書き込み要求または読み出し要求の取り出し方法は任意であるが、最も単純な方法としては、リクエスト記憶部２１２内のリプライ無しの書き込み要求および読み出し要求の中で最も古いものを取り出すという方法である。別の方法としては、例えば同じロウページに対するリプライ無しの書き込み要求または読み出し要求が連続するように取り出すという方法も考えられる。さらに別の方法としては、同じロウページに対するリプライ無しの書き込み要求または読み出し要求が連続するように取り出すものの、一定時間以上にわたってリクエスト記憶部２１２から取り出されていないリクエストは優先的に取り出すという方法が考えられる。他にも様々な方法を用いて構わない。
【００７５】
ステップＳ２４で取り出したリクエストがリプライ無しの書き込み要求である場合（ステップＳ２５：Ｙｅｓ）、メモリアクセス部２１３は、取り出したリプライ無しの書き込み要求に基づくデータの書き込みを行い（ステップＳ２６）、処理はステップＳ２１に戻る。一方、ステップＳ２４で取り出したリクエストが読み出し要求である場合（ステップＳ２５：Ｎｏ）、メモリアクセス部２１３は、取り出した読み出し要求に基づくデータの読み出しを行い（ステップＳ２７）、読み出したデータを含むリプライ（読み出し要求に対する応答）の送信をリプライ送信部２１４に指示する（ステップＳ２８）。この指示を受けたリプライ送信部２１４は、ステップＳ２４で取り出した読み出し要求に対するリプライをプロセッサ１０へ送信する。そして、処理はステップＳ２１に戻る。
【００７６】
一方、上述のステップＳ２２において、最も古いリプライ付きの書き込み要求よりも古いリプライ無しの書き込み要求が記憶されていない場合（ステップＳ２２：Ｎｏ）、メモリアクセス部２１３は、その最も古いリプライ付きの書き込み要求をリクエスト記憶部２１２から取り出し（ステップＳ２９）、取り出したリプライ付きの書き込み要求に基づくデータの書き込みを行う（ステップＳ３０）。そして、メモリアクセス部２１３は、リプライ付きの書き込み要求に対する応答（リプライ）の送信をリプライ送信部２１４に指示する（ステップＳ３１）。この指示を受けたリプライ送信部２１４は、リプライ付きの書き込み要求に対する応答をプロセッサ１０へ送信する。そして、処理はステップＳ２１に戻る。
【００７７】
なお、図２３の例では、書き込み順序確認要求（オーダリングリクエスト）の機能を兼ねるリプライ付きの書き込み要求で指定された書き込み対象のデータが、不揮発メモリ２１のメモリセルへ書き込まれて永続的になってから、該リプライ付きの書き込み要求に対応するリプライを送り返す実施方法を示している。この実施方法の変形例として、書き込み順序確認要求（オーダリングリクエスト）の機能を兼ねるリプライ付きの書き込み要求に基づくデータの書き込みを開始後、書き込み対象のデータが不揮発メモリ２１のメモリセルへ書き込まれて永続的になる前に、対応するリプライを送り返すようにしても構わない。
【００７８】
（第３の実施形態）
次に、第３の実施形態について説明する。上述の各実施形態と共通する部分については適宜に説明を省略する。第３の実施形態の情報処理装置１のハードウェア構成は上述の第１の実施形態と同様であるので、詳細な説明は省略する。本実施形態では、上述の第２の実施形態と同様に、プロセッサ１０が発行する書き込み要求の中に、書き込み順序確認要求を兼ねる書き込み要求を設けた点で上述の第１の実施形態と異なる。さらに、本実施形態では、書き込み順序確認要求を兼ねる書き込み要求は書き込み順序確認の時点よりも前の任意の時点で書き込みができるように、書き込み順序確認要求を兼ねる書き込み要求を、データの書き込みを行ったか否かを示すフラグ情報と関連付けて（対応付けて）リクエスト記憶部２１２で管理する点で上述の第２の実施形態と異なる。
【００７９】
本実施形態では、書き込み要求には、書き込み要求に基づくデータの書き込みを行った後に、該書き込み要求に対する応答をプロセッサ１０に送信することを要求するリプライ付きの書き込み要求と、該書き込み要求に基づくデータの書き込みを行った後に、該書き込み要求に対する応答をプロセッサ１０に送信することを必要としないリプライ無しの書き込み要求とがある。そして、コントローラ２２は、リプライ付きの書き込み要求をプロセッサ１０から受け取ると、該リプライ付きの書き込み要求を受け取る前に受け取ったリプライ無しの書き込み要求に基づくデータの書き込みと該リプライ付きの書き込み要求に基づくデータの書き込みを行った後、該リプライ付きの書き込み要求に対する応答をプロセッサ１０へ送信する。本実施形態では、コントローラ２２は、データの書き込みを行っていないことを示すように設定したフラグ情報と関連付けてリクエスト記憶部２１２に記憶していたリプライ付きの書き込み要求を取り出して、その取り出したリプライ付きの書き込み要求に基づくデータの書き込みを行った後、データの書き込みを行ったことを示すように設定したフラグ情報と関連付けて、該リプライ付きの書き込み要求をリクエスト記憶部２１２の元の位置に戻し、該リプライ付きの書き込み要求を受け取る前に受け取った書き込み要求に基づくデータの書き込みを行った後に、該リプライ付きの書き込み要求に対する応答をホスト装置に送信する。
【００８０】
例えば、１以上の書き込み要求の集合である第２の書き込み集合よりも前にデータの書き込みが行われる第１の書き込み集合に含まれる１以上の書き込み要求のうち、最後にメモリデバイス２０に送り込まれる書き込み要求はリプライ付きの書き込み要求であり、それ以外の書き込み要求はリプライ無しの書き込み要求であるという形態にすることができる。
【００８１】
図２４は、本実施形態のメモリアクセス部２１３の動作例を示すフローチャートである。まず、メモリアクセス部２１３は、リクエスト記憶部２１２内に処理済みのリプライ付きの書き込み要求（つまり、データの書き込みを行ったことを示すように設定されたフラグ情報と関連付けられたリプライ付きの書き込み要求）が記憶されているかどうかを確認する（ステップＳ４１）。リクエスト記憶部２１２内に処理済みのリプライ付きの書き込み要求が記憶されている場合（ステップＳ４１：Ｙｅｓ）、メモリアクセス部２１３は、最も古い処理済みのリプライ付きの書き込み要求よりも古いリクエストは、読み出し要求だけであるか否かを確認する（ステップＳ４２）。最も古い処理済みのリプライ付きの書き込み要求よりも古いリクエストが読み出し要求だけでは無い場合（ステップＳ４２：Ｎｏ）、または、上述のステップＳ４１において、リクエスト記憶部２１２内に処理済みのリプライ付きの書き込み要求が記憶されていない場合（ステップＳ４１：Ｎｏ）、処理は後述のステップＳ４３に移行する。
【００８２】
ステップＳ４３において、メモリアクセス部２１３は、リクエスト記憶部２１２内に、リプライ無しの書き込み要求、読み出し要求および処理済みでないリプライ付きの書き込み要求（つまり、データの書き込みを行っていないことを示すように設定されたフラグ情報と関連付けられたリプライ付きの書き込み要求）のうちの何れかが記憶されているかどうかを確認する。リクエスト記憶部２１２内に、リプライ無しの書き込み要求、読み出し要求および処理済みでないリプライ付きの書き込み要求のうちの何れかが記憶されていない場合（ステップＳ４３：Ｎｏ）は、処理はステップＳ４１に戻る一方、リクエスト記憶部２１２内に、リプライ無しの書き込み要求、読み出し要求および処理済みでないリプライ付きの書き込み要求のうちの何れかが記憶されている場合（ステップＳ４３：Ｙｅｓ）は、メモリアクセス部２１３は、リクエスト記憶部２１２から、リプライ無しの書き込み要求、読み出し要求および処理済みでないリプライ付きの書き込み要求のうちの何れかを取り出す（ステップＳ４４）。ステップＳ４４におけるリクエストの取り出し方法は任意であるが、最も単純な方法としては、リクエスト記憶部２１２内のリプライ無しの書き込み要求、読み出し要求および処理済みでないリプライ付きの書き込み要求の中で最も古いものを取り出すという方法である。別の方法としては、例えば同じロウページに対する、処理済みでないリプライ付きの書き込み要求またはリプライ無しの書き込み要求または読み出し要求が連続するように取り出すという方法も考えられる。さらに別の方法としては、同じロウページに対する、処理済みでないリプライ付きの書き込み要求またはリプライ無しの書き込み要求または読み出し要求が連続するように取り出すものの、一定時間以上にわたってリクエスト記憶部２１２から取り出されていないリクエストは優先的に取り出すという方法も考えられる。他にも様々な方法を用いて構わない。
【００８３】
メモリアクセス部２１３は、ステップＳ４４で取り出したリクエストの種類を判断し（ステップＳ４５）、ステップＳ４４で取り出したリクエストがリプライ付きの書き込み要求（処理済みでないリプライ付きの書き込み要求）である場合、そのリプライ付きの書き込み要求に基づくデータの書き込みを行い（ステップＳ４６）、そのリプライ付きの書き込み要求を、処理済みのリプライ付きの書き込み要求として、リクエスト記憶部２１２の元の位置に戻す（ステップＳ４７）。すなわち、メモリアクセス部２１３は、そのリプライ付きの書き込み要求を、データの書き込みを行ったことを示すように設定したフラグ情報に関連付けて、リクエスト記憶部２１２の元の位置に戻す。そして、処理はステップＳ４１に戻る。
【００８４】
また、ステップＳ４４で取り出したリクエストがリプライ無しの書き込み要求である場合、メモリアクセス部２１３は、そのリプライ無しの書き込み要求に基づくデータの書き込みを行う（ステップＳ４８）。そして、処理はステップＳ４１に戻る。
【００８５】
さらに、ステップＳ４４で取り出したリクエストが読み出し要求である場合、メモリアクセス部２１３は、その読み出し要求に基づくデータの読み出しを行い（ステップＳ４９）、読み出したデータを含むリプライの送信をリプライ送信部２１４に指示する（ステップＳ５０）。この指示を受けたリプライ送信部２１４は、ステップＳ４４で取り出した読み出し要求に対する応答（リプライ）をプロセッサ１０へ送信する。そして、処理はステップＳ４１に戻る。
【００８６】
一方、上述のステップＳ４２において、最も古い処理済みのリプライ付きの書き込み要求よりも古いリクエストが読み出し要求だけである場合（ステップＳ４２：Ｙｅｓ）、メモリアクセス部２１３は、その最も古い処理済みのリプライ付きの書き込み要求をリクエスト記憶部２１２から取り出し（ステップＳ５１）、取り出した処理済みのリプライ付きの書き込み要求に対するリプライの送信をリプライ送信部２１４に指示する（ステップＳ５２）。この指示を受けたリプライ送信部２１４は、ステップＳ５１で取り出した処理済みのリプライ付きの書き込み要求に対するリプライをプロセッサ１０へ送信する。そして、処理はステップＳ４１に戻る。
【００８７】
なお、上述の第２の実施形態および第３の実施形態の別の変形例としては、例えば書き込み要求中にオーダリング保証の機能（書き込み順序確認要求としての機能）を持たせるか持たせないかを指定する別のフラグ情報を設け、コントローラ２２は、書き込み要求に含まれる該フラグ情報に応じて、通常の書き込み要求に対応する処理を実行するか、オーダリングを保証するための書き込み要求に対応する処理を実行するかを切り替える形態であってもよい。
【００８８】
（第４の実施形態）
次に、第４の実施形態について説明する。上述の各実施形態と共通する部分については適宜に説明を省略する。第４の実施形態の情報処理装置１のハードウェア構成は上述の第１の実施形態と同様であるので、詳細な説明は省略する。本実施形態では、不揮発メモリ２１のうち特定の位置（アドレス）からのデータの読み出しを要求する特定読み出し要求が、書き込み順序確認要求の役割を果たす点で上述の各実施形態と異なる。
【００８９】
コントローラ２２は、上記特定読み出し要求をプロセッサ１０から受け取ると、特定読み出し要求を受け取る前に受け取った書き込み要求に基づくデータの書き込みを行った後に、特定読み出し要求に基づくデータの読み出しを行い、特定読み出し要求に対する応答をプロセッサ１０に送信する。データの読み出しを行い、特定読み出し要求に対する応答をプロセッサ１０に送信する。特定読み出し要求とそうでない読み出し要求の識別は、指定された読み出し位置（アドレス）が特定のものかどうかで判断する。特定のアドレスとして、あらかじめ決めておいた固定のアドレス（例えば０番地やＦＦＦＦＦＦ番地など）を使うことができる。また、コントローラ２２内に特定のアドレスを記憶する特定アドレスレジスタを設け、特定アドレスレジスタには任意のアドレスを設定できる手段を設け、読み出し要求に指定されたアドレスが特定アドレスレジスタの値と同じであれば特定読み出し要求であると判断することもできる。
【００９０】
図２５は、本実施形態のメモリアクセス部２１３の動作例を示すフローチャートである。まず、メモリアクセス部２１３は、リクエスト記憶部２１２内に特定読み出し要求が記憶されているかどうかを確認する（ステップＳ６１）。リクエスト記憶部２１２内に特定読み出し要求が記憶されている場合（ステップＳ６１：Ｙｅｓ）、メモリアクセス部２１３は、最も古い特定読み出し要求よりも古い書き込み要求が記憶されているかどうかを確認する（ステップＳ６２）。最も古い特定読み出し要求よりも古い書き込み要求が記憶されている場合（ステップＳ６２：Ｙｅｓ）、または、上述のステップＳ６１において、リクエスト記憶部２１２内に特定読み出し要求が記憶されていない場合（ステップＳ６１：Ｎｏ）、処理は後述のステップＳ６３に移行する。
【００９１】
ステップＳ６３において、メモリアクセス部２１３は、リクエスト記憶部２１２内に書き込み要求または特定読み出し要求とは異なる読み出し要求が記憶されているかどうかを確認する。リクエスト記憶部２１２内に書き込み要求または特定読み出し要求とは異なる読み出し要求が記憶されていない場合（ステップＳ６３：Ｎｏ）は、処理はステップＳ６１に戻る一方、リクエスト記憶部２１２内に書き込み要求または特定読み出し要求とは異なる読み出し要求が記憶されている場合（ステップＳ６３：Ｙｅｓ）は、メモリアクセス部２１３は、リクエスト記憶部２１２から書き込み要求または特定読み出し要求とは異なる読み出し要求を取り出す（ステップＳ６４）。ステップＳ６４における書き込み要求または読み出し要求の取り出し方法は任意であるが、最も単純な方法としては、リクエスト記憶部２１２内の書き込み要求および読み出し要求の中で最も古いものを取り出すという方法である。別の方法としては、例えば同じロウページに対する書き込み要求または読み出し要求が連続するように取り出すという方法も考えられる。さらに別の方法としては、同じロウページに対する書き込み要求または読み出し要求が連続するように取り出すものの、一定時間以上にわたってリクエスト記憶部２１２から取り出されていないリクエストは優先的に取り出すという方法も考えられる。他にも様々な方法を用いて構わない。
【００９２】
ステップＳ６４で取り出したリクエストが書き込み要求である場合（ステップＳ６５：Ｙｅｓ）、メモリアクセス部２１３は、取り出した書き込み要求に基づくデータの書き込み（不揮発メモリ２１へのデータの書き込み）を行い（ステップＳ６６）、処理はステップＳ６１に戻る。一方、ステップＳ６４で取り出したリクエストが読み出し要求（特定読み出し要求とは異なる読み出し要求）である場合（ステップＳ６５：Ｎｏ）、メモリアクセス部２１３は、取り出した読み出し要求に基づくデータの読み出し（不揮発メモリ２１からのデータの読み出し）を行い（ステップＳ６７）、その読み出したデータを含むリプライの送信をリプライ送信部２１４に指示する（ステップＳ６８）。この指示を受けたリプライ送信部２１４は、ステップＳ６４で取り出した読み出し要求に対するリプライをプロセッサ１０へ送信する。そして、処理はステップＳ６１に戻る。
【００９３】
一方、上述のステップＳ６２において、最も古い特定読み出し要求よりも古い書き込み要求が記憶されていない場合（ステップＳ６２：Ｎｏ）、メモリアクセス部２１３は、その最も古い特定読み出し要求をリクエスト記憶部２１２から取り出し（ステップＳ６９）、取り出した特定読み出し要求に基づくデータの読み出し（不揮発メモリ２１からのデータの読み出し）を行い（ステップＳ７０）、その読み出したデータを含むリプライ（特定読み出し要求に対するリプライ）の送信をリプライ送信部２１４に指示する（ステップＳ７１）。この指示を受けたリプライ送信部２１４は、特定読み出し要求に対するリプライをプロセッサ１０へ送信する。そして、処理はステップＳ６１に戻る。
【００９４】
（第５の実施形態）
次に、第５の実施形態について説明する。上述の各実施形態と共通する部分については適宜に説明を省略する。第５の実施形態の情報処理装置１のハードウェア構成は上述の第１の実施形態と同様であるので、詳細な説明は省略する。本実施形態では、不揮発メモリ２１のうち特定の位置（アドレス）に対するデータの書き込みを要求する特定書き込み要求が、書き込み順序確認要求の役割を果たす点で上述の各実施形態と異なる。より具体的には、特定書き込み要求は、該特定書き込み要求に基づくデータの書き込みを行った後に、該特定書き込み要求に対する応答をプロセッサ１０に送信することを要求するリプライ付きの書き込み要求である。
【００９５】
コントローラ２２は、特定書き込み要求をプロセッサ１０から受け取ると、特定書き込み要求を受け取る前に受け取った書き込み要求に基づくデータの書き込みを行った後に、特定書き込みに基づくデータの読み出しを行い、特定書き込み要求に対する応答（リプライ）をプロセッサ１０に送信する。特定書き込み要求とそうでない書き込み要求の識別は、指定された書き込み位置（アドレス）が特定のものかどうかで判断する。特定のアドレスとして、あらかじめ決めておいた固定のアドレス（例えば０番地やＦＦＦＦＦＦ番地など）を使うことができる。また、コントローラ２２内に特定のアドレスを記憶する特定アドレスレジスタを設け、特定アドレスレジスタには任意のアドレスを設定できる手段を設け、書き込み要求に指定されたアドレスが特定アドレスレジスタの値と同じであれば特定書き込み要求であると判断することもできる。
【００９６】
例えば、１以上の書き込み要求の集合である第２の書き込み集合よりも前にデータの書き込みが行われる第１の書き込み集合に含まれる１以上の書き込み要求のうち、最後にメモリデバイス２０に送り込まれる書き込み要求は上記特定書き込み要求であってもよい。その他の書き込み要求は、リプライ付きの書き込み要求であってもよいし、リプライ無しの書き込み要求であっても構わない。
【００９７】
また、例えば、１以上の書き込み要求の集合である第１の書き込み集合よりも後にデータの書き込みが行われる第２の書き込み集合に含まれる１以上の書き込み要求のうち、最初にメモリデバイス２０に送り込まれる書き込み要求は上記特定書き込み要求であってもよい。この場合、特定書き込み要求に対するリプライが返ってきた後、その他の書き込み要求を発行する。その他の書き込み要求は、リプライ付きの書き込み要求であってもよいし、リプライ無しの書き込み要求であっても構わない。
【００９８】
図２６は、本実施形態のメモリアクセス部２１３の動作例を示すフローチャートである。まず、メモリアクセス部２１３は、リクエスト記憶部２１２内に特定書き込み要求が記憶されているかどうかを確認する（ステップＳ８１）。リクエスト記憶部２１２内に特定書き込み要求が記憶されている場合（ステップＳ８１：Ｙｅｓ）、メモリアクセス部２１３は、最も古い特定書き込み要求よりも古い、特定書き込み要求とは異なる書き込み要求（リプライ付きの書き込み要求であってもよいし、リプライ無しの書き込み要求であってもよい）が記憶されているかどうかを確認する（ステップＳ８２）。最も古い特定書き込み要求よりも古い書き込み要求が記憶されている場合（ステップＳ８２：Ｙｅｓ）、または、上述のステップＳ８１において、リクエスト記憶部２１２内に特定書き込み要求が記憶されていない場合（ステップＳ８１：Ｎｏ）、処理は後述のステップＳ８３に移行する。
【００９９】
ステップＳ８３において、メモリアクセス部２１３は、リクエスト記憶部２１２内に、特定書き込み要求とは異なる書き込み要求または読み出し要求が記憶されているかどうかを確認する。リクエスト記憶部２１２内に、特定書き込み要求とは異なる書き込み要求または読み出し要求が記憶されていない場合（ステップＳ８３：Ｎｏ）は、処理はステップＳ８１に戻る一方、リクエスト記憶部２１２内に、特定の書き込み要求とは異なる書き込み要求または読み出し要求が記憶されている場合（ステップＳ８３：Ｙｅｓ）は、メモリアクセス部２１３は、リクエスト記憶部２１２から、特定書き込み要求とは異なる書き込み要求または読み出し要求を取り出す（ステップＳ８４）。ステップＳ８４におけるリクエストの取り出し方法は任意であるが、最も単純な方法としては、リクエスト記憶部２１２内の、特定書き込み要求とは異なる書き込み要求および読み出し要求の中で最も古いものを取り出すという方法である。別の方法としては、例えば同じロウページに対する、特定書き込み要求とは異なる書き込み要求または読み出し要求が連続するように取り出すという方法も考えられる。さらに別の方法としては、同じロウページに対する、特定書き込み要求とは異なる書き込み要求または読み出し要求が連続するように取り出すものの、一定時間以上にわたってリクエスト記憶部２１２から取り出されていないリクエストは優先的に取り出すという方法も考えられる。他にも様々な方法を用いて構わない。
【０１００】
ステップＳ８４で取り出したリクエストが書き込み要求（特定書き込み要求とは異なる書き込み要求）である場合（ステップＳ８５：Ｙｅｓ）、メモリアクセス部２１３は、取り出した書き込み要求に基づくデータの書き込みを行い（ステップＳ８６）、処理はステップＳ８１に戻る。一方、ステップＳ８４で取り出したリクエストが読み出し要求である場合（ステップＳ８５：Ｎｏ）、メモリアクセス部２１３は、取り出した読み出し要求に基づくデータの読み出しを行い（ステップＳ８７）、読み出したデータを含むリプライ（読み出し要求に対する応答）の送信をリプライ送信部２１４に指示する（ステップＳ８８）。この指示を受けたリプライ送信部２１４は、ステップＳ８４で取り出した読み出し要求に対するリプライをプロセッサ１０へ送信する。そして、処理はステップＳ８１に戻る。
【０１０１】
一方、上述のステップＳ８２において、最も古い特定書き込み要求よりも古い書き込み要求が記憶されていない場合（ステップＳ８２：Ｎｏ）、メモリアクセス部２１３は、その最も古い特定書き込み要求をリクエスト記憶部２１２から取り出し（ステップＳ８９）、取り出した特定書き込み要求に基づくデータの書き込みを行う（ステップＳ９０）。そして、メモリアクセス部２１３は、特定書き込み要求に対する応答（リプライ）の送信をリプライ送信部２１４に指示する（ステップＳ９１）。この指示を受けたリプライ送信部２１４は、特定書き込み要求に対する応答をプロセッサ１０へ送信する。そして、処理はステップＳ８１に戻る。
【０１０２】
（第６の実施形態）
次に、第６の実施形態について説明する。上述の各実施形態と共通する部分については適宜に説明を省略する。第６の実施形態の情報処理装置１のハードウェア構成は上述の第１の実施形態と同様であるので、詳細な説明は省略する。本実施形態では、上述の第５の実施形態と同様に、不揮発メモリ２１のうち特定の位置に対するデータの書き込みを要求する特定書き込み要求が、書き込み順序確認要求の役割を果たす点で上述の各実施形態と異なる。さらに、本実施形態では、特定書き込み要求は書き込み順序確認の時点よりも前の任意の時点で書き込みができるように、特定書き込み要求を、データの書き込みを行ったか否かを示すフラグ情報と関連付けて（対応付けて）リクエスト記憶部２１２で管理する点で上述の第５の実施形態と異なる。
【０１０３】
本実施形態では、不揮発メモリ２１のうち特定の位置に対するデータの書き込みを要求する特定書き込み要求は、特定書き込み要求に基づくデータの書き込みを行った後に、特定書き込み要求に対する応答をプロセッサ１０に送信することを要求する。つまり、特定書き込み要求は、リプライ付きの書き込み要求の一態様であると考えることができる。そして、コントローラ２２は、特定書き込み要求をプロセッサ１０から受け取ると、該特定書き込み要求を受け取る前に受け取った書き込み要求に基づくデータの書き込みと該特定書き込み要求に基づくデータの書き込みを行った後に、該特定書き込み要求に対する応答をプロセッサ１０に送信する。本実施形態では、コントローラ２２は、データの書き込みを行っていないことを示すように設定したフラグ情報と関連付けてリクエスト記憶部２１２に記憶していた特定書き込み要求を取り出して、その取り出した特定書き込み要求に基づくデータの書き込みを行った後、データの書き込みを行ったことを示すように設定したフラグ情報と関連付けて、該特定書き込み要求をリクエスト記憶部２１２の元の位置に戻し、該特定書き込み要求を受け取る前に受け取った書き込み要求に基づくデータの書き込みを行った後に、該特定書き込み要求に対する応答をプロセッサ１０へ送信する。
【０１０４】
例えば、１以上の書き込み要求の集合である第２の書き込み集合よりも前にデータの書き込みが行われる第１の書き込み集合に含まれる１以上の書き込み要求のうち、最後にメモリデバイス２０に送り込まれる書き込み要求は特定書き込み要求であるという形態にすることができる。その特定書き込み要求に対応するリプライを待ってから、第２の書き込み集合に含まれる書き込み要求を発行する。
【０１０５】
図２７は、本実施形態のメモリアクセス部２１３の動作例を示すフローチャートである。まず、メモリアクセス部２１３は、リクエスト記憶部２１２内に処理済みの特定書き込み要求（つまり、データの書き込みを行ったことを示すフラグ情報を含む特定書き込み要求）が記憶されているかどうかを確認する（ステップＳ１０１）。リクエスト記憶部２１２内に処理済みの特定書き込み要求が記憶されている場合（ステップＳ１０１：Ｙｅｓ）、メモリアクセス部２１３は、最も古い処理済みの特定書き込み要求よりも古いリクエストは、読み出し要求だけであるか否かを確認する（ステップＳ１０２）。最も古い処理済みの特定書き込み要求よりも古いリクエストが読み出し要求だけでは無い場合（ステップＳ１０２：Ｎｏ）、または、上述のステップＳ１０１において、リクエスト記憶部２１２内に処理済みの特定書き込み要求が記憶されていない場合（ステップＳ１０１：Ｎｏ）、処理は後述のステップＳ１０３に移行する。
【０１０６】
ステップＳ１０３において、メモリアクセス部２１３は、リクエスト記憶部２１２内に、特定書き込み要求とは異なる書き込み要求（リプライ付きの書き込み要求であってもよいし、リプライ無しの書き込み要求であってもよい）、読み出し要求および処理済みでない特定書き込み要求（つまり、データの書き込みを行っていないことを示すフラグ情報を含む特定書き込み要求）のうちの何れかが記憶されているかどうかを確認する。リクエスト記憶部２１２内に、特定書き込み要求とは異なる書き込み要求、読み出し要求および処理済みでない特定書き込み要求のうちの何れも記憶されていない場合（ステップＳ１０３：Ｎｏ）は、処理はステップＳ１０１に戻る一方、リクエスト記憶部２１２内に、特定書き込み要求とは異なる書き込み要求、読み出し要求および処理済みでない特定書き込み要求のうちの何れかが記憶されている場合（ステップＳ１０３：Ｙｅｓ）は、メモリアクセス部２１３は、リクエスト記憶部２１２から、特定書き込み要求とは異なる書き込み要求、読み出し要求および処理済みでない特定書き込み要求のうちの何れかを取り出す（ステップＳ１０４）。ステップＳ１０４におけるリクエストの取り出し方法は任意であるが、最も単純な方法としては、リクエスト記憶部２１２内の特定書き込み要求とは異なる書き込み要求、読み出し要求および処理済みでない特定書き込み要求の中で最も古いものを取り出すという方法である。別の方法としては、例えば同じロウページに対する、処理済みでない特定書き込み要求または特定書き込み要求とは異なる書き込み要求または読み出し要求が連続するように取り出すという方法も考えられる。さらに別の方法としては、同じロウページに対する、処理済みでない特定書き込み要求または特定書き込み要求とは異なる書き込み要求または読み出し要求が連続するように取り出すものの、一定時間以上にわたってリクエスト記憶部２１２から取り出されていないリクエストは優先的に取り出すという方法である。他にも様々な方法を用いて構わない。
【０１０７】
メモリアクセス部２１３は、ステップＳ１０４で取り出したリクエストの種類を判断し（ステップＳ１０５）、ステップＳ１０４で取り出したリクエストが特定書き込み要求（処理済みでない特定書き込み要求）である場合、その特定書き込み要求に基づくデータの書き込みを行い（ステップＳ１０６）、その特定書き込み要求を、処理済みの特定書き込み要求として、リクエスト記憶部２１２の元の位置に戻す（ステップＳ１０７）。すなわち、メモリアクセス部２１３は、その特定書き込み要求に含まれるフラグ情報を、データの書き込みを行ったことを示すように設定した後、その特定書き込み要求を、リクエスト記憶部２１２の元の位置に戻す。そして、処理はステップＳ１０１に戻る。
【０１０８】
また、ステップＳ１０４で取り出したリクエストが、特定書き込み要求とは異なる書き込み要求である場合、メモリアクセス部２１３は、その書き込み要求に基づくデータの書き込みを行う（ステップＳ１０８）。そして、処理はステップＳ１０１に戻る。
【０１０９】
さらに、ステップＳ１０４で取り出したリクエストが読み出し要求である場合、メモリアクセス部２１３は、その読み出し要求に基づくデータの読み出しを行い（ステップＳ１０９）、読み出したデータを含むリプライの送信をリプライ送信部２１４に指示する（ステップＳ１１０）。この指示を受けたリプライ送信部２１４は、ステップＳ１０４で取り出した読み出し要求に対するリプライをプロセッサ１０へ送信する。そして、処理はステップＳ１０１に戻る。
【０１１０】
一方、上述のステップＳ１０２において、最も古い処理済みの特定書き込み要求よりも古いリクエストが読み出し要求だけである場合（ステップＳ１０２：Ｙｅｓ）、メモリアクセス部２１３は、その最も古い処理済みの特定書き込み要求をリクエスト記憶部２１２から取り出し（ステップＳ１１１）、取り出した処理済みの特定書き込み要求に対する応答（リプライ）の送信をリプライ送信部２１４に指示する（ステップＳ１１２）。この指示を受けたリプライ送信部２１４は、ステップＳ１１１で取り出した処理済みの特定書き込み要求に対する応答をプロセッサ１０へ送信する。そして、処理はステップＳ１０１に戻る。
【０１１１】
（第７の実施形態）
次に、第７の実施形態について説明する。上述の各実施形態と共通する部分については適宜に説明を省略する。本実施形態では、不揮発メモリ２１は複数の領域（以下では、「ブロック」と称する場合がある）から構成され、ブロック毎に、該ブロックに対応する書き込み集合間の書き込み順序（オーダリング）を保証するための構成を採用する点で上述の各実施形態と異なる。
【０１１２】
例えば複数の不揮発メモリ２１を内蔵するメモリデバイス２０においては、各不揮発メモリ２１をブロックとすることができる。また、例えば複数のバンクを持つ不揮発メモリ２１を内蔵するメモリデバイス２０においては、バンクをブロックとすることができる。さらに、メモリデバイス２０内の全ての不揮発メモリ２１を予め決まっているサイズに分割して、それらをブロックとすることもできる。さらに別の方法としては、コントローラ２２が、ブロックを管理するためのブロック管理情報（例えばテーブル形式の情報）を有し、不揮発メモリ２１を任意のサイズのブロックに分割し、各ブロックの開始アドレスと終了アドレスをブロック管理情報内に記録し、このブロック管理情報を参照して、プロセッサ１０から受け取ったリクエストがどのブロックに属するのか（どのブロックに対応するのか）判断するように実施しても構わない。
【０１１３】
図２８は、４Ｇ（ギガ）バイトの不揮発メモリ２１を４つのブロックに分割した例を示す。また、図２９は、４Ｇバイトの不揮発メモリ２１を８つのブロックに分割した例を示す。
【０１１４】
図３０は、本実施形態における書き込み順序確認要求（オーダリングリクエスト）の一例を示す図である。図７に示した書き込み順序確認要求と比べると、図３０の書き込み順序確認要求はアドレス情報を有している点が異なる。図３０の例では、書き込み順序確認要求は、コマンド情報として、書き込み順序確認要求であることを識別する情報（図３０の例では「ＯＲＤＥＲＩＮＧ  ｒｅｑｕｅｓｔ」）が指定される。また、図３０の例では、タグ情報として「２」を示す番号が指定され、アドレス情報として「５６２８４０」が指定されている。図３０の書き込み順序確認要求は、不揮発メモリ２１のうち「５６２８４０」が属するブロックにおける書き込み順序を保証するために、該ブロックに対応する、送信済みの１以上の書き込みに基づくデータの書き込みが行われたことの確認を要求する情報であると考えることもできる。また、図３１は、図３０の書き込み順序確認要求に対する応答（リプライ）の一例を示す図である。図３１のリプライの形式は、図８に示したリプライの形式と同様である。
【０１１５】
例えば図１０のように、本実施形態のメモリデバイス２０が、１つのリクエスト記憶部２１２と、１つのメモリアクセス部２１３とを有する構成である場合、メモリアクセス部２１３は、図２８および図２９のような、アドレス情報とブロックとの対応を示す情報（ブロック管理情報）を有し、リクエスト記憶部２１２に記憶されたリクエストに含まれるアドレス情報を参照して、該リクエストがどのブロックに向けたものかを判断する（該リクエストに対応するブロックを判断する）。つまり、メモリアクセス部２１３は、リクエスト記憶部２１２に記憶された複数のリクエストを、該リクエストに含まれるアドレス情報に基づいて、ブロック別に分類し、複数のブロックごとに、該ブロックに属する全てのリクエストを対象として、図１２に示したような手順（この例では上述の第１の実施形態と同様の手順）でリクエストを処理する。このとき、特定のブロックの処理を優先しても構わないし、全ブロックに対して公平に処理を行うようにしてもよい。
【０１１６】
また、例えば図３２に示すように、ブロック毎に専用のリクエスト記憶部２１２を設けても構わない。図３２は、図２８のように４つのブロックから構成される不揮発メモリ２１を有するメモリデバイス２０が、４つのブロックと１対１に対応する４つのリクエスト記憶部２１２を有する構成である。
【０１１７】
図３３は、図３２の構成のリクエスト受信部２１１の動作例を示すフローチャートである。リクエスト受信部２１１は、プロセッサ１０からリクエストを受信すると（ステップＳ１２１）、その受信したリクエストに含まれるアドレス情報に基づいて、その受信したリクエストに対応するブロックを特定する（ステップＳ１２２）。そして、リクエスト受信部２１１は、特定したブロックに対応するリクエスト記憶部２１２に、受信したリクエストを受信した順序で記録する（ステップＳ１２３）。プロセッサ１０から受信したリクエストは、該リクエストに対応するブロックに入るので、図３２の構成のメモリアクセス部２１３は、アドレス情報とブロックとの対応を示す情報を持つ必要は無く、複数のリクエスト記憶部２１２ごとに（見方を変えれば複数のブロックごとに）、図１２に示したような手順（この例では上述の第１の実施形態と同様の手順）でリクエストを処理することができる。
【０１１８】
また、例えば図３４に示すように、メモリデバイス２０が複数の不揮発メモリ２１を有し、各不揮発メモリ２１がブロックに対応する場合には、複数の不揮発メモリ２１（複数のブロック）ごとに、専用のリクエスト記憶部２１２とメモリアクセス部２１３が設けられてもよい。図３４は、４つの不揮発メモリ２１と１対１に対応する４つのブロックごとに、４つのリクエスト記憶部２１２と４つのメモリアクセス部２１３が設けられる構成である。この場合、リクエスト受信部２１１は図３３の手順で、プロセッサ１０から受信したリクエストを、該リクエストに対応するブロック用のリクエスト記憶部２１２に入れるので、メモリアクセス部２１３は、担当するブロック用のリクエスト記憶部２１２内のリクエストに対して、図１２に示したような手順（この例では上述の第１の実施形態と同様の手順）でリクエストを処理することができる。
【０１１９】
図３５は図３４の構成の変形例で、メモリデバイス２０に搭載された４つの不揮発メモリ２１が、図２９のように８つのブロックを有し、１つの不揮発メモリ２１に対して２つのブロックが対応する場合を示している。図３５の例では、４つの不揮発メモリ２１と１対１に対応する４つのメモリアクセス部２１３の各々に対して、複数（この例では２つ）のリクエスト記憶部２１２が割り当てられ、各メモリアクセス部２１３は、該メモリアクセス部２１３に割り当てられた２つのリクエスト記憶部２１２の各々に記憶された全てのリクエストを対象として、図１２に示したような手順（この例では上述の第１の実施形態と同様の手順）でリクエストを処理することができる。
【０１２０】
要するに、本実施形態のコントローラ２２は、プロセッサ１０から、複数のブロックのうちの何れかを示す対象ブロック（対象領域）に対応する送信済みの１以上の書き込み要求に基づくデータの書き込みが行われたことの確認を要求する書き込み順序確認要求（対象ブロックに対応するオーダリングリクエスト）を受け取ると、書き込み順序確認要求を受け取る前に受け取った、対象ブロックに対応する１以上の書き込み要求に基づくデータの書き込みを行った後に、書き込み順序確認要求に対する応答をプロセッサ１０へ送信する形態であればよい。具体的な動作内容は、上述の第１の実施形態と同様に考えることができる。また、複数のブロックの各々は、不揮発メモリ２１のアドレス空間を、予め定められているサイズで区切ることで得られる領域であってもよいし、不揮発メモリ２１のアドレス空間を任意に分割することで得られる領域であってもよい。コントローラ２２は、複数のブロックの各々に対応するアドレスの範囲を設定する。
【０１２１】
また、本実施形態のメモリアクセス部２１３は、図１２に示したような手順だけではなく、例えば図２３に示したような手順（上述の第２の実施形態と同様の手順）でリクエストを処理することもできる。要するに、書き込み要求には、リプライ付きの書き込み要求と、リプライ無しの書き込み要求とがあり、コントローラ２２は、複数のブロックのうちの何れかを示す対象ブロックに対応するリプライ付きの書き込み要求を示す第１の書き込み要求をプロセッサ１０から受け取ると、第１の書き込み要求を受け取る前に受け取った、対象ブロックに対応する１以上のリプライ無しの書き込み要求に基づくデータの書き込みを行った後に、第１の書き込み要求に基づくデータの書き込みを行い、第１の書き込み要求に対するリプライをプロセッサ１０へ送信する形態であってもよい。具体的な動作内容は、上述の第２の実施形態と同様に考えることができる。
【０１２２】
例えば、対象ブロックに対応する１以上の書き込み要求の集合である第２の書き込み集合よりも前にデータの書き込みが行われ、かつ、対象ブロックに対応する１以上の書き込み要求の集合である第１の書き込み集合に含まれる１以上の書き込み要求のうち、最後にメモリデバイス２０に送り込まれる書き込み要求は上記第１の書き込み要求であり、それ以外の書き込み要求はリプライ無しの書き込み要求であってもよい。また、例えば対象ブロックに対応する１以上の書き込み要求の集合である第１の書き込み集合に含まれる１以上の書き込み要求はリプライ無しの書き込み要求であり、第１の書き込み集合よりも後にデータの書き込みが行われ、かつ、対象ブロックに対応する１以上の書き込み要求の集合である第２の書き込み集合に含まれる１以上の書き込み要求のうち、最初にメモリデバイス２０に送り込まれる書き込み要求は上記第１の書き込み要求であり、それ以外の書き込み要求はリプライ無しの書き込み要求であってもよい。
【０１２３】
また、本実施形態のメモリアクセス部２１３は、例えば図２４に示したような手順（上述の第３の実施形態と同様の手順）でリクエストを処理することもできる。要するに、上述の第３の実施形態と同様に、書き込み要求には、書き込み要求に基づくデータの書き込みを行った後に、書き込み要求に対する応答をプロセッサ１０に送信することを要求するリプライ付きの書き込み要求と、リプライ無しの書き込み要求とがある。そして、上述の第３の実施形態と同様に、コントローラ２２は、リプライ付きの書き込み要求をプロセッサ１０から受け取ると、該リプライ付きの書き込み要求を受け取る前に受け取ったリプライ無しの書き込み要求に基づくデータの書き込みと該リプライ付きの書き込み要求に基づくデータの書き込みを行った後、該リプライ付きの書き込み要求に対する応答をプロセッサ１０へ送信する。例えばコントローラ２２は、複数のブロックのうちの何れかを示す対象ブロックに対応し、かつ、データの書き込みを行っていないことを示すように設定したフラグ情報と関連付けてリクエスト記憶部２１２に記憶していたリプライ付きの書き込み要求を示す第２の書き込み要求を取り出して、その取り出した第２の書き込み要求に基づくデータの書き込みを行った後、データの書き込みを行ったことを示すように設定したフラグ情報と関連付けて、第２の書き込み要求をリクエスト記憶部２１２の元の位置に戻し、第２の書き込み要求を受け取る前に受け取った、対象領域に対応する書き込み要求に基づくデータの書き込みを行った後に、第２の書き込み要求に対する応答をプロセッサ１０に送信する形態であってもよい。具体的な動作内容は、上述の第３の実施形態と同様に考えることができる。
【０１２４】
例えば対象領域に対応する１以上の書き込み要求の集合である第２の書き込み集合よりも前にデータの書き込みが行われ、かつ、対象領域に対応する１以上の書き込み要求の集合である第１の書き込み集合に含まれる１以上の書き込み要求のうち、最後にメモリデバイス２０に送り込まれる書き込み要求は上記第２の書き込み要求であり、それ以外の書き込み要求はリプライ無しの書き込み要求であってもよい。
【０１２５】
また、本実施形態のメモリアクセス部２１３は、例えば図２５に示したような手順（上述の第４の実施形態と同様の手順）でリクエストを処理することもできる。要するに、コントローラ２２は、複数のブロックのうちの何れかを示す対象ブロックの特定の位置（アドレス）からのデータの読み出しを要求する特定読み出し要求をプロセッサ１０から受け取ると、特定読み出し要求を受け取る前に受け取った、対象ブロックに対応する書き込み要求に基づくデータの書き込みを行った後に、特定読み出し要求に基づくデータの読み出しを行い、特定読み出し要求に対する応答をプロセッサ１０に送信する形態であってもよい。具体的な動作内容は、上述の第４の実施形態と同様に考えることができる。
【０１２６】
また、本実施形態のメモリアクセス部２１３は、例えば図２６に示したような手順（上述の第５の実施形態と同様の手順）でリクエストを処理することもできる。要するに、コントローラは、複数のブロックのうちの何れかを示す対象ブロックの特定の位置に対するデータの書き込みを要求する特定書き込み要求をプロセッサ１０から受け取ると、特定書き込み要求を受け取る前に受け取った、対象ブロックに対応する１以上の書き込み要求に基づくデータの書き込みを行った後に、特定書き込み要求に基づくデータの書き込みを行い、特定書き込み要求に対する応答をプロセッサ１０に送信する形態であってもよい。具体的な動作内容は、上述の第５の実施形態と同様に考えることができる。
【０１２７】
例えば、対象領域に対応する１以上の書き込み要求の集合である第２の書き込み集合よりも前にデータの書き込みが行われ、かつ、対象領域に対応する１以上の書き込み要求の集合である第１の書き込み集合に含まれる１以上の書き込み要求のうち、最後にメモリデバイス２０に送り込まれる書き込み要求は上記特定書き込み要求であってもよい。
【０１２８】
また、例えば対象領域に対応する１以上の書き込み要求の集合である第１の書き込み集合よりも後にデータの書き込みが行われ、かつ、対象領域に対応する１以上の書き込み要求の集合である第２の書き込み集合に含まれる１以上の書き込み要求のうち、最初にメモリデバイス２０に送り込まれる書き込み要求は上記特定書き込み要求であってもよい。そのリプライを待ってから残りの書き込み要求をメモリデバイス２０に送り込む。
【０１２９】
さらに、本実施形態のメモリアクセス部２１３は、例えば図２７に示したような手順（上述の第６の実施形態と同様の手順）でリクエストを処理することもできる。要するに、複数のブロックのうちの何れかを示す対象ブロックの特定の位置に対するデータの書き込みを要求する特定書き込み要求は、特定書き込み要求に基づくデータの書き込みを行った後に、特定書き込み要求に対する応答をプロセッサ１０に送信することを要求する。そして、上述の第６の実施形態と同様に、コントローラ２２は、特定書き込み要求をプロセッサ１０から受け取ると、該特定書き込み要求を受け取る前に受け取った書き込み要求に基づくデータの書き込みと該特定書き込み要求に基づくデータの書き込みを行った後に、該特定書き込み要求に対する応答をプロセッサ１０に送信する。例えばコントローラ２２は、データの書き込みを行っていないことを示すように設定したフラグ情報と関連付けてリクエスト記憶部２１２に記憶していた特定書き込み要求を取り出して、その取り出した特定書き込み要求に基づくデータの書き込みを行った後、データの書き込みを行ったことを示すように設定したフラグ情報と関連付けて、該特定書き込み要求をリクエスト記憶部２１２の元の位置に戻し、該特定書き込み要求を受け取る前に受け取った、対象ブロックに対応する１以上の書き込み要求に基づくデータの書き込みを行った後に、該特定書き込み要求に対する応答をプロセッサ１０に送信する形態であってもよい。具体的な動作内容は、上述の第６の実施形態と同様に考えることができる。
【０１３０】
例えば対象ブロックに対応する１以上の書き込み要求の集合である第２の書き込み集合よりも前にデータの書き込みが行われ、かつ、対象ブロックに対応する１以上の書き込み要求の集合である第１の書き込み集合に含まれる１以上の書き込み要求のうち、最後にメモリデバイス２０に送り込まれる書き込み要求は、上記特定書き込み要求であってもよい。
【０１３１】
（第８の実施形態）
次に、第８の実施形態について説明する。上述の各実施形態と共通する部分については適宜に説明を省略する。本実施形態では、書き込み要求は、該書き込み要求に対応する処理を含む１以上の処理の集合を示すグループを識別するグループ識別情報（以下では、「グループＩＤ」と称する場合がある）を含み、グループごとに、該グループに対応する書き込み集合間の書き込み順序（オーダリング）を保証するための構成を採用する点で上述の各実施形態と異なる。本実施形態では、上述の第７の実施形態と異なり、同じグループに対応するデータの書き込み先は、不揮発メモリ２１の何れの領域であっても構わない（同一ブロックである必要は無い）ので、上述の第７の実施形態に比べて柔軟に不揮発メモリ２１を管理することができる。
【０１３２】
図３６は、本実施形態におけるリクエストの形式の一例を示す図である。図３６の例では、対象となるグループを識別するグループＩＤをさらに含んでいる。図３７は、本実施形態における書き込み順序確認要求（オーダリングリクエスト）の一例を示す図である。図３７の書き込み順序確認要求は、コマンド情報として、書き込み順序確認要求を識別する情報（図３７の例では「ＯＲＤＥＲＩＮＧ  ｒｅｑｕｅｔ」）が指定される。また、図３０の例では、タグ情報として、「７」を示す番号が指定され、グループＩＤとして、「５」を示す番号が指定されている。図３７の書き込み順序確認要求は、「５」を示す番号で識別されるグループに対応する、送信済みの１以上の書き込みに基づくデータの書き込みが行われたことの確認を要求する情報であると考えることもできる。本実施形態においては、リードリクエストやライトリクエストもグループＩＤを含む。
【０１３３】
例えば図１０のように、本実施形態のメモリデバイス２０が、１つのリクエスト記憶部２１２と、１つのメモリアクセス部２１３とを有する構成である場合、メモリアクセス部２１３は、リクエスト記憶部２１２に記憶されたリクエストに含まれるグループＩＤを参照して、該リクエストがどのグループに属するのかを判断する（該リクエストに対応するグループを判断する）。つまり、メモリアクセス部２１３は、リクエスト記憶部２１２に記憶された複数のリクエストを、該リクエストに含まれるグループＩＤに基づいて、グループ別に分類し、複数のグループごとに、該グループに対応する全てのリクエストを対象として、図１２に示したような手順（この例では上述の第１の実施形態と同様の手順）でリクエストを処理する。このとき、特定のグループの処理を優先しても構わないし、全グループに対して公平に処理を行うようにしてもよい。
【０１３４】
また、例えば図３８に示すように、リクエスト記憶部２１２は、複数のグループと１対１に対応する複数（図３８の例では８つ）のグループ用の記憶領域を有する形態であってもよい。
【０１３５】
図３９は、図３８の構成のリクエスト受信部２１１の動作例を示すフローチャートである。リクエスト受信部２１１は、プロセッサ１０からリクエストを受信すると（ステップＳ１３１）、その受信したリクエストに含まれるグループＩＤで識別されるグループを特定する（ステップＳ１３２）。そして、リクエスト受信部２１１は、特定したグループに対応するグループ用の記憶領域に、受信したリクエストを受信した順序で記録する（ステップＳ１３３）。
【０１３６】
図３８の構成のメモリアクセス部２１３は、複数のグループ用の記憶領域ごとに（見方を変えれば複数のグループごとに）、図１２に示したような手順（この例では上述の第１の実施形態と同様の手順）でリクエストを処理することができる。
【０１３７】
要するに、本実施形態では、書き込み要求は、書き込み要求に対応する処理を含む１以上の処理の集合を示すグループを識別するグループ識別情報（グループＩＤ）を含み、コントローラ２２は、プロセッサ１０から、何れかのグループ識別情報を示す対象グループ識別情報を含む送信済みの１以上の書き込み要求に基づくデータの書き込みが行われたことの確認を要求する書き込み順序確認要求を受け取ると、書き込み順序確認要求を受け取る前に受け取った、対象グループ識別情報を含む１以上の書き込み要求に基づくデータの書き込みを行った後に、書き込み順序確認要求に対する応答をプロセッサ１０へ送信する形態であればよい。具体的な動作内容は、上述の第１の実施形態と同様に考えることができる。
【０１３８】
また、本実施形態のメモリアクセス部２１３は、図１２に示したような手順だけではなく、例えば図２３に示したような手順（上述の第２の実施形態と同様の手順）でリクエストを処理することもできる。要するに、書き込み要求は、該書き込み要求に対応する処理を含む１以上の処理の集合を示すグループを識別するグループ識別情報を含むとともに、上述の第２の実施形態と同様に、書き込み要求には、リプライ付きの書き込み要求とリプライ無しの書き込み要求とがある。そして、コントローラ２２は、何れかのグループ識別情報を示す対象グループ識別情報を含むリプライ付きの書き込み要求を示す第３の書き込み要求をプロセッサ１０から受け取ると、第３の書き込み要求を受け取る前に受け取った、対象グループ識別情報を含むリプライ無しの書き込み要求に基づくデータの書き込みを行った後に、第３の書き込み要求に基づくデータの書き込みを行い、第３の書き込み要求に対する応答をプロセッサ１０へ送信する形態であってもよい。具体的な動作内容は、上述の第２の実施形態と同様に考えることができる。
【０１３９】
例えば対象グループ識別情報を含む１以上の書き込み要求の集合である第２の書き込み集合よりも前にデータの書き込みが行われ、かつ、対象グループ識別情報を含む１以上の書き込み要求の集合である第１の書き込み集合に含まれる１以上の書き込み要求のうち、最後にメモリデバイス２０に送り込まれる書き込み要求は、上記第３の書き込み要求であってもよい。
【０１４０】
また、例えば対象グループ識別情報を含む１以上の書き込み要求の集合である第１の書き込み集合に含まれる１以上の書き込み要求はリプライ無しの書き込み要求であり、第１の書き込み集合よりも後にデータの書き込みが行われ、かつ、対象グループ識別情報を含む１以上の書き込み要求の集合である第２の書き込み集合に含まれる１以上の書き込み要求のうち、最初にメモリデバイス２０に送り込まれる書き込み要求は、上記第３の書き込み要求であってもよい。その第３の書き込み要求に対応するリプライを待った後、第２の書き込み集合の残りの書き込み要求をメモリデバイス２０に送り込む。
【０１４１】
また、本実施形態のメモリアクセス部２１３は、例えば図２４に示したような手順（上述の第３の実施形態と同様の手順）でリクエストを処理することもできる。要するに、書き込み要求は、該書き込み要求に対応する処理を含む１以上の処理の集合を示すグループを識別するグループ識別情報を含むとともに、上述の第３の実施形態と同様に、書き込み要求には、リプライ付きの書き込み要求と、リプライ無しの書き込み要求とがある。そして、上述の第３の実施形態と同様に、コントローラ２２は、リプライ付きの書き込み要求をプロセッサ１０から受け取ると、該リプライ付きの書き込み要求を受け取る前に受け取ったリプライ無しの書き込み要求に基づくデータの書き込みと該リプライ付きの書き込み要求に基づくデータの書き込みを行った後、該リプライ付きの書き込み要求に対する応答をプロセッサ１０へ送信する。例えばコントローラ２２は、何れかのグループ識別情報を示す対象グループ識別情報を含み、かつ、データの書き込みを行っていないことを示すように設定したフラグ情報と関連付けてリクエスト記憶部２１２に記憶していたリプライ付きの書き込み要求を示す第４の書き込み要求を取り出して、その取り出した第４の書き込み要求に基づくデータの書き込みを行った後、データの書き込みを行ったことを示すように設定したフラグ情報と関連付けて、第４の書き込み要求をリクエスト記憶部２１２の元の位置に戻し、第４の書き込み要求を受け取る前に受け取った対象グループ識別情報を含む書き込み要求に基づくデータの書き込みを行った後に、第４の書き込み要求に対する応答をホスト装置に送信する形態であってもよい。具体的な動作内容は、上述の第３の実施形態と同様に考えることができる。
【０１４２】
例えば対象グループ識別情報を含む１以上の書き込み要求の集合である第２の書き込み集合よりも前にデータの書き込みが行われ、かつ、対象グループ識別情報を含む第１の書き込み集合に含まれる１以上の書き込み要求のうち、最後にメモリデバイス２０に送り込まれる書き込み要求は上記第４の書き込み要求であり、それ以外の書き込み要求はリプライ無しの書き込み要求であってもよい。
【０１４３】
また、本実施形態のメモリアクセス部２１３は、例えば図２５に示したような手順（上述の第４の実施形態と同様の手順）でリクエストを処理することもできる。要するに、コントローラ２２は、何れかのグループ識別情報を示す対象グループ識別情報を含み、不揮発メモリ２１のうち特定の位置（アドレス）からのデータの読み出しを要求する特定読み出し要求をプロセッサ１０から受け取ると、特定読み出し要求を受け取る前に受け取った、対象グループ識別情報を含む書き込み要求に基づくデータの書き込みを行った後に、特定読み出し要求に基づくデータの読み出しを行い、特定読み出し要求に対する応答をプロセッサ１０に送信する形態であってもよい。具体的な動作内容は、上述の第４の実施形態と同様に考えることができる。
【０１４４】
また、本実施形態のメモリアクセス部２１３は、例えば図２６に示したような手順（上述の第５の実施形態と同様の手順）でリクエストを処理することもできる。要するに、書き込み要求は、該書き込み要求に対応する処理を含む１以上の処理の集合を示すグループを識別するグループ識別情報を含み、コントローラ２２は、何れかのグループ識別情報を示す対象グループ識別情報を含み、かつ、不揮発メモリ２１のうち特定の位置に対するデータの書き込みを要求する特定書き込み要求をプロセッサ１０から受け取ると、特定書き込み要求を受け取る前に受け取った、対象グループ識別情報を含む書き込み要求に基づくデータの書き込みを行った後に、特定書き込み要求に基づくデータの書き込みを行い、特定書き込み要求に対する応答をプロセッサ１０に送信する形態であってもよい。具体的な動作内容は、上述の第５の実施形態と同様に考えることができる。
【０１４５】
例えば、対象グループ識別情報を含む１以上の書き込み要求の集合である第２の書き込み集合よりも前にデータの書き込みが行われ、かつ、対象グループ識別情報を含む１以上の書き込み要求の集合である第１の書き込み集合に含まれる１以上の書き込み要求のうち、最後にメモリデバイス２０に送り込まれる書き込み要求は上記特定書き込み要求であってもよい。
【０１４６】
また、例えば、対象グループ識別情報を含む１以上の書き込み要求の集合である第１の書き込み集合よりも後にデータの書き込みが行われ、かつ、対象グループ識別情報を含む１以上の書き込み要求の集合である第２の書き込み集合に含まれる１以上の書き込み要求のうち、最初にメモリデバイス２０に送り込まれる書き込み要求は上記特定書き込み要求であってもよい。
【０１４７】
さらに、本実施形態のメモリアクセス部２１３は、例えば図２７に示したような手順（上述の第６の実施形態と同様の手順）でリクエストを処理することもできる。要するに、何れかのグループ識別情報を示す対象グループ識別情報を含み、かつ、不揮発メモリ２１のうち特定の位置に対するデータの書き込みを要求する特定書き込み要求は、該特定書き込み要求に基づくデータの書き込みを行った後に、該特定書き込み要求に対する応答をプロセッサ１０に送信することを要求する。そして、上述の第６の実施形態と同様に、コントローラ２２は、特定書き込み要求をプロセッサ１０から受け取ると、該特定書き込み要求を受け取る前に受け取った書き込み要求に基づくデータの書き込みと該特定書き込み要求に基づくデータの書き込みを行った後に、該特定書き込み要求に対する応答をプロセッサ１０に送信する。例えばコントローラ２２は、データの書き込みを行っていないことを示すように設定したフラグ情報と関連付けてリクエスト記憶部２１２に記憶していた特定書き込み要求を取り出して、その取り出した特定書き込み要求に基づくデータの書き込みを行った後、データの書き込みを行ったことを示すように設定したフラグ情報と関連付けて、該特定書き込み要求をリクエスト記憶部２１２の元の位置に戻し、該特定書き込み要求を受け取る前に受け取った、対象グループ識別情報を含む書き込み要求に基づくデータの書き込みを行った後に、該特定書き込み要求に対する応答をプロセッサ１０に送信する形態であってもよい。具体的な動作内容は上述の第６の実施形態と同様に考えることができる。
【０１４８】
例えば対象グループ識別情報を含む１以上の書き込み要求の集合である第２の書き込み集合よりも前にデータの書き込みが行われ、かつ、対象グループ識別情報を含む１以上の書き込み要求の集合である第１の書き込み集合に含まれる１以上の書き込み要求のうち、最後にメモリデバイス２０に送り込まれる書き込み要求は上記特定書き込み要求であってもよい。
【０１４９】
以上、本発明の実施形態を説明したが、上述の各実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【０１５０】
なお、上述した各実施形態および各変形例は任意に組み合わせることができる。
【符号の説明】
【０１５１】
１      情報処理装置
１０    プロセッサ
１１    プロセッサコア
１２    キャッシュメモリ
１３    メモリコントローラ
２０    メモリデバイス
２１    不揮発メモリ
２２    コントローラ
２１１  リクエスト受信部
２１２  リクエスト記憶部
２１３  メモリアクセス部
２１４  リプライ送信部
【図１】
0006356624.tif 000002
【図２】
0006356624.tif 000003
【図３】
0006356624.tif 000004
【図４】
0006356624.tif 000005
【図５】
0006356624.tif 000006
【図６】
0006356624.tif 000007
【図７】
0006356624.tif 000008
【図８】
0006356624.tif 000009
【図９】
0006356624.tif 000010
【図１０】
0006356624.tif 000011
【図１１】
0006356624.tif 000012
【図１２】
0006356624.tif 000013
【図１３】
0006356624.tif 000014
【図１４】
0006356624.tif 000015
【図１５】
0006356624.tif 000016
【図１６】
0006356624.tif 000017
【図１７】
0006356624.tif 000018
【図１８】
0006356624.tif 000019
【図１９】
0006356624.tif 000020
【図２０】
0006356624.tif 000021
【図２１】
0006356624.tif 000022
【図２２】
0006356624.tif 000023
【図２３】
0006356624.tif 000024
【図２４】
0006356624.tif 000025
【図２５】
0006356624.tif 000026
【図２６】
0006356624.tif 000027
【図２７】
0006356624.tif 000028
【図２８】
0006356624.tif 000029
【図２９】
0006356624.tif 000030
【図３０】
0006356624.tif 000031
【図３１】
0006356624.tif 000032
【図３２】
0006356624.tif 000033
【図３３】
0006356624.tif 000034
【図３４】
0006356624.tif 000035
【図３５】
0006356624.tif 000036
【図３６】
0006356624.tif 000037
【図３７】
0006356624.tif 000038
【図３８】
0006356624.tif 000039
【図３９】
0006356624.tif 000040