(57)【要約】【課題】処理量が少ないデータ転送が可能なメモリシステムを提供する。【解決手段】半導体記憶装置は、メモリ(14)と、制御部(12, 13)を含む。メモリは、データと、データを特定するための検索キーとデータが格納されている実アドレスと対応付けたエントリを複数含む検索情報と、を保持する。制御部は、第１コマンドを受け取ると、第１コマンドが検索キーを特定する場合はこの検索キーを含むエントリに対応するデータを出力し、第１コマンドが実アドレスを特定する場合はこの実アドレスを含むエントリに対応するデータを出力する。【選択図】      図１
2013030254.tif 000002
【特許請求の範囲】
【請求項１】
データと、前記データを特定するための検索キーと前記データが格納されている実アドレスと対応付けたエントリを複数含む検索情報と、を保持するメモリと、
第１コマンドを受け取ると、前記第１コマンドが前記検索キーを特定する場合はこの検索キーを含むエントリに対応するデータを出力し、前記第１コマンドが前記実アドレスを特定する場合はこの実アドレスを含むエントリに対応するデータを出力する制御部と、
を具備することを特徴とする半導体記憶装置。
【請求項２】
ＤＭＡコントローラをさらに具備し、前記実アドレスを特定する第１コマンドは、前記ＤＭＡコントローラにより発行されることを特徴とする請求項１に記載の半導体記憶装置。
【請求項３】
前記第１コマンドは、検索条件を特定可能であり、前記制御部は前記検索条件に基づいた順番でデータを出力することを特徴とする請求項１または２に記載の半導体記憶装置。
【請求項４】
データと、前記データを特定するための検索キーと前記データが格納されている実アドレスと対応付けたエントリを複数含む検索情報と、を保持するメモリと、
第２コマンドを受け取ると前記検索情報の複数のエントリから前記第２コマンドにより特定される検索キーを含むエントリを特定するデータを外部に出力し、さらに第３コマンドを受け取ると前記第３コマンドにより特定されるエントリに対応するデータを外部に出力する制御部と、
を具備することを特徴とする半導体記憶装置。
【請求項５】
コマンド解析部をさらに具備し、前記コマンド解析部は、検索キーを特定し、この検索キーに対応するデータを前記メモリから読み出すための第４コマンドを受け取り、前記第４コマンドに基づいて前記第２コマンドと前記第３コマンドを生成することを特徴とする請求項４に記載の半導体記憶装置。
【請求項６】
データと、前記データを特定するための検索キーと前記データが格納されている実アドレスと対応付けたエントリを複数含む検索情報と、を保持するメモリと、
第５コマンドを受け取ると前記検索情報の複数のエントリから前記第５コマンドにより特定される検索キーを含むエントリに対応する第１データ集合を特定し、さらに第６コマンドを受け取ると前記第６コマンドにより特定される検索キーを含むエントリに対応する第２データ集合を特定し、かつ前記第６コマンドにより指定される集合演算を前記第１データ集合と前記第２データ集合に対して実行し、出力する制御部と、
を具備することを特徴とする半導体記憶装置。
【請求項７】
ＩＤ付与部をさらに備え、前記ＩＤ付与部は、前記第５コマンド及び前記第６コマンドにより実行される複数の集合演算が並列に実行される場合に、それぞれの集合演算を実行する前記第５コマンドおよび第６コマンドの組に対してＩＤを付与することを特徴とする請求項６に記載の半導体記憶装置。
【請求項８】
前記検索キーは、少なくとも前記データ中に含まれる単語、データのファイル名、前記ファイル名の拡張子、データの書き換え頻度を含むことを特徴とする請求項１乃至７いずれか１項に記載の半導体記憶装置。
【請求項９】
前記エントリは前記データ毎に備えられ、１つのエントリに複数の検索キーを含むことを特徴とする請求項１乃至８いずれか１項に記載の半導体記憶装置。
【請求項１０】
ホスト機器と、
前記ホスト機器と接続された半導体記憶装置を備え、
前記半導体記憶装置は、データと、前記データを特定するための検索キーと前記データが格納されている実アドレスと対応付けたエントリを複数含む検索情報と、を保持するメモリと、
前記ホスト機器から第１コマンドを受け取ると、前記第１コマンドが前記検索キーを特定する場合はこの検索キーを含むエントリに対応するデータを前記ホスト機器に出力し、前記第１コマンドが前記実アドレスを特定する場合はこの実アドレスを含むエントリに対応するデータを前記ホスト機器に出力する制御部と、
を具備することを特徴とする情報処理装置。
【請求項１１】
前記半導体記憶装置は、ＤＭＡコントローラをさらに具備し、前記実アドレスを特定する第１コマンドは、前記ＤＭＡコントローラにより発行されることを特徴とする請求項１０に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、半導体記憶装置、情報処理装置に関する。
【背景技術】
【０００２】
連想メモリが知られている。連想メモリではないメモリに対しては、ホストは、メモリ中のデータを、このデータが記憶されているメモリ中の領域のアドレスにより特定する。一方、連想メモリでは、データに関連付けられているメタデータ（キー）を指定してメモリ中のデータを特定する。複数のメタデータに対する論理演算を通じて読み出されるデータを特定することが考えられる。このような複数のメタデータに対する演算を含んだデータ読み出しは、演算等の処理の量が多い。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００２−２７９７８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
処理量が少ないデータ転送が可能な半導体記憶装置を提供しようとするものである。
【課題を解決するための手段】
【０００５】
一実施形態によるメモリシステムは、半導体記憶装置は、メモリと、制御部を含む。メモリは、データと、データを特定するための検索キーとデータが格納されている実アドレスと対応付けたエントリを複数含む検索情報と、を保持する。制御部は、第１コマンドを受け取ると、第１コマンドが検索キーを特定する場合はこの検索キーを含むエントリに対応するデータを出力し、第１コマンドが実アドレスを特定する場合はこの実アドレスを含むエントリに対応するデータを出力する。
【図面の簡単な説明】
【０００６】
【図１】第１実施形態に係るメモリシステムのブロック図。
【図２】メタデータテーブルのフォーマットを例示する図。
【図３】第１実施形態に係るメモリシステムの動作を示す図。
【図４】第１実施形態に係るメモリシステムの動作を示すフローチャート。
【図５】第２実施形態に係るメモリシステムのブロック図。
【図６】第２実施形態に係るメモリシステムの動作を示す図。
【図７】第２実施形態に係るメモリシステムの動作を示すフローチャート。
【図８】第２実施形態に係るメモリシステムの動作主体のバリエーションを示す図。
【図９】第３実施形態に係るメモリシステムのブロック図。
【図１０】第３実施形態に係るメモリシステムの動作を示す図。
【図１１】第３実施形態に係るメモリシステムの動作を示すフローチャート。
【図１２】第４実施形態に係るメモリシステムがサポートするコマンドを例示する図。
【図１３】第４実施形態に係るメモリシステムがサポートするコマンドを例示する図。
【図１４】第４実施形態に係るメモリシステムがサポートするコマンドのパラメータの例を示す図。
【図１５】第４実施形態に係るメモリシステムのブロック図。
【図１６】第４実施形態に係るメモリシステムの一動作を示す図。
【図１７】第４実施形態に係るメモリシステムの一動作を示す図。
【図１８】第４実施形態に係るメモリシステムの一動作を示す図。
【図１９】第４実施形態に係るメモリシステムの一動作を示す図。
【図２０】第４実施形態に係るメモリシステムがサポートするコマンドを例示する図。
【図２１】第４実施形態に係るメモリシステムの一動作を示す図。
【図２２】第４実施形態に係るメモリシステムがサポートするコマンドを例示する図。
【発明を実施するための形態】
【０００７】
実施形態の説明に先立ち、連想メモリについて簡単に説明する。連想メモリにアクセスするホストは、メモリにデータを書き込むために、データにメタデータ（キー）を付する。キーは、例えば、書き込み対象のデータ（書き込みデータ）中に含まれる単語、拡張子等の様々なタイプのものを含み得、複数個のキーを含み得る。ホストは、任意の方法により書き込みデータに付されるキーを生成する。ホストは、連想メモリへのデータ書き込みのために、例えばｐｕｔコマンドを用いる。ホストは、ｐｕｔコマンドとともに、書き込みデータとキーを連想メモリに供給する。連想メモリは、書き込みデータに加えて、メタデータテーブルを保持している。メタデータテーブルは、キーに関する様々なデータの集合であり、１つのデータ（例えばファイル）データごとに１つのエントリを有し、このようなエントリを複数個含んでいる。メモリを制御するコントローラは、書き込みデータおよびキーを受け取ると、書き込みデータをメモリの空き領域に保持し、メタデータテーブル中の空きエントリにキーおよびこのキーとセットになっている書き込みデータが保持される領域を特定するためのアドレスを書き込む。各エントリには、有効／無効を示す情報が設けられており、無効のエントリを探すことによって空きエントリが見つかる。
【０００８】
連想メモリからのデータの読み出しを望むホストは、例えばホストのユーザによって入力されたキーを用いてデータを特定する。データ読み出しには、例えばｇｅｔコマンドが用いられる。ホストは、ｇｅｔコマンドとともにキーを連想メモリに供給する。連想メモリは、この検索対象のキーを受け取ると、この検索キーを含んだエントリを検索する。そして、発見された全エントリ中に記載のアドレスに保持されている全てのデータをホストに送信する。
【０００９】
連想メモリ中のデータの消去を望むホストは、ｄｅｌｅｔｅコマンドを使用する。ホストは、ｄｅｌｅｔｅコマンドとともにキーを連想メモリに供給する。連想メモリは、ｄｅｌｅｔｅコマンドを受け取ると、検索キーを含むエントリを見つける。連想メモリは、見つけられたエントリの有効／無効表示を無効にする。
【００１０】
ユーザは、連想メモリに対して、１つの検索キーを直接的に用いる代わりに、１つまたは複数の検索キーに対する論理演算を用いて高度な検索を行なうことを望む場合がある。より具体的には、複数の検索キーを用いた検索があり得る。そのような検索では、メモリは、まず、１つ目の検索キーを含んだエントリを見つけ、見つかった全エントリの各々に対応するデータがホストに送信される。次に、メモリは、２つ目の検索キーを含んだエントリを見つけ、見つかった全エントリの各々に対応するデータをホストに送信する。ホストは、こうして全検索キーについてのデータを受け取る。次いで、ホストは、受け取ったデータの中から、全ての検索キーについてヒットしたデータを例えばＡＮＤ演算により見つける。ここで言うＡＮＤ演算とは、１つ目の検索キーについてのデータの集合と、２つ目の検索キーについてのデータの集合との共通集合を抽出する集合演算を指す。こうして、ホストは、検索対象の全てのキーを含んだデータを抽出する。
【００１１】
以上のようなＡＮＤ演算を含む論理演算の実行のために、ホストおよびメモリは大量の処理を必要とする。また、ホストでの論理演算の結果不要となるデータであってもメモリからホストに転送される。さらに、メモリにおいてヒットしたエントリに対応するデータが次々と長期間にわたってメモリからホストに転送されるので、その間、ホストにおける他の処理は遅延され得る。以上のように、処理負荷および効率の点で改善が望まれる。以上の説明は、ＡＮＤ演算に対するものであるが、その他の論理演算（例えばＯＲ演算）等についても同様である。ここで言うＯＲ演算とは、１つ目の検索キーについてのデータの集合と、２つ目の検索キーについてのデータの集合との和集合を抽出する集合演算を指す。後述のＮＯＴ演算についても同様で、検索キーについてのデータの補集合を指す。
【００１２】
以下に、このような知見に基づいて構成された実施形態について図面を参照して説明する。なお、以下の説明において、略同一の機能及び構成を有する構成要素については、同一符号を付し、重複説明は必要な場合にのみ行う。また、以下に示すいずれの実施形態も、その実施形態の技術的思想を具体化するための装置や方法を例示するものであって、諸実施形態の技術的思想は下記の実例に限定されない。実施形態の技術的思想は、特許請求の範囲において、種々の変更を加えることができる。
【００１３】
また、いずれの機能ブロック（モジュール）も、ハードウェア、コンピュータソフトウェアのいずれかまたは両者を組み合わせたものとして実現されることが可能である。このため、各ブロックがこれらのいずれでもあることが明確となるように、概してそれらの機能の観点から以下に説明する。このような機能が、ハードウェアとして実行されるか、またはソフトウェアとして実行されるかは任意である。当業者は、具体的な実施態様ごとに、種々の方法でこれらの機能を実現し得るが、いずれの実現の手法も実施形態の範疇に含まれる。また、各機能ブロックが、以下の具体例のように区別されていることは必須ではない。例えば、一部の機能が以下の説明において例示されている機能ブロックとは別の機能ブロックによって実行されてもよい。さらに、例示の機能ブロックがさらに細かい機能サブブロックに分割されていてもよい。どの機能ブロックによって特定されるかによって実施形態は限定されない。
【００１４】
（第１実施形態）
図１は、第１実施形態に係るメモリシステム（半導体記憶装置、情報処理装置）のブロック図である。図１に示されるように、メモリシステム１は、ホスト装置（以下、単にホストと称する）２と通信する。ホスト２は、ＣＰＵ（central processing unit）２１、ＲＡＭ（random access memory）２２等を含んでいる。ＲＡＭは、例えばＤＲＡＭ（dynamic random access memory）である。ＣＰＵ２１は、バス２３によってＲＡＭ２２と接続されている。ＣＰＵ２１は、ＲＯＭ等のストレージからＲＡＭ２２上に読み出された制御プログラムに従って所定の処理を実行する。各処理は、ＣＰＵ２１と制御プログラムによって実現されるモジュールによって実行される。モジュールには、少なくとも、コマンド生成モジュール２４、論理演算モジュール２６が含まれる。図では、便宜上、これらのモジュールは、ホスト２内においてＣＰＵ２１およびＲＡＭから独立して描かれている。
【００１５】
メモリシステム１は、ハードウェア上の構成として、例えばプロセッサ、ＲＡＭ、ＲＯＭを有する。動作の際、ＲＯＭに格納されている制御プログラム（命令）がＲＡＭ上に読み出される。プロセッサは、このプログラムに従って所定の処理を実行する。以下に述べるメモリシステム１中のメモリ以外の諸機能ブロックは、ＲＡＭ上の制御プログラムに従ってＣＰＵによって実行されることによって実現される。または、機能ブロックは専用のハードウェア（チップ等）によって実現されもよい。
【００１６】
メモリシステム１は、ホストインターフェース１１、ローカルコントローラ１２、メモリコントローラ１３、メモリ１４を含んでいる。ホストインターフェース１１は、バス２３によってＣＰＵ２１（またはＣＰＵ２１およびプログラムにより実現されるホスト２中のインターフェースモジュール）と接続されている。ホストインターフェース１１は、メモリシステム１とホスト２との間のインターフェースを取るのに必要なハードウェア、ソフトウェアからなる。ホストインターフェース１１は、メモリシステム１とホスト２とが通信するのに必要な様々な取り決めを規定し、ホスト２（またはホスト２中のインターフェースモジュール）およびホストインターフェース１１がと相互に認識可能な各種のコマンドの組を備えている。
【００１７】
ホストインターフェース１１は、ＤＭＡ（direct memory access）コントローラ１６を含んでいる。ＤＭＡコントローラ１６は、プロセッサを介さずに何らかの２つの領域間でのデータの転送を司る。ＤＭＡコントローラ１６は、実アドレスの指定を通じてデータを特定する。実アドレスとは、物理アドレスおよび論理アドレスのいずれかを指す。
【００１８】
ローカルコントローラ１２は、ホストインターフェース１１と通信可能に接続されている。ローカルコントローラ１２は、ホスト２から受け取ったコマンドを解析し、コマンドにより命じられる処理を実行するための様々なタスクを作成する。ローカルコントローラ１２およびホストインターフェース１１は、上記のｐｕｔ、ｇｅｔ、ｄｅｌｅｔｅコマンドをサポートしており、さらに後述のコマンドを全てサポートしている。ローカルコントローラ１２は、メモリコントローラ１３と通信可能に接続されている。ローカルコントローラ１２は、コマンド解析モジュール３１、転送モジュール３２、検索モジュール３３、メモリ制御モジュール３４、判断モジュール３５等を含んでいる。各モジュールは、後述のローカルコントローラ１２の対応する特定の処理の実行を担う。
【００１９】
メモリコントローラ１３は、ローカルコントローラ１２からメモリ１４が関与するタスクを受け取り、タスクを実行するための指示をメモリ１４に送信する。すなわち、メモリコントローラ１３は、メモリ１４への特定のデータの書き込み、メモリ１４からの特定のデータの読み出し、メモリ１４中の特定のデータの消去を、メモリ１４用のコマンドおよび処理手順に従って実行する。
【００２０】
メモリコントローラ１３は、ＣＡＭ（content addressable memory（連想メモリ））モジュール１７を含んでいる。ＣＡＭモジュール１７は、ホストからの検索キーを用いるコマンドを実際に実行するためのデータの書き込み、読み出し、消去等をメモリ１４に対して実行する。ＣＡＭモジュール１７は、専用のハードウェアによって実現されてもよいし、メモリシステム１中のＲＡＭ上の制御プログラムにメモリシステム１中のプロセッサの動作が従うことを通じて実現されてもよい。メモリコントローラ１３はまた、レジスタ／バッファ１８を含んでいる。レジスタ／バッファ１８は、メモリコントローラ１３による何らかの処理の最中のデータを一時的に保持する。
【００２１】
メモリ１４は、メモリコントローラ１３と通信可能に接続されている。メモリ１４は、種々のタイプの不揮発性のメモリのうちの任意のものにより実現される。そのようなメモリには、例えばＮＡＮＤ型フラッシュメモリが含まれる。ＮＡＮＤ型フラッシュメモリは、ページ単位でデータを書き込みおよび読み出す。ページは、複数の直列接続されたメモリセルの集合のメモリ空間からなり、固有の物理アドレスを割り当てられている。また、ＮＡＮＤ型フラッシュメモリは、ブロック単位でデータを消去する。各ブロックは、連続する物理アドレスを有する複数のページからなる。各メモリセルは、いわゆる積層ゲート構造のＭＯＳＦＥＴ（metal oxide semiconductor field effect transistor）からなる。各セルトランジスタは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じた情報を記憶する。メモリ１４はまたバッファを含んでいる。
【００２２】
メモリ１４がＮＡＮＤ型フラッシュメモリである場合、メモリ１４は、ＳＬＣ（single level cell）タイプであっても、ＭＬＣ（multi level cell）タイプであってもよい。ＳＬＣタイプは、１つのセルが１ビットのデータを保持する。ＭＬＣタイプは、１つのセルが２ビット以上のデータを保持する。メモリ１４は、１セル当たり１または複数ビットのデータを保持および読み出すことができるように構成されている。メモリ１４は、１つに限らず複数のメモリチップを含んでいてもよい。チップごとに、または各チップ中の領域ごとに、ＳＬＣタイプまたはＭＬＣタイプとしての使用が分けられていてもよい。
【００２３】
メモリ１４は、データ本体（ファイル等）を保持するファイル領域４１と、メタデータを保持するＣＡＭデータ領域４２を含んでいる。ＣＡＭデータ領域４２は、連想メモリの機能に用いられるメタデータテーブルを保持する。これらの領域は、例えばメモリ１４中の利用可能な全ブロックのうちのいくつかを専用に用いることで実現することができる。
【００２４】
メモリ１４がＮＡＮＤ型フラッシュメモリである場合、書き込み済みのデータを上書きすることは禁止されている等の制約が存在する。そこで、ローカルコントローラ１２からの指示を遂行するために、アドレスの変換を実行および管理する場合がある。具体的には、メモリコントローラ１３は、ローカルコントローラ１２から受け取ったデータに付された論理アドレスと、当該データを保持するファイル領域中の領域の物理アドレスと、の間の変換テーブルを作成し、これを用いる。変換テーブルは、論物変換テーブルなどとして当業者に知られている。メモリ４１への上書きに相当する処理は、メモリコントローラ１３によって、変換テーブルを用いて間接的に遂行される。
【００２５】
メタデータテーブルは、例えば図２に示されるようなフォーマットを有する。図２に示されるように、メタデータテーブルは、複数のエントリを有する。各エントリは、個別のデータと関連付けられている。１つのエントリは、このエントリに対応するデータと関連付けられている１または複数のキーと、このデータが保持されているファイル領域４１中の領域を特定するためのアドレスと、エントリの有効／無効表示を少なくとも含んでいる。キーとして、様々な要素を用いることができる。例えば、データに含まれる単語、データのファイル名、データの拡張子、書き換え頻度等が含まれる。
【００２６】
次に、図３および図４を参照して、メモリシステム１の動作について説明する。各機能ブロックのさらなる詳細事項についても同時に記述する。
【００２７】
図３は、第１実施形態に係るメモリシステムの動作を概略的に示している。図４は、第１実施形態に係るメモリシステムの動作を概略的に示しており、図３に対応するフローチャートである。図３および図４に示されるように、ホスト２は、ｋｅｙ１、ｋｅｙ２、ｋｅｙ３を検索キーとして含むデータの検索の依頼を受けたとする。この依頼は、コマンドｇｅｔ（ｋｅｙ１＆ｋｅｙ２＆ｋｅｙ３）の実行に相当する。このような依頼に対して、ホスト２のコマンド生成モジュール２４は、この依頼を複数の別のコマンドに翻訳、すなわち、当該依頼を実現するためのコマンドを生成する。具体的には、コマンドｆｉｎｄ（ｋｅｙ１＆ｋｅｙ２＆ｋｅｙ３）と、コマンドｒｅａｄ（ヒット／ミスビット列）に分解する。ｆｉｎｄコマンドは、コマンド中で指定されている検索キーをキーとして含むか否かを有効な全てのエントリごとに示したビットの集合の出力を命じるコマンドである。コマンドｒｅａｄ（ヒット／ミスビット列）は、ｒｅａｄコマンド中のビット列により特定されるエントリに対応するデータ（エントリ中に記載のアドレスにより特定されるファイル領域４１中の領域中のデータ）をホスト２に送信することを命じるコマンドである。これらの２種のコマンドについては、後に詳述する。
【００２８】
コマンド生成モジュール２４は、ｆｉｎｄ（ｋｅｙ１＆ｋｅｙ２＆ｋｅｙ３）コマンドを、さらに、検索キーごとのｆｉｎｄコマンドに分解する。本例では、コマンドｆｉｎｄ（ｋｅｙ１）、ｆｉｎｄ（ｋｅｙ２）、ｆｉｎｄ（ｋｅｙ３）に分解する。得られたコマンドは、ホスト２中の制御モジュールの制御によって順次メモリシステム１に送信される。メモリシステム１は、ホストインターフェース１１を介してローカルコントローラ１２において、コマンドｆｉｎｄ（ｋｅｙ１）、ｆｉｎｄ（ｋｅｙ２）、ｆｉｎｄ（ｋｅｙ３）を受け取る（ステップＳ１）。なお、ローカルコントローラ１２（コマンド解析モジュール３１）によってｆｉｎｄ（ｋｅｙ１＆ｋｅｙ２＆ｋｅｙ３）コマンドが受け取られ、次いでコマンドｆｉｎｄ（ｋｅｙ１）、ｆｉｎｄ（ｋｅｙ２）、ｆｉｎｄ（ｋｅｙ３）に分解されてもよい。ホストインターフェース１１およびローカルコントローラ１２は、ｆｉｎｄコマンドおよびｒｅａｄコマンドをサポートしている。
【００２９】
ローカルコントローラ１２（検索モジュール３３、メモリ制御モジュール３４）は、１つ目のｆｉｎｄコマンドを、メモリコントローラ１３への処理を通じて実行する。より具体的には、メモリコントローラ１３は、ＣＡＭモジュール１７を通じて、ｆｉｎｄ（ｋｅｙ１）コマンドを得ると、ＣＡＭデータ領域４２中のメタデータテーブル５１にアクセスして検索キーｋｅｙ１を含む有効なエントリを見つける。そして見つかった１または複数のエントリを特定するビット列を生成する（ステップＳ２）。このビット列の各ビットは１つのエントリに対応しており、対応するエントリのヒット／ミスを示しており、ヒット／ミスビット列５３と称する。
【００３０】
ヒット／ミスビット列５３の生成は、例えば、まずメタデータテーブル５１中の各エントリを順次ＣＡＭモジュール１７に読み出すことと、各エントリ中の記述と検索キー（現在は、ｋｅｙ１）との比較によって検索キーを含むエントリを発見することを含む。そのために、例えばＣＡＭモジュール１７は、メモリコントローラ１３を通じてメモリシステム１中のＲＡＭにエントリを順次読み出し、読み出されたエントリ中の記述と検索キーとを比較する。そして、ヒットしたエントリを特定する情報を順次例えばレジスタ／バッファ１８で保持してヒット／ミスビット列５３を生成する。図中の要素５２は、各エントリについての有効／無効表示である。
【００３１】
メモリ１４のみでＣＡＭの機能を実現できる場合がある。すなわち、メモリ１４は内部にＣＡＭデータ領域４２中の全エントリに対する検索キー比較回路を持ち、メモリ１４に検索キーを入力すると、メモリ１４から検索キーが含まれるかの判定結果すなわちヒット／ミスビット列が出力される。このようなメモリ１４が用いられる場合、ＣＡＭモジュール１７は、検索キーをメモリ１４に指定して返ってきたヒット／ミスビット列をレジスタ／バッファ１８で保持すればよい。
【００３２】
次に、ＣＡＭモジュール１７は、ローカルコントローラ１２（転送モジュール３２）およびホストインターフェース１１を通じて、ヒット／ミスビット列５３をホスト２に送信する（ステップＳ３）。ホスト２は、受信した、１つ目の検索キーｋｅｙ１についてのヒット／ミスビット列５３を例えばＲＡＭ２２上で保持する。
【００３３】
次に、ローカルコントローラ１２（判断モジュール３５）は、全てのｆｉｎｄコマンドが実行されたかを判断する（ステップＳ４）。未処理のｆｉｎｄコマンドがあると、未処理のｆｉｎｄコマンドが無くなるまでステップＳ２、Ｓ３が繰り返される。本例では、ＣＡＭモジュール１７は、２つ目のｆｉｎｄコマンド（すなわち検索キーｋｅｙ２についてのｆｉｎｄコマンド）を、１つ目のｆｉｎｄコマンドと同様に実行する。実行の結果、検索キーｋｅｙ２についてのヒット／ミスビット列５３が生成され、ホスト１によって保持される。同様に、検索キーｋｅｙ３についてのヒット／ミスビット列５３が生成され、ホスト２によって保持される。
【００３４】
全ての検索キーについてのｆｉｎｄコマンドの処理が終了すると、処理はステップＳ５に移行する。ステップＳ５において、論理演算モジュール２６は、ＲＡＭ２２をワークメモリとして用いて、検索キーｋｅｙ１、ｋｅｙ２、ｋｅｙ３の各々についてのヒット／ミスビット列５３のＡＮＤを計算する。ＡＮＤ処理の結果、演算ヒット／ミスビット列を得る。演算ヒット／ミスビット列は、検索キーｋｅｙ１、ｋｅｙ２、ｋｅｙ３の全てを含むメタデータテーブルのエントリを示すビット列からなる。
【００３５】
次に、コマンド生成モジュール２４は、コマンドｒｅａｄ（ｈｉｔ／ｍｉｓｓビット列）を生成し、ホスト２はこのコマンドをメモリシステム１に送信する（ステップＳ５）。ｒｅａｄコマンド中では、演算ヒット／ミスビット列が指定されている。ローカルコントローラ１２（メモリ制御モジュール３４）は、このｒｅａｄコマンドを受け取ると、メモリコントローラ１３を通じて、対応するエントリによって特定されるファイル領域４１中の領域中のデータをホスト２に送信する（ステップＳ６）。すなわち、ホストインターフェース１１を介してローカルコントローラ１２によって受け取られたｒｅａｄコマンドが解析され、解析の結果に基づいてメモリコントローラ１３はＣＡＭデータ領域４２中の各エントリに対応するアドレスを順次読み出す。次いで、メモリコントローラ１３は、読み出されたエントリ中のアドレスに対応するファイル領域４１中の領域からデータを順次読み出し、ローカルコントローラ１２およびホストインターフェース１１を介してホスト２に転送する。
【００３６】
ここまでの説明では、複数の検索キーがＡＮＤで結ばれている例を説明したが、ＯＲの場合もＡＮＤの場合と同様に処理される。すなわち、ＯＲ検索の場合は、ホスト２でＯＲの対象の検索キーについてのヒット／ミスビット列同士のＯＲ演算が行なわれて、演算ヒット／ミスビット列が生成される。
【００３７】
以上説明したように、第１実施形態によれば、論理演算を含んだデータ出力は、検索キーを含むエントリを示すヒット／ミスビット列のメモリシステム１からの出力、ホスト２による複数のビット列に対する論理演算、演算ヒット／ミスビット列に対応するデータのメモリシステム１からの出力として実行される。このため、各検索キーのみを含むデータ自体がメモリシステム１から出力されず、検索キーを含むエントリを特定するビット列および検索キーに対する論理演算を反映するデータのみが出力される。よって、データ転送量が減り、全体として高効率な検索キーによるデータ出力が可能となる。
【００３８】
（第２実施形態）
第２実施形態も、第１実施形態と同じく、検索キーに対する論理演算を含んだ検索に関する。
【００３９】
第２実施形態に係るメモリシステムの構成は、ローカルコントローラ１２の構成を除いて第１実施形態と同じである。図５は、第２実施形態に係るメモリシステムのブロック図である。図５に示されるように、第２実施形態のローカルコントローラ１２は、第１実施形態での全モジュールに加えて論理演算モジュール６１を含んでいる。
【００４０】
図６は、第２実施形態に係るメモリシステムの動作を概略的に示している。図７は、第２実施形態に係るメモリシステムの動作を概略的に示しており、図６に対応するフローチャートである。図６および図７に示されるように、ホスト２は、検索キーに対する論理演算を含むデータの検索の依頼を受けたとする。このような依頼には、具体例として、キーｋｅｙ１とｋｅｙ２のＡＮＤ、またはｋｅｙ１とｋｅｙ２のＯＲ、またはｋｅｙ１のＮＯＴを指定するｇｅｔコマンドが含まれる。依頼の受領に対して、コマンド生成モジュール２４は、ｆｉｎｄコマンド、ａｎｄコマンド（または論理演算に基づいてｏｒコマンドまたはｎｏｔコマンド）、ｒｅａｄコマンドに分割する。図６は、ａｎｄコマンドを含むケースを示している。ａｎｄ（またはｏｒまたはｎｏｔ）コマンドについては後述する。ローカルコントローラ１２は、得られたコマンドをホスト２から受け取る。（ステップＳ１１）。または、ローカルコントローラ１２（コマンド解析モジュール３１）が検索キーに対する論理演算を含んだｇｅｔコマンドを受け取ってｆｉｎｄコマンド、ａｎｄまたはｏｒまたはｎｏｔコマンド、ｒｅａｄコマンドに分割してもよい。
【００４１】
まず、メモリコントローラ１３（検索モジュール３３）は、１または複数の検索キーについてｆｉｎｄコマンドにより指示される処理に類似の処理を行なう。すなわち、検索モジュール３３は、ＣＡＭモジュール１７に１つ目の検索キーｋｅｙ１についてのヒット／ミスビット列の生成を指示する。ＣＡＭモジュール１７は、ステップＳ２を実行して検索キーｋｅｙ１についてのヒット／ミスビット列５３を生成する。第２実施形態の場合、生成されたヒット／ミスビット列５３は、レジスタ／バッファ１８に保持され、メモリシステム１から出力されない（ステップＳ１３）。
【００４２】
次に、論理演算モジュール５２（または判断モジュール３５）は、続くコマンドの種類を識別する（ステップＳ１４）。コマンドがｒｅａｄコマンドである場合、処理はステップＳ２２に移行する。論理演算コマンドがｎｏｔコマンドである場合、処理はステップＳ１５に移行する。ステップＳ１５において、論理演算モジュール６１は、ヒット／ミスビット列５３の全ビットを反転して、得られた演算ヒット／ミスビット列をレジスタ／バッファ１８に保持する（ステップＳ１５）。
【００４３】
論理演算コマンドがａｎｄコマンドまたはｏｒコマンドである場合、検索モジュール３３は、検索キーｋｅｙ１についてのｆｉｎｄコマンドに続いて、ａｎｄコマンドまたはｏｒコマンドを受け取る。ａｎｄコマンドまたはｏｒコマンドは、それぞれｋｅｙ１とともにＡＮＤまたはＯＲ演算の対象である検索キーｋｅｙ２を指定している。ａｎｄまたはｏｒコマンドの受信により、検索モジュール３３の指示に応答してＣＡＭモジュール１７は検索キーｋｅｙ２についてのヒット／ミスビット列５３を生成する（ステップＳ１７）。論理演算モジュール６１は、ａｎｄコマンドおよびｏｒコマンドのいずれを受信したかに基づいて、レジスタ／バッファ１８に保持されている検索キーｋｅｙ１についてのヒット／ミスビット列５３と、ｋｅｙ２についてのヒット／ミスビット列５３に対してＡＮＤまたはＯＲ演算を行なう。論理演算モジュール６１は、得られた演算ヒット／ミスビット列で、レジスタ／バッファ１８に保持されていた検索キーｋｅｙ１についてのヒット／ミスビット列を更新する（ステップＳ１８）。
【００４４】
次に、受信した論理演算コマンドの終了／未終了が判断される（ステップＳ２１）。全ての論理演算が完了していない場合、処理はステップＳ１４に戻る。一方、全ての論理演算が完了していれば、メモリ制御モジュール３４は、演算ヒット／ミスビット列についてのｒｅａｄコマンドを実行する（ステップＳ２２）。すなわち、メモリ制御モジュール３４は、メモリコントローラ１３を通じて、演算ヒット／ミスビット列により特定されるエントリ中のアドレスに対応するファイル領域４１中の領域からデータを読み出す。読み出されたデータは、ローカルコントローラ１２およびホストインターフェース１１を介してホスト２に送信される。
【００４５】
ここまでの説明では、ヒット／ミスビット列および演算ヒット／ミスビット列がいずれもレジスタ／バッファ１８に保持される例を説明した。これは、メモリ１４がＣＡＭ機能を備えていない例に対応し、図８（ａ）に対応する。右上がりのハッチングはヒット／ミスビット列を生成する要素を示し、右下がりのハッチングは演算ヒット／ミスビット列を生成する要素を示す。図８（ａ）の例では、ヒットミスビット列はメモリコントローラ１３（ＣＡＭモジュール１７）によって生成され、演算ヒット／ミスビット列はローカルコントローラ１２（検索モジュール３３）によって生成される。レジスタ／バッファ１８にＣＡＭモジュールの機能が統合されていてハードウェアとして実現されていてもよいし、ＣＡＭモジュール１７がソフトウェアとして実現されていてもよい。一方、メモリ１４がＣＡＭ機能を備えている場合、ヒット／ミスビット列はメモリ１４によって生成され、例えばページバッファにおいて保持される。これは、図８（ｂ）に対応する。図８（ｂ）の例では、メモリ１４がローカルコントローラ１２およびメモリコントローラ１３の指示に従って、各検索キーｋｅｙについてのヒット／ミスビット列を生成し、これらに対する演算ヒット／ミスビット列がローカルコントローラ１２によって生成され、レジスタ／バッファ１８において保持される。
【００４６】
第２実施形態の以上説明した以外の記述については、第１実施形態のものが全て当てはまる。
【００４７】
以上述べたように、第２実施形態によれば、検索キーに対する論理演算を含んだデータ出力の指示は、メモリシステム１によって、検索キーを含むエントリの検索、ヒット／ミスビット列に対する論理演算、演算ヒット／ミスビット列に対応するデータ出力として実行される。これらの処理は全て、メモリシステム１において実行される。このため、個々の検索キーを含むデータ自体がメモリシステム１から出力されず、よって、データ転送量が減り、全体として高効率な検索キーによるデータ出力が可能となる。
【００４８】
（第３実施形態）
第３実施形態は、複数のコマンドの並列処理に関し、第２実施形態に対して付加的に用いられる。
【００４９】
第３実施形態に係るメモリシステムの構成は、ローカルコントローラ１２の構成を除いて第１、第２実施形態と同じである。図９は、第３実施形態に係るメモリシステムのブロック図である。図９に示されるように、第３実施形態のローカルコントローラ１２は、第２実施形態での全モジュールに加えてＩＤ識別モジュール７１を含んでいる。
【００５０】
図１０は、第３実施形態に係るメモリシステムの動作を概略的に示している。図１１は、第３実施形態に係るメモリシステムの動作を概略的に示しており、図１０に対応するフローチャートである。図１０および図１１に示されるように、ホスト２のコマンド生成モジュール２４は、各コマンドにＩＤを含める。ＩＤは、図では、各コマンド中の最初に配置されているパラメータ（０または１を例示）である。特に、第１、第２実施形態のように検索キーに対する論理演算を含むｇｅｔコマンドがｆｉｎｄコマンド、論理演算コマンド、ｒｅａｄコマンドの組合せにより実現される場合、１つのｇｅｔコマンド実行のための一連の複数コマンドに共通のＩＤが付される。図１０では、論理演算コマンドは例としてａｎｄコマンドであり、より具体的には、第１のｇｅｔコマンド（ID=0）は、検索キーｋｅｙ１、ｋｅｙ３のＡＮＤを指定しており、第２のｇｅｔコマンド（ID=1）は、検索キーｋｅｙ２、ｋｅｙ４のＡＮＤを指定している。
【００５１】
まず、コマンド生成モジュール２４は、ＩＤを指定しつつ、ｇｅｔコマンドによる処理を実現するための一連のコマンドを生成する。すなわち、まず、各ｇｅｔコマンド用の１つ目の検索キーｋｅｙ１、２についてのｆｉｎｄコマンドを生成する。すなわち、ＩＤ＝０およびｋｅｙ１を指定するｆｉｎｄコマンドと、ID=1およびｋｅｙ２を指定するｆｉｎｄコマンドを生成する。次いで、ID=0およびｋｅｙ３を指定するａｎｄコマンドと、ID=1およびｋｅｙ４を指定するａｎｄコマンドを生成する。さらに、ＩＤ＝０を指定するｒｅａｄコマンドと、ID=1を指定するｒｅａｄコマンドを生成する。ホスト２は、これらのコマンドをメモリシステム１に送信する。これらのコマンドの送信の順番は、少なくとも同じＩＤを付されたコマンドについて、ｆｉｎｄコマンド、ａｎｄコマンド、ｒｅａｄコマンドの順が保たれていればよい。このように共通のＩＤを付された複数コマンドの送信順が保たれていれば、別ＩＤを付されたコマンドが間に挿入されていても構わない。したがって、コマンドの生成の順序も、送信の順序が保たれていれば上記の例に限られない。
【００５２】
ローカルコントローラ１２は、生成されたコマンドを受け取る（ステップＳ３１）。または、ローカルコントローラ１２（コマンド解析モジュール３１）が検索キーに対する論理演算を含んだ第１のｇｅｔコマンド（ｋｅｙ１、ｋｅｙ３）と第２のｇｅｔコマンド（キーｋｅｙ２、ｋｅｙ４）を受け取って、ＩＤを指定しつつｆｉｎｄコマンド、ａｎｄまたはｏｒまたはｎｏｔコマンド、ｒｅａｄコマンドに分割してもよい。この例の場合、コマンド解析モジュール３１が、下位モジュールとしてＩＤ付与モジュールを含んでいてもよい。
【００５３】
ＩＤ識別モジュール７１は、受け取ったコマンドのＩＤを識別する（ステップＳ３２）。次いで、コマンド解析モジュール３１は、識別されたＩＤについて、コマンドの種類を識別する（ステップＳ３３）。ｆｉｎｄコマンドが受け取られた場合、ＣＡＭモジュール１７は、検索キーについてのヒット／ミスビット列５３を生成する（ステップＳ４１）。メモリ１４がＣＡＭ機能を備えている場合は、ヒット／ミスビット列５３はメモリ１４により生成される。以下の記述でも、ヒット／ミスビット列５３は、実施の態様に基づいてＣＡＭモジュール１７およびメモリ１４の任意の方で生成されるものとする。次に、得られたヒット／ミスビット列５３が、レジスタ／バッファ１８中の指定されたＩＤ用の部分に保持される（ステップＳ４２）。このように、レジスタ／バッファ１８は、ＩＤごとに相互に独立する部分を含んでいる。ステップＳ４１、Ｓ４２は、ＩＤが特定されていることを除いて、第１、第２実施形態のステップＳ２、Ｓ１３と同じである。
【００５４】
ｎｏｔコマンドが受け取られた場合、論理演算モジュール６１は、レジスタ／バッファ１８中の指定されたＩＤ用の部分に保持されているヒット／ミスビット列５３の全ビットを反転して、得られた演算ヒット／ミスビット列５３をレジスタ／バッファ１８中の指定されたＩＤ用の部分に保持する（ステップＳ４４）。ステップＳ４３、Ｓ４４は、ＩＤが特定されていることを除いて、第２実施形態のステップＳ１５と同じである。
【００５５】
ａｎｄコマンドまたはｏｒコマンドが受け取られた場合、ＣＡＭモジュール１７は、検索キーについてのヒット／ミスビット列５３を生成する（ステップＳ４５）。論理演算モジュール６１は、ａｎｄコマンドおよびｏｒコマンドのいずれを受信したかに基づいて、得られたヒット／ミスビット列５３と、コマンドにて指定されているＩＤと同じＩＤ用のレジスタ／バッファ１８の部分に保持されているヒット／ミスビット列とに対して、ＡＮＤまたはＯＲ演算を行なう。論理演算モジュール６１は、得られた演算ヒット／ミスビット列で、指定ＩＤ用のレジスタ／バッファ１８の部分に保持されていたヒット／ミスビット列を更新する（ステップＳ４６）。ステップＳ４５、Ｓ４６は、ＩＤが特定されていることを除いて、第２実施形態のステップＳ１７、Ｓ１８と同じである。
【００５６】
ｒｅａｄコマンドが受け取られた場合、メモリ制御モジュール３４は、指定されたＩＤについての演算ヒット／ミスビット列により特定されるエントリ中のアドレスからデータを読み出す（ステップＳ４７）。読み出されたデータは、ローカルコントローラ１２およびホストインターフェース１１を介してホスト２に送信される。
【００５７】
ステップＳ４２、Ｓ４４、Ｓ４６、Ｓ４７に続いて、判断モジュール３５は、全てのコマンドに対する処理が完了したかを判断する（ステップＳ５１）。未処理のコマンドがある場合、ステップＳ３３、Ｓ４１〜Ｓ４７が実行される。図１０の例では、ＩＤ＝０および１の両方について、ｆｉｎｄコマンド、ａｎｄコマンド、ｒｅａｄコマンドが実行される。この結果、最終的に、検索キーｋｅｙ１、３の両方を含むデータ、および検索キーｋｅｙ２、４の両方を含むデータがホスト２に送信される。図１０では、２つのＩＤが並行して処理される例を示すが、３つ以上のＩＤについてもここまでの説明と同じ原理に則って実行されることが可能である。
【００５８】
以上述べたように、第３実施形態によれば、第２実施形態と同じく、検索キーに対する論理演算を含んだデータ出力の指示は、メモリシステム１によって、検索キーを含むエントリの検索、ヒット／ミスビット列に対する論理演算、演算ヒット／ミスビット列に対応するデータ出力として実行される。このため、第２実施形態と同じ利点を得られる。
【００５９】
また、第３実施形態によれば、各コマンドがＩＤにより識別される。このため、第２実施形態のように、検索キーに対する論理演算を含んだデータ出力指示が複数のコマンドにより実行される場合であっても、検索キーに対する論理演算を含んだデータ出力を複数個並列に実行できる。
【００６０】
（第４実施形態）
第４実施形態はコマンドの拡張に関する。
【００６１】
図１２および図１３は、第４実施形態に係るメモリシステムおよびホストがサポートするコマンドを例示している。より具体的には、図１２および図１３は、第４実施形態に係るｇｅｔコマンドにより指定されるパラメータおよび例を示している。図１２に示されるように、ｇｅｔコマンドは、パラメータとして、key、key_type、target、search_space、summary_types、ranking_method、size、bufferを含んでいる。または、図１３に示されるように、パラメータsize、bufferに代えてhead、numberを含んでいる。
【００６２】
パラメータkeyは、検索キーである。パラメータkeyとして、対応するデータに付されるメタデータだけでなく、拡張子を含んだファイル名とすることもできる。具体的には、例えばfile. wmv、file. txtのような形態で指定される。
【００６３】
パラメータkey_typeは、検索キーの形態を明示しており、より具体的には検索キーが例えば文字データ、画像データ、音声データであることに基づいてそれぞれtext、image、audio等の文字列を含んでいる。パラメータkeyとしてファイル名を用いている場合、パラメータkey_typeとしてfilenameが指定される。
【００６４】
また、パラメータkey_typeとしてcolorを指定することもできる。その場合、パラメータkeyとして、例えばvideo、image、text、書き換え頻度レベル（書き換え頻度レベル１、２、３、…）等が指定される。値colorは、カラー情報に関する値である。カラー情報とは、対象とするデータの書き換え頻度情報（そのデータ／ファイル等がユーザやホストによってどのくらいの頻度で更新されるかの情報）やデータの種類を示す情報である。例えば、カラー情報をエントリに含めておくことにより、複数のタイプのメモリ１４がメモリシステム１に含まれている場合にカラー情報に基づいてデータを格納するメモリ１４を適切に決定できる。具体的には、パラメータkey_typeにcolorが指定されている場合、パラメータkeyに設定されている値video、image、text等に基づいて、格納先がメモリコントローラ１３により決定される。格納先の選択については後述する。
【００６５】
パラメータtargetは、ｇｅｔコマンドが検索の対象とするデータの種類を明示する。データ種類の判定は、例えば拡張子により行なうことができる。パラメータtargetとして、具体的には、例えばwebpage、file、doc、image、audio、videoの指定が可能である。
【００６６】
パラメータsearch_spaceは、ｇｅｔコマンドが検索の対象とする空間を指定しており、探索空間に基づいて例えばweb、disk、memory等の文字列を含んでいる。webはインターネットを介して閲覧可能な対象を探索空間として指定する。diskはメモリ１４およびハードディスク、ネットワークディスク等の、ホストからアクセス可能なディスクを探索空間として指定する。どのディスクを検索するか、ディスク内のどのディレクトリを検索するかの指定も含まれ得る。memoryは、ＲＡＭ２２およびメモリ１４を含むメモリアドレス空間が指定されていることを意味し、後述のＤＭＡに使用する。探索空間の指定は、本実施形態に係るｇｅｔコマンドをメモリシステム１以外の領域を指定できるように適応させるためのものである。すなわち、上にも説明したように、パラメータtargetとして、webまたはメモリ１４以外の領域を対象とするdiskまたはメモリを含むｇｅｔコマンドは、そのようなコマンドを受け取った構成素が、ウェブまたは構成素に接続されているハードディスク等のディスクまたはＲＡＭ等のメモリアドレス空間を探索空間として指定する。
【００６７】
パラメータsummary_typesは、検索結果の要約の種類のリストを明示する。このパラメータは、検索結果のデータが大きい場合に、ホスト側で検索結果の吟味／取捨選択にかかる時間を軽減するために、各検索データを端的に表す要約データを付することができるようにするものである。パラメータranking_methodは、検索されたエントリに順位を付する際に順位が何に基づくかを指定する。一般に、複数の見つかったエントリが存在するため、ホスト２が所望のものを早い段階で取得できるように、エントリに順位を付する。パラメータsizeは、ホスト２中のバッファ（例えばＲＡＭ２２により実現される）のサイズを明示する。パラメータbufferは、ホスト２中のバッファの先頭アドレスを指定する。メモリシステム１は、ヒットしたエントリにより特定される全データのうちで、パラメータranking_methodにより指定される基準に基づいて付された順位の高いものから順に、パラメータsizeによって指定されるサイズを越えない範囲で、パラメータbufferによって指定されるホスト２中のバッファに出力する。ホスト２に出力されない分のデータは、メモリシステム１中の例えばバッファ／レジスタ１８において保持される。または、ホスト２に出力される分だけのデータが随時メモリ１４から読み出されるとしてもよい。メモリシステム１は、ホスト２からこの最初の分のデータの受信が完了した旨の通知を受け取ると、続きの分のデータを出力する。
【００６８】
パラメータheadは、パラメータranking_methodに指定される基準に基づいて順位が付された検索結果データの何番目からデータを受信するかを指定する。パラメータnumberは、検索結果データを最大何個受信するかを指定する。パラメータheadおよびnumberは、パラメータsizeおよびbufferとは異なり、出力を要求されるデータの大きさを順位付き検索結果の開始位置および個数によって指定する。例えば、パラメータhead=1, number=10とすれば検索結果データの１位から１０位までが順に出力される。head=11, number=10として再度ｇｅｔコマンドを発行すれば１１位から２０位までの検索結果が得られる。
【００６９】
図１４は、第４実施形態に係るｇｅｔコマンド（図１２、図１３）のパラメータの一例を示している。２行目はwebから（search_space=web）"toshiba"に関連する（key="toshiba"）画像を(target=image)、テキスト検索する(key_type=text)場合を示しており、検索結果の要約としては縮小版の画像であるサムネイル画像を(summary_types=[thumbnail])、検索結果の順位付けとしてはページランク(ranking_method=page_rank)を指定している。３行目はディスク領域の"/home/"で示されるディレクトリ以下から（search_space=disk"/home/"）、"toshiba"に関連する（key="toshiba"）ファイルを(target=file)、テキスト検索する(key_type=text)場合を示しており、検索結果の要約としてはファイルのサイズと更新日時を（summary_types=[file_size, modified_date]、検索結果の順位付けとしてはファイルの新しいものから古いものへ順位をつける(ranking_method=new_to_old)ことを指定している。４行目はある開始アドレスから一定サイズのデータを読み書きするＤＭＡ転送を検索コマンドとして実現する例で、メモリアドレス空間から（search_space=memory）、バイナリデータを（target=binary_data）、先頭アドレス0x0123abcd以上の（key>=0x0123abcd）アドレスを検索して（key_type=address）、アドレス順に出力する（ranking_method=address）ことを指定している。要約は出力しない（summary_types=null）。ＤＭＡ転送については図１７、１８の説明に付随して後述する。
【００７０】
第４実施形態に係るメモリシステムの構成は、ローカルコントローラ１２の構成を除いて第１実施形態と同じである。図１５は、第４実施形態に係るメモリシステムのブロック図である。図１５に示されるように、第４実施形態のローカルコントローラ１２は、第１実施形態での全モジュールに加えて順位計算モジュール８１を含んでいる。第４実施形態は、第２、第３実施形態とも組み合わせることが可能である。このため、第４実施形態のローカルコントローラ１２は、論理演算モジュール６１（図５）およびＩＤ識別モジュール７１（図９）を含んでいてもよい。
【００７１】
図１６は、第４実施形態に係るメモリシステムの一動作を概略的に示している。より具体的には、図１６は、パラメータranking_methodの指定によるメモリシステム１の応答を示している。図１６および図１７に示されるように、ＣＡＭモジュール１７は、第４実施形態に係るｇｅｔコマンドの受信に応答して、パラメータkeyによって指定される検索キーを含んだ有効エントリを見つける。次に、順位計算モジュール８１は、パラメータranking_methodにより指定される基準に基づいて、ヒットしたエントリの順位を計算する。そして、ローカルコントローラ１２は、各エントリに付された順位に基づいて、順位の小さい方から順に、対応するデータをホスト２に出力する。
【００７２】
次に、図１７〜図１９を参照して、パラメータの種々の設定の例を説明する。図１７、図１８〜図１９は、第４実施形態に係るメモリシステムの一動作を概略的に示している。図１７、図１８は、パラメータの設定を適切に組み合わせることによって、通常のデータ読み出し、すなわち読み出しデータのアドレスとサイズを指定したデータ読み出し（ＤＭＡ転送による読み出しに相当）を、ｇｅｔコマンドによって実現できることを説明する図である。ただし、このようなｇｅｔコマンドを用いたアドレス指定によるデータ読み出しのために、ＣＡＭモジュール１７はエントリが検索キーを含むかどうかの完全一致だけでなく、大小関係の判定もできるように構成されている。また、エントリはkeyとして論理アドレスを含んでいる。このようなデータ格納は、後述のｐｕｔコマンドにより実現可能であり、また、そもそも各エントリは自明なキーとして論理アドレスを含むとしてもよい。論理アドレスは、ホスト２によりデータに割り当てられるアドレスである。
【００７３】
図１７に示されるように、ホスト２は、ｇｅｔコマンドを用いたアドレス指定によるデータ読み出しのために、パラメータkeyとして先頭アドレス以上を対象とすることを示すパラメータおよびパラメータranking_methodとしてaddressを指定するｇｅｔコマンドをメモリシステム１に供給する。ここでいう先頭アドレスは論理アドレスである。ＣＡＭモジュール１７は、このようなｇｅｔコマンドの受信に応答して、検索キー、すなわち先頭アドレス以上の論理アドレスを有するエントリを見つける。次に、順位計算モジュール８１は、ヒットしたエントリに対して論理アドレスの昇順に順位を付する（論理アドレスそのものを順位としてもよい）。そして、メモリコントローラ１３は、エントリの順位に従って、対応するデータを出力する。これにより、先頭アドレスを含んだエントリのデータから論理アドレス順にデータが出力される。または、パラメータkey=allと（全エントリヒット）と指定し、パラメータranking_methodをaddr < 先頭アドレス ? ∞ : addrとすることによっても可能である。すなわち、論理アドレスが指定された先頭アドレスより小さければ順位を無限大として、先頭アドレス以上であればその論理アドレスを順位とする。このようなパラメータの指定により、先頭アドレスより小さいアドレスを含むエントリは順位が無限大になって、実質的にメモリシステム１から出力されない。以上のようなパラメータの指定により、ｇｅｔコマンドを用いたアドレス指定によるデータ読み出しが可能である。したがって、メモリシステム１に、ＤＭＡコントローラ１６を介してＤＭＡの機能をサポートさせることが可能である。
【００７４】
また、図１８に示されるように、図１７のパラメータ指定のうち、ranking_methodを、例えばaddr %4 < 2 ? addr: 0と変える。このように指定すれば、図１７を参照して説明したようにパラメータkeyにより指定された先頭アドレスにより特定されたエントリから、特定の個数ごとのエントリにのみ順位が付される。図の例では、４つごとに最初の２個のエントリのみが順位割付の対象とされる。このような指定を用いれば、例えば、画像データのうちの特定の領域のみを転送することができる（ブロック転送（ＢＬＴ）に相当）。
【００７５】
また、図１９に示されるように、完全一致や大小関係では扱えない類似検索もできる。この場合は、パラメータkey=feature 1、パラメータranking_method=dinstanceと指定される。feature 1は、画像または動画データ等の任意の特徴を記述する具体的な特徴ベクトルである。feature 1の具体例として、例えば、グレースケール画像の場合、画素値ヒストグラム等が挙げられる。ＣＡＭモジュール１７は、このようなｇｅｔコマンドの受信に応答して、検索キーを含むエントリを見つける。ただし、パラメータranking_method=dinstanceの場合、全エントリがヒットして扱われ、以下に述べるように、順位計算モジュール８１は、distanceに基づいてヒットしたエントリに順位を付する。distanceは、例えば、検索キー（特徴ベクトル）と各エントリ中の特徴ベクトルを用いて算出することができる。具体的には、例えば、検索キー中のベクトル要素とエントリの対応する要素同士の差に基づいた算出が可能である。より具体的には、distanceは、（ｘ１−ｙ１）２＋（ｘ２−ｙ２）２＋…＋（ｘｎ−ｙｎ）２とすることができる。ここで、ｘ１およびｙ１は、検索キーおよびある比較対象のエントリの同じベクトル要素である。ｘ２およびｙ２は、ｘ１およびｙ１とは異なるベクトル要素である。ｘｎおよびｙｎについても同様である。メモリコントローラ１３は、付された順位に基づいて（すなわち検索キーに対する類似の程度が高い順序で）、各エントリ中のデータをホスト２に送信する。
【００７６】
図２０は、第４実施形態に係るメモリシステムおよびホストがサポートするコマンドを例示している。より具体的には、図２０は、第４実施形態に係るｐｕｔコマンドにより指定されるパラメータおよび例を示している。図２０に示されるように、ｐｕｔコマンドは、パラメータとして、key、key_type、target、search_space、ranking_method、head、size、bufferを含んでいる。パラメータkey、key_type、target、ranking_methodについてはｇｅｔコマンドの定義と同じである。パラメータsearch_spaceは、データをどこに格納するかをｇｅｔコマンドと同様の手法で指定する。ｐｕｔコマンドの実行は、簡単には空きエントリにキーとデータを追加すればよいが、これから追加しようとするキーに対応するエントリが既にメモリ１４内にある場合にはそれらを上書きすることも考えられる。そこで、ｐｕｔコマンドの実行に当たり、ローカルコントローラ１２はまず指定されたパラメータを用いて検索を行い、ヒットしたエントリの特定と順位付けまでを行う。パラメータheadは、順位付け後のヒットしたエントリの先頭のエントリから何番目のエントリ以降を上書き対象とするかを指定する。パラメータhead=5とすれば、ヒットしたエントリの先頭から５番目以降の各エントリにより特定されるデータが更新対象である。head=1とすれば全てが上書きされ、head=∞とすれば上書きは行われず空きエントリに書き込まれる。パラメータsizeは、書き込みデータのサイズを指定する。パラメータbufferは、ホスト２中のバッファの先頭アドレスを指定する。ｐｕｔコマンドにより書き込まれるデータはこのホスト２中のバッファから読み出される。このような定義のｐｕｔコマンドを用いたアドレス指定によるデータ書き込み（更新）について図２１を参照して説明する。
【００７７】
図２１は、第４実施形態に係るメモリシステムの一動作を概略的に示している。図２１に示されるように、ホスト２は、パラメータkey>=更新対象のデータの論理アドレス（すなわち先頭アドレス）およびパラメータranking_method=addressを指定するｐｕｔコマンドをメモリシステム１に供給する。ＣＡＭモジュール１７は、このようなｐｕｔコマンドの受信に応答して、ｇｅｔコマンドと同様に、先頭アドレスを検索キーとしてそれ以上の論理アドレスを含むエントリを見つける。次に、順位計算モジュール８１は、やはりｇｅｔコマンドと同様に、ヒットしたエントリに対して、パラメータranking_methodにより指定される基準に基づいて順位を付する。ranking_method=addressに従い、各エントリに対して、論理アドレスが順位として付される。こうしてヒットしかつ順位付けされた複数エントリのうちの先頭から何番目のエントリ以降のエントリに対応するデータが書かれるかが、パラメータheadにより指定される。具体的には、パラメータhead=0としておけば、ヒットしたエントリの先頭からの各エントリ中に記載のファイル領域４１のアドレス中のデータが上書きされる。こうして特定された複数エントリにより特定されるファイル領域４１中の部分に、メモリ制御モジュール３４およびメモリコントローラ１３はデータを書き込む。こうして、ｐｕｔコマンドを用いてアドレス指定による（通常の）データの書き込み（ＤＭＡ転送によるデータ書き込みに相当）を行なえる。
【００７８】
書き込みの際、カラー情報に基づいて、格納先をメモリコントローラ１３により選択することが可能である。不揮発性メモリには一般に書き換え回数の限界があり、ＳＬＣ、ＭＬＣなどのメモリのタイプにより書き換え耐性が異なる。そこで、パラメータcolorを参照して書き換え頻度が低いことが期待されるデータについては書き換え耐性の小さなタイプのメモリに、書き換え頻度が高いことが予測されるデータについては書き換え耐性の高いタイプのメモリに格納することでメモリシステム１全体の寿命を伸ばすことができる。例えば、書き換え頻度の低い画像または動画データは書き換耐性の低い（一方で、容量効率の良い）ＭＬＣタイプのＮＡＮＤ型フラッシュメモリに格納され、より頻度の高いたとえばテキストデータは書き換え耐性の高いＳＬＣタイプのＮＡＮＤ型フラッシュメモリに格納される。なお、カラー情報は、明示的にkey_type=colorとして指定されたものからだけでなく、上述のようにパラメータkeyとしてファイル名を用いている場合にはファイル名の拡張子からも判断できる。例えばファイル名がfile.wmvであれば動画データであると判断し、ＭＬＣタイプのＮＡＮＤ型フラッシュメモリに格納し、ファイル名がfile.txtであればテキストデータであると判断し、ＳＬＣタイプのＮＡＮＤ型フラッシュメモリに格納することができる。
【００７９】
図２２は、第４実施形態に係るメモリシステムおよびホストがサポートするコマンドを例示している。より具体的には、図２２は、第４実施形態に係るａｄｄ＿ｋｅｙコマンドにより指定されるパラメータを示している。ａｄｄ＿ｋｅｙコマンドは、書き込み済みのエントリにキーを追加するためのものである。ａｄｄ＿ｋｅｙコマンドは、パラメータとして、key、key_type、target、search_space、ranking_method、head、number、key _to_add、key _to_add_typeを含んでいる。パラメータkey、key _type、target、serch_space、ranking_methodについては、ｇｅｔコマンドと同じである。パラメータheadは、ｐｕｔコマンドと同じである。パラメータnumberは、パラメータheadで指定されたエントリから幾つのエントリを処理対象とするかを指定する。パラメータkey _to_addは追加されるキーを記述している。パラメータkey _to_add_typeは、追加されるキーの形態を明示する。
【００８０】
ＣＡＭモジュール１７は、ａｄｄ＿ｋｅｙコマンドの受信に応答して、ｇｅｔコマンドと同様に、検索キーを含むエントリを見つける。次に、順位計算モジュール８１は、やはりｇｅｔコマンドと同様に、ヒットしたエントリに対して、パラメータranking_methodにより指定される基準に基づいて順位を付する。次に、ローカルコントローラ１２は、順位付けされた複数エントリの先頭からパラメータheadにより指定される数だけ大きいエントリからパラメータnumberにより指定される個数の連続するエントリを特定する。次に、メモリ制御モジュール３４およびメモリコントローラ１３は、このように特定された複数エントリに、パラメータkey_to_addにおいて記述されているキー、およびパラメータkey _to_add_typeにおいて記述されているキー形態を付加する。ａｄｄ＿ｋｅｙコマンドを使用すれば、キーのみの追加を要求されたデータを新たなエントリとして登録することなく、既にメモリ１４に存在するデータに対してキーの追加が可能である。ａｄｄ＿ｋｅｙコマンドによりキーを追加されるエントリは、本実施形態の一用法として図２１に説明したアドレス指定により書き込まれたエントリだけでなく、第１〜第３実施形態で説明したように一般的なキーとともに書き込まれたエントリも対象である。
【００８１】
以上説明したように、第４実施形態に係るメモリシステムによれば、ｇｅｔコマンドおよびｐｕｔコマンドは、パラメータranking_methodを始め、様々なパラメータを含んでいる。これにより、検索の範囲を限定し、要約や順位を付す手段が提供され、ホスト側での検索結果の吟味／取捨選択を容易にするメモリシステムが提供できる。また、このようなコマンドを用いて、パラメータkeyとして当該１つのデータの先頭アドレスを付するとともに、パラメータranking_methodとしてaddressを指定すれば、ｇｅｔまたはｐｕｔコマンドを用いたアドレス指定によるデータの書き込みおよび読み出しが可能である。すなわち、検索キーを指定したデータの読み書きとアドレスを指定したデータの読み書きを共通のコマンド体系でサポートできる。
【００８２】
その他、各実施形態は、上記のものに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で、種々に変形することが可能である。さらに、上記実施形態には種々の段階が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の実施形態が抽出され得る。例えば、上記各実施形態に示される全構成要件から幾つかの構成要件が削除されても、この構成要件が削除された構成が実施形態として抽出され得る。
【符号の説明】
【００８３】
１…メモリシステム、２…ホスト、１１…ホストインターフェース、１２…ローカルコントローラ、１３…メモリコントローラ、１４…メモリ、１６…ＤＭＡコントローラ、１７…ＣＡＭモジュール、１８…レジスタ／バッファ、２１…ＣＰＵ、２２…ＲＡＭ、２３…バス、２４…コマンド生成モジュール、２６…論理演算モジュール、３１…コマンド解析モジュール、３２…転送モジュール、３３…検索モジュール、３４…メモリ制御モジュール、３５…判断モジュール、４１…ファイル領域、４２…ＣＡＭデータ領域、５１…メタデータテーブル、５２…有効／無効表示、５３…ヒット／ミスビット列、６１…論理演算モジュール、７１…ＩＤ識別モジュール、８１…順位計算モジュール。
【図１】
2013030254.tif 000003
【図２】
2013030254.tif 000004
【図３】
2013030254.tif 000005
【図４】
2013030254.tif 000006
【図５】
2013030254.tif 000007
【図６】
2013030254.tif 000008
【図７】
2013030254.tif 000009
【図８】
2013030254.tif 000010
【図９】
2013030254.tif 000011
【図１０】
2013030254.tif 000012
【図１１】
2013030254.tif 000013
【図１２】
2013030254.tif 000014
【図１３】
2013030254.tif 000015
【図１４】
2013030254.tif 000016
【図１５】
2013030254.tif 000017
【図１６】
2013030254.tif 000018
【図１７】
2013030254.tif 000019
【図１８】
2013030254.tif 000020
【図１９】
2013030254.tif 000021
【図２０】
2013030254.tif 000022
【図２１】
2013030254.tif 000023
【図２２】
2013030254.tif 000024