(57)【特許請求の範囲】
【請求項１】
複数のダイレクトメモリアクセス（ＤＭＡ）制御手段のうち１つのＤＭＡ制御手段が伝送路を使用している間、他のＤＭＡ制御手段は前記伝送路を使用しないように制御され、それぞれに優先度が設定される複数のＤＭＡ制御手段と、 
前記複数のＤＭＡ制御手段のうち、いずれかの前記ＤＭＡ制御手段に対する、ＤＭＡ転送の転送情報を含むディスクリプタを複数連ねて構成されるディスクリプタリストに基づく転送指示を受け付けたときに、当該ＤＭＡ制御手段がその転送指示により伝送路を占有している間のＤＭＡ転送において転送する、前記ディスクリプタリストに含まれるディスクリプタの数により転送量を規定して転送指示を作成するとともに、その作成した転送指示を当該ＤＭＡ制御手段に与える転送指示手段と、
を備え、
前記転送指示手段は、前記複数のＤＭＡ制御手段のうち、特定の次にＤＭＡ転送を行わせる予定のいずれかの前記ＤＭＡ制御手段に対して転送指示をする際、前記特定のＤＭＡ制御手段よりも優先度が高い他の前記ＤＭＡ制御手段がＤＭＡ転送の実行している場合、前記特定のＤＭＡ制御手段に与えられる予定の作成済みの転送指示を破棄すると共に、破棄した転送指示の代わりに、前記優先度の高い前記ＤＭＡ制御手段によるＤＭＡ転送の待ち時間が許容待ち時間以下となるように、ディスクリプトリストに含まれるディスクリプトの数を減らすことにより、前記特定のＤＭＡ制御手段のＤＭＡ転送のＤＭＡデータ転送量を新たに規定して転送指示を作成し、前記特定のＤＭＡ制御手段に対して、前記新たにＤＭＡデータ転送量を規定して作成した転送指示を与える、
ことを特徴とするＤＭＡ制御システム。
【請求項２】
請求項１に記載のＤＭＡ制御システムであって、
前記転送指示手段は、特定の次にＤＭＡ転送を行わせる予定のいずれかの前記ＤＭＡ制御手段に対し、
ＤＭＡ転送に利用されている前記優先度の高い前記ＤＭＡ制御手段からＤＭＡ転送の終了の通知を受けた場合であって前記優先度の高い前記ＤＭＡ制御手段がＤＭＡ転送を終了することによって前記特定のＤＭＡ制御手段が単独でＤＭＡ転送の実行に利用されることになる場合、前記特定のＤＭＡ制御手段に与える予定の作成済みの転送指示がある場合には、その転送指示を破棄すると共に、破棄した転送指示に代わりに、転送効率が最大となるように、ディスクリプトリストに含まれるディスクリプトの数を増やすことにより、前記特定のＤＭＡ制御手段のＤＭＡ転送のＤＭＡデータ転送量を新たに規定して前記特定のＤＭＡ制御手段に対して、前記新たにＤＭＡデータ転送量を規定して作成した転送指示を与える、
ことを特徴とするＤＭＡ制御システム。
【請求項３】
複数のダイレクトメモリアクセス（ＤＭＡ）制御手段のうち１つのＤＭＡ制御手段が伝送路を使用している間、他のＤＭＡ制御手段は前記伝送路を使用しないように制御され、それぞれに優先度が設定される複数のＤＭＡ制御手段と、
前記複数のＤＭＡ制御手段のうち、いずれかの前記ＤＭＡ制御手段に対する、ＤＭＡ転送の転送情報を含むディスクリプタを複数連ねて構成されるディスクリプタリストに基づく転送指示を受け付けたときに、当該ＤＭＡ制御手段がその転送指示により伝送路を占有している間のＤＭＡ転送において転送する、前記ディスクリプタリストに含まれるディスクリプタの数により転送量を規定して転送指示を作成するとともに、その作成した転送指示を当該ＤＭＡ制御手段に与える転送指示手段と、
を備え、
前記転送指示手段は、画像読み取り、印刷、又は画像情報の変換の作業を行うにあたって前記複数のＤＭＡ制御手段のうち、特定の次にＤＭＡ転送を行わせる予定のいずれかの前記ＤＭＡ制御手段に対して転送指示をする際、前記特定のＤＭＡ制御手段よりも優先度が高い他の前記ＤＭＡ制御手段がＤＭＡ転送の実行している場合、前記特定のＤＭＡ制御手段に与えられる予定の作成済みの転送指示を破棄すると共に、破棄した転送指示の代わりに、前記優先度の高い前記ＤＭＡ制御手段によるＤＭＡ転送の待ち時間が許容待ち時間以下となるように、ディスクリプトリストに含まれるディスクリプトの数を減らすことにより、前記特定のＤＭＡ制御手段のＤＭＡ転送のＤＭＡデータ転送量を新たに規定して転送指示を作成し、前記特定のＤＭＡ制御手段に対して、前記新たにＤＭＡデータ転送量を規定して作成した転送指示を与える、
ことを特徴とする印刷装置。
【請求項４】
コンピュータを、
複数のダイレクトメモリアクセス（ＤＭＡ）制御手段のうち１つのＤＭＡ制御手段が伝送路を使用している間、他のＤＭＡ制御手段は前記伝送路を使用しないように制御され、それぞれに優先度が設定される複数のＤＭＡ制御手段、
前記複数のＤＭＡ制御手段のうち、いずれかの前記ＤＭＡ制御手段に対する、ＤＭＡ転送の転送情報を含むディスクリプタを複数連ねて構成されるディスクリプタリストに基づく転送指示を受け付けたときに、当該ＤＭＡ制御手段がその転送指示により伝送路を占有している間のＤＭＡ転送において転送する、前記ディスクリプタリストに含まれるディスクリプタの数により転送量を規定して転送指示を作成するとともに、その作成した転送指示を当該ＤＭＡ制御手段に与える転送指示手段、
として機能させ、
前記転送指示手段は、前記複数のＤＭＡ制御手段のうち、特定の次にＤＭＡ転送を行わせる予定のいずれかの前記ＤＭＡ制御手段に対して転送指示をする際、前記特定のＤＭＡ制御手段よりも優先度が高い他の前記ＤＭＡ制御手段がＤＭＡ転送の実行している場合、前記特定のＤＭＡ制御手段に与えられる予定の作成済みの転送指示を破棄すると共に、破棄した転送指示の代わりに、前記優先度の高い前記ＤＭＡ制御手段によるＤＭＡ転送の待ち時間が許容待ち時間以下となるように、ディスクリプトリストに含まれるディスクリプトの数を減らすことにより、前記特定のＤＭＡ制御手段のＤＭＡ転送のＤＭＡデータ転送量を新たに規定して転送指示を作成し、前記特定のＤＭＡ制御手段に対して、前記新たにＤＭＡデータ転送量を規定して作成した転送指示を与える、
ように機能させるための転送指示プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＤＭＡ制御システム、印刷装置、および転送指示プログラムに関する。
【背景技術】
【０００２】
各種の装置やメモリが中央処理装置（CPU: Central Processing Unit）を介すことなくデータ転送を行うダイレクトメモリアクセス（DMA: Direct Memory Access）転送を制御するＤＭＡコントローラが知られている。
【０００３】
特許文献１には、プロセッサがメモリにそれぞれ異なる優先度の複数のディスクリプタ領域を設定し、ＤＭＡ制御回路が上記メモリに用意されたディスクリプタの中から優先度の高いディスクリプタを優先してフェッチする技術が記載されている。
【０００４】
特許文献２には、複数のモジュールとメモリとの間で転送されるデータのサイズ等を含むディスクリプタ情報に、複数のモジュールによる共有バスの使用権を調停する際の指標となる優先度を含ませて、該ディスクリプタ情報に応じた優先度に基づいて複数のモジュールによる共有バスの使用権の調停を行う技術が記載されている。
【０００５】
【特許文献１】特開２００５−２５８５０９号公報
【特許文献２】特開２００６−２７７３６３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明は、複数のＤＭＡ制御手段のうち特定のＤＭＡ制御手段によるＤＭＡ転送の転送量を、他のＤＭＡ制御手段の利用状況に応じて制御することが可能なＤＭＡ制御システム、印刷装置、および転送指示プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明に係るＤＭＡ制御システムは、複数のダイレクトメモリアクセス（ＤＭＡ）制御手段のうち１つのＤＭＡ制御手段が伝送路を使用している間、他のＤＭＡ制御手段は前記伝送路を使用しないように制御され、それぞれに優先度が設定される複数のＤＭＡ制御手段と、 前記複数のＤＭＡ制御手段のうち、いずれかの前記ＤＭＡ制御手段に対する、ＤＭＡ転送の転送情報を含むディスクリプタを複数連ねて構成されるディスクリプタリストに基づく転送指示を受け付けたときに、当該ＤＭＡ制御手段がその転送指示により伝送路を占有している間のＤＭＡ転送において転送する、前記ディスクリプタリストに含まれるディスクリプタの数により転送量を規定して転送指示を作成するとともに、その作成した転送指示を当該ＤＭＡ制御手段に与える転送指示手段と、備え、前記転送指示手段は、前記複数のＤＭＡ制御手段のうち、特定の次にＤＭＡ転送を行わせる予定のいずれかの前記ＤＭＡ制御手段に対して転送指示をする際、前記特定のＤＭＡ制御手段よりも優先度が高い他の前記ＤＭＡ制御手段がＤＭＡ転送の実行している場合、前記特定のＤＭＡ制御手段に与えられる予定の作成済みの転送指示を破棄すると共に、破棄した転送指示の代わりに、前記優先度の高い前記ＤＭＡ制御手段によるＤＭＡ転送の待ち時間が許容待ち時間以下となるように、ディスクリプトリストに含まれるディスクリプトの数を減らすことにより、前記特定のＤＭＡ制御手段のＤＭＡ転送のＤＭＡデータ転送量を新たに規定して転送指示を作成し、前記特定のＤＭＡ制御手段に対して、前記新たにＤＭＡデータ転送量を規定して作成した転送指示を与える、ことを特徴とする。
【０００９】
また、本発明の一態様では、前記転送指示手段は、特定の次にＤＭＡ転送を行わせる予定のいずれかの前記ＤＭＡ制御手段に対し、ＤＭＡ転送に利用されている前記優先度の高い前記ＤＭＡ制御手段からＤＭＡ転送の終了の通知を受けた場合であって前記優先度の高い前記ＤＭＡ制御手段がＤＭＡ転送を終了することによって前記特定のＤＭＡ制御手段が単独でＤＭＡ転送の実行に利用されることになる場合、前記特定のＤＭＡ制御手段に与える予定の作成済みの転送指示がある場合には、その転送指示を破棄すると共に、破棄した転送指示に代わりに、転送効率が最大となるように、ディスクリプトリストに含まれるディスクリプトの数を増やすことにより、前記特定のＤＭＡ制御手段のＤＭＡ転送のＤＭＡデータ転送量を新たに規定して前記特定のＤＭＡ制御手段に対して、前記新たにＤＭＡデータ転送量を規定して作成した転送指示を与える、ことを特徴とする。
【００１２】
本発明に係る印刷装置は、複数のダイレクトメモリアクセス（ＤＭＡ）制御手段のうち１つのＤＭＡ制御手段が伝送路を使用している間、他のＤＭＡ制御手段は前記伝送路を使用しないように制御され、それぞれに優先度が設定される複数のＤＭＡ制御手段と、 前記複数のＤＭＡ制御手段のうち、いずれかの前記ＤＭＡ制御手段に対する、ＤＭＡ転送の転送情報を含むディスクリプタを複数連ねて構成されるディスクリプタリストに基づく転送指示を受け付けたときに、当該ＤＭＡ制御手段がその転送指示により伝送路を占有している間のＤＭＡ転送において転送する、前記ディスクリプタリストに含まれるディスクリプタの数により転送量を規定して転送指示を作成するとともに、その作成した転送指示を当該ＤＭＡ制御手段に与える転送指示手段と、備え、前記転送指示手段は、画像読み取り、印刷、又は画像情報の変換の作業を行うにあたって前記複数のＤＭＡ制御手段のうち、特定の次にＤＭＡ転送を行わせる予定のいずれかの前記ＤＭＡ制御手段に対して転送指示をする際、前記特定のＤＭＡ制御手段よりも優先度が高い他の前記ＤＭＡ制御手段がＤＭＡ転送の実行している場合、前記特定のＤＭＡ制御手段に与えられる予定の作成済みの転送指示を破棄すると共に、破棄した転送指示の代わりに、前記優先度の高い前記ＤＭＡ制御手段によるＤＭＡ転送の待ち時間が許容待ち時間以下となるように、ディスクリプトリストに含まれるディスクリプトの数を減らすことにより、前記特定のＤＭＡ制御手段のＤＭＡ転送のＤＭＡデータ転送量を新たに規定して転送指示を作成し、前記特定のＤＭＡ制御手段に対して、前記新たにＤＭＡデータ転送量を規定して作成した転送指示を与える、ことを特徴とする。
【００１３】
本発明に係る転送指示プログラムは、コンピュータを、複数のダイレクトメモリアクセス（ＤＭＡ）制御手段のうち１つのＤＭＡ制御手段が伝送路を使用している間、他のＤＭＡ制御手段は前記伝送路を使用しないように制御され、それぞれに優先度が設定される複数のＤＭＡ制御手段、前記複数のＤＭＡ制御手段のうち、いずれかの前記ＤＭＡ制御手段に対する、ＤＭＡ転送の転送情報を含むディスクリプタを複数連ねて構成されるディスクリプタリストに基づく転送指示を受け付けたときに、当該ＤＭＡ制御手段がその転送指示により伝送路を占有している間のＤＭＡ転送において転送する、前記ディスクリプタリストに含まれるディスクリプタの数により転送量を規定して転送指示を作成するとともに、その作成した転送指示を当該ＤＭＡ制御手段に与える転送指示手段、として機能させ、前記転送指示手段は、前記複数のＤＭＡ制御手段のうち、特定の次にＤＭＡ転送を行わせる予定のいずれかの前記ＤＭＡ制御手段に対して転送指示をする際、前記特定のＤＭＡ制御手段よりも優先度が高い他の前記ＤＭＡ制御手段がＤＭＡ転送の実行している場合、前記特定のＤＭＡ制御手段に与えられる予定の作成済みの転送指示を破棄すると共に、破棄した転送指示の代わりに、前記優先度の高い前記ＤＭＡ制御手段によるＤＭＡ転送の待ち時間が許容待ち時間以下となるように、ディスクリプトリストに含まれるディスクリプトの数を減らすことにより、前記特定のＤＭＡ制御手段のＤＭＡ転送のＤＭＡデータ転送量を新たに規定して転送指示を作成し、前記特定のＤＭＡ制御手段に対して、前記新たにＤＭＡデータ転送量を規定して作成した転送指示を与える、ように機能させる。
【発明の効果】
【００１４】
請求項１に記載の発明によれば、複数のＤＭＡ制御手段のうち特定のＤＭＡ制御手段によるＤＭＡ転送の転送量を、他のＤＭＡ制御手段の利用状況に応じて伝送路の帯域を有効に使用する制御をすることが可能となる。
【００１５】
請求項２に記載の発明によれば、他のＤＭＡ制御手段の利用の開始に対応して、他のＤＭＡ制御手段が利用中である場合に応じた伝送路の帯域を有効に使用する制御をすることが可能となる。
【００１６】
請求項３に記載の発明によれば、他のＤＭＡ制御手段の利用の終了に対応して、他のＤＭＡ制御手段が利用中でない場合に応じた伝送路の帯域を有効に使用する制御をすることが可能となる。
【００１７】
請求項４に記載の発明によれば、複数のＤＭＡ制御手段のうち特定のＤＭＡ制御手段によるＤＭＡ転送の転送量を、複数の他のＤＭＡ制御手段の利用状況の組み合わせに応じて伝送路の帯域を有効に使用する制御をすることが可能となる。
【００１８】
請求項５に記載の発明によれば、複数の他のＤＭＡ制御手段の利用状況の組み合わせの変化に対応して、伝送路の帯域を有効に使用する転送指示を作成することが可能となる。
【００１９】
請求項６に記載の発明によれば、複数のＤＭＡ制御手段のうち特定のＤＭＡ制御手段によるＤＭＡ転送の転送量を、他のＤＭＡ制御手段の利用状況に応じて伝送路の帯域を有効に使用する制御をすることが可能となる。
【００２０】
請求項７に記載の発明によれば、複数のＤＭＡ制御手段のうち特定のＤＭＡ制御手段によるＤＭＡ転送の転送量を、他のＤＭＡ制御手段の利用状況に応じて伝送路の帯域を有効に使用する制御をすることが可能となる。
【発明を実施するための最良の形態】
【００２１】
以下、本発明の実施の形態を図面に従って説明する。
【００２２】
図１は、本実施の形態に係るＤＭＡ制御システム１の機能的な構成の一例を示すブロック図である。図１において、ＤＭＡ制御システム１は、複数のＤＭＡ制御部１１，１２，・・・と、制御部２０と、転送指示部３０とを含む。なお、以下の説明では、ＤＭＡ制御部１１，１２，・・・を、特に区別する必要がない場合には「ＤＭＡ制御部１０」と総称する。
【００２３】
図２は、本実施の形態に係るＤＭＡ制御システム１の物理的な構成の一例を示すブロック図である。図２において、ＤＭＡ制御システム１は、ＣＰＵ５０と、メモリ６０と、入出力機器７０と、ＤＭＡコントローラ（以下、「ＤＭＡＣ」と称す）８０と、これらを相互に接続するバスＢとを含む。
【００２４】
図２の例では、図１の複数のＤＭＡ制御部１０および制御部２０は、複数のチャネルを有する１つのＤＭＡＣ８０により実現される。例えば、ＤＭＡ制御部１１，１２，・・・は、それぞれＤＭＡＣ８０の第１のチャネルＣＨ１，第２のチャネルＣＨ２，・・・により実現される。ただし、複数のＤＭＡ制御部１０および制御部２０は、他の物理的な構成により実現されてもよく、例えば、複数個のＤＭＡＣと、これらを制御する制御回路とにより実現されてもよい。ここで、上記複数のチャネルを有するＤＭＡＣ８０や複数個のＤＭＡＣとしては、例えば汎用のＤＭＡＣが用いられてもよい。
【００２５】
また、図２の例では、図１の転送指示部３０は、ＣＰＵ５０により実現される。具体的には、転送指示部３０の機能は、記録媒体に記録されたプログラム（例えばデバイスドライバ）がメモリ６０に読み出されてＣＰＵ５０により実行されることによって実現される。上記プログラムは、ＣＤ−ＲＯＭ等のコンピュータ読み取り可能な記録媒体に記録されて提供されることも可能であるし、データ信号として通信により提供されることも可能である。ただし、転送指示部３０は、他の物理的な構成により実現されてもよく、例えば、ハードウェアのみにより実現されてもよい。なお、コンピュータを、複数のＤＭＡ制御部１０および転送指示部３０として機能させるプログラムが提供されてもよい。
【００２６】
複数のＤＭＡ制御部１０は、それぞれ、転送指示に基づいて伝送路を使用してＤＭＡ転送を制御する。具体的には、複数のＤＭＡ制御部１０は、それぞれ、転送指示に従って、伝送路（例えばバスＢ）を介した転送元から転送先へのＤＭＡ転送を制御する。ここで、転送元や転送先は、例えば、転送指示により規定され、メモリ６０や入出力機器７０などである。
【００２７】
制御部２０は、複数のＤＭＡ制御部１０を制御する。具体的には、制御部２０は、複数のＤＭＡ制御部１０のうち１つのＤＭＡ制御部１０が伝送路を使用している間、他のＤＭＡ制御部１０は伝送路を使用しないように制御する。例えば、制御部２０は、複数のＤＭＡ制御部１０の間で、ラウンドロビン方式や固定優先順位方式などの調停方式により、伝送路の使用を調停する。一つの態様では、制御部２０は、ＤＭＡ制御部１０に伝送路を使用させる場合、１つの転送指示に基づくＤＭＡ転送の開始から完了までの間（すなわち転送指示単位で）、当該ＤＭＡ制御部１０に伝送路を占有させる。別の態様では、１つの転送指示に基づくＤＭＡ転送が複数の単位転送に分けて行われる構成において、制御部２０は、ＤＭＡ制御部１０に伝送路を使用させる場合、１つの単位転送の開始から完了までの間（すなわち単位転送単位で）、当該ＤＭＡ制御部１０に伝送路を占有させる。
【００２８】
転送指示部３０は、各ＤＭＡ制御部１０用の転送指示を作成して各ＤＭＡ制御部１０に与える。ここで、転送指示は、ＤＭＡ転送のために必要な情報を含み、例えば、転送元のアドレスを示す情報、転送量を示す情報、転送先のアドレスを示す情報などを含む。一つの態様では、転送指示部３０は、複数のＤＭＡ制御部１０の転送量を規定するとともに複数のＤＭＡ制御部１０に対して転送指示を与える。
【００２９】
転送指示部３０は、例えば、転送要求部４０から特定のＤＭＡ制御部１０に対するＤＭＡ転送の要求を受けると、当該要求に基づき、上記特定のＤＭＡ制御部１０用の転送指示を作成して当該特定のＤＭＡ制御部１０に与える。この場合、転送指示部３０は、上記要求に基づき、一連の複数の転送指示を作成してＤＭＡ制御部１０に与えてもよい。上記転送要求部４０は、例えば、上位アプリケーションにより実現される。
【００３０】
具体的な一態様では、転送指示部３０は、転送指示を作成し、当該転送指示を所定の記憶領域に格納した上で、当該転送指示が格納された場所を示す情報をＤＭＡ制御部１０に与える。当該ＤＭＡ制御部１０は、転送指示部３０から与えられた情報に基づき、上記所定の記憶領域から転送指示を読み出す。上記所定の記憶領域は、例えばメモリ６０内の記憶領域である。
【００３１】
転送指示部３０は、複数のＤＭＡ制御部１０のうち同一のＤＭＡ制御部１０に対して先の転送指示を与えた後に次の転送指示を与える場合には、先の転送指示に基づくＤＭＡ転送の完了を検知した後に上記次の転送指示を与える。したがって、一連の複数の転送指示に基づくＤＭＡ転送が行われる場合、先の転送指示に基づくＤＭＡ転送の完了を検知してから次の転送指示を与えるまでに時間を要するので、ＤＭＡ転送間に空き時間（インターバル）が生じる。
【００３２】
具体的な一態様では、ＤＭＡ制御部１０または制御部２０は、転送指示に基づくＤＭＡ転送が完了するとＤＭＡ転送の完了を転送指示部３０に通知し、転送指示部３０は、当該完了の通知を受けた後に、次の転送指示をＤＭＡ制御部１０に与える。例えば、ＤＭＡＣ８０は、ＤＭＡ転送が完了すると、ＣＰＵ５０に対してＤＭＡ転送完了を示す割り込みを発生させる。ＣＰＵ５０は、当該割り込みを受けた後に、次の転送指示をＤＭＡＣ８０に与える。割り込み発生から次の転送指示の付与までに空き時間が生じ、当該空き時間は、割り込み処理時間、オペレーティングシステムのオーバーヘッド、ＤＭＡＣ８０のレジスタの設定時間などを含む。
【００３３】
転送指示部３０は、複数のＤＭＡ制御部１０のうち特定のＤＭＡ制御部１０用の転送指示を作成する際、当該特定のＤＭＡ制御部１０以外の少なくとも１つの他のＤＭＡ制御部１０の利用状況に応じて、上記特定のＤＭＡ制御部１０用の転送指示により規定されるＤＭＡ転送の転送量を制御する。一つの態様では、転送指示部３０は、複数のＤＭＡ制御部１０のうち特定のＤＭＡ制御部１０の転送指示をする際、当該特定のＤＭＡ制御部１０以外の他のＤＭＡ制御部１０の利用状況に応じて、上記特定のＤＭＡ制御部１０のＤＭＡ転送の転送量を規定して上記特定のＤＭＡ制御部１０に対して転送指示を与える。
【００３４】
上記利用状況は、一つの態様では、利用中か否かの状況である。例えば、転送指示部３０は、他のＤＭＡ制御部１０が利用中であるか否かに応じて、転送指示により規定されるＤＭＡ転送の転送量を制御する。この場合、転送指示部３０は、所定の判断基準に基づいて、ＤＭＡ制御部１０が利用中であるか否かを判断する。例えば、転送指示部３０は、下記（ａ１）〜（ａ５）の場合に利用中であると判断する。
（ａ１）ＤＭＡ制御部１０によるＤＭＡ転送が行われている場合
（ａ２）ＤＭＡ制御部１０に転送指示が与えられた後、当該転送指示に基づくＤＭＡ転送が完了していない場合
（ａ３）ＤＭＡ制御部１０に転送指示が与えられた後、当該転送指示を含む一連の転送指示に基づくＤＭＡ転送が完了していない場合
（ａ４）転送指示部３０がＤＭＡ制御部１０に対するＤＭＡ転送の要求を受けた後、当該要求に係るＤＭＡ転送が完了していない場合
（ａ５）転送指示部３０がＤＭＡ制御部１０の利用の開始を検知した後、当該ＤＭＡ制御部１０の利用の終了を検知していない場合（例えば、転送指示部３０が特定のＤＭＡ制御部１０を利用するジョブ（作業）の開始の通知を受けた後、当該ジョブの終了の通知を受けていない場合）
【００３５】
一つの態様では、転送指示部３０は、上記他のＤＭＡ制御部１０の利用の開始を検知した場合、上記特定のＤＭＡ制御部１０に与えられる予定の作成済みの転送指示があるときには、当該作成済みの転送指示を破棄し、上記他のＤＭＡ制御部１０が利用中である場合に応じた転送量を規定する新たな転送指示を作成する。一つの態様では、転送指示部３０は、上記他のＤＭＡ制御部１０の利用の開始を検知した場合、上記特定のＤＭＡ制御部１０に与えられる予定の作成済みの転送指示があるときには、当該作成済みの転送指示を破棄し、上記他のＤＭＡ制御部１０が利用中である場合に応じた転送量を規定して上記特定のＤＭＡ制御部１０に対して転送指示を与える。ここで、他のＤＭＡ制御部１０の利用の開始を検知した場合としては、例えば下記（ｂ１）〜（ｂ４）の場合が挙げられる。
（ｂ１）ＤＭＡ制御部１０によるＤＭＡ転送が開始されたことを検知した場合
（ｂ２）ＤＭＡ制御部１０に転送指示が与えられた場合
（ｂ３）転送指示部３０がＤＭＡ制御部１０に対するＤＭＡ転送の要求を受けた場合
（ｂ４）転送指示部３０が特定のＤＭＡ制御部１０を利用するジョブの開始の通知（例えばジョブが開始されることの通知またはジョブが開始されたことの通知）を受けた場合
【００３６】
また、一つの態様では、転送指示部３０は、上記他のＤＭＡ制御部１０の利用の終了を検知した場合、上記特定のＤＭＡ制御部１０に与えられる予定の作成済みの転送指示があるときには、当該作成済みの転送指示を破棄し、上記他のＤＭＡ制御部１０が利用中でない場合に応じた転送量を規定する新たな転送指示を作成する。一つの態様では、転送指示部３０は、上記他のＤＭＡ制御部１０の利用の終了を検知した場合、上記特定のＤＭＡ制御部１０に与えられる予定の作成済みの転送指示があるときには、当該作成済みの転送指示を破棄し、上記他のＤＭＡ制御部１０が利用中でない場合に応じた転送量を規定して上記特定のＤＭＡ制御部１０に対して転送指示を与える。ここで、他のＤＭＡ制御部１０の利用の終了を検知した場合としては、例えば下記（ｃ１）〜（ｃ５）の場合が挙げられる。
（ｃ１）ＤＭＡ制御部１０によるＤＭＡ転送が終了したことを検知した場合
（ｃ２）ＤＭＡ制御部１０による１つの転送指示に基づくＤＭＡ転送の完了を検知した場合
（ｃ３）ＤＭＡ制御部１０による一連の複数の転送指示に基づくＤＭＡ転送の完了を検知した場合
（ｃ４）要求対象のＤＭＡ制御部１０による、転送指示部３０が受けた要求に係るＤＭＡ転送の完了を検知した場合
（ｃ５）ＤＭＡ制御部１０を利用するジョブの終了の通知（例えばジョブが終了することの通知またはジョブが終了したことの通知）を受けた場合
【００３７】
また、ＤＭＡ制御システム１が３つ以上のＤＭＡ制御部１０を有する構成において、一つの態様では、転送指示部３０は、上記特定のＤＭＡ制御部１０用の転送指示を作成する際、上記特定のＤＭＡ制御部１０以外の複数の他のＤＭＡ制御部１０の利用状況の組み合わせに応じて、上記転送指示により規定されるＤＭＡ転送の転送量を制御する。例えば、転送指示部３０は、上記複数の他のＤＭＡ制御部１０のうち利用中のＤＭＡ制御部１０の組み合わせに応じて、上記転送指示により規定されるＤＭＡ転送の転送量を制御する。一つの態様では、転送指示部３０は、上記特定のＤＭＡ制御部１０の転送指示を作成する際、上記特定のＤＭＡ制御部１０以外の複数の他のＤＭＡ制御部１０の利用状況の組み合わせに応じて、上記特定のＤＭＡ制御部１０の転送量を規定して上記特定のＤＭＡ制御部１０に対して転送指示を与える。
【００３８】
例えば、利用中のＤＭＡ制御部１０の組み合わせと、転送量を制御するための制御情報とが互いに対応付けられたテーブルが予め用意される。そして、転送指示部３０は、当該テーブルに基づき、利用中のＤＭＡ制御部１０の組み合わせに対応する制御情報を特定し、当該特定された制御情報に基づいて転送指示を作成する。ここで、制御情報は、例えば、１つの転送指示による転送量の上限を示す情報である。また、制御情報は、例えば、ＤＭＡ転送レートの実測に基づいて設定される。一つの態様では、上記テーブル内の制御情報は変更可能であり、例えば利用者の用途に応じて変更される。
【００３９】
一つの態様では、特定のＤＭＡ制御部１０が単独でＤＭＡ転送を行う場合、または特定のＤＭＡ制御部１０以外の他の全てのＤＭＡ制御部１０が利用中でない場合には、当該特定のＤＭＡ制御部１０用の転送指示は、最も転送効率の良い転送量でＤＭＡ転送が行われるように作成される。
【００４０】
また、一つの態様では、転送指示部３０は、上記組み合わせの変化を検知した場合、上記特定のＤＭＡ制御部１０に与えられる予定の作成済みの転送指示があるときには、当該作成済みの転送指示を破棄し、変化後の組み合わせに応じた転送量を規定する新たな転送指示を作成する。一つの態様では、転送指示部３０は、上記組み合わせの変化を検知した場合、上記特定のＤＭＡ制御部１０に与えられる予定の作成済みの転送指示があるときには、当該作成済みの転送指示を破棄し、変化後の組み合わせに応じた転送量を規定して上記特定のＤＭＡ制御部１０に対して転送指示を与える。
【００４１】
なお、転送指示部３０は、上記利用状況に応じた転送量の制御を、複数のＤＭＡ制御部１０のうちの全部のＤＭＡ制御部１０に適用してもよいし、一部のＤＭＡ制御部１０だけに適用してもよい。すなわち、全部のＤＭＡ制御部１０が上記特定のＤＭＡ制御部１０となり得てもよいし、一部のＤＭＡ制御部１０だけが上記特定のＤＭＡ制御部１０となり得てもよい。
【００４２】
上述のＤＭＡ制御システム１は、一つの態様では、印刷装置に含まれる。この場合、転送指示部３０は、画像読み取り、印刷、又は画像情報の変換の作業を行うにあたって複数のＤＭＡ制御部１０のうち特定のＤＭＡ制御部１０の転送指示を作成して画像情報のＤＭＡ転送をする際、上記特定のＤＭＡ制御部１０以外の他のＤＭＡ制御部１０の利用状況に応じて、上記特定のＤＭＡ制御部１０のＤＭＡ転送の転送量を規定して上記特定のＤＭＡ制御部１０に対して転送指示を与える。例えば、転送指示部３０は、印刷装置によって画像読み取り、印刷、又は画像情報の変換の作業が行われるにあたって、特定のＤＭＡ制御部１０用の転送指示を作成する際、上記特定のＤＭＡ制御部１０以外の他のＤＭＡ制御部１０の利用状況に応じて、上記転送指示により規定されるＤＭＡ転送の転送量を制御する。
【００４３】
以下、本実施の形態に係るＤＭＡ制御システム１の動作を具体的に説明する。以下の説明では、複数のＤＭＡ制御部１０および制御部２０は、Ｎ個（Ｎは２以上の整数）のチャネルＣＨ１〜ＣＨＮを有するＤＭＡＣ８０により実現されるものとする。また、転送指示部３０は、ＣＰＵ５０とデバイスドライバとの協働により実現されるものとする。また、転送要求部４０は、ＣＰＵ５０と上位アプリケーションとの協働により実現されるものとする。
【００４４】
まず、ＤＭＡＣ８０の１つのチャネルＣＨ１に注目した場合における、ＤＭＡ制御システム１の動作の具体例を説明する。
【００４５】
本例では、ＤＭＡＣ８０は、飛び飛びのアドレスに対して、連続してデータを転送できるスキャッタギャザー機能を有する。また、ＤＭＡＣ８０は、転送指示部３０により作成されたディスクリプタに基づいてＤＭＡ転送を行う。ここで、ディスクリプタとは、ＤＭＡ転送のために必要な情報を含む転送情報である。
【００４６】
転送指示部３０は、ディスクリプタを予め定められた単位転送量毎に作成し、当該作成されたディスクリプタを複数連ねてディスクリプタリストを作成する。当該ディスクリプタリストは、上記転送指示に相当する。ディスクリプタリストは、メモリ６０に設けられたディスクリプタ格納領域に格納されると共にその格納アドレスはチャネルＣＨ１用のＦＩＦＯ方式のディスクリプタリスト管理キューに登録される。このディスクリプタリスト管理キューは、ＤＭＡＣ８０のチャネル毎に用意される。
【００４７】
転送指示部３０は、チャネルＣＨ１用のディスクリプタリスト管理キューに登録されたアドレスをＤＭＡＣ８０のチャネルＣＨ１にセットしチャネルＣＨ１を起動させる。これによりＤＭＡＣ８０は、当該セットされたアドレスに格納されているディスクリプタリストから１つ１つ順次ディスクリプタを読み込み、読み込んだディスクリプタに従って連続的にチャネルＣＨ１によるＤＭＡ転送を実行する。
【００４８】
１つのディスクリプタリストに連ねられたディスクリプタの全てについてＤＭＡ転送が完了すると、ＤＭＡＣ８０は、ＣＰＵ５０に対してチャネルＣＨ１のＤＭＡ転送の完了を示す割り込みを発生させる。すると、転送指示部３０は、チャネルＣＨ１用のディスクリプタリスト管理キューから次のディスクリプタリストのアドレスを読み出してチャネルＣＨ１にセットする。そして、当該セットされたアドレスのディスクリプタリストに連ねられたディスクリプタが順次読み込まれて連続的にチャネルＣＨ１によるＤＭＡ転送が行われる。この繰り返しにより、一連のディスクリプタリストに基づくＤＭＡ転送が実行され、最終的に転送対象のデータの全てがＤＭＡ転送される。
【００４９】
図３は、仮想記憶方式を採用したシステムにおいてＤＭＡＣ８０により読み込まれるディスクリプタリストの一例を示す図である。
【００５０】
メモリ６０は仮想記憶方式によりメモリ管理されている。図３の右図に示すように、物理的には不連続な物理アドレス領域が、連続する仮想アドレス領域にマッピングされて管理される。実際に記憶されているデータにアクセスする場合には、仮想アドレス領域の連続したアドレス範囲が、アドレス変換テーブル等に従って対応する物理アドレス範囲に変換されてアクセスされる。仮想アドレスにマッピングできる物理メモリの最小単位をページというが、転送指示部３０は、このページ単位で物理的に分散しているデータのアドレスを調べ、各々についてディスクリプタを作成する。
【００５１】
図３の左図に示すように、ディスクリプタは、次ディスクリプタアドレス、転送データ量、転送元アドレス、および転送先アドレスの情報を含んで構成されている。
【００５２】
「次ディスクリプタアドレス」は、ディスクリプタリストに連ねられた複数のディスクリプタの中で、そのディスクリプタの次にＤＭＡＣ８０により読み込まれるべきディスクリプタのアドレスを示すデータである。なお、そのディスクリプタがディスクリプタリストの最後に読み込まれるディスクリプタである場合には、次ディスクリプタアドレスの領域には、ディスクリプタリストの最後のディスクリプタであることを示すデータが格納される。この次ディスクリプタアドレスにより、物理的に不連続な領域に格納されたディスクリプタが連続的に読み出されてＤＭＡ転送が行われる。
【００５３】
また、「転送データ量」は、そのディスクリプタによってＤＭＡ転送するデータのサイズを示すデータである。「転送元アドレス」は、転送対象のデータが格納されているアドレスを示すデータである。「転送先アドレス」は、転送元アドレスから転送データ量だけ読み出したデータを書き込むアドレスを示すデータである。
【００５４】
なお、本例において、個々のディスクリプタで転送可能なデータ量は、ページサイズを最大とし、各ディスクリプタの「転送データ量」はページサイズ以下の固定値（単位転送量）とする。これにより、ディスクリプタリストを構成するディスクリプタの数（すなわちディスクリプタリストのディスクリプタ数）と、ディスクリプタリストにより規定されるＤＭＡ転送の転送量とは比例関係になる。
【００５５】
図４は、ディスクリプタリストを管理するディスクリプタリスト管理キューの構造を説明する説明図である。ディスクリプタリスト管理キューは、ディスクリプタリストが格納されたアドレス（より詳述すると、ディスクリプタリストを構成する複数のディスクリプタのうち先頭のディスクリプタが格納されたアドレス）を示すディスクリプタリストポインタをリスト構造にして連ねて構成したバッファである。また、ＣＰＵ５０の所定のレジスタ（あるいはメモリの所定領域等）には、ディスクリプタリスト管理キューにおける先頭のディスクリプタリストポインタを指すディスクリプタリスト管理キューポインタが格納される。ディスクリプタリスト管理キューはＦＩＦＯ方式であるため、転送指示部３０が先頭のディスクリプタリストポインタを読み出したときには、ディスクリプタリスト管理キューポインタが次のディスクリプタリストポインタを指すように書き変えられる。なお、ディスクリプタリスト管理キューポインタは、ＤＭＡＣ８０のチャネル毎に存在する。
【００５６】
また、転送指示部３０は、新たにディスクリプタリストを作成して所定の格納領域に格納すると、ディスクリプタリスト管理キューの最後尾に当該作成したディスクリプタリストのアドレスを示すディスクリプタリストポインタを追加する。これにより、各ディスクリプタリストのアドレスが作成順に登録される。
【００５７】
なお、ディスクリプタリスト管理キューにディスクリプタリストポインタが１つも登録されていない場合には、ディスクリプタリスト管理キューポインタは空値（ＮＵＬＬ）となる。
【００５８】
チャネルＣＨ１によるＤＭＡ転送を実行する場合には、転送指示部３０は、チャネルＣＨ１のディスクリプタリスト管理キューポインタが指す先頭のディスクリプタリストポインタをＤＭＡＣ８０のチャネルＣＨ１にセットしてチャネルＣＨ１にＤＭＡ転送を開始させ、当該ディスクリプタリストポインタが示すディスクリプタリストに基づいてＤＭＡ転送を行なわせる。ＤＭＡ転送は、１つのディスクリプタリストのＤＭＡ転送が完了するまでＣＰＵ５０の割り込み無しで連続的に行なわれる。一方、転送指示部３０は、チャネルＣＨ１によるＤＭＡ転送中、所定の作成条件を満たす範囲内で、チャネルＣＨ１用の次のディスクリプタリストやそれ以降のディスクリプタリストを先行して作成して、当該ディスクリプタリストのディスクリプタリストポインタをチャネルＣＨ１用のディスクリプタリスト管理キューに登録する。
【００５９】
１つのディスクリプタリストによるＤＭＡ転送が完了すると、その時点でＤＭＡＣ８０はＣＰＵ５０に割り込みを発生させる。すると、転送指示部３０は、チャネルＣＨ１のディスクリプタリスト管理キューポインタが指す次のディスクリプタリストポインタをＤＭＡＣ８０のチャネルＣＨ１にセットしてＤＭＡ転送させる。これにより、チャネルＣＨ１用のディスクリプタリスト管理キューに登録された順にチャネルＣＨ１用のディスクリプタリストが読み出されてチャネルＣＨ１によるＤＭＡ転送が行なわれる。
【００６０】
図５は、転送指示部３０によるディスクリプタリストの付与動作の一例を示すフローチャートである。以下、図５を参照して、転送指示部３０によるディスクリプタリストの付与動作の一例を説明する。なお、ここではチャネルＣＨ１について説明するが、当該付与動作は他のチャネルについても同様に行われる。また、図５の処理は、例えば繰り返し実行される。
【００６１】
転送指示部３０は、チャネルＣＨ１用のディスクリプタリスト管理キューにディスクリプタリストポインタが登録されているか否かを判断する（Ｓ１１）。
【００６２】
ディスクリプタリストポインタが登録されていないと判断された場合（Ｓ１１：ＮＯ）、転送指示部３０は、ステップＳ１１の処理を繰り返し行う。
【００６３】
一方、ディスクリプタリストポインタが登録されていると判断された場合（Ｓ１１：ＹＥＳ）、転送指示部３０は、チャネルＣＨ１にディスクリプタリストポインタを付与可能か否かを判断する（Ｓ１２）。具体的には、転送指示部３０は、チャネルＣＨ１にディスクリプタリストポインタをセットした後、チャネルＣＨ１のＤＭＡ転送の完了を示す割り込みが発生していない場合には、付与可能でないと判断し、そうでない場合には、付与可能であると判断する。
【００６４】
付与可能であると判断された場合（Ｓ１２：ＹＥＳ）、転送指示部３０は、ディスクリプタリスト管理キューポインタが指すディスクリプタリストポインタをチャネルＣＨ１にセットし（Ｓ１３）、処理を終了させる。
【００６５】
一方、付与可能でないと判断された場合（Ｓ１２：ＮＯ）、転送指示部３０は、処理をステップＳ１１に戻す。
【００６６】
図６は、転送指示部３０によるディスクリプタリストの作成動作の一例を示すフローチャートである。図６には、チャネルＣＨ１用のディスクリプタリストを、チャネルＣＨ２の利用状況に応じて作成する場合の手順が示されている。以下、図６を参照して、転送指示部３０によるディスクリプタリストの作成動作の一例を説明する。なお、図６の処理は、例えば繰り返し実行される。
【００６７】
転送指示部３０は、転送要求部４０からチャネルＣＨ１に対するＤＭＡ転送の要求を受けるまで待機し（Ｓ２１：ＮＯ）、当該要求を受けると（Ｓ２１：ＹＥＳ）、処理をステップＳ２２に進める。
【００６８】
ステップＳ２２では、転送指示部３０は、ＤＭＡＣ８０のチャネルＣＨ２が利用中か否かを判断する。具体的には、転送指示部３０は、チャネルＣＨ２の利用の開始を検知した後、当該チャネルＣＨ２の利用の終了を検知していない場合には、チャネルＣＨ２は利用中であると判断し、そうでない場合には、チャネルＣＨ２は利用中でないと判断する。
【００６９】
チャネルＣＨ２が利用中でないと判断された場合（Ｓ２２：ＮＯ）、転送指示部３０は、ディスクリプタリストの作成に用いられるパラメータである最大ディスクリプタ数Ｄに、チャネルＣＨ２が利用中でない場合に対応する値Ｄ０（Ｄ０は１以上の整数）を設定する（Ｓ２３）。ここで、上記チャネルＣＨ２が利用中でない場合（すなわちチャネルＣＨ１が単独で動作する場合）に対応する値Ｄ０は、例えば、予め測定して得られる、転送効率が最大となるディスクリプタ数である。
【００７０】
ついで、転送指示部３０は、上記要求により特定される転送対象のデータをＤＭＡ転送するためのチャネルＣＨ１用のディスクリプタリストを、上記最大ディスクリプタ数Ｄ（＝Ｄ０）に基づいて作成する（Ｓ２４）。具体的には、転送指示部３０は、最大ディスクリプタ数Ｄ（＝Ｄ０）を、ディスクリプタリストを構成するディスクリプタ数の最大として、ディスクリプタリストを作成する。したがって、１個のディスクリプタの転送データ量をａとした場合、転送対象のデータのうちディスクリプタが作成されていない残りのデータ量が｛ａ×（Ｄ０−１）｝より多ければ、ディスクリプタ数Ｄ０のディスクリプタリストが作成され、｛ａ×（Ｄ０−１）｝以下であれば、残りのデータ量に応じたＤ０未満のディスクリプタ数のディスクリプタリストが作成される。
【００７１】
ついで、転送指示部３０は、チャネルＣＨ２の利用の開始を検知したか否かを判断する（Ｓ２５）。具体的には、転送指示部３０は、上位アプリケーションからのチャネルＣＨ２を利用するジョブの開始の通知を受けたか否かを判断する。
【００７２】
チャネルＣＨ２の利用の開始を検知していないと判断された場合（Ｓ２５：ＮＯ）、転送指示部３０は、上記要求に基づくＤＭＡ転送が完了したか否かを判断する（Ｓ２６）。具体的には、転送指示部３０は、ディスクリプタリスト管理キューポインタがＮＵＬＬであり、かつディスクリプタが作成されていない残りのデータ量がゼロであれば、ＤＭＡ転送が完了したと判断し、そうでなければ完了していないと判断する。
【００７３】
ＤＭＡ転送が完了したと判断された場合（Ｓ２６：ＹＥＳ）、転送指示部３０は、処理を終了させる。
【００７４】
一方、ＤＭＡ転送が完了していないと判断された場合（Ｓ２６：ＮＯ）、転送指示部３０は、処理をステップＳ２４に戻す。２回目以降のステップＳ２４の処理では、残りのデータ量がゼロでなければディスクリプタリストが作成され、残りのデータ量がゼロであればディスクリプタリストは作成されない。
【００７５】
ステップＳ２２でチャネルＣＨ２が利用中であると判断された場合（Ｓ２２：ＹＥＳ）、転送指示部３０は、最大ディスクリプタ数Ｄに、チャネルＣＨ２が利用中である場合に対応する値Ｄ１（Ｄ１は１以上の整数）を設定する（Ｓ２７）。
【００７６】
ついで、転送指示部３０は、上記要求により特定される転送対象のデータをＤＭＡ転送するためのチャネルＣＨ１用のディスクリプタリストを、上記最大ディスクリプタ数Ｄ（＝Ｄ１）に基づいて作成する（Ｓ２８）。具体的には、転送指示部３０は、最大ディスクリプタ数Ｄ（＝Ｄ１）を、ディスクリプタリストを構成するディスクリプタ数の最大として、ディスクリプタリストを作成する。したがって、１個のディスクリプタの転送データ量をａとした場合、転送対象のデータのうちディスクリプタが作成されていない残りのデータ量が｛ａ×（Ｄ１−１）｝より多ければ、ディスクリプタ数Ｄ１のディスクリプタリストが作成され、｛ａ×（Ｄ１−１）｝以下であれば、残りのデータ量に応じたＤ１未満のディスクリプタ数のディスクリプタリストが作成される。
【００７７】
ついで、転送指示部３０は、チャネルＣＨ２の利用の終了を検知したか否かを判断する（Ｓ２９）。具体的には、転送指示部３０は、上位アプリケーションからのチャネルＣＨ２を利用するジョブの終了の通知を受けたか否かを判断する。
【００７８】
チャネルＣＨ２の利用の終了を検知していないと判断された場合（Ｓ２９：ＮＯ）、転送指示部３０は、上記要求に基づくＤＭＡ転送が完了したか否かを判断する（Ｓ３０）。具体的には、転送指示部３０は、ディスクリプタリスト管理キューポインタがＮＵＬＬであり、かつディスクリプタが作成されていない残りのデータ量がゼロであれば、ＤＭＡ転送が完了したと判断し、そうでなければ完了していないと判断する。
【００７９】
ＤＭＡ転送が完了したと判断された場合（Ｓ３０：ＹＥＳ）、転送指示部３０は、処理を終了させる。
【００８０】
一方、ＤＭＡ転送が完了していないと判断された場合（Ｓ３０：ＮＯ）、転送指示部３０は、処理をステップＳ２８に戻す。２回目以降のステップＳ２８の処理では、残りのデータ量がゼロでなければディスクリプタリストが作成され、残りのデータ量がゼロであればディスクリプタリストは作成されない。
【００８１】
ステップＳ２５でチャネルＣＨ２の利用の開始を検知したと判断された場合（Ｓ２５：ＹＥＳ）、転送指示部３０は、ディスクリプタ格納領域に格納されているチャネルＣＨ１用のディスクリプタリストを全て破棄し、チャネルＣＨ１用のディスクリプタリスト管理キューに登録されているディスクリプタリストポインタを全て削除し（Ｓ３１）、処理をステップＳ２７に移す。これにより、チャネルＣＨ２が利用中でない場合に応じたディスクリプタ数のディスクリプタリストが破棄され、チャネルＣＨ２が利用中である場合に応じたディスクリプタ数の新たなディスクリプタリストが作成されることとなる。なお、チャネルＣＨ１用のディスクリプタリストが格納されていない場合には、上記ステップＳ３１の処理は行われない。
【００８２】
ステップＳ２９でチャネルＣＨ２の利用の終了を検知したと判断された場合（Ｓ２９：ＹＥＳ）、転送指示部３０は、ディスクリプタ格納領域に格納されているチャネルＣＨ１用のディスクリプタリストを全て破棄し、チャネルＣＨ１用のディスクリプタリスト管理キューに登録されているディスクリプタリストポインタを全て削除し（Ｓ３２）、処理をステップＳ２３に移す。これにより、チャネルＣＨ２が利用中である場合に応じたディスクリプタ数のディスクリプタリストが破棄され、チャネルＣＨ２が利用中でない場合に応じたディスクリプタ数の新たなディスクリプタリストが作成されることとなる。なお、チャネルＣＨ１用のディスクリプタリストが格納されていない場合には、上記ステップＳ３２の処理は行われない。
【００８３】
なお、上記の例において、転送指示部３０は、チャネルＣＨ２用のディスクリプタリストを、上記チャネルＣＨ１と同様に、チャネルＣＨ１の利用状況に応じて作成してもよい。また、転送指示部３０は、チャネルＣＨ２用のディスクリプタリストを、チャネルＣＨ１の利用状況に関わらず作成してもよい。例えば、転送指示部３０は、図７に示されるように、最大ディスクリプタ数Ｄを一定値として、チャネルＣＨ２用のディスクリプタリストを作成してもよい。
【００８４】
図７において、転送指示部３０は、転送要求部４０からチャネルＣＨ２に対するＤＭＡ転送の要求を受けるまで待機し（Ｓ３５：ＮＯ）、当該要求を受けると（Ｓ３５：ＹＥＳ）、処理をステップＳ３６に進める。
【００８５】
ステップＳ３６では、転送指示部３０は、上記要求により特定される転送対象のデータをＤＭＡ転送するためのチャネルＣＨ２用のディスクリプタリストを、予め決められた一定値である最大ディスクリプタ数Ｄに基づいて作成する。具体的には、転送指示部３０は、最大ディスクリプタ数Ｄを、ディスクリプタリストを構成するディスクリプタ数の最大として、ディスクリプタリストを作成する。したがって、１個のディスクリプタの転送データ量をａとした場合、転送対象のデータのうちディスクリプタが作成されていない残りのデータ量が｛ａ×（Ｄ−１）｝より多ければ、ディスクリプタ数Ｄのディスクリプタリストが作成され、｛ａ×（Ｄ−１）｝以下であれば、残りのデータ量に応じたＤ未満のディスクリプタ数のディスクリプタリストが作成される。
【００８６】
ついで、転送指示部３０は、上記要求に基づくＤＭＡ転送が完了したか否かを判断し（Ｓ３７）、完了していないと判断された場合には（Ｓ３７：ＮＯ）、処理をステップＳ３６に戻し、完了したと判断された場合には（Ｓ３７：ＹＥＳ）、処理を終了させる。
【００８７】
図８は、転送指示部３０によるディスクリプタリストの作成動作の別の一例を示すフローチャートである。図８には、チャネルＣＨ１用のディスクリプタリストを、他のチャネルＣＨ２〜ＣＨＮの利用状況に応じて作成する場合の手順が示されている。以下、図８を参照して、転送指示部３０によるディスクリプタリストの作成動作の別の一例を説明する。
【００８８】
転送指示部３０は、転送要求部４０からチャネルＣＨ１に対するＤＭＡ転送の要求を受けるまで待機し（Ｓ４１：ＮＯ）、当該要求を受けると（Ｓ４１：ＹＥＳ）、処理をステップＳ４２に進める。
【００８９】
ステップＳ４２では、転送指示部３０は、他のチャネルＣＨ２〜ＣＨＮのうち利用中であるチャネルの組み合わせに応じたディスクリプタ数を、最大ディスクリプタ数Ｄに設定する。具体的には、転送指示部３０は、利用中のチャネルの組み合わせとディスクリプタ数とが対応付けられた、予め設定されたテーブルに基づいて、最大ディスクリプタ数Ｄを決定する。ここで、テーブル内のディスクリプタ数は、例えば、ＤＭＡ転送レートの実測によって得られる最適な数値である。
【００９０】
ついで、転送指示部３０は、上記要求により特定される転送対象のデータをＤＭＡ転送するためのチャネルＣＨ１用のディスクリプタリストを、上記ステップＳ４２で設定された最大ディスクリプタ数Ｄに基づいて作成する（Ｓ４３）。具体的には、転送指示部３０は、最大ディスクリプタ数Ｄを、ディスクリプタリストを構成するディスクリプタ数の最大として、ディスクリプタリストを作成する。したがって、１個のディスクリプタの転送データ量をａとした場合、転送対象のデータのうちディスクリプタが作成されていない残りのデータ量が｛ａ×（Ｄ−１）｝より多ければ、ディスクリプタ数Ｄのディスクリプタリストが作成され、｛ａ×（Ｄ−１）｝以下であれば、残りのデータ量に応じたＤ未満のディスクリプタ数のディスクリプタリストが作成される。
【００９１】
ついで、転送指示部３０は、他のチャネルＣＨ２〜ＣＨＮのうち利用中のチャネルの組み合わせの変化を検知したか否かを判断する（Ｓ４４）。ここで、転送指示部３０は、上記組み合わせの変化を、例えば上位アプリケーションからの他のチャネルを利用するジョブの開始または終了の通知に基づいて検知する。
【００９２】
組み合わせの変化を検知していないと判断された場合（Ｓ４４：ＮＯ）、転送指示部３０は、上記要求に基づくＤＭＡ転送が完了したか否かを判断する（Ｓ４５）。具体的には、転送指示部３０は、ディスクリプタリスト管理キューポインタがＮＵＬＬであり、かつディスクリプタが作成されていない残りのデータ量がゼロであれば、ＤＭＡ転送が完了したと判断し、そうでなければ完了していないと判断する。
【００９３】
ＤＭＡ転送が完了したと判断された場合（Ｓ４５：ＹＥＳ）、転送指示部３０は、処理を終了させる。
【００９４】
一方、ＤＭＡ転送が完了していないと判断された場合（Ｓ４５：ＮＯ）、転送指示部３０は、処理をステップＳ４３に戻す。２回目以降のステップＳ４３の処理では、残りのデータ量がゼロでなければディスクリプタリストが作成され、残りのデータ量がゼロであればディスクリプタリストは作成されない。
【００９５】
ステップＳ４４で組み合わせの変化を検知したと判断された場合（Ｓ４４：ＹＥＳ）、転送指示部３０は、ディスクリプタ格納領域に格納されているチャネルＣＨ１用のディスクリプタリストを全て破棄し、チャネルＣＨ１用のディスクリプタリスト管理キューに登録されているディスクリプタリストポインタを全て削除し（Ｓ４６）、処理をステップＳ４２に移す。これにより、変化前の組み合わせに応じたディスクリプタ数のディスクリプタリストが破棄され、変化後の組み合わせに応じたディスクリプタ数の新たなディスクリプタリストが作成されることとなる。なお、チャネルＣＨ１用のディスクリプタリストが格納されていない場合には、上記ステップＳ４６の処理は行われない。
【００９６】
なお、上記の例において、転送指示部３０は、チャネルＣＨ１以外のチャネル用のディスクリプタリストを、上記チャネルＣＨ１と同様に、他のチャネルの利用状況に応じて作成してもよい。また、転送指示部３０は、チャネルＣＨ１以外のチャネル用のディスクリプタリストを、他のチャネルの利用状況に関わらず作成してもよい。例えば、転送指示部３０は、最大ディスクリプタ数Ｄを一定値として、チャネルＣＨ１以外のチャネル用のディスクリプタリストを作成してもよい。
【００９７】
図９には、利用中のチャネルの組み合わせとディスクリプタ数とが対応付けられたテーブルの一例が示されている。上記ステップＳ４２の処理は、例えば図９のテーブルに基づいて実行される。図９において、テーブル内の数値はディスクリプタ数を示し、テーブル内の「−」は当該チャネルが利用中でないことを示す。
【００９８】
図９のテーブルでは、チャネルＣＨ１〜ＣＨ３のうち利用中のチャネルの組み合わせ毎に、利用中の各チャネルに適用されるディスクリプタ数が設定されている。
【００９９】
例えば、組み合わせ＃１は、チャネルＣＨ１〜ＣＨ３の全てが利用中である場合を示し、この場合には、チャネルＣＨ１，ＣＨ２，ＣＨ３に適用されるディスクリプタ数は、それぞれ５１２，４，１である。したがって、チャネルＣＨ２およびＣＨ３が利用中である場合において、チャネルＣＨ１用のディスクリプタリストが作成される際には、最大ディスクリプタ数Ｄに「５１２」が設定される。また、チャネルＣＨ１およびＣＨ３が利用中である場合において、チャネルＣＨ２用のディスクリプタリストが作成される際には、最大ディスクリプタ数Ｄに「４」が設定される。
【０１００】
また例えば、組み合わせ＃２は、チャネルＣＨ１およびＣＨ２が利用中であり、チャネルＣＨ３が利用中でない場合を示し、この場合には、チャネルＣＨ１，ＣＨ２に適用されるディスクリプタ数は、それぞれ５１２，５である。したがって、チャネルＣＨ２が利用中でチャネルＣＨ３が利用中でない場合において、チャネルＣＨ１用のディスクリプタリストが作成される際には、最大ディスクリプタ数Ｄに「５１２」が設定される。また、チャネルＣＨ１が利用中でチャネルＣＨ３が利用中でない場合において、チャネルＣＨ２用のディスクリプタリストが作成される際には、最大ディスクリプタ数Ｄに「５」が設定される。
【０１０１】
図１０は、ＤＭＡＣ８０の第１の動作例を示すフローチャートである。本動作例では、チャネルＣＨ１，ＣＨ２は、ディスクリプタリスト単位で伝送路を占有する。以下、図１０を参照して、ＤＭＡＣ８０の第１の動作例を説明する。
【０１０２】
ＤＭＡＣ８０は、チャネルＣＨ１について、未処理のディスクリプタリストが存在するか否かを判断する（Ｓ５１）。具体的には、ＤＭＡＣ８０は、チャネルＣＨ１にディスクリプタリストポインタがセットされたか否かを判断する。
【０１０３】
未処理のディスクリプタリストが存在すると判断された場合（Ｓ５１：ＹＥＳ）、ＤＭＡＣ８０は、当該ディスクリプタリストに基づいて、チャネルＣＨ１によるＤＭＡ転送を実行する（Ｓ５２）。そして、ＤＭＡＣ８０は、上記ディスクリプタリストに基づくＤＭＡ転送が完了すると、ＣＰＵ５０に対して割り込みを発生させ（Ｓ５３）、処理をステップＳ５４に移す。
【０１０４】
ステップＳ５１で未処理のディスクリプタリストが存在しないと判断された場合（Ｓ５１：ＮＯ）、ＤＭＡＣ８０は処理をステップＳ５４に移す。
【０１０５】
ステップＳ５４では、ＤＭＡＣ８０は、チャネルＣＨ２について、未処理のディスクリプタリストが存在するか否かを判断する。具体的には、ＤＭＡＣ８０は、チャネルＣＨ２にディスクリプタリストポインタがセットされたか否かを判断する。
【０１０６】
未処理のディスクリプタリストが存在すると判断された場合（Ｓ５４：ＹＥＳ）、ＤＭＡＣ８０は、当該ディスクリプタリストに基づいて、チャネルＣＨ２によるＤＭＡ転送を実行する（Ｓ５５）。そして、ＤＭＡＣ８０は、上記ディスクリプタリストに基づくＤＭＡ転送が完了すると、ＣＰＵ５０に対して割り込みを発生させ（Ｓ５６）、処理をステップＳ５１に移す。
【０１０７】
ステップＳ５４で未処理のディスクリプタリストが存在しないと判断された場合（Ｓ５４：ＮＯ）、ＤＭＡＣ８０は処理をステップＳ５１に移す。
【０１０８】
図１１および図１２は、ＤＭＡＣ８０のチャネルＣＨ１，ＣＨ２の動作の一例を示すシーケンス図である。本例では、ＤＭＡＣ８０は図１０のとおり動作する。チャネルＣＨ１用のディスクリプタリストは、図６のとおりチャネルＣＨ２の利用状況に応じて作成される。チャネルＣＨ２用のディスクリプタリストは、図７のとおりチャネルＣＨ１の利用状況によらずに作成される。ここで、チャネルＣＨ１について、チャネルＣＨ２が利用中でない場合に対応する最大ディスクリプタ数Ｄ０は「７」であり、チャネルＣＨ２が利用中である場合に対応する最大ディスクリプタ数Ｄ１は「３」である。また、チャネルＣＨ２について、一定値である最大ディスクリプタ数Ｄは「７」である。
【０１０９】
一つの利用態様では、チャネルＣＨ１は優先度の低いジョブに利用され、チャネルＣＨ２は優先度の高いジョブに利用される。印刷装置や複写機においては、ＤＭＡ転送を利用するジョブとして、印刷（プリント）、画像読み取り（スキャン）、画像変換（レンダリング）、システム管理などのジョブが挙げられる。これらのジョブを優先度の高い順に並べると、例えば、プリント、レンダリング、システム管理の順、またはスキャン、レンダリング、システム管理の順となる。したがって、例えば、チャネルＣＨ１は優先度の低いレンダリングに利用され、チャネルＣＨ２は優先度の高いスキャンに利用される。
【０１１０】
図１１および図１２において、各ディスクリプタに基づくＤＭＡ転送区間は、矩形で表現されている。そして、各矩形の上側には、当該矩形に対応するディスクリプタの番号が表示されている。また、括弧で括られた数字は、ディスクリプタリストの番号を表している。上記のことは、以降の同様の図面についても同様である。
【０１１１】
図１１では、チャネルＣＨ１が単独で動作し、一連のディスクリプタリストに基づくＤＭＡ転送を行っている。この場合、各ディスクリプタリストのディスクリプタ数は「７」である。１つのディスクリプタリストに基づくＤＭＡ転送が完了すると、割り込みが発生し、割り込み処理時間等の空き時間を経て、次のディスクリプタリストに基づくＤＭＡ転送が実行されている。なお、チャネルＣＨ２が単独で動作する場合は、上記チャネルＣＨ１が単独で動作する場合と同様である。
【０１１２】
図１２では、チャネルＣＨ１，ＣＨ２が並列で動作し、それぞれ一連のディスクリプタリストに基づくＤＭＡ転送を行っている。この場合、チャネルＣＨ１の各ディスクリプタリストのディスクリプタ数は「３」であり、チャネルＣＨ２の各ディスクリプタリストのディスクリプタ数は「７」である。各チャネルは、１つのディスクリプタリストに基づくＤＭＡ転送を開始すると、当該ＤＭＡ転送が完了するまで伝送路を占有する。したがって、一方のチャネルによるＤＭＡ転送が行われている間、他方のチャネルはＤＭＡ転送を実行することができない。このため、他方のチャネルには待ち時間が発生する。図１２において、当該待ち時間は斜線ハッチングで表されている。なお、待たされた上記他方のチャネルのＤＭＡ転送は、上記一方のチャネルのＤＭＡ転送が完了して割り込みが発生すると開始される。
【０１１３】
図１３は、ＤＭＡＣ８０のチャネルＣＨ１，ＣＨ２の動作の比較例を示すシーケンス図である。本比較例では、ＤＭＡＣ８０および転送指示部３０の動作条件は図１２の場合と殆ど同じであるが、チャネルＣＨ１用のディスクリプタリストがチャネルＣＨ２と同様に図７のとおり作成される点で異なる。すなわち、本比較例では、チャネルＣＨ１およびＣＨ２のディスクリプタリストは、一定値である最大ディスクリプタ数「７」に基づいて作成される。
【０１１４】
図１３では、チャネルＣＨ１，ＣＨ２が並列で動作し、それぞれ一連のディスクリプタリストに基づくＤＭＡ転送を行っている。この場合、チャネルＣＨ１およびＣＨ２の各ディスクリプタリストのディスクリプタ数は「７」である。
【０１１５】
図１３では、チャネルＣＨ１の待ち時間とチャネルＣＨ２の待ち時間とは互いに略同じである。これに対し、図１２では、チャネルＣＨ２の待ち時間は、チャネルＣＨ１の待ち時間よりも短くなっている。すなわち、チャネルＣＨ２のＤＭＡ転送が、チャネルＣＨ１のＤＭＡ転送よりも優先されている。また、図１２でのチャネルＣＨ２の待ち時間は、図１３でのチャネルＣＨ２の待ち時間よりも短縮されている。
【０１１６】
図１４は、ＤＭＡＣ８０のチャネルＣＨ１，ＣＨ２の動作の一例を示すシーケンス図である。本例において、ＤＭＡＣ８０および転送指示部３０の動作条件は図１２の場合と同様である。
【０１１７】
図１４では、当初、低優先ジョブに利用されるチャネルＣＨ１が単独で動作する。具体的には、作成区間Ｄ１−１〜Ｄ１−４でチャネルＣＨ１用のディスクリプタリストＤＬ１−１〜ＤＬ１−４が作成され、転送区間Ｔ１−１〜Ｔ１−３でディスクリプタリストＤＬ１−１〜ＤＬ１−３に基づくチャネルＣＨ１のＤＭＡ転送が行わる。ここで、ディスクリプタリストＤＬ１−１〜ＤＬ１−４のディスクリプタ数は「７」である。
【０１１８】
作成区間Ｄ１−４の後、時刻ｔ１においてチャネルＣＨ２のＤＭＡ転送を利用する高優先ジョブが開始し、時刻ｔ２において当該高優先ジョブの開始が転送指示部３０に通知される。これに応じ、転送指示部３０は、作成区間Ｄ１−４で作成された未転送のディスクリプタリストＤＬ１−４を破棄し、作成区間Ｄ１−４’でディスクリプタ数「３」の新たなディスクリプタリストＤＬ１−４’を作成する。以降、作成区間Ｄ１−５’〜Ｄ１−１５’でディスクリプタ数「３」のディスクリプタリストＤＬ１−５’〜ＤＬ１−１５’が作成され、転送区間Ｔ１−４〜Ｔ１−１４でディスクリプタリストＤＬ１−４’〜ＤＬ１−１４’に基づくチャネルＣＨ１のＤＭＡ転送が行われる。
【０１１９】
一方、時刻ｔ２の後、上記チャネルＣＨ１のＤＭＡ転送と並行して、チャネルＣＨ２のＤＭＡ転送が行われる。具体的には、作成区間Ｄ２−１〜Ｄ２−ＥＮＤ（不図示）でチャネルＣＨ２用のディスクリプタリストＤＬ２−１〜ＤＬ２−ＥＮＤが作成され、転送区間Ｔ２−１〜Ｔ２−ＥＮＤでディスクリプタリストＤＬ２−１〜ＤＬ２−ＥＮＤに基づくチャネルＣＨ２のＤＭＡ転送が行われる。ここで、ディスクリプタリストＤＬ２−１〜ＤＬ２−ＥＮＤのディスクリプタ数は「７」である。
【０１２０】
チャネルＣＨ１およびＣＨ２のＤＭＡ転送が並行して実行される期間においては、斜線ハッチングで示されるように、チャネルＣＨ１およびＣＨ２に待ち時間が発生する。このとき、チャネルＣＨ２の待ち時間は、チャネルＣＨ１の待ち時間よりも短い。
【０１２１】
転送区間Ｔ２−ＥＮＤの後、高優先ジョブが終了する前、時刻ｔ３において高優先ジョブの終了が転送指示部３０に通知される。これに応じ、転送指示部３０は、作成区間Ｄ１−１５’で作成された未転送のディスクリプタリストＤＬ１−１５’を破棄し、作成区間Ｄ１−１５でディスクリプタ数「７」の新たなディスクリプタリストＤＬ１−１５を作成する。以降、作成区間Ｄ１−１６，Ｄ１−１７，・・・でディスクリプタ数「７」のディスクリプタリストＤＬ１−１６，ＤＬ１−１７，・・・が作成され、転送区間Ｔ１−１５，Ｔ１−１６，・・・でディスクリプタリストＤＬ１−１５，ＤＬ１−１６，・・・に基づくチャネルＣＨ１のＤＭＡ転送が行われる。
【０１２２】
上記図１１，１２，１４の例では、単一ジョブ動作時は、転送効率が最も良いディスクリプタ数でＤＭＡ転送が行われるように制御される。一方、優先度の高いジョブが実行される場合は、当該優先度の高いジョブのＤＭＡ転送の待ち時間を短くするために、優先度の低いジョブのＤＭＡ転送のディスクリプタ数が少なくされる。ここで、優先度の高いジョブが実行される場合における、優先度の低いジョブのＤＭＡ転送のディスクリプタ数（すなわち調整されるディスクリプタ数）は、例えば、優先度の高いジョブのＤＭＡ転送の待ち時間が優先度の高いジョブで許容されるＤＭＡ転送の待ち時間に収まるように設定される。具体的には、チャネルＣＨ２の最大ディスクリプタ数Ｄ１は、優先度の高いジョブのＤＭＡ転送の待ち時間が許容待ち時間以下となるように予め決められる。
【０１２３】
また、上記図１４の例では、チャネルＣＨ２を利用するジョブの開始時点で、当該ジョブが開始されたことが転送指示部３０に通知される。そして、チャネルＣＨ２のＤＭＡ転送が開始される前に、チャネルＣＨ１のディスクリプタリストの調整が行われる。すなわち、チャネルＣＨ１について、作成済みのディスクリプタリストが破棄され、新たなディスクリプタリストが作成される。これにより、高優先のチャネルＣＨ２側の待ち時間の短縮が図られている。
【０１２４】
図１５は、ＤＭＡＣ８０の第２の動作例を示すフローチャートである。本動作例では、ＤＭＡＣ８０は、１つのディスクリプタリストに基づくＤＭＡ転送を複数回のバースト転送に分けて実行する。１回のバースト転送の転送量（すなわちバースト長）は、例えば一定である。また、チャネルＣＨ１，ＣＨ２による伝送路の使用はラウンドロビン方式で制御され、チャネルＣＨ１，ＣＨ２はバースト転送単位で伝送路を占有する。以下、図１５を参照して、ＤＭＡＣ８０の第２の動作例を説明する。
【０１２５】
ＤＭＡＣ８０は、チャネルＣＨ１について、未処理または処理中のディスクリプタリストが存在するか否かを判断する（Ｓ６１）。
【０１２６】
未処理または処理中のディスクリプタリストが存在すると判断された場合（Ｓ６１：ＹＥＳ）、ＤＭＡＣ８０は、チャネルＣＨ１による１回のバースト転送を実行する（Ｓ６２）。
【０１２７】
ついで、ＤＭＡＣ８０は、上記ディスクリプタリストに基づくチャネルＣＨ１によるＤＭＡ転送が完了したか否かを判断する（Ｓ６３）。
【０１２８】
上記ＤＭＡ転送が完了したと判断された場合（Ｓ６３：ＹＥＳ）、ＤＭＡＣ８０は、ＣＰＵ５０に対して割り込みを発生させ（Ｓ６４）、処理をステップＳ６５に移す。
【０１２９】
上記ステップＳ６１で未処理または処理中のディスクリプタリストが存在しないと判断された場合（Ｓ６１：ＮＯ）、および上記ステップＳ６３でＤＭＡ転送が完了していないと判断された場合（Ｓ６３：ＮＯ）、ＤＭＡＣ８０は、処理をステップＳ６５に移す。
【０１３０】
ステップＳ６５では、ＤＭＡＣ８０は、チャネルＣＨ２について、未処理または処理中のディスクリプタリストが存在するか否かを判断する。
【０１３１】
未処理または処理中のディスクリプタリストが存在すると判断された場合（Ｓ６５：ＹＥＳ）、ＤＭＡＣ８０は、チャネルＣＨ２による１回のバースト転送を実行する（Ｓ６６）。
【０１３２】
ついで、ＤＭＡＣ８０は、上記ディスクリプタリストに基づくチャネルＣＨ２によるＤＭＡ転送が完了したか否かを判断する（Ｓ６７）。
【０１３３】
上記ＤＭＡ転送が完了したと判断された場合（Ｓ６７：ＹＥＳ）、ＤＭＡＣ８０は、ＣＰＵ５０に対して割り込みを発生させ（Ｓ６８）、処理をステップＳ６１に移す。
【０１３４】
上記ステップＳ６５で未処理または処理中のディスクリプタリストが存在しないと判断された場合（Ｓ６５：ＮＯ）、および上記ステップＳ６７でＤＭＡ転送が完了していないと判断された場合（Ｓ６７：ＮＯ）、ＤＭＡＣ８０は、処理をステップＳ６１に移す。
【０１３５】
図１６および図１７は、ＤＭＡＣ８０のチャネルＣＨ１，ＣＨ２の動作の一例を示すシーケンス図である。本例では、ＤＭＡＣ８０は図１５のとおり動作する。チャネルＣＨ１用のディスクリプタリストは、図６のとおりチャネルＣＨ２の利用状況に応じて作成される。チャネルＣＨ２用のディスクリプタリストは、図７のとおりチャネルＣＨ１の利用状況によらずに作成される。ここで、チャネルＣＨ１について、チャネルＣＨ２が利用中でない場合に対応する最大ディスクリプタ数Ｄ０は「４」であり、チャネルＣＨ２が利用中である場合に対応する最大ディスクリプタ数Ｄ１は「１」である。また、チャネルＣＨ２について、一定値である最大ディスクリプタ数Ｄは「４」である。
【０１３６】
一つの利用態様では、チャネルＣＨ１は優先度の低いジョブに利用され、チャネルＣＨ２は優先度の高いジョブに利用される。例えば、複写機においては、チャネルＣＨ１は優先度の低いレンダリングに利用され、チャネルＣＨ２は優先度の高いスキャンに利用される。
【０１３７】
図１６および図１７において、各ディスクリプタに基づくＤＭＡ転送区間を表現する矩形内の縦線ハッチングは、当該ＤＭＡ転送区間内で複数回のバースト転送が行われることを表現している。ここで、高密度の縦線のハッチングは、伝送路が１つのチャネルに占有され、バースト転送が高い頻度で行われることを表現している。一方、低密度の縦線のハッチングは、伝送路が２つのチャネルにバースト転送単位で交互に使用されることにより、バースト転送が低い頻度で行われることを表現している。当該低密度の縦線のハッチングの区間では、バースト転送の実行区間と待ち時間とが交互に繰り返されている。上記のことは、以降の同様の図面についても同様である。
【０１３８】
図１６では、チャネルＣＨ１が単独で動作し、一連のディスクリプタリストに基づくＤＭＡ転送を行っている。この場合、各ディスクリプタリストのディスクリプタ数は「４」である。なお、チャネルＣＨ２が単独で動作する場合も、上記チャネルＣＨ１が単独で動作する場合と同様である。
【０１３９】
図１７では、チャネルＣＨ１，ＣＨ２が並列で動作し、それぞれ一連のディスクリプタリストに基づくＤＭＡ転送を行っている。この場合、チャネルＣＨ１の各ディスクリプタリストのディスクリプタ数は「１」であり、チャネルＣＨ２の各ディスクリプタリストのディスクリプタ数は「４」である。図１７に示されるように、チャネルＣＨ１のＤＭＡ転送が実行されている区間では、チャネルＣＨ２のＤＭＡ転送は低速になる。これは、チャネルＣＨ１とＣＨ２とで、伝送路の使用権が交互に与えられるためである。一方、チャネルＣＨ１のＤＭＡ転送が実行されていない区間（例えばチャネルＣＨ１の空き時間）では、チャネルＣＨ２が伝送路を占有し、チャネルＣＨ２のＤＭＡ転送は高速になる。
【０１４０】
図１８は、ＤＭＡＣ８０のチャネルＣＨ１，ＣＨ２の動作の比較例を示すシーケンス図である。本比較例では、ＤＭＡＣ８０および転送指示部３０の動作条件は図１７の場合と殆ど同じであるが、チャネルＣＨ１用のディスクリプタリストがチャネルＣＨ２と同様に図７のとおり作成される点で異なる。すなわち、本比較例では、チャネルＣＨ１およびＣＨ２のディスクリプタリストは、一定値である最大ディスクリプタ数「４」に基づいて作成される。
【０１４１】
図１８では、チャネルＣＨ１，ＣＨ２が並列で動作し、それぞれ一連のディスクリプタリストに基づくＤＭＡ転送を行っている。この場合、チャネルＣＨ１およびＣＨ２の各ディスクリプタリストのディスクリプタ数は「４」である。
【０１４２】
図１８では、チャネルＣＨ１とＣＨ２とで、ＤＭＡ転送間の空き時間は互いに略同じ頻度で発生しており、単位時間当たりの転送量は互いに略同じである。これに対し、図１７では、チャネルＣＨ１側の空き時間は、チャネルＣＨ２側よりも高頻度で発生している。このため、チャネルＣＨ１側と比較して、チャネルＣＨ２側では、ＤＭＡ転送を高速で行う機会が多く、単位時間当たりの転送量は、チャネルＣＨ２の方がチャネルＣＨ１よりも多くなっている。すなわち、チャネルＣＨ２のＤＭＡ転送が、チャネルＣＨ１のＤＭＡ転送よりも優先されている。
【０１４３】
図１９は、ＤＭＡＣ８０のチャネルＣＨ１，ＣＨ２の動作の一例を示すシーケンス図である。本例において、ＤＭＡＣ８０および転送指示部３０の動作条件は図１７の場合と同様である。
【０１４４】
図１９では、当初、低優先ジョブに利用されるチャネルＣＨ１が単独で動作する。具体的には、作成区間Ｄ１−１〜Ｄ１−４でチャネルＣＨ１用のディスクリプタリストＤＬ１−１〜ＤＬ１−４が作成され、転送区間Ｔ１−１〜Ｔ１−３でディスクリプタリストＤＬ１−１〜ＤＬ１−３に基づくチャネルＣＨ１のＤＭＡ転送が行わる。ここで、ディスクリプタリストＤＬ１−１〜ＤＬ１−４のディスクリプタ数は「４」である。
【０１４５】
時刻ｔ１においてチャネルＣＨ２のＤＭＡ転送を利用する高優先ジョブが開始し、時刻ｔ２において当該高優先ジョブの開始が転送指示部３０に通知される。これに応じ、転送指示部３０は、作成区間Ｄ１−４で作成された未転送のディスクリプタリストＤＬ１−４を破棄し、作成区間Ｄ１−４’でディスクリプタ数「１」の新たなディスクリプタリストＤＬ１−４’を作成する。以降、作成区間Ｄ１−５’〜Ｄ１−１５’でディスクリプタ数「１」のディスクリプタリストＤＬ１−５’〜ＤＬ１−１５’が作成され、転送区間Ｔ１−４〜Ｔ１−１４でディスクリプタリストＤＬ１−４’〜ＤＬ１−１４’に基づくチャネルＣＨ１のＤＭＡ転送が行われる。
【０１４６】
一方、時刻ｔ２の後、上記チャネルＣＨ１のＤＭＡ転送と並行して、チャネルＣＨ２のＤＭＡ転送が行われる。具体的には、作成区間Ｄ２−１〜Ｄ２−ＥＮＤ（不図示）でチャネルＣＨ２用のディスクリプタリストＤＬ２−１〜ＤＬ２−ＥＮＤが作成され、転送区間Ｔ２−１〜Ｔ２−ＥＮＤでディスクリプタリストＤＬ２−１〜ＤＬ２−ＥＮＤに基づくチャネルＣＨ２のＤＭＡ転送が行われる。ここで、ディスクリプタリストＤＬ２−１〜ＤＬ２−ＥＮＤのディスクリプタ数は「４」である。
【０１４７】
転送区間Ｔ２−ＥＮＤの後、高優先ジョブが終了する前、時刻ｔ３において高優先ジョブの終了が転送指示部３０に通知される。これに応じ、転送指示部３０は、作成区間Ｄ１−１５’で作成された未転送のディスクリプタリストＤＬ１−１５’を破棄し、作成区間Ｄ１−１５でディスクリプタ数「４」の新たなディスクリプタリストＤＬ１−１５を作成する。以降、作成区間Ｄ１−１６，Ｄ１−１７，・・・でディスクリプタ数「４」のディスクリプタリストＤＬ１−１６，ＤＬ１−１７，・・・が作成され、転送区間Ｔ１−１５，Ｔ１−１６，・・・でディスクリプタリストＤＬ１−１５，ＤＬ１−１６，・・・に基づくチャネルＣＨ１のＤＭＡ転送が行われる。
【０１４８】
図２０は、ＤＭＡＣ８０の第３の動作例を示すフローチャートである。本動作例では、ＤＭＡＣ８０は、１つのディスクリプタリストに基づくＤＭＡ転送を複数回のバースト転送に分けて実行する。また、チャネルＣＨ１，ＣＨ２による伝送路の使用は、チャネルＣＨ１がチャネルＣＨ２よりも優先されるように、固定優先順位方式で制御される。高優先チャネルであるチャネルＣＨ１はディスクリプタリスト単位で伝送路を占有し、低優先チャネルであるチャネルＣＨ２はバースト転送単位で伝送路を占有する。以下、図２０を参照して、ＤＭＡＣ８０の第３の動作例を説明する。
【０１４９】
ＤＭＡＣ８０は、チャネルＣＨ１について、未処理のディスクリプタリストが存在するか否かを判断する（Ｓ７１）。
【０１５０】
未処理のディスクリプタリストが存在すると判断された場合（Ｓ７１：ＹＥＳ）、ＤＭＡＣ８０は、チャネルＣＨ１による１回のバースト転送を実行する（Ｓ７２）。
【０１５１】
ついで、ＤＭＡＣ８０は、上記ディスクリプタリストに基づくチャネルＣＨ１によるＤＭＡ転送が完了したか否かを判断する（Ｓ７３）。
【０１５２】
上記ＤＭＡ転送が完了していないと判断された場合（Ｓ７３：ＮＯ）、ＤＭＡＣ８０は処理をステップＳ７２に戻して、バースト転送を繰り返し行う。
【０１５３】
一方、上記ＤＭＡ転送が完了したと判断された場合（Ｓ７３：ＹＥＳ）、ＤＭＡＣ８０は、ＣＰＵ５０に対して割り込みを発生させ（Ｓ７４）、処理をステップＳ７５に移す。
【０１５４】
上記ステップＳ７１で未処理のディスクリプタリストが存在しないと判断された場合（Ｓ７１：ＮＯ）、ＤＭＡＣ８０は処理をステップＳ７５に移す。
【０１５５】
ステップＳ７５では、ＤＭＡＣ８０は、チャネルＣＨ２について、未処理または処理中のディスクリプタリストが存在するか否かを判断する。
【０１５６】
未処理または処理中のディスクリプタリストが存在すると判断された場合（Ｓ７５：ＹＥＳ）、ＤＭＡＣ８０は、チャネルＣＨ２による１回のバースト転送を実行する（Ｓ７６）。
【０１５７】
ついで、ＤＭＡＣ８０は、上記ディスクリプタリストに基づくチャネルＣＨ２によるＤＭＡ転送が完了したか否かを判断する（Ｓ７７）。
【０１５８】
上記ＤＭＡ転送が完了したと判断された場合（Ｓ７７：ＹＥＳ）、ＤＭＡＣ８０は、ＣＰＵ５０に対して割り込みを発生させ（Ｓ７８）、処理をステップＳ７１に移す。
【０１５９】
上記ステップＳ７５で未処理または処理中のディスクリプタリストが存在しないと判断された場合（Ｓ７５：ＮＯ）、および上記ステップＳ７７でＤＭＡ転送が完了していないと判断された場合（Ｓ７７：ＮＯ）、ＤＭＡＣ８０は処理をステップＳ７１に移す。
【０１６０】
図２１および図２２は、ＤＭＡＣ８０のチャネルＣＨ１，ＣＨ２の動作の一例を示すシーケンス図である。本例では、ＤＭＡＣ８０は図２０のとおり動作する。チャネルＣＨ１用のディスクリプタリストは、図６のとおりチャネルＣＨ２の利用状況に応じて作成される。チャネルＣＨ２用のディスクリプタリストは、図７のとおりチャネルＣＨ１の利用状況によらずに作成される。ここで、チャネルＣＨ１について、チャネルＣＨ２が利用中でない場合に対応する最大ディスクリプタ数Ｄ０は「４」であり、チャネルＣＨ２が利用中である場合に対応する最大ディスクリプタ数Ｄ１は「２」である。また、チャネルＣＨ２について、一定値である最大ディスクリプタ数Ｄは「４」である。
【０１６１】
一つの利用態様では、高優先のチャネルＣＨ１は優先度の高いジョブに利用され、低優先のチャネルＣＨ２は優先度の低いジョブに利用される。例えば、チャネルＣＨ１は優先度の高いスキャンに利用され、チャネルＣＨ２は優先度の低いレンダリングに利用される。
【０１６２】
図２１では、チャネルＣＨ１が単独で動作し、一連のディスクリプタリストに基づくＤＭＡ転送を行っている。この場合、各ディスクリプタリストのディスクリプタ数は「４」である。なお、チャネルＣＨ２が単独で動作する場合も、上記チャネルＣＨ１が単独で動作する場合と同様である。
【０１６３】
図２２では、チャネルＣＨ１およびＣＨ２が並列で動作し、それぞれ一連のディスクリプタリストに基づくＤＭＡ転送を行っている。この場合、チャネルＣＨ１の各ディスクリプタリストのディスクリプタ数は「２」であり、チャネルＣＨ２の各ディスクリプタリストのディスクリプタ数は「４」である。
【０１６４】
図２３は、ＤＭＡＣ８０のチャネルＣＨ１，ＣＨ２の動作の比較例を示すシーケンス図である。本比較例では、ＤＭＡＣ８０および転送指示部３０の動作条件は図２１の場合と殆ど同じであるが、チャネルＣＨ１用のディスクリプタリストがチャネルＣＨ２と同様に図７のとおり作成される点で異なる。すなわち、本比較例では、チャネルＣＨ１およびＣＨ２のディスクリプタリストは、一定値である最大ディスクリプタ数「４」に基づいて作成される。
【０１６５】
図２３では、チャネルＣＨ１およびＣＨ２が並列で動作し、それぞれ一連のディスクリプタリストに基づくＤＭＡ転送を行っている。この場合、チャネルＣＨ１およびＣＨ２の各ディスクリプタリストのディスクリプタ数は「４」である。
【０１６６】
図２２および図２３において、チャネルＣＨ２のＤＭＡ転送は、チャネルＣＨ１側の空き時間に行われている。図２３では、チャネルＣＨ１側で空き時間が発生する頻度は比較的少なく、チャネルＣＨ２のＤＭＡ転送が実行される機会が少なく、チャネルＣＨ２の単位時間当たりの転送量が極端に減少している。これに対し、図２２では、図２３と比較して、チャネルＣＨ１側で空き時間が発生する頻度が多くなっており、チャネルＣＨ２のＤＭＡ転送が実行される機会が多くなっている。これにより、チャネルＣＨ２の単位時間当たりの転送量の減少が緩和されている。チャネルＣＨ１側のディスクリプタ数は、例えば、チャネルＣＨ２側に必要な帯域幅が確保されるように設定される。
【０１６７】
図２４は、本実施の形態に係るＤＭＡ制御システムを含む画像処理システム１００の構成例を示す図である。
【０１６８】
画像処理システム１００は、マザーボード１１２およびコントローラボード１１４を備えた情報処理部１１３、画像入力部１１６、画像出力部１１８、コントローラ１２０、およびＬＣＤ（液晶ディスプレイ）１２２を備えている。
【０１６９】
マザーボード１１２は、ＣＰＵ１２４および主記憶としてのメモリ１２８を備えている。ＣＰＵ１２４およびメモリ１２８はハブ１２６を介して専用のバスにより接続されている。このメモリ１２８には、画像出力部１１８で出力（印刷）する画像データや画像入力部１１６で読み取った画像データを格納するための領域があり、該画像データは後述するコントローラボード１１４に設けられたメモリ１４４との間でＣＰＵ１２４の介在無しにＤＭＡ転送される。
【０１７０】
また、ハブ１２６には、マザーボード１１２の外部に設けられたＬＣＤ１２２が接続されている。ＬＣＤ１２２は、表示面にタッチパネルを有する液晶表示装置であり、ユーザインタフェースとして機能する。
【０１７１】
また、専用のバスを接続するためのハブ１２６は、汎用バスを接続するためのハブ１３０と接続されている。ハブ１３０にはＨＤＤ（ハードディスク装置）１３２とＩ／Ｏポート１３４とが汎用バスを介して接続されている。ＨＤＤ１３２には、ＣＰＵ１２４が実行するプログラムや各種データが記憶されている。Ｉ／Ｏポート１３４は、入出力インタフェースとして機能し、画像処理システム１００の周辺機器などが接続される。
【０１７２】
なお、ＣＰＵ１２４が実行するプログラムや各種データを記録する記録媒体は、ＨＤＤに限定されず、不図示のＣＤ−ＲＯＭやＤＶＤディスク、光磁気ディスクやＩＣカード、あるいはＲＯＭ等であってもよいし、電気通信回線上の搬送波のような伝送媒体であってもよく、特に限定されない。
【０１７３】
マザーボード１１２には汎用バスのインタフェース１３６が設けられ、同じくコントローラボード１１４に設けられた汎用バスのインタフェース１３８と接続されている。
【０１７４】
コントローラボード１１４は、バスブリッジ１４０、メモリ１４４、論理回路１４６、ＣＰＵ１４８、および画像処理回路１５０を備えている。バスブリッジ１４０、メモリ１４４、ＣＰＵ１４８、および画像処理回路１５０は、論理回路１４６に接続され、論理回路１４６を介して互いにデータのやりとりを行なう。論理回路１４６は、データ転送回路としてプログラムされた回路であるが、単にデータを受け渡すのみでありデータ転送の制御を行なうわけではない。画像処理回路１５０は、入力された画像データに所定の画像処理を施す回路である。
【０１７５】
バスブリッジ１４０は、汎用バスを介してインタフェース１３８に接続されると共に、論理回路１４６に接続されている。バスブリッジ１４０は、汎用バス同士のブリッジ機能やバスマスタ機能を備えている。このバスマスタ機能は、コントローラボード１１４上のＣＰＵ１４８を介さずにメモリ１４４と画像処理回路１５０との間でデータのやりとりを行なうための機能である。具体的には、コントローラボード１１４では、画像出力部１１８による画像出力時には、画像データがメモリ１４４から論理回路１４６を介して画像処理回路１５０へＤＭＡ転送され、画像入力部１１６によって画像が読み込まれた場合には、該読み込まれて得られた画像データが画像処理回路１５０から論理回路１４６を介してメモリ１４４へＤＭＡ転送される。
【０１７６】
一方、マザーボード１１２上のＣＰＵ１２４を介さずに、マザーボード１１２上のメモリ１２８とコントローラボード１１４上のメモリ１４４との間でデータの転送を行なうＤＭＡ機能は、上記バスブリッジ１４０のバスマスタ機能とは別に、バスブリッジ１４０に設けられたＤＭＡＣ１４２により実現される。ＤＭＡＣ１４２は、飛び飛びのアドレスに対して、連続してデータを転送できるスキャッタギャザー機能が搭載された回路である。
【０１７７】
コントローラボード１１４に設けられているコネクタ１５２は、画像入力部１１６および画像出力部１１８を制御する制御機構を備えたコントローラ１２０に設けられているコネクタ１５６に接続されている。また、コントローラボード１１４のコネクタ１５２は、前述の画像処理回路１５０に接続されている。画像処理回路１５０で画像処理が施される画像データは、コネクタ１５２およびコネクタ１５６を介して送受信される。
【０１７８】
また、コントローラボード１１４にはコネクタ１５２とは別のコネクタ１５４が設けられている。このコネクタ１５４は、論理回路１４６に直接接続されると共に、コントローラ１２０に設けられているコネクタ１５８と接続されている。コントローラ１２０とコントローラボード１１４との間での制御データやメッセージの送受信は、これらコネクタ１５４、コネクタ１５８を介して行なわれる。
【０１７９】
上記構成において、ＤＭＡＣ１４２は、複数のチャネルを有し、複数のＤＭＡ制御部１０および制御部２０として機能する。また、ＣＰＵ１２４は、転送指示部３０および転送要求部４０として機能する。ＤＭＡＣ１４２の各チャネルは画像処理システム１００の各種のジョブに割り当てられる。すなわち、各種のジョブは、それぞれ当該ジョブに対応するチャネルを用いてＤＭＡ転送を行う。当該ＤＭＡ転送では、メモリ１２８からメモリ１４４へ、またはメモリ１４４からメモリ１２８へ情報が転送される。
【０１８０】
なお、本発明は、上記実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内で種々変更することができる。
【図面の簡単な説明】
【０１８１】
【図１】実施の形態に係るＤＭＡ制御システムの機能的な構成の一例を示すブロック図である。
【図２】実施の形態に係るＤＭＡ制御システムの物理的な構成の一例を示すブロック図である。
【図３】仮想記憶方式を採用したシステムにおいてＤＭＡＣにより読み込まれるディスクリプタリストの一例を示す図である。
【図４】ディスクリプタリストを管理するディスクリプタリスト管理キューの構造を説明する説明図である。
【図５】転送指示部によるディスクリプタリストの付与動作の一例を示すフローチャートである。
【図６】転送指示部によるディスクリプタリストの作成動作の一例を示すフローチャートである。
【図７】転送指示部によるディスクリプタリストの作成動作の別の一例を示すフローチャートである。
【図８】転送指示部によるディスクリプタリストの作成動作の別の一例を示すフローチャートである。
【図９】利用中のチャネルの組み合わせとディスクリプタ数とが対応付けられたテーブルの一例を示す図である。
【図１０】ＤＭＡＣの第１の動作例を示すフローチャートである。
【図１１】ＤＭＡＣのチャネルＣＨ１，ＣＨ２の動作の一例を示すシーケンス図である。
【図１２】ＤＭＡＣのチャネルＣＨ１，ＣＨ２の動作の一例を示すシーケンス図である。
【図１３】ＤＭＡＣのチャネルＣＨ１，ＣＨ２の動作の比較例を示すシーケンス図である。
【図１４】ＤＭＡＣのチャネルＣＨ１，ＣＨ２の動作の一例を示すシーケンス図である。
【図１５】ＤＭＡＣの第２の動作例を示すフローチャートである。
【図１６】ＤＭＡＣのチャネルＣＨ１，ＣＨ２の動作の一例を示すシーケンス図である。
【図１７】ＤＭＡＣのチャネルＣＨ１，ＣＨ２の動作の一例を示すシーケンス図である。
【図１８】ＤＭＡＣのチャネルＣＨ１，ＣＨ２の動作の比較例を示すシーケンス図である。
【図１９】ＤＭＡＣのチャネルＣＨ１，ＣＨ２の動作の一例を示すシーケンス図である。
【図２０】ＤＭＡＣの第３の動作例を示すフローチャートである。
【図２１】ＤＭＡＣのチャネルＣＨ１，ＣＨ２の動作の一例を示すシーケンス図である。
【図２２】ＤＭＡＣのチャネルＣＨ１，ＣＨ２の動作の一例を示すシーケンス図である。
【図２３】ＤＭＡＣのチャネルＣＨ１，ＣＨ２の動作の比較例を示すシーケンス図である。
【図２４】本実施の形態に係るＤＭＡ制御システムを含む画像処理システムの構成例を示す図である。
【符号の説明】
【０１８２】
１  ＤＭＡ制御システム、１０（１１，１２，・・・）  ＤＭＡ制御部、２０  制御部、３０  転送指示部、４０  転送要求部、５０  ＣＰＵ、６０  メモリ、７０  入出力機器、８０  ＤＭＡコントローラ（ＤＭＡＣ）、Ｂ  バス。
【図１】
0004706720.tif 000002
【図２】
0004706720.tif 000003
【図３】
0004706720.tif 000004
【図４】
0004706720.tif 000005
【図５】
0004706720.tif 000006
【図６】
0004706720.tif 000007
【図７】
0004706720.tif 000008
【図８】
0004706720.tif 000009
【図９】
0004706720.tif 000010
【図１０】
0004706720.tif 000011
【図１１】
0004706720.tif 000012
【図１２】
0004706720.tif 000013
【図１３】
0004706720.tif 000014
【図１４】
0004706720.tif 000015
【図１５】
0004706720.tif 000016
【図１６】
0004706720.tif 000017
【図１７】
0004706720.tif 000018
【図１８】
0004706720.tif 000019
【図１９】
0004706720.tif 000020
【図２０】
0004706720.tif 000021
【図２１】
0004706720.tif 000022
【図２２】
0004706720.tif 000023
【図２３】
0004706720.tif 000024
【図２４】
0004706720.tif 000025