(57)【要約】【課題】ハードウェアによって一部の情報処理を実行するときに情報処理全体の高速化を図ること。【解決手段】  複数の記憶媒体へのデータアクセスを分散制御する分散アクセス部と、データアクセスにおけるデータ分割単位を決定するデータ分割単位決定部と、を有し、データ分割単位決定部は、複数の記憶媒体のうちいずれかの記憶媒体におけるデータ転送速度において、その記憶媒体を対象としたデータ転送が開始されるまでの待ち時間内に転送可能なデータサイズに基づいてデータ分割単位を決定する、ことを特徴とする記憶媒体制御装置による。【選択図】図１
2017162361.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶媒体へのデータアクセスを分散制御する分散アクセス部と、
前記データアクセスにおけるデータ分割単位を決定するデータ分割単位決定部と、
を有し、
前記データ分割単位決定部は、複数の前記記憶媒体のうちいずれかの記憶媒体におけるデータ転送速度において、その記憶媒体を対象としたデータ転送が開始されるまでの待ち時間内に転送可能なデータサイズに基づいて前記データ分割単位を決定する、
ことを特徴とする記憶媒体制御装置。
【請求項２】
前記分散制御の対象となる記憶媒体は、２の累乗個である、
ことを特徴とする請求項１記載の記憶媒体制御装置。
【請求項３】
前記データ分割単位決定部は、前記データ転送速度において前記待ち時間内に転送可能なデータサイズの２倍以上の値を前記データ分割単位として決定する、
ことを特徴とする請求項１または２に記載の記憶媒体制御装置。
【請求項４】
前記データ分割単位決定部は、前記データ分割単位を、２の累乗の値であって、前記データ転送速度と前記待ち時間とを用いて算出された値の端数を切り下げた値に決定する、
ことを特徴とする請求項１乃至３のいずれか一項に記載の記憶媒体制御装置。
【請求項５】
前記データ分割単位決定部は、前記データ分割単位を、２の累乗の値であって、前記データ転送速度と前記待ち時間とを用いて算出された値の端数を切り上げた値に決定する、
ことを特徴とする請求項１乃至３のいずれか一項に記載の記憶媒体制御装置。
【請求項６】
前記記憶媒体を対象としたデータ転送を制御するデータ転送制御部を、複数の前記記憶媒体それぞれに対して有する、
ことを特徴とする請求項１乃至５のいずれか一項に記載の記憶媒体制御装置。
【請求項７】
前記データ分割単位決定部は、複数の前記記憶媒体のうち最もデータアクセス速度が速い記憶媒体におけるデータ転送速度において、その記憶媒体を対象としたデータ転送が開始されるまでの待ち時間内に転送可能なデータサイズに基づいて前記データ分割単位を決定する、
ことを特徴とする請求項１乃至６のいずれか一項に記載の記憶媒体制御装置。
【請求項８】
前記記憶媒体は、記憶領域が外周部と内周部とで区別される回転磁気ディスク型記憶媒体であり、
前記データ分割単位決定部は、
前記外周部の記憶領域における前記データ分割単位を、前記外周部の記憶領域における平均実効転送速度において、前記回転磁気ディスク型記憶媒体における平均回転待ち時間内に転送可能なデータサイズに基づいて決定し、
前記内周部の記憶領域における前記データ分割単位を、前記内周部の記憶領域における平均実効転送速度において、前記平均回転待ち時間内に転送可能なデータサイズに基づいて決定する、
ことを特徴とする請求項１乃至７のいずれか一項に記載の記憶媒体制御装置。
【請求項９】
複数の記憶媒体へのデータアクセスを分散制御する分散アクセス部と、
前記データアクセスにおけるデータ分割単位を決定するデータ分割単位決定部と、
を有する記憶媒体制御装置における記憶媒体制御方法であって、
前記データ分割単位決定部は、複数の前記記憶媒体のうちいずれかの記憶媒体におけるデータ転送速度において、その記憶媒体を対象としたデータ転送が開始されるまでの待ち時間内に転送可能なデータサイズに基づいて前記データ分割単位を決定する、
ことを特徴とする記憶媒体制御方法。
【請求項１０】
複数の記憶媒体へのデータアクセスを分散制御する分散アクセスステップと、
前記データアクセスにおけるデータ分割単位を決定するデータ分割単位決定ステップと、
を情報処理装置に実行させるプログラムであって、
前記データ分割単位決定ステップにおいて、複数の前記記憶媒体のうちいずれかの記憶媒体におけるデータ転送速度において、その記憶媒体を対象としたデータ転送が開始されるまでの待ち時間内に転送可能なデータサイズに基づいて前記データ分割単位を決定することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶媒体制御装置、記憶媒体制御方法及びプログラムに関する。
【背景技術】
【０００２】
ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）に代表される記憶媒体におけるデータアクセスを高速化する手法として、複数の記憶媒体を組み合わせて連携させ、データアクセスを分散させる「ストライピング」という方式が知られている。ストライピングは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）技術の一種であり、一般には「ＲＡＩＤ０（レイドゼロ）」と呼ばれる。
【０００３】
ＲＡＩＤ０構成における記憶媒体制御装置において、データアクセス（データのリード／ライト処理）の速度は、ＲＡＩＤ構成に含まれる各記憶媒体の性能に依存する。例えば、記憶媒体が回転磁気ディスク型記憶媒体であれば、各記憶媒体の回転待ち時間のうち、最も回転待ち時間が長い（すなわち、データのリード／ライト処理を完了するまでの時間が遅い）記憶媒体の応答に、全体の応答が依存する。
【０００４】
上記の課題を解消する方法として、２つの記憶媒体の回転位相差を相殺するためのアドレス変換処理を実行することで、異なる記憶媒体の回転待ち時間を揃える方法が提案されている（例えば、特許文献１を参照）。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１の技術は、記憶媒体制御装置あるＲＡＩＤ制御装置の電源を投入した時や、長時間の運用を経過時などにおいて、アドレス変換の仕方を再調整する必要がある。また、特許文献１の技術を用いてアドレス変換を行うにあたり，上記のような再調整をすると、再調整前に各記憶媒体の既存のセクタに記憶されているデータを再調整後に使用できなくなる。そのため、アドレス変換の再調整をするときは、それ以前において記憶媒体に記録されているデータを一旦他の記憶媒体に待避させ、再調整後にデータを元に戻す必要がある。したがって、特許文献１の技術は、記憶媒体へのデータアクセスの高速化には有用であるが、上記のような制限を課すことなく、データ転送性能の低下を軽減できる方法がより望ましい。
【０００６】
本発明は、上記のような課題を解決するためになされたものであり、データアクセスの高速化を容易に実現することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、記憶媒体制御装置に関するものであり、複数の記憶媒体へのデータアクセスを分散制御する分散アクセス部と、前記データアクセスにおけるデータ分割単位を決定するデータ分割単位決定部と、を有し、前記データ分割単位決定部は、複数の前記記憶媒体のうちいずれかの記憶媒体におけるデータ転送速度において、その記憶媒体を対象としたデータ転送が開始されるまでの待ち時間内に転送可能なデータサイズに基づいて前記データ分割単位を決定する、ことを特徴とする。
【発明の効果】
【０００８】
本発明によれば、データアクセスの高速化を容易に実現することができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施形態に係る記憶媒体制御装置を含む電子機器のブロック図である。
【図２】本実施形態に係る記憶媒体制御装置の構成を示すブロック図である。
【図３】本実施形態に係る記憶領域におけるアドレス構成の例を示す図である。
【図４】本実施形態に係る記憶媒体制御装置のＣＰＵが認識するアドレスと記憶媒体側のセクタアドレスの対比例を示す図である。
【図５】本実施形態に係るディスクリプタ構成の例を示す図である。
【図６】本実施形態に係るディスクリプタ構成の別の例を示す図である。
【図７】本発明の実施形態に係る記録媒体制御処理の例を示すフローチャートである。
【図８】本実施形態におけるデータ分割単位を算定する式の例を示す図である。
【図９】本実施形態におけるＣＰＵが認識するセクタアドレスと実際のセクタアドレスの対応を定義する式の例を示す図である。
【図１０】本実施形態におけるＣＰＵが認識するセクタアドレスと実際のセクタアドレスの対応を定義する式の別の例を示す図である。
【図１１】本実施形態におけるＣＰＵが認識するセクタアドレスと実際のセクタアドレスの対応を定義する式のさらに別の例を示す図である。
【図１２】本実施形態におけるＣＰＵが認識するセクタアドレスと実際のセクタアドレスの対応を定義する式のさらに別の例を示す図である。
【図１３】本実施形態におけるＣＰＵが認識するセクタアドレスと実際のセクタアドレスの対応を定義する式のさらに別の例を示す図である。
【図１４】本実施形態におけるＣＰＵが認識するセクタアドレスと実際のセクタアドレスの対応を定義する式のさらに別の例を示す図である。
【図１５】本実施形態におけるＣＰＵが認識するセクタアドレスと実際のセクタアドレスの対応を定義する式のさらに別の例を示す図である。
【図１６】本実施形態におけるＣＰＵが認識するセクタアドレスと実際のセクタアドレスの対応を定義する式のさらに別の例を示す図である。
【図１７】本実施形態に係る記録媒体制御処理に含まれるアドレス設定処理の例を示すフローチャートである。
【図１８】本実施形態に係る記録媒体制御処理に含まれる全アクセス処理の例を示すフローチャートである。
【図１９】本実施形態に係る記録媒体制御処理に含まれるＡｃｈアクセス処理の例を示すフローチャートである。
【図２０】本実施形態に係る記録媒体制御処理に含まれるＢｃｈアクセス処理の例を示すフローチャートである。
【図２１】本実施形態に係る記録媒体制御処理に含まれる完了処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
●記憶媒体制御装置を含む電子装置の実施形態
以下、図面を参照しながら、本発明に係る記憶媒体制御装置の実施形態について説明する。図１は、本実施形態に係る記憶媒体制御装置を含む電子機器１０００の全体構成を示すブロック図である。本実施形態は、記憶媒体制御装置であるＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）制御部７に複数の記憶媒体を接続してこれらを連携させて動作させる機器に関するものである。本実施形態に係る記憶媒体として、回転磁気ディスク型記憶媒体であるＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１０や光磁気ディスク等の固体記憶装置や、フラッシュメモリ（Ｆｌａｓｈ  ｍｅｍｏｒｙ）などの不揮発性メモリを用いて構成される記憶装置等を用いることができる。なお、以下の本実施形態の説明は、ＨＤＤ１０を記憶媒体として用いた例である。
【００１１】
図１に示すように、電子機器１０００は、ＲＡＩＤ制御部７を中心として構成されていて、ＲＡＩＤ制御部７には、２つの記憶媒体であるＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２が接続されている。ＲＡＩＤ制御部７により、ＨＤＤ＿Ａ１とＨＤＤ＿Ｂ２は連携してあたかも１台のＨＤＤ１０のように動作する。以下、本実施形態において、ＨＤＤ＿Ａ１とＨＤＤ＿Ｂ２を区別せずに説明するときは、ＨＤＤ１０を用いる。
【００１２】
電子機器１０００は、ＨＤＤ１０（ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２）の他に、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）制御部Ａ３、ＳＡＴＡ制御部Ｂ４、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）＿Ａ５、ＤＭＡＣ＿Ｂ６、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）８０、割り込み制御部８１、メモリ（Ｍｅｍｏｒｙ）９、を備える。
【００１３】
以下、各構成の説明をその処理動作と共に行う。ＲＡＩＤ制御部７は、ＨＤＤ＿Ａ１とＨＤＤ＿Ｂ２に分割して記憶したデータへのアクセス制御を実行する。ＲＡＩＤ制御部７により、ＣＰＵ８０は、通常、ＨＤＤ＿Ａ１とＨＤＤ＿Ｂ２を区別すること無くデータアクセス（リード／ライト処理）することができる。
【００１４】
本実施形態の説明において「リードする」とは、データの読み出す処理を指す。また、「ライトする」とは、データの書き込み処理を指す。
【００１５】
ＣＰＵ８０は、演算装置であり、ＣＰＵ−ＩＦ（Ｉｎｔｅｒｆａｃｅ）８０１とバス（Ｂｕｓ）８００を介してＲＡＩＤ制御部７、ＤＭＡＣ＿Ａ５、ＤＭＡＣ＿Ｂ６、メモリ９、と相互にデータを送受できるように接続する。ＣＰＵ８０がＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２にアクセスする場合には、転送パラメータをＣＰＵ作成ディスクリプタ９０としてメモリ９に記憶する。
【００１６】
ＲＡＩＤ制御部７は、ディスクリプタ（Ｄｅｓｃｒｉｐｔｏｒ）であるＭＥＭ−ＩＦ７００を経由して、ＣＰＵ作成ディスクリプタ９０にアクセスする。ＲＡＩＤ制御部７は、ＤＭＡＣ＿Ａ５及びＤＭＡＣ＿Ｂ６が同時並行で動作できるように、Ａｃｈ用ディスクリプタ９１及びＢｃｈ用ディスクリプタ９２を作成し、各モジュールへの転送パラメータの設定を実行する。なお、各モジュールとは、ＳＡＴＡ制御部Ａ３、ＳＡＴＡ制御部Ｂ４、ＤＭＡＣ＿Ａ５、ＤＭＡＣ＿Ｂ６である。
【００１７】
ＲＡＩＤ制御部７は、ＨＤＤ１０へのライト処理に係るデータサイズが小さく、１台でデータ転送が完結すると判断したときは、アクセス対象となるセクタを含む側のＨＤＤ１０（ＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２）用のディスクリプタを作成する。作成したディスクリプタに応じて、各モジュール(ＳＡＴＡ制御部Ａ３又はＳＡＴＡ制御部Ｂ４、ＤＭＡＣ＿Ａ５又はＤＭＡＣ＿Ｂ６)の設定を実行し、ＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２へライト処理を実行する。
【００１８】
まず、ＲＡＩＤ制御部７による制御において、ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２へのリード／ライト処理に係るデータサイズが大きい場合、例えば、１０２４ｋＢｙｔｅよりも大きい場合について説明する。
【００１９】
リード処理において、上記のようにデータサイズが大きい場合は、ＨＤＤ＿Ａ１からリードしたデータは、ＤＭＡＣ＿Ａ−ＩＦ７０１を経由して、メモリ９の転送データ領域９９にライトされる。また、ＨＤＤ＿Ｂ２からリードしたデータは、ＤＭＡＣ＿Ｂ−ＩＦ７０２を経由して、メモリ９の転送データ領域９９にライトされる。ここで、メモリ９の帯域は十分に高速であるため、ＨＤＤ＿Ａ１とＨＤＤ＿Ｂ２からのデータリードは、同時並行で動作可能である。
【００２０】
転送データ領域９９には、データ分割単位(例えば１０２４ｋＢｙｔｅ)毎に、ＨＤＤ＿Ａ１用のライト領域とＨＤＤ＿Ｂ２用のライト領域が交互に割り当てられる。ただし、転送データ量が分割単位に満たない場合には、データ分割単位未満のメモリ領域が割り当てられる。また、転送データの開始セクタアドレス又は終了セクタアドレスが、データ分割単位の境界ではない場合には、転送データ領域９９の開始領域及び終了領域には、データ分割単位未満の領域が割り当てられる。なお、本実施形態において、データ分割単位は、１０２４ｋＢｙｔｅを例にして説明をする。
【００２１】
リード処理においてデータサイズがデータ分割単位よりも小さいときは、少量のデータがＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２に分割記憶されているか、どちらか一方のＨＤＤにのみ記憶されているか、によってリード処理が異なる。リード対象のデータが分割記憶されているか否かは、リード対象データのセクタアドレスによって決まる。
【００２２】
データが分割記憶されている場合は、大量のデータをリードする場合と同じ動作になる。ＨＤＤ＿Ａ１またはＨＤＤ＿Ｂ２の一方にのみ記憶されている場合には、記憶されている側のＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２と接続している側のＤＭＡＣ（ＤＭＡＣ＿Ａ５又はＤＭＡＣ＿Ｂ６）を経由して、メモリ９の転送データ領域９９にライトされる。
【００２３】
また、ライト処理において、データサイズが１０２４ｋＢｙｔｅよりも大きい場合、転送データ領域９９からリードしたデータを、ＤＭＡＣ＿Ａ−ＩＦ７０１を経由して、ＨＤＤ＿Ａ１に転送する。さらに、同じく転送データ領域９９からリードしたデータを、ＤＭＡＣ＿Ｂ−ＩＦ７０２を経由してＨＤＤ＿Ｂ２にデータを転送する。ここで、メモリ９の帯域は十分に高速であるため、ＨＤＤ＿Ａ１とＨＤＤ＿Ｂ２へのデータライトは、同時並行で動作可能である。
【００２４】
また、ライト処理において、データサイズがデータ分割単位よりも小さいときは、少量のデータをＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２に分割記憶するか、どちらか一方のＨＤＤにのみ記憶するか、によってライト処理の動作が異なる。なお、少量データのライト処理においても、分割記憶するかどうかは、セクタアドレスによって決まる。データを分割記憶する場合は、大量のデータをライトする場合と同じ動作となる。
【００２５】
一方、ＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２のいずれか一方にのみ記憶する場合には、メモリ９の転送データ領域９９からリードしたデータを、記憶する側のＨＤＤ１０に接続しているＤＭＡＣ＿Ａ５又はＤＭＡＣ＿Ｂ６を経由して、転送データ領域９９にライトする。
【００２６】
ＲＡＩＤ制御部７は、データ転送完了時に、各モジュール(ＳＡＴＡ制御部Ａ３、ＳＡＴＡ制御部Ｂ４、ＤＭＡ＿Ａ５、ＤＭＡＣ＿Ｂ６)の転送完了信号がアサート（ａｓｓｅｒｔ）したことを確認する。また、割り込み制御部８１に出力している割り込み信号７１０をアサートする。どちらか一方のＨＤＤ（ＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２）にしかアクセスしない場合には、アクセスする側の転送完了信号のアサートを確認して、割り込み信号７１０をアサートする。
【００２７】
ＣＰＵ８０が、転送パラメータ以外の各モジュール(ＳＡＴＡ制御部Ａ３、ＳＡＴＡ制御部Ｂ４、ＤＭＡ＿Ａ５、ＤＭＡＣ＿Ｂ６)の設定を実行する場合にも、ＲＡＩＤ制御部７を経由して、設定データを転送する。
【００２８】
ＤＭＡＣ＿Ａ５は、ＲＡＩＤ制御部７から設定された情報に従って、ＲＡＩＤ制御部７とＳＡＴＡ制御部Ａ３の間のデータ転送を実行する。ＲＡＩＤ制御部７は、ＤＭＡＣ＿Ａ５が参照すべきディスクリプタを記憶したメモリの先頭アドレスを、ＤＭＡＣ＿Ａ５の内部に設定しておき、ＤＭＡＣ＿Ａ５を起動する。
【００２９】
起動されたＤＭＡＣ＿Ａ５は、ＤＭＡＣ＿Ａ−ＩＦ７０１を経由して、ＲＡＩＤ制御部７が設定したディスクリプタの先頭アドレスから、ディスクリプタサイズ分のデータをリードする。リードされたデータは、ディスクリプタに記述された転送パラメータに従って転送を実行する。このとき、ＤＭＡＣ＿Ａ５がアクセスする転送データ領域９９は、データ分割単位毎に、バラバラの領域となる。ＳＡＴＡ制御部Ａ３と送受信するデータは、ディスクリプタリード時と同様に、ＤＭＡＣ＿Ａ−ＩＦ７０１を経由して転送される。なお、ディスクリプタの詳細に付いては、後述する。
【００３０】
ＤＭＡＣ＿Ｂ６は、ＲＡＩＤ制御部７から設定された情報に従って、ＲＡＩＤ制御部７とＳＡＴＡ制御部Ｂ４の間のデータ転送を実行する。ＲＡＩＤ制御部７は、ＤＭＡＣ＿Ｂ６が参照すべきディスクリプタを記憶したメモリの先頭アドレスを、ＤＭＡＣ＿Ｂ６の内部に設定しておき、ＤＭＡＣ＿Ｂ６を起動する。
【００３１】
起動されたＤＭＡＣ＿Ｂ６は、ＤＭＡＣ＿Ｂ−ＩＦ７０２を経由して、ＲＡＩＤ制御部７の設定したディスクリプタの先頭アドレスから、ディスクリプタサイズ分のデータをリードする。リードされたデータは、ディスクリプタに記述された転送パラメータに従ってデータ転送を実行する。 このとき、ＤＭＡＣ＿Ｂ６がアクセスする転送データ領域９９は、データ分割単位毎に、バラバラの領域となる。ＳＡＴＡ制御部と送受信するデータは、ディスクリプタリード時と同様に、ＤＭＡＣ＿Ｂ−ＩＦ７０２を経由して転送される。
【００３２】
ＳＡＴＡ制御部Ａ３は、ＳＡＴＡ規格に準拠したデバイスを制御するためのＳＡＴＡホストコントローラ機能を備え、ＨＤＤ＿Ａ１へのリード／ライト処理を実行する。ＳＡＴＡのコマンド設定や、ステータス情報の取得は、ＲＡＩＤ制御部７を経由して実行される。
【００３３】
ＳＡＴＡ制御部Ｂ４は、ＳＡＴＡ規格に準拠したデバイスを制御するためのＳＡＴＡホストコントローラ機能を備え、ＨＤＤ＿Ｂ２へのリード／ライト処理を実行する。ＳＡＴＡのコマンド設定や、ステータス情報の取得は、ＲＡＩＤ制御部７を経由して実行される。
【００３４】
なお、ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２は、ＳＡＴＡ規格に準拠したストレージデバイスであって、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔａｍ）やアプリケーションプログラム、等の記憶、及び、処理データの一時記憶領域等に用いられる記憶媒体である。
【００３５】
メモリ９は、各機能モジュールのワーク領域として使用される。メモリ９は、ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２ＨＤＤへライトするデータの記憶領域として使用される。又、メモリ９は、ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２からリードしたデータの記憶領域及びディスクリプタの作成領域として使用される。
【００３６】
割り込み制御部８１は、ＲＡＩＤ制御部７からの割り込み信号７１０を受信し、ＣＰＵ８０に割り込み発生を通知する。
【００３７】
●記憶媒体制御装置の実施形態
次に、本発明に係る記憶媒体制御装置の実施形態であるＲＡＩＤ制御部７について図２を用いて説明する。図２は、本実施形態に係るＲＡＩＤ制御部７の詳細な構成を示すブロックである。
【００３８】
図２に示すように、ＲＡＩＤ制御部７は、シーケンス制御部７１と、転送完了検出部７２と、ＳＡＴＡコマンド発行部７３と、ＤＭＡＣ制御部７４と、ディスクリプタリード部７５と、ディスクリプタ決定部７６と、ディスクリプタライト部７７と、を備える。また、ディスクリプタ決定部７６は、データ分割サイズ記憶部７６１と、ＨＤＤセクタ算出部７６２と、を備える。
【００３９】
ディスクリプタリード部７５は、シーケンス制御部７１から起動信号を受信すると、内部に設定されたディスクリプタ先頭メモリアドレスにＭＥＭ−ＩＦ７００経由でアクセスし、ＣＰＵ作成ディスクリプタ９０（図１参照）をリードする。また、ディスクリプタリード部７５は、リードしたＣＰＵ作成ディスクリプタ９０の内容をディスクリプタ決定部７６に送信する。なお、ディスクリプタリード部７５がＣＰＵ作成ディスクリプタ９０をリードするデータ量は、ディスクリプタサイズ分である。
【００４０】
ディスクリプタ決定部７６は、実際にＨＤＤ１０（ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２）へのアクセスにおいて使用する転送パラメータを決定する。転送パラメータの決定方法は、ディスクリプタリード部７５から送られてくるＣＰＵ作成ディスクリプタ９０の内容と、予め設定済みのデータ分割サイズ記憶部７６１の情報に基づく方法である。
【００４１】
ＨＤＤセクタ算出部７６２は、先頭セクタアドレス設定領域９０６の値と転送セクタ数設定領域９０７の値から、アクセスするべきＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２のセクタアドレスとセクタ数を算出し、算出した値をディスクリプタライト部７７に送信する。
【００４２】
本実施形態では、データ分割サイズ記憶部７６１に設定する値は、ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２における平均回転待ち時間の間に転送可能な平均データサイズの２倍を基準に設定する。言い換えると、複数の記憶装置を連携させた構成において、１台の記憶装置に分割記憶するデータサイズを、ＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２のうち、いずれか一方の平均回転待ち時間の間に転送可能なデータサイズを基に決定する。このように決定されるデータサイズ（データ分割サイズともいう）が小さい場合は、１台のＨＤＤ（ＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２）へのアクセスでデータ転送が完結する確率を高くする。一方、データ分割サイズが大きい場合には、ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２へのアクセスを並列的に実行する。
【００４３】
例えば、ＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２の回転数が５４００ｒｐｍ、平均内部転送速度が１００ＭＢｙｔｅ／秒であれば、平均回転待ち時間の間に転送可能な平均データサイズの２倍の値は、図８に示す式（１）を用いてデータ分割単位を算出することができる。したがって、本実施形態においてデータ分割サイズ記憶部７６１に設定する値は、「１０２４ｋＢｙｔｅ」である。以上のように、データ分割サイズ記憶部７６１に設定する平均データサイズの２倍の値を、２のべき乗の値に設定すれば、容易にセクタアドレスの計算をすることができる。
【００４４】
なお、上記の例では、データ分割サイズを算出するために、平均データサイズの２倍の値の端数を切り下げて１０２４ｋＢｙｔｅにしている。なお、本実施形態では、同様の式（１）を用いて算出された値の端数を切り上げて、データ分割サイズを２０４８ｋＢｙｔｅに決定してもよい。また、データ分割サイズの算出は、平均データサイズの２倍以上であって、上記のように２の累乗の値であればよい。
【００４５】
なお、ＨＤＤ１０は回転磁気ディスク型記憶媒体であるから、平均回転待ち時間をデータ分割単位決定の要素としている。しかし、本実施形態に係るＲＡＩＤ制御部７が制御できる記憶媒体であれば、データのリート／ライト処理の指示から完了までの所定の待ち時間を平均回転待ち時間の代わりに用いることもできる。また、データ転送速度を要素として考慮することもできる。
【００４６】
上記のような算出結果によって決定されデータ分割サイズ記憶部７６１に設定される値は、アクセスするセクタアドレスの値に応じて変更することで、リード速度が向上する確率を上げることができる。
【００４７】
アクセスするセクタが外周トラックに位置する場合は、転送速度が速くなるので、この場合は、平均回転待ち時間の間に転送できるデータ量が増加する。そこで、アクセスするセクタが外周トラックであれば、データ分割サイズの値を大きく設定する。一方、アクセスするセクタが内周トラックの位置する場合は、転送速度が遅くなるので、この場合は、平均回転待ち時間の間に転送できるデータ量が減少する。そこで、アクセスするセクタが内周トラックであれば、データ分割サイズの値を小さく設定する。これによって、データ転送時間を短縮できる確率を高めることができる。
【００４８】
ディスクリプタライト部７７は、シーケンス制御部７１からの起動信号を受信すると、ＭＥＭ−ＩＦ７００経由でメモリ９にアクセスして、ディスクリプタ決定部７６から受信したＡｃｈ用ディスクリプタ及びＢｃｈ用ディスクリプタの内容を、ライトする。Ａｃｈ用ディスクリプタ、Ｂｃｈ用ディスクリプタを記憶するメモリアドレスは、ＣＰＵ８０が、シーケンス制御部７１経由で、ディスクリプタライト部７７の内部に設定している。ディスクリプタのライトが完了すると、シーケンス制御部７１に完了したことを通知する。
【００４９】
転送完了検出部７２は、ＤＭＡ転送完了信号Ａ７０３と、ＳＡＴＡ転送完了信号Ａ７０５と、ＤＭＡ転送完了信号Ｂ７０８と、ＳＡＴＡ転送完了信号Ｂ７０６と、を受信し、ディスクリプタ決定部７６からの設定に従って転送完了を検出する。また、転送完了検出部７２は、転送完了を検出したことをシーケンス制御部７１に通知する。ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２の両方に対してリード／ライトする場合は、ＤＭＡ転送完了信号Ａ７０３、ＳＡＴＡ転送完了信号Ａ７０５、ＤＭＡ転送完了信号Ｂ７０８、ＳＡＴＡ転送完了信号Ｂ７０６のアサートを確認後に、転送完了を通知する。ＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２のどちらか一方へのリード／ライトの場合は、アクセスが発生する方のＨＤＤ１０へのＤＭＡ転送完了信号とＳＡＴＡ転送完了信号が両方アサートしたことを確認した後に、シーケンス制御部７１へ転送完了を通知する。
【００５０】
ＳＡＴＡコマンド発行部７３は、ディスクリプタ決定部７６からの設定に従って、ＳＡＴＡ制御部Ａ３に対してアクセスし、ＳＡＴＡ制御コマンドＡ７０４によるコマンド発行を促し、ＨＤＤ＿Ａ１へのアクセスを開始させる。また、ＳＡＴＡコマンド発行部７３は、ディスクリプタ決定部７６からの設定に従って、ＳＡＴＡ制御部Ｂ４に対してアクセスして、ＳＡＴＡ制御コマンドＢ７０７によるコマンド発行を促し、ＨＤＤ＿Ｂ２へのアクセスを開始させる。ＳＡＴＡ制御部Ｂ４に対しアクセスしてコマンド発行を促し、ＨＤＤへのアクセスを開始させる。また、ＣＰＵ８０からも、シーケンス制御部７１を経由して、ＳＡＴＡ制御部Ａ３とＳＡＴＡ制御部Ｂ４に対するアクセスはできる。
【００５１】
ＤＭＡＣ制御部７４は、ＤＭＡＣ＿Ａ５及びＤＭＡＣ＿Ｂ６を制御する。ＤＭＡＣ制御部７４は、ディスクリプタ決定部７６からＤＭＡＣ＿Ａ５が参照するディスクリプタアドレスを受信すると、ＤＭＡＣ＿Ａ５に対して、受信したディスクリプタアドレス値であるＤＭＡＣ設定Ａ７０２を設定する。又は、ディスクリプタ決定部７６からＤＭＡＣ＿Ｂ６が参照するディスクリプタアドレスを受信すると、ＤＭＡＣ＿Ｂ６に対して、受信したディスクリプタアドレス値であるＤＭＡＣ設定Ｂ７０９を設定する。シーケンス制御部７１から、ＤＭＡＣ＿Ａ５の起動信号を受信すると、ＤＭＡＣ＿Ａ５を起動し、ＤＭＡＣ＿Ｂ６の起動信号を受信すると、ＤＭＡＣ＿Ｂ６を起動する。
【００５２】
シーケンス制御部７１は、ＣＰＵ８０からの指示と、各モジュールからの信号とを参照して、ＨＤＤ１０へのアクセスを分散制御する分散アクセス部である。ここで、各モジュールとは、転送完了検出部７２、ＳＡＴＡコマンド発行部７３、ＤＭＡＣ制御部７４、ディスクリプタリード部７５、ディスクリプタ決定部７６及びディスクリプタライト部７７である。
【００５３】
●データの分散記憶態様
次に、本実施形態に係るＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２に対するデータの分散記憶の態様について説明する。図３は、ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２を用いたストライピング構成において、ＣＰＵ８０が認識する記憶領域のアドレス認識態様の例である。
【００５４】
図３において、符号９０００は、ＣＰＵ８０が認識するメモリ９のアドレス空間を示している。システム制御レジスタ領域９８００は、ＣＰＵ８０の動作モード等を設定する領域であって、そのアドレスとして［０ｘ０００８＿００００〜０ｘ０００Ｆ＿ＦＦＦＦ］が割り当てられている。
【００５５】
ＲＡＩＤ制御部レジスタ領域９７００は、ディスクリプタ決定部７６等のＲＡＩＤ制御部７の動作モードを設定するレジスタの他、ＲＡＩＤ制御部７を経由して各種設定を実施するモジュールのレジスタが割り当てられている。ＲＡＩＤ制御部レジスタ領域９７００のアドレスは、［０ｘ００２０＿００００〜０ｘ００２０＿７ＦＦＦ］が割り当てられている。なお、各種設定を実施するモジュールとは、ＳＡＴＡ制御部Ａ３、ＳＡＴＡ制御部Ｂ４、ＤＭＡＣ＿Ａ５、ＤＭＡＣ＿Ｂ６などである。
【００５６】
メモリ領域９９００は、メモリ９の記憶領域に割り当てられている。本実施形態では、メモリ領域９９００を、転送データ領域、ＣＰＵ作成ディスクリプタ領域、ＲＡＩＤ制御部作成Ａｃｈ用ディスクリプタ領域、ＲＡＩＤ制御部作成Ｂｃｈ用ディスクリプタ領域として使用する。
【００５７】
なお、図３に示すように、例えば、転送データ領域は、アドレス［０ｘ１０００＿００００〜０ｘ２ＦＦＦ＿ＦＦＦＦ］の領域である。ＣＰＵ作成ディスクリプタ領域は、アドレス［０ｘ３０００＿００００〜０ｘ３０００＿０ＦＦＦ］の領域である。ＲＡＩＤ制御部作成Ａｃｈ用ディスクリプタ領域は、アドレス［０ｘ３０００＿１０００〜０ｘ３０００＿１ＦＦＦ］の領域である。ＲＡＩＤ制御部作成Ｂｃｈ用ディスクリプタ領域は、アドレス［０ｘ３０００＿２０００〜０ｘ３０００＿２ＦＦＦ］の領域である。
【００５８】
転送データ記憶領域は、ＨＤＤ１０からリードしたデータを記憶する、または、ＨＤＤ１０にライトするデータを記憶する領域である。ＣＰＵ８０は、データ分割サイズを意識せずに、自由にＨＤＤの記憶領域(転送開始アドレス〜転送終了アドレスの範囲)を使用することができる。図３に示すように、転送データ領域の内部には、ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２に対応するデータが各セクタに分かれて記憶される。しかし、ＣＰＵ８０がＨＤＤ１０に対してリード／ライト処理をするときには、各データのセクタアドレスは意識せずに実行される。
【００５９】
●ＣＰＵ８０から見たアドレスとＨＤＤ１０のセクタアドレスの対応
次に、ＨＤＤ１０に対応するセクタアドレスと、ＣＰＵ８０が認識するセクタアドレスの対応について説明する。図４の符号９００に示すようにＣＰＵ８０側からは、ＨＤＤ＿Ａ１とＨＤＤ＿Ｂ２の区別はされず、１個のＨＤＤ１０として認識される。ＨＤＤ＿Ａ１におけるセクタアドレスの例を符号９０１に、ＨＤＤ＿Ｂ２におけるセクタアドレスの例を符号９０２に示す。
【００６０】
ＣＰＵ８０が指定するセクタが、ＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２のいずれに存在するか、セクタの位置はどこか、についてはＲＡＩＤ制御部７が判断する。本実施形態では、ＣＰＵ８０が認識するＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２を連携させたセクタアドレス（以下「連携セクタアドレス」という）の第１１ビット目（ｂｉｔ［１１］）の値で判断するものとする。例えば、ｂｉｔ［１１］＝０のときは、ＨＤＤ＿Ａ１側のセクタであって、ｂｉｔ［１１］＝１のときは、ＨＤＤ＿Ｂ２側のセクタとして認識する。
【００６１】
ＣＰＵ８０が認識する連携セクタアドレス（ＣＰＵ８０から見たセクタアドレス）と、ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２のおける実際のセクタアドレスの対応は、図９に示す式（２）による。
【００６２】
式（２）は、ＲＡＩＤ制御部７にＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２を接続して連携させる構成に関するものである。本実施形態はこれに限るものではなく、ＨＤＤ１０を４台の記憶媒体で構成した場合でも、式（２）のように、セクタアドレスの対応を行うことができる。したがって、本実施形態に係るＲＡＩＤ制御部７によれば、接続するＨＤＤの数を容易に拡張できる。
【００６３】
例えば、ＨＤＤを４台連携させる場合の連携セクタアドレスとＨＤＤの実際のセクタアドレスの対応は、図１０に示す式（３）による。なお、式（３）において、４台構成のＨＤＤ１０を区別するために「ＨＤＤ（１）、ＨＤＤ（２）、ＨＤＤ（３）、ＨＤＤ（４）」のように符号を付している。このように、本実施形態に係る記憶媒体制御装置は、２の累乗個のＨＤＤ１０を使用する場合にも、容易に拡張することができる。
【００６４】
次に、データリード時において、ＨＤＤ＿Ａ１とＨＤＤ＿Ｂ２の両方にアクセスする場合のディスクリプタ構成の例について図５を用いて説明する。なお、本実施形態では、データ分割サイズを１０２４ｋＢｙｔｅとする。図５は、ＣＰＵ８０が作成するＣＰＵ作成ディスクリプタ９０におけるアドレスを［０ｘ３０００＿００００〜３０００＿００１Ｂ］に設定している例である。
【００６５】
図５において、転送方向設定領域９０１は、ＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２からのリード／ライト方向を設定する。図５は、ＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２からリードしたデータをメモリ９にライトする設定を例示している。
【００６６】
次ディスクリプタアドレス設定領域９０２は、ディスクリプタチェイン動作をするときに使用する領域であって、本ディスクリプタに設定した動作が完了した後、次の動作パラメータを記述したディスクリプタの先頭アドレスを記憶している領域である。
【００６７】
転送データ記憶メモリ領域の先頭アドレス設定領域９０３は、ＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２からリードしたデータを記憶するメモリ領域の先頭アドレスを記憶している領域である。
【００６８】
転送データサイズ設定領域９０４は、ＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２からリードするデータのサイズを記憶している領域である。
【００６９】
ＳＡＴＡコマンド設定領域９０５は、ＨＤＤ＿Ａ１又はＨＤＤ＿Ｂ２に対して発行するＳＡＴＡコマンドを記憶している領域である。
【００７０】
先頭セクタアドレス設定領域９０６は、ＨＤＤからリードする先頭データが記憶してあるセクタのアドレスを記憶している領域である。
【００７１】
転送セクタ数設定領域９０７は、ＨＤＤからリードするデータサイズをセクタ数で設定している領域である。
【００７２】
本実施形態において、ＨＤＤ＿Ａ１とＨＤＤ＿Ｂ２の両方へのアクセスが発生する場合のディスクリプタ構成は、下記のケース（１）又はケース（２）のいずれかである。ケース（１）は、転送セクタ数設定領域９０７の値が２０４８（即ち、０ｘ８００）より大きい場合である。ケース（２）は、転送セクタ数設定領域９０７の値が２０４８（即ち０ｘ８００）以下の場合である。さらに、ケース（２）は、上記の条件に加えて、先頭セクタアドレス設定領域９０６の値のｂｉｔ［１０：０］と転送セクタ数設定領域９０７の値のｂｉｔ［１０：０］とを加算した値が「０ｘ８０１以下」となる場合である。
【００７３】
また、図５において、ＲＡＩＤ制御部７が作成するＡｃｈ用ディスクリプタ９１は、アドレス［０ｘ３０００＿１０００〜３０００＿１０１Ｂ］に作成されている。
【００７４】
ここで、転送方向設定領域９１１における設定及びＳＡＴＡコマンド設定領域９１５の設定は、ＣＰＵ作成ディスクリプタ９０と同じ設定とする。次ディスクリプタ設定領域９１２においては、次ディスクリプタが存在しない設定値とする。なお、本実施形態では、０ｘ００００＿００００である。
【００７５】
ＣＰＵ８０が、ＣＰＵ作成ディスクリプタ９０をアドレス［０ｘ３０００＿００００〜３０００＿００１Ｂ］に作成している。
【００７６】
Ａｃｈの転送データ記憶メモリ領域の先頭アドレス設定領域９１３は、ＣＰＵ作成ディスクリプタ９０の先頭セクタアドレス設定領域９０６と、転送データ記憶メモリ領域の先頭アドレス設定領域９０３の値で決定する。
【００７７】
先頭セクタアドレス設定領域９０６の値がＨＤＤ＿Ａ１を示す値である場合とＨＤＤ＿Ｂ２を示す値である場合において、Ａｃｈの転送データ記憶メモリ領域の先頭アドレス設定領域９１３の値は、図１１に示す式（４）によって決定される。なお、先頭セクタアドレス設定領域９０６の値がＨＤＤ＿Ａ１を示す値である場合とは、先頭セクタアドレス設定領域９０６のＢｉｔ［１１］は「０」の場合であって、ＨＤＤ＿Ｂ２を示す値である場合とは、同じようにＢｉｔ［１１］が［１］の場合である。
【００７８】
Ａｃｈの先頭セクタアドレス設定領域９１６の値は、ＣＰＵ作成ディスクリプタ９０の先頭セクタアドレス設定領域９０６の値で決定される。
【００７９】
先頭セクタアドレス設定領域９０６の値がＨＤＤ＿Ａ１を示す値である場合とＨＤＤ＿Ｂ２を示す値である場合におけるＡｃｈの先頭セクタアドレス設定領域９１６は、図１２に示す式（５）によって決定される。
【００８０】
Ａｃｈの転送セクタ数設定領域９１７の値は、ＣＰＵ作成ディスクリプタ９０の先頭セクタアドレス設定領域９０６の値と、転送セクタ数設定領域９０７の値で決定される。具体的には、図１３に示す式（６）によって決定される。
【００８１】
Ａｃｈのデータ転送サイズ設定領域９１４の値は、Ａｃｈの転送セクタ数設定領域９１７の値×５１２になる。
【００８２】
ＲＡＩＤ制御部７が作成するＢｃｈ用ディスクリプタ９２を、アドレス［０ｘ３０００＿２０００〜３０００＿２０１Ｂ］に作成している。
【００８３】
転送方向設定領域９２１は、ＣＰＵ作成ディスクリプタ９０と同じ設定とする。
【００８４】
ＳＡＴＡコマンド設定領域９２５は、ＣＰＵ作成ディスクリプタ９０と同じ設定とする。
【００８５】
次ディスクリプタ設定領域９２２は、次ディスクリプタが存在しない設定値とする。本実施形態では、０ｘ００００＿００００とする。
【００８６】
Ｂｃｈの転送データ記憶メモリ領域の先頭アドレス設定領域９２３は、ＣＰＵ作成ディスクリプタ９０の先頭セクタアドレス設定領域９０６と、転送データ記憶メモリ領域の先頭アドレス設定領域９０３の値で決定される。具体的には、図１４に示す式（７）によって決定される。
【００８７】
Ｂｃｈの先頭セクタアドレス設定領域９２６の値は、ＣＰＵ作成ディスクリプタ９０の先頭セクタアドレス設定領域９０６の値で決定される。具体的には、図１５に示す式（８）によって決定される。
【００８８】
Ｂｃｈの転送セクタ数設定領域９２７の値は、ＣＰＵ作成ディスクリプタ９０の先頭セクタアドレス設定領域９０６の値と、転送セクタ数設定領域９０７の値で決定される。具体的には、図１６に示す式（９）によって決定される。
【００８９】
Ｂｃｈのデータ転送サイズ設定領域９２４の値は、Ｂｃｈの転送セクタ数設定領域９２７の値×５１２となる。
【００９０】
ＨＤＤへのライトの場合のディスクリプタは、転送方向設定領域９０１、９１１、９１２１の値、及び、ＳＡＴＡコマンド設定領域９０５、９１５、９２５の値がリード時のディスクリプタ設定値と異なるが、その他の設定はリード時と同様である。
【００９１】
図６は、データサイズが小さく、１台のＨＤＤアクセスでデータ転送が完結する場合のディスクリプタ構成について説明する図である。
【００９２】
ＣＰＵ８０が作成する、ＣＰＵ作成ディスクリプタ９０を、アドレス［０ｘ３０００＿００００〜３０００＿００１Ｂ］に作成している。
【００９３】
転送方向設定領域９０１０は、ＨＤＤからのリード／ライト方向を設定する。本実施形態では、ＨＤＤからリードしたデータをメモリにライトする設定とする。
【００９４】
次ディスクリプタアドレス設定領域９０２０は、ディスクリプタチェイン動作をするときに使用する領域である。次ディスクリプタアドレス設定領域９０２０は、このディスクリプタに設定した動作が完了後、次の動作パラメータを記述したディスクリプタの先頭アドレスを記憶している。
【００９５】
転送データ記憶メモリ領域の先頭アドレス設定領域９０３０は、ＨＤＤからリードしたデータを記憶するメモリ領域の先頭アドレスを記憶している。
【００９６】
転送データサイズ設定領域９０４０は、ＨＤＤからリードするデータのサイズを記憶している。
【００９７】
ＳＡＴＡコマンド設定領域９０５０は、ＨＤＤに対して発行するＳＡＴＡコマンドを記憶している。
【００９８】
先頭セクタアドレス設定領域９０６０は、ＨＤＤからリードする先頭データが記憶してあるセクタのアドレスを記憶している。
【００９９】
転送セクタ数設定領域９０７０は、ＨＤＤからリードするデータサイズをセクタ数で設定している。
【０１００】
本実施形態において、ＨＤＤ＿Ａ１とＨＤＤ＿Ｂ２のどちらか一方にしかアクセスしない場合のディスクリプタ構成は、下記のケース（３）及びケース（４）に示す条件を両方満たす場合である。ケース（３）は、転送セクタ数設定領域９０７の値が２０４８（即ち０ｘ８００）以下の場合である。ケース（４）は、先頭セクタアドレス設定領域９０６の値のｂｉｔ［１０：０］と転送セクタ数設定領域９０７の値のｂｉｔ［１０：０］とを加算した値が「０ｘ８００以上」となる場合である。
【０１０１】
図６の例では、ＨＤＤ＿Ｂ２へのアクセスのみが発生する場合について記載している。ＨＤＤ＿Ａ１へのアクセスは発生しないため、Ａｃｈ用ディスクリプタ９１の設定は不要である。
【０１０２】
ＲＡＩＤ制御部７が作成するＢｃｈ用ディスクリプタ９２を、アドレス［０ｘ３０００＿２０００〜３０００＿２０１Ｂ］に作成している。
【０１０３】
転送方向設定領域９２１０は、ＣＰＵ作成ディスクリプタ９０と同じ設定とする。
【０１０４】
ＳＡＴＡコマンド設定領域９２５０は、ＣＰＵ作成ディスクリプタ９０と同じ設定とする。
【０１０５】
次ディスクリプタ設定領域９２２０は、次ディスクリプタが存在しない設定値とする。本実施形態では、０ｘ００００＿００００である。
【０１０６】
転送データ記憶メモリ領域の先頭アドレス設定領域９２３０は、ＣＰＵ作成ディスクリプタ９０と同じ設定とする。
【０１０７】
データ転送サイズ９２４０は、ＣＰＵ作成ディスクリプタ９０と同じ設定とする。
【０１０８】
転送セクタ数設定領域９２７０は、ＣＰＵ作成ディスクリプタ９０と同じ設定とする。
【０１０９】
先頭セクタアドレス設定領域９２６０は、（ＣＰＵ８０の先頭セクタアドレス設定領域９０６のｂｉｔ［３１：１１］×１０１４）÷２＋ＣＰＵ８０の先頭セクタアドレス設定領域９０６のｂｉｔ［１０：０］となる。
【０１１０】
ＨＤＤへのライトの場合のディスクリプタは、転送方向設定領域９０１０、９１１０、９１２０の値、及び、ＳＡＴＡコマンド設定領域９０５０、９１５０、９２５０の値がリード時のディスクリプタ設定値と異なるが、その他の設定はリード時と同様である。
【０１１１】
以上説明した本実施形態によれば、ＲＡＩＤ制御部７においてデータ分割単位を決定し、これに基づいて、ＨＤＤ＿Ａ１とＨＤＤ＿Ｂ２へのデータアクセスを制御する。ここで、データ分割単位の決定は、ＨＤＤ＿Ａ１とＨＤＤ＿Ｂ２のデータアクセス速度に関連する仕様を用いて、データ分割単位決定部が決定する。決定したデータ分割単位を用いて、データ転送制御部であるディスクリプタ決定部７６がディスクリプタを作成する。これらは、ＲＡＩＤ制御部７を構成するハードウェアと、これと協働するソフトウェアにより実行される。すなわち、当該プログラムが備えるデータ分割単位決定ステップにおいて、上記の要素を用いた処理が実行される。
【０１１２】
ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２は、回転磁気ディスク型の記憶媒体を備える。記憶媒体の機能を備える回転平面において、その外周部と内周部では、回転速度が異なる。これによって、データアクセス速度も部分的に異なる。本実施形態では、外周部と内周部で区別されるそれぞれの領域に対して、別々にデータ分割単位を決定する。
【０１１３】
また、本実施形態では、ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２におけるデータ転送速度（平均実効転送速度）もデータ分割単位の決定要素になる。すなわち、複数のＨＤＤ１０において、平均待ち時間内において平均実効転送速度をもって転送可能なデータサイズをデータ分割単位とする。
【０１１４】
●記憶媒体制御方法の実施形態
次に、本発明に係る記憶媒体制御方法の実施形態について、説明する。図７は、本実施形態の全体的な処理の流れを示すフローチャートである。図７に示すように、本実施形態に係る記憶媒体制御方法は、ＲＡＩＤ制御部７（図１参照）を備え情報処理装置の一種である電子機器１０００において実行される制御方法である。即ち、すでに説明をしたＲＡＩＤ制御部７に対して２台のＨＤＤ（ＨＤＤ＿Ａ１とＨＤＤ＿Ｂ２）を接続して連携させる態様において、各ＨＤＤへの転送データサイズを最適化する方法である。
【０１１５】
本実施形態は、アドレス設定処理Ｓ１０、第１リード処理Ｓ２０、第１アクセス判定処理Ｓ３０、全アクセス処理Ｓ４０、転送完了判定処理Ｓ５０、次ディスクリプタ判定処理Ｓ６０、完了処理Ｓ７０、第２リード処理Ｓ８０、第２アクセス判定処理Ｓ９０、Ａｃｈアクセス処理Ｓ１００、Ｂｃｈアクセス処理Ｓ１１０、を有する方法である。
【０１１６】
まず、ＣＰＵ８０が、アドレス設定処理（Ｓ１０）を実行する。ここで、アドレス設定処理（Ｓ１０）の詳細な処理の流れについて、図１７のフローチャートを用いて説明する。最初に、ＣＰＵ８０がＣＰＵ作成ディスクリプタ９０を作成するアドレスを、ＲＡＩＤ制御部７に設定する（Ｓ１１）。
【０１１７】
続いて、ＣＰＵ８０が、Ａｃｈ用ディスクリプタ９１を作成するアドレスをＲＡＩＤ制御部７に設定する（Ｓ１２）。
【０１１８】
続いて、ＣＰＵ８０が、Ｂｃｈ用ディスクリプタ９２を作成するアドレスをＲＡＩＤ制御部７に設定する（Ｓ１３）。
【０１１９】
続いて、ＣＰＵ８０が、ＣＰＵ作成ディスクリプタ９０を作成する（Ｓ１４）。
【０１２０】
続いて、ＣＰＵ８０が、ＲＡＩＤ制御部７に転送開始を指示する（Ｓ１５）。
【０１２１】
図７に戻る。アドレス設定処理（Ｓ１０）に続いて、第１リード処理（Ｓ２０）が実行される。第１リード処理では、ＲＡＩＤ制御部７が、アドレス設定処理（Ｓ１０）において作成されたＣＰＵ作成ディスクリプタ９０をメモリ９からリードする。
【０１２２】
次に、第１アクセス判定処理（Ｓ３０）が実行される。第１アクセス判定処理（Ｓ３０）は、ＲＡＩＤ制御部７がＨＤＤ＿Ａ１とＨＤＤ＿Ｂ２の両方にアクセスするか否かを判断する処理である。ＲＡＩＤ制御部７が両方にアクセスすると判定したときは（Ｓ３０：ＹＥＳ）、全アクセス処理（Ｓ４０）に移行し、ＲＡＩＤ制御部７が両方にはアクセスしないと判定したときは（Ｓ３０：ＮＯ）、第２アクセス判定処理（Ｓ９０）に移行する。この第１アクセス判定処理（Ｓ３０）と第２アクセス判定処理（Ｓ９０）によって、複数の記憶媒体へのデータアクセスを制御する分散アクセスステップを実行する。
【０１２３】
ここで、全アクセス処理（Ｓ４０）の詳細な処理の流れについて、図１８のフローチャートを用いて説明する。まず、ＲＡＩＤ制御部７が、ＣＰＵ作成ディスクリプタ９０のリード結果から、Ａｃｈ用のディスクリプタを作成し（Ｓ４１）、続いてＢｃｈ用のディスクリプタを作成する（Ｓ４２）。
【０１２４】
続いて、ＲＡＩＤ制御部７が、Ａｃｈ／Ｂｃｈ用のＳＡＴＡコマンド発行を指示する（Ｓ４３）。
【０１２５】
続いて、ＳＡＴＡ制御部Ａ３とＳＡＴＡ制御部Ｂ４がＳＡＴＡコマンドを発行する（Ｓ４４）。
【０１２６】
続いて、ＲＡＩＤ制御部７が、ＤＭＡＣ＿Ａ５とＤＭＡＣ＿Ｂ６を起動する（Ｓ４５）。
【０１２７】
続いて、ＤＭＡＣ＿Ａ５とＤＭＡＣ＿Ｂ６がディスクリプタをリードし、データ転送を開始する（Ｓ４６）。以上の処理によって全アクセス処理（Ｓ４０）が実行される。
【０１２８】
図７に戻る。全アクセス処理においてデータ転送が完了するまでは、転送完了判定処理において処理をループする（Ｓ５０：ＮＯ）。データ転送が完了すれば（Ｓ５０：ＹＥＳ）、次ディスクリプタ判定処理（Ｓ６０）が実行される。
【０１２９】
次ディスクリプタがある場合（Ｓ６０：ＹＥＳ）、第２リード処理（Ｓ８０）において、ＲＡＩＤ制御部７が次ディスクリプタをリードして、その後、第１アクセス判定処理（Ｓ３０）に処理を移行し、次のデータ転送処理を実行する（Ｓ３０、Ｓ４０、Ｓ５０）。
【０１３０】
次ディスクリプタがない場合（Ｓ６０：ＮＯ）は、完了処理（Ｓ７０）へ移行する。図２１を用いて完了処理（Ｓ７０）の詳細について説明する。まず、ＲＡＩＤ制御部７が割り込み信号７１０をアサートする（Ｓ７１）。これに続いて、ＣＰＵ８０が転送完了を検知する（Ｓ７２）。以上の処理により、本実施形態に係る記憶媒体制御方法を終了する。
【０１３１】
第２アクセス判定処理（Ｓ９０）において、ＲＡＩＤ制御部７がＨＤＤ＿Ａ１にのみアクセスすると判定したときは（Ｓ９０：ＹＥＳ）、Ａｃｈアクセス処理（Ｓ１００）に移行する。ＲＡＩＤ制御部７がＨＤＤ＿Ｂ１にのみアクセスすると判定したときは（Ｓ９０：ＮＯ）、Ｂｃｈアクセス処理に移行する（Ｓ１１０）。
【０１３２】
ここで、Ａｃｈアクセス処理（Ｓ１００）の詳細について、図１９のフローチャートを用いて説明する。まず、ＲＡＩＤ制御部７が、ＣＰＵ作成ディスクリプタ９０のリード結果から、Ａｃｈ用のディスクリプタを作成する（Ｓ１０１）。続いて、ＲＡＩＤ制御部７が、Ａｃｈ用のＳＡＴＡコマンド発行を指示する（Ｓ１０２）。続いて、ＳＡＴＡ制御部Ａ３がＳＡＴＡコマンドを発行する（Ｓ１０３）。
【０１３３】
続いて、ＲＡＩＤ制御部７が、ＤＭＡＣ＿Ａ５を起動する（Ｓ１０４）。続いて、ＤＭＡＣ＿Ａ５がディスクリプタをリードして、データ転送を開始する（Ｓ１０５）。以上の処理によってＡｃｈアクセス処理（Ｓ１００）が実行される。
【０１３４】
また、Ｂｃｈアクセス処理（Ｓ１００）の詳細について、図１９のフローチャートを用いて説明する。まず、ＲＡＩＤ制御部７が、ＣＰＵ作成ディスクリプタ９０のリード結果から、Ｂｃｈ用のディスクリプタを作成する（Ｓ１１１）。続いて、ＲＡＩＤ制御部７が、Ｂｃｈ用のＳＡＴＡコマンド発行を指示する（Ｓ１１２）。続いて、ＳＡＴＡ制御部Ｂ４がＳＡＴＡコマンドを発行する（Ｓ１１３）。
【０１３５】
続いて、ＲＡＩＤ制御部７が、ＤＭＡＣ＿Ｂ６を起動する（Ｓ１１４）。続いて、ＤＭＡＣ＿Ｂ６がディスクリプタをリードして、データ転送を開始する（Ｓ１１５）。以上の処理によってＢｃｈアクセス処理（Ｓ１１００）が実行される。
【０１３６】
●本実施形態の効果
以上説明のとおり、本実施形態に係る記憶媒体制御装置、記憶媒体制御方法及びプログラムによれば、複数の記憶媒体（ＨＤＤ＿Ａ１及びＨＤＤ＿Ｂ２）に記憶するデータを分割する際の「データ分割単位」を所定の条件に基づいて決定する。所定の条件とは例えば、複数の記憶媒体のうちのいずれか１つに関する平均回転待ち時間と平均実効転送速度に基づいて決定する条件である。この条件に基づいて、データ分割単位を決定する。より詳しくは、平均回転待ち時間の間に転送可能なデータサイズを元に、データ分割単位を決定する。
【０１３７】
このデータ分割単位の決定とともに、複数の記憶媒体のいずれか一方または両方に記憶する分散アクセスステップも実行する。
【０１３８】
この場合、実施形態にも示したとおり、いずれか一つの記憶媒体（回転磁気ディスク型の記憶媒体）の回転数が５４００ｒｐｍで平均実効転送速度が１００ＭＢｙｔｅ／ｓのとき、その値は約１１１２ｋＢｙｔｅになる。ここで、端数を切り下げるとデータ分割単位は１０２４ｋＢｙｔｅとして設定され、端数を切り上げるとデータ分割単位は２０４８ｋＢｙｔｅとして設定される。
【０１３９】
データ分割単位が１０２４ｋＢｙｔｅで設定された場合、５５６ｋＢｙｔｅ以下のデータアクセスであれば、１つの記憶媒体へのアクセスで済む確率が高くなり、２つの記憶媒体にアクセスする場合に比べてデータ転送時間が短縮される確率が高まる。なお、短縮される時間は、２つの記憶媒体の平均回転待ち時間の差分であって、応答が遅い側の記憶媒体を待つ時間に相当する。
【０１４０】
これによって、複数の記憶媒体をＲＡＩＤ０（ストライピング）構成にする場合、記憶媒体の使用方法に制限を加えることなく、複数の記憶媒体の間の平均待ち時間の差に起因する転送性能の低下を軽減できる。
【０１４１】
すなわち、複数のＨＤＤでストライピングを構成するシステムにおいて、上記の方法により一台のＨＤＤに分割記憶するデータサイズを決定することで、データサイズが小さい場合には、１台の記憶媒体へのアクセスでデータ転送が完結する確率を高くできる。また、データサイズが大きい場合には、複数台の記憶媒体へのアクセスを並列に実行することで高速化することができる。
【符号の説明】
【０１４２】
７  ＲＡＩＤ制御部
９  メモリ
１０  ＨＤＤ
７１  シーケンス制御部
７２  転送完了検出部
７３  ＳＡＴＡコマンド発行部
７４  ＤＭＡＣ制御部
７５  ディスクリプタリード部
７６  ディスクリプタ決定部
７７  ディスクリプタライト部
８０  ＣＰＵ
８１  割り込み制御部
１０００  電子機器
【先行技術文献】
【特許文献】
【０１４３】
【特許文献１】特開２０１５−００５１７８号公報
【図１】
2017162361.tif 000003
【図２】
2017162361.tif 000004
【図３】
2017162361.tif 000005
【図４】
2017162361.tif 000006
【図５】
2017162361.tif 000007
【図６】
2017162361.tif 000008
【図７】
2017162361.tif 000009
【図８】
2017162361.tif 000010
【図９】
2017162361.tif 000011
【図１０】
2017162361.tif 000012
【図１１】
2017162361.tif 000013
【図１２】
2017162361.tif 000014
【図１３】
2017162361.tif 000015
【図１４】
2017162361.tif 000016
【図１５】
2017162361.tif 000017
【図１６】
2017162361.tif 000018
【図１７】
2017162361.tif 000019
【図１８】
2017162361.tif 000020
【図１９】
2017162361.tif 000021
【図２０】
2017162361.tif 000022
【図２１】
2017162361.tif 000023