(57)【特許請求の範囲】
【請求項１】
ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送処理に必要な第１の転送情報が格納された少なくとも１つの転送情報記憶手段と、
前記第１の転送情報に基づき前記ＤＭＡ転送処理を実行する、少なくとも１つのＤＭＡエンジンと、
転送情報制御手段と
を含み、
前記ＤＭＡエンジンは、前記ＤＭＡ転送処理で読み出した転送データを一時的に保持する転送データバッファを備え、
前記転送情報制御手段は、
前記第１の転送情報を分割すべきか否かを、前記転送データの大きさと、前記ＤＭＡ転送処理が完了するまでの転送時間と、前記転送データバッファの大きさとに基づいて判定し、
前記第１の転送情報を分割すべきと判定した場合は、前記第１の転送情報の分割数を、前記転送データの大きさと、前記転送時間と、前記転送データバッファの大きさと、前記ＤＭＡ転送処理を実行していない未使用ＤＭＡエンジンの数と、前記ＤＭＡエンジンによってＤＭＡ転送処理が実行されていない前記第１の転送情報の数とに基づいて決定し、
前記決定した分割数で１つの前記第１の転送情報を分割して複数の第２の転送情報を生成し、
前記第２の転送情報の各々を前記ＤＭＡエンジンの各々に送付し、各々の前記ＤＭＡエンジンを起動する
情報処理装置。
【請求項２】
前記転送情報記憶手段のそれぞれを識別する記憶手段識別情報と、前記ＤＭＡエンジンのそれぞれを識別するエンジン識別情報と、前記第１の転送情報が複数の前記第２の転送情報に分割されていることを表すフラグとが関連づけられて登録されているエンジン使用状況管理手段と、
前記分割数を前記未使用ＤＭＡエンジンの数以下に決定して前記分割数と同じ数の前記未使用ＤＭＡエンジンを選択し、前記エンジン使用状況管理手段に登録されている、前記選択した未使用ＤＭＡエンジンを示すエンジン識別情報に関連づけて、前記第２の転送情報の生成元である前記第１の転送情報が格納されている前記転送情報記憶手段を示す記憶手段識別情報と、複数の第２の転送情報に分割されていることを示す分割情報が格納された前記フラグとを登録し、前記第２の転送情報の各々を前記選択した未使用ＤＭＡエンジンの各々に送付し、各々のＤＭＡエンジンを起動するエンジン設定手段と、
前記ＤＭＡエンジンのＤＭＡ転送処理が完了した場合、前記エンジン使用状況管理手段に登録されている、前記ＤＭＡ転送処理が完了したＤＭＡエンジンを示す第１のエンジン識別情報に関連づけられた前記フラグに前記分割情報が登録されている場合、その分割情報と、前記第１のエンジン識別情報に関連づけて登録されている記憶手段識別情報とを削除し、前記削除した記憶手段識別情報と同じ識別情報が、前記エンジン使用状況管理手段に登録されていない場合は、前記削除した記憶手段識別情報が示す転送情報記憶手段に登録されている前記第１の転送情報に関する前記ＤＭＡ転送処理の実行対象であることを示す情報を削除する完了設定手段と
を含む請求項１に記載の情報処理装置。
【請求項３】
前記未使用ＤＭＡエンジンは、前記エンジン使用状況管理手段に登録されているエンジン識別情報のうち、記憶手段識別情報が関連づけて登録されていないエンジン識別情報が示すＤＭＡエンジンである
請求項２に記載の情報処理装置。
【請求項４】
ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）エンジンによって実行されるＤＭＡ転送処理に必要な第１の転送情報を分割すべきか否かを、前記ＤＭＡ転送処理で読み出す転送データの大きさと、前記ＤＭＡ転送処理が完了するまでの転送時間と、前記転送データを一時的に保持する転送データバッファの大きさとに基づいて判定し、
前記第１の転送情報を分割すべきと判定した場合は、前記第１の転送情報の分割数を、前記転送データの大きさと、前記転送時間と、前記転送データバッファの大きさと、前記ＤＭＡ転送処理を実行していない未使用ＤＭＡエンジンの数と、前記ＤＭＡエンジンによってＤＭＡ転送処理が実行されていない前記第１の転送情報の数とに基づいて決定し、
前記決定した分割数で１つの前記第１の転送情報を分割して複数の第２の転送情報を生成し、
前記第２の転送情報の各々を前記ＤＭＡエンジンの各々に送付し、各々の前記ＤＭＡエンジンを起動する
ＤＭＡ転送制御方法。
【請求項５】
前記分割数を前記未使用ＤＭＡエンジンの数以下に決定して前記分割数と同じ数の前記未使用ＤＭＡエンジンを選択し、
前記選択した未使用ＤＭＡエンジンを示すエンジン識別情報と、前記第２の転送情報の生成元である前記第１の転送情報が格納されている転送情報記憶手段を示す記憶手段識別情報と、複数の第２の転送情報に分割されていることを示す分割情報が格納されたフラグとを関連づけてエンジン使用状況管理手段に登録し、
前記第２の転送情報の各々を前記選択した未使用ＤＭＡエンジンの各々に送付し、各々のＤＭＡエンジンを起動し、
前記ＤＭＡエンジンのＤＭＡ転送処理が完了した場合、前記エンジン使用状況管理手段に登録されている、前記ＤＭＡ転送処理が完了したＤＭＡエンジンを示す第１のエンジン識別情報に関連づけられた前記フラグに前記分割情報が登録されている場合、その分割情報と、前記第１のエンジン識別情報に関連づけて登録されている記憶手段識別情報とを削除し、
前記削除した記憶手段識別情報と同じ識別情報が、前記エンジン使用状況管理手段に登録されていない場合は、前記削除した記憶手段識別情報が示す転送情報記憶手段に登録されている前記第１の転送情報に関する前記ＤＭＡ転送処理の実行対象であることを示す情報を削除する
請求項４に記載のＤＭＡ転送制御方法。
【請求項６】
ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）エンジンによって実行されるＤＭＡ転送処理に必要な第１の転送情報を分割すべきか否かを、前記ＤＭＡ転送処理で読み出す転送データの大きさと、前記ＤＭＡ転送処理が完了するまでの転送時間と、前記転送データを一時的に保持する転送データバッファの大きさとに基づいて判定する判定処理と、
前記第１の転送情報を分割すべきと判定した場合は、前記第１の転送情報の分割数を、前記転送データの大きさと、前記転送時間と、前記転送データバッファの大きさと、前記ＤＭＡ転送処理を実行していない未使用ＤＭＡエンジンの数と、前記ＤＭＡエンジンによってＤＭＡ転送処理が実行されていない前記第１の転送情報の数とに基づいて決定する算出処理と、
前記決定した分割数で１つの前記第１の転送情報を分割して複数の第２の転送情報を生成する生成処理と、
前記第２の転送情報の各々を前記ＤＭＡエンジンの各々に送付し、各々の前記ＤＭＡエンジンを起動するＤＭＡエンジン起動処理と
をコンピュータに実行させるＤＭＡ転送制御プログラム。
【請求項７】
前記分割数を前記未使用ＤＭＡエンジンの数以下に決定して前記分割数と同じ数の前記未使用ＤＭＡエンジンを選択し、前記選択した未使用ＤＭＡエンジンを示すエンジン識別情報と、前記第２の転送情報の生成元である前記第１の転送情報が格納されている転送情報記憶手段を示す記憶手段識別情報と、複数の第２の転送情報に分割されていることを示す分割情報が格納されたフラグとを関連づけてエンジン使用状況管理手段に登録する使用状況登録処理と、
前記第２の転送情報の各々を、前記選択した未使用ＤＭＡエンジンの各々に送付し、各々のＤＭＡエンジンを起動するエンジン制御処理と、
前記ＤＭＡエンジンのＤＭＡ転送処理が完了した場合、前記エンジン使用状況管理手段に登録されている、前記ＤＭＡ転送処理が完了したＤＭＡエンジンを示す第１のエンジン識別情報に関連づけられた前記フラグに前記分割情報が登録されている場合、その分割情報と、前記第１のエンジン識別情報に関連づけて登録されている記憶手段識別情報とを削除する使用状況削除処理と、
前記削除した記憶手段識別情報と同じ識別情報が、前記エンジン使用状況管理手段に登録されていない場合は、前記削除した記憶手段識別情報が示す転送情報記憶手段に登録されている前記第１の転送情報に関する前記ＤＭＡ転送処理の実行対象であることを示す情報を削除する転送情報削除処理と
をコンピュータに実行させる請求項６に記載のＤＭＡ転送制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、ＤＭＡ転送制御方法およびＤＭＡ転送制御プログラムに関し、特に、複数のＤＭＡ転送処理を並行して行う情報処理装置、ＤＭＡ転送制御方法およびＤＭＡ転送制御プログラムに関する。
【背景技術】
【０００２】
情報処理装置のメインメモリ、周辺機器接続部などの間でのデータ転送方式の一つである、ＤＭＡ（「Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ」の略称）転送が一般的に知られている。ＤＭＡ転送では、ＣＰＵ（「Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ」の略称）の負荷を軽減するため、ＣＰＵを介さずにメインメモリ、周辺機器接続部などの間で直接データ転送を行う。
【０００３】
すなわち、ＣＰＵが、ＤＭＡ転送専用のコントローラ（以降、「ＤＭＡエンジン」とも言う。）にデータ転送の指示を出す。そして、その指示を受けたコントローラが、ＤＭＡ転送処理の内容が格納されたディスクリプタから情報を取得し、その情報に従ってデータの読み書きを行う。ここで、ディスクリプタは、転送元や転送先の情報および転送データの情報などが格納された所定の記憶領域である。
【０００４】
このようなＤＭＡ転送処理のスループットを向上するために、特許文献１に記載の技術では、１つのディスクリプタを複数のサブディスクリプタに分割する。そして、各サブディスクリプタに基づいたＤＭＡ転送処理を複数のコントローラが並行して行う。
【０００５】
なお、関連する技術として、特許文献２に記載の技術では、複数のディスクリプタの連続実行時に、ホストシステムに対しエラーフレームを受信したことを報告せずに有効受信フレームのみを報告する。これにより、ホストシステムは、エラーフレーム処理に関するオーバーヘッドを低減することができる。
【０００６】
特許文献３に記載の技術では、ＤＭＡコントローラ上で１つのＤＭＡ転送を複数の転送要求に分割することにより、実行するＤＭＡ転送のサイズを小さくする。そして、ＤＭＡコントローラが、複数回にわたって内部バスにＤＭＡ転送要求を出す。これにより、プロセッサが、転送速度の遅い周辺ＩＯ（「Ｉｎｐｕｔ−Ｏｕｔｐｕｔ」の略称）デバイスのＤＭＡ転送処理の終了を長時間待ち合わせることがなくなり、プロセッサの実行性能を向上させることができる。
【０００７】
特許文献４に記載の技術では、連続して実行すべきＤＭＡ転送処理がある場合に、全てのＤＭＡ転送処理が終了した場合にのみＤＭＡ転送処理の終了をＣＰＵに通知する。これにより、ＤＭＡ転送処理の終了を通知されるＣＰＵにおける処理負担を軽減する。
【０００８】
特許文献５に記載の技術では、転送先デバイスが、ＤＭＡ制御部から送られた判断情報に基づいてデータ転送の終了判定を行う。これにより、ＤＭＡコントローラがデータ転送の終了を判定するための回路を不要とすることができるなど、ハードウェアの規模をあまり増大させずに、ＤＭＡエンジン数や転送データ数を増加することが可能となる。
【０００９】
特許文献６に記載の技術では、ＤＭＡ転送時の転送データのバンドサイズおよび分割数の最適化を図ることにより、ネットワークや外部デバイス等の外部へのデータ送出時の記憶手段の利用効率を向上させることができる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００６−１９５８２３号公報
【特許文献２】特開平０４−２７７８５０号公報
【特許文献３】特許第５０４００５０号公報
【特許文献４】特開２００５−０７１１０４号公報
【特許文献５】特開２００７−２３３５２２号公報
【特許文献６】特開２０１０−１９８１３８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、特許文献１に記載された技術において、コントローラ（ＤＭＡエンジン）の内部に設けられたデータバッファが十分大きい場合や、転送するデータが小さい場合には、次の問題が生じる。すなわち、ディスクリプタを複数のサブディスクリプタに分割し、各サブディスクリプタに基づく複数のＤＭＡ転送処理を並行して実行すると、コントローラのＣＰＵやメモリリソースの競合による使用効率の低下を招く場合があるという問題がある。
【００１２】
また、複数のディスクリプタと複数のコントローラとが存在する場合に、１つのディスクリプタを複数のサブディスクリプタに分割し、分割されたサブディスクリプタが複数のコントローラを占有してしまうと、他のディスクリプタの処理が滞留し、システム全体のスループットが低下するという問題がある。
【００１３】
なお、特許文献２乃至６には、複数のＤＭＡ転送処理を並行して行う際に、リソースの競合による使用効率の低下やシステム全体のスループットの低下を招かずにＤＭＡ転送処理を行うための技術については、何ら記載がない。
【００１４】
本発明の目的は、リソースの競合による使用効率の低下やシステム全体のスループットの低下を招かずに複数のＤＭＡ転送処理を行うことのできる、情報処理装置、ＤＭＡ転送制御方法およびＤＭＡ転送制御プログラムを提供することにある。
【課題を解決するための手段】
【００１５】
本発明の情報処理装置は、
ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送処理に必要な第１の転送情報が格納された少なくとも１つの転送情報記憶手段と、
前記第１の転送情報に基づき前記ＤＭＡ転送処理を実行する、少なくとも１つのＤＭＡエンジンと、
転送情報制御手段と
を含み、
前記ＤＭＡエンジンは、前記ＤＭＡ転送処理で読み出した転送データを一時的に保持する転送データバッファを備え、
前記転送情報制御手段は、
前記第１の転送情報を分割すべきか否かを、前記転送データの大きさと、前記ＤＭＡ転送処理が完了するまでの転送時間と、前記転送データバッファの大きさとに基づいて判定し、
前記第１の転送情報を分割すべきと判定した場合は、前記第１の転送情報の分割数を、前記転送データの大きさと、前記転送時間と、前記転送データバッファの大きさと、前記ＤＭＡ転送処理を実行していない未使用ＤＭＡエンジンの数と、前記ＤＭＡエンジンによってＤＭＡ転送処理が実行されていない前記第１の転送情報の数とに基づいて決定し、
前記決定した分割数で１つの前記第１の転送情報を分割して複数の第２の転送情報を生成し、
前記第２の転送情報の各々を前記ＤＭＡエンジンの各々に送付し、各々の前記ＤＭＡエンジンを起動する。
【００１６】
また、本発明のＤＭＡ転送制御方法は、
ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）エンジンによって実行されるＤＭＡ転送処理に必要な第１の転送情報を分割すべきか否かを、前記ＤＭＡ転送処理で読み出す転送データの大きさと、前記ＤＭＡ転送処理が完了するまでの転送時間と、前記転送データを一時的に保持する転送データバッファの大きさとに基づいて判定し、
前記第１の転送情報を分割すべきと判定した場合は、前記第１の転送情報の分割数を、前記転送データの大きさと、前記転送時間と、前記転送データバッファの大きさと、前記ＤＭＡ転送処理を実行していない未使用ＤＭＡエンジンの数と、前記ＤＭＡエンジンによってＤＭＡ転送処理が実行されていない前記第１の転送情報の数とに基づいて決定し、
前記決定した分割数で１つの前記第１の転送情報を分割して複数の第２の転送情報を生成し、
前記第２の転送情報の各々を前記ＤＭＡエンジンの各々に送付し、各々の前記ＤＭＡエンジンを起動する。
【００１７】
また、本発明のＤＭＡ転送制御プログラムは、
ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）エンジンによって実行されるＤＭＡ転送処理に必要な第１の転送情報を分割すべきか否かを、前記ＤＭＡ転送処理で読み出す転送データの大きさと、前記ＤＭＡ転送処理が完了するまでの転送時間と、前記転送データを一時的に保持する転送データバッファの大きさとに基づいて判定する判定処理と、
前記第１の転送情報を分割すべきと判定した場合は、前記第１の転送情報の分割数を、前記転送データの大きさと、前記転送時間と、前記転送データバッファの大きさと、前記ＤＭＡ転送処理を実行していない未使用ＤＭＡエンジンの数と、前記ＤＭＡエンジンによってＤＭＡ転送処理が実行されていない前記第１の転送情報の数とに基づいて決定する算出処理と、
前記決定した分割数で１つの前記第１の転送情報を分割して複数の第２の転送情報を生成する生成処理と、
前記第２の転送情報の各々を前記ＤＭＡエンジンの各々に送付し、各々の前記ＤＭＡエンジンを起動するＤＭＡエンジン起動処理と
をコンピュータに実行させる。
【発明の効果】
【００１８】
本発明には、リソースの競合による使用効率の低下やシステム全体のスループットの低下を招かずに複数のＤＭＡ転送を行うことができるという効果がある。
【図面の簡単な説明】
【００１９】
【図１】本発明の第１の実施形態を示すブロック図である。
【図２】第１の実施形態における、ディスクリプタ制御部２００の構成を示すブロック図である。
【図３】第１の実施形態における、エンジン使用状況テーブル２０２１の一例を示す図である。
【図４】第１の実施形態における、ＤＭＡ転送部１０の動作を示すフローチャートである。
【図５】第１の実施形態における、ＤＭＡ転送開始時のディスクリプタ制御部２００の動作を示すフローチャートである。
【図６】第１の実施形態における、ＤＭＡ転送完了時のディスクリプタ制御部２００の動作を示すフローチャートである。
【図７】本発明の第２の実施形態を示すブロック図である。
【発明を実施するための形態】
【００２０】
次に、本発明の実施形態について図面を参照して詳細に説明する。
【００２１】
［第１の実施形態］
図１は本発明の第１の実施形態を示すブロック図である。
【００２２】
図１を参照すると、情報処理装置１は、ＤＭＡ転送部１０と、トランザクション制御部２０と、少なくとも１つのＣＰＵ３０と、メモリ４０と、少なくとも１つの入出力部５０とを含む。ＤＭＡ転送部１０と、ＣＰＵ３０と、メモリ４０と、入出力部５０とは、トランザクション制御部２０を介して相互に接続されている。
【００２３】
ＤＭＡ転送部１０は、それぞれを識別する固有の識別情報が割り当てられた複数のディスクリプタ１０１からなるディスクリプタ群１００と、ディスクリプタ制御部２００と、それぞれを識別する固有の識別情報が割り当てられた複数のＤＭＡエンジン３００とを含む。
【００２４】
ディスクリプタ１０１は、ＤＭＡ転送処理の実行に必要な情報（以降、「ＤＭＡ転送情報」、または「第１の転送情報」と称する）が格納された所定の記憶領域である。以降、ディスクリプタ１０１は、「転送情報記憶部」とも呼ばれる。ＤＭＡ転送情報は、転送するべきデータの場所を示す転送元アドレスと、転送先の場所を示す転送先アドレスと、転送するべきデータの長さを示す転送データ長と、このＤＭＡ転送情報が実行対象であるか否かを示す実行バリッドと、このＤＭＡ転送情報の転送処理が終了したことを示す転送完了フラグとを含む。なお、本実施形態では、ディスクリプタ１０１を示す識別情報は、例えば、「ディスクリプタＡ」、「ディスクリプタＢ」、「ディスクリプタＣ」・・・とする。また、実行バリッドは、「１」が登録されている場合は、そのＤＭＡ転送情報が実行対象であることを示し、「０（ゼロ）」が登録されている場合は実行対象ではないことを示す。特に、実行バリッドに「１」が登録されているディスクリプタを「有効ディスクリプタ」と称する。転送完了フラグは、「１」が登録されている場合は転送完了を示し、「０（ゼロ）」が登録されている場合は転送が完了していないことを示す。
【００２５】
ディスクリプタ制御部２００は、ディスクリプタ１０１のうち実行すべきディスクリプタを選択し、そのディスクリプタに格納されているＤＭＡ転送情報を基にしたＤＭＡ転送処理を実行するＤＭＡエンジン３００の選択および起動を行う。以降、ディスクリプタ制御部２００は、「転送情報制御部」とも呼ばれる。
【００２６】
ＤＭＡエンジン３００は、ＤＭＡリクエスト制御部３０１とデータバッファ３０２とを含む。なお、本実施形態では、ＤＭＡエンジン３００を示す識別情報は、例えば、「ＤＭＡエンジンＡ」、「ＤＭＡエンジンＢ」、「ＤＭＡエンジンＣ」・・・とする。
【００２７】
ＤＭＡリクエスト制御部３０１は、ディスクリプタ１０１に格納されているＤＭＡ転送情報に含まれる転送元アドレスが示す場所から、トランザクション制御部２０を介して、予め設定された所定の大きさのデータ（以降、「データブロック」と称する）を読み出す。なお、以降、本動作を「リード」（読み出し）と称し、リードの動作を指示する命令を「リード命令」と称する。また、ＤＭＡリクエスト制御部３０１は、そのデータブロックを、トランザクション制御部２０を介してＤＭＡ転送情報に含まれる転送先アドレスが示す場所に書き込む。以降、本動作を「ライト」（書き込み）と称し、ライトの動作を指示する命令を「ライト命令」と称する。
【００２８】
また、ＤＭＡリクエスト制御部３０１が、転送元にリード命令を送付してから、実際にデータブロックを受け取るまで、または、転送先にライト命令とデータブロックとを送付してから命令実行完了を示す通知を受け取るまでには、待ち時間が生じる。この待ち時間がＤＭＡエンジンの命令サイクルの何サイクルにあたるかを示す値を、以降、「レイテンシ」と称する。例えば、転送先がメモリ４０であり、ライト命令とデータブロックとを送付してから、命令実行完了を示す通知が届くまで８命令サイクルであった場合は、メモリ４０のレイテンシは８となる。
【００２９】
ＤＭＡリクエスト制御部３０１は、予め転送元および転送先の装置毎にレイテンシを測定する。そして、ディスクリプタ制御部２００は、ＤＭＡリクエスト制御部３０１が測定したレイテンシを所定の記憶場所（図示せず）に保持する。
【００３０】
データバッファ３０２は、ＤＭＡリクエスト制御部３０１が、転送元アドレスが示す場所から読み出したデータブロックを転送先アドレスが示す場所に書き込むまでの間、一時的に保持するための記憶領域である。このデータバッファ３０２の容量により、ＤＭＡエンジン３００が一度に処理できるデータ量が決まる。また、データバッファ３０２が格納可能なデータブロックの数を、「データバッファの深さ」と称する。例えば、データブロックの大きさが８ＫＢ（キロバイト）であり、データバッファの大きさが３２ＫＢである場合は、データバッファの深さは４となる。
【００３１】
トランザクション制御部２０は、ＤＭＡ転送部１０と、ＣＰＵ３０と、メモリ４０と、入出力部５０とに接続されている。トランザクション制御部２０は、ＤＭＡ転送部１０に含まれる各ＤＭＡエンジン３００からのリードの指示およびライトの指示を受信し、各指示に従って各接続先からデータブロックを受信し、受信したデータブロックを指定の接続先に送付する。
【００３２】
ＣＰＵ３０は、ディスクリプタ１０１にＤＭＡ転送情報を登録し、ディスクリプタ制御部２００にＤＭＡ転送処理を開始する旨の指示を送付する。
【００３３】
ディスクリプタ制御部２００は、プログラムを記憶する記憶デバイス（図示せず）と、そのプログラムをメモリに読み込んで命令を実行する少なくとも１つのプロセッサ（図示せず）とを含む。
【００３４】
図２は、本実施形態におけるディスクリプタ制御部２００の構成を示すブロック図である。
【００３５】
図２を参照すると、ディスクリプタ制御部２００は、ディスクリプタ選択部２０１、エンジン使用状況管理部２０２、エンジン設定部２０３、完了通知部２０４を含む。
【００３６】
ディスクリプタ選択部２０１は、ディスクリプタ群１００に含まれるディスクリプタ１０１のうち１つのディスクリプタを選択し、そのディスクリプタに格納されたＤＭＡ転送情報をエンジン設定部２０３に送付する。
【００３７】
エンジン使用状況管理部２０２は、エンジン使用状況テーブル２０２１を記憶する。エンジン使用状況テーブル２０２１には、ＤＭＡエンジン３００を示す識別情報と、そのＤＭＡエンジン３００が参照しているＤＭＡ転送情報が含まれるディスクリプタ１０１を示す識別情報とが関連付けられたレコードが登録される。
【００３８】
エンジン設定部２０３は、エンジン使用状況テーブル２０２１を参照し、ＤＭＡエンジン３００のうち、現在未使用のＤＭＡエンジンを検索する。そして、エンジン設定部２０３は、検索した未使用のＤＭＡエンジン３００に、ディスクリプタ選択部２０１から受け取ったＤＭＡ転送情報を送付する。また、転送データ長、未使用のＤＭＡエンジン数などが所定の条件に当てはまる場合には、エンジン設定部２０３は、ＤＭＡ転送情報の内容を基に、ＤＭＡ転送情報を所定の方法で求めた数に分割したＤＭＡ転送情報を表す分割ＤＭＡ転送情報（以降、「第２の転送情報」とも言う。）を生成する。そして、エンジン設定部２０３は、複数のＤＭＡエンジン３００の各々に、生成した分割ＤＭＡ転送情報の各々を送付する。
【００３９】
完了通知部２０４は、ＤＭＡエンジン３００からＤＭＡ転送処理が終了した旨の通知を受信すると、エンジン使用状況テーブル２０２１を更新するとともに、必要な場合はディスクリプタ１０１の転送完了フラグおよび実行バリッドを更新する。
【００４０】
図３は、本実施形態におけるエンジン使用状況テーブル２０２１の一例を示す図である。
【００４１】
図３を参照すると、エンジン使用状況テーブル２０２１は、エンジン識別欄と、ディスクリプタ識別欄と、複数エンジン使用フラグ欄とを含む。
【００４２】
エンジン識別欄には、ＤＭＡ転送部１０に含まれる各ＤＭＡエンジン３００に割り当てられた識別情報が事前に登録される。
【００４３】
ディスクリプタ識別欄には、エンジン識別欄に登録された識別情報が示すＤＭＡエンジンが参照するＤＭＡ転送情報が登録されているディスクリプタ１０１に割り当てられた識別情報が登録される。
【００４４】
複数エンジン使用フラグ欄には、ディスクリプタ識別欄に登録された識別情報が示すディスクリプタに登録されているＤＭＡ転送情報が、複数に分割されて、そのうちの１つがエンジン識別欄に登録されている識別情報が示すＤＭＡエンジンで実行されている場合に「１」が登録される。そして、ＤＭＡ転送情報が複数に分割されずに、エンジン識別欄に登録されている識別情報が示すＤＭＡエンジンが、そのＤＭＡ転送情報を基にＤＭＡ転送処理を実行している場合は「０（ゼロ）」が登録される。
【００４５】
エンジン使用状況テーブル２０２１の各行のレコードにおけるそれぞれの識別情報およびフラグ「１」、「０」は、互いに関連付けて記憶されている。例えば、図３の１行目のレコードを参照すると、エンジン識別欄には「ＤＭＡエンジンＡ」が登録され、ディスクリプタ識別欄には「ディスクリプタＡ」が登録され、複数エンジン使用フラグ欄には、「１」が登録されている。すなわち、ＤＭＡエンジンＡという識別情報が示すＤＭＡエンジン３００は、ディスクリプタＡという識別情報が示すディスクリプタに格納されているＤＭＡ転送情報を複数に分割した分割ＤＭＡ転送情報を、エンジン設定部２０３から受け取り、その分割ＤＭＡ転送情報を基にＤＭＡ転送処理を実行していることが判る。なお、ディスクリプタ識別欄に識別情報が登録されていないレコードのエンジン識別欄に登録されている識別情報が示すＤＭＡエンジンＢが、現在未使用のＤＭＡエンジンである。
【００４６】
次に、ＤＭＡ転送部１０の動作について図４乃至図６のフローチャートを参照して説明する。
【００４７】
図４は、ＤＭＡ転送処理を実行する際のＤＭＡ転送部１０の動作を示すフローチャートである。
【００４８】
図４を参照すると、まず、ディスクリプタ制御部２００に含まれるディスクリプタ選択部２０１が、ＣＰＵ３０からＤＭＡ転送処理の開始指示を受け取る。なお、ディスクリプタ選択部２０１は、エンジン使用状況テーブル２０２１を参照し、現在未使用のＤＭＡエンジンが無い場合（すなわち、全てのレコードのディスクリプタ識別欄に識別情報が登録されている場合。）は、ＤＭＡ転送処理の開始を待ち合わせる。
【００４９】
未使用のＤＭＡエンジン３００がある場合には、ディスクリプタ選択部２０１は、ディスクリプタ群１００に含まれるディスクリプタ１０１のうち、有効ディスクリプタ（実行バリッドに「１」が登録されているディスクリプタ）であり、且つ、エンジン使用状況テーブル２０２１に含まれる各レコードのディスクリプタ識別欄に、そのディスクリプタを示す識別情報が登録されていないディスクリプタを１つ選択する（ステップＳ１０１）。そして、ディスクリプタ選択部２０１は、選択したディスクリプタ１０１に登録されているＤＭＡ転送情報をエンジン設定部２０３に送付する。
【００５０】
次に、エンジン設定部２０３は、エンジン使用状況テーブル２０２１のレコードを参照し、現在未使用のＤＭＡエンジン３００を検索する。エンジン設定部２０３は、検索した未使用のＤＭＡエンジン３００に、ディスクリプタ選択部２０１から受け取ったＤＭＡ転送情報を送付し、そのＤＭＡエンジンを起動する。
【００５１】
なお、ＤＭＡ転送情報に含まれる情報等が所定の条件に当てはまる場合には、エンジン設定部２０３は、ディスクリプタ選択部２０１から受け取ったＤＭＡ転送情報の内容を基に、所定の方法で求めた数の分割ＤＭＡ転送情報を生成する。所定の条件および所定の方法については、式を使って後述されるので、ここでは説明を省略する。そして、エンジン設定部２０３は、生成した分割ＤＭＡ転送情報の各々を複数のＤＭＡエンジン３００の各々に送付し、各ＤＭＡエンジン３００を起動する（ステップＳ１０２）。
【００５２】
なお、ステップＳ１０１およびＳ１０２で説明した、ＤＭＡ転送処理の開始の際のディスクリプタ制御部２００の動作の詳細については、図５のフローチャートを基に後述する。
【００５３】
次に、エンジン設定部２０３によって起動されたＤＭＡエンジン３００のＤＭＡリクエスト制御部３０１は、送付されたＤＭＡ転送情報または分割ＤＭＡ転送情報に含まれる転送元アドレスなどの情報を含むリード命令を発行し、トランザクション制御部２０に送付する（ステップＳ１０３）。
【００５４】
次に、ステップＳ１０３で送付したリード命令への応答として、トランザクション制御部２０からデータブロックを受け取ると、ＤＭＡリクエスト制御部３０１は、受け取ったデータブロックをデータバッファ３０２に格納する（ステップＳ１０４）。そして、ＤＭＡリクエスト制御部３０１は、ＤＭＡ転送情報または分割ＤＭＡ転送情報に含まれる転送先アドレスなどと、データバッファ３０２に格納されているデータブロックとを含むライト命令を発行し、トランザクション制御部２０に送付する（ステップＳ１０５）。
【００５５】
次に、トランザクション制御部２０から、ステップＳ１０５で送付したライト命令が完了した旨の通知を受信したＤＭＡリクエスト制御部３０１は、完了通知部２０４にＤＭＡ転送処理の実行が完了した旨の通知を送付する（ステップＳ１０６）。なお、ＤＭＡ転送情報または分割ＤＭＡ転送情報に含まれる転送データ長が、データブロックの大きさより大きい場合は、ステップＳ１０３乃至Ｓ１０５の処理が複数回繰り返される。
【００５６】
ＤＭＡ転送処理の実行が完了した旨の通知を受信した完了通知部２０４は、エンジン使用状況テーブル２０２１のレコードの情報を更新するとともに、必要な場合は、ディスクリプタ１０１の転送完了フラグと実行バリッドとを更新することで、ディスクリプタの完了を設定する（ステップＳ１０７）。なお、ステップＳ１０６およびＳ１０７で説明した、ＤＭＡ転送処理の完了時のディスクリプタ制御部２００の動作の詳細については、図６のフローチャートを基に後述する。
【００５７】
このようにして、ディスクリプタ１０１に格納されたＤＭＡ転送情報に基づくＤＭＡ転送処理が行われる。
【００５８】
次に、ステップＳ１０１およびＳ１０２で説明した、ＤＭＡ転送処理の開始の際のディスクリプタ制御部２００の動作について図５のフローチャートを参照して説明する。
【００５９】
図５を参照すると、まず、ディスクリプタ選択部２０１が、ディスクリプタ群１００に含まれる有効ディスクリプタの総数を算出する。そして、ディスクリプタ選択部２０１は、エンジン使用状況テーブル２０２１を参照し、ＤＭＡエンジン３００の総数、すなわちエンジン使用状況テーブル２０２１に登録されているレコードの数を計数する。そして、ディスクリプタ選択部２０１は、算出した有効ディスクリプタの総数がＤＭＡエンジン３００の総数以上か否かの判定を行う（ステップＳ２０１）。
【００６０】
算出した有効ディスクリプタの総数がＤＭＡエンジン３００の総数以上の場合（ステップＳ２０１で「ＹＥＳ」の場合。）は、ディスクリプタ選択部２０１は、選択した有効ディスクリプタに登録されているＤＭＡ転送情報をエンジン設定部２０３に送付する。そして、エンジン設定部２０３は、エンジン使用状況テーブル２０２１を参照し、現在未使用のＤＭＡエンジン３００を選択する。すなわち、エンジン使用状況テーブル２０２１のディスクリプタ識別欄に識別情報が登録されていないレコードを検索し、検索したレコードのエンジン識別欄に格納されている識別情報が示すＤＭＡエンジン３００を選択する。
【００６１】
エンジン設定部２０３は、選択した未使用のＤＭＡエンジン３００に、ディスクリプタ選択部２０１から受け取ったＤＭＡ転送情報を送付し、そのＤＭＡエンジンを起動する（ステップＳ２０７）。また、エンジン設定部２０３は、エンジン使用状況テーブル２０２１の検索したレコードのディスクリプタ識別欄に、ディスクリプタ選択部２０１から送付されたＤＭＡ転送情報が登録されているディスクリプタを示す識別情報を登録する。そして、エンジン設定部２０３は、そのレコードの複数エンジン使用フラグ欄に０（ゼロ）を登録する。
【００６２】
一方、算出した有効ディスクリプタの数がＤＭＡエンジン３００の総数より少ない場合（ステップＳ２０１で「ＮＯ」の場合。）は、ディスクリプタ選択部２０１は、ディスクリプタ群１００に含まれるディスクリプタ１０１のうち、有効ディスクリプタであり、且つ、エンジン使用状況テーブル２０２１のディスクリプタ識別欄に識別情報が登録されていないディスクリプタ（以降、「未実行ディスクリプタ」と称する）を１つ選択する。なお、選択すべきディスクリプタが複数存在する場合は、ラウンドロビン方式等の予め定めた所定のルールで選択するディスクリプタを決定する。
【００６３】
次に、ディスクリプタ選択部２０１は、選択した有効ディスクリプタに登録されているＤＭＡ転送情報をエンジン設定部２０３に送付する。そして、エンジン設定部２０３は、エンジン使用状況テーブル２０２１を参照し、現在未使用のＤＭＡエンジン３００が２つ以上あるか否かを判定する（ステップＳ２０２）。すなわち、エンジン使用状況テーブル２０２１を検索し、ディスクリプタ識別欄に識別情報が登録されていないレコードが２つ以上あるか否かを判定する。
【００６４】
現在未使用のＤＭＡエンジン３００が１つしか無い場合（ステップＳ２０２で「ＮＯ」の場合。）は、エンジン設定部２０３は、そのＤＭＡエンジン３００を選択する。そして、選択した未使用のＤＭＡエンジン３００に、ディスクリプタ選択部２０１から受け取ったＤＭＡ転送情報を送付し、そのＤＭＡエンジンを起動する（ステップＳ２０７）。また、エンジン使用状況テーブル２０２１を更新する。
【００６５】
現在未使用のＤＭＡエンジン３００が２つ以上ある場合（ステップＳ２０２で「ＹＥＳ」の場合。）、エンジン設定部２０３は、ディスクリプタ選択部２０１から受け取ったＤＭＡ転送情報を分割すべきか否かを、前述の所定の方法で判定する（ステップＳ２０３）。ここで、ＤＭＡ転送情報を分割すべきか否かを判定する方法の一例を以下に説明する。
【００６６】
エンジン設定部２０３は、データバッファ３０２の大きさから算出されるデータバッファの深さと、ＤＭＡ転送情報に含まれる転送データ長、およびデータブロックの大きさから算出した、転送データのデータブロック数（以降、「転送データブロック数」と称する。）と、転送元アドレスが示す転送元のレイテンシの値とを基に、そのＤＭＡ転送情報を分割すべきか否かを判定する。
【００６７】
すなわち、以下の式（１）および式（２）の両方が満たされる場合に、エンジン設定部２０３は、ＤＭＡ転送情報を分割すべきと判定する。
【００６８】
データバッファの深さ  ＜  転送データブロック数・・・（１）
データバッファの深さ  ＜  転送元のレイテンシの値・・・（２）
例えば、データバッファの深さが４であり、転送元のメモリ４０のレイテンシの値が８である場合、エンジン設定部２０３は、転送データブロック数が５以上の場合は分割すべきであると判定し、４以下の場合は分割すべきではないと判定する。
【００６９】
ステップＳ２０３でＤＭＡ転送情報を分割すべきではないと判定された場合（ステップＳ２０３で「ＮＯ」の場合。）は、エンジン設定部２０３は、現在未使用のＤＭＡエンジン３００のうち、１つのＤＭＡエンジン３００を選択する。そして、選択した未使用のＤＭＡエンジン３００に、ディスクリプタ選択部２０１から受け取ったＤＭＡ転送情報を送付し、そのＤＭＡエンジンを起動する（ステップＳ２０７）。また、エンジン使用状況テーブル２０２１を更新する。
【００７０】
一方、ステップＳ２０３でＤＭＡ転送情報を分割すべきであると判定された場合（ステップＳ２０３で「ＹＥＳ」の場合。）は、エンジン設定部２０３は、ディスクリプタ選択部２０１から受け取ったＤＭＡ転送情報の分割数を、所定の方法で算出する。そして、エンジン設定部２０３は、当該ＤＭＡ転送情報を基に、算出した分割数と同じ数の分割ＤＭＡ転送情報を生成する（ステップＳ２０４）。ここで、ＤＭＡ転送情報の分割数を算出する方法の一例を以下に説明する。
【００７１】
エンジン設定部２０３は、ディスクリプタ選択部２０１から受け取ったＤＭＡ転送情報に含まれる転送データ長から算出した転送データブロック数と、データバッファ３０２の大きさから算出したデータバッファの深さと、未使用ＤＭＡエンジン３００の数と、未実行ディスクリプタ１０１の数と、転送元のレイテンシの値とを基に、分割数を算出する。
【００７２】
すなわち、以下の式（３）を満たす場合は、エンジン設定部２０３は、以下の式（４）の計算結果を切り上げて整数にした値を求め、その値を、分割する最大の数（以降、「最大分割数」と称する。）とする。
【００７３】
転送データブロック数  ＜  転送元のレイテンシの値・・・（３）
転送データブロック数／データバッファの深さ・・・（４）
また、上記式（３）を満たさない場合は、エンジン設定部２０３は、以下の式（５）の計算結果を切り上げて整数にした値を求め、その値を最大分割数とする。
【００７４】
転送元のレイテンシの値／データバッファの深さ・・・（５）
例えば、データバッファの深さが４であり、転送元の入出力部５０のレイテンシの値が２０であり、転送データブロック数が１２である場合、上記式（３）を満たすので、エンジン設定部２０３は、上記式（４）を適用し最大分割数の３を求める。
【００７５】
次に、エンジン設定部２０３は、求めた最大分割数と、未使用のＤＭＡエンジン３００の数とを比較し、以下の式（６）を満たす場合は、未使用ＤＭＡエンジンの数を分割数とする。
【００７６】
最大分割数  ＞  未使用ＤＭＡエンジンの数・・・（６）
次に、他に未実行ディスクリプタがある場合は、エンジン設定部２０３は、以下の式（７）を満たし、且つ、最大分割数以下である分割数を求める。
【００７７】
分割数＋他の未実行ディスクリプタ数  ＜＝  未使用ＤＭＡエンジンの数・・・（７）
そして、式（６）、および式（７）のどちらも満たさない場合は、エンジン設定部２０３は、求めた最大分割数を分割数とする。
【００７８】
図５のフローチャートの説明に戻り、次に、エンジン設定部２０３は、算出した分割数と同じ数の未使用ＤＭＡエンジン３００を選択する。
【００７９】
そして、エンジン設定部２０３は、エンジン使用状況テーブル２０２１を参照し、各選択したＤＭＡエンジン３００を示す識別情報がエンジン識別欄に登録されているレコードのディスクリプタ識別欄に、生成した分割ＤＭＡ転送情報の基となったＤＭＡ転送情報が格納されているディスクリプタを示す識別情報を登録する。さらに、エンジン設定部２０３は、各該レコードの複数エンジン使用フラグ欄に、複数に分割されていることを示す「１」を登録する（ステップＳ２０５）。
【００８０】
次に、エンジン設定部２０３は、ステップＳ２０５で選択したＤＭＡエンジン３００の各々に、生成した分割ＤＭＡ転送情報の各々を送付し、各ＤＭＡエンジンを起動する（ステップＳ２０６）。
【００８１】
このようにして、１つのディスクリプタ１０１に登録されたＤＭＡ転送情報が、適切な分割数の分割ＤＭＡ転送情報に分割され、それぞれが別のＤＭＡエンジン３００で並行して実行される。
【００８２】
次に、ステップＳ１０６およびＳ１０７で説明した、ＤＭＡ転送処理の完了時のディスクリプタ制御部２００の動作について図６のフローチャートを参照して説明する。
【００８３】
図６を参照すると、まず、ＤＭＡリクエスト制御部３０１は、ディスクリプタ制御部２００に含まれる完了通知部２０４にＤＭＡ転送処理の実行が完了した旨の通知を送付する。
【００８４】
完了通知部２０４は、エンジン使用状況テーブル２０２１を参照し、完了通知を送付したＤＭＡリクエスト制御部３０１が含まれるＤＭＡエンジン３００を示す識別情報がエンジン識別欄に格納されているレコードの、複数エンジン使用フラグ欄に「０（ゼロ）」が格納されているか否か（すなわち、使用したＤＭＡエンジンは１つか否か）を判定する（ステップＳ３０１）。
【００８５】
複数エンジン使用フラグ欄に「０（ゼロ）」が格納されている場合（ステップＳ３０１で「ＹＥＳ」の場合。）、完了通知部２０４は、そのレコードのディスクリプタ識別欄に格納されている識別情報を削除する（ステップＳ３０２）。そして、完了通知部２０４は、その削除した識別情報が示すディスクリプタ１０１に含まれる実行バリッドに「０（ゼロ）」を登録するとともに、転送完了フラグに「１」を登録する（ステップＳ３０５）。
【００８６】
ステップＳ３０１で、複数エンジン使用フラグ欄に「１」が格納されている場合（ステップＳ３０１で「ＮＯ」の場合。）、完了通知部２０４は、そのレコードのディスクリプタ識別欄に格納されている識別情報と、複数エンジン使用フラグ欄に格納されている値とを削除する（ステップＳ３０３）。このとき、完了通知部２０４は、削除した識別情報と同じ識別情報が、他のレコードのディスクリプタ識別欄に登録されているか否かを判別する（ステップＳ３０４）。
【００８７】
他のレコードのディスクリプタ識別欄に、同じ識別情報が登録されていない場合（ステップＳ３０４で「ＮＯ」の場合。）、完了通知部２０４は、その削除した識別情報が示すディスクリプタ１０１に含まれる実行バリッドに「０（ゼロ）」を登録するとともに、転送完了フラグに「１」を登録する（ステップＳ３０５）。
【００８８】
以上、本実施形態には、リソースの競合による使用効率の低下やシステム全体のスループットの低下を招かずに、複数のＤＭＡ転送処理を行うことができるという効果がある。
【００８９】
その理由としては、ディスクリプタ制御部２０１が、有効ディスクリプタの総数とＤＭＡエンジン３００の総数とを比較し、有効ディスクリプタの総数がＤＭＡエンジン３００の総数以上の場合はディスクリプタの分割を行わずに、有効ディスクリプタの並列処理を妨げないようにする。そして、未使用のＤＭＡエンジン３００が２つ以上ある場合に、エンジン設定部２０３が、ディスクリプタ１０１を分割すべきか否かを、データバッファの深さと、転送データブロック数と、転送元のレイテンシの値とを基にした所定の判定方法で判定する。そして、分割する場合は、ディスクリプタ１０１の適切な分割数を、転送データブロック数と、データバッファの深さと、未使用ＤＭＡエンジン３００の数と、未実行のディスクリプタ数と、転送元のレイテンシの値とを基にした所定の算出方法で求める。そして、エンジン設定部２０３が、求めた適切な分割数でディスクリプタ１０１を分割し、分割したディスクリプタを基にＤＭＡ転送処理が行われるからである。
【００９０】
［第２の実施形態］
次に、本発明の第１の実施形態の基本的な構成を含む、第２の実施形態について説明する。
【００９１】
図７は本実施形態を示すブロック図である。
【００９２】
図７を参照すると、情報処理装置２は、複数の転送情報記憶部１１０と、転送情報制御部２１０と、複数のＤＭＡエンジン３１０とを含む。
【００９３】
転送情報記憶部１１０には、ＤＭＡ転送処理の実行に必要な第１の転送情報が格納されている。
【００９４】
ＤＭＡエンジン３１０は、転送情報記憶部１１０に格納された第１の転送情報に基づきＤＭＡ転送処理を行う。また、ＤＭＡエンジン３１０は、ＤＭＡ転送処理で読み出した転送データを一時的に保持する転送データバッファ（図示せず）を備える。
【００９５】
転送情報制御部２１０は、プログラムを記憶する記憶デバイス（図示せず）と、そのプログラムをメモリに読み込んで命令を実行する少なくとも１つのプロセッサ（図示せず）とを含む。
【００９６】
転送情報制御部２１０は、転送情報記憶部１１０に格納された第１の転送情報を分割すべきか否かを、転送データの大きさと、ＤＭＡ転送処理が完了するまでの転送時間と、転送データバッファの大きさとに基づいて判定する。なお、第１の転送情報を分割すべきか否かを判定する判定方法の一例については、第１の実施形態で説明した、ＤＭＡ転送情報を分割すべきか否かを判定する方法の一例と同一であるので、ここでの説明は省略する。
【００９７】
第１の転送情報を分割すべきと判定した場合、転送情報制御部２１０は、第１の転送情報の分割数を、転送データの大きさと、ＤＭＡ転送処理が完了するまでの転送時間と、転送データバッファの大きさと、ＤＭＡ転送処理を実行していない未使用ＤＭＡエンジンの数と、ＤＭＡエンジンによってＤＭＡ転送処理が実行されていない第１の転送情報の数とに基づいて決定する。なお、第１の転送情報の分割数を決定する方法の一例については、第１の実施形態で説明した、ＤＭＡ転送情報の分割数を算出する方法の一例と同一であるので、ここでの説明は省略する。
【００９８】
そして、転送情報制御部２１０は、決定した分割数で、１つの転送情報記憶部１１０に格納された第１の転送情報を分割し、複数の第２の転送情報を生成する。
【００９９】
次に、転送情報制御部２１０は、生成した第２の転送情報の各々を、ＤＭＡエンジン３１０の各々に送付する。
【０１００】
そして、転送情報制御部２１０は、第２の転送情報を送付した各ＤＭＡエンジンを起動する。
【０１０１】
以上、本実施形態には、第１の実施形態と同様に、リソースの競合による使用効率の低下やシステム全体のスループットの低下を招かずに、複数のＤＭＡ転送処理を行うことができるという効果がある。
【０１０２】
その理由としては、転送情報制御部２１０が、第１の転送情報を分割すべきか否かを、転送データの大きさと、ＤＭＡ転送処理が完了するまでの転送時間と、転送データバッファの大きさとに基づいて判定する。そして、分割する場合は、第１の転送情報の適切な分割数を、転送データの大きさと、ＤＭＡ転送処理が完了するまでの転送時間と、転送データバッファの大きさと、ＤＭＡ転送処理を実行していない未使用ＤＭＡエンジンの数と、ＤＭＡエンジンによってＤＭＡ転送処理が実行されていない第１の転送情報の数とに基づいて決定する。そして、決定した適切な分割数で第１の転送情報を分割し、分割した第２の転送情報を基にＤＭＡ転送処理が行われるからである。
【符号の説明】
【０１０３】
１    情報処理装置
２    情報処理装置
１０    ＤＭＡ転送部
２０    トランザクション制御部
３０    ＣＰＵ
４０    メモリ
５０    入出力部
１００    ディスクリプタ群
１０１    ディスクリプタ
１１０    転送情報記憶部
２００    ディスクリプタ制御部
２０１    ディスクリプタ選択部
２０２    エンジン使用状況管理部
２０３    エンジン設定部
２０４    完了通知部
２１０    転送情報制御部
３００    ＤＭＡエンジン
３０１    ＤＭＡリクエスト制御部
３０２    データバッファ
３１０    ＤＭＡエンジン
２０２１    エンジン使用状況テーブル
【図１】
0006698353.tif 000002
【図２】
0006698353.tif 000003
【図３】
0006698353.tif 000004
【図４】
0006698353.tif 000005
【図５】
0006698353.tif 000006
【図６】
0006698353.tif 000007
【図７】
0006698353.tif 000008