(57)【要約】【課題】メモリアクセスのための遅延時間を抑えながらＳＳＤを用いた情報処理を安定的に行う。【解決手段】情報処理装置のホストユニット１２は、フラッシュメモリ２０へのアクセス要求を発行するコマンド発行部３０を含み、発行されたコマンドは、アクセスの内容および緊急性の高さに応じて複数のキュー４４に分けて格納される。フラッシュコントローラ１８の管理コマンド生成部４２は、フラッシュメモリ２０の管理に必要な処理の要求を生成し、キュー４４のいずれかのキューに格納する。コマンド処理部４６は、キューごとに設定された規則に従い、キューを切り替えてコマンドを読み出し、処理する。【選択図】図２
2018101301.tif 000002
【特許請求の範囲】
【請求項１】
ホストプロセッサからメモリへのアクセス要求を受け付けるコマンド受付部と、
前記アクセス要求が分類して格納された複数のキューのいずれかから前記アクセス要求を読み出し、実行するコマンド処理部と、
を含むメモリコントローラを備え、
前記コマンド処理部は、前記キューごとに設定された規則に応じたタイミングで、前記複数のキューのうち要求読み出し先のキューを次へ切り替えることを特徴とする情報処理装置。
【請求項２】
前記複数のキューは、アクセスの内容および優先度によって分類された前記アクセス要求をそれぞれ格納し、
前記コマンド処理部は、当該アクセスの内容及び優先度によって設定された規則に応じたタイミングで、読み出し先のキューを切り替えることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記メモリコントローラは、前記メモリの管理に必要な処理の要求を発行する管理コマンド生成部をさらに備え、
前記複数のキューはさらに、前記管理コマンド生成部が発行した管理用処理の要求を格納するキューを含み、
前記コマンド処理部は、前記キューから、前記管理用処理の要求を読み出してさらに実行することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記コマンド処理部は、前記管理用処理の要求を格納するキューを読み出し先としている際、設定された制限時間を経過したタイミングで、要求読み出し先を次のキューへ切り替えることを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記コマンド処理部は、前記管理用処理の要求を格納するキューを読み出し先としている際、別のキューに所定の優先度を有するアクセス要求が格納されたタイミングで、要求読み出し先を当該別のキューへ切り替えることを特徴とする請求項３または４に記載の情報処理装置。
【請求項６】
前記コマンド処理部は、前記ホストプロセッサが通知したタイミングで、前記管理用処理の要求を格納するキューを要求読み出し先とすることを特徴とする請求項３から５のいずれかに記載の情報処理装置。
【請求項７】
前記コマンド処理部は、前記管理用処理のうち読み出し処理の要求を読み出す期間と、書き込み処理の要求を読み出す期間を分離することを特徴とする請求項３から６のいずれかに記載の情報処理装置。
【請求項８】
前記管理用処理は、あるブロックに格納されたデータを別のブロックに待避させたうえで元のブロックのデータを消去する処理を含むことを特徴とする請求項３から７のいずれかに記載の情報処理装置。
【請求項９】
前記管理用処理は、１メモリセル当たり１ビットを記録するＳＬＣ（Single Level Cell）領域に書き込まれたデータを、１メモリセル当たり３ビットを記録するＴＬＣ（Triple Level Cell）領域にコピーする処理を含むことを特徴とする請求項３から７のいずれかに記載の情報処理装置。
【請求項１０】
前記メモリコントローラは、前記キューに格納済みの前記管理用処理の要求量および、前記管理用処理の要求が発行されるタイミングの予測結果の少なくともいずれかに基づき、前記キューごとに設定された規則の少なくともいずれかを変更するコマンド調整部をさらに備えたことを特徴とする請求項３から９のいずれかに記載の情報処理装置。
【請求項１１】
前記メモリコントローラは、前記キューに格納済みの前記管理用処理の要求量および、前記管理用処理の要求が発行されるタイミングの予測結果の少なくともいずれかに基づき、前記ホストプロセッサへアクセス要求の発行制御を依頼するコマンド調整部をさらに備えたことを特徴とする請求項３から９のいずれかに記載の情報処理装置。
【請求項１２】
前記コマンド処理部は、所定の基準以上の優先度を有する読み出し要求をまとめて格納するキューから、当該読み出し要求を順次読み出し、実行することを特徴とする請求項１から１１のいずれかに記載の情報処理装置。
【請求項１３】
前記コマンド処理部は、前記複数のキューを分類してなるキューのグループごとに処理時間を割り当て、当該グループごとに設定された規則に応じて、処理対象とするグループを切り替えることを特徴とする請求項１から１２のいずれかに記載の情報処理装置。
【請求項１４】
前記ホストプロセッサからのアクセス要求の対象となるデータを格納するＮＡＮＤ型フラッシュメモリをさらに備えたことを特徴とする請求項１から１３のいずれかに記載の情報処理装置。
【請求項１５】
情報処理を実施し、前記メモリコントローラに前記メモリへのアクセス要求を発行するホストプロセッサをさらに備えたことを特徴とする請求項１から１４のいずれかに記載の情報処理装置。
【請求項１６】
ホストプロセッサからメモリへのアクセス要求を受け付けるステップと、
前記アクセス要求を分類して格納する複数のキューのいずれかから前記アクセス要求を読み出すステップと、
読み出したアクセス要求を実行するステップと、
を含み、
前記読み出すステップは、前記キューごとに設定された規則に応じたタイミングで、前記複数のキューのうち要求読み出し先のキューを次へ切り替えることを特徴とするメモリコントローラによるメモリアクセス方法。
【請求項１７】
ホストプロセッサからメモリへのアクセス要求を受け付ける機能と、
前記アクセス要求が分類して格納された複数のキューのいずれかから前記アクセス要求を読み出し、実行する機能と、
をメモリコントローラに実現させるコンピュータプログラムであって、
前記実行する機能は、前記キューごとに設定された規則に応じたタイミングで、前記複数のキューのうち要求読み出し先のキューを次へ切り替えることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリにアクセスする情報処理装置およびメモリアクセス方法に関する。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュメモリの容量拡大に伴い、従来のＨＤＤ（Hard Disk Drive）に代わる記憶装置としてＳＳＤ（Solid State Drive）が用いられるようになってきた。ＳＳＤはＨＤＤと比較しデータアクセスを高速かつ低消費電力で行える、という利点がある一方、繰り返しのデータ読み出しや書き換えに対する耐久性が低い、という特性を有する。そのためＳＳＤに対するデータ書き換えには、書き換え対象の領域を分散させる処理がなされる。例えばホストＣＰＵから書き換え要求がなされたとき、指定された論理ブロックアドレスを異なる物理アドレスに置き換えることにより、書き換え対象をできるだけ複数のメモリセルに分散させる（例えば特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】ＷＯ  ２０１４／１３２３４６  Ａ１公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述のとおりＳＳＤは高速アクセスが可能なため、情報処理に必要なデータの多くを、必要となった時点で読み出すようにすることで、システムメモリの容量を抑えることができる。一方で、そのようにアクセスの頻度が増加すると、ＳＳＤ特有の管理処理の問題が顕在化する。管理処理には例えば次のようなものがある。すなわち、ＮＡＮＤ型フラッシュメモリは上書きができないため、上述のように様々な領域にデータが書き込まれた場合、いずれかの段階でそれらを連続した領域にコピーして、空いた領域のデータを、以後の書き込みに備えて消去する必要が生じる。
【０００５】
また、読み出しが繰り返されることにより素子の電荷がリークしデータが破壊される可能性に備え、ある段階でデータを別の領域に待避させることも必要になる。さらに書き込みを高速に行うため、１メモリセル当たり１ビットを記録するＳＬＣ（Single Level Cell）をキャッシュとして用い、後のタイミングで、１メモリセル当たり３ビットを記録可能なＴＬＣ（Triple Level Cell）に格納し直すこともなされる。これらの管理処理を、ホストＣＰＵからの要求より優先させると、情報処理に看過できない遅延時間を生じさせることがある。一方で、管理処理を適切なタイミングで行わないと、ホストＣＰＵからの要求を処理できなくなることもあり得る。
【０００６】
本発明はこうした課題に鑑みてなされたものであり、その目的は、メモリアクセスのための遅延時間を抑えながらＳＳＤを利用した情報処理を安定的に行える技術を提供することにある。
【課題を解決するための手段】
【０００７】
本発明のある態様は情報処理装置に関する。この情報処理装置は、ホストプロセッサからメモリへのアクセス要求を受け付けるコマンド受付部と、アクセス要求が分類して格納された複数のキューのいずれかからアクセス要求を読み出し、実行するコマンド処理部と、を含むメモリコントローラを備え、コマンド処理部は、キューごとに設定された規則に応じたタイミングで、複数のキューのうち要求読み出し先のキューを次へ切り替えることを特徴とする。
【０００８】
本発明のさらに別の態様はメモリアクセス方法に関する。このメモリアクセス方法は、メモリコントローラが、ホストプロセッサからメモリへのアクセス要求を受け付けるステップと、アクセス要求を分類して格納する複数のキューのいずれかからアクセス要求を読み出すステップと、読み出したアクセス要求を実行するステップと、を含み、読み出すステップは、キューごとに設定された規則に応じたタイミングで、複数のキューのうち要求読み出し先のキューを次へ切り替えることを特徴とする。
【０００９】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、コンピュータプログラムを記録した記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１０】
本発明によると、メモリアクセスのための遅延時間を抑えながらＳＳＤを利用した情報処理を安定的に行える。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態における情報処理装置の回路構成を示す図である。
【図２】本実施の形態における情報処理装置の機能ブロックの構成を示す図である。
【図３】本実施の形態におけるキューの構成例を示す図である。
【図４】本実施の形態において各フェーズで処理するキューの種類と、各フェーズにおけるコマンドの処理上限数と制限時間の設定例を示す図である。
【図５】本実施の形態におけるコマンド処理部が、フェーズ１およびフェーズ４においてデータを読み出す処理の手順を示すフローチャートである。
【図６】本実施の形態におけるコマンド処理部が、フェーズ２においてデータの読み出しあるいは書き込みを行う処理手順を示すフローチャートである。
【図７】本実施の形態におけるコマンド処理部が、フェーズ３において管理処理のうち読み出し処理を行う処理手順を示すフローチャートである。
【図８】本実施の形態におけるコマンド処理部が、フェーズ５において管理処理のうち書き込み処理およびデータ消去を行う処理手順を示すフローチャートである。
【図９】本実施の形態において、ホストユニットからの通知に応じてフェーズを切り替えるような規則を導入する形態を説明するための図である。
【図１０】本実施の形態のコマンド調整部による調整に主眼を置いたフラッシュコントローラの処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１２】
図１は、本実施の形態の情報処理装置の回路構成を示している。ここで例示する情報処理装置は、携帯ゲーム機、パーソナルコンピュータ、携帯電話、タブレット端末、ＰＤＡなど一般的な情報機器のいずれでもよい。情報処理装置１０は、ＣＰＵを含むホストユニット１２、システムメモリ１４、ＮＡＮＤ型フラッシュメモリ２０（以後、単にフラッシュメモリ２０と呼ぶ）、フラッシュコントローラ１８を含む。
【００１３】
ホストユニット１２は、フラッシュメモリ２０に格納されたプログラムやデータをシステムメモリ１４にロードし、それを用いて情報処理を行う。またアプリケーションプログラムやデータを、図示しない記録媒体駆動部において駆動された記録媒体から読み出したり、通信部によりネットワーク接続されたサーバからダウンロードしたりしてフラッシュメモリ２０に格納する。この際、ホストユニット１２はフラッシュコントローラ１８に、フラッシュメモリ２０に対するアクセス要求を発行し、フラッシュコントローラ１８はそれに応じてフラッシュメモリ２０に対し読み出し／書き込み処理を実施する。
【００１４】
フラッシュメモリ２０には複数のＮＡＮＤ型フラッシュメモリが接続されており、データは図示するように複数のチャネル（図では「ｃｈ０」〜「ｃｈ３」の４チャネル）に分散されて格納される。フラッシュコントローラ１８は、ホストユニット１２とのインターフェース機能を有するホストコントローラ２２、フラッシュメモリ２０とのインターフェース機能を有するメモリコントローラ２８、およびＳＲＡＭ（Static Random Access Memory）２４を含む。
【００１５】
ホストユニット１２は、情報処理の進捗に応じてフラッシュメモリ２０に対するアクセス要求を発生させ、それをシステムメモリ１４に格納する。当該アクセス要求にはアクセス先の論理アドレス（ＬＢＡ：Logical Block Address）が含まれる。フラッシュコントローラ１８のホストコントローラ２２は、システムメモリ１４に格納されたアクセス要求を読み出し、ＬＢＡをフラッシュメモリ２０の物理アドレスに変換する。この際、必要となるアドレス変換テーブルは、元々、フラッシュメモリ２０に格納されていたものの少なくとも一部をＳＲＡＭ２４に展開しておく。
【００１６】
ホストコントローラ２２は、当該アドレス変換テーブルを参照して、ＬＢＡに基づき取得した物理アドレスをメモリコントローラ２８に供給する。メモリコントローラ２８は、当該物理アドレスに基づきフラッシュメモリ２０の該当する領域にアクセスすることにより、データを読み出したり書き込んだりする。書き込むべきデータは、ホストユニット１２がシステムメモリ１４に格納したものをメモリコントローラ２８が読み出す。読み出したデータは、メモリコントローラ２８がシステムメモリ１４に格納し、ホストユニット１２が読み出せるようにする。
【００１７】
一般に、フラッシュメモリ２０に対するデータの読み出しや書き込みは、４０９６バイト等のアクセス単位でなされる。ＮＡＮＤ型フラッシュメモリを用いた場合、データの上書きはできないため、データを書き込む際は、何も書き込まれていない領域を確保しておく必要がある。上述のとおり書き込み領域を分散させるために論理アドレスのみ変更してデータの更新が繰り返されると、無効となった元のデータを格納する領域が増えていき、やがて新たに書き込みができる領域が枯渇する。
【００１８】
データの消去は数ＭｉＢ（１ＭｉＢ＝１０２０バイト）のブロック単位でなされるため、何も書き込まれていない領域を確保するには、消去対象のブロックに格納されている有効なデータを別のブロックにコピーしたうえで元のブロックのデータ全体を消去する。このような処理を一般に「ガベージコレクション（Garbage Collection）」と呼ぶ。つまりメモリコントローラ２８は、フラッシュメモリ２０において書き込みが可能な領域が枯渇するか、それ以前の適切なタイミングで、ガベージコレクションを実施する必要がある。
【００１９】
またＮＡＮＤ型フラッシュメモリは、電荷のリークによってデータ不良を発生させる。この電荷のリークは、データの読み出しにおける電圧印加によって加速する。メモリコントローラ２８は一般に、このような不良データの誤り訂正機能を有するが、読み出し動作が高頻度になされると、誤り率が訂正能力を超え、やがてはデータが消失してしまうこともある。このような不良は一般に「読み出しディスターブ（Read Disturb)」と呼ばれる。
【００２０】
読み出し動作は対象のデータ領域以外に電圧を印加することによりなされるため、同一ブロックへの読み出しが繰り返されることにより、ブロック全体で不良が発生し得る。したがってメモリコントローラ２８は、同一ブロックの読み出し回数が所定値に達したら、当該ブロック全体のデータを別のブロックに待避させることで、リークした電荷をチャージし直す。
【００２１】
さらにＮＡＮＤ型フラッシュメモリは、蓄積する電荷量にしきい値を設定して８段階とすることで、１メモリセル当たり３ビットのデータを記録するＴＬＣを含む。しかしながらＴＬＣは、２段階の電荷量により１メモリセルあたり１ビットのデータを記録するＳＬＣと比較して複雑な書き込みシーケンスが必要となるため、書き込み処理に時間がかかる。そこでフラッシュメモリ２０の一部をＳＬＣの領域として確保しておき、それをキャッシュとして用いることにより書き込み処理を高速化する。このときメモリコントローラ２８は、書き込み要求の遂行とは別の適切なタイミングで、ＳＬＣに書き込まれたデータをＴＬＣへコピーしておく。
【００２２】
このようにメモリコントローラ２８は、ＮＡＮＤ型フラッシュメモリ特有の管理処理を、ホストユニット１２からの要求とは別に実施する必要がある。一旦、管理処理の必要が生じると、それが完了するまでの比較的長い期間、通常のデータ読み出しや書き込み処理が待機を余儀なくされる。その結果、情報処理に看過できない遅延が発生したり処理全体のスループットが著しく低下したりすることがある。フラッシュメモリ２０に格納されたデータを頻繁に読み出して表示画像を描画するような態様では、アクセス回数の増加に伴い管理処理の頻度も増加するため、画像表示までの時間制限の厳しさと相まって問題が顕在化しやすい。
【００２３】
そこで本実施の形態では、情報処理に必要なデータ読み出しや書き込みの処理と管理処理との実施頻度のバランスを適切に保ち、破綻なく両者を実施しつつ情報処理の遅延を最小限に抑えられるようにする。具体的には、上述のような管理処理と、ホストユニット１２からのアクセス要求を、それぞれ処理内容によって分類し、異なるキューに格納する。そして処理内容の種類に応じた固有の規則で対象のキューを切り替えることにより、確実に遂行すべき処理については絶対的な尺度で完遂できるようにする。
【００２４】
またホストユニット１２からのアクセス要求の処理頻度と管理処理の必要性が生じる頻度との因果関係を踏まえてキューの切り替え規則を決定することにより、両者のバランスを最適化するとともに所要時間やバンド幅の見積もりを容易にする。以後、管理処理のための処理要求とホストユニット１２からのアクセス要求をまとめて「コマンド」と呼ぶことがある。
【００２５】
図２は、本実施の形態における情報処理装置の機能ブロックの構成を示している。図２に示す各機能は、ハードウェア的には図１に示す回路構成で実現でき、ソフトウェア的には、内部のメモリに保持するプログラムで実現される。したがってハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。
【００２６】
ホストユニット１２は、フラッシュメモリ２０へのアクセスのためのコマンドを発行するコマンド発行部３０、アプリケーションプログラムなどを処理する情報処理部３２、フラッシュメモリ２０に対し読み出しあるいは書き込みされるデータを入出力するデータ入出力部３４を含む。システムメモリ１４は、ホストユニット１２から発行されたコマンドを格納する複数のキュー３６および、フラッシュメモリ２０に対し読み出しあるいは書き込みされるデータを格納するデータ格納部３８を含む。
【００２７】
フラッシュコントローラ１８は、コマンドが発行された旨の通知をホストユニット１２から取得するコマンド受付部４０、フラッシュメモリ２０の管理のためのコマンドを発生させる管理コマンド生成部４２、管理のためのコマンドを含む各コマンドを格納する複数のキュー４４、キュー４４に格納されたコマンドを順次処理するコマンド処理部４６、処理対象のキューを切り替える規則を格納する切り替え規則記憶部４８、および、管理処理を実施する割合を所定の手法で調整するコマンド調整部５０を含む。
【００２８】
ホストユニット１２の情報処理部３２は、ユーザが選択したアプリケーションなどのプログラムを処理する。その過程においてフラッシュメモリ２０に格納されたデータを読み出したり、フラッシュメモリ２０にデータを書き込んだりする必要が生じたら、情報処理部３２はその旨をコマンド発行部３０に通知する。これに応じコマンド発行部３０は、アクセス先の論理アドレスを指定して、読み出しあるいは書き込みのコマンドを発行する。
【００２９】
より詳細には、システムメモリ１４の複数のキュー３６のいずれかにコマンドを格納するとともに、フラッシュコントローラ１８にその旨を通知する。この際、コマンド発行部３０は、読み出し要求か書き込み要求か、といったアクセス内容のほか、緊急性の高さに基づきコマンドを分類し、分類結果に対応するキューに格納する。このため、アクセス内容、制限時間、アクセスするデータのサイズなどに基づくコマンドの分類規則と、対応するキューのアドレス情報を、情報処理部３２が処理するプログラムなどであらかじめ設定しておく。
【００３０】
コマンドが書き込み要求である場合、データ入出力部３４は、書き込むべきデータを情報処理部３２から取得し、システムメモリ１４のデータ格納部３８に格納する。またデータ入出力部３４は、読み出し要求に応じてフラッシュコントローラ１８がフラッシュメモリ２０から読み出したデータを、データ格納部３８から読み出して情報処理部３２に供給する。
【００３１】
フラッシュコントローラ１８のコマンド受付部４０は、コマンドが発行された旨の通知をホストユニット１２から受け付け、システムメモリ１４の該当するキューからコマンドを読み出したうえ、内部に保持する複数のキュー４４のうち対応するキューに格納する。ここでフラッシュコントローラ１８が保持するキュー４４は、システムメモリ１４内の複数のキュー３６と同じ構成の複数のキューを含む。あるいはシステムメモリ１４内のキュー３６を、キュー４４の一部として参照できるようにしてもよい。
【００３２】
管理コマンド生成部４２は、上述のガベージコレクション、読み出しディスターブ回避のためのデータコピー、ＳＬＣからＴＬＣへのデータコピー、といった管理処理が必要になった段階で、それらの処理を要求するコマンドを発行する。より詳細には、フラッシュメモリ２０に対するデータの書き込み状況や読み出し状況を監視して、管理処理のコマンドを発行すべきタイミングを判定する。判定規則は管理処理の内容ごとにあらかじめ設定しておく。
【００３３】
そして、処理内容、データのコピー元アドレス、コピー先アドレス、データ消去すべきブロックなどを指定したコマンドを、キュー４４の管理処理のためのキューのうち、処理内容に対応するキューに格納する。なお同図では、キュー４４のうち、ホストユニット１２が発行したコマンドを格納するキューを白抜き、管理コマンド生成部４２が発行したコマンドを格納するキューを網掛けで示して区別している。
【００３４】
コマンド処理部４６は、キュー４４に格納されたコマンドを順次処理する。この際、１つのキューに格納されたコマンドは、その格納順を守って処理する。またコマンド処理部４６は処理対象のキューを、それぞれに設定された切り替え規則にしたがって次のキューへ切り替える。すなわち別のキューに格納されたコマンドは、発行順と異なる順序で処理されることがあり得る。キューの切り替え規則は切り替え規則記憶部４８に格納しておき、コマンド処理部４６が参照する。
【００３５】
キューから読み出したコマンドが書き込み要求である場合、コマンド処理部４６は、書き込むべきデータをシステムメモリ１４のデータ格納部３８から読み出し、コマンドに含まれる論理アドレスに対応する領域に当該データを書き込む。コマンドが読み出し要求である場合、コマンド処理部４６は、コマンドに含まれる論理アドレスに対応する領域から読み出したデータを、システムメモリ１４のデータ格納部３８に格納する。コマンドがフラッシュメモリ２０内部でのデータの移動である場合、コマンド処理部４６は、コマンドに含まれるコピー元のアドレスからコピー先のアドレスへデータをコピーする。また必要に応じてコピー元のブロックのデータを消去する。
【００３６】
コマンド調整部５０は、管理処理が完了せずメモリアクセスが破綻することのないように、実施する処理の割合を調整する。例えばキュー４４に格納された管理処理のためのコマンドの数が所定のしきい値を超えたとき、切り替え規則記憶部４８に格納された、キューの切り替え規則の少なくともいずれかを一時的に変更したり、ホストユニット１２にその旨を通知したりする。
【００３７】
前者の場合、管理処理のコマンドを格納するキューから次のキューへ切り替える規則として設定されている制限時間やコマンド処理数の上限を増加させたり、それ以外のキューのコマンド処理数の上限を減少させたりする。これにより、実質的に管理処理を実施する割合を増やすことができる。キュー４４に格納された管理処理のためのコマンドの数が上記しきい値以下となったらキューの切り替え規則を元に戻す。
【００３８】
ホストユニット１２に通知する場合、ホストユニット１２のコマンド発行部３０は通知を受けてコマンドの発行を制限する。例えば緊急性の低いコマンドの発行を一時停止したり発行の頻度を所定値以下に制限したりする。このようにしても実質的に管理処理を実施する割合を増やすことになる。なおキューの切り替え規則を変更したりホストユニット１２に通知したりするタイミングは上記以外であってもよい。
【００３９】
例えば、ガベージコレクションや読み出しディスターブを回避するための処理の必要性は、それまでのメモリアクセスの状況によって予測できるため、前もってそれらの対策を講じておくこともできる。具体的には、書き込み可能なブロック数が所定のしきい値以下になったとき、ガベージコレクションのコマンドが近々発行されると判定する。ここで用いるしきい値は当然、実際にガベージコレクションのコマンドを発行する際のしきい値より大きい値とする。
【００４０】
あるいは、同一ブロックに対する読み出し処理の回数が所定のしきい値に達したとき、読み出しディスターブ回避のためのデータコピーコマンドが近々発行されると判定する。ここで用いるしきい値は当然、実際にデータコピーコマンドを発行する際のしきい値より小さい値とする。そしてこれらのタイミングで、キューの切り替え規則を変更したりホストユニット１２に通知したりすれば、前もって調整できる分、調整量を抑えることができる。
【００４１】
書き込み可能なブロック数や同一ブロックに対する読み出し処理の回数を、ホストユニット１２へ定期的に通知することにより、ホストユニット１２によるコマンドの発行を徐々に制限できるようにしてもよい。また、キューの切り替え規則を変更する対応と、ホストユニット１２への通知は、独立して行ってもよいし、同時に行ってもよい。このような調整処理により、ホストユニット１２からのアクセス要求の処理とフラッシュメモリ２０自身が必要とする管理処理とのバランスを適切に保ち、かつ緊急性の高いコマンドの処理については低遅延を保障することができる。
【００４２】
図３は、キュー４４の構成例を示している。ここで円柱は各キューを模式的に示しており、その直下には、各キューに格納されるコマンドの種類を示している。フラッシュメモリ２０は異なる名前空間（NS: Name Space）を有する論理的なパーティションに分けられ、排他アクセスされる。キューも当該パーティションごとに設けられ、図では上段から順に、識別符号ａ、ｂ、ｃの名前空間（「ＮＳＩＤａ」、「ＮＳＩＤｂ」、「ＮＳＩＤｃ」）に対し設けられるキューを示している。さらに最下段には、管理処理を示す「ＢＧ  Ｊｏｂ」（Background Job）として、それに対し設けられるキューも示している。
【００４３】
この例で「ＮＳＩＤａ」は、通常のファイルシステムによりアクセスされるパーティションであり、標準的な読み出しコマンドと書き込みコマンドが混在するキュー５１を設けている。「ＮＳＩＤｂ」は、読み出しのみのファイルアーカイブを扱うためのパーティションであり、一旦、書き込みコマンド専用のキュー５８を用いてファイルを書き込んだら、読み出しコマンド専用のキュー５２、５４、５６を用いてデータを読み出す。
【００４４】
ここで読み出しコマンド専用のキューは、緊急性の高さに応じて複数のキューで構成され、同図では緊急性が最も高い「緊急」のキュー５２、次に緊急性が高い「高優先度」のキュー５４、緊急性が最も低い「通常優先度」のキュー５６、の３段階としている。ただし段階数をこれに限る主旨ではない。また書き込みコマンド専用のキュー５８は、「ＮＳＩＤａ」のキュー５１と同程度の優先度を有する標準的なキューとしている。
【００４５】
「ＮＳＩＤｃ」はＳＬＣで構成されるパーティションであり、高速な書き込み専用のキュー６０と、読み出しコマンドと書き込みコマンドが混在するキュー６２を設けている。また後者は「ＮＳＩＤａ」のキュー５１と同程度の優先度を有する標準的なキューとしている。
【００４６】
「ＢＧ  Ｊｏｂ」としては上述のとおり、ＳＬＣからＴＬＣへデータをコピーするコマンドのためのキュー６４、読み出しディスターブ回避のためのデータコピーコマンドのためのキュー６６、ガベージコレクションコマンドのためのキュー６８を設ける。キューとしてはこのほか、運用中にバックグラウンドで実行すべき上述のような管理処理とは別に、システムを管理するためのコマンドを格納するキューなどがあってよい。
【００４７】
フラッシュコントローラ１８のコマンド処理部４６は上述のとおり、切り替え規則記憶部４８に格納された規則に従いキューを切り替えながら、格納されているコマンドを順に処理していく。より詳細には、キュー５１〜６８自体を複数種類に分け、各種類に対し処理の期間を割り当てて循環させる。ある種類のキューを処理対象としている期間において、コマンドの処理数が上限まで達した時点、あるいは制限時間が満了した時点で、次の種類のキューを処理対象とする期間に移行する。処理上限数や制限時間は、キューの種類ごとに独立して設定可能とする。以後、キューの種類ごとに割り当てられる期間を「フェーズ」と呼ぶ。
【００４８】
図４は各フェーズで処理するキューの種類と、各フェーズにおけるコマンドの処理上限数と制限時間の設定例を示している。この例ではフェーズ１からフェーズ５の５つの期間に分けており、フェーズ１、２、３、４、５、１、２、・・・と循環して移行させる。まずフェーズ１は、ＮＳＩＤｂに対する読み出し専用のキュー、すなわち図３の例ではキュー５２、５４、５６の３つのキューを処理対象とする。これらのキューのうち、緊急性が高いキューほど優先して処理対象とする。コマンドの処理上限は５０個としている。なおコマンド数は、所定サイズのデータに対するアクセスを１単位としてカウントする。以後の説明でも同様である。
【００４９】
フェーズ２は、ＮＳＩＤｃに対する高速書き込み専用のキュー、ＮＳＩＤａおよびｃに対する標準の読み出し／書き込みのキュー、および、ＮＳＩＤｂに対する標準の書き込み専用のキューを処理対象とする。これらは図３の例では、キュー６０、５１、６２、５８にそれぞれ対応する。これらのキューのうち、高速書き込み専用のキュー６０にコマンドが格納されていれば、それを優先することによりＳＬＣへの高速書き込みを実現する。
【００５０】
フェーズ３は、ＢＧ  Ｊｏｂ、すなわち管理処理用のキュー（図３の例ではキュー６４、６６、６８）を処理対象とする。これらのキューに格納されるコマンドはいずれも、フラッシュメモリ２０に格納済みのデータを別の領域に移す処理を含むが、フェーズ３ではそのうち、元のデータを読み出す部分のみを実施する。読み出したデータは一時的に内部のメモリあるいはシステムメモリ１４に格納しておく。
【００５１】
フェーズ４はフェーズ１と同様、ＮＳＩＤｂに対する読み出し専用のキューを処理対象とする。同じキューに対する処理を２つの期間に分けることで、前の期間終了直後に発行されたコマンドを次の期間ですぐに処理でき、最大遅延時間を少なくできる。フェーズ５は、ＢＧ  Ｊｏｂ、すなわち管理処理用のキューに格納されたコマンドのうち、フェーズ３で読み出したデータの書き込みおよび、コピーにより無効となったデータの消去を行う。
【００５２】
例えばＮＳＩＤｂに格納されたデータを用いて、所定のフレームレートで表示画像を描画する場合、そのデータ読み出しが遅延することにより画面がフリーズしたりコマ落ちしたりすることがあり得る。管理処理用のキューに格納されるコマンドはいずれも、処理の完了に多くの時間を要するため、フェーズ３とフェーズ５で分けて２段階の処理とすることにより、表示画像の描画などリアルタイム性を追求される処理が妨げられないようにする。
【００５３】
またデータの読み出しやＳＬＣへの書き込みと比較し、ＴＬＣへの書き込みやデータ消去は数倍以上の時間を要する。したがって後者をフェーズ５としてまとめるとともに、制限時間を設けて、処理の途中であっても一旦中断して別のフェーズへ移行できるようにする。図の例では、フェーズ５の制限時間を「３．０ｍｓｅｃ」としている。制限時間のほか、緊急性の高いキュー、例えば図３の緊急読み出しキュー５２にコマンドが格納された時点で、フェーズ５の処理を中断するようにしてもよい。
【００５４】
これにより、上述のとおりＮＳＩＤｂから読み出したデータを用いて表示画像を描画する態様において、表示画像への影響を最小限に抑えることができる。なおフェーズ５の処理を中断した場合、中断させた処理が完了するまでは、フェーズ２およびフェーズ３をスキップしてフェーズを移行させてもよい。
【００５５】
図４では、各フェーズに与えるコマンド数の処理上限と、それにより想定される最大所要時間も例示している。フェーズ１および４では、ＮＳＩＤｂからのデータ読み出しを「５０」コマンドを上限として処理する。読み出し処理が１コマンド当たり１００μｓｅｃ、それ以外に要する時間を１００μｓｅｃとすると、フェーズ１および４の所要時間は最大５．１ｍｓｅｃとなる。フェーズ２では、ＮＳＩＤａ〜ＮＳＩＤｃに対する書き込みであれば「１」コマンド、読み出しであれば「４」コマンドを上限として処理する。
【００５６】
ここでなされるＳＬＣへの書き込み処理が１コマンド当たり５００μｓｅｃとし、読み出し処理が上述同様、１コマンド当たり１００μｓｅｃ、それ以外に要する時間を１００μｓｅｃとすると、書き込み、読み出しのいずれにおいてもフェーズ２の所要時間は最大０．５ｍｓｅｃとなる。フェーズ３では、コピー元のデータの読み出しを「３」コマンドを上限として処理する。読み出し処理が上述同様、１コマンド当たり１００μｓｅｃ、それ以外に要する時間を１００μｓｅｃとすると、フェーズ３の所要時間は最大０．４ｍｓｅｃとなる。
【００５７】
フェーズ５では、コピー先へのデータの書き込みを「１」コマンドを上限として処理する。無効となった領域のデータ消去は上述とおり制限時間「３．０ｍｓｅｃ」で拘束され、徐々に進捗させていく。このように制限を与えると、フェーズ１からフェーズ５までの１サイクル分の処理は最大で１４．１ｍｓｅｃとなり、メモリアクセスのための遅延時間を一定値以下に抑え込むことができる。またフラッシュメモリ２０とフラッシュコントローラ１８間に必要なバンド幅も所定値以下に制御できる。
【００５８】
図示する例で、１コマンド当たりのデータサイズを６５５３６Ｂ（バイト）とした場合、１４．１ｍｓｅｃの周期中、フェーズ１および４で最大１００コマンド分の読み出し処理がなされることから、必要なバンド幅はＮＡＮＤの１チャネル当たり、６５５３６×１００／１４．１＝４６５ＭＢ／ｓｅｃとなる。同様に、フェーズ２で処理されるコマンドのために必要なバンド幅はＮＡＮＤの１チャンネル当たり、読み出し処理は１８．６ＭＢ／ｓｅｃ、書き込み処理は４．６５ＭＢ／ｓｅｃとなる。なおここで述べた各種数値や設定はあくまで例示であり、情報処理の内容や処理性能などに応じて適宜変更してよい。
【００５９】
図５はフェーズ１およびフェーズ４において、コマンド処理部４６がＮＳＩＤｂからデータを読み出す処理の手順を示すフローチャートである。この例は、図３に示すように緊急性の高さに応じて読み出し専用のキューが３つに分けられている場合を想定している。まず最も緊急性の高いキュー（図３の緊急の読み出しキュー５２）にコマンドが格納されているか否かを確認する（Ｓ１０）。格納されている場合（Ｓ１０のＹ）、コマンド処理部４６は当該キューに最先に格納されたコマンド読み出し、論理アドレスを物理アドレスに変換するなどして該当領域にあるデータを読み出す（Ｓ１２）。
【００６０】
最も緊急性の高いキューにコマンドが格納されている限りは、それを順次読み出して処理する（Ｓ１０のＹ、Ｓ１２）。当該キューに処理すべきコマンドがなく（Ｓ１０のＮ）、それまでに処理したコマンド数が設定された処理上限未満であれば（Ｓ１４のＹ）、次に緊急性の高いキュー（図３の高優先度の読み出しキュー５４）にコマンドが格納されているか否かを確認する（Ｓ１６）。格納されている場合（Ｓ１６のＹ）、コマンド処理部４６は当該キューに最先に格納されたコマンド読み出し、上述と同様にデータを読み出す（Ｓ１８）。
【００６１】
これによっても設定された処理上限数に到達しなければ（Ｓ２０のＹ）、コマンド処理部４６はコマンドを１つ処理する都度、最も緊急性の高いキューにコマンドが格納されているか否かを再び確認し、格納されていればそれを処理する（Ｓ１０のＹ、Ｓ１２）。最も緊急性の高いキューに処理すべきコマンドがなく（Ｓ１０のＮ）、それまでに処理したコマンド数が設定された処理上限未満であれば（Ｓ１４のＹ）、次に緊急性の高いキューに格納されているコマンドを処理する（Ｓ１６のＹ、Ｓ１８）。当該キューに処理すべきコマンドがなければ（Ｓ１６のＮ）、最も緊急性の低いキュー（図３の通常優先度の読み出しキュー５６）にコマンドが格納されているか否かを確認する（Ｓ２２）。
【００６２】
格納されている場合（Ｓ２２のＹ）、コマンド処理部４６は当該キューに最先に格納されたコマンド読み出し、上述と同様にデータを読み出す（Ｓ２４）。これによっても設定された処理上限数に到達しなければ（Ｓ２０のＹ）、コマンド処理部４６はコマンドを１つ処理する都度、最も緊急性の高いキューにコマンドが格納されているか否かを再び確認し、格納されていればそれを処理する（Ｓ１０のＹ、Ｓ１２）。このようなサイクルにおいていずれかの処理によりコマンドの処理数が上限に達したり（Ｓ１４のＮまたはＳ２０のＮ）、処理すべきコマンドがなくなったりしたら（Ｓ２２のＮ）、当該フェーズを終了させて次のフェーズへ移行する。
【００６３】
このような処理手順により、緊急性が高いキューほどを高頻度で監視できるとともにコマンドを先に処理でき、コマンドの格納から処理までの遅延時間を最小限に抑えることができる。また比較的緊急性の低いコマンドについては、処理数の上限を拘束条件として処理を後回しにし、別のフェーズへ譲ることで、フェーズ全体での所要時間やバンド幅を制御できる。
【００６４】
図６はフェーズ２おいて、コマンド処理部４６がＮＳＩＤａ〜ｃに対しデータの読み出しあるいは書き込みを行う処理手順を示すフローチャートである。コマンド処理部４６はまず、ＮＳＩＤｃに対する高速の書き込みのためのキュー（図３の高速書き込みキュー６０）にコマンドが格納されているか否かを確認する（Ｓ３０）。格納されている場合（Ｓ３０のＹ）、コマンド処理部４６は当該キューに最先に格納されたコマンド読み出し、論理アドレスを物理アドレスに変換するとともに、システムメモリ１４から読み出したデータを該当領域に書き込む（Ｓ３２）。
【００６５】
この時点で処理したコマンド数が設定された書き込み処理の上限に達していたら、当該フェーズを終了させて次のフェーズへ移行する（Ｓ３４のＮ）。図４で示した処理上限数の設定によれば、フェーズ２における書き込みは１コマンドを上限とするため、Ｓ３２の処理を１度実施したら本フェーズは終了することになる。それ以外の設定であって、処理したコマンド数が設定された書き込み処理の上限未満であれば（Ｓ３４のＹ）、再度、高速の書き込みのためのキューにコマンドが格納されているか否かを確認し、格納されていればそれを処理する（Ｓ３０のＹ、Ｓ３２）。
【００６６】
それを繰り返す過程で書き込み処理の上限に到達したら、当該フェーズを終了させて次のフェーズへ移行する（Ｓ３４のＮ）。高速の書き込みのためのキューに処理すべきコマンドがなければ（Ｓ３０のＮ）、ＮＳＩＤａ〜ＮＳＩＤｃに対する標準的な読み出しあるいは書き込みのためのキュー（図３の標準の読み出し／書き込みキュー５１および６２、標準の書き込みキュー５８）のいずれかにコマンドが格納されているか否かを確認する（Ｓ３６）。
【００６７】
格納されている場合（Ｓ３６のＹ）、コマンド処理部４６は当該キューに最先に格納されたコマンド読み出し、上述と同様にデータを書き込んだり読み出したりする（Ｓ３８）。フェーズ２では、読み出し処理と書き込み処理のそれぞれに対し処理上限が設定されるため、１コマンドを処理する都度、その処理内容ごとに、コマンド数と上限を比較する。処理上限数に到達していなければ（Ｓ３４のＹ）、再度、高速の書き込みのためのキューにコマンドが格納されているか否かを確認し、格納されていればそれを処理する（Ｓ３０のＹ、Ｓ３２）。
【００６８】
当該キューに処理すべきコマンドがなければ（Ｓ３０のＮ）、標準的な読み出しあるいは書き込みのためのキューにコマンドが格納されているか否かを確認し、格納されていればそれを処理する（Ｓ３６のＹ、Ｓ３８）。当該サイクルにおいて処理したコマンド数が上限に到達したり、処理すべきコマンドがなくなったりしたら、当該フェーズを終了させて次のフェーズへ移行する（Ｓ３４のＮまたはＳ３６のＮ）。このような処理手順により、高速の書き込みを優先的に処理できる。なおＳ３６において確認処理の対象とされるキューは図３の例では３つあるが、基本的にはそれらを順繰りに確認し、コマンドがあれば処理するラウンドロビン方式でよい。
【００６９】
図７はフェーズ３において、コマンド処理部４６が管理処理のうち読み出し処理を行う処理手順を示すフローチャートである。コマンド処理部４６は、管理処理に対して設けたキュー（図３のＳＬＣ→ＴＬＣコピーのキュー６４、読み出しディスターブ回避用データコピーのキュー６６、ガベージコレクションのキュー６８）のいずれかにコマンドが格納されているか否かを確認する（Ｓ４０）。格納されている場合（Ｓ４０のＹ）、コマンド処理部４６は当該キューに最先に格納されたコマンド読み出し、そのうちデータを読み出す処理のみを実施する（Ｓ４２）。
【００７０】
処理したコマンド数がフェーズ３で設定されている上限未満であれば、キューにコマンドがある限り、そのうちの読み出し処理を繰り返す（Ｓ４４のＹ、Ｓ４０のＹ、Ｓ４２）。処理の上限に達したとき（Ｓ４４のＮ）、あるいは処理すべきコマンドがいずれのキューにもないとき（Ｓ４０のＮ）、当該フェーズを終了させて次のフェーズへ移行する。なおＳ４０において確認処理の対象とされるキューは複数（図３の例では３つ）あるが、それらをラウンドロビン方式で順繰りに確認し、コマンドが存在すれば処理することを基本とする。
【００７１】
またフェーズ３については、処理数の上限を絶対値で設定する代わりに、フェーズ５で書き込みを実施する分だけ読み出すようにしてもよい。またＳＬＣの空き領域が所定サイズより少なくなった場合、フェーズ２におけるＳＬＣへの書き込み処理のコマンドをスキップしてフェーズ３に移行することにより、ＴＬＣへのデータコピーが先になされるようにする。この場合もフェーズ１や４は順序通りに行うことで必要なデータ読み出しは遂行される。
【００７２】
図８はフェーズ５において、コマンド処理部４６が管理処理のうち書き込み処理およびデータ消去を行う処理手順を示すフローチャートである。なおフェーズ３において読み出し処理のみ実施した管理処理のコマンドは、フラグを立てるなどして他と区別したうえでキューに残しておく。あるいは管理処理のコマンドを読み出しコマンド、書き込みコマンド、消去コマンドに分けて格納し、フェーズ３で処理された読み出しコマンドをキューから削除してもよい。
【００７３】
まずコマンド処理部４６は、それ以前のフェーズ５のタイミングで処理を中断したコマンドがないか確認する（Ｓ５０）。上述のとおりフェーズ５における処理は比較的時間を要するため、緊急の読み出しキューにコマンドが格納されたり、フェーズ５の制限時間を満了したりした場合に処理を中断してフェーズ１に移行する。処理を中断したコマンドは図示しない別のキューに格納するか、それが識別されるような状態で元のキューに残しておく。
【００７４】
中断したコマンドがあれば（Ｓ５０のＹ）、当該コマンドを中断した時点から再開する（Ｓ５４）。中断したコマンドがなければ（Ｓ５０のＮ）、コマンド処理部４６は管理処理に対して設けたキューのいずれかにコマンドが格納されているか否かを確認する（Ｓ５２）。ただしここで対象とするコマンドは、フェーズ３においてデータの読み出しのみが実施されているコマンドである。そのようなコマンドがなければ、当該フェーズを終了させ次のフェーズへ移行する（Ｓ５２のＮ）。コマンドがあれば（Ｓ５２のＹ）、当該コマンドの書き込み処理と、必要に応じたデータ消去処理を開始する（Ｓ５４）。
【００７５】
そして、ＮＳＩＤｂに対する緊急性の最も高い読み出しキューにコマンドが格納されないか、フェーズ５に設定されている制限時間に達しないか、を確認しながら処理を続行する（Ｓ５６のＮ、Ｓ５８のＮ、Ｓ６０のＮ）。緊急キューへのコマンドの格納、および制限時間の満了のどちらかが発生したら（Ｓ５６のＹまたはＳ５８のＹ）、開始した処理を中断して次のフェーズへ移行する（Ｓ６２）。この場合、フェーズ１、フェーズ４と移行してフェーズ５へ再び戻り、中断した処理を再開する。
【００７６】
緊急キューへのコマンドの格納、および制限時間の満了のどちらも発生せず処理が完了したら（Ｓ６０のＹ）、コマンドの処理数が上限に達しているかを確認し、達していた場合、当該フェーズを終了させて次のフェーズへ移行する（Ｓ６４のＮ）。図４で示した処理上限数の設定によれば、フェーズ５における書き込みは１コマンドを上限とするため、Ｓ６０において書き込み処理が完了した時点で本フェーズは終了することになる。またデータ消去処理は長時間に渡るため、処理が完了した時点でフェーズを終了させる。
【００７７】
それ以外の設定であって、処理したコマンド数が設定された書き込み処理の上限未満であれば（Ｓ６４のＹ）、各キューにコマンドが格納されているか否かを確認し、格納されていればそれを処理する（Ｓ５２のＹ、Ｓ５４〜Ｓ６０）。この場合も当然、緊急キューへのコマンドの格納、および制限時間の満了のどちらかが発生したら（Ｓ５６のＹまたはＳ５８のＹ）、開始した処理を中断して次のフェーズへ移行する（Ｓ６２）。一方、処理が完了し、コマンドの処理数が上限に達したら当該フェーズを終了させて次のフェーズへ移行する（Ｓ６４のＮ）。
【００７８】
ところでフェーズ３およびフェーズ５で実施される管理処理の発生頻度は、フェーズ１、フェーズ２、およびフェーズ４で実施されるコマンドの数に影響される。例えばＳＬＣをＴＬＣにコピーする処理は３ページ単位でなされる。ここでフェーズ２において毎回、１ページ分のＳＬＣへの書き込みがなされた場合、３周期に１回、ＳＬＣからＴＬＣへのコピーを行うことで帳尻を合わせることができる。したがって残りの６６％の時間を別の管理処理に割り当てられる。
【００７９】
また１ブロックが７６８ページで、フェーズ３およびフェーズ５において１周期当たり３ページのコピーを完了させると、２５６周期で１ブロックのコピーが完了する。読み出しディスターブを回避するため、同一ブロックが平均１，０００，０００回、読み出されたら該当ブロックをコピーする場合、フェーズ１およびフェーズ４において１周期当たり最大１００回の読み出しがなされると、１０，０００周期に１回、ブロックコピーの必要が生じる。１ブロックのコピーに上述のとおり２５６周期を要するとすると、読み出しディスターブ回避のための管理処理に必要な時間割合は最大で２５６／１００００≒２．５％である。
【００８０】
このようにホストユニット１２から発行されるコマンド数と管理処理の発生との因果関係を考慮し、適切なバランスで各フェーズにおけるコマンドの処理上限数を設定することにより、管理処理を破綻させずに全てを円滑に処理できる。また各フェーズで処理対象とするキューを、上述のとおり処理内容や優先度に応じて適切に切り替えることにより、各コマンドの発行から処理までの遅延時間を制御することができる。
【００８１】
例えば図４の設定によれば、ＮＳＩＤｂのキューに格納された先頭コマンドの処理が他の処理により遅延する時間は、最大でもフェーズ５の制限時間である３．０ｍｓｅｃ程度に抑えることができる。これにより、ＮＳＩＤｂから読み出したデータを用いて表示画像を描画する場合に、画面のフリーズやコマ落ちなどの不具合を最小限に抑えることができる。
【００８２】
これまで述べたように本実施の形態では、コマンドの内容に応じてフェーズ、ひいてはキューの切り替え規則を独立に設定する。そこで、より情報処理の特性に即した規則を特定のフェーズに課すこともできる。図９はその一例として、ホストユニット１２からの通知に応じてフェーズを切り替える規則を導入する形態を説明するための図である。この例において情報処理装置は、フラッシュメモリ２０に格納されたデータを用いて直後に表示すべき画像を描画する処理を、表示装置のフレーム表示周期に合わせて繰り返す。
【００８３】
フラッシュメモリ２０から、描画に必要なデータをその場で読み出すようにすると、前もって多くのデータを読み出しておくよりシステムメモリ１４の容量を節約できる。図は横方向を時間軸とし、上段から、フレームｎ、フレームｎ＋１、フレームｎ＋２、・・・を表示装置に表示する期間、各フレームを描画する期間、およびフラッシュコントローラ１８によるメモリアクセスの各フェーズを矩形で示している。
【００８４】
最上段の表示処理における黒塗りの期間は垂直帰線期間に対応する。このような周期的な表示処理に対し、情報処理装置（主にホストユニット１２）は、表示が開始される前に同フレームの描画を完成させる必要がある。画像の内容によって、各フレームの描画期間およびフラッシュメモリ２０から読み出すべきデータのサイズやその要求頻度も異なる。描画期間の矩形から下向きに出ている白抜きの矢印（例えば矢印８０）は、ホストユニット１２からの読み出しコマンドの発行タイミングを例示している。
【００８５】
図示するように、あるフレームの描画が完了してから次のフレームの描画が開始されるまでには、フレームの描画期間に応じた空き時間Ｔｎ＋１、Ｔｎ＋２、Ｔｎ＋３、・・・が発生する。そこでこの時間を利用して、管理処理のうち時間を要する処理をまとめて行うことにより、描画期間においては読み出し処理の遅延がより抑えられるようにする。具体的には、１フレーム分の描画処理が完了する都度、ホストユニット１２からフラッシュコントローラ１８へその旨を通知する。同図ではこのタイミングを矢印８２ａ、８２ｂ、８２ｃ、８２ｄで示している。
【００８６】
フラッシュコントローラ１８は、当該通知を受けたことを条件に、フェーズ４からフェーズ５へ移行する。同図ではこのタイミングを矢印８４ａ、８４ｂ、８４ｃ、８４ｄで示している。このようにホストユニット１２における処理の進捗状況に合わせて、フラッシュコントローラ１８が処理するコマンドの種類を切り替えることにより、ホストユニット１２が必要とする処理と、フラッシュメモリ２０自身が必要とする処理とを、それぞれに適したタイミングで実施できる。
【００８７】
同図の例では、ホストユニット１２から描画データの読み出しコマンドが発行される期間、すなわちフレームの描画期間には、フェーズ１〜４に限定してコマンド処理がなされるため、読み出し処理の遅延時間は最大でもフェーズ２およびフェーズ３の期間分ですむことになる。図４で示したような処理上限数を設定した場合、当該遅延時間は最大０．９ｍｓｅｃとなる。
【００８８】
図１０は、コマンド調整部５０による調整に主眼を置いたフラッシュコントローラ１８の処理手順を示すフローチャートである。フラッシュコントローラ１８のコマンド受付部４０、管理コマンド生成部４２、およびコマンド処理部４６は、これまで述べたようにして、ホストユニット１２から発行されたコマンドを受け付けたり管理処理のためのコマンドを生成したりして、順次処理する（Ｓ７０）。このステップには詳細には上述のとおり、フェーズ１〜５や、各フェーズで処理対象とするキューを、切り替え規則記憶部４８に設定された規則に従い切り替える処理が含まれる。
【００８９】
さらに、図９で示したようにホストユニット１２からの通知を条件としてフェーズ５へ移行する動作が含まれていてよい。このようなコマンド処理と並行して、コマンド調整部５０は、フラッシュメモリ２０のうち同一ブロックに対する読み出しの回数が所定のしきい値を超えたか否かを監視する（Ｓ７２）。また新たに書き込みが可能なブロックの数が所定のしきい値以下となったか否かを監視する（Ｓ７４）。前者は読み出しディスターブを回避するためのデータコピーコマンドの発行タイミングの到来を事前に予測するものである。
【００９０】
後者はガベージコレクションコマンドの発行タイミングの到来を事前に予測するものである。どちらの監視結果も否であれば、コマンド調整部５０による調整はなされず、コマンド処理が続行される（Ｓ７２のＮ、Ｓ７４のＮ、Ｓ７０）。同一ブロックに対する読み出しの回数が所定のしきい値を超えるか（Ｓ７２のＹ）、新たに書き込みが可能なブロックの数が所定のしきい値以下となったら（Ｓ７４のＹ）、コマンド調整部５０は切り替え規則記憶部４８に格納された切り替え規則のいずれかを調整する（Ｓ７６）。
【００９１】
例えばフェーズ１、フェーズ２、フェーズ４において、通常優先度の読み出しキューや標準の書き込み、読み出しのキューに格納されたコマンドを一時的に処理しないようにしたり、処理数を制限したりする一方、フェーズ３やフェーズ５の処理上限数や制限時間を増加させる。これにより、１周期に対し管理処理に使える時間の割合が増加する。
【００９２】
またコマンド調整部５０は、同一ブロックに対する読み出しの回数が所定のしきい値を超えた旨や、新たに書き込みが可能なブロックの数が所定のしきい値以下となった旨を、ホストユニット１２へ通知する（Ｓ７８）。これに応じてホストユニット１２は、通常優先度の読み出し処理や標準の書き込み処理、読み出し処理のコマンドの発行数を一時的に低下させる。このようにしても、切り替え規則の変更と同様、１周期に対し管理処理に使える時間の割合が増加する。なおホストユニット１２へは、同一ブロックに対する読み出し回数や書き込み可能なブロック数を随時通知し、ホストユニット１２側でコマンドの発行数を調整してもよい。
【００９３】
結果として、ホストユニット１２からの要求のうち緊急性の高いコマンドの処理を保障したうえで、管理処理が間に合わず正確なデータが読み出せなくなったり書き込みができなくなったりすることもなくなる。なおＳ７２とＳ７４の監視項目はどちらか一方のみとしてもよいし、管理処理が必要になることを予測できるような別の監視項目を採用したり組み合わせたりしてもよい。例えば管理処理のキューに実際に格納されているコマンドの数にしきい値を設けたり、それまでのコマンドの格納状況から以後の格納数を予測したりして調整の必要性を判定してもよい。
【００９４】
またＳ７６の切り替え規則の変更とＳ７８のホストユニット１２への通知はどちらか一方のみ実施してもよい。また図示を省略しているが、監視項目がターゲットとする管理処理が完了したら、コマンド調整部５０は切り替え規則を元に戻したり、その旨をホストユニットに通知してコマンドの発行数を通常状態に戻させたりする。
【００９５】
以上述べた本実施の形態によれば、フラッシュメモリに対するアクセス要求を、読み出し、書き込みといった処理の内容とその中での優先度に応じた異なるキューに格納する。そしてキューごとに設定した規則に従い、対象のキューを切り替えてコマンドを読み出し、処理する。これにより情報処理の特性、例えばデータ読み出しおよび書き込みのどちらが支配的か、どちらが時間に対する拘束条件が厳しいか、両者が対等か、といった特性に適した順序や頻度でアクセス要求を処理できる。
【００９６】
また複数のキューを分類し、種類ごとに処理する期間（フェーズ）を設ける。これにより個々のキューに対しては、同一フェーズで処理されるキュー間の切り替え規則とフェーズ間の切り替え規則を２重に課すことになり、それらの組み合わせによりきめ細かい設定、ひいては実態に即した柔軟な運用が可能になる。
【００９７】
このようなシステムに、ガベージコレクション、読み出しディスターブ回避のためのデータコピー、ＳＬＣからＴＬＣへのデータコピー、といった管理処理用のキューも同様に組み入れる。これにより、ホストユニットからの緊急性の高いアクセス要求の処理が、管理処理によって滞るのを防ぐことができる。特に上記のような管理処理は、ホストユニットからのアクセス要求の内容や頻度に依存して発生するため、コマンド処理数の上限や制限時間など、キューごとに絶対的な指標を用いた規則を設定することにより、双方のバランスを最適化し、破綻することなく必要な処理を低遅延で行える。またフェーズを循環させることにより、処理周期の見積もりが容易となり、バンド幅の制御が可能となる。
【００９８】
さらに上記の管理処理には、頻度は高くないが一旦、必要性が生じると多くの時間を要する独特の性質を有するものがある。そのような処理が開始されるタイミングを事前に予測し、一時的に切り替え規則を変化させたりホストユニットによる要求のうち緊急性の低いものの発行を抑制したりする。これにより、管理処理に割り当てる時間を一時的に増加させて促進させる一方、ホストユニットの処理に最低限必要なアクセス処理を担保する、といった臨機応変な対応を容易に実現できる。
【００９９】
以上、本発明を実施の形態をもとに説明した。上記実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【符号の説明】
【０１００】
１０  情報処理装置、  １２  ホストユニット、  １４  システムメモリ、  １８  フラッシュコントローラ、  ２０  フラッシュメモリ、  ２２  ホストコントローラ、  ２４  ＳＲＡＭ、  ２８  メモリコントローラ、  ３０  コマンド発行部、  ３２  情報処理部、  ３４  データ入出力部、  ３６  キュー、  ４０  コマンド受付部、  ４２  管理コマンド生成部、  ４４  キュー、  ４６  コマンド処理部、  ４８  切り替え規則記憶部、  ５０  コマンド調整部。
【図１】
2018101301.tif 000003
【図２】
2018101301.tif 000004
【図３】
2018101301.tif 000005
【図４】
2018101301.tif 000006
【図５】
2018101301.tif 000007
【図６】
2018101301.tif 000008
【図７】
2018101301.tif 000009
【図８】
2018101301.tif 000010
【図９】
2018101301.tif 000011
【図１０】
2018101301.tif 000012