(57)【要約】【課題】  データ処理装置において、ダイレクトメモリアクセス（ＤＭＡ）によるデータ転送の効率を向上させる。【解決手段】  ディスクリプタフェッチ回路２１１は、ＣＰＵから発行されたディスクリプタをディスクリプタバッファ２１２へ格納する。データ転送制御回路２１４は、格納されたディスクリプタに転送データが含まれていないとき、メモリからデータを読み出してＩ／Ｏデバイスへ転送し、ディスクリプタに転送データが含まれているとき、ディスクリプタバッファ２１２からそのデータを読み出してＩ／Ｏデバイスへ転送する。【選択図】図２
2005275538.tif 000002
【特許請求の範囲】
【請求項１】
処理装置から与えられた命令に従ってメモリから転送先装置へのデータ転送を制御するダイレクトメモリアクセス制御装置であって、
前記処理装置から与えられたデータ転送命令を格納する命令格納手段と、
前記命令格納手段に格納されたデータ転送命令が前記転送先装置へ転送される転送データを含んでいるか否かをチェックし、該データ転送命令が該転送データを含んでいないとき、前記メモリから該転送データを読み出して該転送先装置へ転送し、該データ転送命令が該転送データを含んでいるとき、該命令格納手段から該転送データを読み出して該転送先装置へ転送する転送制御手段と
を備えることを特徴とするダイレクトメモリアクセス制御装置。
【請求項２】
処理装置から与えられた命令に従ってメモリから転送先装置へのデータ転送を制御するダイレクトメモリアクセス制御装置であって、
前記処理装置から与えられたデータ転送命令を格納する命令格納手段と、
前記命令格納手段に格納されたデータ転送命令が前記転送先装置へ転送される転送データを含んでいるとき、該命令格納手段から該転送データを読み出して該転送先装置へ転送する転送制御手段と
を備えることを特徴とするダイレクトメモリアクセス制御装置。
【請求項３】
転送先装置へのデータ転送を制御するデータ転送制御装置であって、
メモリと、
前記転送先装置へのデータ転送を指示するデータ転送命令を発行する処理装置と、
前記データ転送命令を格納する命令格納手段と、
前記命令格納手段に格納されたデータ転送命令が前記転送先装置へ転送される転送データを含んでいるか否かをチェックし、該データ転送命令が該転送データを含んでいないとき、前記メモリから該転送データを読み出して該転送先装置へ転送し、該データ転送命令が該転送データを含んでいるとき、該命令格納手段から該転送データを読み出して該転送先装置へ転送する転送制御手段と
を備えることを特徴とするデータ転送制御装置。
【請求項４】
メモリから転送先装置へのデータ転送が発生したとき、該データ転送を制御するダイレクトメモリアクセス制御装置に対して命令を与える処理装置のためのプログラムであって、
前記転送先装置へ転送される転送データのデータ長が所定値より長いか否かをチェックし、
前記データ長が前記所定値より長ければ、前記メモリ上に前記転送データを格納し、データ転送命令が該転送データを含んでいないことを示すフラグ情報と、該転送データのメモリアドレスとを該データ転送命令に設定し、該データ長が該所定値以下であれば、該転送データと、データ転送命令が該転送データを含んでいることを示すフラグ情報とを該データ転送命令に設定し、
前記ダイレクトメモリアクセス制御装置を起動して、前記データ転送命令により指定されたデータ転送を行わせる
処理を前記処理装置に実行させることを特徴とするプログラム。
【請求項５】
処理装置から与えられた命令に従ってメモリから転送先装置へのデータ転送を制御するダイレクトメモリアクセス制御方法であって、
前記処理装置から与えられたデータ転送命令を命令格納手段に格納し、
前記命令格納手段に格納されたデータ転送命令が前記転送先装置へ転送される転送データを含んでいるか否かをチェックし、
前記データ転送命令が前記転送データを含んでいないとき、前記メモリから該転送データを読み出して前記転送先装置へ転送し、該データ転送命令が該転送データを含んでいるとき、前記命令格納手段から該転送データを読み出して該転送先装置へ転送する
ことを特徴とするダイレクトメモリアクセス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高速データ転送を必要とするデータ処理装置におけるダイレクトメモリアクセス（Direct Memory Access，ＤＭＡ）を制御する装置および方法に関する。
【背景技術】
【０００２】
コンピュータシステムにおいて、メモリとメモリの間、またはメモリと入出力デバイス（Ｉ／Ｏデバイス）の間のデータ転送を効率よく行うことは、コンピュータシステムの性能を高めるために重要な課題であるが、この課題を解決するための方法としてＤＭＡが知られている（例えば、特許文献１参照）。
【０００３】
Ｉ／Ｏデバイスは、メモリに対してデータを転送したり、メモリから転送されたデータを受け取る装置であり、記憶装置やインタフェース装置がこれに含まれる。また、ＤＭＡは、中央処理装置（ＣＰＵ）がコンピュータシステム内のデータ転送を制御する代わりに、ＤＭＡ制御回路と呼ばれる専用のハードウェアがＣＰＵからの命令に基づいてデータ転送を制御する仕組みである。
【０００４】
ＣＰＵからＤＭＡ制御回路に発行される命令はディスクリプタと呼ばれ、ＣＰＵがディスクリプタをメモリ上に用意した後に、ＤＭＡ制御回路がメモリからディスクリプタを自律的に読み出して参照する方法が広く用いられている。
【０００５】
図９は、ＤＭＡ制御回路が装備された従来のデータ処理装置の構成例を示している。図９のデータ処理装置は、データ転送制御装置１０１およびＩ／Ｏデバイス１０２ａ、１０２ｂからなり、データ転送制御装置１０１はＣＰＵ１１１、メモリ１１２、メモリコントローラ１１３、およびＩ／Ｏコントローラ１１４を備える。
【０００６】
メモリコントローラ１１３には、ＣＰＵ１１１、メモリ１１２、およびＩ／Ｏコントローラ１１４が接続され、Ｉ／Ｏコントローラ１１４には、Ｉ／Ｏデバイス１０２ａおよび１０２ｂが接続されている。Ｉ／Ｏコントローラ１１４に接続されるＩ／Ｏデバイスの数は２つに限られず、一般には、１つまたは複数のＩ／Ｏデバイスが接続される。
【０００７】
メモリコントローラ１１３は、ＣＰＵ１１１とメモリ１１２の間、およびＩ／Ｏコントローラ１１４とメモリ１１２の間のデータ転送を制御する。Ｉ／Ｏコントローラ１１４に含まれるＤＭＡ制御回路１２１は、メモリコントローラ１１３を通じてメモリ１１２とＩ／Ｏデバイス１０２の間のデータ転送を行う。また、ＣＰＵ１１１とＩ／Ｏコントローラ１１４は、メモリコントローラ１１３を通じて制御情報をやり取りする。
【０００８】
図１０は、図９のＩ／Ｏコントローラ１１４の構成図である。図１０のＩ／Ｏコントローラ１１４は、ＤＭＡ制御回路１２１、メモリインタフェース（Ｉ／Ｆ）１２２、およびＩ／Ｏデバイスインタフェース１２３を備え、ＤＭＡ制御回路１２１は、ディスクリプタフェッチ回路１３１、ディスクリプタバッファ１３２、ステートマシン回路１３３、データ転送制御回路１３４、およびレジスタ１３５から構成される。
【０００９】
ＣＰＵ１１１は、メモリインタフェース１２２を通じてレジスタ１３５に起動指示を書き込むことで、ディスクリプタフェッチ回路１３１およびステートマシン回路１３３を起動する。
【００１０】
ディスクリプタフェッチ回路１３１は、メモリインタフェース１２２を通じてディスクリプタをメモリ１１２から読み出し、ディスクリプタバッファ１３２は、ディスクリプタフェッチ回路１３１からディスクリプタを受け取って保持する。ステートマシン回路１３３は、ディスクリプタを解析して、データ転送制御回路１３４にデータ転送を指示し、データ転送制御回路１３４は、ステートマシン回路１３３からの指示を受けて、メモリインタフェース１２２とＩ／Ｏデバイスインタフェース１２３を通じてデータ転送を行う。
【００１１】
図１１は、ディスクリプタの一例を示している。図１１のディスクリプタは、８バイト＊３ワード（２４バイト）の長さを持ち、コマンド、フラグ、転送バイト長、メモリアドレス、およびＩ／Ｏアドレスから構成される。
【００１２】
コマンドは、データ転送の方向を指示するビットであり、例えば、論理‘０’であればリード転送、つまりＩ／Ｏデバイス１０２からメモリ１１２へのデータ転送を行うことを示し、論理‘１’であればライト転送、つまりメモリ１１２からＩ／Ｏデバイス１０２へのデータ転送を行うことを示す。
【００１３】
フラグは、ＤＭＡの様々な動作を制御するためのビットであり、例えば、ＤＭＡ制御回路１２１に対して、データ転送の終了後に割り込みを発生させるように指示するためのビットである。転送バイト長は、ＤＭＡ制御回路１２１に対して、メモリ１１２とＩ／Ｏデバイス１０２の間で転送されるデータの長さ（バイト数）を指示するためのフィールドである。
【００１４】
メモリアドレスは、リード時にはＩ／Ｏデバイス１０２から読み出したデータを格納するメモリ１１２上のアドレスを示し、ライト時にはＩ／Ｏデバイス１０２に対して転送するデータが格納されているメモリ１１２上のアドレスを示す。Ｉ／Ｏアドレスは、リード時にはデータを読み出すＩ／Ｏデバイス１０２の番号とデバイス内のアドレスを示し、ライト時にはデータを書き込むＩ／Ｏデバイス１０２の番号とデバイス内のアドレスを示す。
【００１５】
次に、図１２の動作シーケンスを参照しながら、ＤＭＡライトおよびリードのそれぞれの動作について説明する。
＜ライト動作＞
（１）ＣＰＵ１１１は、メモリ１１２上のディスクリプタで指定するアドレスに転送データを用意する。
（２）ＣＰＵ１１１は、メモリ１１２上の予め決められたアドレスに図１１のフォーマットによるライト転送のためのディスクリプタを用意する。
（３）ＣＰＵ１１１は、ＤＭＡ制御回路１２１内のレジスタ１３５に起動指示を書き込むことでＤＭＡ制御回路１２１を起動する。
（４）ＤＭＡ制御回路１２１は、ＣＰＵ１１１から起動されると、メモリ１１２上の予め決められたアドレスからディスクリプタを読み出す。
（５）ＤＭＡ制御回路１２１は、読み出したディスクリプタを解析し、ライト指示であれば、ディスクリプタ内に指定されたメモリアドレスから、指定された転送バイト長のデータを読み出す。
（６）続いて、ＤＭＡ制御回路１２１は、メモリ１１２から読み出したデータを、ディスクリプタ内に指定されたＩ／Ｏアドレスに基づいてＩ／Ｏデバイス１０２へ転送する。
（７）ＤＭＡ制御回路１２１は、データ転送が終了すると、ディスクリプタ内のフラグの指示に従ってＣＰＵ１１１に割り込み信号を送信して、データ転送終了を通知する。
＜リード動作＞
（１１）ＣＰＵ１１１は、メモリ１１２上のディスクリプタで指定するアドレスに転送データのための領域を確保する。
（１２）ＣＰＵ１１１は、メモリ１１２上の予め決められたアドレスに図１１のフォーマットによるリード転送のためのディスクリプタを用意する。
（１３）ＣＰＵ１１１は、ＤＭＡ制御回路１２１内のレジスタ１３５に起動指示を書き込むことでＤＭＡ制御回路１２１を起動する。
（１４）ＤＭＡ制御回路１２１は、ＣＰＵ１１１から起動されると、予め決められたアドレスからディスクリプタを読み出す。
（１５）ＤＭＡ制御回路１２１は、読み出したディスクリプタを解析し、リード指示であれば、ディスクリプタ内に指定されたＩ／Ｏアドレスの指すＩ／Ｏデバイス１０２から、指定された転送バイト長のデータを読み出す。
（１６）続いて、ＤＭＡ制御回路１２１は、Ｉ／Ｏデバイス１０２から読み出したデータを、ディスクリプタ内に指定されたメモリアドレスへ書き込む。
（１７）ＤＭＡ制御回路１２１は、データ転送が終了すると、ディスクリプタ内のフラグの指示に従ってＣＰＵ１１１に割り込み信号を送信して、データ転送終了を通知する。
【００１６】
上述した動作シーケンスから分かるように、ＣＰＵ１１１は、ディスクリプタを用意してＤＭＡ制御回路１２１を起動すると、割り込みによって通知が行われるまでのデータ転送が行われている間は、別の処理を行うことができる。これにより、ＣＰＵ１１１はデータ転送という比較的単純な処理から解放されて、より複雑な処理に時間を割くことができるので、システムの性能が向上する。
【特許文献１】特開平０５−２１６８０８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１７】
上述した従来のＤＭＡ制御方法には、次のような問題がある。
ＤＭＡ制御回路は、データ転送をＣＰＵに代わって行うことでＣＰＵの負荷を下げ、システムの処理性能を高めるのに有効である。しかしながら、従来のＤＭＡ制御方法では、ＣＰＵがメモリ上に用意したディスクリプタをＤＭＡ制御回路が読み出した後にデータ転送が行われるため、ＤＭＡ制御回路からメモリへのアクセス・レイテンシ（ディスクリプタを読み出すのに要する時間）が大きい場合、十分な性能が得られない場合がある。この問題は、特に短いデータを転送する場合に顕著に現れる。
【００１８】
短いデータを転送する場合、ＤＭＡ制御回路とＩ／Ｏデバイスの間の転送時間は、長いデータを転送する場合に比べて短くて済む。しかしながら、それ以外の制御動作に要する時間は、長いデータを転送する場合とあまり変わらない。したがって、全体の動作時間に対するデータ転送以外の制御動作に要する時間の比率が、長いデータを転送する場合に比べて高くなり、データ転送の効率が低下する。
【００１９】
本発明の課題は、データ処理装置において、ＤＭＡによるデータ転送の効率を向上させる装置および方法を提供することである。
【課題を解決するための手段】
【００２０】
図１は、本発明のＤＭＡ制御装置の原理図である。図１のＤＭＡ制御装置１５３は、命令格納手段１６１および転送制御手段１６２を備え、ＣＰＵ１５１から与えられた命令に従ってメモリ１５２から転送先装置１５４へのデータ転送を制御する。
【００２１】
命令格納手段１６１は、ＣＰＵ１５１から与えられたデータ転送命令を格納する。転送制御手段１６２は、命令格納手段１６１に格納されたデータ転送命令が転送先装置１５４へ転送される転送データを含んでいるか否かをチェックし、データ転送命令が転送データを含んでいないとき、メモリ１５２から転送データを読み出して転送先装置１５４へ転送し、データ転送命令が転送データを含んでいるとき、命令格納手段１６１から転送データを読み出して転送先装置１５４へ転送する。
【００２２】
ＣＰＵ１５１からＤＭＡ制御装置１５３に対してデータ転送命令が発行されると、ＤＭＡ制御装置１５３は、そのデータ転送命令を取得して命令格納手段１６１に格納し、転送制御手段１６２は、格納されたデータ転送命令を解析する。転送制御手段１６２は、データ転送命令に転送データが含まれていないとき、メモリ１５２から転送データを読み出して転送先装置１５４へ転送し、データ転送命令に転送データが含まれているとき、その転送データをそのまま転送先装置１５４へ転送する。
【００２３】
このようなＤＭＡ制御装置によれば、データ転送命令に転送データが含まれている場合は、一旦、データ転送命令を取得すれば、その後メモリリードを行うことなく転送先装置１５４へのライト転送を行うことができる。したがって、ライト転送に要する時間が短縮される。
【００２４】
転送先装置１５４は、例えば、上述した図９のＩ／Ｏデバイス１０２に対応し、ＤＭＡ制御装置１５３は、例えば、後述する図２のＤＭＡ制御回路２０１に対応する。また、命令格納手段１６１は、例えば、図２のディスクリプタバッファ２１２に対応し、転送制御手段１６２は、例えば、図２のステートマシン回路２１３およびデータ転送制御回路２１４に対応し、データ転送命令は、例えば、後述する図３のディスクリプタに対応する。
【００２５】
また、ＣＰＵ１５１は、メモリ１５２から転送先装置１５４へのデータ転送が発生したとき、そのデータ転送を制御するＤＭＡ制御装置１５３に対して命令を与える。
ＣＰＵ１５１は、転送先装置１５４へ転送される転送データのデータ長が所定値より長いか否かをチェックし、データ長が所定値より長ければ、メモリ１５２に転送データを格納し、データ転送命令が転送データを含んでいないことを示すフラグ情報と、転送データのメモリアドレスとをデータ転送命令に設定し、データ長が所定値以下であれば、転送データと、データ転送命令が転送データを含んでいることを示すフラグ情報とをデータ転送命令に設定する。そして、ＤＭＡ制御装置１５３を起動して、データ転送命令により指定されたデータ転送を行わせる。
【００２６】
ＣＰＵ１５１がこのような処理を実行することで、所定値以下のデータ長の転送データがデータ転送命令に設定されて、ＤＭＡ制御装置１５３に与えられる。したがって、比較的短いデータのライト転送に要する時間が短縮される。また、所定値より長い転送データはデータ転送命令に設定する必要がないので、データ転送命令のサイズの増分を上記所定値程度に抑えることができる。
【００２７】
ＣＰＵ１５１により設定されるフラグ情報は、例えば、図３のディスクリプタのフラグ内に含まれるライト・イミディエート・ビットに対応する。
【発明の効果】
【００２８】
本発明によれば、データ処理装置において、ＤＭＡによるメモリから転送先装置へのデータ転送に要する時間を短縮することが可能になる。
【発明を実施するための最良の形態】
【００２９】
以下、図面を参照しながら、本発明を実施するための最良の形態を詳細に説明する。
本実施形態のデータ処理装置の全体構成については、図９のデータ処理装置と同様であるが、ＤＭＡ制御回路に対する命令の中で、データが格納されたアドレスを指定するか、データ自身を指定するかを選択できるようにすることで、ライト転送の効率化を図る。そのために、本実施形態のデータ処理装置は以下の特徴を備える。
・ディスクリプタのフラグフィールドにライト・イミディエートを示すビット（ライト・イミディエート・ビット）を設ける。
・上記ライト・イミディエート・ビットに従って、ＤＭＡ制御回路は指定されたメモリアドレスからデータを読み出してライト転送するか、ディスクリプタ内のデータをライト転送するかを選択する。
【００３０】
ＤＭＡ制御回路は、ディスクリプタのフラグフィールドのライト・イミディエート・ビットが論理‘０’であれば、従来と同様にディスクリプタ内に指定されたメモリアドレスからデータを読み出して、Ｉ／Ｏデバイスへ転送するが、ライト・イミディエート・ビットが論理‘１’であれば、ディスクリプタ内のライトデータフィールドに設定されたデータをＩ／Ｏデバイスへ転送する。
【００３１】
例えば、所定値以内の長さの短いデータをライト転送する場合、ＣＰＵはライト・イミディエート・ビットを‘１’に設定し、ディスクリプタ内にライトデータを設定する。これにより、ＤＭＡ制御回路は、ディスクリプタ内に設定されたライトデータを自律的に転送する。データ長の所定値としては、例えば、８バイト、１６バイト、６４バイト等の値が用いられる。
【００３２】
一方、所定値より長いデータをライト転送する場合、ＣＰＵはライト・イミディエート・ビットを‘０’に設定し、メモリにライトデータを格納する。これにより、ＤＭＡ制御回路は、メモリに格納されたライトデータを自律的に転送する。
【００３３】
従来のＤＭＡ制御回路では、例えば、８バイトの短いデータをライト転送する場合、まずメモリからディスクリプタを読み出して解析した後、指定されたアドレスからデータを読み出す必要があるため、メモリリードを２回続けて行っていた。また、ディスクリプタをリードしないとデータが格納されているアドレスが分からないため、２回のメモリリードは同時に行うことはできず、たった８バイトのデータを転送するために必要以上に長い時間を要する結果になっていた。
【００３４】
これに対して、本実施形態のＤＭＡ制御回路では、短いデータの場合は予めディスクリプタ領域に用意されるため、１回のメモリリードでデータ転送を開始することができ、ライト転送に要する時間を短縮する効果が得られる。
【００３５】
図２は、本実施形態のＩ／Ｏコントローラの構成図である。図２のＩ／Ｏコントローラは、ＤＭＡ制御回路２０１、メモリインタフェース２０２、およびＩ／Ｏデバイスインタフェース２０３を備え、ＤＭＡ制御回路２０１は、ディスクリプタフェッチ回路２１１、ディスクリプタバッファ２２２、ステートマシン回路２１３、データ転送制御回路２１４、およびレジスタ２１５から構成される。
【００３６】
図１０の場合と同様に、ＣＰＵは、メモリインタフェース２０２を通じてレジスタ２１５に起動指示を書き込むことで、ディスクリプタフェッチ回路２１１およびステートマシン回路２１３を起動する。
【００３７】
ディスクリプタフェッチ回路２１１は、メモリインタフェース２０２を通じてディスクリプタをメモリから読み出し、ディスクリプタバッファ２１２に格納する。ステートマシン回路２１３は、ディスクリプタバッファ２１２に格納されたディスクリプタを解析して、データ転送制御回路２１４にデータ転送を指示し、データ転送制御回路２１４は、ステートマシン回路２１３からの指示を受けて、メモリインタフェース２０２とＩ／Ｏデバイスインタフェース２０３を通じてデータ転送を行う。
【００３８】
データ転送制御回路２１４は、メモリ転送制御回路２２１、データバッファ２２２、およびＩ／Ｏデバイス転送制御回路２２３を備える。メモリ転送制御回路２２１は、ステートマシン回路２１３から起動され、メモリインタフェース２０２を通じてメモリとデータバッファ２２２の間でデータ転送を行い、Ｉ／Ｏデバイス転送制御回路２２３は、ステートマシン回路２１３から起動され、Ｉ／Ｏデバイスインタフェース２０３を通じてデータバッファ２２２とＩ／Ｏデバイスの間でデータ転送を行う。
【００３９】
このとき、ライト・イミディエート・ビットが‘１’であれば、Ｉ／Ｏデバイス転送制御回路２２３は、ディスクリプタバッファ２１２に格納されたディスクリプタ内に設定されたデータを読み出して、Ｉ／Ｏデバイスへ転送する。
【００４０】
図３は、ＣＰＵが発行するディスクリプタの一例を示している。図３のディスクリプタは、８バイト＊４ワード（３２バイト）の長さを持ち、コマンド、フラグ、転送バイト長、メモリアドレス、Ｉ／Ｏアドレス、およびイミディエート・ライトデータから構成される。この例では、フラグにライト・イミディエート・ビットが含まれており、イミディエート・ライトデータのデータ長は８バイトである。
【００４１】
ライトデータが８バイトより長い場合、ＣＰＵは、ライト・イミディエート・ビットを‘０’に設定し、ディスクリプタ内のメモリアドレスフィールドにライトデータが格納されているメモリアドレスを設定する。また、ライトデータが８バイト以下の場合は、ライト・イミディエート・ビットを‘１’に設定し、ディスクリプタ内のイミディエート・ライトデータフィールドにライトデータを設定する。
【００４２】
次に、図４の動作シーケンスを参照しながら、ライト・イミディエート・ビットが‘０’および‘１’の場合のそれぞれのＤＭＡライト動作について説明する。
＜ライトデータが８バイトより長い場合：ライト・イミディエート・ビットが‘０’の場合＞
（２１）ＣＰＵは、メモリ上のディスクリプタで指定するアドレスに転送データを用意する。
（２２）ＣＰＵは、メモリ上の予め決められたアドレスに図３のフォーマットによるライト転送のためのディスクリプタを用意する。このとき、ディスクリプタ内のライト・イミディエート・ビットは‘０’に設定する。
（２３）ＣＰＵは、ＤＭＡ制御回路２０１内のレジスタ２１５に起動指示を書き込むことでＤＭＡ制御回路２０１を起動する。
（２４）ＤＭＡ制御回路２０１は、ＣＰＵから起動されると、メモリ上の予め決められたアドレスからディスクリプタを読み出す。
（２５）ＤＭＡ制御回路２０１は、読み出したディスクリプタを解析し、ライト指示でかつライト・イミディエート・ビットが‘０’であれば、ディスクリプタ内に指定されたメモリアドレスから、指定された転送バイト長のデータを読み出し、データバッファ２２２に格納する。
（２６）続いて、ＤＭＡ制御回路２０１は、データバッファ２２２に格納したデータを、ディスクリプタ内に指定されたＩ／Ｏアドレスに基づいてＩ／Ｏデバイスへ転送する。
（２７）ＤＭＡ制御回路２０１は、データ転送が終了すると、ディスクリプタ内のフラグの指示に従ってＣＰＵに割り込み信号を送信して、データ転送終了を通知する。
＜ライトデータが８バイト以下の場合：ライト・イミディエート・ビットが‘１’の場合＞
（３１）ＣＰＵは、メモリ上の予め決められたアドレスに図３のフォーマットによるライト転送のためのディスクリプタを用意し、そのイミディエート・ライトデータフィールドに転送データを用意する。
（３２）ＣＰＵは、ディスクリプタの他のフィールドの情報を用意する。このとき、ディスクリプタ内のライト・イミディエート・ビットは‘１’に設定する。
（３３）ＣＰＵは、ＤＭＡ制御回路２０１内のレジスタ２１５に起動指示を書き込むことでＤＭＡ制御回路２０１を起動する。
（３４）ＤＭＡ制御回路２０１は、ＣＰＵから起動されると、メモリ上の予め決められたアドレスからディスクリプタを読み出し、ディスクリプタバッファ２１２に格納する。
（３５）ＤＭＡ制御回路２０１は、ディスクリプタバッファ２１２内のディスクリプタを解析し、ライト指示でかつライト・イミディエート・ビットが‘１’であれば、指定された転送バイト長のデータをそのディスクリプタ内のイミディエート・ライトデータフィールドから読み出し、ディスクリプタ内に指定されたＩ／Ｏアドレスに基づいてＩ／Ｏデバイスへ転送する。
（３６）ＤＭＡ制御回路２０１は、データ転送が終了すると、ディスクリプタ内のフラグの指示に従ってＣＰＵに割り込み信号を送信して、データ転送終了を通知する。
【００４３】
図５は、図３のステートマシン回路２１３が行う制御動作の一例を示すフローチャートである。この制御動作では、データ転送制御回路２１４内のメモリ転送制御回路２２１およびＩ／Ｏデバイス転送制御回路２２３が逐次起動される。
【００４４】
ステートマシン回路２１３は、待機状態（ステップ５０１）からＣＰＵにより起動されると、まず、ディスクリプタバッファ２１２からディスクリプタを読み出し（ステップ５０２）、それを解析して、コマンドがリード転送とライト転送のいずれを示しているか、ライト転送の場合はフラグのライト・イミディエート・ビットが‘０’か‘１’かをチェックする（ステップ５０３）。
【００４５】
コマンドがリード転送を示していれば、ステートマシン回路２１３は、Ｉ／Ｏデバイス転送制御回路２２３を起動してＩ／Ｏデータ・リード転送を指示する（ステップ５０４）。これを受けて、Ｉ／Ｏデバイス転送制御回路２２３は、ディスクリプタ内に指定されたＩ／Ｏアドレスから、指定された転送バイト長のデータを読み出し、データバッファ２２２に格納する。
【００４６】
次に、ステートマシン回路２１３は、メモリ転送制御回路２２１を起動してメモリデータ・ライト転送を指示する（ステップ５０５）。これを受けて、メモリ転送制御回路２２１は、データバッファ２２２からデータを読み出し、ディスクリプタ内に指定されたメモリアドレスに転送する。
【００４７】
その後、ステートマシン回路２１３は、ＣＰＵに対して割り込み信号によりデータ転送終了を通知し（ステップ５０６）、待機状態に戻る。
一方、コマンドがライト転送を示しており、かつ、ライト・イミディエート・ビットが‘０’であれば、ステートマシン回路２１３は、メモリ転送制御回路２２１を起動してメモリデータ・リード転送を指示する（ステップ５０７）。これを受けて、メモリ転送制御回路２２１は、ディスクリプタ内に指定されたメモリアドレスから、指定された転送バイト長のデータを読み出し、データバッファ２２２に格納する。
【００４８】
次に、ステートマシン回路２１３は、Ｉ／Ｏデバイス転送制御回路２２３を起動してＩ／Ｏデータ・ライト転送を指示する（ステップ５０８）。これを受けて、Ｉ／Ｏデバイス転送制御回路２２３は、データバッファ２２２に格納されたデータを読み出し、ディスクリプタ内に指定されたＩ／Ｏアドレスに転送する。その後、ステートマシン回路２１３は、ステップ５０６の動作を行う。
【００４９】
また、コマンドがライト転送を示しており、かつ、ライト・イミディエート・ビットが‘１’であれば、ステートマシン回路２１３は、ステップ５０８以降の動作を行う。このとき、Ｉ／Ｏデバイス転送制御回路２２３に対して、ディスクリプタバッファ２１２からデータを読み出すように指示する（ステップ５０８）。これを受けて、Ｉ／Ｏデバイス転送制御回路２２３は、データバッファ２２２からではなく、ディスクリプタバッファ２１２に格納されたディスクリプタ内のイミディエート・ライトデータフィールドからデータを読み出し、指定されたＩ／Ｏアドレスに転送する。
【００５０】
図６は、ステートマシン回路２１３が行う別の制御動作を示すフローチャートである。この制御動作では、データ転送制御回路２１４内のメモリ転送制御回路２２１およびＩ／Ｏデバイス転送制御回路２２３は同時に起動される。
【００５１】
メモリ転送制御回路２２１およびＩ／Ｏデバイス転送制御回路２２３は、互いのポインタ情報を受け渡ししながら並列に動作することで、データバッファ２２２をＦＩＦＯ（First-In First-Out）回路として利用しながらデータ転送を進める。ポインタ情報としては、データバッファ２２２の書き込み位置を指すライトポインタと、読み出し位置を指すリードポインタの情報が用いられる。
【００５２】
このような制御は、特に、転送バイト長がデータバッファ２２２のサイズよりも長い場合、または転送バイト長がメモリインタフェース２０２およびＩ／Ｏデバイスインタフェース２０３における典型的なバースト転送長に比べてずっと長い場合に効果的である。
【００５３】
図６のステップ６０１、６０２、６０３、および６０７の動作は、図５の５０１、５０２、５０３、および５０６の動作と同様である。
ステップ６０３において、コマンドがリード転送を示していれば、ステートマシン回路２１３は、Ｉ／Ｏデバイス転送制御回路２２３を起動してＩ／Ｏデータ・リード転送を指示する（ステップ６０４）とともに、メモリ転送制御回路２２１を起動してメモリデータ・ライト転送を指示する（ステップ６０５）。そして、メモリ転送制御回路２２１からのメモリデータ転送終了通知およびＩ／Ｏデバイス転送制御回路２２３からのＩ／Ｏデータ転送終了通知を待つ（ステップ６０６）。
【００５４】
Ｉ／Ｏデバイス転送制御回路２２３は、ディスクリプタ内に指定されたＩ／Ｏアドレスから、指定された転送バイト長のデータを順次読み出し、データバッファ２２２に書き込んでいく。メモリ転送制御回路２２１は、Ｉ／Ｏデバイス転送制御回路２２３の書き込み動作と並列に、データバッファ２２２から書き込まれたデータを順次読み出していき、ディスクリプタ内に指定されたメモリアドレスに転送する。これにより、データバッファ２２２に書き込まれた順にデータが読み出されてメモリに転送され、読み出されたデータの後に次のデータが順次書き込まれていく。
【００５５】
こうして、指定された転送バイト長のデータがすべてメモリに転送されると、メモリ転送制御回路２２１およびＩ／Ｏデバイス転送制御回路２２３は、それぞれメモリデータ転送終了およびＩ／Ｏデータ転送終了をステートマシン回路２１３に通知する。これを受けて、ステートマシン回路２１３は、ＣＰＵに対して割り込み信号によりデータ転送終了を通知する（ステップ６０７）。
【００５６】
一方、コマンドがライト転送を示しており、かつ、ライト・イミディエート・ビットが‘０’であれば、ステートマシン回路２１３は、メモリ転送制御回路２２１を起動してメモリデータ・リード転送を指示する（ステップ６０８）とともに、Ｉ／Ｏデバイス転送制御回路２２３を起動してＩ／Ｏデータ・ライト転送を指示する（ステップ６０９）。そして、ステップ６０６以降の動作を行う。
【００５７】
メモリ転送制御回路２２１は、ディスクリプタ内に指定されたメモリアドレスから、指定された転送バイト長のデータを順次読み出し、データバッファ２２２に書き込んでいく。Ｉ／Ｏデバイス転送制御回路２２３は、メモリ転送制御回路２２１の書き込み動作と並列に、データバッファ２２２から書き込まれたデータを順次読み出していき、ディスクリプタ内に指定されたＩ／Ｏアドレスに転送する。これにより、データバッファ２２２に書き込まれた順にデータが読み出されてＩ／Ｏデバイスに転送され、読み出されたデータの後に次のデータが順次書き込まれていく。
【００５８】
こうして、指定された転送バイト長のデータがすべてＩ／Ｏデバイスに転送されると、メモリ転送制御回路２２１およびＩ／Ｏデバイス転送制御回路２２３は、それぞれメモリデータ転送終了およびＩ／Ｏデータ転送終了をステートマシン回路２１３に通知し、ステートマシン回路２１３は、ステップ６０７の動作を行う。
【００５９】
また、コマンドがライト転送を示しており、かつ、ライト・イミディエート・ビットが‘１’であれば、ステートマシン回路２１３は、ステップ６０９以降の動作を行う。このとき、Ｉ／Ｏデバイス転送制御回路２２３に対して、ディスクリプタバッファ２１２からデータを読み出すように指示する（ステップ６０９）。これを受けて、Ｉ／Ｏデバイス転送制御回路２２３は、データバッファ２２２からではなく、ディスクリプタバッファ２１２に格納されたディスクリプタ内のイミディエート・ライトデータフィールドからデータを読み出し、指定されたＩ／Ｏアドレスに転送する。
【００６０】
この場合、指定された転送バイト長のデータ転送が終了すると、Ｉ／Ｏデバイス転送制御回路２２３はＩ／Ｏデータ転送終了をステートマシン回路２１３に通知し、ステートマシン回路２１３は、ステップ６０７の動作を行う。
【００６１】
ところで、データ処理装置のメモリには、転送データおよびディスクリプタ以外に、ＣＰＵにより実行されるプログラムも格納される。ＣＰＵは、メモリを利用してプログラムを実行することによりデータ処理を行う。
【００６２】
図７は、データ転送が発生したときにＣＰＵが行う処理のフローチャートである。ＣＰＵは、まず、発生したデータ転送がリード転送かライト転送かをチェックする（ステップ７０１）。
【００６３】
発生したデータ転送がリード転送であれば、メモリ上に転送データのための領域を確保し（ステップ７０２）、メモリ上の予め決められたアドレスのディスクリプタ領域のコマンドを‘０’に設定する（ステップ７０３）。そして、ディスクリプタ領域のフラグを設定し（ステップ７０４）、転送バイト長に転送データのバイト数を設定し（ステップ７０５）、メモリアドレスに確保した領域のアドレスを設定し（ステップ７０６）、Ｉ／Ｏアドレスに転送元のＩ／Ｏデバイスの番号とデバイス内の転送元アドレスを設定する（ステップ７０７）。
【００６４】
一方、発生したデータ転送がライト転送であれば、転送データのデータ長が８バイトより長いか否かをチェックする（ステップ７０８）。
データ長が８バイトより長ければ、メモリ上に転送データを格納し（ステップ７０９）、メモリ上のディスクリプタ領域のコマンドを‘１’に設定する（ステップ７１０）。そして、ディスクリプタ領域のフラグのライト・イミディエート・ビットを‘０’に設定し（ステップ７１１）、転送バイト長に転送データのバイト数を設定し（ステップ７１２）、メモリアドレスに転送データのアドレスを設定し（ステップ７１３）、Ｉ／Ｏアドレスに転送先のＩ／Ｏデバイスの番号とデバイス内の転送先アドレスを設定する（ステップ７１４）。
【００６５】
また、ライトデータが８バイト以下であれば、メモリ上のディスクリプタ領域のイミディエート・ライトデータフィールドに転送データを格納し（ステップ７１５）、ディスクリプタ領域のコマンドを‘１’に設定する（ステップ７１６）。そして、ディスクリプタ領域のフラグのライト・イミディエート・ビットを‘１’に設定し（ステップ７１７）、転送バイト長に転送データのバイト数を設定し（ステップ７１８）、Ｉ／Ｏアドレスに転送先のＩ／Ｏデバイスの番号とデバイス内の転送先アドレスを設定する（ステップ７１９）。
【００６６】
ディスクリプタの設定が終わると、ＣＰＵは、ＤＭＡ制御回路２０１を起動し（ステップ７２０）、ＤＭＡ制御回路２０１から割り込み信号を受信するまで別の処理を行う（ステップ７２１）。
【００６７】
図８は、ＣＰＵが処理に用いるプログラムの提供方法を示している。情報処理装置（コンピュータ）等の外部装置８０２や可搬記録媒体８０３に格納されたプログラムは、データ処理装置８０１のメモリにロードされる。外部装置８０２は、そのプログラムを搬送する搬送信号を生成し、通信ネットワーク上の任意の伝送媒体を介してデータ処理装置８０１に送信する。可搬記録媒体８０３は、メモリカード、フレキシブルディスク、光ディスク、光磁気ディスク等の任意のコンピュータ読み取り可能な記録媒体である。データ処理装置８０１のＣＰＵは、そのプログラムを実行してデータ処理を行う。
【００６８】
データ処理装置内のデータ転送制御装置には、磁気ディスク装置、光ディスク装置、光磁気ディスク装置、テープ装置等の記憶装置およびインタフェース装置の他に、別のデータ制御装置もＩ／Ｏデバイスとして接続することができる。
【００６９】
また、データ処理装置の一例としては、ストレージ装置が挙げられる。ストレージ装置は、ホストコンピュータのような複数のアクセス装置により共用される記憶装置と、アクセス装置と記憶装置の間のデータ転送を制御するストレージ制御装置からなる。この場合、記憶装置がＩ／Ｏデバイスに対応し、ストレージ制御装置がデータ転送制御装置に対応する。本発明をストレージ装置に適用することで、ストレージ制御装置から記憶装置へのデータ転送が効率化される。
【００７０】
（付記１）  処理装置から与えられた命令に従ってメモリから転送先装置へのデータ転送を制御するダイレクトメモリアクセス制御装置であって、
前記処理装置から与えられたデータ転送命令を格納する命令格納手段と、
前記命令格納手段に格納されたデータ転送命令が前記転送先装置へ転送される転送データを含んでいるか否かをチェックし、該データ転送命令が該転送データを含んでいないとき、前記メモリから該転送データを読み出して該転送先装置へ転送し、該データ転送命令が該転送データを含んでいるとき、該命令格納手段から該転送データを読み出して該転送先装置へ転送する転送制御手段と
を備えることを特徴とするダイレクトメモリアクセス制御装置。
【００７１】
（付記２）  前記命令格納手段は、前記転送データのデータ長が所定値以下の場合、該転送データを含むデータ転送命令を格納し、該データ長が該所定値より長い場合、該転送データを含まないデータ転送命令を格納することを特徴とする付記１記載のダイレクトメモリアクセス制御装置。
【００７２】
（付記３）  前記命令格納手段は、前記転送データを含んでいるか否かを示すフラグ情報を有するデータ転送命令を格納し、前記転送制御手段は、該フラグ情報を解析して該データ転送命令が該転送データを含んでいるか否かをチェックすることを特徴とする付記１または２記載のダイレクトメモリアクセス制御装置。
【００７３】
（付記４）  処理装置から与えられた命令に従ってメモリから転送先装置へのデータ転送を制御するダイレクトメモリアクセス制御装置であって、
前記処理装置から与えられたデータ転送命令を格納する命令格納手段と、
前記命令格納手段に格納されたデータ転送命令が前記転送先装置へ転送される転送データを含んでいるとき、該命令格納手段から該転送データを読み出して該転送先装置へ転送する転送制御手段と
を備えることを特徴とするダイレクトメモリアクセス制御装置。
【００７４】
（付記５）  転送先装置へのデータ転送を制御するデータ転送制御装置であって、
メモリと、
前記転送先装置へのデータ転送を指示するデータ転送命令を発行する処理装置と、
前記データ転送命令を格納する命令格納手段と、
前記命令格納手段に格納されたデータ転送命令が前記転送先装置へ転送される転送データを含んでいるか否かをチェックし、該データ転送命令が該転送データを含んでいないとき、前記メモリから該転送データを読み出して該転送先装置へ転送し、該データ転送命令が該転送データを含んでいるとき、該命令格納手段から該転送データを読み出して該転送先装置へ転送する転送制御手段と
を備えることを特徴とするデータ転送制御装置。
【００７５】
（付記６）  メモリと、
転送先装置と、
前記転送先装置へのデータ転送を指示するデータ転送命令を発行する処理装置と、
前記データ転送命令を格納する命令格納手段と、
前記命令格納手段に格納されたデータ転送命令が前記転送先装置へ転送される転送データを含んでいるか否かをチェックし、該データ転送命令が該転送データを含んでいないとき、前記メモリから該転送データを読み出して該転送先装置へ転送し、該データ転送命令が該転送データを含んでいるとき、該命令格納手段から該転送データを読み出して該転送先装置へ転送する転送制御手段と
を備えることを特徴とするデータ処理装置。
【００７６】
（付記７）  メモリから転送先装置へのデータ転送が発生したとき、該データ転送を制御するダイレクトメモリアクセス制御装置に対して命令を与える処理装置のためのプログラムであって、
前記転送先装置へ転送される転送データのデータ長が所定値より長いか否かをチェックし、
前記データ長が前記所定値より長ければ、前記メモリ上に前記転送データを格納し、データ転送命令が該転送データを含んでいないことを示すフラグ情報と、該転送データのメモリアドレスとを該データ転送命令に設定し、該データ長が該所定値以下であれば、該転送データと、データ転送命令が該転送データを含んでいることを示すフラグ情報とを該データ転送命令に設定し、
前記ダイレクトメモリアクセス制御装置を起動して、前記データ転送命令により指定されたデータ転送を行わせる
処理を前記処理装置に実行させることを特徴とするプログラム。
【００７７】
（付記８）  メモリから転送先装置へのデータ転送が発生したとき、該データ転送を制御するダイレクトメモリアクセス制御装置に対して命令を与える処理装置のためのプログラムを記録した記録媒体であって、
前記プログラムは、
前記転送先装置へ転送される転送データのデータ長が所定値より長いか否かをチェックし、
前記データ長が前記所定値より長ければ、前記メモリ上に前記転送データを格納し、データ転送命令が該転送データを含んでいないことを示すフラグ情報と、該転送データのメモリアドレスとを該データ転送命令に設定し、該データ長が該所定値以下であれば、該転送データと、データ転送命令が該転送データを含んでいることを示すフラグ情報とを該データ転送命令に設定し、
前記ダイレクトメモリアクセス制御装置を起動して、前記データ転送命令により指定されたデータ転送を行わせる
処理を前記処理装置に実行させることを特徴とするコンピュータ読み取り可能な記録媒体。
【００７８】
（付記９）  メモリから転送先装置へのデータ転送が発生したとき、該データ転送を制御するダイレクトメモリアクセス制御装置に対して命令を与える処理装置のためのプログラムを搬送する搬送信号であって、
前記プログラムは、
前記転送先装置へ転送される転送データのデータ長が所定値より長いか否かをチェックし、
前記データ長が前記所定値より長ければ、前記メモリ上に前記転送データを格納し、データ転送命令が該転送データを含んでいないことを示すフラグ情報と、該転送データのメモリアドレスとを該データ転送命令に設定し、該データ長が該所定値以下であれば、該転送データと、データ転送命令が該転送データを含んでいることを示すフラグ情報とを該データ転送命令に設定し、
前記ダイレクトメモリアクセス制御装置を起動して、前記データ転送命令により指定されたデータ転送を行わせる
処理を前記処理装置に実行させることを特徴とする搬送信号。
【００７９】
（付記１０）  処理装置から与えられた命令に従ってメモリから転送先装置へのデータ転送を制御するダイレクトメモリアクセス制御方法であって、
前記処理装置から与えられたデータ転送命令を命令格納手段に格納し、
前記命令格納手段に格納されたデータ転送命令が前記転送先装置へ転送される転送データを含んでいるか否かをチェックし、
前記データ転送命令が前記転送データを含んでいないとき、前記メモリから該転送データを読み出して前記転送先装置へ転送し、該データ転送命令が該転送データを含んでいるとき、前記命令格納手段から該転送データを読み出して該転送先装置へ転送する
ことを特徴とするダイレクトメモリアクセス制御方法。
【図面の簡単な説明】
【００８０】
【図１】本発明のＤＭＡ制御装置の原理図である。
【図２】本発明のＩ／Ｏコントローラの構成図である。
【図３】本発明のディスクリプタを示す図である。
【図４】本発明の動作シーケンスを示す図である。
【図５】ステートマシン回路の第１の動作フローチャートである。
【図６】ステートマシン回路の第２の動作フローチャートである。
【図７】ＣＰＵの処理のフローチャートである。
【図８】プログラムの提供方法を示す図である。
【図９】従来のデータ処理装置の構成図である。
【図１０】従来のＩ／Ｏコントローラの構成図である。
【図１１】従来のディスクリプタを示す図である。
【図１２】従来の動作シーケンスを示す図である。
【符号の説明】
【００８１】
１０１  データ転送制御装置
１０２ａ、１０２ｂ  Ｉ／Ｏデバイス
１１１、１５１  ＣＰＵ
１１２、１５２  メモリ
１１３  メモリコントローラ
１１４  Ｉ／Ｏコントローラ
１２１、２０１  ＤＭＡ制御回路
１２２、２０２  メモリインタフェース
１２３、２０３  Ｉ／Ｏデバイスインタフェース
１３１、２１１  ディスクリプタフェッチ回路
１３２、２１２  ディスクリプタバッファ
１３３、２１３  ステートマシン回路
１３４、２１４  データ転送制御回路
１３５、２１５  レジスタ
１５３  ＤＭＡ制御装置
１５４  転送先装置
１６１  命令格納手段
１６２  転送制御手段
２２１  メモリ転送制御回路
２２２  データバッファ
２２３  Ｉ／Ｏデバイス転送制御回路
８０１  データ処理装置
８０２  外部装置
８０３  可搬記録媒体
【図１】
2005275538.tif 000003
【図２】
2005275538.tif 000004
【図３】
2005275538.tif 000005
【図４】
2005275538.tif 000006
【図５】
2005275538.tif 000007
【図６】
2005275538.tif 000008
【図７】
2005275538.tif 000009
【図８】
2005275538.tif 000010
【図９】
2005275538.tif 000011
【図１０】
2005275538.tif 000012
【図１１】
2005275538.tif 000013
【図１２】
2005275538.tif 000014