(57)【要約】【課題】性能を向上することができるストレージデバイスを実現する。【解決手段】実施形態によれば、ストレージデバイスは、複数のブロックを含む不揮発性メモリと、コントローラとを具備する。前記コントローラは、前記ホスト上で動作している総プロセス数を示す情報を前記ホストから受信する。前記コントローラは、前記総プロセス数が第１の閾値を上回っているとの判定をした後、前記不揮発性メモリの少なくとも一つのブロックに格納されているデータを前記不揮発性メモリの他の少なくとも一つのブロックに移動する処理を実行する。【選択図】図８
2019168822.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なストレージデバイスであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備し、
前記コントローラは、
前記ホスト上で動作している総プロセス数を示す情報を前記ホストから受信し、
前記総プロセス数が第１の閾値を上回っているとの判定をした後、前記不揮発性メモリの少なくとも一つのブロックに格納されているデータを前記不揮発性メモリの他の少なくとも一つのブロックに移動する処理を実行するように構成されている、ストレージデバイス。
【請求項２】
前記複数のブロックの各々は、一つのメモリセルに格納されるビットの数を示す多値度が互いに異なる複数種のブロックのいずれかとして選択的に使用され、
前記コントローラは、前記総プロセス数が前記第１の閾値を上回っているとの判定をした後、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行するように構成されている請求項１記載のストレージデバイス。
【請求項３】
前記コントローラは、
前記ホストにおいて生成された各プロセスの識別子と前記生成された各プロセスがシステムプロセスまたはユーザプロセスのいずれであるかを示す種別とを示す情報と、データの書き込みを要求したプロセスの識別子が各々に付与された書き込み要求それぞれとを前記ホストから受信し、
前記生成された各プロセスの識別子と、前記生成された各プロセスの種別と、前記生成された各プロセスによって書き込まれたデータに対応するアドレス範囲との対応関係を第１の管理テーブルを使用して管理し、
前記総プロセス数が前記第１の閾値を上回っているとの判定をした後、前記第１の管理テーブルに基づいて、種別が前記ユーザプロセスであるプロセスによって前記不揮発性メモリに書き込まれたデータを、種別が前記システムプロセスであるプロセスによって前記不揮発性メモリに書き込まれたデータよりも優先して移動対象データとして選択し、前記移動対象データを、前記移動対象データが格納されているブロックから他のブロックに移動する処理を実行するように構成されている請求項１記載のストレージデバイス。
【請求項４】
前記複数のブロックの各々は、一つのメモリセルに格納されるビットの数を示す多値度が互いに異なる複数種のブロックのいずれかとして選択的に使用され、
前記コントローラは、前記移動対象データを多値度の低いブロックからより多値度の高いブロックに移動する処理を実行するように構成されている請求項３記載のストレージデバイス。
【請求項５】
ホストに接続可能なストレージデバイスであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備し、
前記コントローラは、
前記ホストにおいて生成された各プロセスの識別子を示す情報と、データの書き込みを要求したプロセスの識別子が各々に付与された書き込み要求それぞれとを前記ホストから受信し、
前記生成された各プロセスの識別子と、前記生成された各プロセスによって書き込まれたデータに対応するアドレス範囲との対応関係を第１のテーブルを使用して管理し、
終了したプロセスの識別子を示す情報を前記ホストから受信した後、前記第１のテーブルに基づいて、前記終了したプロセスによって前記不揮発性メモリに書き込まれた第１のデータを、前記第１のデータが格納されているブロックから他のブロックに移動する処理を実行するように構成されている、ストレージデバイス。
【請求項６】
前記複数のブロックの各々は、一つのメモリセルに格納されるビットの数を示す多値度が互いに異なる複数種のブロックのいずれかとして選択的に使用され、
前記コントローラは、前記終了したプロセスによって前記不揮発性メモリに書き込まれた前記第１のデータを多値度の低いブロックからより多値度の高いブロックに移動する処理を実行するように構成されている請求項５記載のストレージデバイス。
【請求項７】
ホストに接続可能なストレージデバイスであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備し、
前記コントローラは、
前記ホストのメモリの使用量を示す情報を前記ホストから受信し、
前記ホストのメモリの使用量が第３の閾値を上回っているとの判定をした後、前記不揮発性メモリの少なくとも一つのブロックに格納されているデータを前記不揮発性メモリの他の少なくとも一つのブロックに移動する処理を実行するように構成されている、ストレージデバイス。
【請求項８】
前記複数のブロックの各々は、一つのメモリセルに格納されるビットの数を示す多値度が互いに異なる複数種のブロックのいずれかとして選択的に使用され、
前記コントローラは、前記ホストのメモリの使用量が前記第３の閾値を上回っているとの判定をした後、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行するように構成されている請求項７記載のストレージデバイス。
【請求項９】
前記コントローラは、
次に起こるプロセスのスワップアウトによって前記ストレージデバイスに書き込まれるデータ量を示す情報を前記ホストから受信し、
前記ホストのメモリの使用量が前記第３の閾値を上回っているとの判定をした後、前記受信された情報によって示されるデータ量に対応する空き容量が確保されるように前記不揮発性メモリの少なくとも一つのブロックに格納されているデータを前記不揮発性メモリの他の少なくとも一つのブロックに移動する処理を実行するように構成されている請求項７記載のストレージデバイス。
【請求項１０】
前記複数のブロックの各々は、一つのメモリセルに格納されるビットの数を示す多値度が互いに異なる複数種のブロックのいずれかとして選択的に使用され、
前記コントローラは、
次に起こるプロセスのスワップアウトによって前記ストレージデバイスに書き込まれるデータ量を示す情報を前記ホストから受信し、
前記ホストのメモリの使用量が前記第３の閾値を上回っているとの判定をした後、前記受信された情報によって示されるデータ量に対応する空き容量が多値度の低いブロックに確保されるように、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行するように構成されている請求項７記載のストレージデバイス。
【請求項１１】
ホストに接続可能なストレージデバイスであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備し、
前記複数のブロックの各々は、一つのメモリセルに格納されるビットの数を示す多値度が互いに異なる複数種のブロックのいずれかとして選択的に使用され、
前記コントローラは、
前記ホストにおいて生成された各プロセスの識別子を示す情報と、データの読み出しまたは書き込みを要求したプロセスの識別子が各々に付与された読み出し／書き込み要求それぞれと、起動頻度の高いプログラムを示す情報とを前記ホストから受信し、
前記生成された各プロセスの識別子と、前記生成された各プロセスによって読み出しまたは書き込まれたデータに対応するアドレス範囲との対応関係を第１の管理テーブルを使用して管理し、
前記第１の管理テーブルに基づいて、前記起動頻度の高いプログラムに対応するプロセスによって読み出しまたは書き込まれたデータを多値度の高いブロックからより多値度の低いブロックに移動する処理を実行するように構成されている、ストレージデバイス。
【請求項１２】
プロセッサおよびメモリを含むコンピュータと、ストレージデバイスとを具備するコンピュータシステムであって、
前記プロセッサは、前記プロセッサ上で動作している総プロセス数を前記ストレージデバイスに通知する処理を実行するように構成され、
前記ストレージデバイスは、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備し、
前記コントローラは、
前記コンピュータから通知される前記総プロセス数が第１の閾値を上回っているとの判定をした後、前記不揮発性メモリの少なくとも一つのブロックに格納されているデータを前記不揮発性メモリの他の少なくとも一つのブロックに移動する処理を実行するように構成されている、コンピュータシステム。
【請求項１３】
前記複数のブロックの各々は、一つのメモリセルに格納されるビットの数を示す多値度が互いに異なる複数種のブロックのいずれかとして選択的に使用され、
前記コントローラは、前記総プロセス数が前記第１の閾値を上回っているとの判定をした後、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行するように構成されている請求項１２記載のコンピュータシステム。
【請求項１４】
前記プロセッサは、前記コンピュータにおいて生成された各プロセスの識別子と前記生成された各プロセスがシステムプロセスまたはユーザプロセスのいずれであるかを示す種別とを示す情報と、データの書き込みを要求したプロセスの識別子が各々に付与された書き込み要求それぞれとを前記ストレージデバイスに送信するように構成され、
前記コントローラは、
前記生成された各プロセスの識別子と、前記生成された各プロセスの種別と、前記生成された各プロセスによって書き込まれたデータに対応するアドレス範囲との対応関係を第１の管理テーブルを使用して管理し、
前記総プロセス数が前記第１の閾値を上回っているとの判定をした後、前記第１の管理テーブルに基づいて、種別がユーザプロセスであるプロセスによって前記不揮発性メモリに書き込まれたデータを、種別が前記システムプロセスであるプロセスによって前記不揮発性メモリに書き込まれたデータよりも優先して移動対象データとして選択し、前記移動対象データを、前記移動対象データが格納されているブロックから他のブロックに移動する処理を実行するように構成されている請求項１２記載のコンピュータシステム。
【請求項１５】
前記複数のブロックの各々は、一つのメモリセルに格納されるビットの数を示す多値度が互いに異なる複数種のブロックのいずれかとして選択的に使用され、
前記コントローラは、前記移動対象データを多値度の低いブロックからより多値度の高いブロックに移動する処理を実行するように構成されている請求項１４記載のコンピュータシステム。
【請求項１６】
前記プロセッサは、前記コンピュータの前記メモリの使用量を前記ストレージデバイスに通知するように構成され、
前記コントローラは、前記コンピュータの前記メモリの使用量が第３の閾値を上回っているとの判定をした後、前記不揮発性メモリの少なくとも一つのブロックに格納されているデータを前記不揮発性メモリの他の少なくとも一つのブロックに移動する処理を実行するように構成されている請求項１２記載のコンピュータシステム。
【請求項１７】
前記プロセッサは、次に起こるプロセスのスワップアウトによって前記ストレージデバイスに書き込まれるデータ量を前記ストレージデバイスに通知するように構成され、
前記コンピュータの前記メモリの使用量が前記第３の閾値を上回っているとの判定をした後、前記通知されたデータ量に対応する空き容量が確保されるように前記不揮発性メモリの少なくとも一つのブロックに格納されているデータを前記不揮発性メモリの他の少なくとも一つのブロックに移動する処理を実行するように構成されている請求項１６記載のコンピュータシステム。
【請求項１８】
前記プロセッサは、前記コンピュータにおいて生成された各プロセスの識別子を前記ストレージデバイスに通知する処理と、データの読み出しまたは書き込みを要求したプロセスの識別子が各々に付与された読み出し／書き込み要求それぞれを前記ストレージデバイスに送信する処理と、起動頻度の高いプログラムを前記ストレージデバイスに通知する処理とを実行するように構成され、
前記コントローラは、
前記生成された各プロセスの識別子と、前記生成された各プロセスによって読み出しまたは書き込まれたデータに対応するアドレス範囲との対応関係を第１の管理テーブルを使用して管理し、
前記第１の管理テーブルに基づいて、前記起動頻度の高いプログラムに対応するプロセスによって読み出しまたは書き込まれたデータを多値度の高いブロックからより多値度の低いブロックに移動する処理を実行するように構成されている請求項１２記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
パーソナルコンピュータに代表されるコンピュータシステムは、ユーザが所望する処理を行うホスト（ホストコンピュータ）と、演算結果やデータなどを格納するストレージデバイスなどから構成される。
【０００３】
ストレージデバイスとしては、不揮発性メモリを備えるストレージデバイスが広く普及している。このようなストレージデバイスの一つとしては、ＮＡＮＤフラッシュメモリを備えるソリッドステートドライブ（ＳＳＤ）が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２０１８／００３２２７５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
最近では、コンピュータシステムの性能改善を図るため、ストレージデバイスの性能の向上が求められている。
【０００６】
本発明が解決しようとする課題は、性能を向上することができるストレージデバイスおよびコンピュータシステムを提供することである。
【課題を解決するための手段】
【０００７】
実施形態によれば、ホストに接続可能なストレージデバイスは、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備する。前記コントローラは、前記ホスト上で動作している総プロセス数を示す情報を前記ホストから受信する。前記コントローラは、前記総プロセス数が第１の閾値を上回っているとの判定をした後、前記不揮発性メモリの少なくとも一つのブロックに格納されているデータを前記不揮発性メモリの他の少なくとも一つのブロックに移動する処理を実行する。
【図面の簡単な説明】
【０００８】
【図１】第１実施形態に係るストレージデバイスを含むコンピュータシステムの構成例を示すブロック図。
【図２】ホスト（ホストコンピュータ）の内部構成例を示すブロック図。
【図３】第１実施形態のストレージデバイスの構成例を示すブロック図。
【図４】第１実施形態のストレージデバイス内に設けられた不揮発性メモリの構成例を示す図。
【図５】第１実施形態のストレージデバイスによって使用される、不揮発性メモリの使用状況を管理するためのテーブルの例を示す図。
【図６】プロセス監視部を含む、ホストの内部構成例を示すブロック図。
【図７】ホストのプロセス監視部によって使用される管理テーブルの例を示す図。
【図８】ホストと第１実施形態のストレージデバイスとによって実行される、総プロセス数通知処理およびデータ移動処理の手順を示すフローチャート。
【図９】ホストと第１実施形態のストレージデバイスとによって実行される、プロセス数増減通知処理およびデータ移動処理の手順を示すフローチャート。
【図１０】第２実施形態のストレージデバイスに対応するホストの内部構成例を示すブロック図。
【図１１】第２実施形態のストレージデバイスによって作成される管理テーブルの例を示す図。
【図１２】ホストと第２実施形態のストレージデバイスとによって実行されるデータ読み出し／書き込み処理の手順を示すフローチャート。
【図１３】プロセスの終了に応じてホストと第２実施形態のストレージデバイスとによって実行される、プロセス識別子通知処理およびデータ移動処理の手順を示すフローチャート。
【図１４】総プロセス数が閾値を超えている場合またはプロセス数の増加の通知を受信した場合に第２実施形態のストレージデバイスによって実行されるデータ移動処理の手順を示すフローチャート。
【図１５】ホストによって実行される、生成されたプロセスの種別（ユーザプロセス／システムプロセス）をストレージデバイスに通知する処理の手順を示すフローチャート。
【図１６】ホストと第３実施形態のストレージデバイスとによって実行される、プロセス数増減通知処理およびデータ移動処理の手順を示すフローチャート。
【図１７】ホストと第３実施形態のストレージデバイスとによって実行される、総プロセス数通知処理およびデータ移動処理の手順を示すフローチャート。
【図１８】第３実施形態のストレージデバイスによって実行される、終了されたプロセスのうち、ユーザプロセスのデータを優先的に移動する処理の手順を示すフローチャート。
【図１９】ホストと第４実施形態のストレージデバイスとによって実行される、使用メモリ量通知処理およびデータ移動処理の手順を示すフローチャート。
【図２０】ホストと第５実施形態のストレージデバイスとによって実行される、スワップアウトによってストレージデバイスに書き込まれるデータ量を通知する処理およびデータ移動処理の手順を示すフローチャート。
【図２１】ホストと第５実施形態のストレージデバイスとによって実行される、使用メモリ量／スワップアウトによってストレージデバイスに書き込まれるデータ量を通知する処理およびデータ移動処理の手順を示すフローチャート。
【図２２】ホストと第６実施形態のストレージデバイスとによって実行される、頻繁に起動されるプログラムを通知する処理およびデータ移動処理の手順を示すフローチャート。
【発明を実施するための形態】
【０００９】
以下、図面を参照して、実施形態を説明する。  
【００１０】
（第１実施形態）
＜コンピュータシステムの説明＞
まず、図１を参照して、第１実施形態に係るストレージデバイスを含むコンピュータシステム１の構成を説明する。
【００１１】
このストレージデバイスは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このストレージデバイスは、例えば、ＮＡＮＤフラッシュメモリを備えたソリッドステートドライブ（ＳＳＤ）３として実現されている。
【００１２】
コンピュータシステム１は、ホスト（ホストデバイス）２と、ＳＳＤ３とを含む。ホスト２は、ＳＳＤ３をアクセスするコンピュータ（ホスト計算機）である。ホスト２として機能するコンピュータの例には、パーソナルコンピュータ、サーバコンピュータ、他の様々な電子機器（例えば、スマートフォン、等）が含まれる。
【００１３】
＜ホストとＳＳＤの間の接続や通信プロトコルの説明＞
ホスト２とＳＳＤ３との間にはその間で要求や情報を送受信するための経路が存在する。また、要求や情報を送受信するための取り決めとして標準規格等が存在する。
【００１４】
ホスト２は、様々な要求を信号線２０を介してＳＳＤ３に送る。これら要求には、データの読み出しを要求する読み出し要求およびデータの書き込みを要求する書き込み要求を含む各種データ処理要求、ＳＳＤ３の状態を変化させる状態変化要求、ＳＳＤ３の状態を取得する状態取得要求、等が含まれる。
【００１５】
一方、ＳＳＤ３は、ホスト２から受信した要求に対する返答を信号線２０を介してホスト２に送る。返答の例には、データ読み出し／書き込みの結果、状態変化の結果、ＳＳＤ３自身の状態、等がある。
【００１６】
様々なホストと様々なストレージデバイスが相互接続できるように信号線２０を介して要求や返答を送る方法として標準規格が存在する。
【００１７】
ホストとストレージデバイスとの間で信号線２０を介して情報を送受信するための標準規格には、例えばＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）が存在する。
【００１８】
またホストとストレージデバイスとの間で送受信される要求や返答の手続きやデータフォーマット等の標準規格には、例えばＮｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）が存在する。
【００１９】
本実施形態では、信号線２０を介して情報を送受信するための仕組みや、要求や返答を送受信するための手続きおよびデータフォーマットについては、特定の規格を仮定しない。本実施形態の技術は、ＰＣＩｅやＮＶＭｅをはじめ、様々な標準規格および標準規格以外の方法を用いた場合でも適用可能である。
【００２０】
さらに、ホスト２とＳＳＤ３は物理的な信号線で接続されている必要はない。ホスト２とＳＳＤ３は無線ＬＡＮ等の物理的な信号線を伴わない方法で接続されていても構わない。ホスト２とＳＳＤ３が物理的な信号線を伴わない方法で接続されていても本実施形態の技術は適用可能である。
【００２１】
＜ホストの説明＞
ホスト２は、そのハードウェアコンポーネントとして、ホストストレージコントローラ１１、プロセッサ１２、およびメモリ１３を備える。これらホストストレージコントローラ１１、プロセッサ１２、メモリ１３は、バス１０を介して相互接続されていてもよい。ホスト２は、さらに、ネットワークインターフェース１４、ディスプレイインターフェース１５を備えていても構わない。
【００２２】
ホストストレージコントローラ１１はＳＳＤ３との通信を実行する。詳しくは、ホストストレージコントローラ１１は、プロセッサ１２の制御の下、上述の様々な要求をＳＳＤ３に送信し、またこれら要求に対する返答をＳＳＤ３から受信する。プロセッサ１２はホスト２内の様々なコンポーネントを制御するＣＰＵであり、ＳＳＤ３からメモリ１３にロードされる様々なプログラムを実行する。メモリ１３は、Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ  （ＤＲＡＭ）のようなランダムアクセスメモリによって実現される。
【００２３】
＜ＳＳＤの説明＞
ＳＳＤ３は、コントローラ４および不揮発性メモリ（ＮＡＮＤフラッシュメモリ）５を備える。ＮＡＮＤフラッシュメモリ５は、複数のＮＡＮＤフラッシュメモリチップを含んでいてもよい。コントローラ４は、ＮＡＮＤフラッシュメモリ５に電気的に接続され、ＮＡＮＤフラッシュメモリ５を制御するように構成されたメモリコントローラとして動作する。このコントローラ４は、Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ（ＳｏＣ）のような回路によって実現されてもよい。ＳＳＤ３は、ＤＲＡＭも備えていてもよい。ＳＳＤ３がＤＲＡＭも備える構成である場合には、ＤＲＡＭは、コントローラ４の外部に設けられていてもよい。
【００２４】
ＮＡＮＤフラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤフラッシュメモリ５は、２次元構造のＮＡＮＤフラッシュメモリであってもよいし、３次元構造のＮＡＮＤフラッシュメモリであってもよい。
【００２５】
＜ホストの内部構成＞
図２は、ホスト（ホストコンピュータ）２の内部構成例を示す。  
【００２６】
ホスト２においては、プロセッサ１２上で動作するホストソフトウェアとして、ストレージドライバ３１と、オペレーティングシステム（ＯＳ）３２と、ファイルシステム３３と、ユーザプロセス３４と、システムプロセス３５が存在する。
【００２７】
＜オペレーティングシステム（ＯＳ）とプロセスの説明＞
ここでは、プロセスにはメモリが割り当てられていること、オペレーティングシステム（ＯＳ）３２、さらに言えばオペレーティングシステム（ＯＳ）３２のプロセス管理部が、ホスト２上で動作するプロセスの情報をすべて知っていること、について説明する。
【００２８】
オペレーティングシステム（ＯＳ）３２は、プロセス管理部３２１と、メモリ管理部３２２と、デバイス管理部３２３とを含む。
【００２９】
図２の例では、オペレーティングシステム（ＯＳ）３２に上記３つの管理部が含まれているが、またさらにファイルシステム３３およびストレージドライバ３１のうちの一部または全てがオペレーティングシステム（ＯＳ）３２に含まれていても構わない。
【００３０】
オペレーティングシステム（ＯＳ）３２は、例えばＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ｌｉｎｕｘ（登録商標）のようなソフトウェアであり、プロセッサ１２、メモリ１３、およびＳＳＤ３を含む、コンピュータシステム１全体の資源を管理する。
【００３１】
オペレーティングシステム３２はまた、ホスト２上で動作するアプリケーションプログラム（以下プログラムと記載する）の管理を行う。ホスト２上では、オペレーティングシステム３２の管理のもと、１つ以上の機能を実現するプログラムが、一つ以上動作状態にある。
【００３２】
プログラムが動作状態になる際には、以下の手続きが行われる。  
【００３３】
最初に、ユーザによる直接の要求によって、もしくはユーザに特定の機能を提供するためにオペレーティングシステム３２自身によって、プロセス管理部３２１にプログラムの起動が要求される。
【００３４】
次に、プロセス管理部３２１がこのプログラムの起動を承認してこのプログラム用のプロセスを生成する。そしてプロセス管理部３２１がメモリ管理部３２２に対して当該プロセスに対するメモリ割り当てを要求する。メモリ割り当て要求を受けたメモリ管理部３２２は、当該プロセスにメモリ１３内のメモリ領域を割り当てる。プロセス管理部３２１は、このプログラムをＳＳＤ３から読み出し、当該プロセスに割り当てられたメモリ領域にこのプログラムをロードする。最後に、プロセス管理部３２１は、当該プロセスをプロセッサ１２の実行時間の割り当て対象とする。つまり、プログラムの実行の実体はプロセスであり、プロセスにはメモリが割り当てられている。
【００３５】
本実施形態では、ユーザの要求によって生成されたプロセスのことをユーザプロセスと呼ぶ。これに対して、オペレーティングシステム３２自身が特定の機能を実現するために生成したプロセスのような、ユーザプロセス以外のプロセスのことをシステムプロセスと呼ぶ。
【００３６】
例えば、ユーザがＷｅｂブラウジングのために使うＷｅｂブラウザのプログラムを起動することによって生成されたプロセスは、ユーザプロセスである。一方、キーボードやマウスからの入力を受け付けるプログラムやディスプレイへの映像出力を行うプログラムから生成されたプロセスは、システムプロセスである。
【００３７】
したがって、プロセス管理部３２１は、ある時刻にホスト２上に存在するプロセスを、ユーザプロセスおよびシステムプロセスにかかわらずすべて把握可能である。
【００３８】
＜プロセスのスワップの説明＞
ここでは、プロセスに割り当てられたメモリ領域の内容が、スワップアウトまたはスワップインのタイミングで、ＳＳＤ３に書き込まれ、またはＳＳＤ３から読み出されることを説明する。
【００３９】
プロセス管理部３２１が新たなプロセスを生成しようとした際に、当該プロセスに割り当てるメモリが足りない場合がある。その際、プロセス管理部３２１からメモリ割り当ての要求を受けたメモリ管理部３２２は、当該プロセスに割り当てるメモリ領域を確保するために、別のプロセスのメモリ領域に格納されているデータをＳＳＤ３に退避することがある。この退避処理はプロセスのスワップアウトと呼ばれる。
【００４０】
スワップアウトの対象プロセスは、様々な基準で選定される。例えば、最後にプロセッサ１２上で動作した時刻が最も古いプロセスから順に選択する方法がある。また例えば、生成時刻が最も古いプロセスから順に選択する方法もある。さらに例えば、選択対象のプロセスをユーザプロセスに限定する方法もある。
【００４１】
いずれにせよ、プロセスに割り当てられたメモリ領域に格納されたデータは、スワップアウトによってＳＳＤ３に書きこまれることがある。
【００４２】
なお、一旦スワップアウトしたプロセスがプロセッサ１２上で再度動作する際は、スワップアウトによってＳＳＤ３に書きこまれたデータをＳＳＤ３から読み出して、メモリ１３内のメモリ領域に復元する処理が行われる。この復元処理はプロセスのスワップインと呼ばれる。
【００４３】
本実施形態では、スワップアウトおよびスワップインの処理は、プロセス管理部３２１が行う。
【００４４】
＜プロセスがＳＳＤ３にアクセスする際の処理の説明＞
ここでは、各プロセスがファイルシステム３３を経由してＳＳＤ３にアクセスするケースにおいては、ファイルシステム３３はどのプロセスがどの論理アドレス（論理ブロックアドレス：ＬＢＡ）にいつアクセスしたかを知っているということと、ファイルシステム３３を経由せずにＳＳＤ３にアクセスできる経路も存在するということ、について説明する。
【００４５】
プロセスがＳＳＤ３に対するデータの読み出しまたは書き込みを行う場合、一般的に、ファイルシステム３３に対してデータの読み出しまたは書き込みを要求する。これは、ユーザプロセスでもシステムプロセスでも同じである。
【００４６】
ファイルシステム３３を経由してＳＳＤ３に対するデータの読み出しまたは書き込みを行う場合、プロセスはファイルシステム３３にアクセス要求を送出する。詳しくは、プロセスはファイルシステム３３に対して、読み出しまたは書き込みをしたいファイル名と、読み出し／書き込みの種別と、読み出しまたは書き込みをしたいデータサイズと、データ読み出しの場合は読出し先メモリ領域を、データ書き込みの場合は書き込みたいデータが格納されているメモリ領域を指定する。
【００４７】
ファイルシステム３３は、当該プロセスが、指定したファイルに対してアクセス権を持つかどうかをチェックし、当該プロセスがアクセス権を持つ場合はアクセス要求を承認し、アクセス権を持たない場合は当該アクセス要求を却下する。
【００４８】
つまり、ファイルシステム３３はどのプロセスがどのファイルにいつアクセスを要求したかを知っている。
【００４９】
ファイルシステム３３は、プロセスによるアクセス要求を承認すると、当該アクセス対象ファイルに対応する、ＳＳＤ３の論理ブロックアドレス（ＬＢＡ）を解決する。
【００５０】
データ読み出しの場合、ファイルシステム３３は、ファイルシステム自身が持つファイル名それぞれとＬＢＡそれぞれとの対応関係を示す表から、ＳＳＤ３に対して読出しを要求する、先頭ＬＢＡとサイズの組を一つ以上作成する。先頭ＬＢＡとサイズの組が複数になる可能性があるのは、一つのファイルを構成するデータが、ＳＳＤ３のＬＢＡ空間上で、複数の領域に分割（フラグメント化）されている可能性があるためである。
【００５１】
データ書き込みの場合、ファイルシステム３３は、ファイルシステム３３自身が持つ未使用ＬＢＡ領域の中から当該書き込み要求に割り当てるＬＢＡ領域を一つ以上選択し、先頭ＬＢＡとサイズの組を一つ以上作成する。先頭ＬＢＡとサイズの組が複数になる可能性があるのは、書き込み要求サイズをまとめて格納できる空きの連続ＬＢＡ領域が存在しない可能性があるためである。
【００５２】
ファイルシステム３３が、ＳＳＤ３に要求する、読み書き対象の先頭ＬＢＡとサイズの組を含む要求情報を作成すると、ファイルシステム３３は、その要求情報とともに、ストレージドライバ３１にデータ読み出し／書き込みの要求を送出する。
【００５３】
ストレージドライバ３１は、ファイルシステム３３から受信したデータ読み出し／書き込みの要求から、ホストストレージコントローラ１１に対する操作を生成し、ホストストレージコントローラ１１を適切に操作し、信号線２０を介してＳＳＤ３に読み出し／書き込み要求（リード／ライトコマンド）を送信する。
【００５４】
ストレージドライバ３１は、ＳＳＤ３から返答される、読み出し／書き込み要求の結果を、ホストストレージコントローラ１１経由で受信し、読み出し／書き込み要求の結果を、データ読み出し／書き込みの要求を送出したファイルシステム３３に送る。ファイルシステム３３は、このデータ読み出し／書き込みの要求の大元の要求元であるプロセスに、このデータ読み出し／書き込みの要求の結果を送る。
【００５５】
このようにして、プロセスによるＳＳＤ３からのデータの読み出しおよびプロセスによるＳＳＤ３へのデータの書き込みは処理される。したがって、ファイルシステム３３は、どのプロセスがどのＬＢＡにいつアクセスしたかを知っている。
【００５６】
なお、プロセスからＳＳＤ３へ送出される要求は、読み出し／書き込み要求だけではない。例えば、ＳＳＤ３への総書き込みデータ量、ＳＳＤ３からの総読出しデータ量といった統計情報をＳＳＤ３から取得する要求や、ＳＳＤ３の状態を低消費電力状態へ変化させる要求がＳＳＤ３に送信される場合もある。
【００５７】
これらの要求は、ファイルシステム３３を経由せず、プロセスからストレージドライバ３１に直接送出されることが多い。
【００５８】
ファイルシステム３３は、例えば、ＮＴＦＳ（ＮＴ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）や、ｅｘｔ４（ｆｏｕｒｔｈ  ｅｘｔｅｎｄｅｄ  ｆｉｌｅ  ｓｙｓｔｅｍ）などである。ホスト２内に複数のファイルシステムが存在することもある。
【００５９】
＜ＳＳＤ３の構成の説明＞
ここでは、ＳＳＤ３のデータ制御部４０３が、ホスト２がデータを読み出し／書き込みするために指定するＬＢＡと、そのＬＢＡに対応する最新データが格納されているＮＡＮＤフラッシュメモリ５上の記憶位置との対応関係を管理していること、について説明する。
【００６０】
図３は、ＳＳＤ３の構成例を示す。
【００６１】
ＳＳＤ３は、図１で説明したように、コントローラ４とＮＡＮＤフラッシュメモリ５とを含む。コントローラ４は、図３に示されているように、インターフェースコントローラ４０１と、ホスト要求処理部４０２と、データ制御部４０３と、バッファメモリ４０４と、Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ（ＤＭＡＣ）４０５と、誤り訂正符号処理部４０６と、ＮＡＮＤインターフェースコントローラ４０７とを含む。
【００６２】
インターフェースコントローラ４０１は、信号線２０を介してホスト２から送信されたＳＳＤ３に対する処理要求を受信し、ホスト要求処理部４０２にこの要求の内容を伝える。またインターフェースコントローラ４０１は、ホスト要求処理部４０２からの要求に従い、ホスト２からの要求に対する処理結果の返答を、信号線２０を介してホスト２に送信する。またインターフェースコントローラ４０１は、ＤＭＡＣ４０５からの指示に従い、書き込みデータをホスト２側のメモリ１３から読み出してバッファメモリ４０４に書き込んだり、ホスト２からのリード要求によって指定されるデータをバッファメモリ４０４から読みだしてホスト２側のメモリ１３に書き込んだりする。
【００６３】
ホスト要求処理部４０２は、ホスト２から送信された処理要求をインターフェースコントローラ４０１から受信し、処理要求の内容を解釈し、処理要求の内容にしたがって、ＳＳＤ３内部の動作を制御する。
【００６４】
ホスト要求処理部４０２は、例えば、ホスト２から読み出し要求（リードコマンド）を受信すると、ＮＡＮＤフラッシュメモリ５から当該読み出し要求によって指定されたデータをバッファメモリ４０４に読み出すようにデータ制御部４０３に対して指示し、バッファメモリ４０４に読み出されたデータを、ＤＭＡＣ４０５を操作してホスト２側のメモリ１３に転送する。またホスト要求処理部４０２は、例えば、ホスト２から書き込み要求（ライトコマンド）を受信すると、ＤＭＡＣ４０５を操作してホスト２側のメモリ１３から書き込みデータをバッファメモリ４０４に転送し、バッファメモリ４０４内の書き込みデータをＮＡＮＤフラッシュメモリに書き込むようデータ制御部４０３に対して指示する。そしてホスト要求処理部４０２は、ホスト２から受信した要求の処理が完了したら、ホスト２に対して処理結果を送信する。
【００６５】
ＳＳＤ３がホスト２から受信する要求は、読み出し要求、書き込み要求だけではない。前述の通り、例えば、総書き込みデータ量や総読出しデータ量といった統計情報を取得する要求や、ＳＳＤ３の状態を低消費電力状態へ変化させる要求を受信することもある。これらの要求を受信したホスト要求処理部４０２は、データ制御部４０３に具体的な処理を要求して、所望の処理を実現する。
【００６６】
データ制御部４０３は、ＳＳＤ３内に格納されているデータの管理およびＮＡＮＤフラッシュメモリ５に対するアクセスの制御を行う。具体的には、データ制御部４０３は、ホストによって指定されるＬＢＡと、そのＬＢＡに対応する最新データが格納されているＮＡＮＤフラッシュメモリ５内の記憶位置を示す位置情報との組を保持している。このＮＡＮＤフラッシュメモリ５内の位置情報のことをＮＡＮＤ物理アドレス（ＮＡＮＤ  Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ：  ＮＰＡ）と呼ぶことにする。また、データ制御部４０３によって管理される、ＬＢＡそれぞれとＮＰＡそれぞれとの間の対応関係を管理するテーブルのことを論物変換テーブルと呼ぶことにする。
【００６７】
ＮＡＮＤフラッシュメモリ５は、メモリセルアレイを有する１以上のＮＡＮＤフラッシュメモリチップを有する。メモリセルアレイは、マトリクス状に配列された複数のメモリセルを有する。ＮＡＮＤフラッシュメモリ５のメモリセルアレイは、図４に示されているように、複数のブロック（物理ブロック）ＢＬＫ０〜ＢＬＫ（ｊ−１）を含む。ブロックＢＬＫ０〜ＢＬＫ（ｊ−１）は、消去動作の単位として機能する。
【００６８】
ブロックＢＬＫ０〜ＢＬＫ（ｊ−１）は複数のページ（物理ページ）を含む。つまり、ブロックＢＬＫ０〜ＢＬＫ（ｊ−１）の各々は、ページＰ０、Ｐ１、…Ｐ（ｋ−１）を含む。各ページは、同一ワード線に接続された複数のメモリセルを含む。ＮＡＮＤフラッシュメモリ５においては、データの読み出しおよびデータの書き込みはページ単位で実行される。
【００６９】
＜ＳＳＤ３へデータを書き込む処理の説明＞
ここでは、データ書き込み時に論物変換テーブルが更新されることについて説明する。
【００７０】
ホスト２からＳＳＤ３に対してデータ書き込み要求が送られた場合、ＳＳＤ３のコントローラ４は次のように処理を行う。
【００７１】
コントローラ４においては、まず、ホスト要求処理部４０２がインターフェースコントローラ４０１経由でこの書き込み要求を受信する。
【００７２】
この書き込み要求には、書き込み先ＬＢＡ領域の先頭ＬＢＡと、書き込みサイズと、書き込みデータが格納されているホストメモリの先頭アドレスが含まれている。そこでホスト要求処理部４０２は、ＤＭＡＣ４０５を操作して、このホストメモリの先頭アドレスから、この書き込みサイズ分のデータを、バッファメモリ４０４に転送する。そして、ホスト要求処理部４０２は、データ制御部４０３に対してバッファメモリ４０４内のデータをＮＡＮＤフラッシュメモリ５に書き込むよう指示する。
【００７３】
なお、ホスト要求処理部４０２は、ホスト２から受信した書き込み要求に対する返答を、書き込みを要求されたデータをすべてバッファメモリ４０４に転送し終わった時点でホスト２に送信してもよいし、書き込みを要求されたデータをすべてＮＡＮＤフラッシュメモリ５に書き終えた時点でホスト２に送信してもよい。
【００７４】
ホスト要求処理部４０２からデータの書き込み指示を受領したデータ制御部４０３は、当該データをＮＡＮＤフラッシュメモリ５のどのＮＰＡに対応する記憶位置に書き込むかを決定し、必要に応じて誤り訂正符号処理部４０６を操作して当該データから当該データと誤り訂正符号とを含む符号化データを作成し、ＮＡＮＤインターフェースコントローラ４０７を操作して当該データ（または当該符号化データ）をＮＡＮＤフラッシュメモリ５に書き込む。
【００７５】
データ制御部４０３は、当該データをＮＡＮＤフラッシュメモリ５に書き込んだ後に、当該データのＬＢＡに、当該データが書き込まれた記憶位置を示すＮＰＡが対応付けられるように、論物変換テーブルを更新する。もし論物変換テーブルにおいて、当該ＬＢＡに、当該ＬＢＡの古いデータに対応するＮＰＡが対応付けられていたならば、この古いデータに対応するＮＰＡは、当該データが書き込まれた記憶位置を示すＮＰＡ（新しいＮＰＡ）で更新される。このようにして、論物変換テーブルの内容は、ＬＢＡとＮＰＡの対応関係が常に最新になるように管理される。
【００７６】
＜多値度の使い分け＞
ここでは、ＳＳＤ３は、一つのメモリセルに格納されるビットの数を示す多値度が互いに異なる複数種のプログラムモード（ＳＬＣモード／ＭＬＣモード／ＴＬＣモード）を適宜使い分けてデータをＮＡＮＤフラッシュメモリ５に書き込むことができることについて説明する。
【００７７】
例えば、ＮＡＮＤフラッシュメモリ５が、一つのメモリセルに３ビットのデータが格納されるトリプルレベルセル（ＴＬＣ）−ＮＡＮＤフラッシュメモリとして実現されている場合には、ＮＡＮＤフラッシュメモリ５は、多値度が互いに異なる複数のプログラムモード、つまり（１）一つのメモリセルに１ビットのデータが格納されるシングルレベルセル（ＳＬＣ）モード、（２）一つのメモリセルに２ビットのデータが格納されるマルチレベルセル（ＭＬＣ）モード、（３）一つのメモリセルに３ビットのデータが格納されるトリプルレベルセル（ＴＬＣ）モード、を選択的に使用して、データをＮＡＮＤフラッシュメモリ５に書き込むことができる。
【００７８】
一般的に、一つのメモリセルに書き込まれるデータ量（ビット数）が多い、つまり多値度が高いほうが、メモリコストは低くなり、ＮＡＮＤフラッシュメモリ５の利用効率が上がる。しかし、多値度が高いプログラムモードでデータをメモリセルに書き込むためには、また多値度が高いプログラムモードで書き込まれたデータをメモリセルから読み出すためには、複雑な処理が必要になり、データの書き込み／読み出しにかかる時間が長くなることが多い。
【００７９】
したがって、データ制御部４０３は、ホスト２から指示された書き込み要求をなるべく速く完了させたい場合に、ＮＡＮＤフラッシュメモリ５のブロックにＳＬＣモードのような多値度の低いプログラムモードで書き込むことがある。
【００８０】
逆に、データ制御部４０３は、ＮＡＮＤフラッシュメモリ５の利用効率を上げたい時には、ガベージコレクション（ＧＣ）などを行って、多値度の低いプログラムモードで書き込まれたデータを、ＴＬＣモードのようなより多値度の高いプログラムモードで再書き込みする。ＧＣは、有効データと無効データとが混在する幾つかのブロック（ＧＣソースブロック）内の有効データを新たなブロック（ＧＣデスティネーションブロック）に移動し、ＧＣソースブロックを有効データを含まないフリーブロックにする動作である。
【００８１】
プログラムモードの切り替えはＮＡＮＤフラッシュメモリ５のブロックの単位で行われる。つまり、ＮＡＮＤフラッシュメモリ５に含まれる複数のブロックは、一つのメモリセルに格納されるビットの数を示す多値度が互いに異なる複数種のブロックのいずれかとして選択的に使用される。
【００８２】
以降、ＳＬＣとして使用されているＮＡＮＤフラッシュメモリ５のブロック（つまり、ＳＬＣモードでデータが書き込まれるブロック）のことをＳＬＣブロックと呼ぶ。同様に、ＭＬＣとして使用されているＮＡＮＤフラッシュメモリ５のブロック（つまり、ＭＬＣモードでデータが書き込まれるブロック）のことをＭＬＣブロック、ＴＬＣとして使用されているＮＡＮＤフラッシュメモリ５のブロック（つまり、ＴＬＣモードでデータが書き込まれるブロック）のことをＴＬＣブロックと呼ぶ。
【００８３】
例えば、データ制御部４０３は、まず、ホスト２によるデータ書き込みを速く完了させるため、ホスト２から受信したほとんど全ての書き込み要求に対応する書き込みデータを多値度の低いブロック（例えばＳＬＣブロック）に書き込んでもよい。そして、後に、データ制御部４０３は、必要に応じて、多値度の低い一つ以上のブロックに格納されているデータ（有効データ）を、より多値度の高い一つ以上のブロック（ＭＬＣブロック、またはＴＬＣブロック）に移動してもよい。
【００８４】
ここで、データの移動とは、ＮＡＮＤフラッシュメモリ５の少なくとも一つのブロック（移動元ブロック）に格納されているデータをＮＡＮＤフラッシュメモリ５の他の少なくとも一つのブロック（移動先ブロック）へデータをコピーし、移動元ブロック内のこのデータを無効化することを意味する。
【００８５】
また、有効データとは、ＬＢＡのような論理アドレスに関連付けられている最新のデータを意味する。無効データとは、どの論理アドレスにも関連付けられていない古いデータを意味する。
【００８６】
このような移動処理を制御するため、データ制御部４０３は、図５のような管理テーブルを作成して、ＮＡＮＤフラッシュメモリ５の使用状況を管理する。
【００８７】
＜ＮＡＮＤフラッシュメモリの使用状況を管理するテーブルの説明＞
図５は、データ制御部４０３が作成して管理する、ＳＳＤ３内のＮＡＮＤフラッシュメモリ５の使用状況を管理するテーブルを示す。このテーブルのことを、以下ＮＡＮＤ管理テーブルと呼ぶ。
【００８８】
この図５のＮＡＮＤ管理テーブルには、ＳＬＣ、ＭＬＣ、ＴＬＣといったＮＡＮＤフラッシュメモリ５の利用可能な多値度別に、各多値度で使用しているＮＡＮＤフラッシュメモリ５のブロック数（使用ブロック数）、使用されているブロック内に格納されている有効データの総量（有効データ量）、各多値度で使用可能な最大ブロック数、最大ブロック数を各多値度で使用した場合に格納可能な最大データ量、および各多値度で現在使用できる空きブロック数（フリーブロック数）が記録され、管理されている。
【００８９】
また、図５のＮＡＮＤ管理テーブルには、多値度とは関係なく、ＳＳＤ３全体としての、上記使用ブロック数、有効データ量、最大ブロック数、最大データ量、およびフリーブロック数も記録され、管理されている。
【００９０】
データ制御部４０３がＮＡＮＤフラッシュメモリ５にデータを書き込んだ場合、データ制御部４０３は、書き込み時の多値度に従って、ＮＡＮＤ管理テーブルを更新する。例えば、データ制御部４０３がＳＬＣのフリーブロックから一つブロックを取得し、当該ブロックに４キロバイトのデータをＳＬＣモードで書き込んだならば、データ制御部４０３は、ＮＡＮＤ管理テーブル内のＳＬＣの行の使用ブロック数を１増加させ、ＳＬＣの行の有効データ量を４キロバイト増加させ、ＳＬＣの行のフリーブロック数を１減少させる。
【００９１】
この時、このデータの書き込みによって例えばＭＬＣブロックに格納されている４キロバイトのデータが古いデータとなった（無効データになった）場合、データ制御部４０３は、ＮＡＮＤ管理テーブル内のＭＬＣの行の有効データ量を４キロバイト減少させる。
【００９２】
また、データ制御部４０３は、ＳＳＤ全体の行の使用ブロック数を１増加させ、ＳＳＤ全体の行のフリーブロック数を１減少させる。なお、ＳＳＤ全体の行の有効データ量は変化しない。なぜなら、ＳＬＣブロックに新たに書き込まれた４キロバイトのデータが有効データとなった代わりに、ＭＬＣブロックに格納されていた４キロバイトのデータが無効データとなったからである。
【００９３】
＜ＮＡＮＤ管理テーブルから分かることの説明＞
図５のＮＡＮＤ管理テーブルを見ると、ＳＳＤ３内部の状態について、次のようなことがわかる。
【００９４】
ＳＬＣブロックの使用ブロック数が多い場合、ＮＡＮＤフラッシュメモリ５の利用効率が低下していることがわかる。ＳＬＣブロックは読み書きが速いが、多値度が低いため利用効率は悪い。したがって、ＳＬＣブロックとして使用する最大ブロック数はある程度少なく設定する必要がある。
【００９５】
ＳＬＣの使用ブロック数が予め設定した最大ブロック数に近づいた場合、ＮＡＮＤフラッシュメモリ５の利用効率が落ちているだけでなく、さらなるホスト２からの書き込み要求に対してＳＬＣブロックを割り当てることができなくなる。そこで、ＳＬＣブロックに格納されているデータをより多値度の高いブロックに移動させる必要があると判断できる。
【００９６】
また、すべての多値度について、使用ブロック数が増加しているにも関わらず、有効データ量が最大データ量と比較して少ない場合は、無効データが多く、ＮＡＮＤフラッシュメモリ５内の多くのブロックが有効活用されていないことがわかる。
【００９７】
この時には、同時に全体的にフリーブロック数が減っている。したがって、データ制御部４０３はＧＣによって使用ブロック数を減らし、フリーブロック数を増やす必要があると判断できる。
【００９８】
このように、図５のＮＡＮＤ管理テーブルを使用してＳＳＤ３内のＮＡＮＤフラッシュメモリ５の使用状況をチェックすることで、データ制御部４０３は次にどのような処理が必要かを判断することができる。
【００９９】
＜第１実施形態のデータ移動処理の説明＞
まず、第１実施形態のデータ移動処理の概要について説明する。
【０１００】
ホスト２のプロセッサ１２によって実行されるホストソフトウェアには、プロセス監視部４１が追加される。このプロセス監視部４１はホスト２上で動作するプロセス数を知っていて、総プロセス数をＳＳＤ３に通知することができる。なお、プロセス監視部４１は、総プロセス数の増減をＳＳＤ３に通知してもよい。
【０１０１】
ＳＳＤ３のコントローラ４は、ホスト２から通知される総プロセス数がある閾値を上回ったか否かを判定し、総プロセス数がある閾値を上回ったと判定した場合、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動させる処理を実行する。この場合、例えば、ＳＬＣブロックに格納されているデータ（有効データ）をＭＬＣブロックまたはＴＬＣブロックに移動する処理が実行される。これにより、現在使用されているＳＬＣブロックをフリーブロックにすることができる。上述したように、総プロセス数が多くなると、スワップアウト、スワップインが起こりやすくなる。本実施形態では、総プロセス数に基づいて、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動させる処理が実行されるので、スワップアウト、スワップインが起こり易くなる前に、多値度の低いブロック（例えばＳＬＣブロック）のフリーブロック数を増やすことが可能となる。よって、後にプロセスのスワップアウトやスワップインが発生した時に多値度の低いブロックをデータの書き込みおよびデータの読み出しに使用できる可能性が高くなる。この結果、スワップアウトやスワップインにかかる時間を短縮することができる。
【０１０２】
なお、データの移動は、同じ多値度のブロック間で行ってもよい。このデータ移動は、上述のＧＣの一形態である。このデータ移動によって生成されたフリーブロックをＳＬＣのフリーブロックとして割り当てることにより、後続のホスト２からの書き込み要求に備えることができる。
【０１０３】
また、データを移動する処理は、必ずしも、総プロセス数がある閾値を上回ったと判定された時点で直ちに実行される必要は無く、総プロセス数がある閾値を上回ったと判定された後に実行されればよい。
【０１０４】
例えば、総プロセス数がある閾値を上回ったと判定された時点で、コントローラ４（例えばホスト要求処理部４０２）はデータを移動する処理を実行すべきことを決定し、このデータ移動のための処理を待ち行列にキューイングしてもよい。
【０１０５】
あるいは、総プロセス数が閾値を上回ったことをトリガとして、ホスト要求処理部４０２は、データ移動のための処理の優先度を上げてもよい。これにより、データ移動のための処理の優先度が幾つかの他の処理の優先度よりも高くなるので、データ移動のための処理を、これら幾つかの他の処理よりも優先して実行することが可能となる。
【０１０６】
あるいは、総プロセス数がある閾値を上回ったと判定された時点で、ホスト要求処理部４０２はデータを移動する処理を実行すべきことを決定し、そしてＳＬＣの有効データ量がある閾値にまで低下する、またはＳＳＤ３全体のフリーブロック数がある閾値にまで低下する、といった条件が成立するまで待ち、この条件が成立した時に、データ移動のための処理を実行してもよい。
【０１０７】
以下、総プロセス数に基づくデータ移動処理を実現するための具体的な構成について説明する。
【０１０８】
図６は、プロセス監視部４１を含む、ホスト２の内部構成例を示す。
【０１０９】
この図６の構成例は、図２の構成例に対して、プロセス監視部４１を追加したものである。
【０１１０】
プロセス監視部４１は、ＯＳ３２のプロセス管理部３２１やメモリ管理部３２２、さらにはファイルシステム３３との情報の授受を通じて、ホスト２で動作しているプロセス、これら各プロセスに割り当てられているメモリ領域、その領域サイズ、さらには各プロセスがアクセスしたＳＳＤ３のＬＢＡ、等の情報を取得し、管理する。
【０１１１】
具体的には、プロセス監視部４１は、図７のような管理テーブルを使用して前記情報を管理している。図７のような管理テーブルは、複数のプロセスに対応する複数のエントリ（行）を有する。各行は、プロセス識別子フィールド、プロセス種別フィールド、メモリ使用量フィールド、複数のＬＢＡ利用リストフィールド、最終起動時刻フィールドを含む。
【０１１２】
あるプロセスに対応する行において、プロセス識別子フィールドは、このプロセスの識別子を示す。プロセス種別フィールドは、このプロセスの種別（ユーザプロセス／システムプロセス）を示す。メモリ使用量フィールドは、このプロセスによって使用されているホストメモリ上のメモリ領域の容量を示す。ＬＢＡ利用リストフィールドは、このプロセスがアクセス（読み出し／書き込み）したＳＳＤ３のＬＢＡのリストを示す。最終起動時刻フィールドは、このプロセスが最後に起動された時刻を示す。
【０１１３】
前述の通り、プロセス生成時にはプロセス管理部３２１がＳＳＤ３からプログラムを読み出す他、プロセスがＳＳＤ３に対する読み出し／書き込み要求を発行する。したがって、プロセスが生成されると、ＳＳＤ３へのデータの書き込み、ＳＳＤ３からのデータの読み出しが行われる可能性が高い。
【０１１４】
そこで、プロセス監視部４１がプロセス管理部３２１に問い合わせることによってプロセスが生成されたことを検出したら、プロセス監視部４１はそのことをＳＳＤ３に通知する。このＳＳＤ３への通知は、ＮＶＭｅ等の標準規格のコマンドを使用してもよいし、別の方法を使っても構わない。
【０１１５】
ホスト２からプロセス数が増えたことを通知されたＳＳＤ３のコントローラ４においては、その通知を受領したホスト要求処理部４０２は、データ制御部４０３に、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動させ、これによって多値度の低いブロック用のフリーブロック数を増やし、後続のホスト２からのアクセスに備える。
【０１１６】
また、プロセス数が減少することはプロセスが終了したことを意味する。プロセスが終了すると、当該終了したプロセスがＳＳＤ３に対して読み書きしたデータは当分の間アクセスされない可能性が高い。
【０１１７】
そこで、プロセス監視部４１がプロセス管理部３２１に問い合わせることによってプロセスが終了したことを検出したら、プロセス監視部４１はそのことをＳＳＤ３に通知する。このＳＳＤ３への通知も、ＮＶＭｅ等の標準規格のコマンドを使用してもよいし、別の方法を使っても構わない。
【０１１８】
ホスト２からプロセス数が減ったことを通知されたＳＳＤ３のコントローラ４においては、その通知を受領したホスト要求処理部４０２は、データ制御部４０３に、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動させ、これによって多値度の低いブロック用のフリーブロック数を増やし、ＮＡＮＤフラッシュメモリ５の利用効率の改善を図る。
【０１１９】
さらに、プロセスの総数が少ないことは、ホスト２からＳＳＤ３へ送信される読み出し／書き込み要求が少ない可能性を示す。
【０１２０】
またプロセスの総数が多いことは、前述したプロセスのスワップアウトとスワップインが起こる可能性が高いことを示す。
【０１２１】
そこでプロセス監視部４１は、プロセス管理部３２１に問い合わせた結果から総プロセス数を管理し、その総プロセス数をＳＳＤ３に通知する。このＳＳＤ３への通知も、ＮＶＭｅ等の標準規格のコマンドを使用してもよいし、別の方法を使っても構わない。ＳＳＤ３に総プロセス数を通知するタイミングは、プロセス数が増減した時でもよいし、定期的に通知するようにしてもよい。
【０１２２】
ホスト２から総プロセス数の通知を受けたＳＳＤ３のコントローラ４においては、その通知を受領したホスト要求処理部４０２は、通知された総プロセス数が予め設定された閾値（第１の閾値）を上回っているかをチェックする。
【０１２３】
もし総プロセス数が前記第１の閾値を上回っていた場合、ホスト要求処理部４０２は、データ制御部４０３に、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動させるよう指示する。これにより、多値度の低いブロックに格納されているデータがより多値度の高いブロックに移動されるので、多値度の低いブロック用のフリーブロック数が増え、後にプロセスのスワップアウトやスワップインが発生した時に多値度の低いブロックを使用できる可能性が高くなる。この結果、スワップアウトやスワップインにかかる時間が短縮され、ホスト２から見たＳＳＤ３の性能、ひいてはユーザから見たＳＳＤ３の性能を向上させることができる。
【０１２４】
また、ホスト要求処理部４０２は、総プロセス数が予め設定された閾値（第２の閾値）を下回っているかをチェックする。例えば、第２の閾値は、第１の閾値よりも小さい値である。
【０１２５】
もし総プロセス数が第２の閾値を下回っていた場合、ホスト要求処理部４０２は、データ制御部４０３に、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動させるよう指示する。これにより、多値度の低いブロックに格納されているデータがより多値度の高いブロックに移動されるので、多値度の低いブロック用のフリーブロック数が増え、ＮＡＮＤフラッシュメモリ５の利用効率が改善する。
【０１２６】
図８のフローチャートは、ホスト２とＳＳＤ３によって実行される、総プロセス数通知処理およびデータ移動処理の手順を示す。
【０１２７】
ホスト２のプロセス監視部４１は、プロセス管理部３２１と共同して、ホスト２のプロセッサ１２上で動作している総プロセス数を管理する（ステップＳ１１）。総プロセス数が増減した、または前回の通知から一定期間が経過した、といった通知条件が成立した時（ステップＳ１２のＹＥＳ）、プロセス監視部４１は、総プロセス数を示す情報をＳＳＤ３に送信して総プロセス数をＳＳＤ３に通知する（ステップＳ１３）。
【０１２８】
ＳＳＤ３のコントローラ４は、総プロセス数を示す通知をホスト２から受信する（ステップＳ２１）。コントローラ４のホスト要求処理部４０２は、ホスト２によって通知された総プロセス数を第１の閾値と比較して、総プロセス数が第１の閾値を上回っているか否かを判定する（ステップＳ２２）。
【０１２９】
総プロセス数が第１の閾値を上回っているならば（ステップＳ２２のＹＥＳ）、ホスト要求処理部４０２は、データ制御部４０３を使用して、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行する（ステップＳ２３）。ステップＳ２３では、ホスト要求処理部４０２からデータ制御部４０３にデータ移動が指示される。そして、データ制御部４０３がデータを多値度の低いブロックから多値度の高いブロックに移動する。例えば、データ制御部４０３は、ＳＬＣブロックに格納されているデータ（有効データ）を読み出し、このデータを、ＭＣＬブロックにＭＬＣモードで書き込むか、またはＴＬＣブロックにＴＬＣモードで書き込む。これにより、ＳＬＣブロックに格納されているデータがＳＬＣブロックからＭＣＬブロックまたはＴＬＣブロックに移動される。データの移動によって有効データが無くなったＳＬＣブロックはフリーブロックとなる。
【０１３０】
したがって、ホスト２（プロセッサ１２）上で動作しているプロセスの数の増加によってスワップアウトが起こる前に、ＳＬＣのフリーブロックを事前に確保しておくことが可能となり、スワップアウトに要する時間を低減することができる。この結果、コンピュータシステム１全体の性能を改善することが可能となる。
【０１３１】
総プロセス数が第１の閾値を上回っていないならば（ステップＳ２２のＮＯ）、ホスト要求処理部４０２は、総プロセス数を第２の閾値（＜第１の閾値）と比較して、総プロセス数が第２の閾値を下回っているか否かを判定する（ステップＳ２４）。
【０１３２】
総プロセス数が第２の閾値を下回っているならば（ステップＳ２４のＹＥＳ）、ホスト要求処理部４０２は、データ制御部４０３を使用して、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行する（ステップＳ２５）。ステップＳ２５では、ホスト要求処理部４０２からデータ制御部４０３にデータの移動が指示される。そして、データ制御部４０３は、データを多値度の低いブロックから多値度の高いブロックに移動する。例えば、データ制御部４０３は、ＳＬＣブロックに格納されているデータ（有効データ）を読み出し、このデータを、ＭＣＬブロックにＭＬＣモードで書き込むか、またはＴＬＣブロックにＴＬＣモードで書き込む。これにより、ＳＬＣブロックに格納されているデータがＳＬＣブロックからＭＣＬブロックまたはＴＬＣブロックに移動される。このデータの移動によって、ＮＡＮＤフラッシュメモリ５の利用効率が改善される。
【０１３３】
なお、ステップＳ２３では、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行したが、例えば、ＴＬＣブロック間でデータ（有効データ）を移動してもよい。上述したように、このデータ移動はＧＣの一形態である。この場合でも、データ移動によって生成されたフリーブロックをＳＬＣ用のフリーブロックとして割り当てることによって、後のスワップアウトに備えることができる。
【０１３４】
同様に、ステップＳ２５でも、例えば、ＴＬＣブロック間でデータ（有効データ）を移動してもよい。
【０１３５】
図９のフローチャートは、ホスト２とＳＳＤ３とによって実行される、プロセス数増減通知処理およびデータ移動処理の手順を示す。
【０１３６】
ホスト２のプロセス監視部４１は、プロセス管理部３２１と共同して、ホスト２のプロセッサ１２上で動作している総プロセス数の増減を管理する（ステップＳ３１）。
【０１３７】
総プロセス数が増加したならば（ステップＳ３２のＹＥＳ）、プロセス監視部４１は、総プロセス数の増加を示す通知をＳＳＤ３に送信する（ステップＳ３３）。
【０１３８】
一方、総プロセス数が減少したならば（ステップＳ３４のＹＥＳ）、プロセス監視部４１は、総プロセス数の減少を示す通知をＳＳＤ３に送信する（ステップＳ３５）。
【０１３９】
ＳＳＤ３のコントローラ４が総プロセス数の増加を示す通知をホスト２から受信したならば（ステップＳ４１のＹＥＳ）、コントローラ４のホスト要求処理部４０２は、データ制御部４０３を使用して、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行する（ステップＳ４２）。ステップＳ４２では、ホスト要求処理部４０２からデータ制御部４０３にデータの移動が指示され、データ制御部４０３がデータを多値度の低いブロックから多値度の高いブロックに移動する。例えば、データ制御部４０３は、ＳＬＣブロックに格納されているデータ（有効データ）を読み出し、このデータを、ＭＣＬブロックにＭＬＣモードで書き込むか、またはＴＬＣブロックにＴＬＣモードで書き込む。これにより、ＳＬＣブロックに格納されているデータがＳＬＣブロックからＭＣＬブロックまたはＴＬＣブロックに移動される。データの移動によって有効データが無くなったＳＬＣブロックはフリーブロックとなる。
【０１４０】
したがって、スワップアウトが起こる前に、ＳＬＣ用のフリーブロックを事前に確保しておくことが可能となり、スワップアウトに要する時間を低減することができる。この結果、コンピュータシステム１全体の性能を改善することが可能となる。
【０１４１】
ＳＳＤ３のコントローラ４が総プロセス数の減少を示す通知をホスト２から受信したならば（ステップＳ４３のＹＥＳ）、コントローラ４のホスト要求処理部４０２は、データ制御部４０３を使用して、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行する（ステップＳ４４）。ステップＳ４４では、ホスト要求処理部４０２からデータ制御部４０３にデータの移動が指示され、データ制御部４０３がデータを多値度の低いブロックから多値度の高いブロックに移動する。例えば、データ制御部４０３は、ＳＬＣブロックに格納されているデータ（有効データ）を読み出し、このデータを、ＭＣＬブロックにＭＬＣモードで書き込むか、またはＴＬＣブロックにＴＬＣモードで書き込む。これにより、ＳＬＣブロックに格納されているデータがＳＬＣブロックからＭＣＬブロックまたはＴＬＣブロックに移動される。このデータの移動によって、ＮＡＮＤフラッシュメモリ５の利用効率が改善される。
【０１４２】
なお、ステップＳ４２では、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行したが、例えば、ＴＬＣブロック間でデータ（有効データ）を移動してもよい。上述したように、このデータ移動はＧＣの一形態である。この場合でも、データ移動によって生成されたフリーブロックをＳＬＣ用のフリーブロックとして割り当てることによって、後のスワップアウトに備えることができる。
【０１４３】
同様に、ステップＳ４４でも、例えば、ＴＬＣブロック間でデータ（有効データ）を移動してもよい。これにより、ＴＬＣブロックのフラグメンテーションを低減することができる。
【０１４４】
図８のフローチャートおよび図９のフローチャートを参照して説明したホスト２の処理は、ホストソフトウェア（ストレージドライバ３１、オペレーティングシステム（ＯＳ）３２、ファイルシステム３３、プロセス監視部４１、等）を実行するように構成されたプロセッサ１２によって実行される。
【０１４５】
（第２実施形態）
第１実施形態では、ホスト２からＳＳＤ３に通知される総プロセス数（または総プロセス数の増減）に基づいてデータ移動を実行した。第２実施形態では、プロセスの識別子がホスト２からＳＳＤ３に通知され、特定のプロセスによって書き込まれたデータがブロック間で移動される。なお、第２実施形態におけるＳＳＤ３のハードウェア構成およびホスト２のハードウェア構成は第１実施形態のＳＳＤ３およびホスト２と同様である。
【０１４６】
＜第２実施形態のデータ移動処理の説明＞
まず、第２実施形態のデータ移動処理の概要について説明する。
【０１４７】
ホスト２は、ホスト２において生成された各プロセスの識別子を示す情報をＳＳＤ３に通知することができる。また、ホスト２は、データの書き込みを要求したプロセスの識別子が各々に付与された書き込み要求それぞれをＳＳＤ３に送信することができる。ＳＳＤ３のコントローラ４は、生成された各プロセスの識別子と、前記生成された各プロセスによって書き込まれたデータに対応するアドレス範囲との対応関係を管理テーブルを使用して管理する。
【０１４８】
ＳＳＤ３のコントローラ４は、あるプロセスの終了を示す通知をホスト２から受信した後、管理テーブルに基づいて、終了したプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータを多値度の低いブロックからより多値度の高いブロックに移動する処理を実行する。
【０１４９】
終了したプロセスに対応するデータは、しばらくの間、ホスト２からアクセスされることはない。したがって、終了したプロセスに対応するデータをより多値度の高いブロックに移動させても、このデータの読み出し速度が低下するといった現象は起こらないので、性能の低下を招くことなく、後続のホスト２からの書き込み要求に備えることができる。
【０１５０】
なお、終了したプロセスに対応するデータの移動は、同じ多値度のブロック間で行ってもよい。この場合でも、データ移動は、上述のＧＣの一形態である。このデータ移動によって生成されたフリーブロックをＳＬＣのフリーブロックとして割り当てることにより、後続のホスト２からの書き込み要求に備えることができる。
【０１５１】
また、ホスト２は、データの書き込みを要求したプロセスの識別子が各々に付与された書き込み要求をＳＳＤ３に送信するだけでなく、データの読み出しを要求したプロセスの識別子が各々に付与された読み出し要求をもＳＳＤ３に送信してもよい。この場合、ＳＳＤ３のコントローラ４は、生成された各プロセスの識別子と、生成された各プロセスによってアクセスされた（読み出しまたは書き込みされた）データに対応するアドレス範囲との対応関係を管理テーブルを使用して管理すればよい。そして、ＳＳＤ３のコントローラ４は、あるプロセスの終了を示す通知をホスト２から受信した後、この管理テーブルに基づいて、終了したプロセスによってアクセスされた（読み出しまたは書き込みされた）データを多値度の低いブロックからより多値度の高いブロックに移動させる。
【０１５２】
また、第１実施形態と同様に、データを移動する処理は、必ずしも、終了したプロセスがホスト２から通知された時点で直ちに実行される必要は無く、後で実行されてもよい。
【０１５３】
以下、第２実施形態のデータ移動処理を実現するための具体的な構成について説明する。
【０１５４】
図１０は、ホスト２の内部構成例を示す。
【０１５５】
図１０の内部構成例は、図６の内部構成例に比し、ストレージドライバ３１の前段にフィルタドライバ４２が追加されている点が異なる。
【０１５６】
第１実施形態で説明したように、ホスト２のプロセス監視部４１はホスト２で動作しているプロセスそれぞれを把握している。またプロセス監視部４１は、ファイルシステム３３から、各プロセスが読み書きしたＬＢＡ領域（ＬＢＡ範囲）の情報を取得している。また、読み出し要求および書き込み要求の各々はアクセス先ＬＢＡ領域を指定する情報（先頭ＬＢＡとデータサイズ）を含む。このため、プロセス監視部４１は、フィルタドライバ４２を追加し、読み出し／書き込み要求に含まれるアクセス先ＬＢＡ領域を参照することによって、このデータの読み出し／書き込みを要求した要求元のプロセスを特定することができ、さらに、フィルタドライバ４２を使用して、この特定されたプロセスの識別子をこの読み出し／書き込み要求に付与することができる。したがって、ストレージドライバ３１は、データの読み出し／書き込みを要求したプロセスの識別子が付与された読み出し／書き込み要求をＳＳＤ３に送信することができる。この場合、プロセスの識別子を含む読み出し／書き込み要求（リード／ライトコマンド）がＳＳＤ３に送信されてもよい。
【０１５７】
ＳＳＤ３のコントローラ４は、プロセスの識別子が付与された読み出し／書き込み要求をホスト２から受信する。したがって、コントローラ４は、この読み出し／書き込み要求に基づいて、データの読み出し／書き込みを要求した要求元のプロセスの識別子を検出することができる。
【０１５８】
このプロセスの識別子は、プロセスＩＤでもよいし、プロセスの元となったプログラムのＩＤでもよいし、このプログラムの名称またはこのプログラムのファイル名でもよい。
【０１５９】
ＳＳＤ３のデータ制御部４０３は、受信された読み出し／書き込み要求内のプロセス識別子を使用して、図１１に示すテーブル（以下、プロセスデータ管理テーブルと呼ぶ）を作成する。
【０１６０】
データ制御部４０３は、データの読み出し／書き込みを要求したプロセスそれぞれの識別子と、これらプロセスそれぞれによってアクセス（読み出し／書き込み）されたデータに対応するアドレス範囲それぞれとの対応関係を、プロセスデータ管理テーブルを使用して管理する。
【０１６１】
このプロセスデータ管理テーブルは、複数のプロセスに対応する複数のエントリ（行）を有する。各行は、プロセス識別子フィールド、ＳＬＣフィールド、ＭＬＣフィールド、ＴＬＣフィールド、プロセス種別フィールド、ＬＢＡ領域・多値度フィールド、最終アクセス時刻フィールドを含む。
【０１６２】
あるプロセスに対応する行において、プロセス識別子フィールドは、このプロセスの識別子を示す。ＳＬＣフィールドは、このプロセスによってアクセスされる全データ量のうち、ＳＬＣモードで格納されているデータ量を示す。ＭＬＣフィールドは、このプロセスによってアクセスされる全データ量のうち、ＭＬＣモードで格納されているデータ量を示す。ＴＬＣフィールドは、このプロセスによってアクセスされる全データ量のうち、ＴＬＣモードで格納されているデータ量を示す。プロセス種別フィールドは、このプロセスがシステムプロセスまたはユーザプロセスのいずれであるかを示す。ＬＢＡ領域・多値度フィールドは、このプロセスによってアクセス（読み出し／書き込み）されたＬＢＡ領域（先頭ＬＢＡとサイズ（論理ブロックの数））と、そのＬＢＡ領域のデータがどの多値度のブロックに格納されているかを示す。このＬＢＡ領域は、このプロセスによって読み出し／書き込みされたデータに対応するアドレス範囲を表している。最終アクセス時刻フィールドは、このプロセスが最後にＳＳＤ３にアクセスした最終アクセス時刻、つまりこのプロセスが最後にＳＳＤ３からのデータの読み出しまたはＳＳＤ３へのデータの書き込みを行った最終アクセス時刻を示す。なお、最終アクセス時刻は、図１１に示すように、ＬＢＡ領域毎に管理されてもよい。
【０１６３】
本実施形態では、データを多値度の異なる複数のブロック間で移動することにより、同じプロセスのデータを多値度の異なる複数のブロックに分散させることもできる。例えば、あるプロセスに対応するプログラムがＴＬＣブロックのような多値度の高いブロックに格納されてもよいし、このプロセスによって作成されたファイルのようなデータがＳＬＣブロックに格納されてもよい。この場合、このプログラムに割り当てられたＬＢＡ領域に対応する多値度はＴＬＣを示し、ファイルのようなデータに割り当てられたＬＢＡ領域に対応する多値度はＳＬＣを示す。通常、プログラムは滅多に更新されないのに対し、ファイルのようなデータは比較的高い頻度で更新される。したがって、あるプロセスに対応するプログラムをＴＬＣブロックのような多値度の高いブロックに格納し、このプロセスによって作成されたファイルのようなデータをＳＬＣブロックに格納するというデータ配置を利用することによって、ファイルのようなデータを高速に読み出し／書き込みすることと、ＮＡＮＤフラッシュメモリ５の利用効率の改善することの双方を実現することができる。
【０１６４】
図１１のプロセスデータ管理テーブルは、図５のＮＡＮＤ管理テーブルと同様に、データ制御部４０３が管理および更新する。
【０１６５】
プロセスデータ管理テーブルに新しいプロセスの行を追加するタイミングは、例えば、ホスト２のプロセス監視部４１が、プロセスが生成されたことをＳＳＤ３に通知した時である。例えば、プロセス監視部４１は、ホスト２において生成されたプロセスの識別子を含む情報を、プロセスの生成を示す通知としてＳＳＤ３に送信してもよい。
【０１６６】
一方、プロセスデータ管理テーブルから特定のプロセスの行を削除するタイミングは、例えば、ホスト２のプロセス監視部４１が、プロセスが終了したことをＳＳＤ３に通知した時である。例えば、プロセス監視部４１は、ホスト２において終了されたプロセスの識別子を含む情報を、プロセスの終了を示す通知としてＳＳＤ３に送信してもよい。
【０１６７】
なお、プロセスが終了したことがホスト２から通知されても、プロセスデータ管理テーブルからこのプロセスの行を削除しない形態も考えられる。
【０１６８】
特に、プロセスを識別する識別子として、プロセスの元となったプログラム名を使用する構成においては、後に同一プログラムが起動された場合に備えて、プロセスデータ管理テーブルに終了されたプロセスに関するデータ（行）を残しておく、という活用方法が考えられる。この場合、プロセスデータ管理テーブルからデータ（行）を削除するタイミングは、プロセスデータ管理テーブルのサイズが大きくなりすぎた時、などが考えられる。
【０１６９】
具体的な処理は次のようになる。
【０１７０】
まず、プロセスの終了時に、ホスト２のプロセス監視部４１が終了したプロセスの識別子をＳＳＤ３に通知する。ＳＳＤ３のコントローラ４が終了したプロセスの識別子をホスト２から受信した後、コントローラ４は、プロセスデータ管理テーブルからこの終了したプロセスの行を特定し、この終了したプロセスがアクセスしていたデータ（例えば、終了したプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、または終了したプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）を、より多値度の高いブロックに移動させる。これにより、より効率的に多値度の低いブロックのフリーブロック数を増やし、ＮＡＮＤフラッシュメモリ５の利用効率の改善を図ることができる。
【０１７１】
また、図１１のプロセスデータ管理テーブルは、第１実施形態において移動対象データを選択するためにも利用できる。
【０１７２】
例えば、ホスト２のプロセス監視部４１から通知された総プロセス数が第１の閾値を超えているならば、あるいはホスト２のプロセス監視部４１から総プロセス数の増加が通知されたならば、ＳＳＤ３のコントローラ４は、図１１のプロセスデータ管理テーブルを参照し、多値度の低いブロックにより多くのデータが格納されているプロセスを特定し、この特定されたプロセスがアクセスしていたデータ（例えば、この特定したプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはこの特定したプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）を、多値度の低いブロックからより多値度の高いブロックに移動する処理を実行する。
【０１７３】
もしくは、ホスト２のプロセス監視部４１から通知された総プロセス数が第１の閾値を超えているならば、あるいはホスト２のプロセス監視部４１から総プロセス数の増加が通知されたならば、ＳＳＤ３のコントローラ４は、図１１のプロセスデータ管理テーブルを参照し、最終アクセス時刻の最も古いプロセスを特定し、この特定されたプロセスがアクセスしていたデータ（例えば、この特定したプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはこの特定したプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）を、多値度の低いブロックからより多値度の高いブロックに移動する処理を実行してもよい。
【０１７４】
図１２のフローチャートは、ホスト２とＳＳＤ３とによって実行されるデータ読み出し／書き込み処理の手順を示す。
【０１７５】
読み出し／書き込み要求をＳＳＤ３に送信すべき時（ステップＳ５１のＹＥＳ）、ホスト２のプロセス監視部４１は、データの読み出しまたは書き込みを要求した要求元のプロセスの識別子をこの読み出し／書き込み要求に付与し（ステップＳ５２）、この要求元のプロセスの識別子が付与された読み出し／書き込み要求をＳＳＤ３に送信する（ステップＳ５３）。
【０１７６】
ＳＳＤ３のコントローラ４は、読み出し／書き込み要求をホスト２から受信する（ステップＳ６１）。ホスト要求処理部４０２は、この受信された読み出し／書き込み要求に基づいて、ＮＡＮＤフラッシュメモリ５からのデータの読み出しまたはＮＡＮＤフラッシュメモリ５へのデータの書き込みをデータ制御部４０３に指示し、データ制御部４０３は、ＮＡＮＤフラッシュメモリ５からのデータの読み出しまたはＮＡＮＤフラッシュメモリ５へのデータの書き込みを行う（ステップＳ６２）。さらに、データ制御部４０３は、読み出し／書き込み要求に付与されたプロセスの識別子と、このプロセスによって読み出しまたは書き込まれたデータのアドレス範囲（ＬＢＡ領域）との対応関係を図１１のプロセスデータ管理テーブルに格納する（ステップＳ６３）。
【０１７７】
図１３のフローチャートは、プロセスの終了に応じてホストと第２実施形態のストレージデバイスとによって実行される、プロセス識別子通知処理およびデータ移動処理の手順を示す。
【０１７８】
あるプロセスが終了した時（ステップＳ５４のＹＥＳ）、ホスト２のプロセス監視部４１は、この終了したプロセスの識別子をＳＳＤ３に通知する（ステップＳ５５）。
【０１７９】
ＳＳＤ３のコントローラ４は、終了したプロセスの識別子をホスト２から受信する（ステップＳ６４）。ホスト要求処理部４０２は、データ制御部４０３に、終了したプロセスのデータの移動を指示し、データ制御部４０３は、図１１のプロセスデータ管理テーブルに基づいて、終了したプロセスによってアクセスされたデータ（例えば、終了したプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、または終了したプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）をより多値度の高いブロックに移動する処理を実行する（ステップＳ６５）。
【０１８０】
図１４のフローチャートは、総プロセス数が閾値を超えている場合またはプロセス数の増加の通知を受信した場合にＳＳＤ３によって実行されるデータ移動処理の手順を示す。
【０１８１】
ホスト２から通知された総プロセス数が第１の閾値を超えているならば、あるいはホスト２のプロセス監視部４１から総プロセス数の増加が通知されたならば（ステップＳ７１のＹＥＳ）、ホスト要求処理部４０２は、データ制御部４０３にデータの移動を指示する。データ制御部４０３は、図１１のプロセスデータ管理テーブルを参照し、多値度の低いブロックにより多くのデータが格納されているプロセスを特定し、この特定されたプロセスがアクセスしていたデータ（例えば、この特定したプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはこの特定したプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）を、多値度の低いブロックからより多値度の高いブロックに移動する処理を実行する（ステップＳ７２）。
【０１８２】
あるいは、ステップＳ７２では、データ制御部４０３は、図１１のプロセスデータ管理テーブルを参照し、最終アクセス時刻の最も古いプロセスを特定し、この特定されたプロセスがアクセスしていたデータ（例えば、この特定したプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはこの特定したプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）を、多値度の低いブロックからより多値度の高いブロックに移動する処理を実行してもよい。
【０１８３】
図１２のフローチャート、図１３のフローチャート、および図１４のフローチャートを参照して説明したホスト２の処理は、ホストソフトウェア（ストレージドライバ３１、オペレーティングシステム（ＯＳ）３２、ファイルシステム３３、プロセス監視部４１、等）を実行するように構成されたプロセッサ１２によって実行される。
【０１８４】
（第３実施形態）
以下、生成されたプロセスの識別子と生成されたプロセスがシステムプロセスまたはユーザプロセスのいずれであるかを示す種別（プロセス種別）とをホスト２からＳＳＤ３に通知し、ＳＳＤ３が、ユーザプロセスによってアクセスされたデータ（例えばユーザプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはユーザプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）を、システムプロセスによってアクセスされたデータ（例えばシステムプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはシステムプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）よりも優先して移動対象データとして選択する処理を実行する、という構成を、第３実施形態として説明する。
【０１８５】
なお、第２実施形態におけるＳＳＤ３のハードウェア構成およびホスト２のハードウェア構成は第１実施形態のＳＳＤ３およびホスト２と同様であり、ホスト２の内部構成は図１０で説明した内部構成と同様である。
【０１８６】
第１実施形態および第２実施形態において、プロセス監視部４１はホスト２上のプロセスの状態を管理しているが、前述の通り、プロセスにはユーザプロセスとシステムプロセスといった種別がある
前述した通り、プロセスはスワップアウトやスワップインすることがあるが、システムプロセスはホスト２の正常な動作のため必要なプロセスであるため、スワップアウトすることは稀である。換言すれば、スワップアウト、スワップインされるほとんどのプロセスはユーザプロセスであり、システムプロセスはホスト２のメモリ１３に常駐するケースが多い。したがって、起動されたシステムプロセスは、ＳＳＤ３に読み出し／書き込み要求を送出する可能性が高い。
【０１８７】
そこで、ホスト２のプロセス監視部４１は、ＳＳＤ３にプロセスの生成を通知する際に、その生成されたプロセスの識別子だけでなく、その生成されたプロセスがシステムプロセスまたはユーザプロセスのいずれであるかを示す種別もＳＳＤ３に通知する。
【０１８８】
ＳＳＤ３のデータ制御部４０３は、図１１のプロセスデータ管理テーブルを使用して、生成された各プロセスの識別子と、生成された各プロセスの種別と、生成された各プロセスによってアクセスされたデータ（例えば、生成されたプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、または生成されたプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）に対応するアドレス範囲（ＬＢＡ領域）、等との対応関係を管理する。そして、データ制御部４０３は、どのプロセスのデータをより多値度の高いブロックに移動させるかを判断する場合に、種別がユーザプロセスであるプロセスによってアクセスされたデータを、種別がシステムプロセスであるプロセスによってアクセスされたデータよりも優先して選択する。これにより、ユーザプロセスのデータを、アクセスされる可能性が高いシステムプロセスのデータよりも優先して多値度の高いブロックに移動することができるので、ホスト２から見たＳＳＤ３の性能、ひいてはユーザから見たＳＳＤ３の性能をより向上させることができる。
【０１８９】
図１５のフローチャートは、ホスト２によって実行される、生成されたプロセスの種別（ユーザプロセス／システムプロセス）をＳＳＤ３に通知する処理の手順を示す。
【０１９０】
ホスト２において新たなプロセスが生成されたことを検出した場合（ステップＳ８１のＹＥＳ）、ホスト２のプロセス監視部４１は、生成されたプロセスの識別子とこの生成されたプロセスの種別とをＳＳＤ３に通知する（ステップＳ８２）。
【０１９１】
図１６のフローチャートは、ホスト２とＳＳＤ３とによって実行される、プロセス数増減通知処理およびデータ移動処理の手順を示す。
【０１９２】
ホスト２のプロセス監視部４１は、プロセス管理部３２１と共同して、ホスト２のプロセッサ１２上で動作している総プロセス数の増減を管理する（ステップＳ９１）。
【０１９３】
総プロセス数が増加したならば（ステップＳ９２のＹＥＳ）、プロセス監視部４１は、総プロセス数の増加を示す通知をＳＳＤ３に送信する（ステップＳ９３）。
【０１９４】
一方、総プロセス数が減少したならば（ステップＳ９４のＹＥＳ）、プロセス監視部４１は、総プロセス数の減少を示す通知をＳＳＤ３に送信する（ステップＳ９５）。
【０１９５】
ＳＳＤ３のコントローラ４が総プロセス数の増加を示す通知をホスト２から受信したならば（ステップＳ１０１のＹＥＳ）、コントローラ４のホスト要求処理部４０２は、データ制御部４０３を使用して、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行する（ステップＳ１０２）。ステップＳ１０２では、ホスト要求処理部４０２からデータ制御部４０３にデータの移動が指示され、データ制御部４０３が、図１１のプロセスデータ管理テーブルに基づき、ユーザプロセスによってアクセスされたデータ（例えば、ユーザプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはユーザプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）を、システムプロセスによってアクセスされたデータ（例えば、システムプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはシステムプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）よりも優先して移動対象データとして選択し、この選択した移動対象データを、多値度の低いブロックから多値度の高いブロックに移動する。
【０１９６】
したがって、スワップアウトが起こる前に、ＳＬＣ用のフリーブロックを事前に確保しておくことが可能となり、スワップアウトに要する時間を低減することができる。この結果、コンピュータシステム１全体の性能を改善することが可能となる。
【０１９７】
ＳＳＤ３のコントローラ４が総プロセス数の減少を示す通知をホスト２から受信したならば（ステップＳ１０３のＹＥＳ）、コントローラ４のホスト要求処理部４０２は、データ制御部４０３を使用して、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行する（ステップＳ１０４）。ステップＳ１０４では、ホスト要求処理部４０２からデータ制御部４０３にデータの移動が指示され、データ制御部４０３が、図１１のプロセスデータ管理テーブルに基づき、ユーザプロセスによってアクセスされたデータ（例えば、ユーザプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはユーザプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）を、システムプロセスによってアクセスされたデータ（例えば、システムプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはシステムプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）よりも優先して移動対象データとして選択し、この選択した移動対象データを、多値度の低いブロックから多値度の高いブロックに移動する。このデータの移動によって、ＮＡＮＤフラッシュメモリ５の利用効率が改善される。
【０１９８】
なお、ステップＳ１０２では、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行したが、例えば、ユーザプロセスによってアクセスされたデータ（有効データ）をＴＬＣブロック間で移動してもよい。上述したように、このデータ移動はＧＣの一形態である。この場合でも、データ移動によって生成されたフリーブロックをＳＬＣ用のフリーブロックとして割り当てることによって、後のスワップアウトに備えることができる。
【０１９９】
同様に、ステップＳ１０４でも、例えば、ＴＬＣブロック間でユーザプロセスのデータ（有効データ）を移動してもよい。
【０２００】
図１７のフローチャートは、ホスト２とＳＳＤ３とによって実行される、総プロセス数通知処理およびデータ移動処理の手順を示す。
【０２０１】
ホスト２のプロセス監視部４１は、プロセス管理部３２１と共同して、ホスト２のプロセッサ１２上で動作している総プロセス数を管理する（ステップＳ１１１）。総プロセス数が増減した、または前回の通知から一定期間が経過した、といった通知条件が成立した時（ステップＳ１１２のＹＥＳ）、プロセス監視部４１は、総プロセス数を示す情報をＳＳＤ３に送信して総プロセス数をＳＳＤ３に通知する（ステップＳ１１３）。
【０２０２】
ＳＳＤ３のコントローラ４は、総プロセス数を示す通知をホスト２から受信する（ステップＳ１２１）。コントローラ４のホスト要求処理部４０２は、ホスト２によって通知された総プロセス数を第１の閾値と比較して、総プロセス数が第１の閾値を上回っているか否かを判定する（ステップＳ１２２）。
【０２０３】
総プロセス数が第１の閾値を上回っているならば（ステップＳ１２２のＹＥＳ）、ホスト要求処理部４０２は、データ制御部４０３を使用して、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行する（ステップＳ１２３）。ステップＳ１２３では、ホスト要求処理部４０２からデータ制御部４０３にデータ移動が指示される。そして、データ制御部４０３が、図１１のプロセスデータ管理テーブルに基づき、ユーザプロセスによってアクセスされたデータ（例えば、ユーザプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはユーザプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）を、システムプロセスによってアクセスされたデータ（例えば、システムプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはシステムプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）よりも優先して移動対象データとして選択し、この選択した移動対象データを、多値度の低いブロックから多値度の高いブロックに移動する。
【０２０４】
したがって、スワップアウトが起こる前に、ＳＬＣ用のフリーブロックを事前に確保しておくことが可能となり、スワップアウトに要する時間を低減することができる。この結果、コンピュータシステム１全体の性能を改善することが可能となる。
【０２０５】
総プロセス数が第１の閾値を上回っていないならば（ステップＳ１２２のＮＯ）、ホスト要求処理部４０２は、総プロセス数を第２の閾値（＜第１の閾値）と比較して、総プロセス数が第２の閾値を下回っているか否かを判定する（ステップＳ１２４）。
【０２０６】
総プロセス数が第２の閾値を下回っているならば（ステップＳ１２４のＹＥＳ）、ホスト要求処理部４０２は、データ制御部４０３を使用して、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行する（ステップＳ１２５）。ステップＳ１２５では、ホスト要求処理部４０２からデータ制御部４０３にデータの移動が指示される。そして、データ制御部４０３は、図１１のプロセスデータ管理テーブルに基づき、ユーザプロセスによってアクセスされたデータ（例えば、ユーザプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはユーザプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）を、システムプロセスによってアクセスされたデータ（例えば、システムプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはシステムプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）よりも優先して移動対象データとして選択し、この選択した移動対象データを、多値度の低いブロックから多値度の高いブロックに移動する。このデータの移動によって、ＮＡＮＤフラッシュメモリ５の利用効率が改善される。
【０２０７】
なお、ステップＳ１２３では、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行したが、例えば、ユーザプロセスによってアクセスされたデータ（有効データ）をＴＬＣブロック間で移動してもよい。上述したように、このデータ移動はＧＣの一形態である。この場合でも、データ移動によって生成されたフリーブロックをＳＬＣ用のフリーブロックとして割り当てることによって、後のスワップアウトに備えることができる。
【０２０８】
同様に、ステップＳ１２５でも、例えば、ＴＬＣブロック間でユーザプロセスのデータ（有効データ）を移動してもよい。
【０２０９】
また、もし複数のプロセスの終了がホスト２からＳＳＤ３に通知されたならば、ＳＳＤ３のコントローラ４は、終了が通知されたプロセスのうち、種別がユーザプロセスであるプロセスによってアクセスされたデータを、種別がシステムプロセスであるプロセスによってアクセスされたデータよりも優先して移動対象データとして選択してもよい。
【０２１０】
この場合、図１８のフローチャートで示す手順がＳＳＤ３のコントローラ４によって実行される。
【０２１１】
複数のプロセスの終了がホスト２からＳＳＤ３に通知されたならば、ＳＳＤ３のコントローラ４のホスト要求処理部４０２は、データ制御部４０３にデータの移動を指示する。そして、データ制御部４０３は、図１１のプロセスデータ管理テーブルに基づき、終了が通知されたプロセスのうち、種別がユーザプロセスであるプロセスによってアクセスされたデータ（ユーザプロセスによってＮＡＮＤフラッシュメモリ５に書き込まれたデータ、またはユーザプロセスによってＮＡＮＤフラッシュメモリ５からの読み出しまたはＮＡＮＤフラッシュメモリ５への書き込みのいずれかが行われたデータ）をシステムプロセスのデータよりも優先して移動対象データとして選択する（ステップＳ１２７）。
【０２１２】
そして、データ制御部４０３は、この移動対象データをより多値度の高いブロックに移動する処理を実行する（ステップＳ１２８）。
【０２１３】
図１５のフローチャート、図１６のフローチャート、図１７のフローチャート、および図１８のフローチャートを参照して説明したホスト２の処理は、ホストソフトウェア（ストレージドライバ３１、オペレーティングシステム（ＯＳ）３２、ファイルシステム３３、プロセス監視部４１、等）を実行するように構成されたプロセッサ１２によって実行される。
【０２１４】
（第４実施形態）
第４実施形態では、ホスト２のメモリ１３の使用量がホスト２からＳＳＤ３に通知される。ＳＳＤ３のコントローラ４は、メモリ１３の使用量が第３の閾値を上回っている場合、スワップアウトに備えてデータの移動を行う。このデータの移動は、ＧＣの一形態である。
【０２１５】
また、メモリ１３の使用量が第３の閾値よりも小さい第４の閾値を下回っている場合も、ＳＳＤ３のコントローラ４は、データの移動を行ってもよい。このデータの移動も、ＧＣの一形態である。メモリ１３の使用量が少ないときは、スワップアウトは発生しにくいので、ホスト２からのデータの書き込み量は比較的少ない。したがって、メモリ１３の使用量が少ないときにデータ移動を行うことにより、ホスト２から見たＳＳＤ３のデータ書き込み性能の低下を招くこと無く、例えば、ＳＬＣのフリーブロックを事前に増やすことができる。
【０２１６】
なお、ホスト２のメモリ１３の使用量は、メモリ１３の総使用量によって表されてもよいし、メモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合によって表されてもよい。
【０２１７】
また、第４実施形態におけるＳＳＤ３のハードウェア構成およびホスト２のハードウェア構成は第１実施形態のＳＳＤ３およびホスト２と同様であり、ホスト２の内部構成は図１０で説明した内部構成と同様である。
【０２１８】
前述の通り、ホスト２のプロセス監視部４１は、ホスト２上で動作しているプロセスに割り当てられたメモリ領域のサイズを知っている。そこで、プロセス監視部４１は、ホスト２のメモリの１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）をＳＳＤ３に通知する。ＳＳＤ３は、ホスト２のメモリの１３の使用量に関する情報を受信し、以下の処理を行う。
【０２１９】
ＳＳＤ３のコントローラ４は、ホスト２のメモリの１３の使用量が第３の閾値より多い場合、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動させる。ホスト２のメモリ使用量が多くなったことは、プロセスのスワップアウトが近い将来行われる可能性が高いことを示す。したがって、低い多値度用のフリーブロックを作成しておくことにより、プロセスのスワップアウトおよびスワップインをより短い時間で行うことができるようになる。これにより、ホスト２から見たＳＳＤ３の性能、ひいてはユーザから見たＳＳＤ３の性能をより向上させることができる。
【０２２０】
またＳＳＤ３のコントローラ４は、ホスト２のメモリの１３の使用量が第４の閾値（＜第３の閾値）より少ない場合、多値度の低いブロックに記録されているデータをより多値度の高いブロックに移動させる。ホスト２のメモリ使用量が少ないということは、近い将来、ＳＳＤ３へのアクセスが少ない可能性が高いことを示す。したがって、低い多値度用のフリーブロックを作成することにより、ＮＡＮＤフラッシュメモリ５の利用効率を改善することができる。
【０２２１】
フリーブロックを作成するために、どのプロセスのデータを移動対象にするかの判断は、例えば、これまでに説明した各実施形態と同様の方法で行うことができる。
【０２２２】
図１９のフローチャートは、ホスト２とＳＳＤ３とによって実行される、使用メモリ量通知処理およびデータ移動処理の手順を示す。
【０２２３】
ホスト２のプロセス監視部４１は、プロセス管理部３２１と共同して、ホスト２のメモリ１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）を管理する（ステップＳ１３１）。メモリ１３の使用量が増減した、または前回の通知から一定期間が経過した、といった通知条件が成立した時（ステップＳ１３２のＹＥＳ）、プロセス監視部４１は、ホスト２のメモリ１３の使用量を示す情報（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）をＳＳＤ３に送信してホスト２のメモリ１３の使用量をＳＳＤ３に通知する（ステップＳ１３３）。
【０２２４】
ＳＳＤ３のコントローラ４は、ホスト２のメモリ１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）をホスト２から受信する（ステップＳ１４１）。コントローラ４のホスト要求処理部４０２は、ホスト２によって通知されたメモリ１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）を第３の閾値と比較して、メモリ１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）が第３の閾値を上回っているか否かを判定する（ステップＳ１４２）。
【０２２５】
メモリ１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）が第３の閾値を上回っているならば（ステップＳ１４２のＹＥＳ）、ホスト要求処理部４０２は、データ制御部４０３を使用して、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行する（ステップＳ１４３）。ステップＳ１４３では、ホスト要求処理部４０２からデータ制御部４０３にデータ移動が指示される。そして、データ制御部４０３がデータを多値度の低いブロックから多値度の高いブロックに移動する。
【０２２６】
メモリ１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）が第３の閾値を上回っていないならば（ステップＳ１４２のＮＯ）、ホスト要求処理部４０２は、メモリ１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）を第４の閾値（＜第３の閾値）と比較して、メモリ１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）が第４の閾値を下回っているか否かを判定する（ステップＳ１４４）。
【０２２７】
メモリ１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）が第４の閾値を下回っているならば（ステップＳ１４４のＹＥＳ）、ホスト要求処理部４０２は、データ制御部４０３を使用して、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行する（ステップＳ１４５）。ステップＳ１４５では、ホスト要求処理部４０２からデータ制御部４０３にデータの移動が指示される。そして、データ制御部４０３は、データを多値度の低いブロックから多値度の高いブロックに移動する。
【０２２８】
なお、ステップＳ１４３では、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理（ＧＣの一形態）を実行したが、例えば、ＴＬＣブロック間でデータ（有効データ）を移動する処理（ＧＣの一形態）を実行してもよい。この場合でも、データ移動によって生成されたフリーブロックをＳＬＣ用のフリーブロックとして割り当てることによって、後のスワップアウトに備えることができる。
【０２２９】
同様に、ステップＳ１４５でも、例えば、ＴＬＣブロック間でデータ（有効データ）を移動する処理（ＧＣの一形態）を実行してもよい。
【０２３０】
図１９のフローチャートを参照して説明したホスト２の処理は、ホストソフトウェア（ストレージドライバ３１、オペレーティングシステム（ＯＳ）３２、ファイルシステム３３、プロセス監視部４１、等）を実行するように構成されたプロセッサ１２によって実行される。
【０２３１】
（第５実施形態）
第５実施形態では、次に起こるスワップアウトによってホスト２からＳＳＤ３に書き込まれるデータ量を示す情報がＳＳＤ３に通知される。ＳＳＤ３のコントローラ４は、例えば、メモリ１３の使用量が第３の閾値を上回っている場合、ホスト２から通知されたデータ量に対応する空き容量が多値度の低いブロックに確保されるように、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行する。
【０２３２】
ホスト２のプロセス監視部４１は、次にホスト２で行われるスワップアウトの対象プロセスを知ることができる。スワップアウトの対象プロセスは、例えば、最終起動時刻が古いプロセスや、最も割り当てメモリサイズの大きいプロセスである。したがって、プロセス監視部４１は、次に起こるスワップアウトによってＳＳＤ３に書きこまれるデータ量を予測することができる。そこで、プロセス監視部４１は次に起こるスワップアウトによってＳＳＤ３に書きこまれると予測されるデータ量をＳＳＤ３に通知する。
【０２３３】
通知を受けたＳＳＤ３のコントローラは、多値度の低いブロックに通知された量の空き容量ができるように、データの移動を行う。これにより、スワップアウトにかかる時間を短縮でき、ホスト２から見たＳＳＤ３の性能、ひいてはユーザから見たＳＳＤ３の性能をより向上させることができる。
【０２３４】
どのプロセスのデータを移動対象にするかの判断は、例えば、これまでに説明した各実施形態と同様の方法で行うことができる。
【０２３５】
図２０のフローチャートは、ホスト２とＳＳＤ３とによって実行される、スワップアウトによってＳＳＤ３に書き込まれるデータ量を通知する処理およびデータ移動処理の手順を示す。
【０２３６】
ホスト２のプロセス監視部４１は、次に起こるスワップアウトによってＳＳＤ３に書き込まれるデータ量を推定する（ステップＳ１５１）。そして、プロセス監視部４１は、この推定されるデータ量を示す情報をＳＳＤ３に送信してこの推定されるデータ量をＳＳＤ３に通知する（ステップＳ１５２）。
【０２３７】
ＳＳＤ３のコントローラ４は、この推定されるデータ量の通知をホスト２から受信する（ステップＳ１６１）。コントローラ４のホスト要求処理部４０２は、この推定されるデータ量に対応する空き容量が多値度の低いブロックに確保されるように多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動すべきことをデータ制御部４０３に指示する。この指示を受けたデータ制御部４０３は、この推定されるデータ量に対応する空き容量が多値度の低いブロックに確保されるように、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行する（ステップＳ１６２）。
【０２３８】
なお、ステップＳ１６２では、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行したが、例えば、ＴＬＣブロック間でデータ（有効データ）を移動してもよい。上述したように、このデータ移動はＧＣの一形態である。この場合でも、データ移動によって生成されたフリーブロックをＳＬＣ用のフリーブロックとして割り当てることによって、後のスワップアウトに備えることができる。
【０２３９】
図２１のフローチャートは、ホスト２とＳＳＤ３とによって実行される、使用メモリ量／スワップアウトによってＳＳＤ３に書き込まれるデータ量を通知する処理およびデータ移動処理の手順を示す。
【０２４０】
ホスト２のプロセス監視部４１は、プロセス管理部３２１と共同して、ホスト２のメモリ１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）を管理する。そして、プロセス監視部４１は、ホスト２のメモリ１３の使用量を示す情報と、次に起こるスワップアウトでＳＳＤ３に書き込まれる推定データ量とをＳＳＤ３に通知する（ステップＳ１５３）。
【０２４１】
ＳＳＤ３のコントローラ４は、ホスト２のメモリ１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）と、次に起こるスワップアウトでＳＳＤ３に書き込まれる推定データ量とをホスト２から受信する（ステップＳ１６３）。
【０２４２】
コントローラ４のホスト要求処理部４０２は、ホスト２によって通知されたメモリ１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）を第３の閾値と比較して、メモリ１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）が第３の閾値を上回っているか否かを判定する（ステップＳ１６４）。
【０２４３】
メモリ１３の使用量（メモリ１３の総使用量、またはメモリ１３の総メモリサイズに対するメモリ１３の総使用量の割合）が第３の閾値を上回っているならば（ステップＳ１６４のＹＥＳ）、ホスト要求処理部４０２は、データ制御部４０３を使用して、通知された推定データ量に対応する空き容量が多値度の低いブロックに確保されるように多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動すべきことをデータ制御部４０３に指示する。この指示を受けたデータ制御部４０３は、この推定されるデータ量に対応する空き容量が多値度の低いブロックに確保されるように、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行する（ステップＳ１６５）。
【０２４４】
なお、ステップＳ１６５では、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動する処理を実行したが、例えば、ＴＬＣブロック間でデータ（有効データ）を移動してもよい。上述したように、このデータ移動はＧＣの一形態である。この場合でも、データ移動によって生成されたフリーブロックをＳＬＣ用のフリーブロックとして割り当てることによって、後のスワップアウトに備えることができる。
【０２４５】
また、次に起こるスワップアウトによってホスト２からＳＳＤ３に書き込まれるデータ量をホスト２からＳＳＤ３に通知する処理は、第４実施形態のみならず、第１実施形態、第２実施形態、または第３実施形態に適用してもよい。例えば、スワップアウトによってホスト２からＳＳＤ３に書き込まれるデータ量をホスト２からＳＳＤ３に通知する処理が第１実施形態に適用されたならば、ＳＳＤ３のコントローラ４は、総プロセス数が第１の閾値を上回っているとの判定をした後、通知されたデータ量分の空き容量が多値度の低いブロックに確保されるように、多値度の低いブロックに格納されているデータをより多値度の高いブロックに移動してもよい。
【０２４６】
また、図２０のフローチャート、および図２１のフローチャートを参照して説明したホスト２の処理は、ホストソフトウェア（ストレージドライバ３１、オペレーティングシステム（ＯＳ）３２、ファイルシステム３３、プロセス監視部４１、等）を実行するように構成されたプロセッサ１２によって実行される。
【０２４７】
（第６実施形態）
第６実施形態では、ホスト２のプロセス監視部４１は、プログラムそれぞれが起動される頻度と共に、これらプログラムのリストを管理している。プロセス監視部４１は、起動頻度の高いプログラムを示す情報をＳＳＤ３に通知する。あるプログラムの起動頻度は、例えば、このプログラムがある基準期間内に起動された回数、またはホスト２のＯＳ３２のブートからシャットダウンまでの期間にこのプログラムが起動された回数、等によって表すことができる。基準期間内に起動された回数（またはＯＳ３２のブートからシャットダウンまでの期間に起動された回数）がある閾値を上回るプログラムが、起動頻度の高いプログラムとして検出されてもよい。
【０２４８】
ＳＳＤ３のコントローラ４は、ホスト２から通知された起動頻度の高いプログラムに対応するプロセスによって読み出しまたは書き込まれたデータを、多値度の高いブロックからより多値度の低いブロックに移動する処理を実行する。これにより、このプログラムを起動するために要する時間を短縮することができ、このプログラムを高速に起動することが可能となる。
【０２４９】
起動頻度の高いプログラムのデータをより多値度の低いブロックに移動する処理を実行するタイミングは、これに限定されないが、例えば、ホスト２から通知される総プロセス数が第２の閾値を下回ったとの判定の後であってもよいし、ホスト２から総プロセス数の減少が通知された後であってもよいし、あるいは、ホストメモリの使用量が第４の閾値を下回ったとの判定の後であってもよい。
【０２５０】
また、ＳＳＤ３のコントローラ４は、多値度の低いブロックのデータを多値度の高いブロックに移動させるときに、起動頻度の低いプログラムのデータを移動対象データとして優先的に選択してもよい。
【０２５１】
なお、第６実施形態におけるＳＳＤ３のハードウェア構成およびホスト２のハードウェア構成は第１実施形態のＳＳＤ３およびホスト２と同様であり、ホスト２の内部構成は図１０で説明した内部構成と同様である。
【０２５２】
以下、第６実施形態のデータ移動処理について具体的に説明する。
【０２５３】
前述の通り、ホスト２のプロセス監視部４１は、ホスト２上で動作しているプロセスがどのプログラムに対応するかを管理している。プログラムは、起動と終了を繰り返し、そのたびにプロセスは生成され、破棄される。
【０２５４】
プロセスの識別子のうち、プロセスＩＤはプロセスが生成されるたびに異なる数値が割り当てられるが、対応するプログラム、例えばプログラム名は同一である。したがって、プロセス監視部４１は、生成されたプロセスがどのプログラムに対応するのかを記録しておくことで、頻繁に起動されるプログラムを知ることができる。そこで、プロセス監視部４１は、ＳＳＤ３に対して、頻繁に起動されるプログラム、つまり起動頻度の高いプログラムを通知する。
【０２５５】
ＳＳＤ３のコントローラ４は、生成された各プロセスの識別子と、生成された各プロセスによって読み出しまたは書き込まれたデータに対応するアドレス範囲、等との対応関係を図１１のプロセスデータ管理テーブルを使用して管理する。さらに、ＳＳＤ３のコントローラ４は、図１１のプロセスデータ管理テーブルに、各プロセス識別子がどのプログラムに対応するかを合わせて記録する。そして、コントローラ４は、プロセス監視部４１から通知された頻繁に起動されるプログラムに対応するプロセスがアクセス（読み出しまたは書き込み）するデータを移動対象データとして選択し、この移動対象データを多値度の高いブロックからより多値度の低いブロックに移動させる。これにより、ユーザもしくはシステムによって頻繁に起動されるプログラムのデータを多値度の低いブロックに集めることができ、ホスト２から見たＳＳＤ３の性能、ひいてはユーザから見たＳＳＤ３の性能をより向上させることができる。
【０２５６】
また、他の各実施形態で説明したデータ移動処理対象のプロセスを選択する際に、コントローラ４は、プロセス監視部４１から通知された頻繁に起動されるプログラムを、多値度の低いブロックから多値度の高いブロックへ移動すべき移動対象データとして選択しないようにしてもよい。例えば、ホスト２上で動作する総プロセス数が第１の閾値を上回っとの判定の後、あるいはホスト２のメモリ１３の使用量が第４の閾値を上回ったとの判定の後、コントローラ４は、図１１のプロセスデータ管理テーブルに基づいて、ホスト２によって通知された起動頻度の高いプログラムを除く他のプログラムに対応するプロセスの中から、データを移動すべきプロセスを選択してもよく、そして、この選択したプロセスによって読み出しまたは書き込まれたデータを多値度の低いブロックから多値度の高いブロックへ移動させてもよい。
【０２５７】
これにより、ユーザもしくはシステムが頻繁に起動するプログラムのデータが多値度の低いブロックに記録されている状態が維持されるので、ホスト２から見たＳＳＤ３の性能、ひいてはユーザから見たＳＳＤ３の性能をより向上させることができる。
【０２５８】
図２２のフローチャートは、ホスト２とＳＳＤ３とによって実行される、頻繁に起動されるプログラムを通知する処理およびデータ移動処理の手順を示す。
【０２５９】
ホスト２のプロセス監視部４１は、頻繁に起動されるプログラムを検出する（ステップＳ１７１）。プロセス監視部４１は、検出されたプログラムつまり起動頻度の高いプログラムを示す情報をＳＳＤ３に送信して、起動頻度の高いプログラムをＳＳＤ３に通知する（ステップＳ１７２）。
【０２６０】
ＳＳＤ３のコントローラ４は、起動頻度の高いプログラムを示す情報をホスト２から受信する。そして、コントローラ４のホスト要求処理部４０２は、データ制御部４０３に対して、起動頻度の高いプログラムよってアクセスされたデータをより多値度の低いブロックに移動すべきことを指示する。この指示を受けたデータ制御部４０３は、図１１のプロセスデータ管理テーブルに基づいて、ホスト２によって通知された起動頻度の高いプログラムに対応するプロセスによって読み出しまたは書き込まれたデータを多値度の高いブロックからより多値度の低いブロックに移動する処理を実行する（ステップＳ１７３）。
【０２６１】
図２２のフローチャートを参照して説明したホスト２の処理は、ホストソフトウェア（ストレージドライバ３１、オペレーティングシステム（ＯＳ）３２、ファイルシステム３３、プロセス監視部４１、等）を実行するように構成されたプロセッサ１２によって実行される。
【０２６２】
以上説明したように、本第１実施形態〜第６実施形態によれば、ホスト２の内部状態に関する情報（総プロセス数、総プロセス数の増加または減少、生成された各プロセスの識別子、生成された各プロセスの種別、終了されたプロセスの識別子、要求元のプロセスの識別子が付与された読み出し／書き込み要求、ホストメモリの使用量、次に起こるスワップアウトでＳＳＤ３に書き込まれるデータ量、頻繁に起動されるプログラム、等）がホスト２からＳＳＤ３に通知され、この情報に基づいて、多値レベルが互いに異なるブロック間でのデータ移動やＧＣのためのデータ移動といったＳＳＤ３の内部動作が制御される。
【０２６３】
このように、ホスト２の状態変化をＳＳＤ３の内部の制御に利用することで、ホスト２から見たＳＳＤ３の性能、ひいてはユーザから見たＳＳＤ３の性能を向上させることができる。また、ＳＳＤ３内部のＮＡＮＤフラッシュメモリ５の利用効率の改善を図ることができる。
【０２６４】
なお、ここでは、ホスト２の内部状態を通知処理とホスト２から通知される内部状態に基づくデータ移動処理とを第１実施形態〜第６実施形態にそれぞれ分けて説明したが、これら実施形態の処理は適宜組み合わせて使用することができる。また、第１実施形態〜第６実施形態のうちの任意の２以上の実施形態の構成を併せ持つ構成が利用されてもよい。
【０２６５】
また、ＳＳＤ３に対するホスト２の状態の通知は、様々な標準規格に従った方法で行ってもよいし、標準規格以外の方法を用いて行ってもよい。
【０２６６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２６７】
２…ホスト、３…ＳＳＤ（ストレージデバイス）、４…コントローラ、５…ＮＡＮＤフラッシュメモリ、３１…ストレージドライバ、３２…オペレーティングシステム、３３…ファイルシステム、３２１…プロセス管理部、４１…プロセス監視部、４２…フィルタドライバ、４０２…ホスト要求処理部、４０３……データ制御部。
【図１】
2019168822.tif 000003
【図２】
2019168822.tif 000004
【図３】
2019168822.tif 000005
【図４】
2019168822.tif 000006
【図５】
2019168822.tif 000007
【図６】
2019168822.tif 000008
【図７】
2019168822.tif 000009
【図８】
2019168822.tif 000010
【図９】
2019168822.tif 000011
【図１０】
2019168822.tif 000012
【図１１】
2019168822.tif 000013
【図１２】
2019168822.tif 000014
【図１３】
2019168822.tif 000015
【図１４】
2019168822.tif 000016
【図１５】
2019168822.tif 000017
【図１６】
2019168822.tif 000018
【図１７】
2019168822.tif 000019
【図１８】
2019168822.tif 000020
【図１９】
2019168822.tif 000021
【図２０】
2019168822.tif 000022
【図２１】
2019168822.tif 000023
【図２２】
2019168822.tif 000024