(57)【要約】【課題】単純なハードウェア構成によってメモリ上に存在する複数のデータのDMA転送を正確に制御する。【解決手段】  メモリ３３には、キューＱ０に対応するディスクリプタテーブルＴ０と、キューＱ１に対応するディスクリプタテーブルＴ１が設けられる。ディスクリプタ制御部５１のレジスタＲ０，Ｒ１には、それぞれディスクリプタテーブルＴ０を構成するディスクリプタの番号またはディスクリプタテーブルＴ１を構成するディスクリプタの番号が記録される。ディスクリプタ取得部５２のキャッシュＣ０，Ｃ１には、それぞれディスクリプタテーブルＴ０のディスクリプタ、またはディスクリプタテーブルＴ１のディスクリプタが記録する。ディスクリプタ選択部５３は、キャッシュＣ０，Ｃ１のいずれか一方を所定の規則に従って選択する。本発明はDMA転送を行う全ての電子装置に適用することが可能である。【選択図】図６
2006293800.tif 000002
【特許請求の範囲】
【請求項１】
メモリ上に設けられた複数のキューからパケット単位のデータをDMA(Direct Memory Access)によって読み出す情報処理装置において、
前記キューからパケット単位のデータを読み出すためのディスクリプタを連ねて構成するディスクリプタ群を、各キューに対応して生成する生成手段と、
前記生成手段によって各キューに対応して生成された複数の前記ディスクリプタ群のそれぞれから前記ディスクリプタを読み出す読み出し手段と、
前記読み出し手段によって読み出された複数の前記ディスクリプタのうちの１つを選択する選択手段と、
前記選択手段によって選択された前記ディスクリプタから前記位置情報を抽出し、抽出した前記位置情報に基づき、前記メモリからパケット単位のデータをDMAによって読み出すDMA手段と
を含むことを特徴とする情報処理装置。
【請求項２】
前記ディスクリプタ群は、複数の前記ディスクリプタが物理的に連続して配置されているディスクリプタテーブルである
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記ディスクリプタ群は、複数の前記ディスクリプタが離散的に配置されているディスクリプタチェーンであり、
前記ディスクリプタには、後続するディスクリプタの記録位置を示す情報が記述されている
ことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記選択手段は、前記読み出し手段によって読み出された複数の前記ディスクリプタのうち、所定の前記キューに対応するものを優先的に選択する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記読み出し手段による前記ディスクリプタの読み出しタイミングを制御する制御手段を
さらに含むことを特徴とする請求項１に記載の情報処理装置。
【請求項６】
前記生成手段はソフトウェアにより実現され、
前記制御手段はハードウェアにより実現される
ことを特徴とする請求項１に記載の情報処理装置。
【請求項７】
メモリ上に設けられた複数のキューからパケット単位のデータをDMA(Direct Memory Access)によって読み出す情報処理装置の情報処理方法において、
前記キューからパケット単位のデータを読み出すためのディスクリプタを連ねて構成するディスクリプタ群を、各キューに対応して生成する生成ステップと、
前記生成ステップの処理で各キューに対応して生成された複数の前記ディスクリプタ群のそれぞれから前記ディスクリプタを読み出す読み出しステップと、
前記読み出しステップの処理で読み出された複数の前記ディスクリプタのうちの１つを選択する選択ステップと、
前記選択ステップの処理で選択された前記ディスクリプタから前記位置情報を抽出し、抽出した前記位置情報に基づき、前記メモリからパケット単位のデータをDMAによって読み出すDMAステップと
を含むことを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、および情報処理方法に関し、特に、メモリ上のデータをDMA(Direct Memory Access)にて読み出し、ネットワークを介して送信する場合に用いて好適な情報処理装置、および情報処理方法に関する。
【背景技術】
【０００２】
送信装置からネットワークを介して受信装置にデータを送信するシステムを考える。図１は、当該システムの構成例を示している。
【０００３】
送信装置１は、所定のプログラムを実行することにより送信装置１の全体を制御するCPU１１と、データバス１２を介してCPU１１に接続されたメモリ１３、メモリコントローラ１４、およびネットワークカード１５から構成されている。受信装置３に送信すべきデータ（以下、送信データと記述する）はメモリ１３に記憶されており、通常、CPU１１を占有しないように、メモリ１３からDMA(Direct Memory Access)によって読み出されてネットワークカード１５に移動された後、ネットワークカード１５からネットワーク２を介して受信装置３に送信される。
【０００４】
メモリ１３に記録されている送信データをネットワークカード１５にDMAを行う動作について、図２のフローチャートを参照して説明する。ステップＳ１においてCPU１１は、メモリ１３上に設けられたディスクリプタテーブルの各ディスクリプタに、送信データのパケット単位の情報を記述する。
【０００５】
図３はディスクリプタテーブルの一例を示している。ディスクリプタテーブルは、メモリ１３の連続した領域に記録された複数のディスクリプタ＃０乃至＃ｎから構成される。図４は各ディスクリプタのデータ構造を示している。ディスクリプタには、対応するパケットのメモリ１３における記録開始アドレスの上位３２ビットを示すaddress(high)および下位３２ビットを示すaddress(low)、未使用１６ビットのreserved、並びにパケット長を示す１６ビットのlengthが記述される。
【０００６】
図２に戻り、ステップＳ２においてCPU１１は、ネットワークカード１５に対して利用可能となった（すなわち、ステップＳ１の処理でパケット単位の情報を記述した）ディスクリプタの番号を通知する。
【０００７】
この通知に対応し、ステップＳ３においてネットワークカード１５は、利用可能なディスクリプタを順に１つずつメモリ１３から読み出す。そしてステップＳ４においてネットワークカード１５は、ディスクリプタに記述されている記録開始アドレスおよびパケット長をメモリコントローラ１４に通知する。この通知に対応してメモリコントローラ１４は、メモリ１３の当該記録開始アドレスを先頭とする当該パケット長のデータを、メモリ１３からネットワークカード１５にDMAにより転送させる。ネットワークカード１５は、DMA転送されたパケットを、ネットワーク２を介して受信装置３に送信する。ステップＳ３およびＳ４の処理によって、送信データの１パケットがネットワークカード１５に移動され、受信装置３に送信されたことになる。
【０００８】
ステップＳ５においてネットワークカード１５は、利用可能なディスクリプタのうち、読み出していないものが存在するか否かを判定する。読み出していないディスクリプタが存在すると判定された場合、ステップＳ３に戻り、それ以降の処理が繰り返される。そしてステップＳ５において、読み出していないディスクリプタが存在しないと判定した場合、送信データを構成する全てのパケットがネットワークカード１５に移動され、受信装置３に送信されたことになるので、処理はステップＳ６に進む。ステップＳ６において、ネットワークカード１５は、CPU１１に対してDMAの終了を通知する。ステップＳ７においてCPU１１は、送信データが記録されていたメモリ１３の上の空間を開放する。以上で、メモリ１３からネットワークカード１５にDMA転送を行う動作の説明を終了する。
【０００９】
次に、メモリ１３上の複数のデータをそれぞれの優先度に応じてネットワークカード１５にDMA転送して、ネットワークカード１５からネットワーク２を介して送信する動作について考える。これを実現するために、メモリ１３上に複数のキュー(queue)を設け、それぞれに蓄積される送信データをネットワークカード１５にDMA転送して、ネットワークカード１５からネットワーク２を介して送信する方法がある（例えば特許文献１参照）。
【００１０】
例えば、メモリ１３上に送信レートや優先度が異なる第１のキューと第２のキューを設け、第１のキューには第１の送信レートで送信すべき第１の送信データが蓄積され、第２のキューには第１の送信レートで送信すべき第２の送信データが蓄積されるものとする。      
【００１１】
第１のキューに蓄積された第１のデータと第２のキューに蓄積された第２のデータをネットワークカード１５にDMA転送するには２つの方法が考えられる。
【００１２】
第１の方法は、第１のキューまたは第２のキューに対応するディスクリプタをそれぞれの送信レートまたは優先度に応じて交互に記述することにより、第１のデータと第２のデータを時分割でDMA転送する方法である。第２の方法は、メモリ１３とネットワークカード１５との間に２以上のDMAチャンネルを設ける方法である（例えば、特許文献２参照）。
【特許文献１】特開２０００−３３２７８７号公報
【特許文献２】特開平９−２５９０７１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
上述した第１の方法では、第１のキューと第２のキューの送信レートや優先度に応じて第１のキューまたは第２のキューに対応するディスクリプタを交互に記述しなければならないのでCPU１１の負荷が大きくなってしまう。また、ソフトウェアに従って動作するCPU１１は、その処理の粒度（動作のタイミングを制御するときの時間的間隔）がハードウェアであるネットワークカード１５に比較して大きいので、送信レートを正確に制御できる程度にディスクリプタを交互に記述することは困難である。
【００１４】
上述した第２の方法では、第１のデータおよび第２のデータを同時に並行してメモリ１３からネットワークカード１５にDMA転送することができる。しかしながら、メモリ１３とネットワークカード１５との間に２以上のDMAチャンネルを設けた場合、ネットワークカード１５等のハードウェア構成が複雑となり、回路規模が大きくなったり、製造コストが上がってしまうという問題がある。
【００１５】
本発明はこのような状況に鑑みてなされたものであり、単純なハードウェア構成によってメモリ上に存在する複数のデータのDMA転送を正確に制御できるようにするものである。
【課題を解決するための手段】
【００１６】
本発明の情報処理装置は、キューからパケット単位のデータを読み出すためのディスクリプタを連ねて構成するディスクリプタ群を、各キューに対応して生成する生成手段と、生成手段によって各キューに対応して生成された複数のディスクリプタ群のそれぞれからディスクリプタを読み出す読み出し手段と、読み出し手段によって読み出された複数のディスクリプタのうちの１つを選択する選択手段と、選択手段によって選択されたディスクリプタから位置情報を抽出し、抽出した位置情報に基づき、メモリからパケット単位のデータをDMAによって読み出すDMA手段とを含むことを特徴とする。
【００１７】
前記ディスクリプタ群は、複数のディスクリプタが物理的に連続して配置されているディスクリプタテーブルとすることができる。
【００１８】
前記ディスクリプタ群は、複数のディスクリプタが離散的に配置されているディスクリプタチェーンとすることができる。
【００１９】
前記選択手段は、読み出し手段によって読み出された複数のディスクリプタのうち、所定のキューに対応するものを優先的に選択するようにすることができる。
【００２０】
本発明の情報処理装置は、読み出し手段によるディスクリプタの読み出しタイミングを制御する制御手段をさらに含むことができる。
【００２１】
前記生成手段はソフトウェアにより実現され、前記制御手段はハードウェアにより実現されるようにすることができる。
【００２２】
本発明の情報処理方法は、キューからパケット単位のデータを読み出すためのディスクリプタを連ねて構成するディスクリプタ群を、各キューに対応して生成する生成ステップと、生成ステップの処理で各キューに対応して生成された複数のディスクリプタ群のそれぞれからディスクリプタを読み出す読み出しステップと、読み出しステップの処理で読み出された複数のディスクリプタのうちの１つを選択する選択ステップと、選択ステップの処理で選択されたディスクリプタから位置情報を抽出し、抽出した位置情報に基づき、メモリからパケット単位のデータをDMAによって読み出すDMAステップとを含むことを特徴とする。
【００２３】
本発明においては、キューからパケット単位のデータを読み出すためのディスクリプタを連ねて構成するディスクリプタ群が各キューに対応して生成され、生成された複数のディスクリプタ群のそれぞれからディスクリプタが読み出されて、そのうちの１つが選択され、選択されたディスクリプタから抽出される位置情報に基づき、メモリからパケット単位のデータがDMAによって読み出される。
【発明の効果】
【００２４】
本発明によれば、単純なハードウェア構成によってメモリ上に存在する複数のデータのDMA転送を正確に制御することが可能となる。
【発明を実施するための最良の形態】
【００２５】
以下に本発明の実施の形態を説明するが、請求項に記載の構成要件と、発明の実施の形態における具体例との対応関係を例示すると、次のようになる。この記載は、請求項に記載されている発明をサポートする具体例が、発明の実施の形態に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、構成要件に対応するものとして、ここには記載されていない具体例があったとしても、そのことは、その具体例が、その構成要件に対応するものではないことを意味するものではない。逆に、具体例が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その具体例が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
【００２６】
さらに、この記載は、発明の実施の形態に記載されている具体例に対応する発明が、請求項に全て記載されていることを意味するものではない。換言すれば、この記載は、発明の実施の形態に記載されている具体例に対応する発明であって、この出願の請求項には記載されていない発明の存在、すなわち、将来、分割出願されたり、補正により追加されたりする発明の存在を否定するものではない。
【００２７】
請求項１に記載の情報処理装置（例えば、図５の送信装置３０）は、キューからパケット単位のデータを読み出すためのディスクリプタを連ねて構成するディスクリプタ群を、各キューに対応して生成する生成手段（例えば、図６のディスクリプタ設定部４１）と、生成手段によって各キューに対応して生成された複数のディスクリプタ群のそれぞれからディスクリプタを読み出す読み出し手段（例えば、図６のディスクリプタ取得部５２）と、読み出し手段によって読み出された複数のディスクリプタのうちの１つを選択する選択手段（例えば、図６のディスクリプタ選択部５３）と、選択手段によって選択されたディスクリプタから位置情報を抽出し、抽出した位置情報に基づき、メモリからパケット単位のデータをDMAによって読み出すDMA手段（例えば、図６のDMA制御部５４）とを含む。
【００２８】
請求項５に記載の情報処理装置は、読み出し手段によるディスクリプタの読み出しタイミングを制御する制御手段（例えば、図１０のレジスタ更新制御部７１）をさらに含む。
【００２９】
請求項７に記載の情報処理方法は、キューからパケット単位のデータを読み出すためのディスクリプタを連ねて構成するディスクリプタ群を、各キューに対応して生成する生成ステップ（例えば、図９のステップＳ２１）と、生成ステップの処理で各キューに対応して生成された複数のディスクリプタ群のそれぞれからディスクリプタを読み出す読み出しステップ（例えば、図９のステップＳ２４）と、読み出しステップの処理で読み出された複数のディスクリプタのうちの１つを選択する選択ステップ（例えば、図９のステップＳ２５）と、選択ステップの処理で選択されたディスクリプタから位置情報を抽出し、抽出した位置情報に基づき、メモリからパケット単位のデータをDMAによって読み出すDMAステップ（例えば、図９のステップＳ２７）とを含む。
【００３０】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
【００３１】
図５は、本発明の一実施の形態である送信装置の構成例を示している。この送信装置３０は、内蔵するメモリ３３に記録されている（あるいは蓄積される）複数の送信データを、それぞれに設定された送信レートや優先度に対応して、ネットワーク２を介して受信装置３にデータ送信するものである。
【００３２】
送信装置３０は、メモリ３３に記録されているプログラム３６を実行することにより図６に示す機能ブロック（ディスクリプタ設定部４１、デバイスドライバ４２、および割り込み処理部４４）を実現するCPU３１と、データバス３２を介してCPU３１に接続されたメモリ３３、メモリコントローラ３４、およびネットワークカード３５から構成されている。
【００３３】
メモリ３３には、CPU３１によって実行されるプログラム３６（ネットワークカード３５を制御するためのデバイスドライバプログラムを含む）が記録されている。また、メモリ３３には、そのデータ領域４３（図６）に複数のキュー（いまの場合、キューＱ０，Ｑ１）が設けられている。
【００３４】
キューＱ０，Ｑ１それぞれには、送信すべきデータが記録される。なお、キューＱ０には、優先的に送信すべきデータを記録するようにする。以下、キューＱ０に記録されたデータを送信データDQ0と記述し、キューＱ１に記録されたデータを送信データDQ1と記述する。
【００３５】
さらに、メモリ３３には、キューの数に対応する複数のディスクリプタテーブル（いまの場合、ディスクリプタテーブルＴ０，Ｔ１）が設けられている。
【００３６】
メモリコントローラ３４は、ネットワークカード３５から通知される記録開始アドレスaddressおよびパケット長lengthに従い、メモリ３３に記録されている送信データをパケット単位でネットワークカード３５にDMAによって転送させる。
【００３７】
ネットワークカード３５は、CPU３１によってメモリ３３上に記述されたディスクリプタを読み出し、読み出したディスクリプタに従ってメモリコントローラ３４を制御することにより、パケット単位の送信データをDMA転送により取得し、ネットワーク２を介して受信装置３に送信する。
【００３８】
図６は、CPU３１がプログラム３６を実行することによって実現される機能ブロックと、ネットワークカード３５の構成例を示している。
【００３９】
機能ブロックであるディスクリプタ設定部４１、デバイスドライバ４２、および割り込み処理部４４は、CPU３１がプログラム３６を実行することにより実現される。
【００４０】
ディスクリプタ設定部４１は、メモリ３３に設けられたディスクリプタテーブルＴ０を構成する各ディスクリプタに送信データDQ0のパケット単位の情報を記述し、ディスクリプタテーブルＴ１を構成する各ディスクリプタに送信データDQ1のパケット単位の情報を記述する。ここで、パケット単位の情報とは、図４に示されたように、パケットのメモリ３３における記録開始アドレスの上位３２ビットを示すaddress(high)および下位３２ビットを示すaddress(low)、並びにパケット長を示す１６ビットのlengthである。
【００４１】
なお、ディスクリプタテーブルＴ０，Ｔ１は、図３に示されたように、連続的に配置された複数のディスクリプタから構成される。ただし、ディスクリプタテーブルＴ０，Ｔ１の代わりに、図７に示すように離散的に配置された複数のディスクリプタから構成されるディスクリプタチェーンを用いてもよい。ただし、ディスクリプタチェーンを構成する各ディスクリプタには、図８に示すように、パケットのメモリ３３における記録開始アドレスの上位３２ビットを示すaddress(high)および下位３２ビットを示すaddress(low)、並びにパケット長を示す１６ビットのlengthに、次のディスクリプタの記録開始アドレスの上位３２ビットを示すnext pointer(high)および下位３２ビットを示すnext pointer(high)が追加される。
【００４２】
図６に戻り、デバイスドライバ４２は、利用可能となったディスクリプタ、すなわち、ディスクリプタ設定部４１によって記述されたディスクリプタの番号を、ネットワークカード３５のディスクリプタ制御部５１に通知する。
【００４３】
割り込み処理部４４は、ネットワークカード３５の割り込み制御部５６からDMAの終了が通知されたとき、所定の割り込み処理（キューＱ０，Ｑ１を開放する処理等）を行う。
【００４４】
一方、ネットワークカード３５は、ディスクリプタ制御部５１、ディスクリプタ取得部５２、ディスクリプタ選択部５３、DMA制御部５４、送信部５５、および割り込み制御部５６から構成される。
【００４５】
ディスクリプタ制御部５１は、レジスタＲ０，Ｒ１を内蔵しており、デバイスドライバ４２から通知される利用可能なディスクリプタの番号のうち、ディスクリプタテーブルＴ０を構成するディスクリプタの番号はレジスタＲ０に記録し、ディスクリプタテーブルＴ１を構成するディスクリプタの番号はレジスタＲ１に記録する。
【００４６】
ディスクリプタ取得部５２は、キャッシュＣ０，Ｃ１を内蔵しており、ディスクリプタ制御部５１のレジスタＲ０に記録されている番号に基づいて、メモリ３３に設けられたディスクリプタテーブルＴ０から利用可能なディスクリプタを取得してキャッシュＣ０に記録する。また、ディスクリプタ制御部５１のレジスタＲ１に記録されている番号に基づいて、メモリ３３に設けられたディスクリプタテーブルＴ１から利用可能なディスクリプタを取得してキャッシュＣ１に記録する。
【００４７】
ディスクリプタ選択部５３は、ディスクリプタ取得部５２のキャッシュＣ０，Ｃ１のいずれか一方を所定の規則に従って選択し、選択したキャッシュに記録されているディスクリプタを読み出してDMA制御部５４に出力する。なお、ディスクリプタが読み出されたキャッシュＣ０，Ｃ１はディスクリプタ取得部５２によってクリアされる。所定の規則は、いまの場合、優先的に送信すべきデータをキューＱ０に記録するようにしているので、例えば、キャッシュＣ０にディスクリプタが記録されているときにはキャッシュＣ０を選択するようにし、キャッシュＣ０にディスクリプタが記録されていないときだけ、キャッシュＣ１を選択するように定める。
【００４８】
DMA制御部５４は、ディスクリプタ選択部５３から入力されるディスクリプタに記述されている記録開始アドレスaddressとパケット長lengthを読み出し、メモリコントローラ３４に通知してDMAの実行を依頼する。さらに、DMA制御部５４は、利用可能なディスクリプタが存在しない旨の通知をディスクリプタ取得部５２から受け取り、かつ、利用可能な最後のディスクリプタに基づくDMAの終了を示す通知を送信部５５から受け取った場合、割り込み制御部５６にDMAが終了した旨を通知する。
【００４９】
送信部５５は、メモリコントローラ３４による制御に対応してメモリ４５からDMAによって転送されるパケット単位の送信データを、ネットワーク２を介して受信装置３に送信する。割り込み制御部５６は、DMAの終了を示す通知をDMA制御部５４から受け取ったとき、DMAが終了した旨を割り込み処理部４４に通知する。
【００５０】
次に、送信装置３０によるパケット送信処理について、図９のフローチャートを参照して説明する。メモリ３３の設けられたキューＱ０，Ｑ１それぞれには、ユーザの要求に応じて送信データDQ0，DQ1が記録されているものとする。また、レジスタＲ０，Ｒ１、およびキャッシュＣ０，Ｃ１はクリアされているものとする。
【００５１】
ステップＳ２１においてディスクリプタ設定部４１は、キューＱ０に記録されている送信データDQ0に応じ、メモリ３３に設けられたディスクリプタテーブルＴ０の各ディスクリプタに送信データDQ0のパケット単位の情報を記述し、キューＱ１に記録されている送信データDQ1に応じ、メモリ３３に設けられたディスクリプタテーブルＴ１の各ディスクリプタに送信データDQ1のパケット単位の情報を記述する。なお、キューＱ０に送信データDQ0が存在しない場合、ディスクリプタテーブルＴ０のディスクリプタは記述されず、キューＱ１に送信データDQ1が存在しない場合、ディスクリプタテーブルＴ１のディスクリプタは記述されない。
【００５２】
ステップＳ２２においてデバイスドライバ４２は、利用可能となったディスクリプタ、すなわち、ステップＳ２１の処理でディスクリプタ設定部４１により記述されたディスクリプタの番号を、ネットワークカード３５のディスクリプタ制御部５１に通知する。ステップＳ２３においてディスクリプタ制御部５１は、デバイスドライバ４２から通知されたディスクリプタの番号のうち、ディスクリプタテーブルＴ０における利用可能なディスクリプタの番号を用いてレジスタＲ０の値を更新し、ディスクリプタテーブルＴ１における利用可能なディスクリプタの番号を用いてレジスタＲ１の値を更新する。
【００５３】
ステップＳ２４においてディスクリプタ取得部５２は、レジスタＲ０に記録されている番号に基づき、ディスクリプタテーブルＴ０から利用可能なディスクリプタを取得してキャッシュＣ０に記録する。また、レジスタＲ１に記録されている番号に基づいて、ディスクリプタテーブルＴ１から利用可能なディスクリプタを取得してキャッシュＣ１に記録する。なお、キャッシュＣ０，Ｃ１にディスクリプタが既に記録されていて読み出されていない場合、ディスクリプタの取得は行わない。
【００５４】
ステップＳ２５においてディスクリプタ選択部５３は、ディスクリプタ取得部５２のキャッシュＣ０，Ｃ１のいずれか一方を選択し、選択したキャッシュに記録されているディスクリプタを読み出してDMA制御部５４に出力する。選択の規則は、例えば、キャッシュＣ０にディスクリプタが記録されているときにはキャッシュＣ０を優先するようにする。
【００５５】
ステップＳ２６においてディスクリプタ選択部５３は、選択したキャッシュＣ０またはＣ１からディスクリプタを読み出てDMA制御部５４に出力する。ディスクリプタ取得部５２はディスクリプタが読み出されたキャッシュＣ０またはＣ１をクリアする。ステップＳ２７においてDMA制御部５４は、ディスクリプタ選択部５３から入力されたディスクリプタに記述されている記録開始アドレスaddressとパケット長lengthを読み出し、メモリコントローラ３４に通知してDMAの実行を依頼する。これに対応して、メモリコントローラ３４は、メモリ３３の、通知された記録開始アドレスaddressからパケット長length分のデータをDMAにより送信部５５に転送する。送信部５５は、DMA転送されたパケット単位の送信データDQOまたはDQ1を、ネットワーク２を介して受信装置３に送信する。
【００５６】
ステップＳ２８においてディスクリプタ取得部５２は、レジスタＲ０，Ｒ１に記憶されている番号に対応するディスクリプタのうち、未取得のものが残っているかあるか否かを判定する。未取得のディスクリプタが残っていると判定された場合、ステップＳ２４に戻り、それ以降の処理が繰り返される。そしてステップＳ２８において、未取得のディスクリプタが残っていないと判定された場合、処理はステップＳ２９に進む。ステップＳ２９においてDMA制御部５４は、割り込み制御部５６にDMAが終了した旨を通知する。この通知に対応し、割り込み制御部５６は、DMAが終了した旨を割り込み処理部４４に通知する。ステップＳ３０において割り込み処理部４４は、当該通知に対応し、所定の割り込み処理（キューＱ０，Ｑ１を開放する処理等）を行う。なお実際には、割り込み制御部５６からの通知に対応して、割り込み処理部４４を実現するプログラムが起動されて、所定の割り込み処理が行われる。以上で、送信装置３０によるパケット送信処理の説明を終了する。
【００５７】
以上説明したパケット送信処理によれば、メモリ３３のキューＱ０に記録されている送信データDQ0を、メモリ３３のキューＱ１に記録されている送信データDQ1よりも優先的にネットワークカード３５にDMA転送し、ネットワーク２を介して送信することができる。当然ながら、ステップ２５においてキャッシュＣ０，Ｃ１のいずれかを選択するときの規則を変更すれば、メモリ３３のキューＱ１に記録されている送信データDQ1を優先することも可能である。
【００５８】
また、パケット送信処理は、パケット単位でディスクリプタが記述されるので、パケット長が一定ではない場合においても、すなわち、可変長パケットにより構成される送信データを送信する場合に適用することが可能である。
【００５９】
次に、図１０はCPU３１がプログラム３６を実行することによって実現される機能ブロックと、ネットワークカード３５の他の構成例を示している。この構成例は、キューＱ０からのMDA転送の間隔を調整して、送信データDQ0がネットワーク２を介して送信されるときの送信レートを制御することを目的とし、図６に示された構成例にレジスタ更新制御部７１が追加されている。レジスタ更新制御部７１以外の構成要素については、図６と同様であり、同一の符号を付与しているので、その説明は省略する。
【００６０】
前提として、送信データDQ0はキューＱ０上の予め定められたアドレスに記録されるものとし、ディスクリプタテーブルＴ０の各ディスクリプタには、キューＱ０上の予め定められたアドレスと所定のパケット長を示す情報が予め記述されているものとする。
【００６１】
レジスタ更新制御部７１は、ディスクリプタ制御部５１のレジスタＲ０に記録される番号（ディスクリプタテーブルＴ０における利用可能なディスクリプタを示す）を所定の周期で更新する。他方のレジスタＲ１は、デバイスドライバ４２からの通知に対応してディスクリプタ制御部５１により更新される。レジスタＲ０を更新するレジスタ更新制御部７１はハードウェアであり、レジスタＲ１を更新するトリガとなる通知を行うデバイスドライバ４２はソフトウェアであるので、レジスタＲ０の更新は、レジスタＲ１の更新よりも正確に制御される。
したがって、キューＱ０に記録された送信データDQ0のDAM転送の間隔を調整することができるので、送信データDQ0がネットワーク２を介して送信されるときの送信レートを安定させ、送信データDQ0がバースト(burst)的に送信されることを抑止することができ、いわゆるトラフィックシェーピングを実現することが可能となる。
【００６２】
例えば、送信データDQ0が３０fps(flame per second)の画像データであって、１／３０秒毎に１フレームに相当する１パケット分のデータがキューＱ０上の予め定められたアドレスに蓄積される場合、１／３０秒間隔でレジスタ更新制御部７１がレジスタＲ０の値（読み出すべきディスクリプタの番号）を更新するようにすれば、キューＱ０に送信データDQ0が追加記録される毎、追加されたパケットをネットワークカード３５にDMA転送し、ネットワークカード３５からネットワーク２を介して安定した送信レートで送信することが可能となる。
【図面の簡単な説明】
【００６３】
【図１】ネットワークを介してデータを送受信するシステムの一例を示す図である。
【図２】図１の送信装置による動作を説明するフローチャートである。
【図３】複数のディスクリプタから構成されるディスクリプタテーブルの一例を示す図である。
【図４】DMAに用いられるディスクリプタのデータ構造を示す図である。
【図５】本発明を適用した送信装置の構成例を示すブロック図である。
【図６】図５のCPUより実現される機能ブロックとネットワークカードの構成例を示すブロック図である。
【図７】ディスクリプタテーブルに代わるディスクリプタチェーンの一例を示す図である。
【図８】ディスクリプタチェーンを構成するディスクリプタのデータ構造を示す図である。
【図９】図５の送信装置によるパケット送信処理を説明するフローチャートである。
【図１０】図５のCPUより実現される機能ブロックとネットワークカードの他の構成例を示すブロック図である。
【符号の説明】
【００６４】
２  ネットワーク，  ３  受信装置，  ３０  送信装置，  ３１  CPU，  ３２  データバス，３３  メモリ，  ３４  メモリコントローラ，  ３５  ネットワークカード，  ３６  プログラム，  ４１  ディスクリプタ設定部，  ４２  デバイスドライバ，  ４４  割り込み処理部，  ５１  ディスクリプタ制御部，  ５２  ディスクリプタ取得部，  ５３  ディスクリプタ選択部，  ５４  DMA制御部，  ５５  送信部，  ５６  割り込み制御部，  ７１  レジスタ更新制御部
【図１】
2006293800.tif 000003
【図２】
2006293800.tif 000004
【図３】
2006293800.tif 000005
【図４】
2006293800.tif 000006
【図５】
2006293800.tif 000007
【図６】
2006293800.tif 000008
【図７】
2006293800.tif 000009
【図８】
2006293800.tif 000010
【図９】
2006293800.tif 000011
【図１０】
2006293800.tif 000012