(57)【要約】【課題】複数のディスク装置でミラーリングを構成した場合に、読み込みを行うデータのサイズによらずに、ディスク装置からのデータの読み取り速度を高速化すること。【解決手段】  情報処理装置において、同一のデータが書き込まれた第１のディスク装置及び第２のディスク装置から、所定のデータの読み込みを行う際、前記所定のデータのサイズが所定の閾値以下であるか否かを判断する判断部と、前記閾値以下である場合、前記第１のディスク装置及び前記第２のディスク装置の同一のセクタから読み込みを行い、前記閾値以下でない場合、前記第１のディスク装置及び前記第２のディスク装置の異なるセクタから並行して読み込みを行う読み込み制御部と、を備えることで上記課題を解決する。【選択図】図１
2017016579.tif 000002
【特許請求の範囲】
【請求項１】
同一のデータが書き込まれた第１のディスク装置及び第２のディスク装置から、所定のデータの読み込みを行う際、前記所定のデータのサイズが所定の閾値以下であるか否かを判断する判断部と、
前記閾値以下である場合、前記第１のディスク装置及び前記第２のディスク装置の同一のセクタから読み込みを行い、前記閾値以下でない場合、前記第１のディスク装置及び前記第２のディスク装置の異なるセクタから並行して読み込みを行う読み込み制御部と、
を備える情報処理装置。
【請求項２】
前記第１のディスク装置及び前記第２のディスク装置に、同一のデータを書き込むことによりミラーリングを行う書き込み制御部を備える、請求項１記載の情報処理装置。
【請求項３】
前記読み込み制御部は、前記所定のデータのサイズが前記閾値以下の場合、前記第１のディスク装置及び前記第２のディスク装置の同一セクタからの読み込みを同時に指示し、前記第１のディスク装置及び前記第２のディスク装置のうち、先に読み込みが開始された方のディスク装置から、前記所定のデータの読み込みを行う、請求項１または２記載の情報処理装置。
【請求項４】
前記第１のディスク装置または前記第２のディスク装置の回転数と、前記第１のディスク装置または前記第２のディスク装置の平均データ転送速度とに応じた値を前記閾値として保持する閾値保持部を有する、
請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項５】
前記第１のディスク装置または前記第２のディスク装置の回転数と、前記第１のディスク装置または前記第２のディスク装置の前記所定のデータが記録されているセクタのデータ転送速度とに応じた値を前記閾値として保持する閾値保持部を有する、
請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項６】
前記読み込み制御部は、前記判断に応じた転送パラメータを生成し、前記転送パラメータに基づいてデータの読み込みを行う、請求項１乃至５のいずれか一項に記載の情報処理装置。
【請求項７】
前記読み込み制御部は、前記第１のディスク装置に応じた転送パラメータと、前記第２のディスク装置に応じた転送パラメータを作成し、メモリに記憶させることにより、前記第１のディスク装置及び前記第２のディスク装置の異なるセクタから並行して読み込みを行う、請求項６記載の情報処理装置。
【請求項８】
同一のデータが書き込まれた第１のディスク装置及び第２のディスク装置から、所定のデータの読み込みを行う際、前記所定のデータのサイズが所定の閾値以下であるか否かを判断する判断部と、
前記閾値以下である場合、前記第１のディスク装置及び前記第２のディスク装置の同一のセクタから読み込みを行い、前記閾値以下でない場合、前記第１のディスク装置及び前記第２のディスク装置の異なるセクタから並行して読み込みを行う読み込み制御部と、
を備える集積回路。
【請求項９】
同一のデータが書き込まれた第１のディスク装置及び第２のディスク装置から、所定のデータの読み込みを行う際、前記所定のデータのサイズが所定の閾値以下であるか否かを判断するステップと、
前記閾値以下である場合、前記第１のディスク装置及び前記第２のディスク装置の同一のセクタから読み込みを行い、前記閾値以下でない場合、前記第１のディスク装置及び前記第２のディスク装置の異なるセクタから並行して読み込みを行うステップと、
を備えるデータ読み込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、集積回路、及びデータ読み込み方法に関する。
【背景技術】
【０００２】
記録装置の信頼性、可用性を向上させるために、複数のＨＤＤ（Hard Disk Drive）等のディスク装置に同一のデータを書き込む技術が知られている。この技術は、ミラーリング、または、ＲＡＩＤ１（Redundant Arrays of Inexpensive Disks 1）とも呼ばれている。この技術では、複数のＨＤＤに同一のデータが書き込まれているため、複数のＨＤＤからの読み込みを平行して実施することで、読み込み速度の向上を図ることができる。
【０００３】
特許文献１には、リード対象範囲のうち、アドレスの異なる２つの記憶領域からのリードを平行して実行し、２つのディスク装置からのリードデータを合わせることで、約半分の時間でリードを実行する方法が開示されている。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、特許文献１記載の技術では、転送データ量が小さい場合、実転送時間に対して、２台のＨＤＤの回転待ち時間やシーク時間の相違の方が大きくなり（遅い方のＨＤＤを待つ時間が長くなり）、２台のＨＤＤから並行してリードした方が、１台のＨＤＤのみからリードするよりも遅くなる確率が高くなる。
【０００５】
そこで、複数のディスク装置でミラーリングを構成した場合に、読み込みを行うデータのサイズによらずに、ディスク装置からのデータの読み取り速度を高速化することを目的とする。
【課題を解決するための手段】
【０００６】
情報処理装置において、同一のデータが書き込まれた第１のディスク装置及び第２のディスク装置から、所定のデータの読み込みを行う際、前記所定のデータのサイズが所定の閾値以下であるか否かを判断する判断部と、前記閾値以下である場合、前記第１のディスク装置及び前記第２のディスク装置の同一のセクタから読み込みを行い、前記閾値以下でない場合、前記第１のディスク装置及び前記第２のディスク装置の異なるセクタから並行して読み込みを行う読み込み制御部と、を備える。
【発明の効果】
【０００７】
開示の技術によれば、複数のディスク装置でミラーリングを構成した場合に、読み込みを行うデータのサイズによらずに、ディスク装置からのデータの読み取り速度を高速化することが可能となる。
【図面の簡単な説明】
【０００８】
【図１】実施形態に係る情報処理装置の構成図である。
【図２】ＲＡＩＤ１制御部の構成図である。
【図３】ＣＰＵから見たメモリマップの一例を示す図である。
【図４】リードデータサイズ大の場合の設定処理を行う際のディスクリプタのメモリマップの一例を示す図である。
【図５】リードデータサイズ小の場合の設定処理を行う際のディスクリプタのメモリマップの一例を示す図である。
【図６】ライトの場合の設定処理を行う際のディスクリプタのメモリマップの一例を示す図である。
【図７Ａ】情報処理装置の処理のフローチャートである。
【図７Ｂ】情報処理装置の処理のフローチャートである。
【発明を実施するための形態】
【０００９】
図１は、実施形態に係る情報処理装置１の構成図である。情報処理装置１は、例えば、複合機（ＭＦＰ）、コピー機、コンピュータなどである。
【００１０】
情報処理装置１は、複数のディスク装置（例えばＨＤＤ）を用いてミラーリングを行い、同一のデータが書き込まれた複数のディスク装置から所定のデータの読み込みを行う際、当該所定のデータのサイズが所定の閾値以下であるか否かを判断する。そして、閾値以下である場合は、複数のディスク装置の同一のセクタから読み込みを行い、閾値以下でない場合は、複数のディスク装置の異なるセクタから並行して読み込みを行う。それにより、読み込みを行うデータのサイズによらずに、ディスク装置からのデータの読み取り速度を高速化する。
【００１１】
情報処理装置１は、ＣＰＵ１０、割り込み制御部１１、メモリ２０、複数のＨＤＤ３０−１、３０−２（以下で適宜「ＨＤＤ３０」と総称する）、複数のＳＡＴＡ制御部４０−１、４０−２（以下で適宜「ＳＡＴＡ制御部４０」と総称する）、複数のＤＭＡＣ５０−１、５０−２（以下で適宜「ＤＭＡＣ５０」と総称する）、ＲＡＩＤ１制御部６０を有する。なお、実施形態ではＨＤＤ３０、ＳＡＴＡ制御部４０、ＤＭＡＣ５０をそれぞれ２つ有する場合の例を説明するが、ＨＤＤ３０、ＳＡＴＡ制御部４０、ＤＭＡＣ５０をそれぞれ３つ以上有する構成としてもよい。
【００１２】
なお、以下では、複数のＨＤＤ３０、ＳＡＴＡ制御部４０、及びＤＭＡＣ５０のうち、ＨＤＤ３０−１、ＳＡＴＡ制御部４０−１、ＤＭＡＣ５０−１の方をＡチャネル（ｃｈ）、他方のＨＤＤ３０−２、ＳＡＴＡ制御部４０−２、ＤＭＡＣ５０−２の方をＢチャネルと称する。
【００１３】
ＤＭＡＣ５０−１、５０−２と、ＲＡＩＤ１制御部６０との間は、それぞれ、ＤＭＡＣ−ＩＦ６０３、６０４で接続される。
【００１４】
ＣＰＵ１０は、各機能モジュールの設定を実行し、システムのメイン制御を実行する。
【００１５】
ＣＰＵ１０は、ＨＤＤ３０−１、３０−２にアクセスし、データのライト（書き込み）／リード（読み込み）をする場合、転送パラメータをＣＰＵ作成ディスクリプタ２２としてメモリ２０に記憶し、ＲＡＩＤ１制御部６０に転送開始を指示する。
【００１６】
ＣＰＵ１０は、割り込み制御部１１から割り込み発生を通知されると、データのライト／リードが完了したと判断する。
【００１７】
割り込み制御部１１は、ＲＡＩＤ１制御部６０からの割り込み信号受信し、ＣＰＵ１０に割り込み発生を通知する。
【００１８】
メモリ２０は、各機能モジュールのワーク領域として使用され、ＨＤＤ３０へライトするデータ及びＨＤＤ３０からリードしたデータを記憶する転送データ領域２１や、後述するＣＰＵ作成ディスクリプタ２２、Ａチャネル用ディスクリプタ２３、Ｂチャネル用ディスクリプタ２４の作成領域等で使用される。
【００１９】
ＨＤＤ３０−１、３０−２は、例えばＨＤＤ（Hard Disk Drive）等のディスク装置（ディスクドライブ）を用いた補助記憶装置である。ＨＤＤ３０−１、３０−２は、例えばＳＡＴＡ（Serial ATA）等の規格に準拠し、ＯＳ（Operating System）、アプリケーションプログラム等の記憶、及び処理データの一時記憶等に使用する。ＨＤＤ３０−１、３０−２には、同一の内容が記録され、ミラーリングに使用される。
【００２０】
ＳＡＴＡ制御部４０−１、４０−２は、それぞれＨＤＤ３０−１、３０−２のデータライト／データリードを実行する。ＳＡＴＡ制御部４０−１、４０−２は、例えばＳＡＴＡ規格に準拠したデバイスを制御するためのＳＡＴＡホストコントローラ機能を備える。なお、ＳＡＴＡのコマンド設定や、ステータス情報の取得は、後述するＲＡＩＤ１制御部６０を経由して実行される。
【００２１】
ＤＭＡＣ５０−１は、例えばＤＭＡＣ（Direct Memory Access Controller）機能を備える。ＤＭＡＣ５０−１は、ＲＡＩＤ１制御部６０から設定された情報に従って、ＲＡＩＤ１制御部６０とＳＡＴＡ制御部４０−１との間のデータ転送を実行する。
【００２２】
具体的には、ＤＭＡＣ５０−１は、ＲＡＩＤ１制御部６０から、参照すべきディスクリプタを記憶したメモリの先頭アドレスを、ＤＭＡＣ５０−１の内部に設定された後、ＲＡＩＤ１制御部６０から起動される。ＤＭＡＣ５０−１は、起動されると、ＤＭＡＣ−ＩＦ６０３を経由して、ＲＡＩＤ１制御部６０により設定されたディスクリプタの先頭アドレスからディスクリプタサイズ分のデータをリードする。そして、ＤＭＡＣ５０−１は、リードしたディスクリプタに記述された転送パラメータに従ってデータ転送を実行する。
【００２３】
ＤＭＡＣ５０−２は、ＤＭＡＣ５０−１と同様であり、ＲＡＩＤ１制御部６０とＳＡＴＡ制御部４０−２との間のデータ転送を実行する。
【００２４】
ＲＡＩＤ１制御部６０は、例えばＡＳＩＣ（Application Specific Integrated Circuit）等の集積回路として実装される。
【００２５】
ＲＡＩＤ１制御部６０は、閾値保持部６１、ディスクリプタ決定部６９等を有する。ディスクリプタ決定部６９は、判断部６９１、読み込み制御部６９２、書き込み制御部６９３を有する。
【００２６】
判断部６９１は、ＨＤＤ３０−１、３０−２から、所定のデータの読み込みを行う際、前記所定のデータのサイズが閾値保持部６１に保持された閾値以下であるか否かを判断する。
【００２７】
読み込み制御部６９２は、判断部６９１により閾値以下と判断された場合、ＨＤＤ３０−１、３０−２の同一のセクタから読み込みを行い、閾値以下でないと判断された場合、ＨＤＤ３０−１、３０−２の異なるセクタから並行して読み込みを行う。
【００２８】
書き込み制御部６９３は、ＨＤＤ３０−１、３０−２に、同一のデータが書き込むことによりミラーリングを行う。
【００２９】
以下に、ＲＡＩＤ１制御部６０をより詳細に説明する。なお、ディスクリプタ決定部６９等の詳細は後述する。
【００３０】
ＲＡＩＤ１制御部６０は、ＨＤＤ３０−１及びＨＤＤ３０−２に、同一のデータが記憶されるようにＨＤＤ３０−１及びＨＤＤ３０−２とのデータ転送を制御する。ＲＡＩＤ１制御部６０により、ＣＰＵ１０は、通常、ＨＤＤ３０−１とＨＤＤ３０−２の区別をせずにアクセスすることができる。
【００３１】
ＲＡＩＤ１制御部６０は、ディスクリプタ用ＭＥＭ−ＩＦ６０５を経由して、ＣＰＵ１０により作成されたＣＰＵ作成ディスクリプタ２２にアクセスする。
【００３２】
ＲＡＩＤ１制御部６０は、ＤＭＡＣ５０−１、５０−２が参照すべきディスクリプタを記憶したメモリの先頭アドレスを、それぞれＤＭＡＣ５０−１、５０−２の内部に設定しておき、ＤＭＡＣ５０−１、５０−２を起動する。
【００３３】
ＲＡＩＤ１制御部６０は、ＨＤＤ３０へライトする場合、及び少量のデータをＨＤＤ３０からリードする場合、Ａチャネル用ディスクリプタ２３、及びＢチャネル用ディスクリプタ２４は作成せずに、ＣＰＵ作成ディスクリプタ２２をＡチャネル及びＢチャネル共通で参照するように、ＳＡＴＡ制御部４０−１、４０−２、ＤＭＡＣ５０−１、５０−２の設定を行う。
【００３４】
ＲＡＩＤ１制御部６０は、大量の（データサイズが閾値以下でない）データをＨＤＤ３０からリードする場合は、ＤＭＡＣ５０−１及びＤＭＡＣ５０−２が、異なる領域（セクタ）に同時並行でアクセスできるように、Ａチャネル用ディスクリプタ２３、及び、Ｂチャネル用ディスクリプタ２４を作成し、ＳＡＴＡ制御部４０−１、４０−２、ＤＭＡＣ５０−１、５０−２の設定を行う。そして、ＲＡＩＤ１制御部６０は、ＤＭＡＣ−ＩＦ６０３を経由してＨＤＤ３０−１からリードしたデータを、ＤＭＡＣ用ＭＥＭ−ＩＦ６０１を経由して、メモリ２０の転送データ領域２１にライトする。ＤＭＡＣ−ＩＦ６０４を経由してＨＤＤ３０−２からリードしたデータは、ＤＭＡＣ用ＭＥＭ−ＩＦ６０２を経由して、メモリ２０の転送データ領域２１にライトする。
【００３５】
ＲＡＩＤ１制御部６０は、少量の（データサイズが閾値以下である）データをＨＤＤ３０からリードする場合は、ＤＭＡＣ−ＩＦ６０３を経由するデータと、ＤＭＡＣ−ＩＦ６０４を経由するデータのうち、先にデータが有効になった方（先にデータ転送が開始された方）のデータを、ＤＭＡＣ用ＭＥＭ−ＩＦ６０１を経由して、データ転送が完了するまで継続して、メモリ２０の転送データ領域２１にライトする。もう一方のデータ転送開始が遅かった方のデータは、ＲＡＩＤ１制御部６０の内部で読み捨てる。
【００３６】
ＲＡＩＤ１制御部６０は、ＨＤＤ３０へライトする場合、ＤＭＡＣ用ＭＥＭ−ＩＦ６０１を経由してリードしたデータを、ＤＭＡＣ−ＩＦ６０３とＤＭＡＣ−ＩＦ６０４を経由して、ＨＤＤ３０−１とＨＤＤ３０−２に転送する。このとき、ＤＭＡＣ−ＩＦ６０３とＤＭＡＣ−ＩＦ６０４を経由して送信するデータは同一であり、ＲＡＩＤ１制御部６０は、ＤＭＡＣ５０−１とＤＭＡＣ５０−２の両方がデータ受信可能になることを待って、データ転送を開始する。
【００３７】
ＲＡＩＤ１制御部６０は、転送完了時、ＳＡＴＡ制御部４０−１、４０−２、ＤＭＡＣ５０−１、５０−２の転送完了信号がアサート（発生）したことを確認（検知）して、割り込み制御部１１に割り込み信号をアサートする。具体的には、次のような処理を行う。
【００３８】
大量のデータをＨＤＤ３０からリードした場合、及びＨＤＤ３０にライトした場合、ＳＡＴＡ制御部４０−１、４０−２、ＤＭＡＣ５０−１、５０−２の転送完了信号が全てアサートしたことを確認して、割り込み信号をアサートする。 
少量のデータをＨＤＤ３０からリードした場合、転送データが先に開始した方のチャネルのＳＡＴＡ転送完了信号とＤＭＡ転送完了信号の両方がアサートしたことを確認して、割り込み信号をアサートする。
【００３９】
なお、ＣＰＵ１０は、転送パラメータ以外のＳＡＴＡ制御部４０−１、４０−２、ＤＭＡＣ５０−１、５０−２の設定を実行する場合にも、ＲＡＩＤ１制御部６０を経由して、設定データを転送する。
【００４０】
＜ＲＡＩＤ１制御部の詳細＞
次に、図２を参照して、ＲＡＩＤ１制御部６０の詳細について説明する。図２は、ＲＡＩＤ１制御部６０の構成図である。
【００４１】
ＲＡＩＤ１制御部６０は、閾値算出部６１１、閾値保持部６１、シーケンス制御部６２、ＳＡＴＡコマンド発行部６３、ＤＭＡＣ制御部６４、データ転送経路制御部６５、転送完了検出部６６、ディスクリプタライト部６７、ディスクリプタリード部６８、ディスクリプタ決定部６９を有する。
【００４２】
閾値算出部６１１は、リードデータサイズが大きいか、小さいかを判定するリードデータサイズ判定閾値を算出し、閾値保持部６１に設定する。
【００４３】
閾値算出部６１１は、ＨＤＤ３０−１またはＨＤＤ３０−２の回転数と平均データ転送速度に基づいて、リードデータサイズ判定閾値を算出する。例えば、回転数から平均回転待ち時間を算出し、平均回転待ち時間の間に転送可能な平均データサイズを算出して、リードデータサイズ判定閾値とする。その場合、例えばＨＤＤ３０の回転数が５４００ｒｐｍ、平均データ転送速度（平均内部転送速度）が１００ＭＢｙｔｅ／ｓであれば、［（６０ｓ／５４００回転）／２］×１００ＭＢｙｔｅ／ｓ≒５５６ｋＢｙｔｅと算出して閾値とする。
【００４４】
なお、ＨＤＤ３０−１、３０−２の回転数は、ＨＤＤ３０−１、３０−２から値を取得する構成としてもよい。平均データ転送速度は、ＨＤＤ３０−１、３０−２から値を取得する構成としても、ＨＤＤ３０−１、３０−２の全セクタの読み込みを行い、全セクタのデータ量を全セクタの読み込みに要した時間で除算して算出する構成としてもよい。
【００４５】
なお、読み込みを行うセクタが外周トラックに位置する場合は、転送速度が早くなり、平均回転待ち時間の間に転送できるデータ量が増加する。そのため、閾値算出部６１１は、ＣＰＵ１０から、転送開始を指示された際、例えば図７ＡのステップＳ１０６でＨＤＤリードを指示された際に、予め取得しているＨＤＤ３０−１またはＨＤＤ３０−２の回転数と、ＣＰＵ１０から指示された読み込みを行うセクタのデータ転送速度に基づいて、リードデータサイズ判定閾値を算出する構成としてもよい。例えば、ＨＤＤ３０の平均回転待ち時間の間に読み込みを行うセクタから転送可能なデータサイズを算出して、リードデータサイズ判定閾値とする。
【００４６】
なお、セクタ毎のデータ転送速度は、例えば、ＨＤＤ３０−１、３０−２の各セクタの読み込みを行い、当該セクタのデータ量（例えば５１２Ｂｙｔｅ）を、当該セクタの読み込みに要した時間で除算して算出する構成としてもよい。また、複数のセクタをまとめてエリアとし、当該エリアのデータ量を当該エリアの読み込みに要した時間で除算して算出する構成としてもよい。
【００４７】
閾値保持部６１は、閾値算出部６１１が算出したリードデータサイズ判定閾値を記憶（保持）する。リードデータサイズ判定閾値は、ディスクリプタ決定部６９により参照される。なお、リードデータサイズ判定閾値は、閾値算出部６１１が算出する代わりに、ＣＰＵ１０が、例えばＨＤＤ３０に格納されたアプリケーションのプログラムを実行することにより算出し、閾値保持部６１に記憶させる構成としてもよい。あるいは、リードデータサイズ判定閾値は、ＣＰＵ１０が、ユーザから入力されたデータに基づいて閾値保持部６１に記憶させる構成としてもよい。
【００４８】
シーケンス制御部６２は、ＣＰＵ１０からの指示と、各モジュール（転送完了検出部６６、ＳＡＴＡコマンド発行部６３、ＤＭＡＣ制御部６４、データ転送経路制御部６５、ディスクリプタリード部６８、ディスクリプタ決定部６９、ディスクリプタライト部６７）からの信号を参照して、ＨＤＤ３０へのアクセスを制御する。
【００４９】
ＳＡＴＡコマンド発行部６３は、ディスクリプタ決定部６９からの設定に従って、ＳＡＴＡ制御部４０−１、４０−２にアクセスし、ＳＡＴＡ制御部４０−１、４０−２にコマンド発行を促し、ＨＤＤ３０へのアクセスを開始させる。また、ＳＡＴＡコマンド発行部６３は、ＣＰＵ１０から、シーケンス制御部６２を経由して、ＳＡＴＡ制御部４０−１、４０−２にアクセス可能とする。
【００５０】
ＤＭＡＣ制御部６４は、ＤＭＡＣ５０−１、５０−２を制御する。ＤＭＡＣ制御部６４は、ディスクリプタ決定部６９から送信されるＤＭＡＣ５０−１が参照するディスクリプタアドレスを受信すると、ＤＭＡＣ５０−１に、受信したディスクリプタアドレス値を設定する。ＤＭＡＣ５０−２が参照するディスクリプタアドレスを受信すると、ＤＭＡＣ５０−２に対し、受信したディスクリプタアドレス値を設定する。また、シーケンス制御部６２から、ＤＭＡＣ５０−１の起動信号を受信すると、ＤＭＡＣ５０−１を起動する。ＤＭＡＣ５０−２の起動信号を受信すると、ＤＭＡＣ５０−２を起動する。
【００５１】
データ転送経路制御部６５は、ＤＭＡＣ用ＭＥＭ−ＩＦ６０１及びＤＭＡＣ用ＭＥＭ−ＩＦ６０２と、ＤＭＡＣ−ＩＦ６０３及びＤＭＡＣ−ＩＦ６０４とのデータ転送経路を制御する。データ転送経路制御部６５は、ディスクリプタ決定部６９からの設定に従って、データ転送経路を次のように切り替える。
【００５２】
大量のデータをＨＤＤ３０からリードする場合には、ＤＭＡＣ−ＩＦ６０３のデータをＤＭＡＣ用ＭＥＭ−ＩＦ６０１に渡し、ＤＭＡＣ−ＩＦ６０４のデータをＤＭＡＣ用ＭＥＭ−ＩＦ６０２に渡す。
【００５３】
小量のデータをＨＤＤ３０からリードする場合には、ＤＭＡＣ−ＩＦ６０３を経由するデータと、ＤＭＡＣ−ＩＦ６０４を経由するデータのうち、先にデータが有効になった方（先にデータ転送が開始された方）のデータを、ＤＭＡＣ用ＭＥＭ−ＩＦ６０１に渡し、もう一方のデータ転送開始が遅かった方のデータは読み捨てる。そして、データ転送経路制御部６５は、ＡチャネルとＢチャネルのうち、どちらからのデータが先に有効になったかを、先行チャネル情報として出力し、先に有効になった方のチャネルを、転送完了検出部６６へ通知する。
【００５４】
転送完了検出部６６は、それぞれＳＡＴＡ制御部４０−１、ＳＡＴＡ制御部４０−２、ＤＭＡＣ５０−１、ＤＭＡＣ５０−２の転送完了信号である、ＳＡＴＡ転送完了信号Ａ、ＳＡＴＡ転送完了信号Ｂ、ＤＭＡ転送完了信号Ａ、ＤＭＡ転送完了信号Ｂを受信する。そして、ディスクリプタ決定部６９からの設定と、データ転送経路制御部６５が出力する先行チャネル情報に従って転送完了を検出し、転送完了をシーケンス制御部６２に通知する。
【００５５】
具体的には、転送完了検出部６６は、ＨＤＤ３０にライトする場合と、大量のデータをＨＤＤ３０からリードする場合は、ＤＭＡ転送完了信号Ａ、ＳＡＴＡ転送完了信号Ａ、ＤＭＡ転送完了信号Ｂ、及びＳＡＴＡ転送完了信号Ｂが全てアサートしたことを確認した後に、転送完了をシーケンス制御部６２に通知する。
【００５６】
転送完了検出部６６は、小量のデータをＨＤＤ３０からリードする場合は、データ転送経路制御部６５が出力する先行チャネル情報に従って、次のように転送完了を検出する。先行チャネル情報がＡチャネルを示していた場合には、ＤＭＡ転送完了信号ＡとＳＡＴＡ転送完了信号Ａが両方アサートしたことを確認した後に、転送完了をシーケンス制御部６２に通知する。先行チャネル情報がＢチャネルを示していた場合には、ＤＭＡ転送完了信号ＢとＳＡＴＡ転送完了信号Ｂが両方アサートしたことを確認した後に、転送完了をシーケンス制御部６２に通知する。
【００５７】
ディスクリプタライト部６７は、ディスクリプタ決定部６９で決定したディスクリプタを、メモリ２０にライトする。具体的には、ディスクリプタライト部６７は、ディスクリプタ決定部６９から、Ａチャネル用ディスクリプタ２３とＢチャネル用ディスクリプタ２４の内容を受信すると、ディスクリプタ用ＭＥＭ−ＩＦ６０５経由で、メモリ２０にアクセスする。そして、ディスクリプタライト部６７は、ＣＰＵ１０から設定され、ディスクリプタ決定部６９から送信されたそれぞれのメモリアドレスに、Ａチャネル用ディスクリプタ２３と、Ｂチャネル用ディスクリプタ２４を作成し、作成が完了したことをシーケンス制御部６２に通知する。ディスクリプタライト部６７は、ディスクリプタ決定部６９から、新たなディスクリプタ作成が不要であることを通知された場合には、ディスクリプタ作成が不要であることをシーケンス制御部６２に通知する。
【００５８】
ディスクリプタリード部６８は、ＣＰＵ作成ディスクリプタ２２をリードし、その内容をディスクリプタ決定部６９に送信する。具体的には、次のような処理を行う。
【００５９】
ディスクリプタリード部６８は、ＣＰＵ１０から、シーケンス制御部６２経由で、ＣＰＵ作成ディスクリプタ２２の先頭メモリアドレスを、ディスクリプタリード部６８の内部に設定される。ディスクリプタリード部６８は、シーケンス制御部６２から起動信号を受信すると、内部に設定されたＣＰＵ作成ディスクリプタ２２の先頭メモリアドレスにディスクリプタ用ＭＥＭ−ＩＦ６０５経由でアクセスする。そして、ディスクリプタサイズ分のデータをリードし、リードしたＣＰＵ作成ディスクリプタ２２をディスクリプタ決定部６９へ送信する。また、ディスクリプタリード部６８は、ＣＰＵ作成ディスクリプタ２２の先頭メモリアドレスも、ディスクリプタ決定部６９へ送信する。
【００６０】
ディスクリプタ決定部６９は、ＣＰＵ１０から、シーケンス制御部６２経由で設定された、Ａチャネル用ディスクリプタ２３と、Ｂチャネル用ディスクリプタ２４を作成するメモリアドレスの値を、内部に記憶する。
【００６１】
ディスクリプタ決定部６９は、ディスクリプタリード部６８からＣＰＵ作成ディスクリプタ２２の内容を受信すると動作を開始し、ディスクリプタリード部６８から受信した情報と、閾値保持部６１の情報に基づいて、実際にＨＤＤ３０へのアクセスで使用する転送パラメータを決定する。
【００６２】
＜リードデータサイズ大の場合の設定処理＞
ディスクリプタ決定部６９は、ＣＰＵ作成ディスクリプタ２２に設定された転送方向が、ＨＤＤ３０からリードしてメモリ２０にライトする場合、判断部６９１にて、転送データサイズと、閾値保持部６１に設定された閾値とを比較する。
【００６３】
そして、ディスクリプタ決定部６９は、転送データサイズが閾値保持部６１に設定された閾値よりも大きい場合は、読み込み制御部６９２を用いて、以下のリードデータサイズ大の場合の設定処理を行う。
【００６４】
ディスクリプタ決定部６９は、Ａチャネル用ディスクリプタ２３とＢチャネル用ディスクリプタ２４の内容を決定する。そして、ディスクリプタ決定部６９は、Ａチャネル用ディスクリプタ２３とＢチャネル用ディスクリプタ２４のメモリアドレスと、決定した内容を、ディスクリプタライト部６７に送信する。
【００６５】
ディスクリプタ決定部６９は、ＳＡＴＡコマンド発行部６３、ＤＭＡＣ制御部６４、データ転送経路制御部６５、転送完了検出部６６に、決定したディスクリプタの内容に従った動作モードを設定する。
【００６６】
ディスクリプタ決定部６９は、ＳＡＴＡコマンド発行部６３に、以下の設定を行う。
【００６７】
Ａチャネルのリード開始セクタアドレスとして、ＣＰＵ作成ディスクリプタ２２に設定されたリード開始セクタアドレスと同じ値を設定する。
【００６８】
Ａチャネルのリードセクタ数として、ＣＰＵ作成ディスクリプタ２２に設定されたリードセクタ数の半分の値を設定する。
【００６９】
ＡチャネルのＳＡＴＡコマンドとしてＣＰＵ作成ディスクリプタ２２に設定されたリードコマンドと同じ値を設定する。
【００７０】
Ｂチャネルのリード開始セクタアドレスとして、ＣＰＵ作成ディスクリプタ２２に設定されたリード開始セクタアドレスに、Ａチャネルに設定したリードセクタ数を加算し、さらに１を加算した値を設定する。
【００７１】
Ｂチャネルのリードセクタ数として、ＣＰＵ作成ディスクリプタ２２に設定されたリードセクタ数から、Ａチャネルに設定したリードセクタ数を減算した値を設定する。
【００７２】
ＢチャネルのＳＡＴＡコマンドとしてＣＰＵ作成ディスクリプタ２２に設定されたリードコマンドと同じ値を設定する。
【００７３】
ＣＰＵ作成ディスクリプタ２２に設定されたリードセクタ数が奇数の場合は、Ａチャネルに設定するリードセクタ数は、２で割ったときの余りを切り捨てた値を設定する。それにより、Ａチャネルのリードセクタ数は偶数、Ｂチャネルのリードセクタ数は奇数となる。
【００７４】
ディスクリプタ決定部６９は、ＤＭＡＣ制御部６４に、ＤＭＡＣ５０−１が参照するディスクリプタアドレスとして、Ａチャネル用ディスクリプタ２３を作成するメモリアドレス値を送信する。また、ＤＭＡＣ５０−２が参照するディスクリプタアドレスとして、Ｂチャネル用ディスクリプタ２４を作成するメモリアドレス値を送信する。
【００７５】
ディスクリプタ決定部６９は、データ転送経路制御部６５に、ＤＭＡＣ−ＩＦ６０３のデータをＤＭＡＣ用ＭＥＭ−ＩＦ６０１に渡し、ＤＭＡＣ−ＩＦ６０４のデータをＤＭＡＣ用ＭＥＭ−ＩＦ６０２に渡す動作をするように設定する。
【００７６】
ディスクリプタ決定部６９は、転送完了検出部６６に、ＳＡＴＡ転送完了信号Ａ、ＳＡＴＡ転送完了信号Ｂ、ＤＭＡ転送完了信号Ａ、及びＤＭＡ転送完了信号Ｂの全てがアサートした場合に、転送完了を検出するように設定する。
【００７７】
＜リードデータサイズ小の場合の設定処理＞
ディスクリプタ決定部６９は、判断部６９１にて、転送データサイズと、閾値保持部６１に設定された閾値とを比較し、転送データサイズが閾値保持部６１に設定された閾値以下の場合は、読み込み制御部６９２を用いて、以下のリードデータサイズ小の場合の設定処理を行う。
【００７８】
ディスクリプタ決定部６９は、ディスクリプタライト部６７に、新たなディスクリプタ作成が不要であることを通知する。
【００７９】
ディスクリプタ決定部６９は、ＳＡＴＡコマンド発行部６３、ＤＭＡＣ制御部６４、データ転送経路制御部６５、転送完了検出部６６に、ＣＰＵ作成ディスクリプタ２２の内容に従った動作モードを設定する。
【００８０】
具体的には、ディスクリプタ決定部６９は、ＳＡＴＡコマンド発行部６３に、Ａチャネル及びＢチャネルのリード開始セクタアドレス、リードセクタ数、ＳＡＴＡコマンドとして、それぞれ、ＣＰＵ作成ディスクリプタ２２に設定されたリード開始セクタアドレス、リードセクタ数、リードコマンドの値を設定する。それにより、ＡチャネルとＢチャネルは同じ（同一の）設定となる。
【００８１】
ディスクリプタ決定部６９は、ＤＭＡＣ制御部６４に、ＤＭＡＣ５０−１とＤＭＡＣ５０−２が参照するディスクリプタアドレスとして、ＣＰＵ作成ディスクリプタ２２の先頭メモリアドレス値を送信する。
【００８２】
ディスクリプタ決定部６９は、データ転送経路制御部６５に、ＤＭＡＣ−ＩＦ６０３を経由するデータ及びＤＭＡＣ−ＩＦ６０４を経由するデータのうち、先に有効になった方（先にデータ転送が開始された方）のデータをＤＭＡＣ用ＭＥＭ−ＩＦ６０１に渡し、もう一方（データ転送開始が遅かった方）のデータは読み捨てるように設定する。
【００８３】
ディスクリプタ決定部６９は、転送完了検出部６６に、データ転送経路制御部６５が出力する先行チャネル情報に従って、ＡチャネルとＢチャネルのうち、先に有効になった方のチャネルの転送完了を検出するように設定する。
【００８４】
＜ライトの場合の設定処理＞
ディスクリプタ決定部６９は、ＣＰＵ作成ディスクリプタ２２に設定された転送方向が、メモリ２０からリードし、ＨＤＤ３０にライトする場合は、書き込み制御部６９３を用いて、以下のライトの場合の設定処理を行う。
【００８５】
ディスクリプタ決定部６９は、ディスクリプタライト部６７に、新たなディスクリプタ作成が不要であることを通知する。
【００８６】
ディスクリプタ決定部６９は、ＳＡＴＡコマンド発行部６３、ＤＭＡＣ制御部６４、データ転送経路制御部６５、転送完了検出部６６に、ＣＰＵ作成ディスクリプタ２２の内容に従った動作モードを設定する。
【００８７】
具体的には、ディスクリプタ決定部６９は、ＳＡＴＡコマンド発行部６３に、Ａチャネル及びＢチャネルのリード開始セクタアドレス、リードセクタ数、ＳＡＴＡコマンドとして、それぞれ、ＣＰＵ作成ディスクリプタ２２に設定されたリード開始セクタアドレス、リードセクタ数、リードコマンドの値を設定する。それにより、ＡチャネルとＢチャネルは同じ設定となる。
【００８８】
ディスクリプタ決定部６９は、ＤＭＡＣ制御部６４に、ＤＭＡＣ５０−１とＤＭＡＣ５０−２が参照するディスクリプタアドレスとして、ＣＰＵ作成ディスクリプタ２２の先頭メモリアドレス値を送信する。
【００８９】
ディスクリプタ決定部６９は、データ転送経路制御部６５に、ＤＭＡＣ用ＭＥＭ−ＩＦ６０１のデータを、ＤＭＡＣ−ＩＦ６０３とＤＭＡＣ−ＩＦ６０４に渡す動作をするように設定する。
【００９０】
ディスクリプタ決定部６９は、転送完了検出部６６に、ＳＡＴＡ転送完了信号Ａ、ＳＡＴＡ転送完了信号Ｂ、ＤＭＡ転送完了信号Ａ、及びＤＭＡ転送完了信号Ｂの全てがアサートした場合に、転送完了を検出するように設定する。
【００９１】
次に、図３を参照し、ＣＰＵ１０から見たメモリ２０のメモリマップについて説明する。図３は、ＣＰＵから見たメモリマップの一例を示す図である。図３に示す例では、以下のようにアドレスを割り当てる。
【００９２】
システム制御レジスタ領域９８００は、ＣＰＵ１０の動作モード等を設定する領域であり、0x0008_0000〜0x000F_FFFFのアドレスを割り当てる。
【００９３】
ＲＡＩＤ１制御部レジスタ領域９７００は、閾値保持部６１、ディスクリプタアドレスの設定部等、ＲＡＩＤ１制御部６０の動作モードを設定するレジスタを割り当てている。また、ＲＡＩＤ１制御部レジスタ領域９７００は、ＳＡＴＡ制御部４０−１、ＳＡＴＡ制御部４０−２、ＤＭＡＣ５０−１、ＤＭＡＣ５０−２のように、ＲＡＩＤ１制御部６０を経由して各種設定を実施するモジュールのレジスタを割り当てている。ＲＡＩＤ１制御部レジスタ領域９７００には、例えば0x0020_0000〜0x0020_7FFFのアドレスを割り当てる。
【００９４】
メモリ領域９９００は、メモリ２０の記憶領域を割り当てており、実施形態では、転送データ領域２１（0x1000_0000〜0x2FFF_FFFF）、ＣＰＵ作成ディスクリプタ２２の記憶領域（0x3000_0000〜0x3000_0FFF）、ＲＡＩＤ１制御部６０が作成するＡチャネル用ディスクリプタの記憶領域（0x3000_1000〜0x3000_1FFF）、ＲＡＩＤ１制御部６０が作成するＢチャネル用ディスクリプタの記憶領域（0x3000_2000〜0x3000_2FFF）として使用する。
【００９５】
次に、図４を参照し、上述したリードデータサイズ大の場合の設定処理を行う際のディスクリプタのメモリマップについて説明する。図４は、リードデータサイズ大の場合の設定処理を行う際のディスクリプタのメモリマップの一例を示す図である。
【００９６】
図４（Ａ）は、ＣＰＵ作成ディスクリプタ２２のメモリマップの一例であり、以下のようにアドレスを割り当てる。
【００９７】
ＣＰＵ作成ディスクリプタ２２を５６Ｂｙｔｅとし、0x3000_0000〜3000_001Bのアドレスに記憶する。このＣＰＵ作成ディスクリプタ２２において、以下のようなデータを記憶する。
【００９８】
転送方向設定領域９０１は、ＨＤＤ３０からのリード／ライト方向を設定する。図４（Ａ）に示す例では、ＨＤＤ３０からリードしたデータをメモリ２０にライトする設定としている。
【００９９】
次ディスクリプタアドレス設定領域９０２は、ディスクリプタチェイン動作をするときに使用する領域で、本ディスクリプタに設定した動作が完了後、次の動作パラメータを記述したディスクリプタの先頭アドレスを記憶している。
【０１００】
転送データ記憶メモリ領域の先頭アドレス設定領域９０３は、ＨＤＤ３０からリードしたデータを記憶するメモリ領域の先頭アドレスを記憶している。
【０１０１】
転送データサイズ設定領域９０４は、ＨＤＤ３０からリードするデータのサイズを記憶している。
【０１０２】
ＳＡＴＡコマンド設定領域９０５は、ＨＤＤ３０に対して発行するＳＡＴＡコマンドを記憶している。
【０１０３】
先頭セクタアドレス設定領域９０６は、ＨＤＤ３０からリードする先頭データが記憶してあるセクタのアドレスを記憶している。
【０１０４】
転送セクタ数設定領域９０７は、ＨＤＤ３０からリードするデータサイズをセクタ数で設定している。
【０１０５】
図４（Ｂ）は、ＲＡＩＤ１制御部６０が作成するＡチャネル用ディスクリプタ２３のメモリマップの一例であり、以下のようにアドレスを割り当てる。
【０１０６】
ＲＡＩＤ１制御部６０が作成するＡチャネル用ディスクリプタ２３を５６Ｂｙｔｅとし、0x3000_1000〜3000_101Bのアドレスに記憶する。このＡチャネル用ディスクリプタ２３において、以下のようなデータを記憶する。
【０１０７】
転送方向設定領域９１１は、ＣＰＵ作成ディスクリプタ２２と同じ設定とする。
【０１０８】
次ディスクリプタアドレス設定領域９１２は、本ディスクリプタに設定した動作が完了後、次の動作パラメータを記述したディスクリプタの先頭アドレスを記憶している。なお、次ディスクリプタが存在しない場合は、例えば0x0000_0000を設定する。
【０１０９】
転送データ記憶メモリ領域の先頭アドレス設定領域９１３は、ＣＰＵ作成ディスクリプタ２２と同じ設定であり、ＨＤＤ３０からリードしたデータを記憶するメモリ領域の先頭アドレスを記憶している。
【０１１０】
データ転送サイズ設定領域９１４は、ＨＤＤ３０からリードするデータのサイズを記憶する。例えば１セクタが５１２Ｂｙｔｅであれば、転送セクタ数設定領域９１７の設定値を５１２倍した値を設定する。
【０１１１】
ＳＡＴＡコマンド設定領域９１５は、ＣＰＵ作成ディスクリプタ２２と同じ値を設定する。
【０１１２】
先頭セクタアドレス設定領域９１６は、ＣＰＵ作成ディスクリプタ２２と同じ値を設定する。
【０１１３】
転送セクタ数設定領域９１７は、ＣＰＵ作成ディスクリプタ２２の半分の値を設定する。ＣＰＵ作成ディスクリプタ２２の値が奇数の場合は、２で割ったときの商を設定し、余りは切り捨てる。すなわち、偶数の場合と、奇数の場合で、同じ設定となる。
【０１１４】
図４（Ｃ）は、ＲＡＩＤ１制御部６０が作成するＢチャネル用ディスクリプタ２４のメモリマップの一例であり、以下のようにアドレスを割り当てる。
【０１１５】
ＲＡＩＤ１制御部６０が作成するＢチャネル用ディスクリプタ２４を５６Ｂｙｔｅとし、0x3000_2000〜3000_201Bのアドレスに記憶する。このＢチャネル用ディスクリプタ２４において、以下のようなデータを記憶する。
【０１１６】
転送方向設定領域９２１は、ＣＰＵ作成ディスクリプタ２２と同じ設定とする。
【０１１７】
次ディスクリプタアドレス設定領域９２２は、本ディスクリプタに設定した動作が完了後、次の動作パラメータを記述したディスクリプタの先頭アドレスを記憶している。なお、次ディスクリプタが存在しない場合は、例えば0x0000_0000を設定する。
【０１１８】
転送データ記憶メモリ領域の先頭アドレス設定領域９２３は、ＣＰＵ作成ディスクリプタ２２の値に、Ａチャネル用のデータ転送サイズ設定領域９１４の設定値を加算した値を設定する。
【０１１９】
データ転送サイズ設定領域９２４は、ＨＤＤ３０からリードするデータのサイズを記憶する。例えば１セクタが５１２Ｂｙｔｅであれば、転送セクタ数設定領域９２７の設定値を５１２倍した値を設定する。
【０１２０】
ＳＡＴＡコマンド設定領域９２５は、ＣＰＵ作成ディスクリプタ２２と同じ値を設定する。
【０１２１】
先頭セクタアドレス設定領域９２６は、ＣＰＵ作成ディスクリプタ２２の値に、Ａチャネル用の転送セクタ数設定領域９１７の値を加算した値を設定する。
【０１２２】
転送セクタ数設定領域９２７は、ＣＰＵ作成ディスクリプタ２２の転送セクタ数設定領域９０７の設定値から、Ａチャネル用の転送セクタ数設定領域９１７の設定値を減算した値を設定する。
【０１２３】
次に、図５を参照し、上述したリードデータサイズ小の場合の設定処理を行う際のディスクリプタのメモリマップについて説明する。図５は、リードデータサイズ小の場合の設定処理を行う際のディスクリプタのメモリマップの一例を示す図である。
【０１２４】
ＨＤＤ３０からリードするリードデータサイズが小さい場合、ＤＭＡＣ５０−１及びＤＭＡＣ５０−２は、ＣＰＵ作成ディスクリプタ２２の値を参照する。ＣＰＵ作成ディスクリプタ２２に記憶されるデータの項目である９０１０〜９０７０は、上述の図４（Ａ）の９０１〜９０７と同様であるため、その詳細な説明は省略する。
【０１２５】
次に、図６を参照し、上述したライトの場合の設定処理を行う際のディスクリプタのメモリマップについて説明する。図６は、ライトの場合の設定処理を行う際のディスクリプタのメモリマップの一例を示す図である。
【０１２６】
ＨＤＤ３０へライトする場合、ＤＭＡＣ５０−１及びＤＭＡＣ５０−２は、ＣＰＵ作成ディスクリプタ２２の値を参照する。ＣＰＵ作成ディスクリプタ２２に記憶されるデータの項目である９０１１〜９０７１は、上述の図４（Ａ）の９０１〜９０７と同様であるため、その詳細な説明は省略する。
【０１２７】
次に、図７Ａ、図７Ｂを参照して、情報処理装置１の動作について説明する。図７Ａ、図７Ｂは、情報処理装置１の処理のフローチャートである。
【０１２８】
閾値算出部６１１またはＣＰＵ１０は、閾値保持部６１の値を予め設定しておく（ステップＳ１０１）。
【０１２９】
ＣＰＵ１０は、ＨＤＤ３０へアクセスする際、ＣＰＵ作成ディスクリプタ２２を作成するアドレス、Ａチャネル用ディスクリプタ２３を作成するアドレス、及びＢチャネル用ディスクリプタ２４を作成するアドレスを、ＲＡＩＤ１制御部６０に設定する（ステップＳ１０２）。
【０１３０】
ＣＰＵ１０は、ＣＰＵ作成ディスクリプタ２２を作成する（ステップＳ１０３）。ＣＰＵ１０は、ＲＡＩＤ１制御部６０に転送開始を指示する（ステップＳ１０４）。
【０１３１】
次に、ＲＡＩＤ１制御部６０は、ＣＰＵ作成ディスクリプタ２２をリードする（ステップＳ１０５）。ＲＡＩＤ１制御部６０は、ＣＰＵ作成ディスクリプタ２２のリード結果から、ＨＤＤライトかＨＤＤリードかを判定する（ステップＳ１０６）。
【０１３２】
ＨＤＤライトの場合は（ステップＳ１０６でＨＤＤライト）、ＲＡＩＤ１制御部６０が、自身の動作モードを次のように設定する（ステップＳ１０７）。転送完了条件を、全完了信号（ＤＭＡＣ転送完了信号Ａ、ＳＡＴＡ転送完了信号Ａ、ＤＭＡＣ転送完了信号Ｂ、ＳＡＴＡ転送完了信号Ｂ）のアサートに設定。ＤＭＡＣ５０−１が参照するディスクリプタアドレスとして、ＣＰＵ作成ディスクリプタ２２の先頭アドレスを設定。ＤＭＡＣ５０−２が参照するディスクリプタアドレスとして、ＣＰＵ作成ディスクリプタ２２の先頭アドレスを設定。データ転送経路を、ＤＭＡＣ用ＭＥＭ−ＩＦ６０１のデータをＤＭＡＣ−ＩＦ６０３とＤＭＡＣ−ＩＦ６０４に渡す（ＡチャネルとＢチャネルに同じデータを渡す）ように設定。その後、後述するステップＳ１１３の処理に進む。
【０１３３】
ＨＤＤリードの場合は（ステップＳ１０６でＨＤＤリード）、ＲＡＩＤ１制御部６０が、ＣＰＵ作成ディスクリプタ２２の転送データサイズ設定領域９０４のリードデータサイズの値と、閾値保持部６１の閾値を比較し、リードデータサイズが閾値以下であるか否かに基づいて、リードデータサイズの大小を判定する（ステップＳ１０８）。
【０１３４】
リードデータサイズが小さい（閾値以下である）場合は（ステップＳ１０８でリードデータサイズ小）、ＲＡＩＤ１制御部６０が、自身の動作モードを次のように設定する（ステップＳ１０９）。転送完了条件を、先行して転送開始したチャネルの完了信号のアサートに設定。ＤＭＡＣ５０−１が参照するディスクリプタアドレスとして、ＣＰＵ作成ディスクリプタ２２の先頭アドレスを設定。ＤＭＡＣ５０−２が参照するディスクリプタアドレスとして、ＣＰＵ作成ディスクリプタ２２の先頭アドレスを設定。データ転送経路を、ＤＭＡＣ−ＩＦ６０３とＤＭＡＣ−ＩＦ６０４のうち、先にデータ転送開始した方のデータをＤＭＡＣ用ＭＥＭ−ＩＦ６０１に渡し、データ転送開始が遅かった方のデータは読み捨てるように設定。
【０１３５】
リードデータサイズが大きい（閾値以下でない）場合は（ステップＳ１０８でリードデータサイズ大）、ＲＡＩＤ１制御部６０は、ＣＰＵ作成ディスクリプタ２２の約半分のデータサイズを転送する設定の動作パラメータで、Ａチャネル用ディスクリプタ２３を作成する（ステップＳ１１０）。ＲＡＩＤ１制御部６０は、Ａチャネル用ディスクリプタで転送しない残りの領域を転送する設定の動作パラメータで、Ｂチャネル用ディスクリプタ２４を作成する（ステップＳ１１１）。ＲＡＩＤ１制御部６０は、自身の動作モードを次のように設定する（ステップＳ１１２）。転送完了条件を、全完了信号（ＤＭＡＣ転送完了信号Ａ、ＳＡＴＡ転送完了信号Ａ、ＤＭＡＣ転送完了信号Ｂ、ＳＡＴＡ転送完了信号Ｂ）のアサートに設定。ＤＭＡＣ５０−１が参照するディスクリプタアドレスとして、Ａチャネル用ディスクリプタ２３の先頭アドレスを設定。ＤＭＡＣ５０−２が参照するディスクリプタアドレスとして、Ｂチャネル用ディスクリプタ２４の先頭アドレスを設定。データ転送経路に、ＤＭＡＣ−ＩＦ６０３のデータをＤＭＡＣ用ＭＥＭ−ＩＦ６０１に渡し、ＤＭＡＣ−ＩＦ６０４のデータをＤＭＡＣ用ＭＥＭ−ＩＦ６０２に渡すように設定。
【０１３６】
ＲＡＩＤ１制御部６０の動作モード設定完了後、ＲＡＩＤ１制御部６０は、ＳＡＴＡ制御部４０−１及びＳＡＴＡ制御部４０−２に対してＳＡＴＡコマンドの発行を指示する（ステップＳ１１３）。ＳＡＴＡ制御部４０−１及びＳＡＴＡ制御部４０−２は、ＨＤＤ３０に対しＳＡＴＡコマンドを発行する（ステップＳ１１４）。
【０１３７】
次に、ＲＡＩＤ１制御部６０は、ＤＭＡＣ５０−１及びＤＭＡＣ５０−２を起動する（ステップＳ１１５）。ＤＭＡＣ５０−１及びＤＭＡＣ５０−２がディスクリプタリードを実行し、ディスクリプタ設定に従ってデータ転送を開始する（ステップＳ１１６）。ＲＡＩＤ１制御部６０は、転送完了を検出するまで待つ（ステップＳ１１７）。転送完了検出後、ＲＡＩＤ１制御部６０は、ＣＰＵ作成ディスクリプタ２２の次ディスクリプタアドレス設定領域９０２の内容を確認し、次ディスクリプタが存在するか判断する（ステップＳ１１８）。次ディスクリプタが存在する場合（ステップＳ１１８でＹＥＳ）、そのアドレスをリードしてディスクリプタ情報を取得し（ステップＳ１１９）、ステップＳ１０６の処理に戻り、次の転送動作を開始する。
【０１３８】
次ディスクリプタが存在しない場合（ステップＳ１１８でＮＯ）、ＲＡＩＤ１制御部６０が割り込み信号をアサートし、ＣＰＵ１０に転送完了を通知する（ステップＳ１２０）。
ＣＰＵ１０は転送完了を検出し（ステップＳ１２１）、ＨＤＤ３０へのアクセスが完了する。
【０１３９】
以上に説明した情報処理装置１の各部の機能（例えば、ＲＡＩＤ１制御部６０や閾値算出部６１１）は、ＣＰＵ（プロセッサ）１０が、例えば記憶装置（ＨＤＤ、ＲＯＭ、フラッシュメモリ等を含む）に格納されたＯＳまたはアプリケーションのプログラムを実行することにより実現してもよい。プログラムは例えば記録媒体の配布やネットワークからのダウンロードなどによって提供される。記録媒体は、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、フレキシブルディスク、光磁気ディスク等の様に情報を光学的、電気的或いは磁気的に記録する記録媒体、ＲＯＭ（Read Only Memory）、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記録媒体を用いることができる。
【０１４０】
また、情報処理装置１の各部の機能のうちの少なくとも一部（例えば、ＲＡＩＤ１制御部６０）を、専用のハードウェア回路（例えば半導体集積回路等）で実現してもよい。
【０１４１】
なお、上述した実施形態におけるシステム構成は一例であり、用途や目的に応じて様々なシステム構成例があることは言うまでもない。例えば、メモリ２０は、ＲＡＩＤ１制御部６０の内部に設けてもよい。ＲＡＩＤ１制御部６０は、複数台の外部のＨＤＤ３０を収容し、ＣＰＵ１０を備える外部装置から例えばＳＣＳＩ（Small Computer System Interface）やファイバーチャネルを介してアクセスされるＲＡＩＤコントローラ（データ転送装置）として実装してもよい。
【符号の説明】
【０１４２】
１  情報処理装置
１０  ＣＰＵ
１１  割り込み制御部
２０  メモリ
２１  転送データ領域
２２  ＣＰＵ作成ディスクリプタ
２３  Ａチャネル用ディスクリプタ
２４  Ｂチャネル用ディスクリプタ
３０−１、３０−２  ＨＤＤ
４０−１、４０−２  ＳＡＴＡ制御部
５０−１、５０−２  ＤＭＡＣ
６０  ＲＡＩＤ１制御部（「制御部」の一例）
６１１  閾値算出部
６１  閾値保持部
６２  シーケンス制御部
６３  ＳＡＴＡコマンド発行部
６４  ＤＭＡＣ制御部
６５  データ転送経路制御部
６６  転送完了検出部
６７  ディスクリプタライト部
６８  ディスクリプタリード部
６９  ディスクリプタ決定部
６９１  判断部
６９２  読み込み制御部
６９３  書き込み制御部
６０１、６０２  ＤＭＡＣ用ＭＥＭ−ＩＦ
６０３、６０４  ＤＭＡＣ−ＩＦ
６０５  ディスクリプタ用ＭＥＭ−ＩＦ
【先行技術文献】
【特許文献】
【０１４３】
【特許文献１】特開２００８−１５８８０４号公報
【図１】
2017016579.tif 000003
【図２】
2017016579.tif 000004
【図３】
2017016579.tif 000005
【図４】
2017016579.tif 000006
【図５】
2017016579.tif 000007
【図６】
2017016579.tif 000008
【図７Ａ】
2017016579.tif 000009
【図７Ｂ】
2017016579.tif 000010