(57)【要約】【課題】簡単なアルゴリズムで性能の調整を行うことが可能なメモリシステムを提供すること。【解決手段】メモリシステムは、不揮発性の第１メモリと、第１プロセッサと、第２プロセッサとを備える。第１プロセッサは、第１割当量を設定する。第２プロセッサは、第１メモリへのアクセスを実行し、アクセスの際の第１メモリの動作時間に応じた量である消費量を演算し、消費量が第１割当量に至った場合、第１プロセッサに通知を送信する。【選択図】図２
2018156350.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性の第１メモリと、
第１割当量を設定する第１プロセッサと、
前記第１メモリへのアクセスを実行し、前記アクセスの際の前記第１メモリの動作時間に応じた量である消費量を演算し、前記消費量が前記第１割当量に至った場合、前記第１プロセッサに通知を送信する、第２プロセッサと、
を備えることを特徴とするメモリシステム。
【請求項２】
前記第１プロセッサは、有効期限付きの複数の第２割当量のそれぞれを、それぞれ異なるタイミングで設定し、
前記第１割当量は、１以上の第３割当量の合計量であり、
前記第３割当量は、前記設定された複数の第２割当量のうちの有効期限が切れていない第２割当量である、
ことを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記第１プロセッサは、前記メモリシステムの使用状況に応じてそれぞれの第２割当量を演算する、
ことを特徴とする請求項２に記載のメモリシステム。
【請求項４】
前記第２プロセッサは、第１モードで前記第１メモリへのアクセスを実行し、
前記第１プロセッサは、前記通知を受信した場合、前記第１メモリへのアクセスが実行できない第２モードに前記第２プロセッサを遷移させる、
ことを特徴とする請求項３に記載のメモリシステム。
【請求項５】
前記第１メモリへのアクセスは、リード、ライト、およびイレースを含む複数の種類のアクセスを含み、
前記第１メモリへのアクセスの種類に応じて前記消費量を演算する、
ことを特徴とする請求項１に記載のメモリシステム。
【請求項６】
温度センサをさらに備え、
前記使用状況は、前記温度センサの検出値である、
ことを特徴とする請求項３に記載のメモリシステム。
【請求項７】
前記第１プロセッサは、前記検出値をそれぞれの第２割当量の演算にフィードバックする、
ことを特徴とする請求項６に記載のメモリシステム。
【請求項８】
前記第１プロセッサは、ＰＩＤ制御に基づく演算によってそれぞれの第２割当量を演算する、
ことを特徴とする請求項７に記載のメモリシステム。
【請求項９】
ＦＩＦＯルールで管理される第２メモリをさらに備え、
前記第１プロセッサは、前記複数の第２割当量を前記第２メモリに順次設定し、
前記第２プロセッサは、前記第２メモリに設定された複数の第２割当量のうちの最後に設定された所定数の第２割当量を、有効期限が切れていない第２割当量と見なす、
ことを特徴とする請求項２に記載のメモリシステム。
【請求項１０】
前記第１プロセッサは、前記第２プロセッサを前記第２モードに遷移させてから所定時間が経過した場合、前記第２プロセッサを前記第１モードに遷移させる、
ことを特徴とする請求項４に記載のメモリシステム。
【請求項１１】
前記第２モードは、前記第２プロセッサへのクロック供給が遮断されるモードである、
ことを特徴とする請求項４に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
メモリシステムは、使用状況などに応じて性能の調整を行う場合がある。使用状況としては、メモリシステムの消費電力または温度が挙げられる。一例では、メモリシステムは、消費電力または温度が上がり過ぎないように、自身の動作を制限する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
一つの実施形態は、簡単なアルゴリズムで性能の調整を行うことが可能なメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００４】
一つの実施形態によれば、メモリシステムは、不揮発性の第１メモリと、第１プロセッサと、第２プロセッサとを備える。第１プロセッサは、第１割当量を設定する。第２プロセッサは、第１メモリへのアクセスを実行し、アクセスの際の第１メモリの動作時間に応じた量である消費量を演算し、消費量が第１割当量に至った場合、第１プロセッサに通知を送信する。
【図面の簡単な説明】
【０００５】
【図１】図１は、第１の実施形態のメモリシステムの構成例を示す図である。
【図２】図２は、第１の実施形態のマルチコアプロセッサのより詳細な構成を示す図である。
【図３】図３は、第１の実施形態のＦＩＦＯ領域の構成例を示す模式図である。
【図４】図４は、第１の実施形態のＦＩＦＯ領域に記録されたデータの状態の一例を説明するための図である。
【図５】図５は、第１の実施形態のＦＩＦＯ領域に記録されたデータの状態の一例を説明するための図である。
【図６】図６は、第１の実施形態のＦＩＦＯ領域に記録されたデータの状態の一例を説明するための図である。
【図７】図７は、第１の実施形態のＦＩＦＯ領域に記録されたデータの状態の一例を説明するための図である。
【図８】図８は、第１の実施形態のＦＩＦＯ領域に記録されたデータの状態の一例を説明するための図である。
【図９】図９は、第１の実施形態のＦＩＦＯ領域に記録されたデータの状態の一例を説明するための図である。
【図１０】図１０は、通常モードにおいてクレジットの供給時の第１の実施形態のメモリシステムの動作を説明するフローチャートである。
【図１１】図１１は、通常モードにおいてクレジットの消費時の第１の実施形態のメモリシステムの動作を説明するフローチャートである。
【図１２】図１２は、第１の実施形態のメモリシステムの動作モードの切り替えの動作を説明するフローチャートである。
【図１３】図１３は、第２の実施形態のメモリシステムの構成例を示す図である。
【図１４】図１４は、第２の実施形態のメモリシステムの動作の一例を説明するためのシーケンス図である。
【発明を実施するための形態】
【０００６】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００７】
（第１の実施形態）
図１は、第１の実施形態のメモリシステムの構成例を示す図である。メモリシステム１ａは、ホスト２と所定の通信インタフェースで接続される。ホスト２は、例えばパーソナルコンピュータ、携帯情報端末、またはサーバなどが該当する。メモリシステム１ａは、ホスト２からアクセス要求（リード要求およびライト要求）を受け付けることができる。各アクセス要求は、アクセス先を示す論理アドレスを伴う。論理アドレスは、メモリシステム１ａがホスト２に提供する論理アドレス空間内の位置を示す。メモリシステム１ａは、ライト要求とともに、書き込み対象のデータを受け付ける。
【０００８】
メモリシステム１ａは、ＮＡＮＤ型のフラッシュメモリ（ＮＡＮＤメモリ）１０と、ホスト２とＮＡＮＤメモリ１０との間のデータ転送を実行するメモリコントローラ１１と、を備えている。なお、メモリシステム１ａは、ＮＡＮＤメモリ１０の代わりに任意の不揮発性メモリを具備することができる。例えば、メモリシステム１ａは、ＮＡＮＤメモリ１０の代わりにＮＯＲ型のフラッシュメモリを具備することができる。
【０００９】
ＮＡＮＤメモリ１０は、１以上のメモリチップを含む。各メモリチップは、複数のブロックを備える。ブロックは、例えばデータのイレースが実行され得る最小の記憶領域である。ブロックは、複数のページを備える。ページは、例えばデータのリードまたはデータのライトが実行され得る最小の記憶領域である。
【００１０】
メモリシステム１ａは、さらに、メモリシステム１ａの温度を検出する温度センサ１６を備える。温度センサ１６による検出値は、メモリコントローラ１１に送られる。
【００１１】
メモリコントローラ１１は、ホストインタフェースコントローラ（ホストＩ／Ｆコントローラ）１２と、マルチコアプロセッサ１３と、ＮＡＮＤコントローラ１４と、ＲＡＭ（Random  Access  Memory）１５とを備える。
【００１２】
マルチコアプロセッサ１３は、ファームウェアプログラムに基づいてメモリコントローラ１１の制御を実行する。ファームウェアプログラムは、例えばＮＡＮＤメモリ１０などの不揮発性メモリに予め格納されており、起動時にＮＡＮＤメモリ１０から読み出されてマルチコアプロセッサ１３によって実行される。
【００１３】
ホストＩ／Ｆコントローラ１２は、ホスト２との間の通信インタフェースの制御を実行する。ホストＩ／Ｆコントローラ１２は、マルチコアプロセッサ１３による制御の下で、ホスト２とＲＡＭ１５との間のデータ転送を実行する。ＮＡＮＤコントローラ１４は、マルチコアプロセッサ１３による制御の下で、ＮＡＮＤメモリ１０とＲＡＭ１５との間のデータ転送を実行したりする。
【００１４】
マルチコアプロセッサ１３は、複数のプロセッサ（ＣＰＵ１３）を備える。ここでは一例として、マルチコアプロセッサ１３は、ＣＰＵ１３ａ、ＣＰＵ１３ｂ、ＣＰＵ１３ｃ、およびＣＰＵ１３ｄを備える。
【００１５】
図２は、マルチコアプロセッサ１３のより詳細な構成を示す図である。メモリコントローラ１１の制御は、複数の処理に分割されており、４つのＣＰＵ１３によって分担される。メモリコントローラ１１の制御を構成する複数の処理は、例えば、ホスト２からの要求を受け付ける処理、アクセス要求に含まれる論理アドレスとＮＡＮＤメモリ１０内の物理的な位置（物理アドレス）とを対応付ける処理、ホスト２から送られてきた書き込み対象のデータからＮＡＮＤメモリ１０に書き込むページ単位のデータを生成する処理、ＮＡＮＤメモリ１０から読み出されたページ単位のデータからホスト２に送るデータを生成する処理、ＮＡＮＤメモリ１０にアクセスする処理、などを含む。
【００１６】
特に、ＣＰＵ１３ａは、メモリコントローラ１１の制御を構成する複数の処理のうち、ホスト２からの要求を受け付ける処理を実行する第１処理部１３１として機能する。また、ＣＰＵ１３ｂは、ＮＡＮＤメモリ１０にアクセスする処理を実行する第２処理部１３２として機能する。
【００１７】
ＮＡＮＤメモリ１０へのアクセスは、複数の種類のアクセスを含む。複数の種類は、リード、ライト、およびイレースを含む。第２処理部１３２は、ＮＡＮＤメモリ１０からデータをリードする場合には、リード元のページを指定する物理アドレスを含むリードコマンドをＮＡＮＤコントローラ１４を経由してＮＡＮＤメモリ１０に送信する。また、第２処理部１３２は、ＮＡＮＤメモリ１０にデータをライトする場合には、ライト先のページを指定する物理アドレスを含むライトコマンドをＮＡＮＤコントローラ１４を経由してＮＡＮＤメモリ１０に送信する。また、第２処理部１３２は、ＮＡＮＤメモリ１０に対してイレースを実行する場合には、イレース対象のブロックを指定する物理アドレスを含むイレースコマンドをＮＡＮＤコントローラ１４を経由してＮＡＮＤメモリ１０に送信する。
【００１８】
ここで、第１処理部１３１は、クレジットを設定する。クレジットを設定するとは、第２処理部１３２にクレジットを供給することである。クレジットとは、ＮＡＮＤメモリ１０の動作時間に応じた量であり、クレジットを供給するとは、ＮＡＮＤメモリ１０の動作時間に応じた量を割り当てることである。クレジットは、ＮＡＮＤメモリ１０の動作時間に対応する限り、任意の単位で表記され得る。例えば、クレジットは、ＮＡＮＤメモリ１０の動作時間にリニアに対応する整数値の「ポイント」によって表記される。
【００１９】
第２処理部１３２は、供給されたクレジットを消費しながらＮＡＮＤメモリ１０へのアクセスを実行する。換言すると、第２処理部１３２は、アクセスの際のＮＡＮＤメモリ１０の動作時間に応じた量を、供給されたクレジットに対する消費量とする。クレジットが枯渇した場合、即ちクレジットの消費量がクレジットの供給量に至った場合、第２処理部１３２は、クレジットが枯渇した旨を示す枯渇通知を第１処理部１３１に送信する。
【００２０】
第１処理部１３１は、枯渇通知を受信した場合、ＮＡＮＤメモリ１０の動作を制限することができる。ここでは、ＮＡＮＤメモリ１０の動作の制限の一例として、第１処理部１３１は、ＣＰＵ１３ｂの動作モードを通常モードからスヌーズモードに遷移させる。第１の実施形態においては、通常モードは、ＮＡＮＤメモリ１０へのアクセスが実行可能なモードであり、スヌーズモードは、ＮＡＮＤメモリ１０へのアクセスが実行できないモードである。一例では、スヌーズモードでは、ＣＰＵ１３ｂに供給されるクロックが遮断される。ＣＰＵ１３ｂの動作モードが通常モードからスヌーズモードに遷移することによって、第２処理部１３２は、ＮＡＮＤメモリ１０へのアクセスが不可能となるので、メモリシステム１ａの性能が抑制される。
【００２１】
第１処理部１３１がクレジットの供給量を小さくすると、第２処理部１３２においてクレジットが枯渇しやすくなる。その結果、ＮＡＮＤメモリ１０は、動作が抑制される傾向になる。反対に、第１処理部１３１は、クレジットの供給量を大きくすると、第２処理部１３２においてクレジットは枯渇しにくくなる。その結果、ＮＡＮＤメモリ１０は、動作が抑制されにくい傾向になる。即ち、第１処理部１３１は、クレジットの供給量を調整することによって、メモリシステム１ａの性能を調整することが可能である。
【００２２】
クレジットの供給量の調整方法は、特定の方法に限定されない。ここでは一例として、第１処理部１３１は、クレジットの供給量を演算する際に、温度センサ１６による検出値をフィードバックする。第１処理部１３１は、温度センサ１６による検出値をフィードバックとして用いてＰＩＤ制御に基づく演算を実行することによって、温度センサ１６による検出値がターゲット温度を超えないように、クレジットの供給量を演算する。
【００２３】
第１処理部１３１は、クレジットを複数回、それぞれ異なるタイミングで供給する。供給された各クレジットは、有効期限が定められている。第２処理部１３２は、複数回供給されたクレジットのうち、有効期限が早く切れるクレジットから順番に消費する。第２処理部１３２は、有効期限が切れたクレジットを使用することはできない。クレジットに有効期限が付されることによって、クレジットの供給量の調整に対する性能の追従性が向上する。
【００２４】
なお、クレジットは必ずしも複数回設定されなくてもよい。また、クレジットには有効期限が設定されなくてもよい。
【００２５】
有効期限の管理方法は、特定の方法に限定されない。ここでは一例として、第２処理部１３２は、供給された複数のクレジットのうち、最後に供給された所定数のクレジットのそれぞれを、有効期限が切れていないクレジットとして扱い、その他の全てのクレジットを、有効期限が切れたクレジットとして扱う。
【００２６】
ＣＰＵ１３ｂは、ＣＰＵ１３ａからのアクセスが可能なＳＲＡＭ１３３を備える。ＳＲＡＭ１３３には、クレジットの供給のためのメモリ領域として、ＦＩＦＯ領域１３４が設けられている。ＦＩＦＯ領域１３４には、各クレジットが、供給された順番で記録される。ＳＲＡＭ１３３には、ＦＩＦＯ領域１３４を管理するためのポインタであるヘッドポインタ１３５およびテイルポインタ１３６がさらに記録される。
【００２７】
図３は、ＦＩＦＯ領域１３４の構成例を示す模式図である。ＦＩＦＯ領域１３４は、論理的にリング状に配置され、時系列順にデータが書き込まれる複数の単位領域２０を備える。各単位領域２０には、供給されたクレジットの量（供給クレジット）が記録され得る領域と消費されたクレジットの量（消費クレジット）が記録され得る領域とを備える。供給クレジットは、第１処理部１３１によってＦＩＦＯ（First  In、  First  Out）のルールに従って入力される。消費クレジットは、第２処理部１３２によって、クレジットの消費に応じて入力または更新される。
【００２８】
テイルポインタ１３６は、次に供給クレジットが記録される予定の単位領域２０を指すポインタである。第１処理部１３１は、テイルポインタ１３６が示す単位領域２０に供給クレジットを記録するとともに、最も古くに供給クレジットが記録された単位領域２０を指すようにテイルポインタ１３６を更新する。
【００２９】
ヘッドポインタ１３５は、有効期限が切れていない複数の供給クレジットのうちの有効期限が最も早く切れる供給クレジットが記録されている単位領域２０を指すポインタである。第２処理部１３２は、ヘッドポインタ１３５を、所定数（図３の例では５つ）の単位領域２０をおいてテイルポインタ１３６に追従させる。
【００３０】
ヘッドポインタ１３５が指している単位領域２０に記録された供給クレジット、および、ヘッドポインタ１３５が指している単位領域２０に記録された供給クレジットよりも時間的に後に記録された全ての供給クレジットは、有効期限が切れていないクレジットに該当する。即ち、ヘッドポインタ１３５が指している単位領域２０から、テイルポインタ１３６が最後の更新の直前まで指していた単位領域２０まで、に書き込まれた全ての供給クレジットは、有効期限が切れていないクレジットに該当する。以降、ヘッドポインタ１３５が指している単位領域２０から、テイルポインタ１３６が最後の更新の直前まで指していた単位領域２０まで、の範囲を、有効クレジットウインドウ、と表記する場合がある。
【００３１】
第２処理部１３２は、有効クレジットウインドウに記録された複数の供給クレジットのうちの、有効期限がより早く切れる供給クレジットを優先して消費する。
【００３２】
図４〜図９は、ＦＩＦＯ領域１３４に記録されたデータの状態の推移の一例を説明するための図である。
【００３３】
図４の例では、単位領域２０ａ〜２０ｅが有効クレジットウインドウに含まれる。単位領域２０ａ、２０ｂ、２０ｃ、２０ｄ、２０ｅの順番で、それぞれの単位領域２０に供給クレジットが記録される。また、単位領域２０ａには「１００」ポイントの供給クレジット、単位領域２０ｂには「１００」ポイントの供給クレジット、単位領域２０ｃには「８０」ポイントの供給クレジット、単位領域２０ｄには「７０」ポイントの供給クレジット、単位領域２０ｅには「６０」ポイントの供給クレジット、が記録されている。また、単位領域２０ａ〜２０ｅのそれぞれには、「０」ポイントの消費クレジットが記録されている。即ち、単位領域２０ａ〜２０ｅに記録された供給クレジットは、何れも消費が完了していない。単位領域２０ａ、２０ｂ、２０ｃ、２０ｄ、２０ｅに記録された供給クレジットの合計値である「４１０」ポイントのクレジットが利用可能である。
【００３４】
第２処理部１３２がアクセスを実行する場合、第２処理部１３２は、「４１０」ポイントの利用可能なクレジットのうちの有効期限が最も早く切れる供給クレジットを消費する。例えば、ＦＩＦＯ領域１３４に記録されたデータが図４に示される状態において第２処理部１３２が「５０」ポイントに相当するアクセスを実行する場合、第２処理部１３２は、有効クレジットウインドウに含まれる消費が完了していない供給クレジットのうちの有効期限が最も早く切れる供給クレジットである、単位領域２０ａに記録された供給クレジットを消費する。即ち、第２処理部１３２は、単位領域２０ａに記録された消費クレジットを、「０」ポイントから「５０」ポイントに更新する。この更新により、ＦＩＦＯ領域１３４に記録されたデータは、図５に示される状態になる。この状態では、「３６０」ポイントのクレジットが利用可能である。
【００３５】
続いて、第２処理部１３２が「７０」ポイントに相当するアクセスを実行する場合、第２処理部１３２は、単位領域２０ａに記録された供給クレジットのうちの未消費の「５０」ポイントを優先して消費する。そして、第２処理部１３２は、単位領域２０ａに記録された供給クレジットの次に有効期限が切れる単位領域２０ｂに記録された供給クレジットから、残りの「２０」ポイントを消費する。即ち、第２処理部１３２は、単位領域２０ａに記録された消費クレジットを、「５０」ポイントから「１００」ポイントに更新し、単位領域２０ｂに記録された消費クレジットを、「０」ポイントから「２０」ポイントに更新する。この更新により、ＦＩＦＯ領域１３４に記録されたデータは、図６に示される状態になる。この状態では、「２９０」ポイントのクレジットが利用可能である。
【００３６】
続いて、第１処理部１３１が「５０」ポイントのクレジットを供給する場合、第１処理部１３１は、テイルポインタ１３６が指している単位領域２０ｆに供給クレジットとして「５０」を記録し、テイルポインタ１３６を更新する。第２処理部１３２は、テイルポインタ１３６の更新に応じてヘッドポインタ１３５を更新する。この更新により、ＦＩＦＯ領域１３４に記録されたデータは、図７に示される状態になる。単位領域２０ａに記録された供給クレジットは、この更新により、有効クレジットウインドウから除外される。即ち、単位領域２０ａに記録された供給クレジットの有効期限が切れる。また、単位領域２０ｆに記録された供給クレジットは、有効クレジットウインドウに追加される。図７に示される状態では、「３４０」ポイントのクレジットが利用可能である。
【００３７】
なお、図７の例では、単位領域２０ａに記録された供給クレジットの消費が完了している。供給クレジットの有効期限は、その供給クレジットの消費が完了していない場合であっても切れ得る。例えばＦＩＦＯ領域１３４に記録されたデータが図５に示される状態でありかつ新たに「５０」ポイントのクレジットが供給される場合、図８に示されるように、単位領域２０ａに記録された供給クレジットのうちの「５０」ポイントが未消費の状態で、単位領域２０ａが有効クレジットウインドウから除外される。
【００３８】
また、各単位領域２０において、記録された供給クレジットの有効期限が切れた後、供給クレジットおよび消費クレジットがそれぞれ「０」で上書きされてもよい。または、各単位領域２０において、新たに供給クレジットが記録される際に、当該新たな供給クレジットが上書きされ、消費クレジットが「０」で上書きされてもよい。
【００３９】
ＦＩＦＯ領域１３４に記録されたデータが図７に示される状態でありかつ新たに「３４０」ポイントのクレジットが消費される場合、上述した方法で消費クレジットが更新されることによって、ＦＩＦＯ領域１３４に記録されたデータは、図９に示される状態になる。この更新により、有効クレジットウインドウに含まれる全ての単位領域２０において、供給クレジットと消費クレジットとが等しくなる。ＦＩＦＯ領域１３４に記録されたデータがこのような状態になった場合、第２処理部１３２は、供給クレジットが枯渇したと判断し、第１処理部１３１に枯渇通知を送信する。
【００４０】
次に、第１の実施形態のメモリシステム１ａの動作例を説明する。図１０は、通常モードにおいてクレジットの供給時の動作を説明するフローチャートである。
【００４１】
通常モードにおいては、図１０に例示されるように、第１処理部１３１は、クレジットを供給するタイミングに至ったか否かを判定する（Ｓ１０１）。クレジットを供給するタイミングに至っていないと判定された場合には（Ｓ１０１、Ｎｏ）、Ｓ１０１の処理が再び実行される。
【００４２】
クレジットの供給のタイミングは、任意に設計可能である。一例では、第１処理部１３１は、前回のクレジットの供給から所定の時間が経過した場合に、クレジットを供給するタイミングに至ったと判定し、前回のクレジットの供給から所定の時間が経過していない場合に、クレジットを供給するタイミングに至っていないと判定する。まだ一度もクレジットを供給していない場合には、第１処理部１３１は、動作開始から所定の時間が経過した場合に、クレジットを供給するタイミングに至ったと判定する。または、まだ一度もクレジットを供給していない場合には、第１処理部１３１は、経過時間に関係なくクレジットを供給するタイミングに至ったと判定してもよい。
【００４３】
第１処理部１３１がクレジットを供給するタイミングに至ったと判定した場合（Ｓ１０１、Ｙｅｓ）、第１処理部１３１は、温度センサ１６から温度検出値を取得する（Ｓ１０２）。そして、第１処理部１３１は、温度検出値に基づいてクレジットの供給量（供給クレジット）を演算する（Ｓ１０３）。
【００４４】
Ｓ１０３の処理では、第１処理部１３１は、例えば、下記の式１を用いることによってクレジットの供給量を演算する。この式１は、ＰＩＤ制御に基づく演算によってクレジットの供給量を求める式の一例である。
Credit(n)=Credit(n-1)+Kp*(e(n)-e(n-1))+Ki*e(n)+Kd*((e(n)-e(e-1))-(e(n-1)-e(n-2)))    ・・・（式１）
【００４５】
なお、Ｓ１０１〜Ｓ１０７のループ処理のループカウンタを「i（ただしiは０以上の整数）」と表記した場合に、Credit(i)は、i+1回目のループ処理において演算されるクレジットの供給量であり、e(i)は、i+1回目のループ処理において演算される、ターゲット温度から温度検出値を減算して得られる値である。また、Kpは比例係数であり、Kiは積分係数であり、Kdは微分係数である。Kp、Ki、およびKdのそれぞれは、チューニングによって決定される。ターゲット温度は、例えば仕様によって予め決められている。
【００４６】
なお、式１によれば、最初の２回のループ処理においては、Credit(n-1)、e(n-1)、およびe(n-2)は定まっていない。その場合、第１処理部１３１は、一例では、Credit(n-1)、e(n-1)、およびe(n-2)としてそれぞれ予め定められた値を使用する。
【００４７】
第１処理部１３１は、Ｓ１０３の処理によって得られた供給クレジットを、ＦＩＦＯ領域１３４に書き込む（Ｓ１０４）。供給クレジットの書き込み位置は、テイルポインタ１３６が示す単位領域２０である。第１処理部１３１は、Ｓ１０３の処理の実行に応じて、テイルポインタ１３６を更新する（Ｓ１０５）。
【００４８】
続いて、第１処理部１３１は、供給完了通知を第２処理部１３２に送信する（Ｓ１０６）。供給完了通知は、例えばプロセッサ間通信(Inter-Processor  Communication)を利用して送信される。第２処理部１３２は、供給完了通知を受信すると、ＦＩＦＯ領域１３４に供給クレジットが書き込まれたことを認識する。そして、第２処理部１３２は、ヘッドポインタ１３５を更新する（Ｓ１０７）。Ｓ１０７の処理の後、制御がＳ１０１に移る。
【００４９】
図１１は、通常モードにおいてクレジットの消費時の動作を説明するフローチャートである。
【００５０】
第２処理部１３２は、ＮＡＮＤメモリ１０へのアクセスを実行すると（Ｓ２０１）、実行したアクセスの種類に応じてクレジットの消費量を演算する（Ｓ２０２）。
【００５１】
リード、ライト、イレース時のＮＡＮＤメモリ１０の動作時間は、それぞれおよそ決まっている。したがって、リード、ライト、イレース毎に要するクレジットを予め求め、記憶しておくことによって、ＮＡＮＤメモリ１０の動作時間を実測することなくクレジットの消費量を推定することが可能である。一例では、クレジットの単位消費量がアクセスコマンドの種類と対応付けて記憶されている。例えば、リードコマンドに関するクレジットの単位消費量は「５」ポイント、ライトコマンドに関するクレジットの単位消費量は「２０」ポイント、イレースコマンドに関するクレジットの単位消費量は「１００」ポイントである場合において、第２処理部１３２がＳ２０１の処理において６つのリードコマンドを発行した場合、第２処理部１３２は、リードコマンドに関するクレジットの単位消費量「５」にリードコマンドの数「６」を乗じることによって、クレジットの消費量「３０」を演算する。このように、第２処理部１３２は、ＮＡＮＤメモリ１０の動作時間を実測することなくクレジットの消費量を演算することが可能である。
【００５２】
なお、第２処理部１３２は、ＮＡＮＤメモリ１０の動作時間を実測してもよい。一例では、第２処理部１３２は、ＮＡＮＤメモリ１０のレディービジー信号を監視し、アクセスコマンドの発行後、レディービジー信号がビジー状態に遷移してからレディー状態に戻るまでの時間（ビジー時間）をカウントする。そして、第２処理部１３２は、得られたビジー時間を、クレジットの消費量とする。
【００５３】
また、Ｓ２０１の処理とＳ２０２の処理との順番は上記に限定されない。例えば、第２処理部１３２は、発行予定のアクセスコマンドが決まった場合、発行予定のアクセスコマンドが発行される前にクレジットの消費量を演算してもよい。
【００５４】
第２処理部１３２は、Ｓ２０２の処理によって得られたクレジットの消費量に基づいて、ＦＩＦＯ領域１３４に記録されている消費クレジットを更新する（Ｓ２０３）。消費クレジットの更新方法は上述したとおりである。
【００５５】
なお、利用可能なクレジットがＳ２０２の処理によって得られたクレジットの消費量よりも少ない場合、第２処理部１３２は、一例として、利用可能なクレジットの全量をクレジットの消費量と見なして、消費クレジットを更新する。
【００５６】
続いて、第２処理部１３２は、クレジットが枯渇したか否かを判定する（Ｓ２０４）。第２処理部１３２がクレジットが枯渇したと判定した場合（Ｓ２０４、Ｙｅｓ）、第２処理部１３２は、第１処理部１３１に枯渇通知を送信する（Ｓ２０５）。枯渇通知は、例えばプロセッサ間通信を利用して送信される。Ｓ２０５の処理の後、制御がＳ２０１の処理に移行する。第２処理部１３２がクレジットが枯渇していないと判定した場合（Ｓ２０４、Ｎｏ）、Ｓ２０５の処理はスキップされる。
【００５７】
図１２は、動作モードの切り替えの動作を説明するフローチャートである。
【００５８】
第１処理部１３１は、枯渇通知を受信すると（Ｓ３０１）、第２処理部１３２に、スヌーズモード移行通知を送信する（Ｓ３０２）。なお、スヌーズモード移行通知、後述の各種応答、および後述のスヌーズモード終了通知は、例えばプロセッサ間通信を利用して送信される。
【００５９】
第２処理部１３２は、スヌーズモード移行通知を受信すると、ＣＰＵ１３ｂの処理が落ち着くまで待ち、ＣＰＵ１３ｂの処理が落ち着いた後、第１処理部１３１に応答を送信する（Ｓ３０３）。
【００６０】
第１処理部１３１は、応答を受信すると、ＣＰＵ１３ｂへのクロック供給を遮断する（Ｓ３０４）。これにより、ＣＰＵ１３ｂは、第２処理部１３２としての機能を失い、ＮＡＮＤメモリ１０へのアクセスが不可能となる。
【００６１】
第１処理部１３１は、Ｓ３０４の処理の実行後から所定の時間が経過したか否かを判定する（Ｓ３０５）。第１処理部１３１がＳ３０４の処理の実行後から所定の時間が経過していないと判定した場合（Ｓ３０５、Ｎｏ）、第１処理部１３１は、Ｓ３０５の処理を再び実行する。
【００６２】
第１処理部１３１がＳ３０４の処理の実行後から所定の時間が経過したと判定した場合（Ｓ３０５、Ｙｅｓ）、第１処理部１３１は、ＣＰＵ１３ｂへのクロック供給を再開する（Ｓ３０６）。そして、第１処理部１３１は、第２処理部１３２にスヌーズモード終了通知を送信する（Ｓ３０７）。
【００６３】
第２処理部１３２は、スヌーズモード終了通知を受信すると、復帰処理を実行し、復帰処理が完了した後、第１処理部１３１に応答を送信する（Ｓ３０８）。
【００６４】
第２処理部１３２は、応答を送信後、通常モードでの動作を開始する（Ｓ３０９）。また、第１処理部１３１は、応答を受信後、通常モードでの動作を開始する（Ｓ３０９）。そして、処理が終了する。
【００６５】
以上述べたように、第１の実施形態によれば、第１処理部１３１は、クレジットの割当量である供給クレジットを演算する。クレジットは、ＮＡＮＤメモリ１０の動作時間に応じた量である。第２処理部１３２は、ＮＡＮＤメモリ１０へのアクセスの際に、当該アクセスの際のＮＡＮＤメモリ１０の動作時間に応じた量である消費クレジットを演算する。第２処理部１３２は、クレジットの消費量がクレジットの割当量に至った場合、第１処理部１３１に枯渇通知を送信する。
【００６６】
第１処理部１３１は、枯渇通知をＮＡＮＤメモリ１０に対するアクセスを制限するか否かの判断に供することができる。その場合、供給クレジットを調整することは、ＮＡＮＤメモリ１０へのアクセスを実行できる時間を調整することに相当する。よって、簡単に性能を調整することが可能となる。
【００６７】
また、ＮＡＮＤメモリ１０の動作時間は、温度および消費電力に大きな影響を及ぼす。よって、クレジットの供給量を調整することによって、温度および消費電力の調整が可能となる。即ち、簡単に温度および消費電力を調整することが可能となる。
【００６８】
なお、第１処理部１３１は、複数回、それぞれ異なるタイミングで供給クレジットを設定する。それぞれの供給クレジットは、有効期限を有する。第２処理部１３２は、消費クレジットが有効期限が切れていない１以上の供給クレジットの合計量に至った場合に、枯渇通知を送信する。供給クレジットに有効期限を設定することによって、未消費の供給クレジットがいつまでもキープされることが防止される。その結果、供給クレジットの調整に対する性能の追従性が向上する。
【００６９】
また、メモリシステム１ａは、温度センサ１６を備える。そして、第１処理部１３１は、温度センサ１６による温度検出値に応じてそれぞれの供給クレジットを演算する。よって、メモリシステム１ａの温度が上がり過ぎないように性能を調整することが可能である。
【００７０】
なお、温度センサ１６による温度検出値は、メモリシステム１ａの使用状況を示す情報の一例である。第１処理部１３１は、温度センサ１６による検出値に代えて、メモリシステム１ａの使用状況を示す他の情報を使用してもよい。メモリシステム１ａの使用状況を示す他の情報は、例えば、メモリシステム１ａの消費電力である。
【００７１】
また、第１処理部１３１は、温度センサ１６による温度検出値をフィードバック入力とするＰＩＤ制御の演算に基づいて供給クレジットを演算する。よって、比例係数、微分係数、および積分係数をチューニングすることによって、温度センサ１６による温度検出値がターゲット温度をオーバーシュートしないようにするなど、高性能な温度制御が可能となる。
【００７２】
なお、第１処理部１３１は、ＰＩＤ制御に代えて、ＰＩ制御など、他の任意のフィードバック制御に基づく演算を実行してもよい。さらに、第１処理部１３１は、フィードバック制御以外の演算アルゴリズムによって供給クレジットを演算してもよい。
【００７３】
さらに、第１処理部１３１は、メモリシステム１ａの使用状況を示す情報以外の情報を用いてクレジットの供給量を演算してもよい。例えば、第１処理部１３１は、外部（例えばホスト２）から要求性能を受信して、メモリシステム１ａの性能が受信した要求性能を超えないように供給クレジットを演算してもよい。
【００７４】
また、第１処理部１３１は、枯渇通知の受信に応じて、第２処理部１３２をＮＡＮＤメモリ１０へのアクセスを実行しないモードに遷移させる。よって、供給クレジットの枯渇に応じて性能が抑制される。
【００７５】
また、ＮＡＮＤメモリ１０へのアクセスは、リード、ライト、およびイレースを含む複数の種類のアクセスを含み、第２処理部１３２は、アクセスの種類に応じて消費クレジットを演算する。ＮＡＮＤメモリ１０の動作時間を実測することが不要であるので、簡単なアルゴリズムで消費クレジットを演算することが可能である。
【００７６】
また、ＣＰＵ１３ｂは、ＦＩＦＯのルールで管理されるＦＩＦＯ領域１３４を備える。第１処理部１３１は、各供給クレジットをＦＩＦＯ領域に順次書き込む。第２処理部１３２は、最後に書き込まれた所定数の供給クレジットのそれぞれを、有効期限が切れていない供給クレジットとして見なす。よって、簡単なアルゴリズムで有効期限の管理が実現する。
【００７７】
なお、ＦＩＦＯ領域１３４が設けられる位置は、ＣＰＵ１３ｂの内部だけに限定されない。ＦＩＦＯ領域１３４は、ＣＰＵ１３ａ内に設けられてもよいし、マルチコアプロセッサ１３の外（例えばＲＡＭ１５）に設けられてもよい。
【００７８】
なお、ＦＩＦＯ領域１３４を構成する各単位領域２０には、供給クレジットと消費クレジットとの対が記録される。ＦＩＦＯ領域１３４に記録された各対は、外部から参照可能であってもよい。その場合、各対を不具合解析に供することが可能となる。なお、各対は、時系列順に不揮発に保存されてもよい。
【００７９】
また、第１処理部１３１は、第２処理部１３２をスヌーズモードに遷移させてから所定時間が経過した後に、第２処理部１３２を通常モードに遷移させる。よって、簡単なアルゴリズムで性能の調整が実現する。
【００８０】
なお、スヌーズモードは、一例では、ＣＰＵ１３ｂへのクロック供給が遮断されるモードである。第１処理部１３１は、クロック供給の遮断以外の方法で、ＮＡＮＤメモリ１０へのアクセスの実行を禁止してもよい。
【００８１】
（第２の実施形態）
図１３は、第２の実施形態のメモリシステムの構成例を示す図である。メモリシステム１ｂは、ホスト２と所定の通信インタフェースで接続される。ホスト２は、例えばパーソナルコンピュータ、携帯情報端末、またはサーバなどが該当する。メモリシステム１ｂは、メモリシステム１ｂの外部の電源３に接続され、電源３から電力が供給される。メモリシステム１ｂは、電源３からの電力を利用して動作する。メモリシステム１ｂは、ホスト２からアクセス要求（リード要求およびライト要求）を受け付けることができる。各アクセス要求は、アクセス先を指定する論理アドレスを伴う。論理アドレスは、メモリシステム１ｂがホスト２に提供する論理アドレス空間内の位置を示す。メモリシステム１ｂは、ライト要求とともに、書き込み対象のデータを受け付ける。
【００８２】
メモリシステム１ｂは、ＮＡＮＤ型のフラッシュメモリ（ＮＡＮＤメモリ）１０と、ホスト２とＮＡＮＤメモリ１０との間のデータ転送を実行するメモリコントローラ１１と、を備えている。なお、メモリシステム１ｂは、ＮＡＮＤメモリ１０の代わりに任意の不揮発性メモリを具備することができる。例えば、メモリシステム１ｂは、ＮＡＮＤメモリ１０の代わりにＮＯＲ型のフラッシュメモリを具備することができる。
【００８３】
ＮＡＮＤメモリ１０は、１以上のメモリチップを含む。各ブロックは、複数のブロックを備える。ブロックは、例えばデータのイレースが実行され得る最小の記憶領域である。ブロックは、複数のページを備える。ページは、例えばデータのリードまたはデータのライトが実行され得る最小の記憶領域である。
【００８４】
メモリシステム１ｂは、さらに、電力供給回路１７およびキャパシタ１８を備える。
【００８５】
電力供給回路１７は、電源３から供給される電力を、変換して、または、そのまま、ＮＡＮＤメモリ１０およびメモリコントローラ１１に供給する。メモリコントローラ１１およびＮＡＮＤメモリ１０は、電力供給回路１７から供給される電力を利用して動作する。
【００８６】
キャパシタ１８は、充電可能な電池である。電源３から電力が供給されているとき、電力供給回路１７によってキャパシタ１８は充電される。電源断時には、電力供給回路１７によって電力供給源が電源３からキャパシタ１８に切り替えられ、キャパシタ１８からＮＡＮＤメモリ１０およびメモリコントローラ１１に電力供給回路１７を経由して電力が供給される。
【００８７】
一例では、電力供給回路１７は、電源３の電圧を監視する。電圧が所定のしきい値を下回った場合、電力供給回路１７は、電源断が発生したと判断し、電源断信号をマルチコアプロセッサ１３に送信する。そして、電力供給回路１７は、電力供給源を電源３からキャパシタ１８に切り替える。マルチコアプロセッサ１３は、電源断信号の受信に応じて切り替え信号を電力供給回路１７に送信し、電力供給回路１７は、切り替え信号に応じて電力供給源を切り替えてもよい。
【００８８】
なお、メモリシステム１ｂは、キャパシタ１８として、任意の電池が採用可能である。例えば、電解コンデンサ（electrolytic  capacitor）または電気二重層コンデンサ（electrical  double  layer  capacitor）が採用可能である。
【００８９】
メモリコントローラ１１は、ホストインタフェースコントローラ（ホストＩ／Ｆコントローラ）１２と、マルチコアプロセッサ１３と、ＮＡＮＤコントローラ１４と、ＲＡＭ１５とを備える。
【００９０】
マルチコアプロセッサ１３は、ファームウェアプログラムに基づいてメモリコントローラ１１の制御を実行する。ファームウェアプログラムは、例えばＮＡＮＤメモリ１０などの不揮発性メモリに予め格納されており、起動時にＮＡＮＤメモリ１０から読み出されてマルチコアプロセッサ１３によって実行される。
【００９１】
マルチコアプロセッサ１３は、電源３から電力が供給されている場合には、ホスト２とＮＡＮＤメモリ１０との間のデータ転送を実行することができる。ＲＡＭ１５は、バッファ１５１を備え、マルチコアプロセッサ１３は、データ転送の際に、バッファ１５１を使用する。
【００９２】
バッファ１５１には、任意の情報が格納され得る。一例では、バッファ１５１には、転送データがバッファされる。別の例では、バッファ１５１には、論理アドレスとＮＡＮＤメモリ１０内の物理的な位置（物理アドレス）との対応を管理するための翻訳情報を含む。翻訳情報は、例えばＮＡＮＤメモリ１０に格納されている。マルチコアプロセッサ１３は、翻訳情報をＮＡＮＤメモリ１０からバッファ１５１にキャッシュし、バッファ１５１上の翻訳情報を参照したり更新したりする。マルチコアプロセッサ１３は、バッファ１５１上の翻訳情報のうちの少なくとも更新された部分を、所定のタイミングでＮＡＮＤメモリ１０に書き戻す。
【００９３】
ＲＡＭ１５は、揮発性のメモリである。よって、ＲＡＭ１５への電力供給が停止すると、バッファ１５１内の情報は失われる。バッファ１５１内の情報がメモリシステム１ｂから失われることを防止するために、マルチコアプロセッサ１３は、電源３の電源断が発生した場合、キャパシタ１８に蓄えられていた限られた電力を用いて、バッファ１５１内の情報をＮＡＮＤメモリ１０に退避する。次回の起動時に、ＮＡＮＤメモリ１０に退避された情報は、例えば次回の起動時にバッファ１５１内に復元される。
【００９４】
マルチコアプロセッサ１３は、バッファ１５１内の情報のうちの特定の情報のみを退避してもよいし、バッファ１５１内の全ての情報を退避してもよい。例えば、マルチコアプロセッサ１３は、バッファ１５１内の翻訳情報のうちの、キャッシュされた後に更新された部分を退避してもよいし、バッファ１５１内の全ての翻訳情報を退避してもよい。また、マルチコアプロセッサ１３は、バッファ１５１内の情報をそのまま退避してもよいし、バッファ１５１内の情報を例えばフォーマットの変換などの加工を行ってから退避してもよい。
【００９５】
第２の実施形態において、電源３から供給される電力を用いてデータ転送を実行する動作モードを、通常モードと表記する。また、キャパシタ１８に蓄えられていた電力を用いてバッファ１５１内の情報をＮＡＮＤメモリ１０に退避するモードを、ＰＬＰ（Power  Loss  Protection）モードと表記する。
【００９６】
ホストＩ／Ｆコントローラ１２は、ホスト２との間の通信インタフェースの制御を実行する。ホストＩ／Ｆコントローラ１２は、マルチコアプロセッサ１３による制御の下で、ホスト２とＲＡＭ１５との間のデータ転送を実行する。ＮＡＮＤコントローラ１４は、マルチコアプロセッサ１３による制御の下で、ＮＡＮＤメモリ１０とＲＡＭ１５との間のデータ転送を実行したりする。
【００９７】
マルチコアプロセッサ１３は、複数のＣＰＵ１３を備える。ここでは一例として、マルチコアプロセッサ１３は、４つのＣＰＵ１３（ＣＰＵ１３ａ、ＣＰＵ１３ｂ、ＣＰＵ１３ｃ、およびＣＰＵ１３ｄ）を備える。
【００９８】
メモリコントローラ１１の制御は、複数の処理に分割されており、４つのＣＰＵ１３によって分担される。メモリコントローラ１１の制御を構成する複数の処理は、例えば、ホスト２からの要求を受け付ける処理、アクセス要求に含まれる論理アドレスとＮＡＮＤメモリ１０内の物理的な位置（物理アドレス）とを対応付ける処理、ホスト２から送られてきた書き込み対象のデータからＮＡＮＤメモリ１０に書き込むページ単位のデータを生成する処理、ＮＡＮＤメモリ１０から読み出されたページ単位のデータからホスト２に送るデータを生成する処理、ＮＡＮＤメモリ１０にアクセスする処理、全体の処理のシーケンスを制御する処理、などを含む。
【００９９】
４つのＣＰＵ１３は、通常モードにおいては、それぞれに割り当てられた処理を実行することによって、ホスト２とＮＡＮＤメモリ１０との間のデータ転送を実行する。
【０１００】
また、４つのＣＰＵ１３は、ＰＬＰモードにおいて、それぞれに割り当てられた処理を実行することによってバッファ１５１内の情報をＮＡＮＤメモリ１０に退避する１以上のＣＰＵ１３を含む。バッファ１５１内の情報の退避を実現するＣＰＵ１３を、第１プロセッサと表記する。
【０１０１】
また、４つのＣＰＵ１３は、マルチコアプロセッサ１３の動作シーケンスを統括する１以上のＣＰＵ１３を含む。マルチコアプロセッサ１３の動作シーケンスを統括するＣＰＵ１３を、第２プロセッサと表記する。
【０１０２】
また、４つのＣＰＵ１３は、通常モードでの動作の実現には必要とされるが、ＰＬＰモードでの動作の実現には不要とされる１以上のＣＰＵ１３を備え得る。そのようなＣＰＵ１３を、第３プロセッサと表記する。
【０１０３】
なお、ＲＡＭ１５には、モード識別情報１５２が格納される。第２プロセッサは、モード識別情報１５２に、メモリシステム１ｂの動作モードがＰＬＰモードであるか否かを示す情報を書き込む。各ＣＰＵ１３は、モード識別情報１５２を参照することによって、現在の動作モードがＰＬＰモードであるか否かを認識することができる。モード識別情報１５２は、例えば１ビットのフラグ情報であってもよいし、動作モードの種類が記述されてもよい。モード識別情報１５２が格納されるメモリは、ＲＡＭ１５に限定されない。
【０１０４】
図１４は、第２の実施形態のメモリシステム１ｂの動作の一例を説明するためのシーケンス図である。本図の例では、ＣＰＵ１３ｂおよびＣＰＵ１３ｄが第１プロセッサに該当し、ＣＰＵ１３ａが第２プロセッサに該当し、ＣＰＵ１３ｃが第３プロセッサに該当する。
【０１０５】
電源３の電源断が発生すると、電力供給回路１７によって電源断が検知される。そして、電力供給回路１７は、電源断信号をマルチコアプロセッサ１３に送信する。各ＣＰＵ１３は、電源断信号を受信する（Ｓ４０１）。
【０１０６】
第１プロセッサである、ＣＰＵ１３ｂおよびＣＰＵ１３ｄは、電源断信号に応じて、それぞれが担当するハードウェアをリセットする（Ｓ４０２、Ｓ４０３）。
【０１０７】
また、第３プロセッサであるＣＰＵ１３ｃは、電源断信号に応じて、自身をストールする（Ｓ４０４）。以降は、ＰＬＰモードでの動作に必要なＣＰＵ１３（ＣＰＵ１３ａ、ＣＰＵ１３ｂ、およびＣＰＵ１３ｄ）だけが動作することになる。
【０１０８】
なお、ＣＰＵ１３ｃは、他のプロセッサ（例えば第２プロセッサであるＣＰＵ１３ａ）によってストールされてもよい。
【０１０９】
ＣＰＵ１３ｂおよびＣＰＵ１３ｄのそれぞれは、ハードウェアのリセットを完了後、ハードウェアリセット完了通知を第２プロセッサであるＣＰＵ１３ａに送信する（Ｓ４０５）。
【０１１０】
ＣＰＵ１３ａは、電源断信号に応じて、モード識別情報１５２にＰＬＰモードを書き込む（Ｓ４０６）。
【０１１１】
また、ＣＰＵ１３ｂおよびＣＰＵ１３ｄのそれぞれは、ハードウェアリセット完了通知の送信後、自身をリセットする（Ｓ４０７、Ｓ４０８）。ＣＰＵ１３ｂおよびＣＰＵ１３ｄのそれぞれは、リセットの後、ファームウェアに含まれる初期化プログラムを実行する（Ｓ４０９、Ｓ４１０）。
【０１１２】
Ｓ４０９、Ｓ４１０において実行される初期化プログラムは、起動時に実行される初期化プログラムと同じプログラムである。即ち、Ｓ４０９、Ｓ４１０において実行される初期化プログラムは、起動時に実行される初期化プログラムと共通化されている。
【０１１３】
従来、通常モードからＰＬＰモードに動作モードが遷移する際には、ＣＰＵは、リセットされることなくＰＬＰモードのプログラムを実行するかもしれない。しかしながら、ＰＬＰモードのプログラムを実行する前には、初期化を行う必要がある。そのため、ファームウェアプログラムは、起動時の初期化プログラムと同様の動作を実現するプログラムを、ＰＬＰモードのために別途含んでいる必要があった。
【０１１４】
第２の実施形態では、ＰＬＰモードに遷移する際に、ＣＰＵ１３ｂおよびＣＰＵ１３ｄのそれぞれは、リセットされ、その後、初期化プログラムを実行する。リセット後に初期化プログラムを実行する手順は、起動時の手順と同一である。よって、起動時に実行される初期化プログラムとＰＬＰモードへの遷移時に実行される初期化プログラムとが共通化され得る。起動時に実行される初期化プログラムとＰＬＰモードへの遷移時に実行される初期化プログラムとが共通化されることによって、ファームウェアプログラムの規模がコンパクトになる。また、リセットされることによって、初期化プログラムに速やかに制御を移行することができるので、ＰＬＰモードの動作を実行を開始するまでの時間が短縮される。
【０１１５】
なお、ここでは、ＣＰＵ１３ｂおよびＣＰＵ１３ｄのそれぞれは、自身をリセットする。ＣＰＵ１３ｂおよびＣＰＵ１３ｄのそれぞれは、第２プロセッサ（ＣＰＵ１３ａ）によってリセットされてもよい。
【０１１６】
ＣＰＵ１３ｂおよびＣＰＵ１３ｄのそれぞれは、初期化プログラムの実行後、ＣＰＵリセット完了通知をＣＰＵ１３ａに送信する（Ｓ４１１）。そして、ＣＰＵ１３ｂおよびＣＰＵ１３ｄのそれぞれは、モード識別情報１５２を参照する（Ｓ４１２、Ｓ４１３）。
【０１１７】
ＣＰＵ１３ｂおよびＣＰＵ１３ｄのそれぞれは、モード識別情報１５２を参照することによって、現在の動作モードが通常モードではなくＰＬＰモードであることを認識する。ＣＰＵ１３ｂおよびＣＰＵ１３ｄのそれぞれは、ＰＬＰモードであることを認識した後、ＰＬＰモード用のプログラムの実行を開始する。
【０１１８】
なお、仮にモード識別情報１５２にＰＬＰモードが書き込まれていない場合、またはモード識別情報１５２に通常モードが書き込まれている場合、各ＣＰＵ１３は、ファームウェアプログラムに含まれるプログラムのうちの、通常モードでの動作を実現するプログラムの実行を開始し得る。
【０１１９】
以降の動作は、ＰＬＰモードでの動作の一例である。ＰＬＰモードでの動作は以下に説明される動作だけに限定されない。
【０１２０】
ＰＬＰモードでは、ＣＰＵ１３ａは、バッファ１５１内の情報をＮＡＮＤメモリ１０に退避するための退避要求をＣＰＵ１３ｂに送信する（Ｓ４１４）。ＣＰＵ１３ｂは、退避要求を受信すると、バッファ１５１内の退避対象の情報を特定する。そして、ＣＰＵ１３ｂは、退避対象の情報をＮＡＮＤメモリ１０に書き込むためのライトコマンドを生成し、ＣＰＵ１３ｄに送信する（Ｓ４１５）。
【０１２１】
一例では、一つのライトコマンドは、１ページのサイズのデータを伴う。ＣＰＵ１３ｂは、退避対象の情報から１以上のページのサイズのデータを生成する。そして、ＣＰＵ１３ｂは、生成されたデータ毎にライトコマンドを生成し、生成した各ライトコマンドをＣＰＵ１３ｄに送信する。
【０１２２】
ＣＰＵ１３ｄは、受信したライトコマンドを、ＮＡＮＤコントローラ１４を介してＮＡＮＤメモリ１０に送信する（Ｓ４１６）。ＣＰＵ１３ｄは、ライトコマンドの実行の進捗を管理する。ＣＰＵ１３ｄは、ライトコマンドの実行が完了すると、ライトコマンド完了通知をＣＰＵ１３ｂに送信する（Ｓ４１７）。ＣＰＵ１３ｂは、ライトコマンド完了通知を受信すると、退避完了通知をＣＰＵ１３ａに送信する（Ｓ４１８）。ＣＰＵ１３ａは、退避完了通知を受信すると、例えばメモリシステム１ｂをパワーオフする。
【０１２３】
以上述べたように、第２の実施形態によれば、マルチコアプロセッサ１３は、第１プロセッサ（ＣＰＵ１３ｂ、ＣＰＵ１３ｄ）を備える。第１プロセッサは、電源３の電源断が発生した場合に、リセットされ、その後、初期化プログラムを実行する。そして、第１プロセッサは、初期化プログラムの実行が完了した後、バッファ１５１内の情報をＮＡＮＤメモリ１０に退避させる。この構成により、第１プロセッサは、リセットされることによって、初期化プログラムに速やかに制御を移行することができるので、ＰＬＰモードの動作を開始するまでの時間が短縮される。
【０１２４】
また、起動時に実行される初期化プログラムとＰＬＰモードへの遷移時に実行される初期化プログラムとが共通化されていてもよい。この構成により、ファームウェアプログラムの規模がコンパクトになる。
【０１２５】
また、マルチコアプロセッサ１３は、電源３の電源断が発生した場合に、ＲＡＭ１５内のモード識別情報１５２に現在の動作モードがＰＬＰモードである旨を書き込む第２プロセッサ（ＣＰＵ１３ａ）を備える。第１プロセッサは、初期化プログラムの実行後、モード識別情報１５２を参照することによって、現在の動作モードを確認する。そして、現在の動作モードがＰＬＰモードであることが確認された場合、第１プロセッサは、ＰＬＰモードでの動作を開始する。第１プロセッサは、初期化プログラムの実行後に動作モードに応じた処理を開始するので、起動時に実行される初期化プログラムとＰＬＰモードへの遷移時に実行される初期化プログラムとが可能である。
【０１２６】
また、マルチコアプロセッサ１３は、バッファ１５１内の情報の退避に関与しない第３プロセッサ（ＣＰＵ１３ｃ）をさらに備える。第３プロセッサは、電源３の電源断が発生した場合に、ストールされる。これにより、ＰＬＰモードにおいては不要なプロセッサが動作を行わないので、ＰＬＰモード時における消費電力が抑制される。よって、キャパシタ１８の容量を節約することが可能である。または、ＰＬＰモード時において不要なＣＰＵ１３が停止されるので、キャパシタ１８に蓄えられた限られた電力によって、ＰＬＰモードの動作に必要なＣＰＵ１３をより長く動作させることが可能である。その結果、退避可能な情報の量を増やすことが可能となる。
【０１２７】
なお、電源３の電源断が発生した場合に、第３プロセッサへのクロック供給が停止されてもよい。また、電源３の電源断が発生した場合に、第３プロセッサへの電力供給が停止されてもよい。第３プロセッサは、電源３の電源断が発生した場合に、ストール、クロック供給の停止、電力供給の停止などにより、動作を停止する。よって、キャパシタ１８の容量を節約することが可能である。第３プロセッサは、動作を停止すると、バスに対して信号を出力しなくなる。
【０１２８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１２９】
１ａ、１ｂ  メモリシステム、２  ホスト、３  電源、１０  ＮＡＮＤメモリ、１１  メモリコントローラ、１２  ホストＩ／Ｆコントローラ、１３  マルチコアプロセッサ、１３ａ，１３ｂ，１３ｃ，１３ｄ  ＣＰＵ、１４  ＮＡＮＤコントローラ、１５  ＲＡＭ、１６  温度センサ、１７  電力供給回路、１８  キャパシタ、２０  単位領域、２０，２０ａ，２０ｂ，２０ｃ，２０ｄ，２０ｅ，２０ｆ  各単位領域、１３１  第１処理部、１３２  第２処理部、１３４  ＦＩＦＯ領域、１３５  ヘッドポインタ、１３６  テイルポインタ、１５１  バッファ、１５２  モード識別情報。
【図１】
2018156350.tif 000003
【図２】
2018156350.tif 000004
【図３】
2018156350.tif 000005
【図４】
2018156350.tif 000006
【図５】
2018156350.tif 000007
【図６】
2018156350.tif 000008
【図７】
2018156350.tif 000009
【図８】
2018156350.tif 000010
【図９】
2018156350.tif 000011
【図１０】
2018156350.tif 000012
【図１１】
2018156350.tif 000013
【図１２】
2018156350.tif 000014
【図１３】
2018156350.tif 000015
【図１４】
2018156350.tif 000016