(57)【要約】【課題】一つの実施形態は、コマンドキューに格納されたコマンドを適切に並べ替えることができるディスク装置、及びディスク装置の制御方法を提供することを目的とする。【解決手段】一つの実施形態によれば、ディスク媒体とコマンドキューとコントローラとを有するディスク装置が提供される。ディスク媒体は、アドレスに従ってデータが記録される。コマンドキューは、コマンドを順にエンキューする。コントローラは、コマンドキューにエンキューされたコマンド又はコマンドキューからデキューされたコマンドに応じて、ディスク媒体におけるアドレスに対応してグループ化された複数のグループを再グループ化する。コントローラは、再グループ化された複数のグループに基づいて、コマンドキューについての処理を行う。【選択図】図１
2018159993.tif 000002
【特許請求の範囲】
【請求項１】
アドレスに従ってデータが記録されるディスク媒体と、
コマンドを順にエンキューするコマンドキューと、
前記コマンドキューにエンキューされたコマンド又は前記コマンドキューからデキューされたコマンドに応じて、前記ディスク媒体における前記アドレスに対応してグループ化された複数のグループを再グループ化し、前記再グループ化された複数のグループに基づいて、前記コマンドキューについての処理を行うコントローラと、
を備えたディスク装置。
【請求項２】
前記コントローラは、前記コマンドキューにエンキューされたコマンドに応じて、前記複数のグループのうち１以上のグループを分割して再グループ化する
請求項１に記載のディスク装置。
【請求項３】
前記コントローラは、前記コマンドキューからデキューされたコマンドに応じて、前記複数のグループのうち２以上のグループを統合して再グループ化する
請求項１に記載のディスク装置。
【請求項４】
前記コントローラは、前記コマンドキューにエンキューされたコマンドに応じて、前記複数のグループのうち互いに隣接する２つのグループの前記アドレスの境界を変更する
請求項１に記載のディスク装置。
【請求項５】
前記コントローラは、前記コマンドキューからデキューされたコマンドに応じて、前記複数のグループのうち互いに隣接する２つのグループの前記アドレスの境界を変更する
請求項１に記載のディスク装置。
【請求項６】
前記コントローラは、前記複数のグループのそれぞれのコマンド数が所定の範囲内に収まるように前記複数のグループを再グループ化する
請求項１に記載のディスク装置。
【請求項７】
前記コントローラは、前記エンキューされたコマンドに対応した第１のグループのコマンド数を求め、前記第１のグループのコマンド数が第１の閾値を超えたことに応じて、前記第１のグループを分割して再グループ化する
請求項２に記載のディスク装置。
【請求項８】
前記コントローラは、前記デキューされたコマンドに対応した第１のグループのコマンド数と前記第１のグループに隣接する第２のグループのコマンド数とをそれぞれ求め、前記第１のグループのコマンド数と前記第２のグループのコマンド数との合計が閾値より少なくなったことに応じて、前記第１のグループと前記第２のグループとを統合して再グループ化する
請求項３に記載のディスク装置。
【請求項９】
前記コントローラは、前記デキューされたコマンドに対応した第２のグループのコマンド数と前記第２のグループに隣接する第３のグループとをそれぞれ求め、前記第２のグループのコマンド数と前記第３のグループのコマンド数との合計が第２の閾値より少なくなったことに応じて、前記第２のグループと前記第３のグループとを統合して再グループ化し、
前記第２の閾値は、前記第１の閾値より小さい
請求項７に記載のディスク装置。
【請求項１０】
前記コントローラは、前記エンキューされたコマンドに対応した第１のグループのコマンド数を求め、前記第１のグループのコマンド数が第１の閾値を超えたことに応じて、前記第１のグループと前記第１のグループに隣接する第４のグループとの境界を前記第１のグループの側にずらして変更する
請求項４に記載のディスク装置。
【請求項１１】
前記コントローラは、前記デキューされたコマンドに対応した第１のグループのコマンド数を求め、前記第１のグループのコマンド数が閾値以下になったことに応じて、前記第１のグループと前記第１のグループに隣接する第２のグループとの境界を前記第２のグループの側にずらして変更する
請求項５に記載のディスク装置。
【請求項１２】
前記コントローラは、前記コマンドキューからデキューされたコマンドに対応した第２のグループのコマンド数を求め、前記第２のグループのコマンド数が第２の閾値以下になったことに応じて、前記第２のグループと前記第２のグループに隣接する第３のグループとの境界を前記第３のグループの側にずらして変更し、
前記第２の閾値は、前記第１の閾値より小さい
請求項１０に記載のディスク装置。
【請求項１３】
前記コントローラは、前記コマンドキューにキューイングされたコマンドのそれぞれについて、コマンドを識別する情報と前記アドレスに応じて割り当てられたグループを識別する情報とが対応付けられた登録情報に基づいて、前記コマンドキューに格納されたコマンドを並べ替える
請求項１に記載のディスク装置。
【請求項１４】
前記複数のグループは、論理アドレスに対応してグループ化され、
前記コントローラは、前記コマンドキューにキューイングされたコマンドについて、前記複数のグループのうち前記キューイングされたコマンドに含まれた論理アドレスに対応したグループを割り当てる
請求項１に記載のディスク装置。
【請求項１５】
ディスク媒体と、
コマンドキューを含むメモリと、
第１のコマンドを前記コマンドキューにエンキューする場合に、前記メモリへアクセスされるデータが第１のデータ量となり、第２のコマンドを前記コマンドキューにエンキューする場合又は第３のコマンドを前記コマンドキューからデキューする場合に、前記メモリへアクセスされるデータが前記第１のデータ量の２倍より大きい第２のデータ量となるように制御するコントローラと、
を備えたディスク装置。
【請求項１６】
コマンドキューにエンキューされたコマンド又は前記コマンドキューからデキューされたコマンドに応じて、ディスク媒体におけるアドレスに対応してグループ化された複数のグループを再グループ化することと、
前記再グループ化された複数のグループに基づいて、前記コマンドキューについての処理を行うことと、
を備えたディスク装置の制御方法。
【請求項１７】
前記再グループ化は、
前記コマンドキューにエンキューされたコマンドに応じて、前記複数のグループのうち１以上のグループを分割して再グループ化することを含む
請求項１６に記載のディスク装置の制御方法。
【請求項１８】
前記再グループ化は、
前記コマンドキューからデキューされたコマンドに応じて、前記複数のグループのうち２以上のグループを統合して再グループ化することを含む
請求項１６に記載のディスク装置の制御方法。
【請求項１９】
前記再グループ化は、
前記コマンドキューにエンキューされたコマンドに応じて、前記複数のグループのうち互いに隣接する２つのグループの前記アドレスの境界を変更することを含む
請求項１６に記載のディスク装置の制御方法。
【請求項２０】
前記再グループ化は、
前記コマンドキューからデキューされたコマンドに応じて、前記複数のグループのうち互いに隣接する２つのグループの前記アドレスの境界を変更することを含む
請求項１６に記載のディスク装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、ディスク装置、及びディスク装置の制御方法に関する。
【背景技術】
【０００２】
ディスク装置では、コマンドがコマンドキューに順にエンキューされ、その後、コマンドキューからデキューされたコマンドが実行される。ディスク装置では、コマンドが実行される際に、シーク時間及び回転待ち時間などの機械的な待ち時間が存在する。この機械的な待ち時間はディスク媒体内の物理アドレスに依存して変化する。ディスク装置のアクセス性能を向上させるためには、コマンドキューに格納されたコマンドを適切に並べ替えるなどコマンドキューについての処理を適切に行うことが望まれる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−１４０３８号公報
【特許文献２】特開２００８−１６５８８１号公報
【特許文献３】特開２０１０−２６９４６号公報
【特許文献４】米国特許出願公開第２０１６／０２９９６８６号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一つの実施形態は、コマンドキューについての処理を適切に行うことができるディスク装置、及びディスク装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
一つの実施形態によれば、ディスク媒体とコマンドキューとコントローラとを有するディスク装置が提供される。ディスク媒体は、アドレスに従ってデータが記録される。コマンドキューは、コマンドを順にエンキューする。コントローラは、コマンドキューにエンキューされたコマンド又はコマンドキューからデキューされたコマンドに応じて、ディスク媒体におけるアドレスに対応してグループ化された複数のグループを再グループ化する。コントローラは、再グループ化された複数のグループに基づいて、コマンドキューについての処理を行う。
【図面の簡単な説明】
【０００６】
【図１】図１は、実施形態にかかるディスク装置の構成を示す図である。
【図２】図２は、実施形態におけるコマンドエンキュー時の動作を示すフローチャートである。
【図３】図３は、実施形態におけるコマンドエンキュー時の動作を示す図である。
【図４】図４は、実施形態におけるコマンドエンキュー時の動作を示す図である。
【図５】図５は、実施形態におけるコマンドデキュー時の動作を示すフローチャートである。
【図６】図６は、実施形態におけるコマンドデキュー時の動作を示す図である。
【図７】図７は、実施形態におけるコマンドデキュー時の動作を示す図である。
【図８】図８は、実施形態の変形例におけるコマンドエンキュー時の動作を示すフローチャートである。
【図９】図９は、実施形態の変形例におけるコマンドエンキュー時の動作を示す図である。
【図１０】図１０は、実施形態の変形例におけるコマンドエンキュー時の動作を示す図である。
【図１１】図１１は、実施形態の他の変形例におけるコマンドデキュー時の動作を示すフローチャートである。
【図１２】図１２は、実施形態の他の変形例におけるコマンドデキュー時の動作を示す図である。
【図１３】図１３は、実施形態の他の変形例におけるコマンドデキュー時の動作を示す図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかるディスク装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００８】
（実施形態）
実施形態にかかるディスク装置１０について図１を用いて説明する。図１は、ディスク装置１０の構成を示す図である。
【０００９】
ディスク装置１０は、ディスク媒体１１、スピンドルモータ１２、ＨＳＡ（Ｈｅａｄ  Ｓｔａｃｋ  Ａｓｓｅｍｂｌｙ）１３、ヘッドアンプ１４、揮発性メモリ１５、ＲＷＣ（Ｒｅａｄ／Ｗｒｉｔｅ  Ｃｈａｎｎｅｌ）１６と、ＨＤＣ（Ｈａｒｄ  Ｄｉｓｋ  Ｃｏｎｔｒｏｌｌｅｒ）１７、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１８、モータドライバ２０、及び不揮発性メモリ２１を有する。
【００１０】
ディスク媒体１１は、データが記録される記録面Ｓを表面及び裏面にそれぞれ有する。ディスク媒体１１は、スピンドルモータ１２によって回転駆動される。ディスク装置１０には、複数のディスク媒体１１が設けられる。また、ディスク装置１０において使用されるすべての記録面Ｓには、記録面Ｓ上の物理位置を示す位置情報である物理アドレスが設定されている。スピンドルモータ１２は、モータドライバ２０から供給される電流（または電圧）によって駆動される。
【００１１】
ＨＳＡ１３は、ヘッドＨ、ヘッドサスペンション１３１、及びＶＣＭ（Ｖｏｉｃｅ  Ｃｏｉｌ  Ｍｏｔｏｒ）１３２を有する。ヘッドＨは、ディスク媒体１１の記録面Ｓ毎に設けられる。ヘッドＨは、ライトヘッドＷＨ及びリードヘッドＲＨを有する。ライトヘッドＷＨは、ディスク媒体１１へのデータの書き込みに用いられる。リードヘッドＲＨは、ディスク媒体１１からのデータの読み出しに用いられる。
【００１２】
ヘッドサスペンション１３１は、ヘッドＨを支持し、それぞれのヘッドＨに対して設けられる。ＶＣＭ１３２は、モータドライバ２０から供給される電流（または電圧）によって駆動される。ヘッドサスペンション１３１とＶＣＭ１３２とは、アクチュエータを構成する。アクチュエータは、ＶＣＭ１３２の駆動によって、ヘッドサスペンション１３１に支持されているヘッドＨをディスク媒体１１の記録面Ｓ上の所定の位置まで移動制御する。このようなＨＳＡ１３の構成によって、ヘッドＨはディスク媒体１１の記録面Ｓの半径方向に移動可能となる。
【００１３】
モータドライバ２０は、スピンドルモータ１２に電流または電圧を供給し、スピンドルモータ１２を所定の回転速度で駆動する。また、モータドライバ２０は、ＣＰＵ１８から指定された電流または電圧をＶＣＭ１３２に供給することで、アクチュエータを駆動する。
【００１４】
ヘッドアンプ１４は、ＲＷＣ１６から入力されるライトデータに応じたライト信号（電流）をヘッドＨに流す。また、ヘッドアンプ１４は、ヘッドＨから出力されたリード信号（ヘッドＨによりディスク媒体１１から読み出されたリードデータ）を増幅して、ＲＷＣ１６に供給する。
【００１５】
ＲＷＣ１６は、信号処理回路である。ＲＷＣ１６は、ＨＤＣ１７から入力されたライトデータを符号化（コード変調）してヘッドアンプ１４に出力する。また、ＲＷＣ１６は、ヘッドアンプ１４から伝送されたリード信号からリードデータを復号化（コード復調）してＨＤＣ１７に出力する。
【００１６】
ＨＤＣ１７は、Ｉ／Ｆバスを介してホスト装置ＨＣとの間で行われるデータの送受信の制御などを行う。ＨＤＣ１７は、図示しないホストインターフェース（ホストＩ／Ｆ）回路を含む。
【００１７】
ＣＰＵ１８は、不揮発性メモリ２１又はディスク媒体１１に記憶されたファームウェアに従って、ディスク装置１０の全体的な制御を行う。例えば、ＣＰＵ１８は、ヘッドＨによるリードまたはライトの制御処理、ディスク媒体１１の記録面Ｓ上におけるヘッドの位置を制御するサーボ制御処理等の各種制御処理を実行する。ファームウェアは、ディスク装置１０の起動時に最初に実行される初期ファームウェアおよびディスク装置１０の通常動作に用いる制御用ファームウェアを含む。
【００１８】
なお、ＲＷＣ１６、ＨＤＣ１７、及びＣＰＵ１８を含むハードウェア構成をコントローラ１９と見なすこともできる。コントローラ１９は、１チップの集積回路（システムオンチップ）として構成され得る。コントローラ１９のパッケージは、ディスク媒体１１、スピンドルモータ１２、ＨＳＡ１３を収容するケース（図示せず）の外側のプリント基板上に配され得る。
【００１９】
不揮発性メモリ１８は、コントローラ１９のＣＰＵ１８に接続され、ＣＰＵ１８により書き換え可能に構成されている。
【００２０】
揮発性メモリ１５は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）またはＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）などの揮発性メモリによって構成される。揮発性メモリ１５は、コマンドキュー１５１、バッファ１５２、及びワーキングエリア１５３を含む。ワーキングエリア１５３は、コントローラ１９により一時的にデータ等が格納されるために使用される。例えば、ＣＰＵ１８は、ディスク媒体１１の管理情報領域に格納されたグループ管理情報１５３ａ、グループ登録情報１５３ｂ、及び論物変換テーブル１５３ｃをヘッドＨ、ヘッドアンプ１４、ＲＷＣ１６、ＨＤＣ１７経由で読み出してワーキングエリア１５３に格納する。
【００２１】
コマンドキュー１５１は、ＨＤＣ１７で受信された複数のコマンドを受信された順にキューイングする。複数のコマンドのそれぞれは、ディスク媒体１１にアクセスするための論理アドレスを含む。コマンドキュー１５１は、待ち行列バッファであり、各コマンドが、エンキューされた順にデキューされる。すなわちコマンドキュー１５１は、ＦＩＦＯ構造を有する。なお、コマンドキュー１５１は、後述のリオーダリング処理が行われて、格納されたコマンドが並べ替えられると、エンキューされた順と異なる順にデキューされ得る。
【００２２】
バッファ１５２は、ライトバッファ１５２ａ及びリードバッファ１５２ｂを有する。ライトバッファ１５２ａは、ディスク媒体１１へのライトデータの書き込みを指示するコマンド（例えば、ライトコマンド）によってディスク媒体１１へと書き込まれるデータを一時的に格納する。リードバッファ１５２ｂは、ディスク媒体１１からのリードデータの読み出しを指示するコマンド（例えば、リードコマンド）によってディスク媒体１１から読み出されるデータを一時的に格納する。
【００２３】
ライトコマンドは、ディスク装置１０で管理される論理セクタのうちライトデータの書込み先の論理セクタの先頭ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）およびライトデータ長を含む。また、リードコマンドは、ディスク装置１０で管理される論理セクタのうち読み出すリードデータが記憶される論理セクタの先頭ＬＢＡおよびリードデータ長を含む。ＬＢＡは、論理アドレスとも呼ばれる。
【００２４】
ワーキングエリア１５３内の論物変換テーブル１５３ｃは、論理アドレスと物理アドレスとが対応付けられた情報であり、通常状態では書き換えられずに固定的に使用され得る。このため、ディスク装置１０では、複数のコマンドの論理アドレスが連続していれば、その複数のコマンドでアクセスされる物理アドレスも連続していると推定できる。ここで、物理アドレスは、たとえば、シリンダ番号及びセクタ番号との組み合わせを含む。シリンダ番号は、シリンダを識別する番号である。シリンダは、複数のディスク媒体１１における上下に対応する複数のトラックに跨った記憶領域の単位である。セクタ番号は、１つのトラック内におけるセクタ位置を識別する番号である。すなわち、物理アドレスは、その一部の情報について、各トラック内で、及びディスク媒体１１における隣接する複数のトラック毎に、それぞれ連続して割り当てられる。なお物理アドレスは、ヘッド番号（記録面番号）を含み、シリンダ内で上下に隣接する複数のトラックについても連続して割り当てられ得る。
【００２５】
コマンドキュー１５１には、ホスト装置ＨＣからの受信順にコマンドがキューイングされているが、コマンドによりランダムアクセス処理が行われる場合、受信順でコマンドを実行すると、シーク時間と回転待ち時間とを含む機械的な待ち時間が増大する可能性がある。そのため、コントローラ１９（ＣＰＵ１８）は、先頭ＬＢＡに対応する物理アドレスがより近いコマンドから順にキューイングされた状態になるようにコマンドキュー１５１内のコマンドを並べ替えるリオーダリング処理を行う。これにより、コマンドの実行に従ったディスク媒体１１へのアクセス動作に伴う機械的な待ち時間の低減が期待される。
【００２６】
リオーダリング処理において、コントローラ１９（ＣＰＵ１８）は、コマンドキュー１５１にキューイングされたコマンドを選択し、その選択されたコマンドを現在実行中のコマンドに続けて実行した場合の機械的な待ち時間を求め、機械的な待ち時間が最小となるコマンドを決定する評価を行う。評価対象のコマンド数が増大するほど、評価の時間が増加し、リオーダリング処理の時間が増大しやすい。
【００２７】
リオーダリング処理の時間を短縮するためには、評価対象のコマンド数を限定するための仕組みが必要である。例えば、評価対象のコマンド数を限定するために、現在実行中のコマンドの最終ＬＢＡに対して近いと判断される範囲内に先頭ＬＢＡがおさまっているか否かの判断をコマンドキュー１５１にキューイングされた全コマンドについて行う場合、この判断に時間を要し、そのためにリオーダリング処理の時間が増大する可能性がある。
【００２８】
それに対して、ディスク媒体１１の物理アドレスに対応した論理アドレスを連続するアドレス範囲毎に複数のグループに区分しておき、現在実行中のコマンドがどのグループに属するかの判断を行えば、簡易な判断で評価対象のコマンド数を限定できるので、判断の時間が短縮されてリオーダリング処理の時間の短縮が期待できる。
【００２９】
そのため、コントローラ１９（ＣＰＵ１８）は、グループ管理情報１５３ａ及びグループ登録情報１５３ｂをワーキングエリア１５３に格納する。グループ管理情報１５３ａは、コマンドキュー１５１にキューイングされているコマンドに対してコントローラ１９（ＣＰＵ１８）により割り当てられるグループを管理するための情報である。グループ管理情報１５３ａは、グループを識別する情報とグループの先頭ＬＢＡとグループのコマンド数とが複数のグループのそれぞれについて対応付けられた情報を含む（図３（ａ）、（ｂ）参照）。グループ管理情報１５３ａでは、各グループは連続する論理アドレスの範囲に対応している。連続する論理アドレスは連続する物理アドレスに概ね対応しているので、１つのグループ内では、ディスク媒体１１における記憶領域の物理位置が概ね連続しているものとすることができる。
【００３０】
コントローラ１９（ＣＰＵ１８）は、各コマンドの先頭ＬＢＡが、グループ管理情報１５３ａのどの論理アドレスの範囲（グループ）に属しているかに応じて、各コマンドにグループを割り当てグループ登録情報１５３ｂに登録する。グループ登録情報１５３ｂは、コマンドキュー１５１にキューイングされているコマンドが変化（エンキュー又はデキュー）することに応じて更新される情報であり、コントローラ１９（ＣＰＵ１８）により書き換えられる。グループ登録情報１５３ｂは、コマンドキュー１５１にキューイングされたコマンドのそれぞれについて、コマンドを識別する情報とコマンドの論理アドレスに応じて割り当てられたグループとが対応付けられた登録情報である（図３（ａ）、（ｂ）参照）。グループは、リオーダリング処理を行う単位となるものである。
【００３１】
コントローラ１９（ＣＰＵ１８）は、コマンドがコマンドキュー１５１からデキューされ実行が開始されると、現在実行中のコマンドが属するグループを特定し、そのグループに登録された各コマンドについて評価を行うリオーダリング処理を行う。
【００３２】
揮発性メモリ１５の容量が増加し、コマンドキュー１５１の深さが深くなる（数が多くなる）ことに伴い、各グループに割り当てられるコマンド数が増大する傾向にある。例えば、ある特定のアドレス範囲にコマンドアクセスが集中すると対応するグループに割り当てられるコマンド数が増加してしまう。この場合、現在実行中のコマンドに対応するグループの全コマンドについて評価を行うと、現在実行中のコマンド処理時間以下に収めるべきリオーダリング処理の時間がコマンド処理時間を超えて長くなりやすい。これにより、リオーダリング処理の完了まで次のコマンドの実行開始が待たされるなど、ファームウェアのオーバーヘッドが発生する可能性がある。
【００３３】
それに対して、グループ内の全コマンドを評価せずにキューイングの昇順で数を限定するなど、グループ内の一部のコマンドについて評価を行う方法が考えられる。この方法では、現在実行中のコマンドの最終ＬＢＡに近いＬＢＡを有するコマンドが、評価しなかったコマンドに含まれる場合、リオーダリング処理の精度が低下しやすい。
【００３４】
そこで、本実施形態では、ディスク装置１０において、含まれるコマンド数が所定の範囲内に収まるように動的に再グループ化することで、リオーダリング処理の時間の増大の抑制とリオーダリング処理の精度低下の抑制との両立を図る。
【００３５】
すなわち、コマンドがある特定のアドレス範囲に集中している場合、特定のグループに属するコマンドが増加してしまう可能性がある。その場合、グループ内でリオーダリング評価できるコマンドの数が少なくなってしまいより有効なコマンドを選択できない場合が起こりうる。そのためグループに属するコマンドが一定数以上にならないようにグループの分割、グループ数の増加を抑えるための統合を行う。
【００３６】
具体的には、コントローラ１９は、コマンドキュー１５１にコマンドがエンキューされたこと又はコマンドキュー１５１からコマンドがデキューされたことに応じて、グループ管理情報１５３ａにおける複数のグループを再グループ化する。また、コントローラ１９は、グループ管理情報１５３ａの更新に応じて、グループ登録情報１５３ｂを更新する。
【００３７】
コントローラ１９は、コマンドキュー１５１にコマンドがエンキューされたことを認識すると、このコマンドにグループ管理情報１５３ａにおけるグループを割り当てるとともに、このコマンドをグループ登録情報１５３ｂに登録し、その割り当てたグループのコマンド数を求める。コントローラ１９は、求めたコマンド数を閾値ＴＨ１と比較し、コマンド数が閾値ＴＨ１を超えたか否かを判断する。コントローラ１９は、コマンド数が閾値ＴＨ１を超えた場合に、そのグループを分割して再グループ化してグループ管理情報１５３ａを更新し、この更新に従って、グループ登録情報１５３ｂを再構成して更新する。これにより、グループ管理情報１５３ａにおける各グループのコマンド数をある範囲内（すなわち、グループ内の全コマンドを評価してもリオーダリング処理の時間をコマンド処理時間以下に収められるコマンド数の範囲内）にすることができる。その結果、コントローラ１９は、リオーダリング処理の時間の増大を抑制しながらリオーダリング処理を精度よく行うことができ、その処理結果に応じてコマンドキュー１５１内のコマンドを適切に並べ替えることができる。
【００３８】
また、コントローラ１９は、コマンドキュー１５１からコマンドがデキューされたことを認識すると、そのコマンドをグループ登録情報１５３ｂから削除した後に、そのコマンドが割り当てられていたグループのコマンド数とそのグループに隣接するグループのコマンド数とをそれぞれ求める。コントローラ１９は、コマンドが割り当てられていたグループのコマンド数とそのグループに隣接するグループのコマンド数との合計を閾値ＴＨ２と比較し、合計が閾値ＴＨ２より小さいか否かを判断する。コントローラ１９は、合計が閾値ＴＨ２より小さい場合に、そのグループを隣接するグループと統合して再グループ化してグループ管理情報１５３ａを更新し、この更新に従って、グループ登録情報１５３ｂを再構成して更新する。これにより、グループ管理情報１５３ａにおける各グループのコマンド数をある範囲内（すなわち、グループ内の全コマンドを評価してもリオーダリング処理の時間をコマンド処理時間以下に収められるコマンド数の範囲内）に維持しながらグループの個数を低減できる。その結果、コントローラ１９は、グループの管理に要する時間を低減でき、リオーダリング処理の時間の増大を抑制できる。
【００３９】
なお、閾値ＴＨ２＜閾値ＴＨ１とすれば、分割と統合とが頻繁に繰り返されることを抑制でき、コントローラ１９による分割と統合とについての制御処理を安定化できる。
【００４０】
例えば、コントローラ１９は、コマンドキュー１５１にコマンドがエンキューされたことに応じて、図２〜図４に示すように、複数のグループのうち１以上のグループを分割して再グループ化する。図２は、コマンドエンキュー時のコントローラ１９の動作を示すフローチャートである。図３、図４は、コマンドエンキュー時のコントローラ１９の動作を示す図である。図３、図４では、ホスト装置ＨＣからのコマンドの受信順をＣＭ＋「番号」で示している。
【００４１】
コントローラ１９は、ホスト装置ＨＣからコマンドを受信すると、そのコマンドをコマンドキュー１５１にエンキューする（Ｓ１）。コントローラ１９は、受信したコマンドのアクセス先の先頭ＬＢＡを取得する。コントローラ１９は、グループ管理情報１５３ａを参照し、取得した先頭ＬＢＡを含むグループを、受信したコマンドを登録すべきグループとして決定する（Ｓ２）。コントローラ１９は、グループ登録情報１５３ｂを参照し、受信したコマンドを、決定したグループ内の最後のコマンドとしてグループ登録情報１５３ｂに追加する（Ｓ３）。
【００４２】
コントローラ１９は、グループ管理情報１５３ａ及び／又はグループ登録情報１５３ｂに基づいて、受信したコマンドが追加されたグループのコマンド数を求める。例えば、コントローラ１９は、グループ管理情報１５３ａを参照し、「現在のグループのコマンド数」＋１を計算することで、コマンドが追加されたグループのコマンド数を求める。あるいは、コントローラ１９は、グループ登録情報１５３ｂにおいて、受信したコマンドが追加されたグループのコマンド数をカウントすることで、受信したコマンドが追加されたグループのコマンド数を求める。
【００４３】
コントローラ１９は、受信したコマンドが追加されたグループのコマンド数と閾値ＴＨ１とを比較し、受信したコマンドが追加されたグループのコマンド数が閾値ＴＨ１を超えたか否かを判断する（Ｓ４）。受信したコマンドが追加されたグループのコマンド数が閾値ＴＨ１を超えていない場合（Ｓ４でＮｏ）、処理はＳ７へ進む。
【００４４】
コントローラ１９は、コマンドが追加されたグループのコマンド数が閾値ＴＨ１を超えた場合（Ｓ４でＹｅｓ）、そのグループを分割するようにグループ管理情報１５３ａを更新する（Ｓ５）。
【００４５】
例えば、閾値ＴＨ１＝７であり、図３（ａ）に示すように、コマンドＣＭ７，ＣＭ１０，ＣＭ１２，ＣＭ１７，ＣＭ１８，ＣＭ２０，ＣＭ２３が属するグループＧＲ０に、コマンドＣＭ２４が追加された場合を説明する。コントローラ１９は、グループ管理情報１５３ａに基づいて、グループＧＲ０の現在のコマンド数７＋１＝８を求める。コントローラ１９は、グループＧＲ０のコマンド数「８」と閾値ＴＨ１（＝７）とを比較し、グループＧＲ０のコマンド数が閾値ＴＨ１を超えたと判断する。コントローラ１９は、その判断結果に応じて、図３（ｂ）に示すようにグループ管理情報１５３ａを更新し、現グループＧＲ０をグループＧＲ０，ＧＲ１に分割し、他の現グループＧＲ１〜ＧＲ４をグループＧＲ２〜ＧＲ５にリナンバリングする。このとき、コントローラ１９は、各グループＧＲ０，ＧＲ１のコマンド数が所定の範囲内に収まるように現グループＧＲ０をグループＧＲ０，ＧＲ１へ再グループ化する。
【００４６】
図４（ａ）に、現グループＧＲ０に属する各コマンドＣＭ７，ＣＭ１０，ＣＭ１２，ＣＭ１７，ＣＭ１８，ＣＭ２０，ＣＭ２３の先頭ＬＢＡを示す。図４（ａ）に示すように、現グループＧＲ０の先頭ＬＢＡ「０」〜現グループＧＲ１の先頭ＬＢＡ「１００」までのアドレス範囲に対して、コマンドＣＭ２４が図４（ｂ）に示すアドレス位置に追加される場合を説明する。この状態で、分割後のグループＧＲ０，ＧＲ１に属するコマンド数が概ね均等になるように、現グループＧＲ０がグループＧＲ０，ＧＲ１へ分割される。
【００４７】
また、これ以降にグループＧＲ０がグループＧＲ１よりコマンド数が多くなることが予想される場合、コントローラ１９は、グループＧＲ０のコマンド数がグループＧＲ１のコマンド数より少なくなるように、現グループＧＲ０をグループＧＲ０，ＧＲ１に分割してもよい。あるいは、これ以降にグループＧＲ０がグループＧＲ１よりコマンド数が少なくなることが予想される場合、コントローラ１９は、グループＧＲ０のコマンド数がグループＧＲ１のコマンド数より多くなるように、現グループＧＲ０をグループＧＲ０，ＧＲ１に分割してもよい。
【００４８】
コントローラ１９は、更新後のグループ管理情報１５３ａに応じて、コマンドをグループに再配置する（Ｓ６）。すなわち、コントローラ１９は、グループ登録情報１５３ｂを再構成し、グループ登録情報１５３ｂを更新する。
【００４９】
例えば、図３（ｂ）、図４（ｂ）に示すように、コマンドＣＭ７，ＣＭ１２，ＣＭ１８，ＣＭ２４がグループＧＲ０に属し、コマンドＣＭ１０，ＣＭ１７，ＣＭ２０，ＣＭ２３がグループＧＲ１に属するように、グループ登録情報１５３ｂが再構成され更新される。
【００５０】
コントローラ１９は、現在実行中のコマンドの先頭ＬＢＡが属するグループを特定し、そのグループに属する各コマンドを選択し、選択された各コマンドを現在実行中のコマンドに続けて実行した場合の機械的な待ち時間を求め、機械的な待ち時間が最小となるコマンドの実行順を決定する評価を行う（Ｓ７）。コントローラ１９は、決定された実行順となるように、コマンドキュー１５１に格納されたコマンドを並べ替える（リオーダリングする）（Ｓ８）。
【００５１】
また、例えば、コントローラ１９は、コマンドキュー１５１からコマンドがデキューされたことに応じて、図５〜図７に示すように、複数のグループのうち２以上のグループを統合して再グループ化する。図５は、コマンドデキュー時のコントローラ１９の動作を示すフローチャートである。図６、図７は、コマンドデキュー時のコントローラ１９の動作を示す図である。図６、図７では、ホスト装置ＨＣからのコマンドの受信順をＣＭ＋「番号」で示している。
【００５２】
コントローラ１９は、コマンドの実行が完了すると、コマンドキュー１５１の先頭の実行が完了したコマンドをコマンドキュー１５１からデキューする（Ｓ１１）。コントローラ１９は、グループ管理情報１５３ａを参照し、デキューされたコマンドをグループ管理情報１５３ａにおいてその属しているグループから削除する（Ｓ１２）。
【００５３】
コントローラ１９は、グループ管理情報１５３ａ及び／又はグループ登録情報１５３ｂに基づいて、デキューされたコマンドが削除されたグループのコマンド数とそのグループの１つ前のグループ（すなわち、グループ管理情報１５３ａ内でそのグループに隣接しそのグループより開始ＬＢＡが小さいグループ）のコマンド数とを求める。コントローラ１９は、グループ管理情報１５３ａを参照し、「現在のグループのコマンド数」−１を計算することで、デキューされたコマンドが削除されたグループのコマンド数を求めるとともに、１つ前のグループのコマンド数を求める。あるいは、コントローラ１９は、グループ登録情報１５３ｂにおいて、コマンドが削除されたグループのコマンド数をカウントすることで、コマンドが削除されたグループのコマンド数を求めるとともに、１つ前のグループのコマンド数を求める。
【００５４】
コントローラ１９は、コマンドが削除されたグループのコマンド数と１つ前のグループのコマンド数との合計を求める。コントローラ１９は、その合計と閾値ＴＨ２とを比較し、合計が閾値ＴＨ２以下であるか否かを判断する（Ｓ１３）。
【００５５】
コントローラ１９は、合計が閾値ＴＨ２以下でない場合（Ｓ１３でＮｏ）、グループ管理情報１５３ａ及び／又はグループ登録情報１５３ｂに基づいて、コマンドが削除されたグループのコマンド数と１つ後のグループ（すなわち、グループ管理情報１５３ａ内でそのグループに隣接しそのグループより開始ＬＢＡが大きいグループ）のコマンド数との合計を求める。コントローラ１９は、その合計と閾値ＴＨ２とを比較し、合計が閾値ＴＨ２以下であるか否かを判断する（Ｓ１４）。合計が閾値ＴＨ２以下でない場合（Ｓ１４でＮｏ）、処理はＳ１８へ進む。
【００５６】
コントローラ１９は、コマンドが削除されたグループのコマンド数と１つ前のグループのコマンド数との合計が閾値ＴＨ２以下である場合（Ｓ１３でＹｅｓ）、コマンドが削除されたグループと１つ前のグループとを統合するようにグループ管理情報１５３ａを更新する（Ｓ１５）。
【００５７】
あるいは、コントローラ１９は、コマンドが削除されたグループのコマンド数と１つ後のグループのコマンド数との合計が閾値ＴＨ２以下である場合（Ｓ１４でＹｅｓ）、コマンドが削除されたグループと１つ後のグループとを統合するようにグループ管理情報１５３ａを更新する（Ｓ１６）。
【００５８】
例えば、閾値ＴＨ２＝６であり、図６（ａ）に示すように、コマンドＣＭ２，ＣＭ４，ＣＭ５が属するグループＧＲ４から、コマンドＣＭ２が削除された場合を説明する。コントローラ１９は、グループ管理情報１５３ａに基づいて、グループＧＲ４の現在のコマンド数３−１＝２を求める。コントローラ１９は、グループＧＲ４のコマンド数「２」と１つ前のグループＧＲ３のコマンド数「５」との合計２＋５＝７を求める。コントローラ１９は、合計「７」と閾値ＴＨ２（＝６）とを比較し、合計が閾値ＴＨ２以下ではなく、グループＧＲ３とグループＧＲ４との統合は適切でないと判断する。
【００５９】
そして、コントローラ１９は、グループ管理情報１５３ａに基づいて、グループＧＲ４の１つ後のグループＧＲ５のコマンド数「４」を求め、グループＧＲ４のコマンド数「２」と１つ後のグループＧＲ５のコマンド数「４」との合計２＋４＝６を求める。コントローラ１９は、合計「６」と閾値ＴＨ２（＝６）とを比較し、合計が閾値ＴＨ２以下であり、グループＧＲ４とグループＧＲ５との統合は適切であると判断する。
【００６０】
コントローラ１９は、その判断結果に応じて、図６（ｂ）に示すようにグループ管理情報１５３ａを更新し、現グループＧＲ４，ＧＲ５をグループＧＲ４に統合する。
【００６１】
例えば、図７（ａ）に、現グループＧＲ３〜ＧＲ５に属する各コマンドの先頭ＬＢＡを示す。図７（ａ）に示すように、現グループＧＲ４の先頭ＬＢＡ「７００」〜現グループＧＲ５の最終ＬＢＡ「１０００」までのアドレス範囲において、コマンドＣＭ２が削除された場合を説明する。この場合、図７（ｂ）に示すように、現グループＧＲ４，ＧＲ５を統合して、先頭ＬＢＡ「７００」〜最終ＬＢＡ「１０００」のグループＧＲ４へ再グループ化する。現グループＧＲ４，ＧＲ５をグループＧＲ４へ統合しても、グループＧＲ４のコマンド数を閾値ＴＨ２（＝６）以下にすることができる。
【００６２】
図５に戻り、コントローラ１９は、更新後のグループ管理情報１５３ａに応じて、コマンドをグループに再配置する（Ｓ１８）。すなわち、コントローラ１９は、グループ登録情報１５３ｂを再構成し、グループ登録情報１５３ｂを更新する。
【００６３】
例えば、図６（ｂ）、図７（ｂ）の場合、コマンドＣＭ４，ＣＭ５，ＣＭ６，ＣＭ８，ＣＭ９，ＣＭ１６がグループＧＲ４に属するように、グループ登録情報１５３ｂが再構成され更新される。
【００６４】
コントローラ１９は、キューイングされたコマンドを選択し、選択された各コマンドを現在実行中のコマンドに続けて実行した場合の機械的な待ち時間を求め、機械的な待ち時間が最小となるコマンドの実行順を決定する評価を行う（Ｓ１８）。コントローラ１９は、決定された実行順になるように、コマンドキュー１５１に格納されたコマンドを並べ替える（リオーダリングする）（Ｓ１９）。
【００６５】
以上のように、実施形態では、ディスク装置１０において、含まれるコマンド数が所定の範囲内（例えば、閾値ＴＨ１以下の範囲内）に収まるように複数のグループを動的に再グループ化する。これにより、リオーダリング処理の時間の増大の抑制とリオーダリング処理の精度低下の抑制とを両立できる。したがって、ある特定のアドレス範囲にコマンドアクセスが集中した場合でも、ランダムアクセス時のコマンド処理性能を向上させることができる。
【００６６】
なお、グループの分割・統合が行われる場合におけるコントローラ１９による揮発性メモリ１５へのアクセスのデータ量は、グループの分割・統合が行われない場合におけるコントローラ１９による揮発性メモリ１５へのアクセスのデータ量の２倍より大きい。例えば、第１のコマンドがコマンドキュー１５１にエンキューされる際にグループの分割・統合が行われず、第２のコマンドがコマンドキュー１５１にエンキューされる場合にグループの分割が行われるか、あるいは、第３のコマンドがコマンドキュー１５１からデキューされる際にグループの統合が行われるとする。この場合、コントローラ１９は、第１のコマンドをコマンドキュー１５１にエンキューする場合に、揮発性メモリ１５へアクセスされるデータが第１のデータ量となり、第２のコマンドをコマンドキュー１５１にエンキューする場合又は第３のコマンドをコマンドキュー１５１からデキューする場合に、揮発性メモリ１５へアクセスされるデータが第１のデータ量の２倍より大きい第２のデータ量となるように制御する。
【００６７】
あるいは、グループの分割、統合はコマンド受領時、完了時に行うものとしているが、一定時間ごとまたはバックグラウンド処理中に行うものとしてもよい。
【００６８】
あるいは、グループの分割、統合は、現在実行中のコマンドの先頭ＬＢＡが含まれるグループについて行った後に、現在実行中のコマンドの実行完了までに時間的な余裕があれば、他のグループについて更に行ってもよい。
【００６９】
あるいは、コマンドをグループに分けて処理することを、リオーダリング処理だけでなく、コマンドキュー１５１についての他の処理に適用してもよい。コマンドキュー１５１についての他の処理として、例えば、重複チェック（コマンドキュー１５１にキューイングされたコマンドの論理アドレスが現在実行中のコマンドと重複するか否かのチェック）やキャッシュヒットチェック（コマンドキュー１５１にキューイングされたコマンドの論理アドレスに対応するデータがキャッシュメモリ（バッファ１５２）に記憶されているか否かのチェック）に用いてもよい。
【００７０】
あるいは、グループの分割に代えて、グループ間の境界をずらす処理が行われてもよい。例えば、コントローラ１９は、コマンドキュー１５１にコマンドがエンキューされたことに応じて、図８〜図１０に示すように、グループ間の境界をずらして再グループ化する。図８は、実施形態の変形例におけるコマンドエンキュー時のコントローラ１９の動作を示すフローチャートである。図９、図１０は、実施形態の変形例におけるコマンドエンキュー時のコントローラ１９の動作を示す図である。図９、図１０では、ホスト装置ＨＣからのコマンドの受信順をＣＭ＋「番号」で示している。
【００７１】
コントローラ１９は、Ｓ１〜Ｓ３の処理を行った後、受信したコマンドが追加されたグループのコマンド数と閾値ＴＨ１とを比較し、受信したコマンドが追加されたグループのコマンド数が閾値ＴＨ１を超えたか否かを判断する（Ｓ４）。コントローラ１９は、受信したコマンドが追加されたグループのコマンド数が閾値ＴＨ１を超えた場合（Ｓ４でＹｅｓ）、そのグループの前後のグループのコマンド数を比較する（Ｓ２１）。
【００７２】
コントローラ１９は、前のグループのコマンド数が後のグループのコマンド数より少ない場合（Ｓ２１でＹｅｓ）、前のグループとの境界を示す先頭ＬＢＡを自グループの側にずらすように再設定する（Ｓ２２）。
【００７３】
コントローラ１９は、前のグループのコマンド数が後のグループのコマンド数より多い場合（Ｓ２１でＮｏ）、後のグループとの境界を示す先頭ＬＢＡを自グループの側にずらすように再設定する（Ｓ２３）。
【００７４】
例えば、閾値ＴＨ１＝７であり、図９（ａ）に示すように、コマンドＣＭ１，ＣＭ１４，ＣＭ１５，ＣＭ１９，ＣＭ２０，ＣＭ２２，ＣＭ２３が属するグループＧＲ２に、コマンドＣＭ２４が追加された場合を説明する。コントローラ１９は、グループ管理情報１５３ａに基づいて、グループＧＲ２のコマンド数７＋１＝８を求める。コントローラ１９は、グループＧＲ２のコマンド数「８」と閾値ＴＨ１（＝７）とを比較し、グループＧＲ２のコマンド数が閾値ＴＨ１を超えたと判断する。コントローラ１９は、グループ管理情報１５３ａを参照し、グループＧＲ２の前のグループＧＲ１のコマンド数＝５と、後のグループＧＲ３のコマンド数＝４とを取得する。コントローラ１９は、「前のグループのコマンド数」＞「後のグループＧＲ１のコマンド数」なので、グループＧＲ２とグループＧＲ３との境界をグループＧＲ２側にずらすことを決定する。コントローラ１９は、その判断結果に応じて、図９（ｂ）に示すようにグループ管理情報１５３ａを更新し、グループＧＲ３の先頭ＬＢＡを７００→５３０とする。このとき、コントローラ１９は、各グループＧＲ２，ＧＲ３のコマンド数が所定の範囲内に収まるようにグループＧＲ２，ＧＲ３を再グループ化する。
【００７５】
例えば、図１０（ａ）に、グループＧＲ２，ＧＲ３に属する各コマンドの先頭ＬＢＡを示す。図１０（ａ）に示すように、グループＧＲ２の先頭ＬＢＡ「４００」〜グループＧＲ３の最終ＬＢＡ「７５０」までのアドレス範囲に対して、コマンドＣＭ２４が図１０（ｂ）に示すアドレス位置に追加される場合を説明する。このとき、再グループ化後に、グループＧＲ２，ＧＲ３に属するコマンド数が概ね均等になるように、図１０（ｂ）に示すように、グループＧＲ２とグループＧＲ３との境界をグループＧＲ２側にずらす。
【００７６】
例えば、これ以降にグループＧＲ２がグループＧＲ３よりコマンド数が多くなることが予想される場合、コントローラ１９は、グループＧＲ２のコマンド数がグループＧＲ３のコマンド数より少なくなるように、グループＧＲ２とグループＧＲ３との境界をグループＧＲ２側にずらしてもよい。あるいは、これ以降にグループＧＲ２がグループＧＲ３よりコマンド数が少なくなることが予想される場合、コントローラ１９は、グループＧＲ２のコマンド数がグループＧＲ３のコマンド数より多くなるように、グループＧＲ２とグループＧＲ３との境界をグループＧＲ３側にずらしてもよい。
【００７７】
コントローラ１９は、更新後のグループ管理情報１５３ａに応じて、コマンドをグループに再配置する（Ｓ６）。すなわち、コントローラ１９は、グループ登録情報１５３ｂを再構成し、グループ登録情報１５３ｂを更新する。
【００７８】
例えば、図９（ｂ）、図１０（ｂ）に示すように、コマンドＣＭ１，ＣＭ１４，ＣＭ１５，ＣＭ１９，ＣＭ２２，ＣＭ２４がグループＧＲ２に属し、コマンドＣＭ２，ＣＭ４，ＣＭ５，ＣＭ１８，ＣＭ２０，ＣＭ２３がグループＧＲ３に属するように、グループ登録情報１５３ｂが再構成され更新される。
【００７９】
コントローラ１９は、現在実行中のコマンドの先頭ＬＢＡが属するグループを特定し、そのグループに属する各コマンドを選択し、選択された各コマンドを現在実行中のコマンドに続けて実行した場合の機械的な待ち時間を求め、機械的な待ち時間が最小となるコマンドの実行順を決定する評価を行う（Ｓ７）。コントローラ１９は、決定された実行順となるように、コマンドキュー１５１に格納されたコマンドを並べ替える（リオーダリングする）（Ｓ８）。
【００８０】
なお、境界をずらす処理（Ｓ２１〜Ｓ２３）は、現在実行中のコマンドの実行完了までに時間的な余裕があれば、前後のグループとの境界のうち変更していない方のグループ境界について更に行ってもよい。また、さらに時間的な余裕があれば、現在実行中のコマンドの先頭ＬＢＡが含まれるグループ以外のグループについて更に行ってもよい。
【００８１】
これによっても、リオーダリング処理の時間の増大の抑制とリオーダリング処理の精度低下の抑制とを両立できる。
【００８２】
あるいは、グループの統合に代えて、グループ間の境界をずらす処理が行われてもよい。例えば、コントローラ１９は、コマンドキュー１５１からコマンドがデキューされたことに応じて、図１１〜図１３に示すように、グループ間の境界をずらして再グループ化する。図１１は、実施形態の他の変形例におけるコマンドデキュー時のコントローラ１９の動作を示すフローチャートである。図１２、図１３は、実施形態の他の変形例におけるコマンドデキュー時のコントローラ１９の動作を示す図である。図１２、図１３では、ホスト装置ＨＣからのコマンドの受信順をＣＭ＋「番号」で示している。
【００８３】
コントローラ１９は、Ｓ１１〜Ｓ１２の処理を行った後、コマンドが削除されたグループのコマンド数と閾値ＴＨ３とを比較し、コマンドが削除されたグループのコマンド数が閾値ＴＨ３以下になったか否かを判断する（Ｓ３１）。閾値ＴＨ３は、グループに属するコマンド数を増やす余裕があるか否かを判断するための閾値であり、閾値ＴＨ１及び閾値ＴＨ２より小さい値を有する。
【００８４】
コマンドが削除されたグループのコマンド数が閾値ＴＨ３以下になっていない場合（Ｓ３１でＮｏ）、処理はＳ１７へ進む。
【００８５】
コントローラ１９は、コマンドが削除されたグループのコマンド数が閾値ＴＨ３以下になった場合（Ｓ３１でＹｅｓ）、そのグループの前後のグループのコマンド数を比較する。
【００８６】
コントローラ１９は、前のグループのコマンド数が後のグループのコマンド数より多い場合（Ｓ３２でＹｅｓ）、前のグループとの境界を示す先頭ＬＢＡを前のグループの側にずらすように再設定する（Ｓ３３）。
【００８７】
コントローラ１９は、前のグループのコマンド数が後のグループのコマンド数より多くない（少ない）場合（Ｓ３２でＮｏ）、後のグループとの境界を示す先頭ＬＢＡを後のグループの側にずらすように再設定する（Ｓ３４）。
【００８８】
例えば、閾値ＴＨ３＝２であり、図１２（ａ）に示すように、コマンドＣＭ２，ＣＭ４，ＣＭ５が属するグループＧＲ３から、コマンドＣＭ２が削除された場合を説明する。コントローラ１９は、グループ管理情報１５３ａに基づいて、グループＧＲ３のコマンド数３−１＝２を求める。コントローラ１９は、グループＧＲ３のコマンド数「２」と閾値ＴＨ３（＝２）とを比較し、グループＧＲ３のコマンド数が閾値ＴＨ３以下になったと判断する。コントローラ１９は、グループ管理情報１５３ａを参照し、グループＧＲ３の前のグループＧＲ２のコマンド数＝６と、後のグループＧＲ４のコマンド数＝４と、を取得する。コントローラ１９は、「前のグループＧＲ２のコマンド数」＞「後のグループＧＲ４のコマンド数」なので、グループＧＲ２とグループＧＲ３との境界をグループＧＲ２側にずらすべきであると判断する。コントローラ１９は、その判断結果に応じて、図１２（ｂ）に示すようにグループ管理情報１５３ａを更新し、グループＧＲ３の先頭ＬＢＡを７００→６００とする。このとき、コントローラ１９は、各グループＧＲ２，ＧＲ３のコマンド数が所定の範囲内に収まるようにグループＧＲ２，ＧＲ３を再グループ化する。
【００８９】
例えば、図１３（ａ）に、グループＧＲ２，ＧＲ３に属する各コマンドの先頭ＬＢＡを示す。図１３（ａ）に示すように、グループＧＲ２の先頭ＬＢＡ「４００」〜グループＧＲ４の先頭ＬＢＡ「７５０」までのアドレス範囲において、コマンドＣＭ２が削除された場合を説明する。このとき、再グループ化後に、グループＧＲ２，ＧＲ３に属するコマンド数が概ね均等になるように、図１３（ｂ）に示すように、グループＧＲ２とグループＧＲ３との境界をグループＧＲ２側にずらす。
【００９０】
また、これ以降にグループＧＲ２がグループＧＲ３よりコマンド数が多くなることが予想される場合、コントローラ１９は、グループＧＲ２のコマンド数がグループＧＲ３のコマンド数より少なくなるように、グループＧＲ２とグループＧＲ３の境界をグループＧＲ２側にずらしてもよい。あるいは、これ以降にグループＧＲ２がグループＧＲ３よりコマンド数が少なくなることが予想される場合、コントローラ１９は、グループＧＲ２のコマンド数がグループＧＲ３のコマンド数より多くなるように、グループＧＲ２とグループＧＲ３との境界をグループＧＲ３側にずらしてもよい。
【００９１】
コントローラ１９は、更新後のグループ管理情報１５３ａに応じて、コマンドをグループに再配置する（Ｓ１７）。すなわち、コントローラ１９は、グループ登録情報１５３ｂを再構成し、グループ登録情報１５３ｂを更新する。
【００９２】
例えば、図１２（ｂ）、図１３（ｂ）の場合、コマンドＣＭ１４，ＣＭ１５，ＣＭ１９，ＣＭ２６がグループＧＲ２に属し、コマンドＣＭ４，ＣＭ５，ＣＭ２２，ＣＭ２５がグループＧＲ３に属するように、グループ登録情報１５３ｂが再構成され更新される。
【００９３】
コントローラ１９は、現在実行中のコマンドの先頭ＬＢＡが属するグループを特定し、そのグループに属する各コマンドを選択し、その選択されたコマンドを現在実行中のコマンドに続けて実行した場合の機械的な待ち時間を求め、機械的な待ち時間が最小となるコマンドを決定する評価を行う（Ｓ１８）。コントローラ１９は、決定されたコマンドがコマンドキュー１５１の先頭位置（次にデキューされる位置）になるように、コマンドキュー１５１に格納されたコマンドを並べ替える（Ｓ１９）。
【００９４】
なお、境界をずらす処理（Ｓ３２〜Ｓ３４）は、現在実行中のコマンドの実行完了までに時間的な余裕があれば、前後のグループとの境界のうち変更していない方のグループ境界について更に行ってもよい。また、さらに時間的な余裕があれば、現在実行中のコマンドの先頭ＬＢＡが含まれるグループ以外のグループについて更に行ってもよい。
【００９５】
これによっても、リオーダリング処理の時間の増大の抑制とリオーダリング処理の精度低下の抑制とを両立できる。
【００９６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００９７】
１０  ディスク装置、１１  ディスク媒体、１９  コントローラ、１５１  コマンドキュー。
【図１】
2018159993.tif 000003
【図２】
2018159993.tif 000004
【図３】
2018159993.tif 000005
【図４】
2018159993.tif 000006
【図５】
2018159993.tif 000007
【図６】
2018159993.tif 000008
【図７】
2018159993.tif 000009
【図８】
2018159993.tif 000010
【図９】
2018159993.tif 000011
【図１０】
2018159993.tif 000012
【図１１】
2018159993.tif 000013
【図１２】
2018159993.tif 000014
【図１３】
2018159993.tif 000015