以下、添付図面を参照しながら、本発明に係る半導体記憶装置の実施形態を詳細に説明する。
(第1の実施形態)
図1は、本実施形態の情報処理装置1の概略構成の一例を示す図である。例えば情報処理装置1は、PC(Personal Computer)、携帯型情報端末(可搬型のタブレットも含む)、携帯電話端末などで構成され得る。図1に示すように、本実施形態の情報処理装置1は、プロセッサ10と、複数の(図1の例ではn(n≧2)個の)半導体記憶装置20a〜20nとを備える。複数の半導体記憶装置20a〜20nの各々は、メモリバス30を介してプロセッサ10と接続される。
プロセッサ10は、情報処理装置1の動作を統括的に制御する装置であり、複数の半導体記憶装置20a〜20nの各々に対するデータの書き込みまたはデータの読み出しなどを行う。
本実施形態では、n個の半導体記憶装置20a〜20nのうちの少なくとも1つは、2種類の半導体メモリが混載されており、「半導体記憶装置(混載型の半導体記憶装置)20X」と称する場合がある。この半導体記憶装置20Xの具体的な構成については後述する。また、n個の半導体記憶装置20a〜20nのうち、1種類の半導体メモリが搭載された半導体記憶装置20は、「半導体記憶装置(非混載型の半導体記憶装置)20Y」と称して、混載型の半導体記憶装置20Xと区別する。また、これらを互いに区別しない場合は、単に「半導体記憶装置20」と称する場合がある。
図2は、半導体記憶装置(混載型の半導体記憶装置)20Xのハードウェア構成の一例を示す図である。図2に示すように、半導体記憶装置20Xは、第1のメモリ210と、第2のメモリ220と、スイッチ230と、制御部240とを備える。これらのハードウェア要素は、半導体素子や半導体回路で構成される。
第1のメモリ210は、ホスト装置であるプロセッサ10が、ランダムアクセス可能なメモリ、すなわち、任意のアドレスへのランダムなデータの読み書きが可能なメモリである。例えばDRAMやSRAMなどが該当するが、これらに限られない。
第2のメモリ220は、第1のメモリ210よりも記憶容量が大きいメモリである。第2のメモリ220は、一定期間の間データを保持できる不揮発メモリであっても、一定期間よりも短期間でデータを失う揮発メモリであっても良い。例えば電力の供給が停止されても一定期間の間データを保持できるNAND FlashメモリやNOR Flashメモリ、ReRAM、PCM(相変化メモリ)などの不揮発メモリで構成されてもよい。ただし、第2のメモリ220は、必ずしも不揮発メモリである必要はなく、電力の供給が停止されると上記一定期間よりも短期間でデータを失う揮発メモリであってもよい。
スイッチ230は、第1のメモリ210と、第1のメモリ210に対するデータの読み書きを行うプロセッサ10(ホスト装置の一例)とが接続され、かつ、第2のメモリ220とプロセッサ10とが接続されない第1の状態と、第1のメモリ210と第2のメモリ220とが接続され、かつ、プロセッサ10が第1のメモリ210と接続されず、かつ、プロセッサ10が第2のメモリ220と接続されない第2の状態とを切り替えるためのハードウェア要素である。なお、メモリとプロセッサ10が接続されるとは、プロセッサ10がメモリへアクセス可能な状態になること、通信可能な状態になることを指す。同様に、メモリとプロセッサ10が接続されない状態とは、プロセッサ10がメモリへアクセスできない状態になること、通信不可能な状態になることと言い換えることもできる。
本実施形態では、第1の状態においては、第1のメモリ210は、スイッチ230を介してメモリバス30に接続される(プロセッサ10に接続される)ので、プロセッサ10は、第1のメモリ210に含まれる複数の領域の全ての領域に対してアクセス可能であり、任意の領域をアドレスで指定して、データの読み出しや書き込みを行うことができる。一方、第2の状態においては、第1のメモリ210はメモリバス30から切り離される(プロセッサ10とは接続されない)ので、プロセッサ10は、第1のメモリ210内の任意の領域をアドレスで指定しても、データの読み出しや書き込みを行うことはできない。
また、本実施形態では、第2のメモリ220は、第1の状態および第2の状態の何れかの状態においても、メモリバス30とは接続されない(プロセッサ10とは接続されない)ので、プロセッサ10は、第2のメモリ220に直接アクセスすることはできない。このため、第2のメモリ220は、プロセッサ10のメモリアドレス空間には割り当てられない。
メモリバス30に接続される制御部240は、プロセッサ10から、第1のメモリ210と第2のメモリ220との間でのデータの移動を要求する移動要求コマンドを受け付けると、第2の状態に切り替えるようにスイッチ230を制御し、第1のメモリ210と第2のメモリ220との間でデータを移動する。移動要求コマンドとしては、少なくとも第1のコマンドと第2のコマンドがある。第1のコマンドは、第1のメモリ210に記憶されたデータを第2のメモリ220に移動することを要求するコマンドである。第2のコマンドは、第2のメモリ220に記憶されたデータを第1のメモリ210に移動することを要求するコマンドである。そして、制御部240は、プロセッサ10から第1のコマンドを受け付けると、第2の状態に切り替えるようにスイッチ230を制御し、第1のメモリ210に記憶されたデータを第2のメモリ220に移動する。また、制御部240は、プロセッサ10から第2のコマンドを受け付けると、第2の状態に切り替えるようにスイッチ230を制御し、第2のメモリ220に記憶されたデータを第1のメモリ210に移動する。なお、所望の状態に切り替えるようにスイッチ230を制御するとは、異なる状態から所望の状態へ変更する場合と、既に所望の状態にある時には変更しない場合の両方を含む。
さらに詳述すれば、本実施形態では、制御部240は、対応情報管理部242を備える。この対応情報管理部242は、第2のメモリ220の領域識別情報とアドレス空間領域識別情報とが対応付けられた対応情報を複数記憶する。第2のメモリ220の領域識別情報は、複数の記憶領域に区分けされた第2のメモリ220の領域の1つを特定する情報である。アドレス空間領域識別情報は、プロセッサ10がアクセスするアドレス空間(一例として仮想アドレス空間)に対する識別情報であり、複数の記憶領域に区分けされたアドレス空間の領域の1つの特定(識別)する情報である。仮想記憶機構が動作していて、プロセス毎にアドレス空間が異なる場合には、アドレス空間領域識別情報は、その領域が属するアドレス空間を特定する情報も含む。また、本実施形態における対応情報に含まれる領域識別情報で識別される第2のメモリ220の領域が空き領域の場合、その対応情報は、第2のメモリ220の領域識別情報と、空き領域であることを識別する空き領域識別情報とが対応付けられた情報を示す。なお、これに限らず、例えば第2のメモリ220の空き領域は対応情報に登録されずに、第2のメモリ220に含まれる複数の領域のうち対応情報に登録されていない領域が空き領域であるとして管理する形態であってもよい。また、対応情報の記録方法は任意であり、例えばテーブル形式で管理してもよいし、リスト形式で管理してもよいし、他の形式でもよい。また、対応情報を記憶する対応情報管理部242は、第1のメモリ210に格納されてもよいし、第2のメモリ220に格納されてもよいし、これらとは別の専用のメモリで構成されてもよい。また、別の形態としては、第2のメモリ220の領域識別情報をインデックスとするテーブル(すなわち、テーブルの行番号が第2のメモリ220の領域識別情報と同じ)とし、テーブルの中にアドレス空間領域識別情報を持ってもよい。すなわち、第2のメモリ220の領域識別情報とアドレス空間領域識別情報の対応関係が記録されていれば、どの様な形態で記憶されていてもよい。
図3は、本実施形態における対応情報の一例を示す図である。この例では、第2のメモリ220は、1チップのNAND Flashメモリで構成され、チップ内の複数のブロック(各ブロックは複数のページから構成される)のうちの何れかを識別するブロック番号と、該ブロック番号で識別されるブロック内のページを識別するページ番号との組み合わせ(物理アドレスに相当する情報)が、第2のメモリ220の領域識別情報に含まれている。そして、第2のメモリ220の領域識別情報のそれぞれに対し、仮想アドレス空間領域識別情報(図3の例では、「0×8004」、「0×8013」、「0×8001」)または空き領域識別情報(図3の例では「0×FFFF」)が対応付けられている。なお、第2のメモリ220が、NAND Flashメモリを複数チップ搭載している場合は、領域識別情報には、複数のチップのうちの何れかを識別するチップ番号がさらに含まれていてもよい。また、第2のメモリ220の領域識別情報で識別される第2のメモリ220の領域が、同一ブロック内の連続する複数ページの領域を示す場合は、該領域識別情
報は、先頭のページを特定する情報(ブロック番号とページ番号)に加えてページ数を示す情報をさらに含んでいてもよい。さらに、第2のメモリ220の領域識別情報で識別される第2のメモリ220の領域が、複数のブロックに跨ったページからなる領域である場合は、該領域識別情報は、ブロック番号とページ番号(とページ数を識別する情報)の全ての組み合わせを含む形態であってもよい。また、ブロック番号とページ番号と(チップ番号と)の組み合わせからなる物理的な情報の代わりに、論理的な情報(例えば連続的な一次元のページ番号など)で第2のメモリ220内の領域を指定(識別)する形態であってもよい。つまり、半導体記憶装置20X内に、論理的な一次元のページ番号を、物理的な情報(ブロック番号とページ番号と(チップ番号と)の組み合わせ等)にマッピングする変換機構を備える形態であってもよい。
図2に戻って、制御部240の説明を続ける。本実施形態では、第1のコマンドと第2のコマンドは両者とも、パラメータ(引数とも呼ぶ)として、第1のメモリ210の領域識別情報(第1パラメータ)と、アドレス空間領域識別情報(第2パラメータ)を有する。第1のメモリ210の領域識別情報は、第1のメモリ210に含まれる複数の領域のうちの何れかを識別する情報である。
そして、本実施形態では、制御部240は、第1のコマンドを受け付けた場合は、まず第2のメモリ220の空き領域を特定する。次に、その特定した第2のメモリ220の空き領域に対して、該第1のコマンドの第1パラメータで識別される第1のメモリ210の領域に記憶されたデータを移動する。次に、移動されたデータの移動先の第2のメモリ220の領域を識別する領域識別情報に対して、該第1のコマンドの第2パラメータであるアドレス空間領域識別情報を対応付けて対応情報を更新する。一方、制御部240は、第2のコマンドを受け付けた場合は、まず対応情報を参照して、該第2のコマンドの第2パラメータであるアドレス空間領域識別情報に対応付けられた第2のメモリ220の領域識別情報を特定する。次に、その特定した第2のメモリ220の領域識別情報で識別される第2のメモリ220の領域に記憶されたデータを、該第2のコマンドの第1パラメータで識別される第1のメモリ210の領域に移動する。そして、該データの移動元の第2のメモリ220の領域を空き領域として管理する。
より具体的には、制御部240は、第1のコマンドを受け付けた場合は、まず対応情報を参照して、空き領域識別情報に対応付けられた領域識別情報を特定する。次に、その特定した第2のメモリ220の領域識別情報で識別される第2のメモリ220の領域に対して、該第1のコマンドの第1パラメータで識別される第1のメモリ210の領域に記憶されたデータを移動する。次に、該データの移動先の第2のメモリ220の領域を識別する領域識別情報に対して、該第1のコマンドの第2パラメータであるアドレス空間領域識別情報を対応付けて対応情報を更新する。一方、制御部240は、第2のコマンドを受け付けた場合は、対応情報を参照して、該第2のコマンドの第2パラメータであるアドレス空間領域識別情報に対応付けられた第2のメモリ220の領域識別情報を特定する。次に、その特定した領域識別情報で識別される第2のメモリ220の領域に記憶されたデータを、該第2のコマンドの第1パラメータで識別される第1のメモリ210の領域に移動する。次に、該データの移動先の第2のメモリ220の領域を識別する領域識別情報に対して、空き領域識別情報を対応付けて対応情報を更新する。
ここでは、第1のコマンドは、第1のメモリ210に記憶されたデータを第2のメモリ220に退避させることを要求するコマンドであると考えることもでき、「退避コマンド」と称する場合がある。また、第2のコマンドは、第2のメモリ220に記憶されたデータを第1のメモリ210に復帰させることを要求するコマンドであると考えることもでき、「復帰コマンド」と称する場合がある。さらに、上記移動要求コマンドは、第1のメモリ210の所定領域に記憶されたデータを第2のメモリ220に退避させた後に、第2のメモリ220のうち、該退避させたデータが記憶される領域とは別の領域に記憶されたデータを第1のメモリ210の上記所定領域に復帰させることを要求する複合コマンド(退避コマンドと復帰コマンドとを対応付けて複合した形態のコマンド)であってもよい。
また、制御部240がプロセッサ10から受け付けるコマンドとしては、上記移動要求コマンドの他、半導体記憶装置20Xの状態を取得するための情報取得コマンドがあってもよい。取得する半導体記憶装置20Xの状態としては、プロセッサ10が第1のメモリ210に対してアクセス可能かどうか(スイッチ230の状態を取得することで判断可能)、第2のメモリ220の空き領域の容量、第1のメモリ210と第2のメモリ220との間でのデータ移動の進捗状況や完了までの推定残り時間などが挙げられる。
さらに、制御部240がプロセッサ10から受け付けるコマンドは、アドレス空間領域識別情報に対応付けられた領域識別情報で識別される第2のメモリ220の領域を開放するコマンド、すなわち、アドレス空間領域識別情報が割り当てられない状態(未割り当て状態)に変更することを要求するコマンド(削除コマンド)であってもよい。また、第2のメモリ220に含まれる全ての領域を未割り当て状態に変更することを要求するコマンド(初期化コマンド)があってもよい。
また、コマンドのパラメータ(例えば退避コマンドや復帰コマンドのパラメータとしては、第1パラメータ、第2パラメータが挙げられる)は、コマンドに付属するパラメータとして与えてもよいし、事前に半導体記憶装置20X内のレジスタに書き込んだ後で、動作種別を示す情報をコマンドとして与えてもよい。この場合には、混載型の半導体記憶装置20X内のレジスタにパラメータを書き込むコマンドを持つ。
なお、例えば退避コマンドや復帰コマンドの第1パラメータで識別される第1のメモリ210の領域は、固定長領域であることが好ましいが、不定長領域として例えば開始番地と終了番地、もしくは開始番地とサイズで識別してもよい。固定長の場合、領域のサイズの単位は、プロセッサ10上のOS(オペレーティングシステム)の仮想記憶で一般的に用いられる4KBや、第2のメモリ220におけるデータの書き込み単位(NAND Flashメモリにおけるページ)であると好ましいが、これに限らず、任意の単位であってよい。また、上述の第1のパラメータで識別される第1のメモリ210の領域は、連続した複数の固定長領域であっても構わない。この例では、上述の第1のパラメータで識別される第1のメモリ210の領域は、1つの固定長領域であることを前提として説明する。
以下、制御部240のより具体的な構成を説明する。図2に示すように、制御部240は、送受信部241と、対応情報管理部242と、データ移動制御部243とを備える。
送受信部241は、プロセッサ10からのコマンドを受信するとともに、プロセッサ10に対して、受信したコマンドに対する応答を送信する。この例では、送受信部241は、メモリバス30に接続されており、スイッチ230の状態(半導体記憶装置20Xの状態)が第1の状態および第2の状態の何れであっても、プロセッサ10からのコマンドを受信することができるとともにプロセッサ10に対して応答を送信することができる。
対応情報管理部242は、対応情報を管理する。例えば送受信部241で退避コマンドを受信した場合、対応情報管理部242は、対応情報を参照して、空き領域識別情報に対応付けられた第2のメモリ220の領域識別情報を特定し、その特定した領域識別情報をデータ移動制御部243へ通知する。また、例えば送受信部241で復帰コマンドを受信した場合、対応情報管理部242は、対応情報を参照して、復帰コマンドの第2パラメータであるアドレス空間領域識別情報に対応付けられた第2のメモリ220の領域識別情報を特定し、その特定した領域識別情報をデータ移動制御部243へ通知する。
次に、送受信部241で削除コマンドを受信した場合の動作について説明する。削除コマンドのパラメータは、アドレス空間領域識別情報を有する。対応情報管理部242は、対応情報のうち、削除コマンドのパラメータのアドレス空間領域識別情報に対応付けられた第2のメモリ220の領域識別情報を選択し、その選択した領域識別情報と、空き領域識別情報とを対応付ける。空き領域の管理方法として、対応情報に空き領域識別情報を登録しない方法であれば、選択した領域識別情報とアドレス空間領域識別情報とが対応付けられた対応情報を単に削除すればよい。
また、この混載型の半導体記憶装置20Xを最初に利用する時には、第2のメモリ220には何も退避されていない状態が初期状態となるため、対応情報にはアドレス空間領域識別情報が登録されていない状態にする必要がある。そのため、送受信部241で初期化コマンドを受信した場合、対応情報管理部242は、初期化、すなわち第2のメモリ220の領域識別情報すべてに対して空き領域識別情報を対応付ける処理を行う。
次に、データ移動制御部243を説明する。データ移動制御部243は、送受信部241で受信したコマンドの種別を判別し、コマンドに応じた制御を行う。受信したコマンドが移動要求コマンドである場合、移動要求コマンドに従って、第1のメモリ210と第2のメモリ220との間のデータを移動する。例えば送受信部241で退避コマンドを受信した場合であって、対応情報管理部242から第2のメモリ220の領域識別情報の通知(対応情報管理部242によって特定された第2のメモリ220の空き領域を示す情報の通知)を受けると、データ移動制御部243は、第2の状態に切り替えるようにスイッチ230を制御する。その後、データ移動制御部243は、その通知された領域識別情報で識別される第2のメモリ220の領域に対して、退避コマンドの第1パラメータで識別される第1のメモリ210の領域に記憶されたデータを移動し、対応情報管理部242に対して、対応情報の更新を依頼する。この依頼を受けた対応情報管理部242は、空き領域として特定した第2のメモリ220の領域を識別する領域識別情報に対して、退避コマンドの第2パラメータであるアドレス空間領域識別情報を対応付けて対応情報を更新する。
また、例えば送受信部241で復帰コマンドを受信した場合であって、対応情報管理部242から第2のメモリ220の領域識別情報の通知(対応情報管理部242によって特定された、復帰コマンドの第2パラメータであるアドレス空間領域識別情報に対応付けられた第2のメモリ220の領域識別情報の通知)を受けると、データ移動制御部243は、第2の状態に切り替えるようにスイッチ230を制御する。その後、データ移動制御部243は、その通知された領域識別情報で識別される第2のメモリ220の領域に記憶されたデータを、復帰コマンドの第1パラメータで識別される第1のメモリ210の領域に移動し、対応情報管理部242に対して対応情報の更新を依頼する。この依頼を受けた対応情報管理部242は、復帰コマンドの第2パラメータであるアドレス空間領域識別情報に対応付けられていた第2のメモリ220の領域識別情報に対して、該アドレス空間領域識別情報の代わりに、空き領域識別情報を対応付けて対応情報を更新する。
なお、本実施形態では、制御部240は、プロセッサ10からの移動要求コマンドを受信した直後には応答は返さずに、その受信した移動要求コマンドに従って、第1のメモリ210と第2のメモリ220との間でデータの移動し、移動完了後に、移動要求コマンドに対する応答として、データの移動が完了したことをプロセッサ10へ報告するが、これに限られるものではない。
例えば制御部240は、移動要求コマンドを受信した後にプロセッサ10へ応答を返し、それからデータの移動を開始してもよい。この場合の応答では、移動要求コマンドのパラメータに対応する第2のメモリ220の領域識別情報やアドレス空間領域識別情報を検査し、正常なパラメータであるかどうかの判定結果を応答に付加してもよい。
また、例えば制御部240が、移動要求コマンドに対する応答は行わずに、プロセッサ10から受信した情報取得コマンドに対する応答として、データ移動中であるか否かを特定可能な情報をプロセッサ10に返す形態であってもよい。例えば制御部240は、情報取得コマンドに対する応答として、スイッチ230の状態が第1の状態であるか第2の状態であるのかを示す情報をプロセッサ10に返すこともできる。プロセッサ10は、スイッチ230の状態が第2の状態であれば、データ移動中であると判断し、スイッチ230の状態が第1の状態であれば、データ移動が完了したと判断することができる。
さらに、別の方式としては、プロセッサ10はメモリ間のデータ移動の完了を確認せずに、第1のメモリ210にアクセスを試み、正常にアクセスできるかできないかで、データ移動中であるか否かを判定してもよい。スイッチ230が第1の状態、すなわちプロセッサ10と第1のメモリ210が接続されている状態では正常にアクセスが可能であるが、スイッチ230が第2の状態、すなわちプロセッサ10と第1のメモリ210が接続されていない状態では、プロセッサ10は第1のメモリ210にアクセスできないので、プロセッサ10に対してエラーが返される、または一定時間内に応答がない、としてもよい。
以上が、混載型の半導体記憶装置20Xの構成である。なお、非混載型の半導体記憶装置20Yには、第1のメモリ210が搭載されるものの、第2のメモリ220、スイッチ230および制御部240は搭載されない。
図4は、プロセッサ10からの移動要求コマンド(退避コマンドまたは復帰コマンドを受信した場合の制御部240の動作例を示すフローチャートである。まず送受信部241で移動要求コマンドを受信し(ステップS1)、その受信した移動要求コマンドが退避コマンドの場合(ステップS2:Yes)、対応情報管理部242は、対応情報を参照して、空き領域識別情報に対応付けられた領域識別情報を特定し(ステップS3)、その特定した領域識別情報をデータ移動制御部243へ通知する。この通知を受けたデータ移動制御部243は、第2の状態に切り替えるようにスイッチ230を制御し(ステップS4)、対応情報管理部242から通知された領域識別情報で識別される第2のメモリ220の領域に対して、退避コマンドの第1パラメータで識別される第1のメモリ210の領域に記憶されたデータを移動する(ステップS5)。そして、データ移動制御部243は、対応情報管理部242に対して対応情報の更新を依頼し、この依頼を受けた対応情報管理部242は、空き領域として特定した第2のメモリ220の領域を識別する領域識別情報に対して、退避コマンドの第2パラメータであるアドレス空間領域識別情報を対応付けて対応情報を更新する(ステップS6)。次に、データ移動制御部243は、第1の状態に切り替えるようにスイッチ230を制御する(ステップS7)。次に、送受信部241は、退避コマンドに対する応答として、データの移動が完了したことをプロセッサ10へ報告する(ステップS8)。
一方、ステップS1で受信した移動要求コマンドが復帰コマンドの場合(ステップS2:No)、対応情報管理部242は、対応情報を参照して、復帰コマンドの第2パラメータであるアドレス空間領域識別情報に対応付けられた領域識別情報を特定し(ステップS9)、その特定した領域識別情報をデータ移動制御部243へ通知する。この通知を受けたデータ移動制御部243は、第2の状態に切り替えるようにスイッチ230を制御し(ステップS10)、対応情報管理部242から通知された領域識別情報で識別される第2のメモリ220の領域に記憶されたデータを、復帰コマンドの第1パラメータで識別される第1のメモリ210の領域に移動する(ステップS11)。そして、データ移動制御部243は、対応情報管理部242に対して対応情報の更新を依頼し、この依頼を受けた対応情報管理部242は、復帰コマンドの第2パラメータであるアドレス空間領域識別情報に対応付けられていた領域識別情報に対して、空き領域識別情報を対応付けて対応情報を更新する(ステップS12)。次に、データ移動制御部243は、第1の状態に切り替えるようにスイッチ230を制御する(ステップS13)。次に、送受信部241は、復帰コマンドに対する応答として、データの移動が完了したことをプロセッサ10へ報告する(ステップS14)。
なお、図5は、制御部240がプロセッサ10から受信するコマンドが、退避コマンド、復帰コマンドおよび情報取得コマンドの3種類である場合において、プロセッサ10からのコマンドを受信した場合の制御部240の動作例を示すフローチャートである。送受信部241でコマンドを受信し(ステップS21)、その受信したコマンドが退避コマンドの場合(ステップS22:Yes)は、ステップS23〜ステップS28の処理が行われる。ステップS23〜ステップS28の処理の内容は、図4に示すステップS3〜ステップS8の処理の内容と同様である。また、送受信部241で受信したコマンドが復帰コマンドの場合(ステップS29:Yes)は、ステップS30〜ステップS35の処理が行われる。ステップS30〜ステップS35の処理の内容は、図4に示すステップS9〜ステップS14の処理の内容と同様である。
また、送受信部241で受信したコマンドが情報取得コマンドの場合(ステップS29:No)、送受信部241は、現在のスイッチ230の状態(半導体記憶装置20Xの状態)を示す状態情報を、応答としてプロセッサ10へ返す(ステップS36)。
次に、図6を用いて、情報処理装置1全体の動作を具体的に説明する。図6の例では、プロセッサ10がアクセスするアドレス空間は固定長領域で区切られ連続したページの集合で管理され、各ページにはアドレス空間領域識別情報(空間識別子)が付与されている。アドレス空間領域識別情報は、例えばプロセスを識別するプロセスIDと、該プロセスに割り当てられる仮想アドレス空間の領域を識別する仮想アドレスの下位の所定数のビットを除く上位ビットとの組み合わせで構成されることが考えられるが、これに限らず、プロセッサ10がアクセスするアドレス空間の領域を識別可能な情報であればよい。
プロセッサ10がアクセスするアドレス空間は、各半導体記憶装置20に搭載された第1のメモリ210の容量よりも大きいため、アドレス空間の一部のページだけが第1のメモリ210に割り当てられ、その他のページは混載型の半導体記憶装置20Xに搭載された第2のメモリ220か、HDDやSSDなどのストレージデバイスに退避されている。各半導体記憶装置20に搭載された第1のメモリ210は物理アドレス空間に固定的に割り当てられ、混載型の半導体記憶装置20Xの場合には、第1のメモリ210だけが物理アドレス空間に割り当てられる。前述の通り、第2のメモリ220は、プロセッサ10からアクセスできないため、物理アドレス空間には割り当てられない。プロセッサ10は、アドレス空間のページを物理アドレス空間に割り当てる機能(アドレス変換部101)を有し、この機能は、一般的にMemory Management Unitなどと呼ばれる。
図6の例では、アドレス変換部101の機能により、アドレス空間に含まれる複数のページ(領域の一例)のうち「0×8000」を示すアドレス空間領域識別情報(空間識別子)を付与されたページ、および、「0×8002」を示すアドレス空間領域識別情報を付与されたページは、非混載型の半導体記憶装置20Yに搭載された第1のメモリ210に割り当てられ、「0×8003」を示すアドレス空間領域識別情報が付与されたページ、および、「0×8011」を示すアドレス空間領域識別情報が付与されたページは、混載型の半導体記憶装置20Xに搭載された第1のメモリ210に割り当てられている。
また、図6の例では、「0×8004」を示すアドレス空間領域識別情報が付与されたページ、「0×8013」を示すアドレス空間領域識別情報が付与されたページ、および、「0×8001」を示すアドレス空間領域識別情報が付与されたページは、混載型の半導体記憶装置20Xに搭載された第2のメモリ220に割り当てられている(退避されている)。第2のメモリ220に含まれる複数の領域のうち、「0×FFFF」を示す空き領域識別情報に対応付けられている領域は、空き領域であることを示す。図6の例では、アドレス空間に含まれる複数のページのうち、「0×8010」を示すアドレス空間領域識別情報が付与されたページ、「0×8012」を示すアドレス空間領域識別情報が付与されたページや図示されていないその他のページは未使用ページであり、何れのメモリにも割り当てられてない。
ここで、プロセッサ10上で動くソフトウェアが、アドレス空間に含まれる複数のページのうち、退避先の第2のメモリ220に割り当てられた「0×8013」を示すアドレス空間領域識別情報が付与されたページ内のアドレスにアクセスした場合の動作について説明する。この場合、アドレス変換部101は、ソフトウェアがアクセスした該アドレスに対応する物理アドレスが存在しないため、プロセッサ10に対して、ページフォルトの割り込みを発行する。プロセッサ10上で動作するOS(オペレーティングシステム)は、所定のアルゴリズムにて、第1のメモリ210に割り当てられたアドレス空間のページの中から退避可能なページを選択する。ここでは、「0×8003」を示すアドレス空間領域識別情報が付与されたページが退避可能なページとして選択されたと仮定して説明を続ける。
OSは、「0×8003」を示すアドレス空間領域識別情報が付与されたページを退避するために、混載型の半導体記憶装置20Xに退避コマンドを送る。この退避コマンドのパラメータとして、退避する第1のメモリ210の領域を識別する第1パラメータと、アドレス空間領域識別情報を示す第2パラメータを指定する。退避する第1のメモリ210の領域の指定の仕方としては、例えば混載型の半導体記憶装置20X内でのアドレスの先頭番地を指定することができる。このため、この例では、第1のメモリ210に含まれる複数の領域のうち、「0×8003」を示す仮想アドレス空間領域識別情報が付与されたページが割り当てられている領域の、混載型の半導体記憶装置20X内でのアドレスの先頭番地として「0×0000」を指定する。また、第2パラメータとしては、退避する第1のメモリ210の領域が割り当てられているアドレス空間のページに付与された「0×8003」を示すアドレス空間領域識別情報を指定する。
退避コマンドを受信した混載型の半導体記憶装置20Xは、図4のフローに従って動作する。すなわち、送受信部241で退避コマンドを受信すると(ステップS2:Yes)、対応情報管理部242は、対応情報を参照して、「0×FFFF」を示す空き領域識別情報に対応付けられた領域識別情報を特定し(ステップS3)、その特定した領域識別情報をデータ移動制御部243へ通知する。この通知を受けたデータ移動制御部243は、第2の状態に切り替えるようにスイッチ230を制御し(ステップS4)、対応情報管理部242から通知された領域識別情報で識別される第2のメモリ220の領域に対して、退避コマンドの第1パラメータが示す「0×0000」を先頭番地とする第1のメモリ210の領域に記憶された1ページ分のデータを移動する(ステップS5)。そして、データ移動制御部243は、対応情報管理部242に対して対応情報の更新を依頼し、この依頼を受けた対応情報管理部242は、第2のメモリ220に含まれる複数の領域のうち退避先の領域(ステップS3で空き領域として特定した領域)を識別する領域識別情報に対して、退避コマンドの第2パラメータが示す「0×8003」を対応付けて対応情報を更新する(ステップS6)。次に、データ移動制御部243は、第1の状態に切り替えるようにスイッチ230を制御する(ステップS7)。次に、送受信部241は、退避コマンドに対する応答として、データの移動が完了したことをプロセッサ10へ報告する(ステップS8)。
次に、OSは、ページフォルトを起したアドレスが含まれるページを復帰するために、混載型の半導体記憶装置20Xに復帰コマンドを送る。この復帰コマンドのパラメータとして、復帰先の第1のメモリ210の領域を識別する第1パラメータと、アドレス空間領域識別情報を示す第2パラメータとを指定する。復帰先の第1のメモリ210の領域は、対応する退避コマンドの第1パラメータで識別される第1のメモリ210の領域と同じであるため、混載型の半導体記憶装置20X内でのアドレスの先頭番地として「0×0000」を指定する。また、第2パラメータとしては、ページフォルトを起したアドレスが含まれるページに付与された「0×8013」を示すアドレス空間領域識別情報を指定する。
復帰コマンドを受信した混載型の半導体記憶装置20Xは、図4のフローに従って動作する。すなわち、送受信部241で復帰コマンドを受信すると(ステップS2:No)、対応情報管理部242は、対応情報を参照して、退避コマンドの第2パラメータが示す「0×8013」に対応付けられた領域識別情報を特定し(ステップS9)、その特定した領域識別情報をデータ移動制御部243へ通知する。この通知を受けたデータ移動制御部243は、第2の状態に切り替えるようにスイッチ230を制御し(ステップS10)、対応情報管理部242から通知された領域識別情報で識別される第2のメモリ220の領域に記憶された1ページ分のデータを、復帰コマンドの第1パラメータが示す「0×0000」を先頭番地とする第1のメモリ210の領域に移動する(ステップS11)。そして、データ移動制御部243は、対応情報管理部242に対して対応情報の更新を依頼し、この依頼を受けた対応情報管理部242は、復帰コマンドの第2パラメータが示す「0×8013」に対応付けられていた領域識別情報に対して、「0×FFFF」を示す空き領域識別情報を対応付けて対応情報を更新する(ステップS12)。次に、データ移動制御部243は、第1の状態に切り替えるようにスイッチ230を制御する(ステップS13)。次に、送受信部241は、復帰コマンドに対する応答として、データの移動が完了したことをプロセッサ10へ報告する(ステップS14)。この報告を受けたプロセッサ10は、アドレス変換部101によるアドレス変換に用いられるマッピング情報を変更し、アドレス空間に含まれる複数のページのうちページフォルトを起したアドレスが含まれるページが、混載型の半導体記憶装置20Xに搭載された第1のメモリ210の復帰した領域に割り当てられるようにする。
以上の動作により、ページフォルトを起したソフトウェアは、「0×8013」を示すアドレス空間領域識別情報が付与されたページ内のアドレスにアクセスすることが可能になり、処理を継続できる。
以上に説明したように、本実施形態の半導体記憶装置20Xは、第1のメモリ210と、第2のメモリ220とを混載し、第1のメモリ210とプロセッサ10とが接続され、かつ、第2のメモリ220とプロセッサ10とが接続されない第1の状態と、第1のメモリ210と第2のメモリ220とが接続され、かつ、プロセッサ10が第1のメモリ210と接続されず、かつ、プロセッサ10が第2のメモリ220と接続されない第2の状態とを切り替えるためのスイッチ230を備える。
そして、本実施形態の半導体記憶装置20Xは、プロセッサ10から、第1のメモリ210と第2のメモリ220との間でのデータの移動を要求するための移動要求コマンドを受け付けると、第2の状態に切り替えるようにスイッチ230を制御し、第1のメモリ210と第2のメモリ220との間でデータを移動する制御部240を備える。これにより、第1のメモリ210と第2のメモリ220との間でのデータの移動が無いので、プロセッサ10の負担を軽減することができる。また、制御部240は、第1のメモリ210をメモリバス30から切り離した状態(第1のメモリ210とプロセッサ10とが接続されない状態)で、第1のメモリ210と第2のメモリ220との間でのデータを移動するので、その間、プロセッサ10はメモリバス30を自由に使用することができ、例えばメモリバス30を介して他の半導体記憶装置20へアクセスすることも可能である。さらに、本実施形態の半導体記憶装置20Xは、第1のメモリ210と第2のメモリ220とを混載しているので、第1のメモリ210と第2のメモリ220との間でのデータの移動に要する時間を短縮することができる。以上より、本実施形態によれば、第1のメモリ210と第2のメモリ220との間でのデータの移動が頻発しても、情報処理装置1の性能が大幅に低下することを回避できる。
(第1の実施形態の変形例)
上述の第1の実施形態では、プロセッサ10上のOSが退避コマンドを発行し、その完了を待って、次の復帰コマンドを送っていたが、多くの場合、この2つは連動しているため、退避コマンドと復帰コマンドを連続して発行し、最後のコマンドの完了だけを待つ方が便利である。そこで、退避コマンドと復帰コマンドの連続発行や、さらに複数ページ分の退避コマンドと、対応する復帰コマンドとの組の連続発行を可能にする構成が、本変形例である。以下、本変形例の説明では、上述の第1の実施形態との差分について説明する。
図7に示すように、本変形例の半導体記憶装置(混載型の半導体記憶装置)20Xは、プロセッサ10から受け取った移動要求コマンドを、受け取った順に記憶するコマンド記憶部250をさらに備え、制御部240は、コマンド記憶部250に記憶された移動要求コマンドを1つずつ取り出し、取り出した移動要求コマンドに応じた制御を行う。この例では、制御部240は、コマンド記憶部250に記憶された先頭の移動要求コマンドから順番に、移動要求コマンドを1つずつ取り出すが、取り出す順序は、これに限られるものではない。この例では、コマンド記憶部250は、先に入力した情報が先に出力される、キューと呼ばれるデータ構造を有する。このキューは、受信した順に移動要求コマンド(退避コマンドまたは復帰コマンド)が登録される待ち行列である。コマンド記憶部250には、移動要求コマンドの実行に必要な情報(コマンドの種別を示す情報や上述のパラメータなど)が登録される。情報の管理形態としては、テーブル形式で管理してもよいし、リスト形式で管理してもよい。また、図7の例では、コマンド記憶部250は、制御部240内に設けられているが、これに限らず、例えば制御部240の外部に設けられてもよい。
説明の便宜上、本変形例では、制御部240がプロセッサ10から受信するコマンドとしては、移動要求コマンド(退避コマンドまたは復帰コマンド)の他、情報取得コマンドが含まれる場合を例に挙げて説明する。取得する状態としては、第1のメモリ210へのアクセスが可能か(すなわちスイッチ230の状態)、第2のメモリ220の空き領域の容量、第1のメモリ210と第2のメモリ220との間でのデータの移動の進捗具合や完了までの推定残り時間の他、コマンド記憶部250に残っている移動要求コマンドの数や、コマンド記憶部250の空き容量(あと何個の移動要求コマンドを受け付けられるかを判断するための情報に相当)などである。
送受信部241は、プロセッサ10からコマンドを受信した後、その受信したコマンドが移動要求コマンドであれば、コマンド受信の応答をプロセッサ10に返すと共に、受信した移動要求コマンドをコマンド記憶部250の末尾に登録する。プロセッサ10から受信したコマンドが情報取得コマンドである場合は、コマンド記憶部250には登録せずに、その応答として、現在のスイッチ230の状態(半導体記憶装置20Xの状態)を示す状態情報をプロセッサ10へ返す。
データ移動制御部243は、コマンド記憶部250に登録された1以上の移動要求コマンドの中の先頭の移動要求コマンド(受け取った順番が最も古い移動要求コマンド)に従い、第1のメモリ210と第2のメモリ220との間でのデータを移動する。この具体的な内容は、上述の第1の実施形態と同様である。なお、例えば第1のメモリ210や第2のメモリ220が、それぞれ複数チップ存在することにより、複数の移動要求コマンドを並行して処理可能な場合は、複数の移動要求コマンドを並列に処理しても構わない。
図8は、プロセッサ10からのコマンドを受信した場合の送受信部241の動作例を示すフローチャートである。送受信部241は、プロセッサ10からのコマンドを受信すると(ステップS41)、受信したコマンドの種類を確認する。受信したコマンドの種類を確認する方法としては様々な方法が考えられる。例えばプロセッサ10から送信されるコマンドには、該コマンドの種類を示すコマンド種類情報が含まれる場合は、送受信部241は、受信したコマンドに含まれるコマンド種類情報を参照して、その受信したコマンドの種類を判断することができる。
ステップS41で受信したコマンドが移動要求コマンドの場合(ステップ42:Yes)、つまり、ステップS41で受信したコマンドが退避コマンドまたは復帰コマンドの場合、送受信部241は、移動要求コマンドを受信したことを示す情報を、応答としてプロセッサ10に返す(ステップS43)。次に、送受信部241は、受信した移動要求コマンドをコマンド記憶部250に登録する(ステップS44)。次に、送受信部241は、データ移動制御部243が動作中であるか否かを確認する(ステップS45)。データ移動制御部243が動作中の場合(ステップS45:Yes)、そのまま処理は終了し、データ移動制御部243が停止中の場合(ステップS45:No)、データ移動制御部243を起動する(ステップS46)。
一方、ステップS41で受信したコマンドが移動要求コマンドではない場合(ステップS42:No)、つまり、ステップS41で受信したコマンドが情報取得コマンドの場合、送受信部241は、半導体記憶装置20Xの状態(スイッチ230の状態)を示す状態情報を、応答としてプロセッサ10に返す(ステップS47)。
次に、図9を用いて、本変形例におけるデータ移動制御部243の動作例を説明する。まず、データ移動制御部243は、コマンド記憶部250が空であるかどうかを確認する(ステップS51)。コマンド記憶部250が空の場合(ステップS51:Yes)、データ移動制御部243は、第1の状態に切り替えるようにスイッチ230を制御する(ステップS52)。
コマンド記憶部250が空ではない場合(ステップS51:No)、データ移動制御部243は、コマンド記憶部250から移動要求コマンドを1つ取り出す(ステップS53)。より具体的には、データ移動制御部243は、コマンド記憶部250に記憶された1以上の移動要求コマンドの中から先頭の移動要求コマンドを取り出す。
ステップS53で取り出した移動要求コマンドが退避コマンドの場合(ステップS54:Yes)、データ移動制御部243は、対応情報管理部242に対して、空き領域識別情報に対応付けられた領域識別情報の特定を依頼する(ステップS55)。この依頼を受けた対応情報管理部242は、対応情報を参照して、空き領域識別情報に対応付けられた領域識別情報を特定し、その特定した領域識別情報をデータ移動制御部243へ通知する。この通知を受けたデータ移動制御部243は、第2の状態に切り替えるようにスイッチ230を制御し(ステップS56)、対応情報管理部242から通知された領域識別情報で識別される第2のメモリ220の領域に対して、退避コマンドの第1パラメータで識別される第1のメモリ210の領域に記憶されたデータを移動する(ステップS57)。そして、データ移動制御部243は、対応情報管理部242に対して、対応情報の更新を依頼する(ステップS58)。この依頼を受けた対応情報管理部242は、空き領域として特定した第2のメモリ220の領域を識別する領域識別情報に対して、退避コマンドの第2パラメータであるアドレス空間領域識別情報を対応付けて対応情報を更新する。その後は、ステップS51以降の処理が繰り返される。
一方、ステップS53で取り出した移動要求コマンドが復帰コマンドの場合(ステップS54:No)、データ移動制御部243は、対応情報管理部242に対して、復帰コマンドの第2パラメータであるアドレス空間領域識別情報に対応付けられた領域識別情報の特定を依頼する(ステップS59)。この依頼を受けた対応情報管理部242は、対応情報を参照して、復帰コマンドの第2パラメータであるアドレス空間領域識別情報に対応付けられた領域識別情報を特定し、その特定した領域識別情報をデータ移動制御部243へ通知する。この通知を受けたデータ移動制御部243は、第2の状態に切り替えるようにスイッチ230を制御し(ステップS60)、対応情報管理部242から通知された領域識別情報で識別される第2のメモリ220の領域に記憶されたデータを、復帰コマンドの第1パラメータで識別される第1のメモリ210の領域に移動する(ステップS61)。そして、データ移動制御部243は、対応情報管理部242に対して、対応情報の更新を依頼する(ステップS62)。この依頼を受けた対応情報管理部242は、復帰コマンドの第2パラメータであるアドレス空間領域識別情報に対応付けられていた領域識別情報に対して、空き領域識別情報を対応付けて対応情報を更新する。その後は、ステップS51以降の処理が繰り返される。なお、本変形例では、キュー(コマンド記憶部250)に保存されたコマンドを到着順に処理していたが、全ての退避と復帰が終了した時点での第1のメモリ210の内容が同じであれば、キュー内のコマンドの実行順序を入れ替えてもよい。
(第2の実施形態)
次に、第2の実施形態について説明する。上述の第1の実施形態と共通する部分については適宜に説明を省略する。本実施形態では、退避先の第2のメモリ220の領域をプロセッサ10上のOSが管理する点で上述の第1の実施形態と相違する。図10に示すように、本実施形態の制御部240は、上述の対応情報管理部242を備えていない点で上述の第1の実施形態と相違する。
本実施形態では、第2のメモリ220の領域をOSが管理するため、最初の移動要求コマンド(退避コマンドまたは復帰コマンド)を送る前に、混載型の半導体記憶装置20Xから第2のメモリ220に関する情報を取得する必要があるため、プロセッサ10から半導体記憶装置20Xへ送られるコマンドとして、第2のメモリ220に関する情報の取得を要求する第2のメモリ情報取得コマンドがさらに追加される。
第2のメモリ情報取得コマンドにより要求される情報(半導体記憶装置20Xに対して要求される情報)の中には、第2のメモリ220の容量やデータ書き込みの単位などの情報、書き込み場所(アドレス)を指定するためのフォーマットを示す情報などが含まれる。例えば第2のメモリ220がNAND Flashメモリで構成され、第2のメモリ220の領域を指定する方法が、物理的な情報により指定される方法である場合には、第2のメモリ情報取得コマンドにより要求される情報の中には、チップ数、ブロック数、ページサイズ、ブロックあたりのページ数、などを示す情報が含まれる。また、例えば第2のメモリ220の領域を指定する方法が、論理的な情報より指定される方法である場合には、第2のメモリ情報取得コマンドにより要求される情報の中には、ページサイズと総ページ数などを示す情報が含まれる。
さらに、第2のメモリ情報取得コマンドにより要求される情報の中には、混載型の半導体記憶装置20XとOSの間で、第2のメモリ220の領域を指定する方法が論理的な情報による指定方法であるか物理的な情報により指定方法であるか、物理的な情報による指定方法である場合には、第2のメモリ220の種別を示す情報(第2のメモリ220がNAND Flashメモリなのか、NOR Flashメモリなのか、ReRAMなのかといったメモリの種別を示す情報)、アドレッシング方法、アドレッシングのビット幅、などの情報が含まれてもよい。
本実施形態では、退避コマンドおよび復帰コマンドの各々は、第1のメモリ210に含まれる複数の領域のうちの何れかの領域を識別する第1パラメータと、第2のメモリ220に含まれる複数の領域のうちの何れかの領域を識別する第3パラメータとを有する。
そして、本実施形態における制御部240は、退避コマンドを受け付けた場合は、該退避コマンドの第1パラメータで識別される第1のメモリ210の領域に記憶されたデータを、該退避コマンドの第3パラメータで識別される第2のメモリ220の領域へ移動する。また、制御部240は、復帰コマンドを受け付けた場合は、該復帰コマンドの第3パラメータで識別される第2のメモリ220の領域に記憶されたデータを、該復帰コマンドの第1パラメータで識別される第1のメモリ210の領域へ移動する。
次に、図11を用いて、プロセッサ10からのコマンドを受信した場合の制御部240の動作例を説明する。説明の便宜上、ここでは、プロセッサ10から受信するコマンドは、退避コマンド、復帰コマンド、情報取得コマンドおよび第2のメモリ情報取得コマンドの4種類である場合を例に挙げて説明する。
まず、送受信部241は、プロセッサ10からコマンドを受信する(ステップS71)。ステップS71で受信したコマンドが退避コマンドの場合(ステップS72:Yes)、送受信部241は、退避コマンドを受信したことを示す情報を、応答としてプロセッサ10へ返す(ステップS73)。次に、データ移動制御部243は、第2の状態に切り替えるようにスイッチ230を制御する(ステップS74)。次に、データ移動制御部243は、送受信部241で受信した退避コマンドの第1パラメータで識別される第1のメモリ210の領域に記憶されたデータを、該退避コマンドの第3パラメータで識別される第2のメモリ220の領域へ移動する(ステップS75)。データの移動が完了すると、データ移動制御部243は、第1の状態に切り替えるようにスイッチ230を制御する(ステップS76)。
また、上述のステップS71で受信したコマンドが復帰コマンドの場合(ステップS71:No、ステップS77:Yes)、送受信部241は、復帰コマンドを受信したことを示す情報を、応答としてプロセッサ10へ返す(ステップS78)。次に、データ移動制御部243は、第2の状態に切り替えるようにスイッチ230を制御する(ステップS79)。次に、データ移動制御部243は、送受信部241で受信した復帰コマンドの第3パラメータで識別される第2のメモリ220の領域に記憶されたデータを、該復帰コマンドの第1パラメータで識別される第1のメモリ210の領域へ移動する(ステップS80)。データの移動が完了すると、データ移動制御部243は、第1の状態に切り替えるようにスイッチ230を制御する(ステップS81)。
また、上述のステップS71で受信したコマンドが情報取得コマンドの場合(ステップS71:No、ステップS77:No、ステップS82:Yes)、送受信部241は、現在のスイッチ230の状態(半導体記憶装置20Xの状態)を示す状態情報を、応答としてプロセッサ10へ返す(ステップS83)。
さらに、上述のステップS71で受信したコマンドが第2のメモリ情報取得コマンドの場合(ステップS71:No、ステップS77:No、ステップS82:No)、送受信部241は、第2のメモリ220に関する情報を、応答としてプロセッサ10へ返す(ステップS84)。
次に、図12を用いて、情報処理装置1全体の動作を具体的に説明する。図12の例では、説明の便宜上、1つのプロセス(この例では「495」を示すプロセスIDで識別されるプロセス)に割り当てられたアドレス空間(プロセッサ10がアクセスするアドレス空間)に含まれる複数のページの割り当て状況のみを表しており、アドレス空間領域識別情報(この例では、プロセスIDと、該プロセスIDで識別されるプロセスに割り当てられるアドレス空間の領域を識別するアドレスとの組み合わせ)の代わりに、アドレスのみを用いている。以下の説明では、アドレス空間とは、「495」を示すプロセスIDで識別されるプロセスに割り当てられたアドレス空間を指し、アドレスとは、該アドレス空間に含まれる複数のページの何れかを識別するための情報を指すものとする。
図12の例では、アドレス変換部101の機能により、アドレス空間に含まれる複数のページのうち「0×8000000」を示すアドレスから始まるページと、「0×8002000」を示すアドレスから始まるページは、非混載型の半導体記憶装置20Yに搭載された第1のメモリ210に割り当てられ、「0×8003000」を示すアドレスから始まるページと、「0×8011000」を示すアドレスから始まるページは、混載型の半導体記憶装置20Xに搭載された第1のメモリ210に割り当てられている。
また、この例では、「0×8004000」を示すアドレスから始まるページ、「0×8013000」を示すアドレスから始まるページ、および、「0×8001000」を示すアドレスから始まるページは、混載型の半導体記憶装置20Xに搭載された第2のメモリ220に割り当てられている(退避されている)。この退避状態を管理するのが、図13に示す対応情報であり、「495」を示すプロセスIDと、該プロセスIDで識別されるプロセスに割り当てられたアドレス空間に含まれる複数のページのうちの何れかのページの先頭の番地を示すアドレスとの組み合わせ(アドレス空間領域識別情報に相当)と、第2のメモリ220に含まれる複数の領域のうちの何れかを識別する論理ページ番号(第2のメモリ220の領域識別情報の一例)とが対応付けられた情報である。なお、図13の例では、「−1」を示すプロセスIDと、「0×FFFFFFF」を示す仮想アドレスとの組み合わせは、空き領域識別情報に相当し、該組み合わせに対応付けられている論理ページ番号(図13の例では「4」)で識別される第2のメモリ220の領域は空き領域であることを示す。図13に示す対応情報は、プロセッサ10上のOSによって管理される。
なお、この例では、「0×8010000」を示すアドレスから始まるページ、「0×8012000」を示すアドレスから始まるページ、図示されていないその他のページは未使用ページであり、何れのメモリにも割り当てられていない。
OSが起動され仮想記憶機構を動作させる時に、この対応情報も初期化する必要があるが、初期化の際には、混載型の半導体記憶装置20Xに搭載された第2のメモリ220の種類や容量、アドレス指定の仕方により、対応情報で管理する情報やエントリ数などが定まる。このため、まずOSは、混載型の半導体記憶装置20Xに対して、第2のメモリ情報取得コマンドを発行する。ここでは、OSは、第2のメモリ情報取得コマンドに対する応答として、第2のメモリ220の領域指定は、論理ページで指定され、エントリ数が4であることを示す情報を混載型の半導体記憶装置20Xから取得する。OSは、その取得した情報に基づいて、図13に示す対応情報を構成する。ただし、初期状態の対応情報の中身は空である。
ここで、プロセッサ10上で動くソフトウェアが、アドレス空間に含まれる複数のページのうち、第2のメモリ220に退避された(第2のメモリ220に割り当てられた)ページである、「0×8013000」を示すアドレスから始まるページ内のアドレスにアクセスした場合の動作について説明する。この場合、アドレス変換部101は、ソフトウェアがアクセスした該アドレスに対応する物理アドレスが存在しないため、プロセッサ10に対して、ページフォルトの割り込みを発行する。OSは、所定のアルゴリズムにて、第1のメモリ210に割り当てられたアドレス空間のページの中から退避可能なページを選択する。ここでは、「0×8003000」を示すアドレスから始まるページが退避可能なページとして選択されたと仮定して説明を続ける。
この例では、OSは、退避先となる第2のメモリ220の領域を退避コマンドで指定する必要があるので、OS内で管理している対応情報を参照して、退避先として利用可能な未使用領域(空き領域)を検索する。この例では、OSは、「−1」を示すプロセスIDと、「0×FFFFFFF」を示すアドレスとの組み合わせに対応付けられている第2のメモリ220の論理ページ番号を探せばよく、図13の例では、「4」を示す論理ページ番号が選択される。
次に、OSは、「0×8003000」を示すアドレスから始まるページを退避するために、混載型の半導体記憶装置20Xに退避コマンドを送る。この退避コマンドのパラメータとして、退避する第1のメモリ210の領域を識別する第1パラメータと、退避先の第2のメモリ220の領域を識別する第3パラメータとを指定する。退避する第1のメモリ210の領域の指定の仕方としては、例えば混載型の半導体記憶装置20X内でのアドレスの先頭番地を指定することができる。このため、この例では、第1のメモリ210に含まれる複数の領域のうち、「0×8003000」を示すアドレスから始まるページが割り当てられている領域の、混載型の半導体記憶装置20X内でのアドレスの先頭番地として「0×0000」を指定する。また、退避先の第2のメモリ220の領域を識別する第3パラメータは、「4」を示す第2のメモリ220の論理ページ番号となる。
退避コマンドを受信した混載型の半導体記憶装置20Xは、図11のフローに従って動作する。すなわち、送受信部241は、退避コマンドを受信すると(ステップS72:Yes)、退避コマンドを受信したことを示す情報を、応答としてプロセッサ10へ返す(ステップS73)。次に、データ移動制御部243は、第2の状態に切り替えるようにスイッチ230を制御する(ステップS74)。次に、データ移動制御部243は、送受信部241で受信した退避コマンドの第1パラメータが示す「0×0000」を先頭番地とする第1のメモリ210の領域に記憶された1ページ分のデータを、該退避コマンドの第3パラメータが示す「4」の論理ページ番号で識別される第2のメモリ220の領域へ移動する(ステップS75)。データの移動が完了すると、データ移動制御部243は、第1の状態に切り替えるようにスイッチ230を制御する(ステップS76)。
次に、OSは、ページフォルトを起したアドレスが含まれるページを復帰するために、混載型の半導体記憶装置20Xに復帰コマンドを送る。この復帰コマンドのパラメータとして、復帰先の第1のメモリ210の領域を識別する第1パラメータと、退避されている第2のメモリ220の領域を識別する第3パラメータとを指定する。復帰先の第1のメモリ210の領域は、対応する退避コマンドの第1パラメータで識別される第1のメモリ210の領域と同じであるため、混載型の半導体記憶装置20X内でのアドレスの先頭番地として「0×0000」を指定する。また、退避されている第2のメモリ220の領域を識別する第3パラメータとしては、ページフォルトを起したアドレスが含まれるページに付与された「0×8013000」を示すアドレスに対応付けられた第2のメモリ220の論理ページ番号(図13の例では「2」)を指定する。
復帰コマンドを受信した混載型の半導体記憶装置20Xは、図11のフローに従って動作する。すなわち、送受信部241は、復帰コマンドを受信すると、復帰コマンドを受信したことを示す情報を、応答としてプロセッサ10へ返す(ステップS78)。次に、データ移動制御部243は、第2の状態に切り替えるようにスイッチ230を制御する(ステップS79)。次に、データ移動制御部243は、送受信部241で受信した復帰コマンドの第3パラメータが示す「2」の論理ページ番号で識別される第2のメモリ220の領域に記憶された1ページ分のデータを、該復帰コマンドの第1パラメータが示す「0×0000」を先頭番地とする第1のメモリ210の領域へ移動する(ステップS80)。データの移動が完了すると、データ移動制御部243は、第1の状態に切り替えるようにスイッチ230を制御する(ステップS81)。
以上の動作により、ページフォルトを起したソフトウェアは、「0×8013000」を示す仮想アドレスから始まるページ内のアドレスにアクセスすることが可能になり、処理を継続できる。
(第3の実施形態)
次に、第3の実施形態について説明する。上述の各実施形態と共通する部分については適宜に説明を省略する。例えば図14に示すように、プロセッサ10に対して、上述の混載型の半導体記憶装置20Xが1つだけ接続される構成では、混載型の半導体記憶装置20X内でのデータの移動が行われている間、プロセッサ10は、混載型の半導体記憶装置20Xにアクセスすることができないため、プロセッサ10内のキャッシュメモリに記憶されたデータしかアクセスすることができず、動作が大幅に制限される。
そこで、本実施形態では、混載型の半導体記憶装置20X内に、第1のメモリ210と第2のメモリ220の組を複数搭載している。図15は、一例として、2つの組(Pa、Pb)を搭載した場合の半導体記憶装置20Xのハードウェア構成を示す図である。図15の例では、組Paに含まれる第1のメモリ210を「第1のメモリ210a」、該組Paに含まれる第2のメモリ220を「第2のメモリ220a」と表記している。また、組Pbに含まれる第1のメモリ210を「第1のメモリ210b」、該組Pbに含まれる第2のメモリ220を「第2のメモリ220b」と表記している。
また、本実施形態では、複数の組と1対1に対応する複数のスイッチ230が設けられる。図15の例では、組Paに対応するスイッチ230を「スイッチ230a」と表記し、組Pbに対応するスイッチ230を「スイッチ230b」と表記する。スイッチ230aは、第1のメモリ220aとプロセッサ10とが接続され、かつ、第2のメモリ220aとプロセッサ10とが接続されない第1の状態(組Paに対応する第1の状態)と、第1のメモリ210aと第2のメモリ220aとが接続され、かつ、プロセッサ10が、第1のメモリ210aと接続されず、かつ、プロセッサ10が第2のメモリ210aと接続されない第2の状態(組Paに対応する第2の状態)と、を切り替える。また、スイッチ230bは、第1のメモリ220bとプロセッサ10とが接続され、かつ、第2のメモリ220bとプロセッサ10とが接続されない第1の状態(組Pbに対応する第1の状態)と、第1のメモリ210bと第2のメモリ220bとが接続され、かつ、プロセッサ10が、第1のメモリ210bと接続されず、かつ、プロセッサ10が第2のメモリ210bと接続されない第2の状態(組Pbに対応する第2の状態)と、を切り替える。
要するに、何れか1つの第1のメモリ210と、何れか1つの第2のメモリ220とから構成される複数の組と1対1に対応し、対応する組に含まれる第1のメモリ210とプロセッサ10とが接続され、かつ、該対応する組に含まれる第2のメモリ220とプロセッサ10とが接続されない第1の状態と、該対応する組に含まれる第1のメモリ210と該対応する組に含まれる第2のメモリ220とが接続され、かつ、プロセッサ10が、該対応する組に含まれる第1のメモリ210と接続されず、かつ、プロセッサ10が、該対応する組に含まれる第2のメモリ220と接続されない第2の状態と、を切り替えるための複数のスイッチが設けられる形態であればよい。
また、本実施形態では、制御部240は、プロセッサ10から、何れかの組に含まれる第1のメモリ210と、該何れかの組に含まれる第2のメモリ220との間でのデータの移動を要求する移動要求コマンド(退避コマンドまたは復帰コマンド)を受け付けると、第2の状態に切り替えるように、該何れかの組に対応するスイッチを制御し、第1のメモリ210と第2のメモリ220との間でデータを移動する。より具体的には、移動要求コマンドは、何れかの組に含まれる第1のメモリ210に記憶されたデータを、該何れかの組に含まれる第2のメモリ220に移動することを要求する第1のコマンド(退避コマンド)と、何れかの組に含まれる第2のメモリ220に記憶されたデータを、該何れかの組に含まれる第1のメモリ210に移動することを要求する第2のコマンド(復帰コマンド)と、を含む。制御部240は、プロセッサから第1のコマンドを受け付けると、第1のコマンドの対象となる組に対応するスイッチ230を特定した上で、第2の状態に切り替えるように該スイッチ230を制御し、第1のコマンドの対象となる組に含まれる第1のメモリ210に記憶されたデータを、第1のコマンドの対象となる組に含まれる第2のメモリ220に移動する。また、制御部240は、プロセッサ10から第2のコマンドを受け付けると、第2のコマンドの対象となる組に対応するスイッチ230を特定した上で、第2の状態に切り替えるように該スイッチ230を制御し、第2のコマンドの対象となる組に含まれる第2のメモリ220に記憶されたデータを、第2のコマンドの対象となる組に含まれる第1のメモリ210に移動する。具体的な動作内容については、上述の各実施形態と同様に考えることができる。
本実施形態では、複数の第1のメモリ210の中で、対応する第2のメモリ220との間でのデータ移動でプロセッサ10からアクセス不能となる第1のメモリ210を一部に限定し、その他の第1のメモリ210をプロセッサ10からアクセス可能な状態にすることができるので、一部の第1のメモリ210と、対応する第2のメモリ220との間でのデータ移動中にも、プロセッサ10の動作の制限が大幅に緩和される。
なお、本実施形態は、上述の第1の実施形態と組み合わせることもできるし、上述の第2の実施形態と組み合わせることもできる。各実施形態に対応する部分の具体的な内容は上述したとおりである。
例えば上述の第1の実施形態と組み合わせた場合、混載型の半導体記憶装置20Xは、複数の組ごとに、該組に含まれる第2のメモリ220に含まれる複数の領域のうちの何れかを識別する領域識別情報と、アドレス空間に含まれる複数の領域のうちの何れかを識別するアドレス空間領域識別情報とが対応付けられた複数の対応情報を記憶する対応情報管理部をさらに備える。第1のコマンド(退避コマンド)および第2のコマンド(復帰コマンド)の各々は、何れかの組に含まれる第1のメモリ210に含まれる複数の領域のうちの何れかを識別する第1パラメータと、アドレス空間領域識別情報を示す第2パラメータとを有する。
制御部240は、第1のコマンドを受け付けた場合は、該第1のコマンドの対象となる組に含まれる第2のメモリ220の空き領域を特定し、その特定した第2のメモリ220の空き領域に対して、該第1のコマンドの第1パラメータで識別される第1のメモリ210の領域に記憶されたデータを移動し、該データの移動先の第2のメモリ220の領域を識別する領域識別情報に対して、該第1のコマンドの第2パラメータであるアドレス空間領域識別情報を対応付けて対応情報を更新する。また、第2のコマンドを受け付けた場合は、該第2のコマンドの対象となる組の対応情報を参照して、該第2のコマンドの第2パラメータであるアドレス空間領域識別情報に対応付けられた領域識別情報を特定し、その特定した領域識別情報で識別される第2のメモリ220の領域に記憶されたデータを、該第2のコマンドの第1パラメータで識別される第1のメモリ210の領域に移動し、該データの移動元の第2のメモリ220の領域を空き領域として管理する。
上述の第1の実施形態と同様に、対応情報に含まれる領域識別情報で識別される第2のメモリ220の領域が空き領域の場合、その対応情報は、第2のメモリ220の領域識別情報と、空き領域であることを識別する空き領域識別情報とが対応付けられた情報を示す形態であってもよい。この形態において、制御部240は、第1のコマンドを受け付けた場合は、該第1のコマンドの対象となる組の対応情報を用いて、空き領域識別情報に対応付けられた領域識別情報を特定し、その特定した領域識別情報で識別される第2のメモリ220の領域に対して、該第1のコマンドの第1パラメータで識別される第1のメモリ210の領域に記憶されたデータを移動し、該データの移動先の第2のメモリ220の領域を識別する領域識別情報に対して、該第1のコマンドの第2パラメータであるアドレス空間領域識別情報を対応付けて対応情報を更新する。また、第2のコマンドを受け付けた場合は、該第2のコマンドの対象となる組の対応情報を参照して、該第2のコマンドの第2パラメータであるアドレス空間領域識別情報に対応付けられた領域識別情報を特定し、その特定した領域識別情報で識別される第2のメモリ220の領域に記憶されたデータを、該第2のコマンドの第1パラメータで識別される第1のメモリ210の領域に移動し、該データの移動元の第2のメモリ220の領域を識別する領域識別情報に対して、空き領域識別情報を対応付けて対応情報を更新する。
また、例えば上述の第2の実施形態と組み合わせた場合、上述の第2の実施形態と同様に、対応情報の管理は不要となる。この場合、第1のコマンドおよび第2のコマンドの各々は、何れかの組に含まれる第1のメモリ210に含まれる複数の領域のうちの何れかの領域を識別する第1パラメータと、該何れかの組に含まれる第2のメモリ220に含まれる複数の領域のうちの何れかの領域を識別する第3パラメータとを有する。
制御部240は、第1のコマンドを受け付けた場合は、該第1のコマンドの第1パラメータで識別される第1のメモリの領域に記憶されたデータを、該第1のコマンドの第3パラメータで識別される第2のメモリの領域へ移動する。また、第2のコマンドを受け付けた場合は、該第2のコマンドの第3パラメータで識別される第2のメモリ220の領域に記憶されたデータを、該第2のコマンドの第1パラメータで識別される第1のメモリ210の領域へ移動する。
ただし、上述の第2の実施形態と組み合わせた場合、プロセッサ10は、移動要求コマンドを発行する前に、混載型の半導体記憶装置20Xにおける組の構成を把握しておく必要がある。そのため、プロセッサ10から半導体記憶装置20Xへ送られるコマンドとして、組の構成に関する情報の取得を要求する組構成情報取得コマンドがさらに追加される。送受信部241は、プロセッサ10から組構成情報取得コマンドを受信すると、組の構成に関する情報を、応答としてプロセッサ10へ返す。
(第3の実施形態の変形例)
例えば図16に示すように、1つの第2のメモリ220を、複数の第1のメモリ210の退避先として共有する形態であってもよい。図16の例では、複数の第1のメモリ210と1対1に対応する複数のスイッチ230が設けられる。要するに、第1のメモリ210とプロセッサとが接続され、かつ、第2のメモリ220とプロセッサ10とが接続されない第1の状態と、第1のメモリ210と第2のメモリ220とが接続され、かつ、プロセッサ10が第1のメモリ210と接続されず、かつ、プロセッサ10が第2のメモリ220と接続されない第2の状態とを第1のメモリ210ごとに切り替えるために、それぞれが第1のメモリ210ごとに設けられる複数のスイッチ230が設けられる形態であればよい。
この例では、制御部240は、プロセッサ10から、何れかの第1のメモリ210と、第2のメモリ220との間でのデータの移動を要求する移動要求コマンドを受け付けると、第2の状態に切り替えるように、該移動要求コマンドの対象となる第1のメモリ210に対応するスイッチ230を制御し、第1のメモリ210と第2のメモリ220との間でデータを移動する。より具体的には、移動要求コマンドは、何れかの第1のメモリ210に記憶されたデータを、第2のメモリ220に移動することを要求する第1のコマンド(退避コマンド)と、第2のメモリ220に記憶されたデータを、何れかの第1のメモリ210に移動することを要求する第2のコマンド(復帰コマンド)と、を含む。制御部240は、プロセッサ10から第1のコマンドを受け付けると、該第1のコマンドの対象となる第1のメモリ210に対応するスイッチ230を特定した上で、第2の状態に切り替えるように該スイッチ230を制御し、第1のメモリ210に記憶されたデータを、第2のメモリ220に移動する。また、プロセッサ10から第2のコマンドを受け付けると、該第2のコマンドの対象となる第1のメモリ210に対応するスイッチ230を特定した上で、第2の状態に切り替えるように該スイッチ230を制御し、第2のメモリ220に記憶されたデータを第1のメモリに移動する。
なお、本変形例は、上述の第1の実施形態と組み合わせることもできるし、上述の第2の実施形態と組み合わせることもできる。例えば上述の第1の実施形態と組み合わせた場合、第1のコマンド(退避コマンド)および第2のコマンド(復帰コマンド)の各々は、何れかの第1のメモリ210に含まれる複数の領域のうちの何れかを識別する第1パラメータと、アドレス空間に含まれる複数の領域のうちの何れかを識別するアドレス空間領域識別情報を示す第2パラメータとを有する。制御部240の具体的な動作内容は、上述の第1の実施形態と同様である。
また、例えば上述の第2の実施形態と組み合わせた場合、第1のコマンド(退避コマンド)および第2のコマンド(復帰コマンド)の各々は、何れかの第1のメモリ210に含まれる複数の領域のうちの何れかの領域を識別する第1パラメータと、第2のメモリ220に含まれる複数の領域のうちの何れかの領域を識別する第3パラメータとを有する。制御部240の具体的な動作内容は、上述の第1の実施形態と同様である。
以上、本発明の実施形態を説明したが、上述の各実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
例えば、巨大なデータを扱うデータ処理アプリケーションや、インメモリデータベースなどのアプリケーションプログラムでは、主記憶のデータの退避と復帰をOSに任せるのではなく、アプリケーションプログラム自身が退避すべきデータ領域を判断し、退避や復帰のコマンドを直接発行できた方が、データの入れ替え回数が減って高速化できる場合がある。そこで、アプリケーションが直接、混載型の半導体記憶装置20Xに対して移動要求コマンドを送れるように、アプリケーションが移動要求コマンドを発行するためのシステムコールをOSが提供する形態であってもよい。この場合、OSの仮想アドレスと物理アドレスの変換機構は、混載型の半導体記憶装置20X内のデータの退避と復帰に関与しないので、第1のメモリ210上に配置されたデータが、アプリケーションプログラムが管理するデータ全体の中の、どの部分に対応しているかのマッピングはアプリケーションプログラム内で管理されることになる。
なお、上述した各実施形態および各変形例は任意に組み合わせることができる。