以下、本発明の実施の形態を図面に従って説明する。
図1は、本実施の形態に係るDMA制御システム1の機能的な構成の一例を示すブロック図である。図1において、DMA制御システム1は、複数のDMA制御部11,12,・・・と、制御部20と、転送指示部30とを含む。なお、以下の説明では、DMA制御部11,12,・・・を、特に区別する必要がない場合には「DMA制御部10」と総称する。
図2は、本実施の形態に係るDMA制御システム1の物理的な構成の一例を示すブロック図である。図2において、DMA制御システム1は、CPU50と、メモリ60と、入出力機器70と、DMAコントローラ(以下、「DMAC」と称す)80と、これらを相互に接続するバスBとを含む。
図2の例では、図1の複数のDMA制御部10および制御部20は、複数のチャネルを有する1つのDMAC80により実現される。例えば、DMA制御部11,12,・・・は、それぞれDMAC80の第1のチャネルCH1,第2のチャネルCH2,・・・により実現される。ただし、複数のDMA制御部10および制御部20は、他の物理的な構成により実現されてもよく、例えば、複数個のDMACと、これらを制御する制御回路とにより実現されてもよい。ここで、上記複数のチャネルを有するDMAC80や複数個のDMACとしては、例えば汎用のDMACが用いられてもよい。
また、図2の例では、図1の転送指示部30は、CPU50により実現される。具体的には、転送指示部30の機能は、記録媒体に記録されたプログラム(例えばデバイスドライバ)がメモリ60に読み出されてCPU50により実行されることによって実現される。上記プログラムは、CD−ROM等のコンピュータ読み取り可能な記録媒体に記録されて提供されることも可能であるし、データ信号として通信により提供されることも可能である。ただし、転送指示部30は、他の物理的な構成により実現されてもよく、例えば、ハードウェアのみにより実現されてもよい。なお、コンピュータを、複数のDMA制御部10および転送指示部30として機能させるプログラムが提供されてもよい。
複数のDMA制御部10は、それぞれ、転送指示に基づいて伝送路を使用してDMA転送を制御する。具体的には、複数のDMA制御部10は、それぞれ、転送指示に従って、伝送路(例えばバスB)を介した転送元から転送先へのDMA転送を制御する。ここで、転送元や転送先は、例えば、転送指示により規定され、メモリ60や入出力機器70などである。
制御部20は、複数のDMA制御部10を制御する。具体的には、制御部20は、複数のDMA制御部10のうち1つのDMA制御部10が伝送路を使用している間、他のDMA制御部10は伝送路を使用しないように制御する。例えば、制御部20は、複数のDMA制御部10の間で、ラウンドロビン方式や固定優先順位方式などの調停方式により、伝送路の使用を調停する。一つの態様では、制御部20は、DMA制御部10に伝送路を使用させる場合、1つの転送指示に基づくDMA転送の開始から完了までの間(すなわち転送指示単位で)、当該DMA制御部10に伝送路を占有させる。別の態様では、1つの転送指示に基づくDMA転送が複数の単位転送に分けて行われる構成において、制御部20は、DMA制御部10に伝送路を使用させる場合、1つの単位転送の開始から完了までの間(すなわち単位転送単位で)、当該DMA制御部10に伝送路を占有させる。
転送指示部30は、各DMA制御部10用の転送指示を作成して各DMA制御部10に与える。ここで、転送指示は、DMA転送のために必要な情報を含み、例えば、転送元のアドレスを示す情報、転送量を示す情報、転送先のアドレスを示す情報などを含む。一つの態様では、転送指示部30は、複数のDMA制御部10の転送量を規定するとともに複数のDMA制御部10に対して転送指示を与える。
転送指示部30は、例えば、転送要求部40から特定のDMA制御部10に対するDMA転送の要求を受けると、当該要求に基づき、上記特定のDMA制御部10用の転送指示を作成して当該特定のDMA制御部10に与える。この場合、転送指示部30は、上記要求に基づき、一連の複数の転送指示を作成してDMA制御部10に与えてもよい。上記転送要求部40は、例えば、上位アプリケーションにより実現される。
具体的な一態様では、転送指示部30は、転送指示を作成し、当該転送指示を所定の記憶領域に格納した上で、当該転送指示が格納された場所を示す情報をDMA制御部10に与える。当該DMA制御部10は、転送指示部30から与えられた情報に基づき、上記所定の記憶領域から転送指示を読み出す。上記所定の記憶領域は、例えばメモリ60内の記憶領域である。
転送指示部30は、複数のDMA制御部10のうち同一のDMA制御部10に対して先の転送指示を与えた後に次の転送指示を与える場合には、先の転送指示に基づくDMA転送の完了を検知した後に上記次の転送指示を与える。したがって、一連の複数の転送指示に基づくDMA転送が行われる場合、先の転送指示に基づくDMA転送の完了を検知してから次の転送指示を与えるまでに時間を要するので、DMA転送間に空き時間(インターバル)が生じる。
具体的な一態様では、DMA制御部10または制御部20は、転送指示に基づくDMA転送が完了するとDMA転送の完了を転送指示部30に通知し、転送指示部30は、当該完了の通知を受けた後に、次の転送指示をDMA制御部10に与える。例えば、DMAC80は、DMA転送が完了すると、CPU50に対してDMA転送完了を示す割り込みを発生させる。CPU50は、当該割り込みを受けた後に、次の転送指示をDMAC80に与える。割り込み発生から次の転送指示の付与までに空き時間が生じ、当該空き時間は、割り込み処理時間、オペレーティングシステムのオーバーヘッド、DMAC80のレジスタの設定時間などを含む。
転送指示部30は、複数のDMA制御部10のうち特定のDMA制御部10用の転送指示を作成する際、当該特定のDMA制御部10以外の少なくとも1つの他のDMA制御部10の利用状況に応じて、上記特定のDMA制御部10用の転送指示により規定されるDMA転送の転送量を制御する。一つの態様では、転送指示部30は、複数のDMA制御部10のうち特定のDMA制御部10の転送指示をする際、当該特定のDMA制御部10以外の他のDMA制御部10の利用状況に応じて、上記特定のDMA制御部10のDMA転送の転送量を規定して上記特定のDMA制御部10に対して転送指示を与える。
上記利用状況は、一つの態様では、利用中か否かの状況である。例えば、転送指示部30は、他のDMA制御部10が利用中であるか否かに応じて、転送指示により規定されるDMA転送の転送量を制御する。この場合、転送指示部30は、所定の判断基準に基づいて、DMA制御部10が利用中であるか否かを判断する。例えば、転送指示部30は、下記(a1)〜(a5)の場合に利用中であると判断する。
(a1)DMA制御部10によるDMA転送が行われている場合
(a2)DMA制御部10に転送指示が与えられた後、当該転送指示に基づくDMA転送が完了していない場合
(a3)DMA制御部10に転送指示が与えられた後、当該転送指示を含む一連の転送指示に基づくDMA転送が完了していない場合
(a4)転送指示部30がDMA制御部10に対するDMA転送の要求を受けた後、当該要求に係るDMA転送が完了していない場合
(a5)転送指示部30がDMA制御部10の利用の開始を検知した後、当該DMA制御部10の利用の終了を検知していない場合(例えば、転送指示部30が特定のDMA制御部10を利用するジョブ(作業)の開始の通知を受けた後、当該ジョブの終了の通知を受けていない場合)
一つの態様では、転送指示部30は、上記他のDMA制御部10の利用の開始を検知した場合、上記特定のDMA制御部10に与えられる予定の作成済みの転送指示があるときには、当該作成済みの転送指示を破棄し、上記他のDMA制御部10が利用中である場合に応じた転送量を規定する新たな転送指示を作成する。一つの態様では、転送指示部30は、上記他のDMA制御部10の利用の開始を検知した場合、上記特定のDMA制御部10に与えられる予定の作成済みの転送指示があるときには、当該作成済みの転送指示を破棄し、上記他のDMA制御部10が利用中である場合に応じた転送量を規定して上記特定のDMA制御部10に対して転送指示を与える。ここで、他のDMA制御部10の利用の開始を検知した場合としては、例えば下記(b1)〜(b4)の場合が挙げられる。
(b1)DMA制御部10によるDMA転送が開始されたことを検知した場合
(b2)DMA制御部10に転送指示が与えられた場合
(b3)転送指示部30がDMA制御部10に対するDMA転送の要求を受けた場合
(b4)転送指示部30が特定のDMA制御部10を利用するジョブの開始の通知(例えばジョブが開始されることの通知またはジョブが開始されたことの通知)を受けた場合
また、一つの態様では、転送指示部30は、上記他のDMA制御部10の利用の終了を検知した場合、上記特定のDMA制御部10に与えられる予定の作成済みの転送指示があるときには、当該作成済みの転送指示を破棄し、上記他のDMA制御部10が利用中でない場合に応じた転送量を規定する新たな転送指示を作成する。一つの態様では、転送指示部30は、上記他のDMA制御部10の利用の終了を検知した場合、上記特定のDMA制御部10に与えられる予定の作成済みの転送指示があるときには、当該作成済みの転送指示を破棄し、上記他のDMA制御部10が利用中でない場合に応じた転送量を規定して上記特定のDMA制御部10に対して転送指示を与える。ここで、他のDMA制御部10の利用の終了を検知した場合としては、例えば下記(c1)〜(c5)の場合が挙げられる。
(c1)DMA制御部10によるDMA転送が終了したことを検知した場合
(c2)DMA制御部10による1つの転送指示に基づくDMA転送の完了を検知した場合
(c3)DMA制御部10による一連の複数の転送指示に基づくDMA転送の完了を検知した場合
(c4)要求対象のDMA制御部10による、転送指示部30が受けた要求に係るDMA転送の完了を検知した場合
(c5)DMA制御部10を利用するジョブの終了の通知(例えばジョブが終了することの通知またはジョブが終了したことの通知)を受けた場合
また、DMA制御システム1が3つ以上のDMA制御部10を有する構成において、一つの態様では、転送指示部30は、上記特定のDMA制御部10用の転送指示を作成する際、上記特定のDMA制御部10以外の複数の他のDMA制御部10の利用状況の組み合わせに応じて、上記転送指示により規定されるDMA転送の転送量を制御する。例えば、転送指示部30は、上記複数の他のDMA制御部10のうち利用中のDMA制御部10の組み合わせに応じて、上記転送指示により規定されるDMA転送の転送量を制御する。一つの態様では、転送指示部30は、上記特定のDMA制御部10の転送指示を作成する際、上記特定のDMA制御部10以外の複数の他のDMA制御部10の利用状況の組み合わせに応じて、上記特定のDMA制御部10の転送量を規定して上記特定のDMA制御部10に対して転送指示を与える。
例えば、利用中のDMA制御部10の組み合わせと、転送量を制御するための制御情報とが互いに対応付けられたテーブルが予め用意される。そして、転送指示部30は、当該テーブルに基づき、利用中のDMA制御部10の組み合わせに対応する制御情報を特定し、当該特定された制御情報に基づいて転送指示を作成する。ここで、制御情報は、例えば、1つの転送指示による転送量の上限を示す情報である。また、制御情報は、例えば、DMA転送レートの実測に基づいて設定される。一つの態様では、上記テーブル内の制御情報は変更可能であり、例えば利用者の用途に応じて変更される。
一つの態様では、特定のDMA制御部10が単独でDMA転送を行う場合、または特定のDMA制御部10以外の他の全てのDMA制御部10が利用中でない場合には、当該特定のDMA制御部10用の転送指示は、最も転送効率の良い転送量でDMA転送が行われるように作成される。
また、一つの態様では、転送指示部30は、上記組み合わせの変化を検知した場合、上記特定のDMA制御部10に与えられる予定の作成済みの転送指示があるときには、当該作成済みの転送指示を破棄し、変化後の組み合わせに応じた転送量を規定する新たな転送指示を作成する。一つの態様では、転送指示部30は、上記組み合わせの変化を検知した場合、上記特定のDMA制御部10に与えられる予定の作成済みの転送指示があるときには、当該作成済みの転送指示を破棄し、変化後の組み合わせに応じた転送量を規定して上記特定のDMA制御部10に対して転送指示を与える。
なお、転送指示部30は、上記利用状況に応じた転送量の制御を、複数のDMA制御部10のうちの全部のDMA制御部10に適用してもよいし、一部のDMA制御部10だけに適用してもよい。すなわち、全部のDMA制御部10が上記特定のDMA制御部10となり得てもよいし、一部のDMA制御部10だけが上記特定のDMA制御部10となり得てもよい。
上述のDMA制御システム1は、一つの態様では、印刷装置に含まれる。この場合、転送指示部30は、画像読み取り、印刷、又は画像情報の変換の作業を行うにあたって複数のDMA制御部10のうち特定のDMA制御部10の転送指示を作成して画像情報のDMA転送をする際、上記特定のDMA制御部10以外の他のDMA制御部10の利用状況に応じて、上記特定のDMA制御部10のDMA転送の転送量を規定して上記特定のDMA制御部10に対して転送指示を与える。例えば、転送指示部30は、印刷装置によって画像読み取り、印刷、又は画像情報の変換の作業が行われるにあたって、特定のDMA制御部10用の転送指示を作成する際、上記特定のDMA制御部10以外の他のDMA制御部10の利用状況に応じて、上記転送指示により規定されるDMA転送の転送量を制御する。
以下、本実施の形態に係るDMA制御システム1の動作を具体的に説明する。以下の説明では、複数のDMA制御部10および制御部20は、N個(Nは2以上の整数)のチャネルCH1〜CHNを有するDMAC80により実現されるものとする。また、転送指示部30は、CPU50とデバイスドライバとの協働により実現されるものとする。また、転送要求部40は、CPU50と上位アプリケーションとの協働により実現されるものとする。
まず、DMAC80の1つのチャネルCH1に注目した場合における、DMA制御システム1の動作の具体例を説明する。
本例では、DMAC80は、飛び飛びのアドレスに対して、連続してデータを転送できるスキャッタギャザー機能を有する。また、DMAC80は、転送指示部30により作成されたディスクリプタに基づいてDMA転送を行う。ここで、ディスクリプタとは、DMA転送のために必要な情報を含む転送情報である。
転送指示部30は、ディスクリプタを予め定められた単位転送量毎に作成し、当該作成されたディスクリプタを複数連ねてディスクリプタリストを作成する。当該ディスクリプタリストは、上記転送指示に相当する。ディスクリプタリストは、メモリ60に設けられたディスクリプタ格納領域に格納されると共にその格納アドレスはチャネルCH1用のFIFO方式のディスクリプタリスト管理キューに登録される。このディスクリプタリスト管理キューは、DMAC80のチャネル毎に用意される。
転送指示部30は、チャネルCH1用のディスクリプタリスト管理キューに登録されたアドレスをDMAC80のチャネルCH1にセットしチャネルCH1を起動させる。これによりDMAC80は、当該セットされたアドレスに格納されているディスクリプタリストから1つ1つ順次ディスクリプタを読み込み、読み込んだディスクリプタに従って連続的にチャネルCH1によるDMA転送を実行する。
1つのディスクリプタリストに連ねられたディスクリプタの全てについてDMA転送が完了すると、DMAC80は、CPU50に対してチャネルCH1のDMA転送の完了を示す割り込みを発生させる。すると、転送指示部30は、チャネルCH1用のディスクリプタリスト管理キューから次のディスクリプタリストのアドレスを読み出してチャネルCH1にセットする。そして、当該セットされたアドレスのディスクリプタリストに連ねられたディスクリプタが順次読み込まれて連続的にチャネルCH1によるDMA転送が行われる。この繰り返しにより、一連のディスクリプタリストに基づくDMA転送が実行され、最終的に転送対象のデータの全てがDMA転送される。
図3は、仮想記憶方式を採用したシステムにおいてDMAC80により読み込まれるディスクリプタリストの一例を示す図である。
メモリ60は仮想記憶方式によりメモリ管理されている。図3の右図に示すように、物理的には不連続な物理アドレス領域が、連続する仮想アドレス領域にマッピングされて管理される。実際に記憶されているデータにアクセスする場合には、仮想アドレス領域の連続したアドレス範囲が、アドレス変換テーブル等に従って対応する物理アドレス範囲に変換されてアクセスされる。仮想アドレスにマッピングできる物理メモリの最小単位をページというが、転送指示部30は、このページ単位で物理的に分散しているデータのアドレスを調べ、各々についてディスクリプタを作成する。
図3の左図に示すように、ディスクリプタは、次ディスクリプタアドレス、転送データ量、転送元アドレス、および転送先アドレスの情報を含んで構成されている。
「次ディスクリプタアドレス」は、ディスクリプタリストに連ねられた複数のディスクリプタの中で、そのディスクリプタの次にDMAC80により読み込まれるべきディスクリプタのアドレスを示すデータである。なお、そのディスクリプタがディスクリプタリストの最後に読み込まれるディスクリプタである場合には、次ディスクリプタアドレスの領域には、ディスクリプタリストの最後のディスクリプタであることを示すデータが格納される。この次ディスクリプタアドレスにより、物理的に不連続な領域に格納されたディスクリプタが連続的に読み出されてDMA転送が行われる。
また、「転送データ量」は、そのディスクリプタによってDMA転送するデータのサイズを示すデータである。「転送元アドレス」は、転送対象のデータが格納されているアドレスを示すデータである。「転送先アドレス」は、転送元アドレスから転送データ量だけ読み出したデータを書き込むアドレスを示すデータである。
なお、本例において、個々のディスクリプタで転送可能なデータ量は、ページサイズを最大とし、各ディスクリプタの「転送データ量」はページサイズ以下の固定値(単位転送量)とする。これにより、ディスクリプタリストを構成するディスクリプタの数(すなわちディスクリプタリストのディスクリプタ数)と、ディスクリプタリストにより規定されるDMA転送の転送量とは比例関係になる。
図4は、ディスクリプタリストを管理するディスクリプタリスト管理キューの構造を説明する説明図である。ディスクリプタリスト管理キューは、ディスクリプタリストが格納されたアドレス(より詳述すると、ディスクリプタリストを構成する複数のディスクリプタのうち先頭のディスクリプタが格納されたアドレス)を示すディスクリプタリストポインタをリスト構造にして連ねて構成したバッファである。また、CPU50の所定のレジスタ(あるいはメモリの所定領域等)には、ディスクリプタリスト管理キューにおける先頭のディスクリプタリストポインタを指すディスクリプタリスト管理キューポインタが格納される。ディスクリプタリスト管理キューはFIFO方式であるため、転送指示部30が先頭のディスクリプタリストポインタを読み出したときには、ディスクリプタリスト管理キューポインタが次のディスクリプタリストポインタを指すように書き変えられる。なお、ディスクリプタリスト管理キューポインタは、DMAC80のチャネル毎に存在する。
また、転送指示部30は、新たにディスクリプタリストを作成して所定の格納領域に格納すると、ディスクリプタリスト管理キューの最後尾に当該作成したディスクリプタリストのアドレスを示すディスクリプタリストポインタを追加する。これにより、各ディスクリプタリストのアドレスが作成順に登録される。
なお、ディスクリプタリスト管理キューにディスクリプタリストポインタが1つも登録されていない場合には、ディスクリプタリスト管理キューポインタは空値(NULL)となる。
チャネルCH1によるDMA転送を実行する場合には、転送指示部30は、チャネルCH1のディスクリプタリスト管理キューポインタが指す先頭のディスクリプタリストポインタをDMAC80のチャネルCH1にセットしてチャネルCH1にDMA転送を開始させ、当該ディスクリプタリストポインタが示すディスクリプタリストに基づいてDMA転送を行なわせる。DMA転送は、1つのディスクリプタリストのDMA転送が完了するまでCPU50の割り込み無しで連続的に行なわれる。一方、転送指示部30は、チャネルCH1によるDMA転送中、所定の作成条件を満たす範囲内で、チャネルCH1用の次のディスクリプタリストやそれ以降のディスクリプタリストを先行して作成して、当該ディスクリプタリストのディスクリプタリストポインタをチャネルCH1用のディスクリプタリスト管理キューに登録する。
1つのディスクリプタリストによるDMA転送が完了すると、その時点でDMAC80はCPU50に割り込みを発生させる。すると、転送指示部30は、チャネルCH1のディスクリプタリスト管理キューポインタが指す次のディスクリプタリストポインタをDMAC80のチャネルCH1にセットしてDMA転送させる。これにより、チャネルCH1用のディスクリプタリスト管理キューに登録された順にチャネルCH1用のディスクリプタリストが読み出されてチャネルCH1によるDMA転送が行なわれる。
図5は、転送指示部30によるディスクリプタリストの付与動作の一例を示すフローチャートである。以下、図5を参照して、転送指示部30によるディスクリプタリストの付与動作の一例を説明する。なお、ここではチャネルCH1について説明するが、当該付与動作は他のチャネルについても同様に行われる。また、図5の処理は、例えば繰り返し実行される。
転送指示部30は、チャネルCH1用のディスクリプタリスト管理キューにディスクリプタリストポインタが登録されているか否かを判断する(S11)。
ディスクリプタリストポインタが登録されていないと判断された場合(S11:NO)、転送指示部30は、ステップS11の処理を繰り返し行う。
一方、ディスクリプタリストポインタが登録されていると判断された場合(S11:YES)、転送指示部30は、チャネルCH1にディスクリプタリストポインタを付与可能か否かを判断する(S12)。具体的には、転送指示部30は、チャネルCH1にディスクリプタリストポインタをセットした後、チャネルCH1のDMA転送の完了を示す割り込みが発生していない場合には、付与可能でないと判断し、そうでない場合には、付与可能であると判断する。
付与可能であると判断された場合(S12:YES)、転送指示部30は、ディスクリプタリスト管理キューポインタが指すディスクリプタリストポインタをチャネルCH1にセットし(S13)、処理を終了させる。
一方、付与可能でないと判断された場合(S12:NO)、転送指示部30は、処理をステップS11に戻す。
図6は、転送指示部30によるディスクリプタリストの作成動作の一例を示すフローチャートである。図6には、チャネルCH1用のディスクリプタリストを、チャネルCH2の利用状況に応じて作成する場合の手順が示されている。以下、図6を参照して、転送指示部30によるディスクリプタリストの作成動作の一例を説明する。なお、図6の処理は、例えば繰り返し実行される。
転送指示部30は、転送要求部40からチャネルCH1に対するDMA転送の要求を受けるまで待機し(S21:NO)、当該要求を受けると(S21:YES)、処理をステップS22に進める。
ステップS22では、転送指示部30は、DMAC80のチャネルCH2が利用中か否かを判断する。具体的には、転送指示部30は、チャネルCH2の利用の開始を検知した後、当該チャネルCH2の利用の終了を検知していない場合には、チャネルCH2は利用中であると判断し、そうでない場合には、チャネルCH2は利用中でないと判断する。
チャネルCH2が利用中でないと判断された場合(S22:NO)、転送指示部30は、ディスクリプタリストの作成に用いられるパラメータである最大ディスクリプタ数Dに、チャネルCH2が利用中でない場合に対応する値D0(D0は1以上の整数)を設定する(S23)。ここで、上記チャネルCH2が利用中でない場合(すなわちチャネルCH1が単独で動作する場合)に対応する値D0は、例えば、予め測定して得られる、転送効率が最大となるディスクリプタ数である。
ついで、転送指示部30は、上記要求により特定される転送対象のデータをDMA転送するためのチャネルCH1用のディスクリプタリストを、上記最大ディスクリプタ数D(=D0)に基づいて作成する(S24)。具体的には、転送指示部30は、最大ディスクリプタ数D(=D0)を、ディスクリプタリストを構成するディスクリプタ数の最大として、ディスクリプタリストを作成する。したがって、1個のディスクリプタの転送データ量をaとした場合、転送対象のデータのうちディスクリプタが作成されていない残りのデータ量が{a×(D0−1)}より多ければ、ディスクリプタ数D0のディスクリプタリストが作成され、{a×(D0−1)}以下であれば、残りのデータ量に応じたD0未満のディスクリプタ数のディスクリプタリストが作成される。
ついで、転送指示部30は、チャネルCH2の利用の開始を検知したか否かを判断する(S25)。具体的には、転送指示部30は、上位アプリケーションからのチャネルCH2を利用するジョブの開始の通知を受けたか否かを判断する。
チャネルCH2の利用の開始を検知していないと判断された場合(S25:NO)、転送指示部30は、上記要求に基づくDMA転送が完了したか否かを判断する(S26)。具体的には、転送指示部30は、ディスクリプタリスト管理キューポインタがNULLであり、かつディスクリプタが作成されていない残りのデータ量がゼロであれば、DMA転送が完了したと判断し、そうでなければ完了していないと判断する。
DMA転送が完了したと判断された場合(S26:YES)、転送指示部30は、処理を終了させる。
一方、DMA転送が完了していないと判断された場合(S26:NO)、転送指示部30は、処理をステップS24に戻す。2回目以降のステップS24の処理では、残りのデータ量がゼロでなければディスクリプタリストが作成され、残りのデータ量がゼロであればディスクリプタリストは作成されない。
ステップS22でチャネルCH2が利用中であると判断された場合(S22:YES)、転送指示部30は、最大ディスクリプタ数Dに、チャネルCH2が利用中である場合に対応する値D1(D1は1以上の整数)を設定する(S27)。
ついで、転送指示部30は、上記要求により特定される転送対象のデータをDMA転送するためのチャネルCH1用のディスクリプタリストを、上記最大ディスクリプタ数D(=D1)に基づいて作成する(S28)。具体的には、転送指示部30は、最大ディスクリプタ数D(=D1)を、ディスクリプタリストを構成するディスクリプタ数の最大として、ディスクリプタリストを作成する。したがって、1個のディスクリプタの転送データ量をaとした場合、転送対象のデータのうちディスクリプタが作成されていない残りのデータ量が{a×(D1−1)}より多ければ、ディスクリプタ数D1のディスクリプタリストが作成され、{a×(D1−1)}以下であれば、残りのデータ量に応じたD1未満のディスクリプタ数のディスクリプタリストが作成される。
ついで、転送指示部30は、チャネルCH2の利用の終了を検知したか否かを判断する(S29)。具体的には、転送指示部30は、上位アプリケーションからのチャネルCH2を利用するジョブの終了の通知を受けたか否かを判断する。
チャネルCH2の利用の終了を検知していないと判断された場合(S29:NO)、転送指示部30は、上記要求に基づくDMA転送が完了したか否かを判断する(S30)。具体的には、転送指示部30は、ディスクリプタリスト管理キューポインタがNULLであり、かつディスクリプタが作成されていない残りのデータ量がゼロであれば、DMA転送が完了したと判断し、そうでなければ完了していないと判断する。
DMA転送が完了したと判断された場合(S30:YES)、転送指示部30は、処理を終了させる。
一方、DMA転送が完了していないと判断された場合(S30:NO)、転送指示部30は、処理をステップS28に戻す。2回目以降のステップS28の処理では、残りのデータ量がゼロでなければディスクリプタリストが作成され、残りのデータ量がゼロであればディスクリプタリストは作成されない。
ステップS25でチャネルCH2の利用の開始を検知したと判断された場合(S25:YES)、転送指示部30は、ディスクリプタ格納領域に格納されているチャネルCH1用のディスクリプタリストを全て破棄し、チャネルCH1用のディスクリプタリスト管理キューに登録されているディスクリプタリストポインタを全て削除し(S31)、処理をステップS27に移す。これにより、チャネルCH2が利用中でない場合に応じたディスクリプタ数のディスクリプタリストが破棄され、チャネルCH2が利用中である場合に応じたディスクリプタ数の新たなディスクリプタリストが作成されることとなる。なお、チャネルCH1用のディスクリプタリストが格納されていない場合には、上記ステップS31の処理は行われない。
ステップS29でチャネルCH2の利用の終了を検知したと判断された場合(S29:YES)、転送指示部30は、ディスクリプタ格納領域に格納されているチャネルCH1用のディスクリプタリストを全て破棄し、チャネルCH1用のディスクリプタリスト管理キューに登録されているディスクリプタリストポインタを全て削除し(S32)、処理をステップS23に移す。これにより、チャネルCH2が利用中である場合に応じたディスクリプタ数のディスクリプタリストが破棄され、チャネルCH2が利用中でない場合に応じたディスクリプタ数の新たなディスクリプタリストが作成されることとなる。なお、チャネルCH1用のディスクリプタリストが格納されていない場合には、上記ステップS32の処理は行われない。
なお、上記の例において、転送指示部30は、チャネルCH2用のディスクリプタリストを、上記チャネルCH1と同様に、チャネルCH1の利用状況に応じて作成してもよい。また、転送指示部30は、チャネルCH2用のディスクリプタリストを、チャネルCH1の利用状況に関わらず作成してもよい。例えば、転送指示部30は、図7に示されるように、最大ディスクリプタ数Dを一定値として、チャネルCH2用のディスクリプタリストを作成してもよい。
図7において、転送指示部30は、転送要求部40からチャネルCH2に対するDMA転送の要求を受けるまで待機し(S35:NO)、当該要求を受けると(S35:YES)、処理をステップS36に進める。
ステップS36では、転送指示部30は、上記要求により特定される転送対象のデータをDMA転送するためのチャネルCH2用のディスクリプタリストを、予め決められた一定値である最大ディスクリプタ数Dに基づいて作成する。具体的には、転送指示部30は、最大ディスクリプタ数Dを、ディスクリプタリストを構成するディスクリプタ数の最大として、ディスクリプタリストを作成する。したがって、1個のディスクリプタの転送データ量をaとした場合、転送対象のデータのうちディスクリプタが作成されていない残りのデータ量が{a×(D−1)}より多ければ、ディスクリプタ数Dのディスクリプタリストが作成され、{a×(D−1)}以下であれば、残りのデータ量に応じたD未満のディスクリプタ数のディスクリプタリストが作成される。
ついで、転送指示部30は、上記要求に基づくDMA転送が完了したか否かを判断し(S37)、完了していないと判断された場合には(S37:NO)、処理をステップS36に戻し、完了したと判断された場合には(S37:YES)、処理を終了させる。
図8は、転送指示部30によるディスクリプタリストの作成動作の別の一例を示すフローチャートである。図8には、チャネルCH1用のディスクリプタリストを、他のチャネルCH2〜CHNの利用状況に応じて作成する場合の手順が示されている。以下、図8を参照して、転送指示部30によるディスクリプタリストの作成動作の別の一例を説明する。
転送指示部30は、転送要求部40からチャネルCH1に対するDMA転送の要求を受けるまで待機し(S41:NO)、当該要求を受けると(S41:YES)、処理をステップS42に進める。
ステップS42では、転送指示部30は、他のチャネルCH2〜CHNのうち利用中であるチャネルの組み合わせに応じたディスクリプタ数を、最大ディスクリプタ数Dに設定する。具体的には、転送指示部30は、利用中のチャネルの組み合わせとディスクリプタ数とが対応付けられた、予め設定されたテーブルに基づいて、最大ディスクリプタ数Dを決定する。ここで、テーブル内のディスクリプタ数は、例えば、DMA転送レートの実測によって得られる最適な数値である。
ついで、転送指示部30は、上記要求により特定される転送対象のデータをDMA転送するためのチャネルCH1用のディスクリプタリストを、上記ステップS42で設定された最大ディスクリプタ数Dに基づいて作成する(S43)。具体的には、転送指示部30は、最大ディスクリプタ数Dを、ディスクリプタリストを構成するディスクリプタ数の最大として、ディスクリプタリストを作成する。したがって、1個のディスクリプタの転送データ量をaとした場合、転送対象のデータのうちディスクリプタが作成されていない残りのデータ量が{a×(D−1)}より多ければ、ディスクリプタ数Dのディスクリプタリストが作成され、{a×(D−1)}以下であれば、残りのデータ量に応じたD未満のディスクリプタ数のディスクリプタリストが作成される。
ついで、転送指示部30は、他のチャネルCH2〜CHNのうち利用中のチャネルの組み合わせの変化を検知したか否かを判断する(S44)。ここで、転送指示部30は、上記組み合わせの変化を、例えば上位アプリケーションからの他のチャネルを利用するジョブの開始または終了の通知に基づいて検知する。
組み合わせの変化を検知していないと判断された場合(S44:NO)、転送指示部30は、上記要求に基づくDMA転送が完了したか否かを判断する(S45)。具体的には、転送指示部30は、ディスクリプタリスト管理キューポインタがNULLであり、かつディスクリプタが作成されていない残りのデータ量がゼロであれば、DMA転送が完了したと判断し、そうでなければ完了していないと判断する。
DMA転送が完了したと判断された場合(S45:YES)、転送指示部30は、処理を終了させる。
一方、DMA転送が完了していないと判断された場合(S45:NO)、転送指示部30は、処理をステップS43に戻す。2回目以降のステップS43の処理では、残りのデータ量がゼロでなければディスクリプタリストが作成され、残りのデータ量がゼロであればディスクリプタリストは作成されない。
ステップS44で組み合わせの変化を検知したと判断された場合(S44:YES)、転送指示部30は、ディスクリプタ格納領域に格納されているチャネルCH1用のディスクリプタリストを全て破棄し、チャネルCH1用のディスクリプタリスト管理キューに登録されているディスクリプタリストポインタを全て削除し(S46)、処理をステップS42に移す。これにより、変化前の組み合わせに応じたディスクリプタ数のディスクリプタリストが破棄され、変化後の組み合わせに応じたディスクリプタ数の新たなディスクリプタリストが作成されることとなる。なお、チャネルCH1用のディスクリプタリストが格納されていない場合には、上記ステップS46の処理は行われない。
なお、上記の例において、転送指示部30は、チャネルCH1以外のチャネル用のディスクリプタリストを、上記チャネルCH1と同様に、他のチャネルの利用状況に応じて作成してもよい。また、転送指示部30は、チャネルCH1以外のチャネル用のディスクリプタリストを、他のチャネルの利用状況に関わらず作成してもよい。例えば、転送指示部30は、最大ディスクリプタ数Dを一定値として、チャネルCH1以外のチャネル用のディスクリプタリストを作成してもよい。
図9には、利用中のチャネルの組み合わせとディスクリプタ数とが対応付けられたテーブルの一例が示されている。上記ステップS42の処理は、例えば図9のテーブルに基づいて実行される。図9において、テーブル内の数値はディスクリプタ数を示し、テーブル内の「−」は当該チャネルが利用中でないことを示す。
図9のテーブルでは、チャネルCH1〜CH3のうち利用中のチャネルの組み合わせ毎に、利用中の各チャネルに適用されるディスクリプタ数が設定されている。
例えば、組み合わせ#1は、チャネルCH1〜CH3の全てが利用中である場合を示し、この場合には、チャネルCH1,CH2,CH3に適用されるディスクリプタ数は、それぞれ512,4,1である。したがって、チャネルCH2およびCH3が利用中である場合において、チャネルCH1用のディスクリプタリストが作成される際には、最大ディスクリプタ数Dに「512」が設定される。また、チャネルCH1およびCH3が利用中である場合において、チャネルCH2用のディスクリプタリストが作成される際には、最大ディスクリプタ数Dに「4」が設定される。
また例えば、組み合わせ#2は、チャネルCH1およびCH2が利用中であり、チャネルCH3が利用中でない場合を示し、この場合には、チャネルCH1,CH2に適用されるディスクリプタ数は、それぞれ512,5である。したがって、チャネルCH2が利用中でチャネルCH3が利用中でない場合において、チャネルCH1用のディスクリプタリストが作成される際には、最大ディスクリプタ数Dに「512」が設定される。また、チャネルCH1が利用中でチャネルCH3が利用中でない場合において、チャネルCH2用のディスクリプタリストが作成される際には、最大ディスクリプタ数Dに「5」が設定される。
図10は、DMAC80の第1の動作例を示すフローチャートである。本動作例では、チャネルCH1,CH2は、ディスクリプタリスト単位で伝送路を占有する。以下、図10を参照して、DMAC80の第1の動作例を説明する。
DMAC80は、チャネルCH1について、未処理のディスクリプタリストが存在するか否かを判断する(S51)。具体的には、DMAC80は、チャネルCH1にディスクリプタリストポインタがセットされたか否かを判断する。
未処理のディスクリプタリストが存在すると判断された場合(S51:YES)、DMAC80は、当該ディスクリプタリストに基づいて、チャネルCH1によるDMA転送を実行する(S52)。そして、DMAC80は、上記ディスクリプタリストに基づくDMA転送が完了すると、CPU50に対して割り込みを発生させ(S53)、処理をステップS54に移す。
ステップS51で未処理のディスクリプタリストが存在しないと判断された場合(S51:NO)、DMAC80は処理をステップS54に移す。
ステップS54では、DMAC80は、チャネルCH2について、未処理のディスクリプタリストが存在するか否かを判断する。具体的には、DMAC80は、チャネルCH2にディスクリプタリストポインタがセットされたか否かを判断する。
未処理のディスクリプタリストが存在すると判断された場合(S54:YES)、DMAC80は、当該ディスクリプタリストに基づいて、チャネルCH2によるDMA転送を実行する(S55)。そして、DMAC80は、上記ディスクリプタリストに基づくDMA転送が完了すると、CPU50に対して割り込みを発生させ(S56)、処理をステップS51に移す。
ステップS54で未処理のディスクリプタリストが存在しないと判断された場合(S54:NO)、DMAC80は処理をステップS51に移す。
図11および図12は、DMAC80のチャネルCH1,CH2の動作の一例を示すシーケンス図である。本例では、DMAC80は図10のとおり動作する。チャネルCH1用のディスクリプタリストは、図6のとおりチャネルCH2の利用状況に応じて作成される。チャネルCH2用のディスクリプタリストは、図7のとおりチャネルCH1の利用状況によらずに作成される。ここで、チャネルCH1について、チャネルCH2が利用中でない場合に対応する最大ディスクリプタ数D0は「7」であり、チャネルCH2が利用中である場合に対応する最大ディスクリプタ数D1は「3」である。また、チャネルCH2について、一定値である最大ディスクリプタ数Dは「7」である。
一つの利用態様では、チャネルCH1は優先度の低いジョブに利用され、チャネルCH2は優先度の高いジョブに利用される。印刷装置や複写機においては、DMA転送を利用するジョブとして、印刷(プリント)、画像読み取り(スキャン)、画像変換(レンダリング)、システム管理などのジョブが挙げられる。これらのジョブを優先度の高い順に並べると、例えば、プリント、レンダリング、システム管理の順、またはスキャン、レンダリング、システム管理の順となる。したがって、例えば、チャネルCH1は優先度の低いレンダリングに利用され、チャネルCH2は優先度の高いスキャンに利用される。
図11および図12において、各ディスクリプタに基づくDMA転送区間は、矩形で表現されている。そして、各矩形の上側には、当該矩形に対応するディスクリプタの番号が表示されている。また、括弧で括られた数字は、ディスクリプタリストの番号を表している。上記のことは、以降の同様の図面についても同様である。
図11では、チャネルCH1が単独で動作し、一連のディスクリプタリストに基づくDMA転送を行っている。この場合、各ディスクリプタリストのディスクリプタ数は「7」である。1つのディスクリプタリストに基づくDMA転送が完了すると、割り込みが発生し、割り込み処理時間等の空き時間を経て、次のディスクリプタリストに基づくDMA転送が実行されている。なお、チャネルCH2が単独で動作する場合は、上記チャネルCH1が単独で動作する場合と同様である。
図12では、チャネルCH1,CH2が並列で動作し、それぞれ一連のディスクリプタリストに基づくDMA転送を行っている。この場合、チャネルCH1の各ディスクリプタリストのディスクリプタ数は「3」であり、チャネルCH2の各ディスクリプタリストのディスクリプタ数は「7」である。各チャネルは、1つのディスクリプタリストに基づくDMA転送を開始すると、当該DMA転送が完了するまで伝送路を占有する。したがって、一方のチャネルによるDMA転送が行われている間、他方のチャネルはDMA転送を実行することができない。このため、他方のチャネルには待ち時間が発生する。図12において、当該待ち時間は斜線ハッチングで表されている。なお、待たされた上記他方のチャネルのDMA転送は、上記一方のチャネルのDMA転送が完了して割り込みが発生すると開始される。
図13は、DMAC80のチャネルCH1,CH2の動作の比較例を示すシーケンス図である。本比較例では、DMAC80および転送指示部30の動作条件は図12の場合と殆ど同じであるが、チャネルCH1用のディスクリプタリストがチャネルCH2と同様に図7のとおり作成される点で異なる。すなわち、本比較例では、チャネルCH1およびCH2のディスクリプタリストは、一定値である最大ディスクリプタ数「7」に基づいて作成される。
図13では、チャネルCH1,CH2が並列で動作し、それぞれ一連のディスクリプタリストに基づくDMA転送を行っている。この場合、チャネルCH1およびCH2の各ディスクリプタリストのディスクリプタ数は「7」である。
図13では、チャネルCH1の待ち時間とチャネルCH2の待ち時間とは互いに略同じである。これに対し、図12では、チャネルCH2の待ち時間は、チャネルCH1の待ち時間よりも短くなっている。すなわち、チャネルCH2のDMA転送が、チャネルCH1のDMA転送よりも優先されている。また、図12でのチャネルCH2の待ち時間は、図13でのチャネルCH2の待ち時間よりも短縮されている。
図14は、DMAC80のチャネルCH1,CH2の動作の一例を示すシーケンス図である。本例において、DMAC80および転送指示部30の動作条件は図12の場合と同様である。
図14では、当初、低優先ジョブに利用されるチャネルCH1が単独で動作する。具体的には、作成区間D1−1〜D1−4でチャネルCH1用のディスクリプタリストDL1−1〜DL1−4が作成され、転送区間T1−1〜T1−3でディスクリプタリストDL1−1〜DL1−3に基づくチャネルCH1のDMA転送が行わる。ここで、ディスクリプタリストDL1−1〜DL1−4のディスクリプタ数は「7」である。
作成区間D1−4の後、時刻t1においてチャネルCH2のDMA転送を利用する高優先ジョブが開始し、時刻t2において当該高優先ジョブの開始が転送指示部30に通知される。これに応じ、転送指示部30は、作成区間D1−4で作成された未転送のディスクリプタリストDL1−4を破棄し、作成区間D1−4’でディスクリプタ数「3」の新たなディスクリプタリストDL1−4’を作成する。以降、作成区間D1−5’〜D1−15’でディスクリプタ数「3」のディスクリプタリストDL1−5’〜DL1−15’が作成され、転送区間T1−4〜T1−14でディスクリプタリストDL1−4’〜DL1−14’に基づくチャネルCH1のDMA転送が行われる。
一方、時刻t2の後、上記チャネルCH1のDMA転送と並行して、チャネルCH2のDMA転送が行われる。具体的には、作成区間D2−1〜D2−END(不図示)でチャネルCH2用のディスクリプタリストDL2−1〜DL2−ENDが作成され、転送区間T2−1〜T2−ENDでディスクリプタリストDL2−1〜DL2−ENDに基づくチャネルCH2のDMA転送が行われる。ここで、ディスクリプタリストDL2−1〜DL2−ENDのディスクリプタ数は「7」である。
チャネルCH1およびCH2のDMA転送が並行して実行される期間においては、斜線ハッチングで示されるように、チャネルCH1およびCH2に待ち時間が発生する。このとき、チャネルCH2の待ち時間は、チャネルCH1の待ち時間よりも短い。
転送区間T2−ENDの後、高優先ジョブが終了する前、時刻t3において高優先ジョブの終了が転送指示部30に通知される。これに応じ、転送指示部30は、作成区間D1−15’で作成された未転送のディスクリプタリストDL1−15’を破棄し、作成区間D1−15でディスクリプタ数「7」の新たなディスクリプタリストDL1−15を作成する。以降、作成区間D1−16,D1−17,・・・でディスクリプタ数「7」のディスクリプタリストDL1−16,DL1−17,・・・が作成され、転送区間T1−15,T1−16,・・・でディスクリプタリストDL1−15,DL1−16,・・・に基づくチャネルCH1のDMA転送が行われる。
上記図11,12,14の例では、単一ジョブ動作時は、転送効率が最も良いディスクリプタ数でDMA転送が行われるように制御される。一方、優先度の高いジョブが実行される場合は、当該優先度の高いジョブのDMA転送の待ち時間を短くするために、優先度の低いジョブのDMA転送のディスクリプタ数が少なくされる。ここで、優先度の高いジョブが実行される場合における、優先度の低いジョブのDMA転送のディスクリプタ数(すなわち調整されるディスクリプタ数)は、例えば、優先度の高いジョブのDMA転送の待ち時間が優先度の高いジョブで許容されるDMA転送の待ち時間に収まるように設定される。具体的には、チャネルCH2の最大ディスクリプタ数D1は、優先度の高いジョブのDMA転送の待ち時間が許容待ち時間以下となるように予め決められる。
また、上記図14の例では、チャネルCH2を利用するジョブの開始時点で、当該ジョブが開始されたことが転送指示部30に通知される。そして、チャネルCH2のDMA転送が開始される前に、チャネルCH1のディスクリプタリストの調整が行われる。すなわち、チャネルCH1について、作成済みのディスクリプタリストが破棄され、新たなディスクリプタリストが作成される。これにより、高優先のチャネルCH2側の待ち時間の短縮が図られている。
図15は、DMAC80の第2の動作例を示すフローチャートである。本動作例では、DMAC80は、1つのディスクリプタリストに基づくDMA転送を複数回のバースト転送に分けて実行する。1回のバースト転送の転送量(すなわちバースト長)は、例えば一定である。また、チャネルCH1,CH2による伝送路の使用はラウンドロビン方式で制御され、チャネルCH1,CH2はバースト転送単位で伝送路を占有する。以下、図15を参照して、DMAC80の第2の動作例を説明する。
DMAC80は、チャネルCH1について、未処理または処理中のディスクリプタリストが存在するか否かを判断する(S61)。
未処理または処理中のディスクリプタリストが存在すると判断された場合(S61:YES)、DMAC80は、チャネルCH1による1回のバースト転送を実行する(S62)。
ついで、DMAC80は、上記ディスクリプタリストに基づくチャネルCH1によるDMA転送が完了したか否かを判断する(S63)。
上記DMA転送が完了したと判断された場合(S63:YES)、DMAC80は、CPU50に対して割り込みを発生させ(S64)、処理をステップS65に移す。
上記ステップS61で未処理または処理中のディスクリプタリストが存在しないと判断された場合(S61:NO)、および上記ステップS63でDMA転送が完了していないと判断された場合(S63:NO)、DMAC80は、処理をステップS65に移す。
ステップS65では、DMAC80は、チャネルCH2について、未処理または処理中のディスクリプタリストが存在するか否かを判断する。
未処理または処理中のディスクリプタリストが存在すると判断された場合(S65:YES)、DMAC80は、チャネルCH2による1回のバースト転送を実行する(S66)。
ついで、DMAC80は、上記ディスクリプタリストに基づくチャネルCH2によるDMA転送が完了したか否かを判断する(S67)。
上記DMA転送が完了したと判断された場合(S67:YES)、DMAC80は、CPU50に対して割り込みを発生させ(S68)、処理をステップS61に移す。
上記ステップS65で未処理または処理中のディスクリプタリストが存在しないと判断された場合(S65:NO)、および上記ステップS67でDMA転送が完了していないと判断された場合(S67:NO)、DMAC80は、処理をステップS61に移す。
図16および図17は、DMAC80のチャネルCH1,CH2の動作の一例を示すシーケンス図である。本例では、DMAC80は図15のとおり動作する。チャネルCH1用のディスクリプタリストは、図6のとおりチャネルCH2の利用状況に応じて作成される。チャネルCH2用のディスクリプタリストは、図7のとおりチャネルCH1の利用状況によらずに作成される。ここで、チャネルCH1について、チャネルCH2が利用中でない場合に対応する最大ディスクリプタ数D0は「4」であり、チャネルCH2が利用中である場合に対応する最大ディスクリプタ数D1は「1」である。また、チャネルCH2について、一定値である最大ディスクリプタ数Dは「4」である。
一つの利用態様では、チャネルCH1は優先度の低いジョブに利用され、チャネルCH2は優先度の高いジョブに利用される。例えば、複写機においては、チャネルCH1は優先度の低いレンダリングに利用され、チャネルCH2は優先度の高いスキャンに利用される。
図16および図17において、各ディスクリプタに基づくDMA転送区間を表現する矩形内の縦線ハッチングは、当該DMA転送区間内で複数回のバースト転送が行われることを表現している。ここで、高密度の縦線のハッチングは、伝送路が1つのチャネルに占有され、バースト転送が高い頻度で行われることを表現している。一方、低密度の縦線のハッチングは、伝送路が2つのチャネルにバースト転送単位で交互に使用されることにより、バースト転送が低い頻度で行われることを表現している。当該低密度の縦線のハッチングの区間では、バースト転送の実行区間と待ち時間とが交互に繰り返されている。上記のことは、以降の同様の図面についても同様である。
図16では、チャネルCH1が単独で動作し、一連のディスクリプタリストに基づくDMA転送を行っている。この場合、各ディスクリプタリストのディスクリプタ数は「4」である。なお、チャネルCH2が単独で動作する場合も、上記チャネルCH1が単独で動作する場合と同様である。
図17では、チャネルCH1,CH2が並列で動作し、それぞれ一連のディスクリプタリストに基づくDMA転送を行っている。この場合、チャネルCH1の各ディスクリプタリストのディスクリプタ数は「1」であり、チャネルCH2の各ディスクリプタリストのディスクリプタ数は「4」である。図17に示されるように、チャネルCH1のDMA転送が実行されている区間では、チャネルCH2のDMA転送は低速になる。これは、チャネルCH1とCH2とで、伝送路の使用権が交互に与えられるためである。一方、チャネルCH1のDMA転送が実行されていない区間(例えばチャネルCH1の空き時間)では、チャネルCH2が伝送路を占有し、チャネルCH2のDMA転送は高速になる。
図18は、DMAC80のチャネルCH1,CH2の動作の比較例を示すシーケンス図である。本比較例では、DMAC80および転送指示部30の動作条件は図17の場合と殆ど同じであるが、チャネルCH1用のディスクリプタリストがチャネルCH2と同様に図7のとおり作成される点で異なる。すなわち、本比較例では、チャネルCH1およびCH2のディスクリプタリストは、一定値である最大ディスクリプタ数「4」に基づいて作成される。
図18では、チャネルCH1,CH2が並列で動作し、それぞれ一連のディスクリプタリストに基づくDMA転送を行っている。この場合、チャネルCH1およびCH2の各ディスクリプタリストのディスクリプタ数は「4」である。
図18では、チャネルCH1とCH2とで、DMA転送間の空き時間は互いに略同じ頻度で発生しており、単位時間当たりの転送量は互いに略同じである。これに対し、図17では、チャネルCH1側の空き時間は、チャネルCH2側よりも高頻度で発生している。このため、チャネルCH1側と比較して、チャネルCH2側では、DMA転送を高速で行う機会が多く、単位時間当たりの転送量は、チャネルCH2の方がチャネルCH1よりも多くなっている。すなわち、チャネルCH2のDMA転送が、チャネルCH1のDMA転送よりも優先されている。
図19は、DMAC80のチャネルCH1,CH2の動作の一例を示すシーケンス図である。本例において、DMAC80および転送指示部30の動作条件は図17の場合と同様である。
図19では、当初、低優先ジョブに利用されるチャネルCH1が単独で動作する。具体的には、作成区間D1−1〜D1−4でチャネルCH1用のディスクリプタリストDL1−1〜DL1−4が作成され、転送区間T1−1〜T1−3でディスクリプタリストDL1−1〜DL1−3に基づくチャネルCH1のDMA転送が行わる。ここで、ディスクリプタリストDL1−1〜DL1−4のディスクリプタ数は「4」である。
時刻t1においてチャネルCH2のDMA転送を利用する高優先ジョブが開始し、時刻t2において当該高優先ジョブの開始が転送指示部30に通知される。これに応じ、転送指示部30は、作成区間D1−4で作成された未転送のディスクリプタリストDL1−4を破棄し、作成区間D1−4’でディスクリプタ数「1」の新たなディスクリプタリストDL1−4’を作成する。以降、作成区間D1−5’〜D1−15’でディスクリプタ数「1」のディスクリプタリストDL1−5’〜DL1−15’が作成され、転送区間T1−4〜T1−14でディスクリプタリストDL1−4’〜DL1−14’に基づくチャネルCH1のDMA転送が行われる。
一方、時刻t2の後、上記チャネルCH1のDMA転送と並行して、チャネルCH2のDMA転送が行われる。具体的には、作成区間D2−1〜D2−END(不図示)でチャネルCH2用のディスクリプタリストDL2−1〜DL2−ENDが作成され、転送区間T2−1〜T2−ENDでディスクリプタリストDL2−1〜DL2−ENDに基づくチャネルCH2のDMA転送が行われる。ここで、ディスクリプタリストDL2−1〜DL2−ENDのディスクリプタ数は「4」である。
転送区間T2−ENDの後、高優先ジョブが終了する前、時刻t3において高優先ジョブの終了が転送指示部30に通知される。これに応じ、転送指示部30は、作成区間D1−15’で作成された未転送のディスクリプタリストDL1−15’を破棄し、作成区間D1−15でディスクリプタ数「4」の新たなディスクリプタリストDL1−15を作成する。以降、作成区間D1−16,D1−17,・・・でディスクリプタ数「4」のディスクリプタリストDL1−16,DL1−17,・・・が作成され、転送区間T1−15,T1−16,・・・でディスクリプタリストDL1−15,DL1−16,・・・に基づくチャネルCH1のDMA転送が行われる。
図20は、DMAC80の第3の動作例を示すフローチャートである。本動作例では、DMAC80は、1つのディスクリプタリストに基づくDMA転送を複数回のバースト転送に分けて実行する。また、チャネルCH1,CH2による伝送路の使用は、チャネルCH1がチャネルCH2よりも優先されるように、固定優先順位方式で制御される。高優先チャネルであるチャネルCH1はディスクリプタリスト単位で伝送路を占有し、低優先チャネルであるチャネルCH2はバースト転送単位で伝送路を占有する。以下、図20を参照して、DMAC80の第3の動作例を説明する。
DMAC80は、チャネルCH1について、未処理のディスクリプタリストが存在するか否かを判断する(S71)。
未処理のディスクリプタリストが存在すると判断された場合(S71:YES)、DMAC80は、チャネルCH1による1回のバースト転送を実行する(S72)。
ついで、DMAC80は、上記ディスクリプタリストに基づくチャネルCH1によるDMA転送が完了したか否かを判断する(S73)。
上記DMA転送が完了していないと判断された場合(S73:NO)、DMAC80は処理をステップS72に戻して、バースト転送を繰り返し行う。
一方、上記DMA転送が完了したと判断された場合(S73:YES)、DMAC80は、CPU50に対して割り込みを発生させ(S74)、処理をステップS75に移す。
上記ステップS71で未処理のディスクリプタリストが存在しないと判断された場合(S71:NO)、DMAC80は処理をステップS75に移す。
ステップS75では、DMAC80は、チャネルCH2について、未処理または処理中のディスクリプタリストが存在するか否かを判断する。
未処理または処理中のディスクリプタリストが存在すると判断された場合(S75:YES)、DMAC80は、チャネルCH2による1回のバースト転送を実行する(S76)。
ついで、DMAC80は、上記ディスクリプタリストに基づくチャネルCH2によるDMA転送が完了したか否かを判断する(S77)。
上記DMA転送が完了したと判断された場合(S77:YES)、DMAC80は、CPU50に対して割り込みを発生させ(S78)、処理をステップS71に移す。
上記ステップS75で未処理または処理中のディスクリプタリストが存在しないと判断された場合(S75:NO)、および上記ステップS77でDMA転送が完了していないと判断された場合(S77:NO)、DMAC80は処理をステップS71に移す。
図21および図22は、DMAC80のチャネルCH1,CH2の動作の一例を示すシーケンス図である。本例では、DMAC80は図20のとおり動作する。チャネルCH1用のディスクリプタリストは、図6のとおりチャネルCH2の利用状況に応じて作成される。チャネルCH2用のディスクリプタリストは、図7のとおりチャネルCH1の利用状況によらずに作成される。ここで、チャネルCH1について、チャネルCH2が利用中でない場合に対応する最大ディスクリプタ数D0は「4」であり、チャネルCH2が利用中である場合に対応する最大ディスクリプタ数D1は「2」である。また、チャネルCH2について、一定値である最大ディスクリプタ数Dは「4」である。
一つの利用態様では、高優先のチャネルCH1は優先度の高いジョブに利用され、低優先のチャネルCH2は優先度の低いジョブに利用される。例えば、チャネルCH1は優先度の高いスキャンに利用され、チャネルCH2は優先度の低いレンダリングに利用される。
図21では、チャネルCH1が単独で動作し、一連のディスクリプタリストに基づくDMA転送を行っている。この場合、各ディスクリプタリストのディスクリプタ数は「4」である。なお、チャネルCH2が単独で動作する場合も、上記チャネルCH1が単独で動作する場合と同様である。
図22では、チャネルCH1およびCH2が並列で動作し、それぞれ一連のディスクリプタリストに基づくDMA転送を行っている。この場合、チャネルCH1の各ディスクリプタリストのディスクリプタ数は「2」であり、チャネルCH2の各ディスクリプタリストのディスクリプタ数は「4」である。
図23は、DMAC80のチャネルCH1,CH2の動作の比較例を示すシーケンス図である。本比較例では、DMAC80および転送指示部30の動作条件は図21の場合と殆ど同じであるが、チャネルCH1用のディスクリプタリストがチャネルCH2と同様に図7のとおり作成される点で異なる。すなわち、本比較例では、チャネルCH1およびCH2のディスクリプタリストは、一定値である最大ディスクリプタ数「4」に基づいて作成される。
図23では、チャネルCH1およびCH2が並列で動作し、それぞれ一連のディスクリプタリストに基づくDMA転送を行っている。この場合、チャネルCH1およびCH2の各ディスクリプタリストのディスクリプタ数は「4」である。
図22および図23において、チャネルCH2のDMA転送は、チャネルCH1側の空き時間に行われている。図23では、チャネルCH1側で空き時間が発生する頻度は比較的少なく、チャネルCH2のDMA転送が実行される機会が少なく、チャネルCH2の単位時間当たりの転送量が極端に減少している。これに対し、図22では、図23と比較して、チャネルCH1側で空き時間が発生する頻度が多くなっており、チャネルCH2のDMA転送が実行される機会が多くなっている。これにより、チャネルCH2の単位時間当たりの転送量の減少が緩和されている。チャネルCH1側のディスクリプタ数は、例えば、チャネルCH2側に必要な帯域幅が確保されるように設定される。
図24は、本実施の形態に係るDMA制御システムを含む画像処理システム100の構成例を示す図である。
画像処理システム100は、マザーボード112およびコントローラボード114を備えた情報処理部113、画像入力部116、画像出力部118、コントローラ120、およびLCD(液晶ディスプレイ)122を備えている。
マザーボード112は、CPU124および主記憶としてのメモリ128を備えている。CPU124およびメモリ128はハブ126を介して専用のバスにより接続されている。このメモリ128には、画像出力部118で出力(印刷)する画像データや画像入力部116で読み取った画像データを格納するための領域があり、該画像データは後述するコントローラボード114に設けられたメモリ144との間でCPU124の介在無しにDMA転送される。
また、ハブ126には、マザーボード112の外部に設けられたLCD122が接続されている。LCD122は、表示面にタッチパネルを有する液晶表示装置であり、ユーザインタフェースとして機能する。
また、専用のバスを接続するためのハブ126は、汎用バスを接続するためのハブ130と接続されている。ハブ130にはHDD(ハードディスク装置)132とI/Oポート134とが汎用バスを介して接続されている。HDD132には、CPU124が実行するプログラムや各種データが記憶されている。I/Oポート134は、入出力インタフェースとして機能し、画像処理システム100の周辺機器などが接続される。
なお、CPU124が実行するプログラムや各種データを記録する記録媒体は、HDDに限定されず、不図示のCD−ROMやDVDディスク、光磁気ディスクやICカード、あるいはROM等であってもよいし、電気通信回線上の搬送波のような伝送媒体であってもよく、特に限定されない。
マザーボード112には汎用バスのインタフェース136が設けられ、同じくコントローラボード114に設けられた汎用バスのインタフェース138と接続されている。
コントローラボード114は、バスブリッジ140、メモリ144、論理回路146、CPU148、および画像処理回路150を備えている。バスブリッジ140、メモリ144、CPU148、および画像処理回路150は、論理回路146に接続され、論理回路146を介して互いにデータのやりとりを行なう。論理回路146は、データ転送回路としてプログラムされた回路であるが、単にデータを受け渡すのみでありデータ転送の制御を行なうわけではない。画像処理回路150は、入力された画像データに所定の画像処理を施す回路である。
バスブリッジ140は、汎用バスを介してインタフェース138に接続されると共に、論理回路146に接続されている。バスブリッジ140は、汎用バス同士のブリッジ機能やバスマスタ機能を備えている。このバスマスタ機能は、コントローラボード114上のCPU148を介さずにメモリ144と画像処理回路150との間でデータのやりとりを行なうための機能である。具体的には、コントローラボード114では、画像出力部118による画像出力時には、画像データがメモリ144から論理回路146を介して画像処理回路150へDMA転送され、画像入力部116によって画像が読み込まれた場合には、該読み込まれて得られた画像データが画像処理回路150から論理回路146を介してメモリ144へDMA転送される。
一方、マザーボード112上のCPU124を介さずに、マザーボード112上のメモリ128とコントローラボード114上のメモリ144との間でデータの転送を行なうDMA機能は、上記バスブリッジ140のバスマスタ機能とは別に、バスブリッジ140に設けられたDMAC142により実現される。DMAC142は、飛び飛びのアドレスに対して、連続してデータを転送できるスキャッタギャザー機能が搭載された回路である。
コントローラボード114に設けられているコネクタ152は、画像入力部116および画像出力部118を制御する制御機構を備えたコントローラ120に設けられているコネクタ156に接続されている。また、コントローラボード114のコネクタ152は、前述の画像処理回路150に接続されている。画像処理回路150で画像処理が施される画像データは、コネクタ152およびコネクタ156を介して送受信される。
また、コントローラボード114にはコネクタ152とは別のコネクタ154が設けられている。このコネクタ154は、論理回路146に直接接続されると共に、コントローラ120に設けられているコネクタ158と接続されている。コントローラ120とコントローラボード114との間での制御データやメッセージの送受信は、これらコネクタ154、コネクタ158を介して行なわれる。
上記構成において、DMAC142は、複数のチャネルを有し、複数のDMA制御部10および制御部20として機能する。また、CPU124は、転送指示部30および転送要求部40として機能する。DMAC142の各チャネルは画像処理システム100の各種のジョブに割り当てられる。すなわち、各種のジョブは、それぞれ当該ジョブに対応するチャネルを用いてDMA転送を行う。当該DMA転送では、メモリ128からメモリ144へ、またはメモリ144からメモリ128へ情報が転送される。
なお、本発明は、上記実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内で種々変更することができる。
1 DMA制御システム、10(11,12,・・・) DMA制御部、20 制御部、30 転送指示部、40 転送要求部、50 CPU、60 メモリ、70 入出力機器、80 DMAコントローラ(DMAC)、B バス。