(57)【要約】  ＤＭＡエンジンの動作のための方法について記述する。第１のコピー元メモリ位置から第１のコピー先メモリ位置への第１のバイト数の転送のために、コピーが開始される。その後、第１のバイト数がコピーされる前に停止命令が発行される。コピーが中止された後、コピーされることになる残りのバイト数を含む第２のバイト数が確立される。転送が停止された後、第２のバイト数の量が識別される。その後、量情報が発生されて記憶される。どこに第２のバイト数が記憶されるかを示すために第２のコピー元メモリ位置が識別される。その後、第２のコピー元メモリ位置情報が発生されて記憶される。その後、どこに第２のバイト数が転送されることになるかを示すために第２のコピー先メモリ位置が識別される。その後、第２のコピー先メモリ位置情報が発生されて記憶される。【特許請求の範囲】
【請求項１】
ダイレクトメモリアクセスエンジンを動作させる方法において、
第１のコピー元メモリ位置から第１のコピー先メモリ位置への第１のバイト数のコピーを開始することと、
前記コピーを開始した後、前記第１のバイト数が前記第１のコピー元メモリ位置から前記第１のコピー先メモリ位置にコピーされる前に停止命令を発行することと、
前記停止命令の発行に応答して前記コピーを停止し、これによリ、前記第１のバイト数からコピーされることになる残りのバイト数を含む、第２のバイト数を確立することと、
前記第２のバイト数の量を識別することと、
前記第２のバイト数の量に関する量情報を発生させることと、
前記量情報を記憶することと、
前記第２のバイト数が記憶されている第２のコピー元メモリ位置を識別することと、
前記第２のバイト数が記憶される前記第２のコピー元メモリ位置を含む第２のコピー元メモリ位置情報を発生させることと、
前記第２のメモリコピー元位置情報を記憶することと、
前記第２のバイト数が転送されることになる第２のコピー先メモリ位置を識別することと、
前記第２のバイト数が記憶されることになる前記第２のコピー先メモリ位置を含む第２のコピー先メモリ位置情報を発生させることと、
前記第２のコピー先メモリ位置情報を記憶することとを含む方法。
【請求項２】
前記量情報を取り出すことと、
前記第２のコピー元メモリ位置情報を取り出すことと、
前記第２のコピー先メモリ位置情報を取り出すこととをさらに含み、
前記量情報と、前記第２のコピー元メモリ位置情報と、前記第２のコピー先メモリ位置情報は、前記ダイレクトメモリアクセスエンジン中の少なくとも１つのレジスタから読み取られる請求項１記載の方法。
【請求項３】
前記少なくとも１つのレジスタは、複数のレジスタを含む請求項２記載の方法。
【請求項４】
前記複数のレジスタは、前記第１のコピー元メモリ位置が保持される少なくとも１つのコピー元レジスタと、前記第１のコピー先メモリ位置が保持される少なくとも１つのコピー先レジスタとを含む請求項３記載の方法。
【請求項５】
前記複数のレジスタは、前記量情報が保持される量レジスタをさらに含む請求項４記載の方法。
【請求項６】
前記量情報と、前記第２のコピー元メモリ位置情報と、前記第２のコピー先メモリ位置情報とを使用して、前記第２のコピー元メモリ位置から第２のコピー先メモリ位置への前記第２のバイト数のコピーを開始することによって、前記停止された転送を再開することをさらに含む請求項２記載の方法。
【請求項７】
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することと、
保留中のすべての読み取りおよび書き込みをフラッシュすることと、
前記次の読み取りアドレスと前記次の書き込みアドレスとから、デクリメント値を決定することと、
前記デクリメント値分だけ前記次の読み取りアドレスをデクリメントし、これにより、デクリメントされた読み取りアドレスを発生させることとをさらに含み、
前記デクリメント値は、前記次の読み取りアドレスが次の書き込みアドレスに先行するバイト数を識別し、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記デクリメントされた読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも基づいて進む請求項６記載の方法。
【請求項８】
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することと、
前記次の読み取りアドレスが前記次の書き込みアドレスに先行するバイト数を追跡し、これにより、先行値を確立することと、
前記先行値を記憶することと、
前記先行値を取り出すことと、
前記先行値分だけ前記次の読み取りアドレスを調整し、これにより、調整された次の読み取りアドレスを発生させることとをさらに含み、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記調整された次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも基づいて進む請求項６記載の方法。
【請求項９】
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することとをさらに含み、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とを使用して進む請求項６記載の方法。
【請求項１０】
前記第１のコピー元メモリ位置の識別を保持することと、
前記第１のコピー先メモリ位置の識別を保持することと、
前記第１のバイト数のカウントを保持することと、
前記量情報を取り出すことと、
前記第１のコピー元メモリ位置の識別と、前記第１のバイト数のカウントと、前記量情報とに少なくとも基づいて、次の読み取りアドレスを確立することと、
前記第１のコピー先メモリ位置の識別と、前記第１のバイト数のカウントと、前記量情報とに少なくとも基づいて、次の書き込みアドレスを確立することとをさらに含み、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記第１のバイト数のカウントと、前記量情報とに少なくとも依存する請求項１記載の方法。
【請求項１１】
前記次の読み取りアドレスの表示を保持することと、
前記次の書き込みアドレスの表示を保持することと、
前記停止命令の発行後に、
前記第１のコピー元メモリ位置からの前記第１のバイト数の読み取りを中止することと、
前記読み取りを中止する前に読み取ったバイトから残った任意のバイトを前記第１のコピー先メモリ位置に書き込むことと、
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することとをさらに含み、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも依存する請求項１記載の方法。
【請求項１２】
複数のバッファに分散されている前記第１のコピー元メモリ位置から、前記第１のバイト数を取り出すことと、
前記第１のバイト数を単一のデータストリームに集めることをさらに含む請求項１記載の方法。
【請求項１３】
前記単一のデータストリームからの前記第１のバイト数を前記第１のコピー先メモリ位置に提供することをさらに含み、
前記第１のコピー先メモリ位置は、複数のバッファに分散される請求項１２記載の方法。
【請求項１４】
前記第１のコピー先メモリ位置は、複数のバッファに分散される請求項１記載の方法。
【発明の詳細な説明】
【関連出願の相互参照】
【０００１】
このＰＣＴ特許出願は、２００８年８月６日に出願された米国仮特許出願シリアル番号６１／０８６，６３１号に対する優先権に依存する。この内容は、ここで参照により組み込まれている。
【発明の分野】
【０００２】
本発明は、ダイレクトメモリアクセス（「ＤＭＡ」）エンジンに関する。さらに詳細には、本発明は、プロセッサのプロセス状態の一部であるアーキテクトされたＤＭＡに関する。
【関連技術の説明】
【０００３】
従来、ＤＭＡは、周辺デバイスとして扱われてきた。周辺デバイスであるので、ＤＭＡは、例えば、パーソナルコンピュータ、パーソナルデータアシスタント（ＰＤＡ）や、セル電話機や、プロセッサベースであって、一般的に１つ以上のＤＭＡを備えているであろう他のデバイスのような、プロセッサのアーキテクトされた状態の一部として考えられてきてもいなければ、扱われてきてもいない。
【０００４】
従来、ＤＭＡは、プロセッサのアーキテクトされた状態から除外されてきたので、マルチプログラム化された環境において、ＤＭＡエンジンは、プロセス状態の一部と考えられない。したがって、ＤＭＡは、モニタを通して、場合によってはオペレーティングシステム内でアクセスされなければならない。
【０００５】
アーキテクトされた状態に含まれている他のコンポーネントから独立的にＤＭＡにアクセスすることは、ＤＭＡにアクセスする待ち時間を増加させる。当業者により正しく認識されるように、ＤＭＡのようなデバイスに対する待ち時間の増加は、プロセスにおける使用に対して、特に、プロセスが小さい移動または動作を取り入れるときに、ＤＭＡを非実用的なものにする。簡単に言うと、小さい動作に対して、従来のＤＭＡアーキテチャに関係する待ち時間が、動作に対する全体的な処理時間を非常に増加させることがあるので、ＤＭＡへの依存は非実用的である。
【０００６】
当業者によって正しく認識されるように、処理効率を高めるためのコンピュータ処理技術が常に必要である。
【発明の概要】
【０００７】
本発明は、処理効率を高めるための、少なくとも１つのアプローチを提供している。
【０００８】
特に、本発明は、プロセス状態の一部であるアーキテクトされたＤＭＡを提供している。ＤＭＡを、中止させて再始動させてもよく、これにより、ＤＭＡへの重大な好ましくない処理の影響なく、コピー動作を停止して再開することが可能になる。
【０００９】
本発明は、ダイレクトメモリアクセスエンジンを動作させる方法を提供している。方法では、第１のバイト数に対して、コピーが開始される。第１のバイト数は、第１のコピー元メモリ位置から第１のコピー先メモリ位置にコピーされることになるものである。コピーを開始した後、第１のバイト数がコピーされる前に停止命令が発行される。停止命令に応答して、コピーが中止される。結果として、第２のバイト数が確立される。第２のバイト数は、第１のバイト数からコピーされることになる残りのバイト数を含む。転送が停止された後、第２のバイト数の量が識別される。その後、第２のバイト数の量を提供する量情報が、発生されて記憶される。第２のコピー元メモリ位置も識別される。第２のコピー元メモリ位置は、どこに第２のバイト数が記憶されるかを識別する。その後、第２のコピー元メモリ位置情報が発生されて記憶される。その後、第２のコピー先メモリ位置が識別される。第２のコピー先メモリ位置は、どこに第２のバイト数が転送されることになるかを識別する。その後、第２のコピー先メモリ位置情報が発生されて記憶される。
【００１０】
この方法の１つの企図されているバリエーションでは、量情報と、第２のコピー元メモリ位置情報と、第２のコピー先メモリ位置情報とが、ダイレクトメモリアクセスエンジン中の少なくとも１つのレジスタから取り出される。１つのレジスタまたはいくつかのレジスタを使用してもよい。いくつかのレジスタが存在する場合、１つは、コピー元レジスタであってもよく、別のものは、コピー先レジスタであってもよい。第３のレジスタは、量レジスタであってもよい。
【００１１】
方法はまた、量情報と、第２のコピー元メモリ位置情報と、第２のコピー先メモリ位置情報とを使用して、第２のコピー元メモリ位置から第２のコピー先メモリ位置への第２のバイト数のコピーを開始することによって、停止された転送を再開することを含んでいてもよい。
【００１２】
この方法に関して、停止命令の発行の後にコピー動作を再開始するための、企図されている多数のバリエーションが存在する。
【００１３】
１つの企図されている実施形態では、第２のコピー元メモリ位置情報から次の読み取りアドレスを決定し、第２のコピー先メモリ位置情報から次の書き込みアドレスを決定するための方法が提供されている。その後、方法は、保留中のすべての読み取りおよび書き込みをフラッシュする。方法は、次の読み取りアドレスと次の書き込みアドレスとからデクリメント値を決定することによって進む。デクリメント値は、次の読み取りアドレスが次の書き込みアドレスに先行するバイト数を識別する。その後、方法は、デクリメント値分だけ次の読み取りアドレスをデクリメントして、デクリメントされた読み取りアドレスを発生させる。第２のメモリ位置から第２のメモリコピー先への第２のバイト数のコピーは、デクリメントされた読み取りアドレスと、次の書き込みアドレスと、量情報とに少なくとも基づいて進む。
【００１４】
第２の企図されているバリエーションでは、方法は、第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することとを含む。方法は、次の読み取りアドレスが次の書き込みアドレスに先行するバイト数を追跡し、先行値を確立する。先行値は記憶され、これにより、次の読み取りアドレスが先行値によって調整されてもよい。これは、調整された次の読み取りアドレスの発生を可能にする。その後、コピーは、調整された次の読み取りアドレスと、次の書き込みアドレスと、量情報とに少なくとも基づいて進む。
【００１５】
第３の企図されているバリエーションでは、方法は、第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することとを企図している。第２のメモリ位置から第２のメモリコピー先への第２のバイト数のコピーは、次の読み取りアドレスと、次の書き込みアドレスと、量情報とを使用して進む。
【００１６】
方法の第４の企図されているバリエーションでは、第１のコピー元メモリ位置の識別と、第１のコピー先メモリ位置の識別と、第１のバイト数のカウントとが保持される。量情報を取り出した後、第１のコピー元メモリ位置の識別と、第１のバイト数のカウントと、量情報とに少なくとも基づいて、次の読み取りアドレスが確立される。その後、第１のコピー先メモリ位置の識別と、第１のバイト数のカウントと、量情報とに少なくとも基づいて、次の書き込みアドレスが確立される。第２のメモリ位置から第２のメモリコピー先への第２のバイト数のコピーは、次の読み取りアドレスと、次の書き込みアドレスと、第１のバイト数のカウントと、量情報とに少なくとも依存する。
【００１７】
第５の企図されているバリエーションでは、次の書き込みアドレスの表示が保持される。停止命令の発行後に、第１のコピー元メモリ位置からの第１のバイト数の読み取りが中止される。さらに、読み取りを中止する前に読み取ったバイトから残ったバイトのうちの任意のものに対して書き込みが続く。その後、第２のコピー元メモリ位置情報から次の読み取りアドレスが決定され、第２のコピー先メモリ位置情報から次の書き込みアドレスが決定される。第２のメモリ位置から第２のメモリコピー先への第２のバイト数のコピーは、次の読み取りアドレスと、次の書き込みアドレスと、量情報とに少なくとも依存する。
【００１８】
本発明の他の態様は、後続する説明から、そして、ここに添付した図面から明らかになるだろう。
【図面の簡単な説明】
【００１９】
１つ以上の態様を図示している図面に関連して、本発明を記述する。  
【図１】図１は、本発明によって企図されている方法の１つの実施形態を図示しているフロー図の第１の部分である。
【図２】図２は、図１で開始された方法を図示しているフロー図の第２の部分であり、この図は、図１に図示した方法の一部の続きである。
【図３】図３は、図１で開始された方法を図示しているフロー図の第３の部分のフローであり、この図は、図２に図示した方法の一部の続きである。
【図４】図４は、図１〜図３に図示した方法に含まれていてもよい、付加的な動作を図示しているフロー図である。
【図５】図５は、図１〜図３に図示した方法の、第１の企図されているバリエーションを図示しているフロー図である。
【図６】図６は、図１〜図３に図示した方法の、第２の企図されているバリエーションを図示しているフロー図である。
【図７】図７は、図１〜図３に図示した方法の、第３の企図されているバリエーションを図示しているフロー図である。
【図８】図８は、図１〜図３に図示した方法の、第４の企図されているバリエーションを図示しているフロー図である。
【図９】図９は、図１〜図３に図示した方法の、第５の企図されているバリエーションを図示しているフロー図である。
【発明の実施形態の説明】
【００２０】
以下で詳細に説明する特定の実施形態および例示に関連して、本発明について記述する。しかしながら、説明する実施形態および例示に単に限定されるように本発明は意図されていない。これとは反対に、本発明の広い範囲を規定するように実施形態および例示は意図されている。当業者によって正しく認識されるように、実施形態および例示の多数の均等物およびバリエーションが存在し、これらは本発明の範囲から逸脱することなく用いられるかもしれない。これらの実施形態およびバリエーションは、本発明によって含まれるべきであることが意図されている。
【００２１】
前置き事項として、当業者によって正しく認識されるように、メモリ中の、１つの位置から別の位置に値をコピーするために、ＤＭＡを使用する。最もシンプルに、ＤＭＡエンジンは、メモリの何らかの連続的ブロックから他の何らかのブロックに値をコピーする。ＤＭＡエンジンの、この基本的なコピー機能の１つの例は、以下のコードセグメント＃１、
コードセグメント＃１
（ｉ＝Ｏ；ｉ＜ＣＮＴ；ｉ＋＋）に対して｛ＤＳＴ［ｉ］＝ＳＲＣ［ｉ］；｝
によって提供される。
【００２２】
プロセッサからシンプルなＤＭＡを使用するために、一般的に、プロセッサは、コピー元アドレスと、コピー先アドレスと、転送サイズとを選択されたレジスタに書き込む。その後、プロセッサは、制御レジスタに書き込むことによって、転送を開始する。すべての値がコピーされたとき、ＤＭＡは、制御および／またはステータスレジスタに書き込むこと、ならびに／あるいは、プロセッサにおける割り込みをトリガすることによって、転送の完了をシグナリングする。
【００２３】
さらに高性能のＤＭＡは、「スキャッタ」動作のような動作の能力がある。「スキャッタ」は、単一のプロシージャコールが複数のバッファへの単一データストリームからのデータをシーケンシャルに読み取ることによる動作に関連する。スキャッタ動作は、以下のコードセグメント＃２、
コードセグメント＃２
（ｉ＝Ｏ；ｉ＜ＣＮＴ；ｉ＋＋）に対して｛ＤＳＴ［ＯＦＦ［ｉ］］＝ＳＲＣ［ｉ］；｝
で記述したコードで書かれてもよい。「ＳＲＣ」は、コピー元のアドレスを意味する。「ＤＳＴ」は、コピー先のアドレスを意味する。「ＯＦＦ」は、オフセットアレイのアドレスを意味する。
【００２４】
１つの企図されている実施形態では、スキャッタ動作は、複数のコピー元メモリ位置からデータを取り出し、多数のコピー先メモリ位置に対してデータを「スキャッタ」する。先に示したように、スキャッタ動作はまた、単一のデータストリームから動作してもよく、複数のコピー元メモリ位置からのデータをストリーム化する。その場合、スキャッタ動作は、多数のデータ操作を含んでいてもよい。特に、このようなスキャッタ動作は、（１）コピーされることになるデータのシーケンシャルデータストリームを読み取ってもよく、（２）シーケンシャルアドレスストリームまたはインデックスストリームを読み取ってもよく、および（３）インデックスストリームを使用する場合、それぞれのインデックスを単一のベースアドレスに加えることによってアドレスストリームを生成させてもよい。その後、データにおけるそれぞれのエレメントを、ストリームにおける対応するアドレスにコピーしてもよい。これらの動作は、スキャッタ動作すべてに必要ないが、単なるガイダンスとして当業者に提供するものであり、本発明の１つの態様の理解を支援するものであることに留意すべきである。
【００２５】
より高性能なＤＭＡは、「ギャザー」動作と呼ばれる、特有の動作の能力もある。「ギャザー」動作は、単一のプロシージャコールが複数のバッファからのデータを単一のデータストリームにシーケンシャルに書き込む、ＤＭＡの動作である。ギャザー動作は、以下のコードセグメント＃３、
コードセグメント＃３
（ｉ＝０；ｉ＜ＣＮＴ；ｉ＋＋）に対して｛ＤＳＴ［ｉ］＝ＳＲＣ［０ＦＦ［ｉ］］；｝
で記述したようなコードで書かれてもよい。コードセグメント＃２と同様に、「ＳＲＣ」は、コピー元のアドレスを意味する。同様に、「ＤＳＴ」は、コピー先のアドレスを意味する。さらに、「ＯＦＦ」は、オフセットアレイのアドレスを意味する。
【００２６】
「ギャザー」動作に関して、情報は、複数のコピー元メモリ位置から収集されてもよい。その後、データは、場合によってはスキャッタアルゴリズムによって、複数のコピー先メモリ位置に提供されてもよい。代替的に、データは、さらなる処理のために、収集されて単一のデータストリームに集められてもよい。当業者によって正しく認識されるように、ギャザー動作は、少なくともいくつかの方法で、スキャッタ動作の反対を実行する。例えば、ギャザー動作は、（１）アドレスストリームまたはインデックスストリームのいずれかを読み取り、それをベースに加えることによってアドレスストリームを発生させてもよく、または（２）アドレスストリームにおける位置からデータを読み取り、シーケンシャルデータストリームを生成させてもよい。その後、シーケンシャルデータストリームは、シーケンシャルにコピー先にコピーされてもよい。本発明の少なくともこの１つの態様を明らかにするために、この説明を提供する。本発明を限定することを意図しているのではない。
【００２７】
さらに、より高性能のＤＭＡは、「マルチレベル」動作の能力がある。マルチレベル動作は、複数のコピー元からのデータを、複数のコピー先から読み取る、および／または、複数のコピー先に書き込む動作である。マルチレベル動作は、以下のコードセグメント＃４、
コードセグメント＃４
（ｉ＝０；ｉ＜ＣＮＴＯ；ｉ＋＋）に対して、｛（ｊ＝０；ｊ＜ＣＮＴｌ；ｊ＋＋）に対して ＤＳＴ［ｉ］［ｊ］＝ＳＲＣ［Ｉ］［ｊ］｝｝
で記述したコードで書かれてもよい。コードセグメント＃２および＃３と同様に、「ＳＲＣ」は、コピー元のアドレスを意味する。「ＤＳＴ」は、コピー先のアドレスを意味する。「ＯＦＦ」はオフセットアレイのアドレスを意味する。
【００２８】
当業者によって正しく認識されるように、スキャッタ動作、ギャザー動作、およびマルチレベル動作を組み合わせて、さらなる機能を発生させてもよい。したがって、ここでは、これらの機能に関するさらなる詳細な説明は、行わない。
【００２９】
コンテキストスイッチ
一般的なＤＭＡエンジンを参照してもう一度説明すると、エンジンが転送を開始した後、エンジンは完了に向けて実行する。その後、ＤＭＡエンジンは、転送が完了していることをプロセッサにシグナリングする。これに続いて、ＤＭＡエンジンは、第２の転送を実行する。プロセスは、必要に応じて反復される。当業者によって正しく認識されるように、これは、ＤＭＡエンジンの動作を記述するための１つの方法に過ぎない。
【００３０】
ＤＭＡおよび一連のＤＭＡをセットアップするための他の方法が存在する。例えば、いくつかのＤＭＡは、「シャドウレジスタ」の使用をサポートする。現在のＤＭＡ転送が、「インフライト」または処理中である間に、シャドウレジスタは、次の転送によりＤＭＡをプログラム化することを可能にする。したがって、シャドウレジスタが次の転送を促進させるので、ＤＭＡは、現在の転送が完了するとすぐに、次の転送を開始するかもしれない。他のＤＭＡは「チェーニング」をサポートする。このアプローチは、シャドウレジスタアプローチとは異なる。ＤＭＡを直接的にプログラミングする代わりに、転送の詳細が制御ブロックに書き込まれる。次の転送は、制御ブロックに書き込まれ、この転送をポイント指定するように第１の制御ブロックにおける位置が設定される。この態様では、転送のチェーンが確立されるかもしれない。制御ブロックによって決定された転送をＤＭＡが完了するとすぐに、ＤＭＡは、チェーンにおける次のブロックによって決定された転送を実行するように進む。
【００３１】
当業者に明らかであるように、一般的に、これらの代替セットアップも、ＤＭＡに関して述べた同じ問題がある。特に、ＤＭＡは、前述の待ち時間問題を含むいくつかの欠点のために、すべてのタイプの動作を実行するのに適していない。例えば、ＤＭＡ向けの既存のアーキテクチャは、現行の転送を一時停止し、新しい転送をプログラム化および実行して、一時停止した転送を再開するためのメカニズムを提供しない。さらに、ＤＭＡエンジンをプログラム化しようと複数のコピー元が試みた場合、これらのコピー元は、同時アクセスしないように、または、複数の命令が互いに上書きされないように、ＤＭＡエンジンに対する活動を調整しなければならない。
【００３２】
ＤＭＡに関する先行技術における欠点の理解を促進するために、以下の例を提供する。特に、例は、汎用プロセッサ上でデータ転送を実行するためにＤＭＡが使用されることになるインスタンスを含む。例を簡略化するために、すべてのメモリアクセスは、リアルモードであると仮定する。当業者によって理解されるように、仮想メモリに対するプログラミングのときに生じる厄介な問題を防ぐために、リアルモード動作を仮定する。特に、この例では仮想メモリを無視することによって、仮想メモリ変換によって生じる厄介な問題もなくなる。以下で詳細に説明するように、この例に対して、いくつかの問題が生じる。
【００３３】
割り込まれる転送プロセスのコンテキストや、別の転送動作にスイッチされるコンテキストでは、第１の問題が生じることがある。特に、ＤＭＡがプログラム化されているが、ＤＭＡが制御レジスタに書き込む前の合間に転送プロセスが割り込まれる場合に、プロセス状態の一部として、ＤＭＡレジスタを保存しなければならない。結果として、転送動作が再開される前に、ＤＭＡレジスタを再現させなければ（すなわち、適切なアドレスに「書き戻さ」なければ）ならない。
【００３４】
生じることがある第２の問題は、長期間続いているＤＭＡをプログラム化するプロセスに関係する。すぐに明らかになるように、長期間続いているＤＭＡをプロセスがプログラム化し、プロセスがコンテキストスイッチされるとき、新しいプロセスは、実行される前に第１の転送プロセスの完了を待たなければならない。結果として、第１の転送動作の実行は、第２の転送動作の実行を機能停止させる。
【００３５】
ＤＭＡ処理に関して生じることがある第３の問題は、マルチスレッドまたはマルチプロセッサ環境のコンテキストにおいて生じる。特に、マルチスレッドまたはマルチプロセッサ機械において、複数のプロセスが、同時に、ＤＭＡを再プログラム化しようと試みるかもしれない。プロセスは、所定の任意のときに１つだけ処理されるので、複数のプロセスには、相互除外アルゴリズムの実行が必要である。当業者によって正しく認識されるように、相互除外アルゴリズムは、ＤＭＡをプログラミングすることに関係する待ち時間の期間を増加させる。
【００３６】
生じることがある第４の問題は、転送動作の終わりに送出されることがある、ＤＭＡによる割り込み信号の発生に関係する。特に、ＤＭＡが、割り込みによって転送動作の完了についてシグナリングしたとき、ＤＭＡをプログラム化したプロセスが、現在実行しているプロセスである保証はない。結果的に、送出されたとき、完了の割り込みは、共有割り込みハンドラによって捕捉されなければならず、共有割り込みハンドラは、現在実行しているプロセスが、割り込みを送り届けなければならないプロセスであるか否かを決定する。
【００３７】
プロセッサが仮想メモリを使用している場合、ＤＭＡエンジンは、仮想アドレスと実アドレスとの間で変換しなければならないのでさらなる問題が生じる。所望の転送を実アドレスに変換して、コピー元ページおよびコピー先ページを調べるために、オペレーティングシステムを用いることが企図されている。しかしながら、この変換に対するオペレーティングシステムへの依存が、ＤＭＡを開始する待ち時間を劇的に増加させる。一般的に、ＤＭＡでは、より簡単な重み付けスキーム（すなわち、待ち時間による負担が少ないスキーム）は、仮想アドレスに依存する。これらのスキームは、動作のために、プロセッサの変換メカニズムによってＤＭＡ転送アドレスを実行する。このアプローチによる問題は、コンテキストスイッチの後、プロセッサ変換メカニズムが、先のプロセスに対して有効でないかもしれない点である。結果として、処理の際に衝突が起こらないようにＤＭＡを中止させる方法が必要である。
【００３８】
これらの問題のそれぞれは、ＤＭＡによる転送動作の実行の際の課題を示している。本発明が、これらの問題に対する解決策を提供する。
【００３９】
再始動可能な中止
本発明は、ブロック転送ＤＭＡの再始動可能な中止を提供する。ブロック転送ＤＭＡの再始動可能な中止は、転送の中間においてＤＭＡを中止させることが可能であるものである。いったん、転送が中止されると、（１）転送されるバイトが何バイト残されているかと、（２）読み取られることになる、次のバイトのアドレスと、（３）書き込まれることになる、次のバイトのアドレスとを決定することが可能である。このアプローチは、簡単に、ＤＭＡの制御レジスタを読み取ることによって実現してもよい。他の可能性あるインプリメンテーションも企図されている。
【００４０】
シンプル
本発明によって示される第１のバリエーションを、「シンプル」インプリメンテーションと呼ぶ。シンプルインプリメンテーションでは、コピー元や、コピー先や、バイトカウントの初期値のコピーを、書き込まれたバイト数のカウントともに保持する。この情報が保持されていることから、転送されたバイトカウントに初期値を加えること、および／または、転送されたバイトカウントから初期値を引くことによって、ＤＭＡ転送動作の再始動状態を決定することができる。当業者によって正しく認識されるように、このシンプルなアプローチは、非効率的である。この非効率性の１つの理由は、ＤＭＡのこのインプリメンテーションには、次の読み取りバイトおよび／または次の書き込みバイトを追跡するためのシステムが必要であることである。
【００４１】
ドレイン
本発明によって示される第２のバリエーションを、「ドレイン」インプリメンテーションと呼ぶ。このインプリメンテーションでは、ＤＭＡが、次の読み取りアドレスおよび／または次の書き込みアドレスの実行カウントを維持する。ＤＭＡはまた、読み取られることになる残りのバイト数を追跡する。転送の中間で中止されたとき、ＤＭＡは、読み取りを中止し、メモリに書き込まれるように既に読み取られているバイトを待つ。いったん、バイトがメモリに書き込まれると、ＤＭＡは再始動可能状態に置かれ、この状態から、ＤＭＡは転送動作を完了させるかもしれない。明らかであるように、このインプリメンテーションには、少なくとも１つの短所がある。特に、保留中のすべての読み取りを、ＤＭＡが再始動可能状態になる前に書き込まれなければならない。この構成は、結果的に、転送動作の実行の間に待ち時間となる可能性がある。
【００４２】
早期中止
本発明によって示される第３のバリエーションを、「早期中止」インプリメンテーションと呼ぶ。このインプリメンテーションでは、ＤＭＡは、次の読み取りアドレスおよび／または次の書き込みアドレスの実行カウントを維持する。ＤＭＡは、書き込むために残されたバイト数も保持する。ＤＭＡが転送の中間で中止したとき、ＤＭＡは、書き込みを中止し、すべての保留中の読み取りおよび／または書き込みをフラッシュする。一般的に、この実施形態では、読み取りアドレスは、書き込みアドレスに先行する（すなわち、書き込まれるよりも、より多くのバイトが読み込まれている）。結果的に、読み取りアドレスが書き込みアドレスに先行するバイトの量分だけ、読み取りアドレスはデクリメントされなければならない。このアプローチには、最初の２つのアプローチに関連して説明した種類の短所がないので、本発明のインプリメンテーション向けの１つの魅力的なアプローチとして提供する。
【００４３】
先行
第４のバリエーションを、「先行」インプリメンテーションと呼ぶ。どのくらい読み取りアドレスが書き込みアドレスに先行しているか（すなわち、読み取られたバイト数と、書き込まれたバイト数との差）を追跡するために、別個のレジスタ（すなわち、追加のレジスタ）を使用することを除いて、このインプリメンテーションは、早期中止インプリメンテーションに類似している。この値を「先行」値と呼ぶ。一般的に、先行値は小さいので、追加のレジスタは、実に容易にかつ安価に実現することができる。言い換えると、先行アプローチには、追加のレジスタが必要であるが、付加的なレジスタは、ＤＭＡの動作に関係する全体的な「コスト」を大きく増加させない。このインプリメンテーションでは、再始動状態を回復させるために、プロセッサは、先行値を読み取りアドレスから引いて、正確な再始動読み取りアドレスを得る。
【００４４】
オフセット状態 
先に説明したように、ＤＭＡは、スキャッタ動作およびギャザー動作の両方を実現するかもしれない。ＤＭＡがスキャッタおよび／またはギャザーに携わるとき、オフセットの読み取りは、データの読み取りおよび／または書き込みに先行する傾向がある。オフセットの再始動状態を回復させるために、前述の早期中止の技術または先行の技術の何らかのバリエーションを使用する必要がある。
【００４５】
アーキテクトされたレジスタ
従来、ＤＭＡは、周辺装置として扱われてきた。そして、その結果、ＤＭＡレジスタは、動作をロードおよび／または記憶することによって、あるいは、特別な入力および／または出力命令によって、のいずれかでアクセスされている。
【００４６】
本発明の１つの目的は、ＤＭＡを、プロセッサコンテキストの一部とすることであるので、ＤＭＡレジスタ部分を、プロセッサのアーキテクトされたレジスタ状態の一部とする。本発明では、ＤＭＡレジスタは、他の特別目的レジスタと同じ命令によってアクセス可能な特別目的のレジスタである。
【００４７】
先に説明した本発明のさまざまな実施形態に関して、これから、ここに添付した図面を参照する。図面に関して、識別された動作のうちのいずれも、１つ以上のステップを含む可能性がある。さらに、いくつかのインスタンスにおいて、異なる動作を組み合わせて単一のステップにしてもよい。これらの可能性は、本発明によって含まれることが意図されている。
【００４８】
図１は、本発明の基本的な方法を概説しているフロー図である。参照のために、方法１０には、参照識別子が与えられている。方法１０は、ＤＭＡエンジンのようなプロセッサ上で実行されることが企図されている。方法は、１２において開始する。開始１２の後、方法１０は、１４に進み、１４において第１のコピー元メモリ位置から第１のコピー先メモリ位置へのコピーが、第１のバイト数に対して開始される。１４においてコピーが開始された後、第１のバイト数が第１のコピー元メモリ位置から第１のコピー先メモリ位置にコピーされる前に、１６において、停止命令が発行される。１８では、１６における停止命令の発行に応答してコピーが停止され、これにより、第２のバイト数が確立される。第２のバイト数は、第１のバイト数からコピーされることになる残りのバイトを含む。その後、２０において、第２のバイト数の量が識別される。図１は、移行ブロック２２を含み、移行ブロック２２は、方法が図２に続くことを示している。
【００４９】
図２は、図１に図示した方法の続きを提供している。特に、いったん、量が識別されると、２４において、第２のバイト数の量に関する量情報が発生される。その後、２６において、この量情報が記憶される。方法は、２６から２８に進み、２８において、第２のコピー元メモリ位置が識別される。第２のコピー元メモリ位置は、第２のバイト数が記憶されている位置を含む。方法１０は、２８から３０に進み、３０において、第２のコピー元メモリ位置情報が発生される。明らかであるように、第２のコピー元メモリ位置情報は、第２のバイト数が記憶されている第２のコピー元メモリ位置を含む。その後、３２において、第２のメモリコピー元位置情報が記憶される。図２は、移行ブロック３４を含んでおり、移行ブロック３４は、方法１０が、図３に続くことを示している。
【００５０】
図３は、方法１０の残りを図示している。図３では、方法１０は、３２から続き、３６において、第２のコピー先メモリ位置が識別される。第２のコピー先メモリ位置は、第２のバイト数が転送されることになるコピー先を含む。方法１０は、３６から３８に続く。３８では、第２のコピー先メモリ位置情報が発生される。第２のコピー先メモリ位置情報は、第２のバイト数が記憶されることになる第２のコピー先メモリ位置を含む。その後、方法１０は、４０に進み、４０では、第２のコピー先メモリ位置情報が記憶される。方法１０は、４２において終了する。
【００５１】
図１〜図３から正しく認識されるように、方法１０は、ＤＭＡエンジンの基本的な停止動作を形成する動作を含む。コピー元位置からコピー先位置へのバイトの転送を再開させるために、さらなる処理が必要である。図４〜図９では、動作を再開することに向けられている本発明の異なる実施形態および態様を詳細に示している。
【００５２】
前置き事項として、再始動動作のさまざまな実施形態は、停止されたコピープロセスの続きを含む。この点に関して、コピープロセスは、既に述べたように続く。再開されたコピー動作では、第２のバイトが、コピー元位置からコピー先位置にコピーされる。コピーがどのように再開されるかが、図４〜図９に関連して記述する実施形態の態様の基礎となる。
【００５３】
図４は、ＤＭＡエンジンが、１６において停止命令を発行した後にコピー動作を再開したときの、ＤＭＡエンジンの動作に対する特有の情報の取り出しを提供する。特に、図４は、４６で開始する方法４４に対するフローチャートを図示している。当業者に明らかであるように、方法４４は、方法１０の続きであることが企図されている。方法４４では、４８において、量情報が取り出される。その後に、５０において、第２のコピー元メモリ位置情報が取り出される。これに続いて、５２において、第２のコピー先メモリ位置情報が取り出される。当業者によって正しく認識されるように、いったん、ＤＭＡエンジンが、これらの３つからなる情報を取り出すと、ＤＭＡエンジンは、図１〜図３において詳細に示した、中止されたコピー動作を開始することに進んでもよい。
【００５４】
方法４４について、量情報と、第２のコピー元メモリ位置情報と、第２のコピー先メモリ位置情報は、ダイレクトメモリアクセスエンジン中の少なくとも１つのレジスタから読み取られることが企図されている。３つのタイプの情報はレジスタから取り出されているので、メモリ位置にアクセスすることは、ＤＭＡエンジンには必要とされない。結果として、ＤＭＡエンジンは、メモリ位置にアクセスする場合よりも、中止されたコピー動作をより迅速に再開するように進むかもしれない。当業者に明らかであるように、効率的なプロセッサは、メモリアクセスを防ぐように設計されており、これは賢明である。メモリへのアクセスは、一般的に、命令を実行するときに最長の遅延の原因となる。
【００５５】
先に述べたように、量情報と、第２のコピー元メモリ位置情報と、第２のコピー先メモリ位置情報は、少なくとも１つのレジスタから読み取られる。１つの企図されている実施形態では、３つのタイプの情報は、単一のレジスタから読み取られる。しかしながら、他のバリエーションも企図されている。例えば、いくつかのレジスタを用いてもよい。これは、２つ以上のレジスタを含む。２つ以上のレジスタは、第１のコピー元メモリ位置が保持される少なくとも１つのコピー元レジスタと、第１のコピー先メモリ位置が保持される少なくとも１つのコピー先レジスタとを含んでいてもよい。さらに、２つ以上のレジスタは、量情報が保持される量レジスタを含んでいてもよい。
【００５６】
図４に戻ると、いったん、量情報と、第２のコピー元メモリ位置情報と、第２のコピー先メモリ位置情報が、１つ以上のレジスタから取り出されると、方法は５４に進み、５４において、量情報と、第２のコピー元メモリ位置情報と、第２のコピー先メモリ位置情報とを使用して、第２のコピー元メモリ位置から第２のコピー先メモリ位置への第２のバイト数のコピーを開始することによって、中止された転送が再開される。その後、方法４４は、５６において終了する。
【００５７】
先の説明で述べたように、いったんコピー動作が再開されると、コピー元位置からコピー先位置へのバイトのコピーが実行されてもよい、いくつかの異なる実施形態が存在する。第１の実施形態を、「早期中止」方法５８と呼ぶ。図５では、早期中止方法５８のためのフローチャートが提供されている。「早期中止方法」という名前は、本発明の範囲内に含まれていると企図されている他の実施形態と、第１の実施形態とを単に区別するために提供されているに過ぎないことに留意すべきである。名前は、方法５８の限定であるとことを意図していない。さらに、他の実施形態に対しても、特定の名前によって参照するが、名前は、本発明の限定であることを意図していない。名前は、単に、本発明の理解を促進するために使用されている。
【００５８】
図５を参照すると、早期中止方法５８は、量情報と、第２のコピー元メモリ位置情報と、第２のコピー先メモリ位置情報との取り出しの後に続くことを意図している。図４の説明に関連して、４８、５０、および５２において、これらの３つの動作について説明する。
【００５９】
方法５８は、６０において開始する。方法５８は、６０から６２に進み、６２において、第２のコピー元メモリ位置情報から次の読み取りアドレスが決定される。方法５８は、その後、６４に進み、６４において、第２のコピー先メモリ位置情報から次の書き込みアドレスが決定される。その後、６６において、保留中のすべての読み取りおよび書き込みがフラッシュされる。これは、保留中の読み取りおよび書き込みのすべてが削除されることを意味する。方法５８は、６６から６８に進み、６８において、次の読み取りアドレスと次の書き込みアドレスとからデクリメント値が決定される。デクリメント値は、次の読み取りアドレスが次の書き込みアドレスに先行するバイト数を識別する。７０では、次の読み取りアドレスが、デクリメント値分だけデクリメントされ、これにより、デクリメントされた読み取りアドレスを発生させる。いったん、このデクリメント読み取りアドレスが決定されると、コピー動作を再開させてもよい。特に、デクリメントされた読み取りアドレスと、次の書き込みアドレスと、量情報とに少なくとも基づいて、第２のバイト数が、第２のメモリ位置から第２のメモリコピー先にコピーされてもよい。方法５８は、７２において終了する。
【００６０】
図６は、方法７４を図示しており、方法７４を「先行方法」と呼ぶ。また、先行方法７４は、図４において詳細に示した動作５２の後に開始することを意図している。先行方法７４は、７６において開始する。その後、方法７４は、７８に進み、７８において、第２のコピー元メモリ位置情報から次の読み取りアドレスが決定される。その後、８０において、第２のコピー先メモリ位置情報から次の書き込みアドレスが決定される。
【００６１】
方法７４では、先行値に対して追跡が行われる。先行値は、次の読み取りアドレスが次の書き込みアドレスに先行するバイト数である。この情報を追跡することによって、８２において、先行値が確立される。８４において、先行値が記憶される。ＤＭＡエンジンがコピー動作を再開できるように、８６において、先行値が取り出される。明らかに、この動作は、後続の時間に、コピー動作を再開するのに適しているときに、生じる。最後に、８８において、次の読み取りアドレスが先行値によって調整され、これにより、調整された次の読み取りアドレスを発生させる。いったん、次の読み取りアドレスが決定されると、方法７４は、中止されたコピー動作を再開することに進んでもよい。その後、第２のメモリ位置から第２のメモリコピー先への第２のバイト数のコピーは、調整された次の読み取りアドレスと、次の書き込みアドレスと、量情報とに少なくとも基づいて進む。方法７４は、９０において終了する。
【００６２】
図７は、本発明の方法の第３の実施形態に対するフロー図を提供する。この方法を、「再始動可能中止」方法９２と呼ぶ。図７に示したように、方法９２は、９４において開始する。その後、方法９２は９６に進み、９６において、第２のコピー元メモリ位置情報から次の読み取りアドレスが決定される。その後、９８において、第２のコピー先メモリ位置情報から次の書き込みアドレスが決定される。これらの２つのビットの情報により、第２のメモリ位置から第２のメモリコピー先への第２のバイト数のコピーは、次の読み取りアドレスと、次の書き込みアドレスと、量情報とを使用して再開される。方法９２は、１００において終了する。
【００６３】
図８は、ここでは「シンプル」方法と呼ばれる方法１０２に対するフロー図を提供する。シンプル方法１０２は、中止されたコピー命令を再開するための方法の第４の実施形態である。方法１０２は、図３で示した動作４０の後に開始することも意図している。
【００６４】
図８を参照すると、シンプルな方法１０２が、１０４において開始する。方法１０２は、１０４から１０６に進み、１０６において、第１のコピー元メモリ位置の識別が保持される。その後、１０８において、第１のコピー先メモリ位置の識別が保持される。これに続いて、１１０において、第１のバイト数のカウントが保持される。それに続く瞬間、停止されたコピー動作を再開させる前に、方法１０２は、１１２において、量情報を取り出す。１１４において、方法１０２は、第１のコピー元メモリ位置の識別と、第１のバイト数のカウントと、量情報とに少なくとも基づいて、次の読み取りアドレスを確立する。１１６において、方法１０２は、第１のコピー先メモリ位置の識別と、第１のバイト数のカウントと、量情報とに少なくとも基づいて、次の書き込みアドレスを確立する。ここから、方法１０２は、停止されたコピーを再開する。この方法で再開されたコピーは、次の読み取りアドレスと、次の書き込みアドレスと、第１のバイト数のカウントと、量情報とに少なくとも依存する。方法１０２は、１１８において終了する。
【００６５】
図９は、方法１２０を図示しており、方法１２０を、ここでは「ドレイン」方法と呼ぶ。これは、本発明の範囲内に含まれると企図されている第５の実施形態である。方法１０２と同様に、ドレイン方法１２０は、図１〜図３に図示した方法１０に続くことを意図している。
【００６６】
図９に図示したように、ドレイン方法１２０は、１２２において開始する。１２４において、方法１２０は、次の読み取りアドレスの表示を保持する。１２６において、方法１２０は、次の書き込みアドレスの表示を保持する。１２８において、停止命令の後、方法１２０は、第１のコピー元メモリ位置からの第１のバイト数の読み取りを中止する。１３０において、方法１２０は、読み取りを中止する前に読み取ったバイトから残った任意のバイトの第１のコピー先メモリ位置への書き込みを中止する。その後、１３２において、方法１２０は、第２のコピー元メモリ位置情報から次の読み取りアドレスを決定する。１３４において、第２のコピー先メモリ位置情報から次の書き込みアドレスを決定する。結果的に、第２のメモリ位置から第２のメモリコピー先への第２のバイト数のコピーは、次の読み取りアドレスと、次の書き込みアドレスと、量情報とに少なくとも基づいて進んでもよい。方法１２０は、１３６において終了する。
【００６７】
先に述べたように、スキャッタおよび／またはギャザー動作のコンテキストにおいて、本発明の方法を適用してもよい。ギャザーコンテキストでは、方法は、第１のバイト数が第１のコピー元メモリ位置から取り出される動作を含んでいてもよく、第１のバイト数は複数のバッファに分散されている。その後、第１のバイト数は、単一のデータストリームにバッファリングされてもよい。スキャッタ動作を、この後に使用してもよい。その場合、方法は、単一のデータストリームからの第１のバイト数を第１のコピー先メモリ位置に提供する付加的な動作を含んでいてもよい。このコンテキストでは、第１のコピー先メモリ位置は、複数のバッファに分散されていてもよい。代替的に、ギャザー動作は、複数の第１のコピー先メモリ位置から直接的に情報を引き出してもよい。そして、分散は、複数のバッファに向けられていてもよい。
【００６８】
先に述べたように、いくつかの特定の実施形態に関連して本発明について記述した。記述した実施形態のみに本発明を限定することを意図していない。これとは反対に、当業者に明らかであるように、あらゆる均等物およびバリエーションを含むように本発明は意図されている。
【図１】
2011530744.tif 000002
【図２】
2011530744.tif 000003
【図３】
2011530744.tif 000004
【図４】
2011530744.tif 000005
【図５】
2011530744.tif 000006
【図６】
2011530744.tif 000007
【図７】
2011530744.tif 000008
【図８】
2011530744.tif 000009
【図９】
2011530744.tif 000010
【手続補正書】
【提出日】平成23年4月27日(2011.4.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ダイレクトメモリアクセスエンジンを動作させる方法において、
第１のコピー元メモリ位置から第１のコピー先メモリ位置への第１のバイト数のコピーを開始することと、
前記第１のバイト数が前記第１のコピー元メモリ位置から前記第１のコピー先メモリ位置にコピーされる前に停止命令を発行することと、
前記停止命令に応答して前記コピーを停止し、これによリ、前記第１のバイト数からコピーされることになる残りのバイト数を含む、第２のバイト数を確立することと、
前記第２のバイト数の量を識別することと、
前記第２のバイト数の量に関する量情報を発生させることと、
前記量情報を記憶することと、
前記第２のバイト数が記憶されている第２のコピー元メモリ位置を識別することと、
前記第２のバイト数が記憶されている前記第２のコピー元メモリ位置を含む第２のコピー元メモリ位置情報を発生させることと、
前記第２のコピー元メモリ位置情報を記憶することと、
前記第２のバイト数が転送されることになる第２のコピー先メモリ位置を識別することと、
前記第２のバイト数が記憶されることになる前記第２のコピー先メモリ位置を含む第２のコピー先メモリ位置情報を発生させることと、
前記第２のコピー先メモリ位置情報を記憶することとを含む方法。
【請求項２】
前記量情報を取り出すことと、
前記第２のコピー元メモリ位置情報を取り出すことと、
前記第２のコピー先メモリ位置情報を取り出すこととをさらに含み、
前記量情報と、前記第２のコピー元メモリ位置情報と、前記第２のコピー先メモリ位置情報は、前記ダイレクトメモリアクセスエンジン中の少なくとも１つのレジスタから読み取られる請求項１記載の方法。
【請求項３】
前記少なくとも１つのレジスタは、複数のレジスタを含み、
前記複数のレジスタは、
前記第１のコピー元メモリ位置が保持される少なくとも１つのコピー元レジスタと、
前記第１のコピー先メモリ位置が保持される少なくとも１つのコピー先レジスタとを含む請求項２記載の方法。
【請求項４】
前記複数のレジスタは、前記量情報が記憶される量レジスタをさらに含む請求項３記載の方法。
【請求項５】
前記量情報と、前記第２のコピー元メモリ位置情報と、前記第２のコピー先メモリ位置情報とを使用して、前記第２のコピー元メモリ位置から第２のコピー先メモリ位置への前記第２のバイト数のコピーを開始することによって、前記停止された転送を再開することをさらに含む請求項２記載の方法。
【請求項６】
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することと、
保留中のすべての読み取りおよび書き込みをフラッシュすることと、
前記次の読み取りアドレスが次の書き込みアドレスに先行するバイト数を識別するデクリメント値を決定することと、
前記デクリメント値分だけ前記次の読み取りアドレスをデクリメントし、これにより、デクリメントされた読み取りアドレスを発生させることとをさらに含み、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記デクリメントされた読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも部分的に基づいて進む請求項５記載の方法。
【請求項７】
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することと、
前記次の読み取りアドレスが前記次の書き込みアドレスに先行するバイト数を追跡し、これにより、先行値を確立することと、
前記先行値を記憶することと、
前記先行値を取り出すことと、
前記先行値分だけ前記次の読み取りアドレスを調整し、これにより、調整された次の読み取りアドレスを発生させることとをさらに含み、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記調整された次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも部分的に基づいて進む請求項５記載の方法。
【請求項８】
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することとをさらに含み、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに基づいて進む請求項５記載の方法。
【請求項９】
前記第１のコピー元メモリ位置の識別を保持することと、
前記第１のコピー先メモリ位置の識別を保持することと、
前記第１のバイト数のカウントを保持することと、
前記量情報を取り出すことと、
前記第１のコピー元メモリ位置の識別と、前記第１のバイト数のカウントと、前記量情報とに少なくとも部分的に基づいて、次の読み取りアドレスを確立することと、
前記第１のコピー先メモリ位置の識別と、前記第１のバイト数のカウントと、前記量情報とに少なくとも部分的に基づいて、次の書き込みアドレスを確立することとをさらに含み、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記第１のバイト数のカウントと、前記量情報とに少なくとも部分的に依存する請求項１記載の方法。
【請求項１０】
前記次の読み取りアドレスの表示を保持することと、
前記次の書き込みアドレスの表示を保持することと、
前記停止命令の発行後に、
前記第１のコピー元メモリ位置からの前記第１のバイト数の読み取り動作を中止することと、
前記読み取り動作を中止する前に読み取ったバイトから残った任意のバイトを前記第１のコピー先メモリ位置に書き込むことと、
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することとをさらに含み、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも部分的に依存する請求項１記載の方法。
【請求項１１】
複数のバッファに分散されている前記第１のコピー元メモリ位置から、前記第１のバイト数を取り出すことと、
前記第１のバイト数を単一のデータストリームに集めることをさらに含む請求項１記載の方法。
【請求項１２】
前記単一のデータストリームからの前記第１のバイト数を前記第１のコピー先メモリ位置に提供することをさらに含み、
前記第１のコピー先メモリ位置は、複数のバッファに分散される請求項１１記載の方法。
【請求項１３】
メモリにダイレクトにアクセスするためのデバイスにおいて、
第１のコピー元メモリ位置および第２のコピー元メモリ位置を含むコピー元メモリと、
第１のコピー先メモリ位置および第２のコピー先メモリ位置を含むコピー先メモリと、
前記コピー元メモリと前記コピー先メモリとに結合されているダイレクトメモリアクセス（ＤＭＡ）エンジンとを具備し、
前記ダイレクトメモリアクセスエンジンは、
第１のコピー元メモリ位置から第１のコピー先メモリ位置への第１のバイト数のコピーを開始するようにと、
前記第１のバイト数が前記第１のコピー元メモリ位置から前記第１のコピー先メモリ位置にコピーされる前に停止命令を発行するようにと、
前記停止命令に応答して前記コピーを停止し、これによリ、前記第１のバイト数からコピーされることになる残りのバイト数を含む、第２のバイト数を確立するようにと、
前記第２のバイト数の量を識別するようにと、
前記第２のバイト数の量に関する量情報を発生させるようにと、
前記量情報を記憶するようにと、
前記第２のバイト数が記憶されている第２のコピー元メモリ位置を識別するようにと、
前記第２のバイト数が記憶されている前記第２のコピー元メモリ位置を含む第２のコピー元メモリ位置情報を発生させるようにと、
前記第２のコピー元メモリ位置情報を記憶するようにと、
前記第２のバイト数が転送されることになる第２のコピー先メモリ位置を識別するようにと、
前記第２のバイト数が記憶されることになる前記第２のコピー先メモリ位置を含む第２のコピー先メモリ位置情報を発生させるようにと、
前記第２のコピー先メモリ位置情報を記憶するように構成されているデバイス。
【請求項１４】
前記ＤＭＡエンジンは、
前記量情報を取り出すようにと、
前記第２のコピー元メモリ位置情報を取り出すようにと、
前記第２のコピー先メモリ位置情報を取り出すようにさらに構成され、
前記量情報と、前記第２のコピー元メモリ位置情報と、前記第２のコピー先メモリ位置情報は、前記ダイレクトメモリアクセスエンジン中の少なくとも１つのレジスタから読み取られる請求項１３記載のデバイス。
【請求項１５】
前記少なくとも１つのレジスタは、複数のレジスタを含み、
前記複数のレジスタは、
前記第１のコピー元メモリ位置が保持される少なくとも１つのコピー元レジスタと、
前記第１のコピー先メモリ位置が保持される少なくとも１つのコピー先レジスタとを含む請求項１４記載のデバイス。
【請求項１６】
前記複数のレジスタは、前記量情報が記憶される量レジスタをさらに含む請求項１４記載のデバイス。
【請求項１７】
前記ＤＭＡエンジンは
前記量情報と、前記第２のコピー元メモリ位置情報と、前記第２のコピー先メモリ位置情報とを使用して、前記第２のコピー元メモリ位置から第２のコピー先メモリ位置への前記第２のバイト数のコピーを開始することによって、前記停止された転送を再開するようにさらに構成されている請求項１４記載のデバイス。
【請求項１８】
前記ＤＭＡエンジンは、
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定するようにと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定するようにと、
保留中のすべての読み取りおよび書き込みをフラッシュするようにと、
前記次の読み取りアドレスが次の書き込みアドレスに先行するバイト数を識別するデクリメント値を決定するようにと、
前記デクリメント値分だけ前記次の読み取りアドレスをデクリメントし、これにより、デクリメントされた読み取りアドレスを発生させるようにさらに構成され、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記デクリメントされた読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも部分的に基づいて進む請求項１７記載のデバイス。
【請求項１９】
前記ＤＭＡエンジンは、
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定するようにと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定するようにと、
前記次の読み取りアドレスが前記次の書き込みアドレスに先行するバイト数を追跡し、これにより、先行値を確立するようにと、
前記先行値を記憶するようにと、
前記先行値を取り出すようにと、
前記先行値分だけ前記次の読み取りアドレスを調整し、これにより、調整された次の読み取りアドレスを発生させるようにさらに構成され、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記調整された次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも部分的に基づいて進む請求項１７記載のデバイス。
【請求項２０】
前記ＤＭＡエンジンは、
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定するようにと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定するようにさらに構成され、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに基づいて進む請求項１７記載のデバイス。
【請求項２１】
前記ＤＭＡエンジンは、
前記第１のコピー元メモリ位置の識別を保持するようにと、
前記第１のコピー先メモリ位置の識別を保持するようにと、
前記第１のバイト数のカウントを保持するようにと、
前記量情報を取り出すようにと、
前記第１のコピー元メモリ位置の識別と、前記第１のバイト数のカウントと、前記量情報とに少なくとも部分的に基づいて、次の読み取りアドレスを確立するようにと、
前記第１のコピー先メモリ位置の識別と、前記第１のバイト数のカウントと、前記量情報とに少なくとも部分的に基づいて、次の書き込みアドレスを確立するようにさらに構成され、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記第１のバイト数のカウントと、前記量情報とに少なくとも部分的に依存する請求項１３記載のデバイス。
【請求項２２】
前記ＤＭＡエンジンは、
前記次の読み取りアドレスの表示を保持するようにと、
前記次の書き込みアドレスの表示を保持するようにと、
前記停止命令の発行後に、
前記第１のコピー元メモリ位置からの前記第１のバイト数の読み取り動作を中止するようにと、
前記読み取り動作を中止する前に読み取ったバイトから残った任意のバイトを前記第１のコピー先メモリ位置に書き込むようにと、
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定するようにと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定するようにさらに構成され、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも部分的に依存する請求項１３記載のデバイス。
【請求項２３】
前記ＤＭＡエンジンは、
複数のバッファに分散されている前記第１のコピー元メモリ位置から、前記第１のバイト数を取り出すようにと、
前記第１のバイト数を単一のデータストリームに集めるようにさらに構成されている請求項１３記載のデバイス。
【請求項２４】
前記ＤＭＡエンジンは、
前記単一のデータストリームからの前記第１のバイト数を前記第１のコピー先メモリ位置に提供するようにさらに構成され、
前記第１のコピー先メモリ位置は、複数のバッファに分散される請求項２３記載のデバイス。
【請求項２５】
メモリにダイレクトにアクセスするように構成されているプログラムに対するデータを処理するためのコンピュータプログラムプロダクトにおいて、
前記コンピュータプログラムプロダクトは、
第１のコピー元メモリ位置から第１のコピー先メモリ位置への第１のバイト数のコピーを開始するようにコンピュータに実行させるためのコードと、
前記第１のバイト数が前記第１のコピー元メモリ位置から前記第１のコピー先メモリ位置にコピーされる前に停止命令を発行するようにコンピュータに実行させるためのコードと、
前記停止命令に応答して前記コピーを停止し、これによリ、前記第１のバイト数からコピーされることになる残りのバイト数を含む、第２のバイト数を確立するようにコンピュータに実行させるためのコードと、
前記第２のバイト数の量を識別するようにコンピュータに実行させるためのコードと、
前記第２のバイト数の量に関する量情報を発生させるようにコンピュータに実行させるためのコードと、
前記量情報を記憶するようにコンピュータに実行させるためのコードと、
前記第２のバイト数が記憶されている第２のコピー元メモリ位置を識別するようにコンピュータに実行させるためのコードと、
前記第２のバイト数が記憶されている前記第２のコピー元メモリ位置を含む第２のコピー元メモリ位置情報を発生させるようにコンピュータに実行させるためのコードと、
前記第２のコピー元メモリ位置情報を記憶するようにコンピュータに実行させるためのコードと、
前記第２のバイト数が転送されることになる第２のコピー先メモリ位置を識別するようにコンピュータに実行させるためのコードと、
前記第２のバイト数が記憶されることになる前記第２のコピー先メモリ位置を含む第２のコピー先メモリ位置情報を発生させるようにコンピュータに実行させるためのコードと、
前記第２のコピー先メモリ位置情報を記憶するようにコンピュータに実行させるためのコードとが記憶されている非一時的コンピュータ読み取り可能媒体を含むコンピュータプログラムプロダクト。
【請求項２６】
ダイレクトにメモリにアクセスするためのデバイスにおいて、
第１のコピー元メモリ位置から第１のコピー先メモリ位置への第１のバイト数のコピーを開始する手段と、
前記第１のバイト数が前記第１のコピー元メモリ位置から前記第１のコピー先メモリ位置にコピーされる前に停止命令を発行する手段と、
前記停止命令に応答して前記コピーを停止し、これによリ、前記第１のバイト数からコピーされることになる残りのバイト数を含む、第２のバイト数を確立する手段と、
前記第２のバイト数の量を識別する手段と、
前記第２のバイト数の量に関する量情報を発生させる手段と、
前記量情報を記憶する手段と、
前記第２のバイト数が記憶されている第２のコピー元メモリ位置を識別する手段と、
前記第２のバイト数が記憶されている前記第２のコピー元メモリ位置を含む第２のコピー元メモリ位置情報を発生させる手段と、
前記第２のコピー元メモリ位置情報を記憶する手段と、
前記第２のバイト数が転送されることになる第２のコピー先メモリ位置を識別する手段と、
前記第２のバイト数が記憶されることになる前記第２のコピー先メモリ位置を含む第２のコピー先メモリ位置情報を発生させる手段と、
前記第２のコピー先メモリ位置情報を記憶する手段とを具備するデバイス。
【請求項２７】
前記コピーを開始する手段と、前記停止命令を発行する手段と、前記コピーを停止する手段と、前記第２のバイト数の量を識別する手段と、前記量情報を発生させる手段と、前記量情報を記憶する手段と、前記第２のコピー元メモリ位置を識別する手段と、前記第２のコピー元メモリ位置情報を発生させる手段と、前記第２のコピー元メモリ位置情報を記憶する手段と、前記第２のコピー先メモリ位置を識別する手段と、前記第２のコピー先メモリ位置情報を発生させる手段と、前記第２のコピー先メモリ位置情報を記憶する手段は、ダイレクトメモリアクセス（ＤＭＡ）エンジンを構成する請求項２６記載のデバイス。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００６８
【補正方法】変更
【補正の内容】
【００６８】
先に述べたように、いくつかの特定の実施形態に関連して本発明について記述した。記述した実施形態のみに本発明を限定することを意図していない。これとは反対に、当業者に明らかであるように、あらゆる均等物およびバリエーションを含むように本発明は意図されている。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
〔１〕ダイレクトメモリアクセスエンジンを動作させる方法において、
第１のコピー元メモリ位置から第１のコピー先メモリ位置への第１のバイト数のコピーを開始することと、
前記コピーを開始した後、前記第１のバイト数が前記第１のコピー元メモリ位置から前記第１のコピー先メモリ位置にコピーされる前に停止命令を発行することと、
前記停止命令の発行に応答して前記コピーを停止し、これによリ、前記第１のバイト数からコピーされることになる残りのバイト数を含む、第２のバイト数を確立することと、
前記第２のバイト数の量を識別することと、
前記第２のバイト数の量に関する量情報を発生させることと、
前記量情報を記憶することと、
前記第２のバイト数が記憶されている第２のコピー元メモリ位置を識別することと、
前記第２のバイト数が記憶されている前記第２のコピー元メモリ位置を含む第２のコピー元メモリ位置情報を発生させることと、
前記第２のメモリコピー元位置情報を記憶することと、
前記第２のバイト数が転送されることになる第２のコピー先メモリ位置を識別することと、
前記第２のバイト数が記憶されることになる前記第２のコピー先メモリ位置を含む第２のコピー先メモリ位置情報を発生させることと、
前記第２のコピー先メモリ位置情報を記憶することとを含む方法。
〔２〕前記量情報を取り出すことと、
前記第２のコピー元メモリ位置情報を取り出すことと、
前記第２のコピー先メモリ位置情報を取り出すこととをさらに含み、
前記量情報と、前記第２のコピー元メモリ位置情報と、前記第２のコピー先メモリ位置情報は、前記ダイレクトメモリアクセスエンジン中の少なくとも１つのレジスタから読み取られる〔１〕記載の方法。
〔３〕前記少なくとも１つのレジスタは、複数のレジスタを含む〔２〕記載の方法。
〔４〕前記複数のレジスタは、前記第１のコピー元メモリ位置が保持される少なくとも１つのコピー元レジスタと、前記第１のコピー先メモリ位置が保持される少なくとも１つのコピー先レジスタとを含む〔３〕記載の方法。
〔５〕前記複数のレジスタは、前記量情報が保持される量レジスタをさらに含む〔４〕記載の方法。
〔６〕前記量情報と、前記第２のコピー元メモリ位置情報と、前記第２のコピー先メモリ位置情報とを使用して、前記第２のコピー元メモリ位置から第２のコピー先メモリ位置への前記第２のバイト数のコピーを開始することによって、前記停止された転送を再開することをさらに含む〔２〕記載の方法。
〔７〕前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することと、
保留中のすべての読み取りおよび書き込みをフラッシュすることと、
前記次の読み取りアドレスと前記次の書き込みアドレスとから、デクリメント値を決定することと、
前記デクリメント値分だけ前記次の読み取りアドレスをデクリメントし、これにより、デクリメントされた読み取りアドレスを発生させることとをさらに含み、
前記デクリメント値は、前記次の読み取りアドレスが次の書き込みアドレスに先行するバイト数を識別し、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記デクリメントされた読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも基づいて進む〔６〕記載の方法。
〔８〕前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することと、
前記次の読み取りアドレスが前記次の書き込みアドレスに先行するバイト数を追跡し、これにより、先行値を確立することと、
前記先行値を記憶することと、
前記先行値を取り出すことと、
前記先行値分だけ前記次の読み取りアドレスを調整し、これにより、調整された次の読み取りアドレスを発生させることとをさらに含み、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記調整された次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも基づいて進む〔６〕記載の方法。
〔９〕前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することとをさらに含み、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とを使用して進む〔６〕記載の方法。
〔１０〕前記第１のコピー元メモリ位置の識別を保持することと、
前記第１のコピー先メモリ位置の識別を保持することと、
前記第１のバイト数のカウントを保持することと、
前記量情報を取り出すことと、
前記第１のコピー元メモリ位置の識別と、前記第１のバイト数のカウントと、前記量情報とに少なくとも基づいて、次の読み取りアドレスを確立することと、
前記第１のコピー先メモリ位置の識別と、前記第１のバイト数のカウントと、前記量情報とに少なくとも基づいて、次の書き込みアドレスを確立することとをさらに含み、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記第１のバイト数のカウントと、前記量情報とに少なくとも依存する〔１〕記載の方法。
〔１１〕前記次の読み取りアドレスの表示を保持することと、
前記次の書き込みアドレスの表示を保持することと、
前記停止命令の発行後に、
前記第１のコピー元メモリ位置からの前記第１のバイト数の読み取りを中止することと、
前記読み取りを中止する前に読み取ったバイトから残った任意のバイトを前記第１のコピー先メモリ位置に書き込むことと、
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することとをさらに含み、
前記第２のメモリ位置から前記第２のメモリコピー先への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも依存する〔１〕記載の方法。
〔１２〕複数のバッファに分散されている前記第１のコピー元メモリ位置から、前記第１のバイト数を取り出すことと、
前記第１のバイト数を単一のデータストリームに集めることをさらに含む〔１〕記載の方法。
〔１３〕前記単一のデータストリームからの前記第１のバイト数を前記第１のコピー先メモリ位置に提供することをさらに含み、
前記第１のコピー先メモリ位置は、複数のバッファに分散される〔１２〕記載の方法。
〔１４〕前記第１のコピー先メモリ位置は、複数のバッファに分散される〔１〕記載の方法。
【手続補正書】
【提出日】平成23年6月30日(2011.6.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ダイレクトメモリアクセスエンジンを動作させる方法において、
第１のコピー元メモリ位置から第１のコピー先メモリ位置への第１のバイト数のコピーを開始することと、
前記第１のバイト数が前記第１のコピー元メモリ位置から前記第１のコピー先メモリ位置にコピーされる前に停止命令を発行することと、
前記停止命令に応答して前記コピーを停止し、これによリ、前記第１のバイト数からコピーされることになる残りのバイト数を含む、第２のバイト数を確立することと、
前記第２のバイト数の量を識別することと、
前記第２のバイト数の量に関する量情報を発生させることと、
前記量情報を記憶することと、
前記第２のバイト数が記憶されている第２のコピー元メモリ位置を識別することと、
前記第２のバイト数が記憶されている前記第２のコピー元メモリ位置を含む第２のコピー元メモリ位置情報を発生させることと、
前記第２のコピー元メモリ位置情報を記憶することと、
前記第２のバイト数が転送されることになる第２のコピー先メモリ位置を識別することと、
前記第２のバイト数が記憶されることになる前記第２のコピー先メモリ位置を含む第２のコピー先メモリ位置情報を発生させることと、
前記第２のコピー先メモリ位置情報を記憶することとを含む方法。
【請求項２】
前記量情報を取り出すことと、
前記第２のコピー元メモリ位置情報を取り出すことと、
前記第２のコピー先メモリ位置情報を取り出すこととをさらに含み、
前記量情報と、前記第２のコピー元メモリ位置情報と、前記第２のコピー先メモリ位置情報は、前記ダイレクトメモリアクセスエンジン中の少なくとも１つのレジスタから読み取られる請求項１記載の方法。
【請求項３】
前記少なくとも１つのレジスタは、複数のレジスタを含み、
前記複数のレジスタは、
前記第１のコピー元メモリ位置が保持される少なくとも１つのコピー元レジスタと、
前記第１のコピー先メモリ位置が保持される少なくとも１つのコピー先レジスタとを含む請求項２記載の方法。
【請求項４】
前記複数のレジスタは、前記量情報が記憶される量レジスタをさらに含む請求項３記載の方法。
【請求項５】
前記量情報と、前記第２のコピー元メモリ位置情報と、前記第２のコピー先メモリ位置情報とを使用して、前記第２のコピー元メモリ位置から第２のコピー先メモリ位置への前記第２のバイト数のコピーを開始することによって、前記停止された転送を再開することをさらに含む請求項２記載の方法。
【請求項６】
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することと、
保留中のすべての読み取りおよび書き込みをフラッシュすることと、
前記次の読み取りアドレスが次の書き込みアドレスに先行するバイト数を識別するデクリメント値を決定することと、
前記デクリメント値分だけ前記次の読み取りアドレスをデクリメントし、これにより、デクリメントされた読み取りアドレスを発生させることとをさらに含み、
前記第２のコピー元メモリ位置から前記第２のコピー先メモリ位置への前記第２のバイト数のコピーは、前記デクリメントされた読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも部分的に基づいて進む請求項５記載の方法。
【請求項７】
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することと、
前記次の読み取りアドレスが前記次の書き込みアドレスに先行するバイト数を追跡し、これにより、先行値を確立することと、
前記先行値を記憶することと、
前記先行値を取り出すことと、
前記先行値分だけ前記次の読み取りアドレスを調整し、これにより、調整された次の読み取りアドレスを発生させることとをさらに含み、
前記第２のコピー元メモリ位置から前記第２のコピー先メモリ位置への前記第２のバイト数のコピーは、前記調整された次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも部分的に基づいて進む請求項５記載の方法。
【請求項８】
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することとをさらに含み、
前記第２のコピー元メモリ位置から前記第２のコピー先メモリ位置への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに基づいて進む請求項５記載の方法。
【請求項９】
前記第１のコピー元メモリ位置の識別を保持することと、
前記第１のコピー先メモリ位置の識別を保持することと、
前記第１のバイト数のカウントを保持することと、
前記量情報を取り出すことと、
前記第１のコピー元メモリ位置の識別と、前記第１のバイト数のカウントと、前記量情報とに少なくとも部分的に基づいて、次の読み取りアドレスを確立することと、
前記第１のコピー先メモリ位置の識別と、前記第１のバイト数のカウントと、前記量情報とに少なくとも部分的に基づいて、次の書き込みアドレスを確立することとをさらに含み、
前記第２のコピー元メモリ位置から前記第２のコピー先メモリ位置への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記第１のバイト数のカウントと、前記量情報とに少なくとも部分的に依存する請求項１記載の方法。
【請求項１０】
前記次の読み取りアドレスの表示を保持することと、
前記次の書き込みアドレスの表示を保持することと、
前記停止命令の発行後に、
前記第１のコピー元メモリ位置からの前記第１のバイト数の読み取り動作を中止することと、
前記読み取り動作を中止する前に読み取ったバイトから残った任意のバイトを前記第１のコピー先メモリ位置に書き込むことと、
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定することと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定することとをさらに含み、
前記第２のコピー元メモリ位置から前記第２のコピー先メモリ位置への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも部分的に依存する請求項１記載の方法。
【請求項１１】
複数のバッファに分散されている前記第１のコピー元メモリ位置から、前記第１のバイト数を取り出すことと、
前記第１のバイト数を単一のデータストリームに集めることをさらに含む請求項１記載の方法。
【請求項１２】
前記単一のデータストリームからの前記第１のバイト数を前記第１のコピー先メモリ位置に提供することをさらに含み、
前記第１のコピー先メモリ位置は、複数のバッファに分散される請求項１１記載の方法。
【請求項１３】
メモリにダイレクトにアクセスするためのデバイスにおいて、
第１のコピー元メモリ位置および第２のコピー元メモリ位置を含むコピー元メモリと、
第１のコピー先メモリ位置および第２のコピー先メモリ位置を含むコピー先メモリと、
前記コピー元メモリと前記コピー先メモリとに結合されているダイレクトメモリアクセス（ＤＭＡ）エンジンとを具備し、
前記ダイレクトメモリアクセス（ＤＭＡ）エンジンは、
第１のコピー元メモリ位置から第１のコピー先メモリ位置への第１のバイト数のコピーを開始するようにと、
前記第１のバイト数が前記第１のコピー元メモリ位置から前記第１のコピー先メモリ位置にコピーされる前に停止命令を発行するようにと、
前記停止命令に応答して前記コピーを停止し、これによリ、前記第１のバイト数からコピーされることになる残りのバイト数を含む、第２のバイト数を確立するようにと、
前記第２のバイト数の量を識別するようにと、
前記第２のバイト数の量に関する量情報を発生させるようにと、
前記量情報を記憶するようにと、
前記第２のバイト数が記憶されている第２のコピー元メモリ位置を識別するようにと、
前記第２のバイト数が記憶されている前記第２のコピー元メモリ位置を含む第２のコピー元メモリ位置情報を発生させるようにと、
前記第２のコピー元メモリ位置情報を記憶するようにと、
前記第２のバイト数が転送されることになる第２のコピー先メモリ位置を識別するようにと、
前記第２のバイト数が記憶されることになる前記第２のコピー先メモリ位置を含む第２のコピー先メモリ位置情報を発生させるようにと、
前記第２のコピー先メモリ位置情報を記憶するように構成されているデバイス。
【請求項１４】
前記ＤＭＡエンジンは、
前記量情報を取り出すようにと、
前記第２のコピー元メモリ位置情報を取り出すようにと、
前記第２のコピー先メモリ位置情報を取り出すようにさらに構成され、
前記量情報と、前記第２のコピー元メモリ位置情報と、前記第２のコピー先メモリ位置情報は、前記ダイレクトメモリアクセスエンジン中の少なくとも１つのレジスタから読み取られる請求項１３記載のデバイス。
【請求項１５】
前記少なくとも１つのレジスタは、複数のレジスタを含み、
前記複数のレジスタは、
前記第１のコピー元メモリ位置が保持される少なくとも１つのコピー元レジスタと、
前記第１のコピー先メモリ位置が保持される少なくとも１つのコピー先レジスタとを含む請求項１４記載のデバイス。
【請求項１６】
前記複数のレジスタは、前記量情報が記憶される量レジスタをさらに含む請求項１４記載のデバイス。
【請求項１７】
前記ＤＭＡエンジンは
前記量情報と、前記第２のコピー元メモリ位置情報と、前記第２のコピー先メモリ位置情報とを使用して、前記第２のコピー元メモリ位置から第２のコピー先メモリ位置への前記第２のバイト数のコピーを開始することによって、前記停止された転送を再開するようにさらに構成されている請求項１４記載のデバイス。
【請求項１８】
前記ＤＭＡエンジンは、
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定するようにと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定するようにと、
保留中のすべての読み取りおよび書き込みをフラッシュするようにと、
前記次の読み取りアドレスが次の書き込みアドレスに先行するバイト数を識別するデクリメント値を決定するようにと、
前記デクリメント値分だけ前記次の読み取りアドレスをデクリメントし、これにより、デクリメントされた読み取りアドレスを発生させるようにさらに構成され、
前記第２のコピー元メモリ位置から前記第２のコピー先メモリ位置への前記第２のバイト数のコピーは、前記デクリメントされた読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも部分的に基づいて進む請求項１７記載のデバイス。
【請求項１９】
前記ＤＭＡエンジンは、
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定するようにと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定するようにと、
前記次の読み取りアドレスが前記次の書き込みアドレスに先行するバイト数を追跡し、これにより、先行値を確立するようにと、
前記先行値を記憶するようにと、
前記先行値を取り出すようにと、
前記先行値分だけ前記次の読み取りアドレスを調整し、これにより、調整された次の読み取りアドレスを発生させるようにさらに構成され、
前記第２のコピー元メモリ位置から前記第２のコピー先メモリ位置への前記第２のバイト数のコピーは、前記調整された次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも部分的に基づいて進む請求項１７記載のデバイス。
【請求項２０】
前記ＤＭＡエンジンは、
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定するようにと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定するようにさらに構成され、
前記第２のコピー元メモリ位置から前記第２のコピー先メモリ位置への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに基づいて進む請求項１７記載のデバイス。
【請求項２１】
前記ＤＭＡエンジンは、
前記第１のコピー元メモリ位置の識別を保持するようにと、
前記第１のコピー先メモリ位置の識別を保持するようにと、
前記第１のバイト数のカウントを保持するようにと、
前記量情報を取り出すようにと、
前記第１のコピー元メモリ位置の識別と、前記第１のバイト数のカウントと、前記量情報とに少なくとも部分的に基づいて、次の読み取りアドレスを確立するようにと、
前記第１のコピー先メモリ位置の識別と、前記第１のバイト数のカウントと、前記量情報とに少なくとも部分的に基づいて、次の書き込みアドレスを確立するようにさらに構成され、
前記第２のコピー元メモリ位置から前記第２のコピー先メモリ位置への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記第１のバイト数のカウントと、前記量情報とに少なくとも部分的に依存する請求項１３記載のデバイス。
【請求項２２】
前記ＤＭＡエンジンは、
前記次の読み取りアドレスの表示を保持するようにと、
前記次の書き込みアドレスの表示を保持するようにと、
前記停止命令の発行後に、
前記第１のコピー元メモリ位置からの前記第１のバイト数の読み取り動作を中止するようにと、
前記読み取り動作を中止する前に読み取ったバイトから残った任意のバイトを前記第１のコピー先メモリ位置に書き込むようにと、
前記第２のコピー元メモリ位置情報から次の読み取りアドレスを決定するようにと、
前記第２のコピー先メモリ位置情報から次の書き込みアドレスを決定するようにさらに構成され、
前記第２のコピー元メモリ位置から前記第２のコピー先メモリ位置への前記第２のバイト数のコピーは、前記次の読み取りアドレスと、前記次の書き込みアドレスと、前記量情報とに少なくとも部分的に依存する請求項１３記載のデバイス。
【請求項２３】
前記ＤＭＡエンジンは、
複数のバッファに分散されている前記第１のコピー元メモリ位置から、前記第１のバイト数を取り出すようにと、
前記第１のバイト数を単一のデータストリームに集めるようにさらに構成されている請求項１３記載のデバイス。
【請求項２４】
前記ＤＭＡエンジンは、
前記単一のデータストリームからの前記第１のバイト数を前記第１のコピー先メモリ位置に提供するようにさらに構成され、
前記第１のコピー先メモリ位置は、複数のバッファに分散される請求項２３記載のデバイス。
【請求項２５】
メモリにダイレクトにアクセスするように構成されているプログラムに対するデータを処理するためのコンピュータ読み取り可能記憶媒体において、
第１のコピー元メモリ位置から第１のコピー先メモリ位置への第１のバイト数のコピーを開始するようにコンピュータに実行させるためのコードと、
前記第１のバイト数が前記第１のコピー元メモリ位置から前記第１のコピー先メモリ位置にコピーされる前に停止命令を発行するようにコンピュータに実行させるためのコードと、
前記停止命令に応答して前記コピーを停止し、これによリ、前記第１のバイト数からコピーされることになる残りのバイト数を含む、第２のバイト数を確立するようにコンピュータに実行させるためのコードと、
前記第２のバイト数の量を識別するようにコンピュータに実行させるためのコードと、
前記第２のバイト数の量に関する量情報を発生させるようにコンピュータに実行させるためのコードと、
前記量情報を記憶するようにコンピュータに実行させるためのコードと、
前記第２のバイト数が記憶されている第２のコピー元メモリ位置を識別するようにコンピュータに実行させるためのコードと、
前記第２のバイト数が記憶されている前記第２のコピー元メモリ位置を含む第２のコピー元メモリ位置情報を発生させるようにコンピュータに実行させるためのコードと、
前記第２のコピー元メモリ位置情報を記憶するようにコンピュータに実行させるためのコードと、
前記第２のバイト数が転送されることになる第２のコピー先メモリ位置を識別するようにコンピュータに実行させるためのコードと、
前記第２のバイト数が記憶されることになる前記第２のコピー先メモリ位置を含む第２のコピー先メモリ位置情報を発生させるようにコンピュータに実行させるためのコードと、
前記第２のコピー先メモリ位置情報を記憶するようにコンピュータに実行させるためのコードとが記憶されているコンピュータ読み取り可能記憶媒体。
【請求項２６】
ダイレクトにメモリにアクセスするためのデバイスにおいて、
第１のコピー元メモリ位置から第１のコピー先メモリ位置への第１のバイト数のコピーを開始する手段と、
前記第１のバイト数が前記第１のコピー元メモリ位置から前記第１のコピー先メモリ位置にコピーされる前に停止命令を発行する手段と、
前記停止命令に応答して前記コピーを停止し、これによリ、前記第１のバイト数からコピーされることになる残りのバイト数を含む、第２のバイト数を確立する手段と、
前記第２のバイト数の量を識別する手段と、
前記第２のバイト数の量に関する量情報を発生させる手段と、
前記量情報を記憶する手段と、
前記第２のバイト数が記憶されている第２のコピー元メモリ位置を識別する手段と、
前記第２のバイト数が記憶されている前記第２のコピー元メモリ位置を含む第２のコピー元メモリ位置情報を発生させる手段と、
前記第２のコピー元メモリ位置情報を記憶する手段と、
前記第２のバイト数が転送されることになる第２のコピー先メモリ位置を識別する手段と、
前記第２のバイト数が記憶されることになる前記第２のコピー先メモリ位置を含む第２のコピー先メモリ位置情報を発生させる手段と、
前記第２のコピー先メモリ位置情報を記憶する手段とを具備するデバイス。
【請求項２７】
前記コピーを開始する手段と、前記停止命令を発行する手段と、前記コピーを停止する手段と、前記第２のバイト数の量を識別する手段と、前記量情報を発生させる手段と、前記量情報を記憶する手段と、前記第２のコピー元メモリ位置を識別する手段と、前記第２のコピー元メモリ位置情報を発生させる手段と、前記第２のコピー元メモリ位置情報を記憶する手段と、前記第２のコピー先メモリ位置を識別する手段と、前記第２のコピー先メモリ位置情報を発生させる手段と、前記第２のコピー先メモリ位置情報を記憶する手段は、ダイレクトメモリアクセス（ＤＭＡ）エンジンを構成する請求項２６記載のデバイス。
【国際調査報告】
2011530744.tif 000011