データ転送装置、データ転送方法およびプログラム
【課題】 チェーンリストによるDMA転送において転送データの任意の位置に挿入、削除を行いながら転送すること。
【解決手段】 データ転送装置は、転送元のデータの配置情報を示す第1のリスト、転送先のデータの配置情報を示す第2のリスト、挿入するデータの配置情報を示す第3のリスト、および削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第4のリストを取得する取得部と、受信した転送要求に従って、取得部により取得された第1のリスト乃至第4のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する制御部と、制御部により生成されたデータを転送先に転送する転送部と、を備える。
【解決手段】 データ転送装置は、転送元のデータの配置情報を示す第1のリスト、転送先のデータの配置情報を示す第2のリスト、挿入するデータの配置情報を示す第3のリスト、および削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第4のリストを取得する取得部と、受信した転送要求に従って、取得部により取得された第1のリスト乃至第4のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する制御部と、制御部により生成されたデータを転送先に転送する転送部と、を備える。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、チェーンリストによるDMA(Direct Memory Access)転送を行うデータ転送装置、データ転送方法およびプログラムに関する。
【背景技術】
【0002】
メモリや周辺機器との間でのデータ転送では、CPUを介して行うとCPUの負荷が高くなるためDMAを利用して行うのが一般的である。このDMA転送において、転送したい連続データの途中に別のアドレスに配置されたデータを途中に挿入して転送するためには、挿入する前のデータを転送してから、挿入するデータを転送し、挿入する後のデータを転送するということが求められる。そのため一連のデータ転送の中でCPU等の主制御部の介在を必要とする。この問題に対し、特許文献1では、予め挿入する位置等の設定を行うことでCPUの介在なしにDMAの処理のみでデータを挿入して転送を行うというDMAが提案されている。
【0003】
また、転送を行いたいデータが非連続に配置されている場合において、予め転送を行うチェーンリストを作成して、そのチェーンリストをもとに転送を行うというスキャッタ・ギャザー機能付きのDMA装置が知られている。
【0004】
一方で、近年汎用PCのみならず組み込み機器においても様々な処理を高速に実行可能にすることが要求されている。これをMainCPUでのソフトウェアによる処理のみで要求性能を達成するには、組み込み機器が搭載するプロセッサ能力をはるかに超えてしまう。そこで、補助的なデバイスを付加して処理性能を向上させており、その一つの手法としてシステムの一部機能をサブシステム化して実現する構成が一般化している。このようにMainCPUでの処理をサブシステムにオフロードして処理を行う処理系においては、一般的にMainCPUによってサブシステムでの処理の前処理や後処理を行っている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2001-167046号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
MainCPUが主記憶上に作成した転送元データ、転送先バッファ等のチェーンリストに対してサブシステム側でチェーンリストに従いスキャッタ・ギャザー転送を行う場合がある。この様な場合において、サブシステム側の処理の結果、転送するデータの途中にデータを挿入する必要が発生することがある。特許文献1に示す方法は連続するデータの途中にデータを挿入するというDMA装置のため、非連続に配置されチェーンリストで構成されたデータの途中に挿入するという要求に対しては効果がない。つまり従来同様、チェーンリストによる複数回DMA転送を行う、もしくはチェーンリストを修正してDMA転送を行う必要となる。しかし、チェーンリストは連続領域に配置する必要があり、MainCPUが管理するメモリ領域に配置されているため、チェーンリストを追加、修正を行うことができない。そこで、MainCPUが作成したチェーンリストをサブシステムが管理するメモリ領域にコピーしてからチェーンリストを追加、修正を行いDMA転送する必要がある。
【0007】
また、デバイス等からサブシステムが取得したデータをサブシステムでの処理の結果、一部データを削除してからMainCPUへ受け渡す場合がある。この様な場合、デバイスからデータを取得する際に使用したチェーンリストを修正してからMainCPUが用意した転送先バッファへ転送するか、チェーンリストにあうようにデータそのものを一部コピーしてから転送する必要がある。
【0008】
つまり、チェーンリストで構成されたデータの一部を挿入、削除する場合においては一度作成したチェーンリストをそのまま使用することはできない。そのために、チェーンリストを作りかえるか、データそのものをチェーンリストに合う形にコピーして配置する必要がある。これらはいずれも非効率であり、CPUの負荷を高めてしまう。
【0009】
上述の課題を鑑み、チェーンリストによるDMA転送において転送データを任意の位置に挿入、削除しながら転送することが可能なデータ転送技術を提供することを目的とする。
【課題を解決するための手段】
【0010】
上記の目的を達成する本発明の一つの側面にかかるデータ転送装置は、転送元のデータの配置情報を示す第1のリスト、転送先のデータの配置情報を示す第2のリスト、挿入するデータの配置情報を示す第3のリスト、および削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第4のリストを取得する取得手段と、
受信した転送要求に従って、前記取得手段により取得された前記第1のリスト乃至第4のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する制御手段と、
前記制御手段により生成された前記データを前記転送先に転送する転送手段と、を備えることを特徴とする。
【発明の効果】
【0011】
本発明によれば、チェーンリストによるDMA転送において転送データの任意の位置に挿入、削除を行いながら転送することが可能になる。
【0012】
DMA処理中にCPU等の主制御部の介在なしに転送することができ、CPUの負荷を軽減できる。また、あらかじめ作成されたチェーンリストをそのまま利用可能なため、追加、修正やチェーンリストのコピーといった主制御部で行うDMA転送の前処理の負荷を減らすことができる。
【0013】
またモード指定により、各リストの使用の有無を組み合わせてDMA転送することができることにより、汎用的に利用可能となる。
【図面の簡単な説明】
【0014】
【図1】第1及び第2実施形態に係るTOEサブシステムの構成を示す図。
【図2】第1実施形態に係るデータパス制御部の構成を説明する図。
【図3】第2実施形態に係るデータパス制御部の構成を説明する図。
【図4】第1及び第2実施形態に係る通信装置の構成例を示すブロック図。
【図5】第1及び第2実施形態に係るディスクリプタの構成を説明する図。
【図6】第1及び第2実施形態に係るデータ転送処理と各種設定パラメータの関係を説明する図。
【図7】第1及び第2実施形態に係るパケット送信時のディスクリプタ及び各チェーンリストの設定例を説明する図。
【図8】第1実施形態に係るディスクリプタ制御部の転送元チェーンリスト再構成処理を説明する図。
【図9】第1実施形態に係るディスクリプタ制御部の転送先チェーンリスト再構成処理を説明する図。
【図10】第2実施形態に係る挿入リスト制御部の挿入リスト制御処理を説明する図。
【図11】第2実施形態に係る削除リスト制御部の削除制御処理を説明する図。
【発明を実施するための形態】
【0015】
(第1実施形態)
通信処理をオフロードするTOE(TCP/IP Offload Engine)サブシステム105を含む通信装置の構成の例について説明する。図1及び図4のシステムバス102は英国ARM社が提唱するAMBA3.0AXI(Advanced eXtensible Ingerface)仕様に代表されるクロスバースイッチ構造のオンチップバスである。システムバス102は通信装置に求められる送受信データの並行転送動作が可能である。TOEサブシステム105は通信装置のシステムバス102に接続されている。通信装置はTOEサブシステム105が備えるPHY(Physical LayerChip)134を介してネットワーク135に接続されている(図1参照)。
【0016】
HD(Hard Disk)装置406は二次記憶制御部405を介してシステムバス102に接続されている(図4参照)。HD装置406には通信装置の機能を実現するソフトウェアとその関連データと、各サブシステム内のサブプロセッサで動作するファームウエアとその関連データとが格納されている。更に、HD装置406は通信装置の動作履歴や通信履歴等の履歴情報を格納する。ソフトウェアは、通信装置の各機能を実現するアプリケーションソフトウエアと、アプリケーションプロトコルと、関連ハードウエアを制御するためのデバイスドライバと、OS(Operating System)と備えている。
【0017】
Flashメモリ413はメモリ制御部412を介してシステムバス102に接続されている。Flashメモリ413は書き換え可能な不揮発性メモリである。Flashメモリ413には通信装置の起動時に動作するブートプログラムと通信装置の初期状態設定に必要なパラメータとが格納される。更に、Flashメモリ413には通信装置の起動時に各ハードウエアを制御するためのデバイスドライバプログラムと各ハードウエア起動時の設定パラメータ等とが保存される。
【0018】
コンピュータである通信装置の主プロセッサ101はFlashメモリ413内のブートプログラムを実行する。更に、主プロセッサ101は通信装置の各ハードウエアとサブシステムとを初期化した後、HD装置406に格納されているソフトウェアを主メモリ104にロードして、ソフトウェアが備えるOSを起動する。また、主プロセッサ101は、サブシステムの初期化時にTOEサブシステム105に内蔵されているサブプロセッサAからEの5個のサブプロセッサ(111〜115)が実行する各ファームウエアを主メモリ104上に展開して、各サブプロセッサを起動する。各サブプロセッサ(111〜115)は主メモリ104上に展開された各ファームウエアを、各サブプロセッサに内蔵する命令キャッシュメモリにロードして、ファームウエアプログラムを実行する。
【0019】
通信装置のシステムバス102には、各ハードウエアやTOEサブシステム105からの割り込みイベントを主プロセッサ101に伝達する、割り込み制御部401が接続されている。また、通信装置は、ソフトウェア等により起動され、時間計測やタイムアウトイベントを発生させるタイマ402を備える。また、通信装置は、通信装置の動作モードの設定やIP(Internet Protocol)アドレスに代表される各通信パラメータを入力するための入力キー410を備える。更に、通信装置は、アプリケーション、通信装置の状態や設定内容等を表示する表示装置404と、IEEE802.11a/b/g/n規格に準拠した無線LANに接続するための無線LANサブシステム408とを備える。
【0020】
TOEサブシステム105は、内部にサブシステムバス123を備え、バスブリッジ116を介してシステムバス102に接続されている(図1参照)。このサブシステムバス123はクロスバースイッチ接続である。TOEサブシステム105が内蔵する5個の各サブプロセッサ(111〜115)は、サブシステムバス123に接続されている。これらの各サブプロセッサによるマルチプロセッサ処理により、主システムからTCP/IPプロトコル処理をオフロードし、高速に実行する。
【0021】
また、TOEサブシステム105は、5個の各サブプロセッサA〜E(111〜115)間の通信部と、情報共有の為の共有メモリ125と、TCP/IPプロトコル処理に必要な時間計測及びタイムアウトイベントを発生させる通信タイマ124とを備える。さらに、TOEサブシステム105は、ネットワーク135に接続するためのPHY134とMAC(Media Access Control)133とを備える。PHY134はOSI参照モデルの第1層に位置するPHY(物理)層のプロトコル処理と電気信号を扱うハードウエアである。MAC133はOSI参照モデルのデータリンク層(第2層)の下位副層に相当するMAC層のプロトコルを処理するハードウエアである。
【0022】
TOEサブシステム105は、受信パケットデータと送信パケットデータとを、例えば、主メモリ104あるいは共有メモリ125であるメモリデバイスと、MAC133との間でDMA転送するデータパス制御部132を備える。データパス制御部132は転送処理中に、パケットデータのチェックサム演算を行う。さらに、TOEサブシステム105は、プロトコル処理の様々な管理情報の格納と検索処理とを行う連想メモリを保有する検索装置122を備える。
【0023】
TOEサブシステム105は、暗号通信プロトコル処理を実行する。暗号通信プロトコルとしては、IPsec(Security Architecture for Internet Protocol)などがある。また、SSL(Secure Socket Layer)、TLS(Transport Layer Security)等の暗号通信プロトコル処理も実行する。そのために、TOEサブシステム105は鍵管理部126と、乱数発生器127と、暗号器129とを備える。鍵管理部126は暗号通信プロトコル処理のために生成した暗号鍵と、乱数及び素数を機密に保持する。乱数発生器127は、暗号処理に必要となる乱数値を生成する。また、TOEサブシステム105が備える暗号器129は、米国商務省標準技術局(NIST)によって選定されたAES(Advanced Encryption Standard)暗号器を備える。また、認証やデジタル署名などに使われるSHA−1(Secure Hash Algorithm 1)ハッシュ関数器を備える。また、RFC1321としてIETFで標準化されているMD5(Message Digest 5)ハッシュ関数器等を備える。
【0024】
(データパス制御部132の構成例)
TOEサブシステム105が備えるデータパス制御部132の構成例を説明する。図2のデータパス制御部132はTOEサブシステム105のサブシステムバス123及び通信装置のシステムバス102、MAC133に接続されている。データパス制御部132は転送元のデータの配置情報を示す第1のリストおよび転送先のデータの配置情報を示す第2のリストを取得する。また、データパス制御部132は挿入するデータの配置情報を示す第3のリストおよび削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第4のリストを取得する。そして、データパス制御部132は、受信した転送要求に従って、取得した第1のリスト乃至第4のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する。データパス制御部132は生成したデータを転送先に転送する。
【0025】
データパス制御部132は各サブプロセッサ及び、主プロセッサ101から要求されることによって、メモリ間やデバイスとメモリ間の転送処理を実行する。その際、各プロセッサは共有メモリ125、もしくは主メモリ104に図5のディスクリプタ501を配置する。ディスクリプタ501は連続領域に配置する。さらに転送モード503に指定したモードで使用するチェーンリストをディスクリプタ501と同様に共有メモリ125もしくは主メモリ104に配置する。各チェーンリストはそれぞれが連続領域となるように配置する。
【0026】
ディスクリプタアドレス502をデータパス制御部132のレジスタ制御部201に設定することにより転送要求を行う。転送要求を受信すると、レジスタ制御部201はディスクリプタ制御部203へディスクリプタアドレス502を通知する。ディスクリプタ制御部203はディスクリプタ501の読み込み処理を読込制御部204から行う。読込制御部204はバス制御部202を介してディスクリプタ501の読込を行う。ディスクリプタ501を読み込んだディスクリプタ制御部203はディスクリプタ501の転送モード503に設定されたモードに従い、各リストを処理開始時に一度に取得する。ディスクリプタ制御部203は転送モード503によって転送元チェーンリスト514、転送先チェーンリスト515、挿入チェーンリスト516、削除チェーンリスト517をそれぞれ任意に使用するか否かを設定することができる。
【0027】
転送モード503が転送元チェーンリスト514(第1のリスト)を使用する場合、データパス制御部132はディスクリプタ501の転送元チェーンリストアドレス504から転送元チェーンリストユニット数510に設定された値分のリストを取得する。転送元チェーンリスト514は転送する転送元のデータが配置されているアドレス(物理的に非連続なアドレス領域を示す配置情報)及びアドレスから読み込まれるデータのサイズの組を1つの構成単位としたリストである。転送モード503が転送元チェーンリスト514を使用しない設定であった場合、転送元チェーンリストアドレス504に指定されたアドレスを転送元アドレスとして転送元から連続領域の読み込みを行う。
【0028】
転送モード503が転送先チェーンリスト515(第2のリスト)を使用する設定であった場合、ディスクリプタ501の転送先チェーンリストアドレス505のアドレスから転送先チェーンリストユニット数511に設定された値分のリストを取得する。転送先チェーンリスト515はデータが配置される転送先のアドレス(物理的に非連続なアドレス領域を示す配置情報)およびアドレスから書き込まれるデータサイズの組を1つの構成単位としたリストである。転送モード503が転送先チェーンリスト515を使用しない設定であった場合、転送先チェーンリストアドレス505に指定されたアドレスを転送先アドレスとして転送先へ連続領域の書き込みを行う。
【0029】
転送要求にデータの更新の指定が含まれている場合、更新の指定の内容と第1および第2のリストの配置情報とから第1および第2のリストの配置情報の内容は再構成される。
【0030】
更新の指定として転送モード503が挿入チェーンリスト516(第3のリスト)を使用する設定であった場合、挿入チェーンリストアドレス506のアドレスから挿入チェーンリストユニット数512に設定された値分のリストを取得する。挿入チェーンリスト516は、挿入するデータの配置されているアドレス、そのアドレスから転送する挿入元データのサイズ、転送元のデータに対する挿入開始の位置を示す挿入オフセットアドレスの組を1つの構成単位としたリストである。転送モード503が挿入チェーンリスト516を使用しない設定であった場合、挿入チェーンリストアドレス506のフィールドを無視し、データを挿入しての転送を行わない。
【0031】
更新の指定として転送モード503が削除チェーンリスト517(第4のリスト)を使用する設定であった場合、削除チェーンリストアドレス507のアドレスから削除チェーンリストユニット数513に設定された値分のリストを取得する。削除チェーンリスト517は削除開始の位置を示す削除オフセットアドレスおよび、その削除オフセットアドレスから削除するデータのデータサイズの組を1つの構成単位(1ユニット)としたリストである。転送モード503が削除チェーンリスト517を使用しない設定であった場合、削除チェーンリストアドレス507のフィールドを無視し、データを削除しての転送を行わない。
【0032】
ディスクリプタ制御部203は、取得した各リストから転送元リスト、転送先リストをローカルメモリ210に再構成(作成)する。ディスクリプタ制御部203は、ローカルメモリ制御部209を介してローカルメモリ210にアクセスを行う。
【0033】
ディスクリプタ制御部203がローカルメモリ210に作成したリストに従い転送元リスト制御部208、転送先リスト制御部207の制御によりデータ転送を行う。転送元リスト制御部208は転送元リストに示されたアドレスから指定サイズ分のデータを、読込制御部204を介してデータを読み込む。読み出したデータはディスクリプタ制御部203、チェックサム演算部206を経由して転送先リスト制御部207へと転送される。チェックサム演算部206では転送データのチェックサム計算を行う。
【0034】
転送先リスト制御部207は転送先リストに示されたアドレスへ指定サイズ分のデータを、書込制御部205を介してデータを書き込む。ディスクリプタ制御部203はディスクリプタ501の転送サイズ508に設定されたサイズに達すると転送処理を終了する。転送が終了すると、終了ステータス509にチェックサム計算結果および、転送結果のステータスを書き込む。
【0035】
本実施形態では以上のようなディスクリプタによりデータパス制御部132に各種設定パラメータやチェーンリストを与える構成としたが、この構成に限られず、データパス制御部132に情報を与えられる構成であればよい。
【0036】
(データ転送処理と各種設定パラメータの関係)
図6を参照してデータ転送処理を例示的に説明すると共に、各リストに設定したアドレス、サイズ、オフセットの関係を説明する。図6に示すデータ転送では転送元チェーンリストユニット数510を4ユニット、転送先チェーンリストユニット数511を3ユニット、挿入チェーンリストユニット数512を2ユニット、削除チェーンリストユニット数513を1ユニットとして説明する。
【0037】
転送元チェーンリスト514は転送元アドレスおよび転送元データサイズの組を1ユニットとするリストである。4ユニットは転送元アドレスI 610、転送元サイズI 612、転送元アドレスII615、転送元サイズII616、転送元アドレスIII617、転送元サイズIII620、転送元アドレスIV624、転送元サイズ625で構成され得る。
【0038】
転送先チェーンリスト515は転送先アドレスおよび転送先データサイズの組を1ユニットとするリストである。転送先チェーンリストユニット数511における3ユニットは、例えば、転送先アドレスI 633、転送先サイズI 637、転送先アドレスII638、転送先サイズII640、転送先アドレスIII641、転送先サイズIII644で構成され得る。
【0039】
挿入チェーンリスト516は挿入元アドレスと挿入オフセットと挿入データサイズとの組を1ユニットとするリストである。挿入チェーンリスト516における2ユニットは、例えば、挿入元アドレスI 626、挿入オフセットI、挿入サイズI 627、挿入元アドレスII628、挿入オフセットII、挿入サイズII630で構成され得る。挿入オフセットIはオフセットI 645とオフセットII646を合計した値となる。挿入オフセットIIはオフセットI 645、オフセットII646、オフセットIII647、オフセットIV648を合計した値となる。
【0040】
削除チェーンリスト517は削除オフセットおよび削除データサイズの組を1ユニットとするリストである。削除チェーンリスト517における1ユニットは削除オフセットI、削除サイズIで構成され得る。削除オフセットIはオフセットI 645と等しい値となり、削除サイズIはオフセットII646と等しい値となる。
【0041】
転送サイズ508は転送元サイズI 612、転送元サイズII616、転送元サイズIII620、転送元サイズIV625、挿入サイズI 627、挿入サイズII630を合計した値となる。
【0042】
本実施形態では以上のように転送サイズ508を判断して転送する例を示したが、挿入チェーンリスト516の挿入サイズを含めずに、転送サイズ508は転送元チェーンリスト514から読み込むサイズであってもよい。この場合、転送サイズ508は転送元サイズI 612、転送元サイズII616、転送元サイズIII620、転送元サイズIV625を合計した値となる。
【0043】
また削除チェーンリスト517の削除サイズについても転送サイズ508に含めてもよいし、含めない方法であってもよい。つまり転送サイズ508はデータ転送において整合性がとれて処理可能であればよい。実際には、データが書き込まれるサイズを転送サイズ508に設定することが望ましい。
【0044】
以上の設定で転送処理を開始すると、点線矢印601に示すように転送元アドレスI 610から転送先アドレスI 633へと転送元サイズI−A613分のデータが転送される。
【0045】
次に転送サイズが、オフセットI 645と等しい値で示される削除オフセットIに達すると、転送元サイズI−Aから削除サイズI(オフセットII646)分のデータが読み捨てられる。つまり、転送元の領域(Src−I−A)に連続する転送元の領域(Src―I−B)の転送元アドレスI−B611から転送元サイズI−B614分のデータは転送先への書き込みが行われない。
【0046】
次に転送サイズが、オフセットI 645とオフセットII646を合計した値で示される挿入オフセットIに達すると点線矢印602に示すように挿入元アドレスI626から転送先アドレスI−B634へと挿入サイズI 627分のデータが転送される。次に点線矢印603に示すように転送元アドレスII615から転送先アドレスI−C635へと転送元サイズII616分のデータが転送される。
【0047】
次に点線矢印604に示すように転送元アドレスIII617から転送先アドレスI−D636へと転送元サイズIII−A621分のデータが転送される。次に点線矢印605に示すように転送元アドレスIII−B618から転送先アドレスII638へと転送元サイズIII−B622分のデータが転送される。
【0048】
次に転送サイズが挿入オフセットII(オフセットI、II、III、IVの合計)に達すると点線矢印606に示すように挿入元アドレスII628から転送先アドレスII−B639へと挿入サイズII−A631分のデータが転送される。続いて点線矢印607に示すように挿入元アドレスII−B629から転送先アドレスIII641へと挿入サイズII−B632分のデータが転送される。次に点線矢印608に示すように転送元アドレスIII−C619から転送先アドレスIII−B642へと転送元サイズIII−C623分のデータが転送される。次に点線矢印609に示すように転送元アドレスIV624から転送先アドレスIII−C643へと転送元サイズIV624分のデータが転送される。以上の転送で転送サイズ508に達したため転送処理は終了する。
【0049】
(ディスクリプタ及び各チェーンリストの設定例)
図7を参照してパケット送信時のディスクリプタ及び各チェーンリストの設定例について説明する。本図ではIPv6におけるUDPデータグラムにIPsec(Security Architecture for Internet Protocol)のAH(Authentication Header)処理を行なう。そして、フラグメント処理をしてパケットをMACのFIFOへ転送する場合の処理について説明する。なお本転送処理では第1フラグメントの転送と第2フラグメントの転送を行うため2回の転送処理を行う。
【0050】
主プロセッサ101により配置された送信データが主メモリ104の非連続領域に転送元チェーンリストで構成されている。なおMACヘッダ、IPv6ヘッダ、UDPヘッダは未完成のまま主メモリ104に配置され、TOEサブシステム105内のサブプロセッサの処理によって完成されたヘッダを形成する。さらにTOEサブシステム105のサブプロセッサ及び各HWアクセラレータの処理によってIPsec処理が行われる。
【0051】
検索装置122を利用してセキュリティポリシー(SP)を検索した結果、AH処理を行う必要がある場合、さらにセキュリティアソシエーション(SA)を検索する。そして鍵管理部126、暗号器129を利用して整合性確認値(ICV)の計算等が行われ、サブプロセッサによってAHヘッダが形成される。その後サブプロセッサによってフラグメント処理が行われ、フラグメント拡張ヘッダが形成される。AHヘッダ及びフラグメント拡張ヘッダは共有メモリ125に配置される。なお、IPsec処理やフラグメント処理等追加でのTOEサブシステム105の処理が無い場合は主プロセッサ101により配置された送信データをそのままMAC133のFIFO703へと順次転送する。本図では主メモリ104に非連続領域に配置された送信データに共有メモリ125に配置したAHヘッダ、フラグメント拡張ヘッダを挿入してまず初めに第1フラグメントパケットをMAC133のFIFO703へと順次転送する。1パケット目先頭701が指しているパケットが第1フラグメントパケットである。次に第2フラグメントパケット様にフラグメント拡張ヘッダの修正が行われる。そして同様にして、主メモリ104に非連続領域に配置された送信データに共有メモリ125に配置したフラグメント拡張ヘッダを挿入し、第1フラグメントパケットで転送したUDPヘッダ、ペイロードを削除して第2フラグメントパケットを順次転送する。2パケット目先頭702が指しているパケットが第2フラグメントパケットである。MAC133のFIFO703へ転送されるとパケットの先頭にはSOF(Start Of Frame)が、パケットの終端にはEOF(End Of Frame)がデータ転送とは別にMAC133によってFIFO703に挿入される。
【0052】
次に1回目の第1フラグメントパケットの転送、2回目の第2フラグメントパケットの転送におけるディスクリプタ及び、各チェーンリストの設定について説明する。
【0053】
1回目のディスクリプタ501、各チェーンリストについて説明する。転送モード503は転送元チェーンリスト514及び挿入チェーンリスト516を使用し、転送先チェーンリスト515及び削除チェーンリスト517を使用しない。
【0054】
転送元チェーンリスト514は転送元アドレスI、転送元サイズI、転送元アドレスII、転送元サイズII、転送元アドレスIII、転送元サイズIII、転送元アドレスIV、転送元サイズIV、転送元アドレスV、転送元サイズVで構成される。
【0055】
このチェーンリストのアドレスを転送元チェーンリストアドレス504に設定する。転送元アドレスI 704はMACヘッダの先頭アドレスを、転送元サイズIはMACヘッダのサイズを示している。転送元アドレスII705はIPv6ヘッダの先頭アドレスを、転送元サイズII711はIPv6ヘッダのサイズを示している。転送元アドレスIII706はUDPヘッダの先頭アドレスを、転送元サイズIII712はUDPヘッダのサイズを示している。転送元アドレスIV707はペイロードの先頭アドレスを、転送元アドレスV708はペイロードの途中のアドレスを、転送元サイズIV713及び転送元サイズV714の合計はペイロードのサイズを示している。
【0056】
転送先チェーンリストアドレス505にはMAC133のFIFO703のアドレスである転送先アドレス728を設定する。挿入チェーンリスト516は1回目かつ2回目挿入元アドレス717、1回目挿入オフセット721、1回目かつ2回目挿入サイズI 719、1回目挿入元アドレスII720、1回目挿入オフセットII721、1回目挿入サイズII720で構成される。このチェーンリストのアドレスを挿入チェーンリストアドレス506に設定する。1回目かつ2回目挿入元アドレスI 717はフラグメント拡張ヘッダの先頭アドレスを、1回目挿入オフセットI 721はフラグメント拡張ヘッダを挿入する位置を、1回目かつ2回目挿入サイズI 719はフラグメント拡張ヘッダのサイズを示している。1回目挿入元アドレスII720はAHヘッダの先頭アドレスを、1回目挿入オフセットII721はAHヘッダを挿入する位置を、1回目挿入サイズII720はAHヘッダのサイズを示している。削除チェーンリスト517は使用しないため削除チェーンリストアドレス507には何も設定しない。転送サイズ508には1回目転送サイズ726を設定する。1回目転送サイズ726は第1フラグメントパケットの全長を示している。転送元チェーンリストユニット数510には5を設定し、転送先チェーンリストユニット数511には何も設定しない。また挿入チェーンリストユニット数512には2を設定し、削除チェーンリストユニット数513には何も設定しない。
【0057】
次に2回目のディスクリプタ501、各チェーンリストについて説明する。転送モード503は転送元チェーンリスト514、挿入チェーンリスト516及び、削除チェーンリスト517を使用し、転送先チェーンリスト515は使用しない。転送元チェーンリスト514、転送元チェーンリストアドレス504は1回目と同じ設定をする。また転送先チェーンリストアドレス505も同様に1回目と同じ設定をする。挿入チェーンリスト516は1回目かつ2回目挿入元アドレスI 717、2回目挿入オフセットI 723、1回目かつ2回目挿入サイズI 719で構成される。このチェーンリストのアドレスを挿入チェーンリストアドレス506に設定する。1回目かつ2回目挿入元アドレスI 717はフラグメント拡張ヘッダの先頭アドレスを、2回目挿入オフセットI 723はフラグメント拡張ヘッダを挿入する位置を、1回目かつ2回目挿入サイズI 719はフラグメント拡張ヘッダのサイズを示している。削除チェーンリスト517は2回目削除オフセットI 724、2回目転送サイズ−Bかつ2回目削除サイズI 725で構成される。このチェーンリストのアドレスを削除チェーンリストアドレス507に設定する。2回目削除オフセットI 724は第2フラグメントパケットのペイロードの位置を、2回目転送サイズ−Bかつ2回目削除サイズ725は第1フラグメントで送信したペイロードのサイズを示している。転送サイズ508には2回目転送サイズ−A727と2回目転送サイズ−Bかつ2回目削除サイズI 725との合計サイズを設定する。2回目転送サイズ−A727は第2フラグメントパケットの全長を、2回目転送サイズ−Bかつ2回目削除サイズI 725は削除チェーンリストによって削除されるペイロードのサイズを示している。転送元チェーンリストユニット数510には5を設定し、転送先チェーンリストユニット数511には何も設定しない。また挿入チェーンリストユニット数512には1を設定し、削除チェーンリストユニット数513には1を設定する。
【0058】
(転送元チェーンリストの挿入再構成処理)
ディスクリプタ制御部203による転送元チェーンリストの挿入再構成処理について説明する。図8におけるステップS801において、ディスクリプタ501に設定された転送モード503が転送元チェーンリスト514を使用するモードであるかを調べる。
【0059】
ステップS802において、ステップS801で転送元チェーンリスト514を使用しないモードと判定した場合(S801−No)、転送元アドレスから1ユニットの転送元チェーンリストを仮構成する。この際、転送元サイズは未定とする。
【0060】
ステップS803において、ステップS801で転送元チェーンリスト514を使用するモードと判定した場合(S801−Yes)、転送元チェーンリスト514を取得する。
【0061】
ステップS804において、ディスクリプタ501に設定された転送モード503が挿入チェーンリスト516を使用するモードであるかを調べる。挿入チェーンリスト516を使用しないモードと判定した場合(S804−No)、ステップS810へ進む。
【0062】
ステップS805において、ステップ804で挿入チェーンリスト516を使用するモードと判定した場合(S804−Yes)、挿入チェーンリスト516を取得する。
【0063】
ステップS806において、挿入チェーンリスト516の挿入オフセットから転送元チェーンリストに追加するデータの挿入位置を計算して特定する。
【0064】
ステップS807において、ステップS806で特定された位置に挿入するために、ユニットを分割する必要があるかを調べる。分割する必要が無いと判定した場合(S807−No)、つまり転送元チェーンリストのユニットとユニットの間に挿入する場合はステップS809へ進む。1つのユニットを分割する必要があると判定した場合(S807−Yes)、つまり1つのユニットを分割してその間にユニットを挿入する場合、ステップS808へ進む。
【0065】
ステップS808において、ステップS807で分割する必要があると判定されたユニットを分割する。分割したユニットの1つ目の転送元アドレスは分割前のユニットの転送元アドレスを設定し、転送元サイズは挿入オフセットより計算した値を設定する。分割したユニットの2つ目の転送元アドレスは1つ目の転送元アドレスに1つ目の転送サイズを加算したアドレスを設定し、転送元サイズは分割前のユニットの転送元サイズから分割した1つ目のユニットの転送元サイズを減算した値を設定する。転送元チェーンリスト514を使用しないモードであった場合は分割前のユニットの転送元サイズには転送サイズ508を用いる。
【0066】
ステップS809において、ステップS806で特定した転送元チェーンリスト514の位置にユニットを挿入する。挿入するユニットの転送元アドレスは挿入元アドレスを設定し、転送元サイズは挿入サイズを設定する。
【0067】
ステップS810において、再構成が完了した転送元チェーンリストのユニットを格納する。
【0068】
ステップS811において、転送元チェーンリストの再構成処理がすべて完了したかを調べる。すべての再構成処理が完了していないと判定した場合は(S811―No)、ステップS806へ進み、ステップS806からステップS810までの処理を繰り返し行う。すべての再構成処理が完了したと判定した場合は転送元チェーンリストの挿入再構成処理を終了する(S811−Yes)。
【0069】
本実施形態では以上のような手順で転送元チェーンリストを再構成したが、転送元チェーンリストと挿入チェーンリストの整合性が取れる再構成手順であればよい。
【0070】
(転送元チェーンリストの削除再構成処理)
ディスクリプタ制御部203による転送元チェーンリストの削除再構成処理について説明する。図9におけるステップS901において、再構成された転送元チェーンリストがあるかを調べる。
【0071】
ステップS902において、ステップS901で再構成された転送元チェーンリストがないと判定した場合(S901−No)、転送元アドレスから1ユニットの転送元チェーンリストを仮構成する。この際、転送元サイズは未定とする。
【0072】
ステップS903において、ステップS901で再構成された転送元チェーンリストがあると判定した場合(S901−Yes)、再構成された転送元チェーンリストを取得する。
【0073】
ステップS904において、ディスクリプタ501に設定された転送モード503が削除チェーンリスト517を使用するモードであるかを調べる。削除チェーンリスト517を使用しないモードと判定した場合(S904−No)、ステップS910へ進む。
【0074】
ステップS905において、ステップ904で削除チェーンリスト517を使用するモードと判定した場合(S904−Yes)、削除チェーンリスト517を取得する。
【0075】
ステップS906において、削除チェーンリスト517の削除オフセットから転送元チェーンリストにおける削除開始する位置(削除位置)を計算して特定する。
ステップS907において、ステップS906で特定された位置から削除することで、ユニットを分割する必要があるかを調べる。分割する必要が無いと判定した場合(S907−No)、削除を開始する削除オフセットから所定のデータサイズを削除し、転送元チェーンリストを修正する(S909)。ユニットを分割する必要があると判定した場合(S907−Yes)、つまり削除することにより1ユニットの領域が非連続領域に分割される場合、ステップS908へ進む。
【0076】
ステップS908において、ステップS907で分割する必要があると判定されたユニットを分割する。分割したユニットの1つ目の転送元アドレスは分割前のユニットの転送元アドレスを設定し、転送元サイズは削除オフセットより計算した値を設定する。分割したユニットの2つ目の転送元アドレスは1つ目の転送元アドレスに1つ目の転送サイズと削除サイズを加算したアドレスを設定する。また転送元サイズは分割前のユニットの転送元サイズから分割した1つ目のユニットの転送元サイズと削除サイズを減算した値を設定する。再構成された転送元チェーンリストが無い場合は分割前のユニットの転送元サイズには転送サイズ508を用いる。
【0077】
ステップS909において、ステップS906で特定した転送元チェーンリストの位置から削除するため、一部の転送元チェーンリストのユニットを修正・削除する。ステップS960で特定した位置から削除サイズ分、転送元チェーンリストをたどり、1ユニットの転送元アドレスから転送元サイズ分の領域が削除サイズにすべて含まれる場合はそのユニットを削除する。1ユニットの転送元アドレスから転送元サイズ分の領域の後方部の領域が一部含まれる場合は、転送元アドレスをそのままとし、転送元サイズを減算して設定する。1ユニットの転送元アドレスから転送元サイズ分の領域の前方部の領域が一部含まれる場合は転送元アドレスを削除しない部分のアドレスへ計算して設定し、転送元サイズを減算して設定する。
【0078】
ステップS910において、再構成が完了した転送元チェーンリストのユニットを格納する。
【0079】
ステップS911において、転送元チェーンリストの再構成処理がすべて完了したかを調べる。すべての再構成処理が完了していないと判定した場合はステップS906へ進み(S911−No)、ステップS906からステップS910までの処理を繰り返し行う。すべての再構成処理が完了したと判定した場合は転送元チェーンリストの削除再構成処理を終了する。
【0080】
本実施形態では以上のような手順で転送元チェーンリストを再構成したが、転送元チェーンリストと削除チェーンリストの整合性が取れる再構成手順であればよい。
【0081】
本実施形態によれば、転送元チェーンリストを挿入チェーンリスト、削除チェーンリストによって、転送処理の前処理としてデータパス制御部がプロセッサの介在無しにチェーンリストを再構成することができる。これによりチェーンリストによるDMA転送において転送データの任意の位置に挿入、削除を行いながら転送することが可能となり、DMA処理中にプロセッサの介在なしに転送することができ、プロセッサの負荷を軽減できる。またあらかじめ作成されたチェーンリストをそのまま利用可能なためチェーンリストの追加や修正、コピーといったプロセッサで行うDMA転送の前処理の負荷を軽減することができる。また転送モードにより、利用するチェーンリストを任意に組み合わせて使用することができ、汎用的に利用可能となる。
【0082】
(第2実施形態)
第2実施形態に係るTOEサブシステム105が備えるデータパス制御部132の構成例を説明する。図1、図4、図5、図6、図7は第1実施形態と共通の図であるため、説明を省略する。
【0083】
図3のデータパス制御部132はTOEサブシステム105のサブシステムバス123及び通信装置のシステムバス102、MAC133に接続されている。
【0084】
データパス制御部132は各サブプロセッサ及び、主プロセッサ101から要求されることによって、メモリ間やデバイスとメモリ間の転送処理を実行する。その際、各プロセッサは共有メモリ125、もしくは主メモリ104に図5のディスクリプタ501を配置する。ディスクリプタ501は連続領域に配置する。さらに転送モード503に指定したモードで使用するチェーンリストをディスクリプタ501と同様に共有メモリ125もしくは主メモリ104に配置する。各チェーンリストはそれぞれが連続領域となるように配置する。
【0085】
ディスクリプタアドレス502をデータパス制御部132のレジスタ制御部301に設定することにより転送要求を行う。転送要求を受け付けると、レジスタ制御部301はディスクリプタ制御部303へディスクリプタアドレス502を通知する。ディスクリプタ制御部303はディスクリプタ501の読み込み処理を読込制御部304から行う。読込制御部304はバス制御部302を介してディスクリプタ501の読込を行う。ディスクリプタ501を読み込んだディスクリプタ制御部303はディスクリプタ501の転送モード503に設定されたモードに従い、各リストを順次取得する。転送モード503は転送元チェーンリスト514、転送先チェーンリスト515、挿入チェーンリスト516、削除チェーンリスト517をそれぞれ任意に使用するか否かを設定することができる。
【0086】
転送モード503が転送元チェーンリスト514を使用する設定であった場合、転送元チェーンリストアドレス504のアドレスからリストの1ユニット目を取得する。リストの1ユニット目の転送処理が完了すると次のリストを取得し、転送元チェーンリストユニット数510に設定された値分のリストを取得するまで継続する。転送元チェーンリスト514は転送元アドレス、転送元サイズの組を1ユニットとするリストである。転送モード503が転送元チェーンリスト514を使用しない設定であった場合、転送元チェーンリストアドレス504に指定されたアドレスを転送元アドレスとして転送元から連続領域の読み込みを行う。
【0087】
転送モード503が転送先チェーンリスト515を使用する設定であった場合、転送先チェーンリストアドレス505のアドレスからリストの1ユニット目を取得する。リストの1ユニット目の転送処理が完了すると次のリストを取得し、転送先チェーンリストユニット数511に設定された値分のリストを取得するまで継続する。転送先チェーンリスト515は転送先アドレス、転送先サイズの組を1ユニットとするリストである。転送モード503が転送先チェーンリスト515を使用しない設定であった場合、転送先チェーンリストアドレス505に指定されたアドレスを転送先アドレスとして転送先へ連続領域の書き込みを行う。
【0088】
転送モード503が挿入チェーンリスト516を使用する設定であった場合、挿入チェーンリストアドレス506のアドレスからリストの1ユニット目を取得する。リストの1ユニット目の転送が完了すると次のリストを取得し、挿入チェーンリストユニット数512に設定された値分のリストを取得するまで継続する。挿入チェーンリスト516は挿入元アドレスと挿入オフセット、挿入サイズの組を1ユニットとするリストである。転送モード503が挿入チェーンリスト516を使用しない設定であった場合、挿入チェーンリストアドレス506のフィールドを無視し、データを挿入しての転送を行わない。
【0089】
転送モード503が削除チェーンリスト517を使用する設定であった場合、削除チェーンリストアドレス507のアドレスからリストの1ユニット目を取得する。リストの1ユニット目の転送処理が完了すると次のリストを取得し、削除チェーンリストユニット数513に設定された値分のリストを取得するまで継続する。削除チェーンリスト517は削除オフセット、削除サイズの組を1ユニットとするリストである。転送モード503が削除チェーンリスト517を使用しない設定であった場合、削除チェーンリストアドレス507のフィールドを無視し、データを削除しての転送を行わない。
【0090】
各リストの取得は1ユニットずつ取得せず複数ユニットを取得する方式でもよい。また挿入チェーンリスト516の挿入オフセット、削除チェーンリスト517の削除オフセットのカウント方法は、挿入サイズ、削除サイズを含めてカウントする方式であっても、含めずにカウントする方式であってもよい。挿入サイズ、削除サイズを含めてカウントする方式であった場合は挿入リストの1ユニット目のデータに2ユニット目のデータを挿入する等、ネストして挿入することが可能である。しかし、この場合はリストを1ユニットずつでは無く、複数ユニットを読み出して処理する必要がある。
【0091】
ディスクリプタ制御部303が転送元リスト制御部308、転送先リスト制御部307、挿入リスト制御部310、削除リスト制御部309の制御によりデータ転送を行う。転送元リスト制御部308は転送元チェーンリスト514に示されたアドレスから指定サイズ分のデータを、読込制御部304を介してデータを読み込む。挿入リスト制御部310は転送元リスト制御部308の読み込んだサイズが挿入チェーンリスト516に指定したオフセットに達すると、指定されたアドレスから指定サイズ分のデータを、読込制御部304を介して読み込む。読み出したデータはディスクリプタ制御部303、チェックサム演算部306を経由して削除リスト制御部309へと転送される。削除リスト制御部309は転送されてきたデータが削除チェーンリスト517に指定されたオフセットに達したデータから削除チェーンリスト517に指定されたサイズ分のデータを破棄する。
【0092】
破棄されないデータは転送先リスト制御部307へと転送される。チェックサム演算部306では転送データのチェックサム計算を行う。転送先リスト制御部307は転送先リストに示されたアドレスへ指定サイズ分のデータを、書込制御部305を介してデータを書き込む。ディスクリプタ制御部303はディスクリプタ501の転送サイズ508に設定されたサイズに達すると転送処理を終了する。転送が終了すると、終了ステータス509にチェックサム計算結果及び、転送結果のステータスを書き込む。
【0093】
(データの挿入処理)
挿入リスト制御部310によるデータの挿入処理(挿入リスト制御処理)について説明する。図10におけるステップS1001において、ディスクリプタ501に設定された転送モード503が挿入チェーンリスト516を使用するモードであるかを調べる。挿入チェーンリスト516を使用しないモードと判定した場合(S1001−No)、ステップS1010へ進む
ステップS1002において、ステップS1001で挿入チェーンリスト516を使用するモードと判定した場合(S1001−Yes)、挿入チェーンリスト516のユニットを取得する。
【0094】
ステップS1003において、転送元リスト制御部308から読み込んだ転送データのカウント値を取得する。
【0095】
ステップS1004において、ステップS1003で取得したカウント値が挿入オフセットに達したかを調べる。カウント値が挿入オフセットに達していないと判定した場合(S1004−No)、ステップS1005へ進む。ステップS1005において、転送元リスト制御部308から読み込んだデータをディスクリプタ制御部303へ転送する。カウント値が挿入オフセットに達するまでステップS1003、ステップS1004、ステップS1005の処理を繰り返す。
【0096】
ステップS1006において、ステップS1004でカウント値が挿入オフセットに達したと判定された場合(S1004−Yes)、転送元リスト制御部308の転送データの読み込み処理を中断させる。
【0097】
ステップS1007において、挿入元アドレスから挿入サイズ分のデータを読み込み、ディスクリプタ制御部303へ転送する。
【0098】
ステップS1008において、挿入データのデータサイズ分の転送が完了すると、転送元リスト制御部308の転送データの読み込み処理を再開させる。
【0099】
ステップS1009において、処理した挿入チェーンリストのユニット数が挿入チェーンリストユニット数512に設定した値に達したか調べる。処理した挿入チェーンリストのユニット数が挿入チェーンリストユニット数512に達していないと判定した場合(S1009−No)、ステップS1002へ進む。処理した挿入チェーンリストのユニット数が挿入チェーンリストユニット数512に達するまでステップS1002からステップS1009までの処理を繰り返す。
【0100】
本実施形態では以上のような手順で転送元チェーンリストにデータを挿入して読み出しを行ったが、転送元チェーンリストと挿入チェーンリストを順次読み出しながら挿入するにあたり整合性が取れる手順であればよい。
【0101】
挿入チェーンリストのユニット数が挿入チェーンリストユニット数512に達した場合(S1009−Yes)、処理はステップS1010に進められる。
【0102】
ステップS1010において、残りすべてのデータ転送が完了するまで、転送元リスト制御部308から読み込んだデータをディスクリプタ制御部303へ転送する。すべてのデータ転送が完了すると挿入リスト制御処理を終了する。
【0103】
(データの削除処理)
削除リスト制御部309によるデータの削除処理(削除リスト制御処理)を説明する。図11におけるステップS1101において、ディスクリプタ501に設定された転送モード503が削除チェーンリスト517を使用するモードであるかを調べる。削除チェーンリスト517を使用しないモードと判定した場合(S1101−No)、ステップS1108へ進む。
【0104】
ステップS1102において、ステップS1101で削除チェーンリスト517を使用するモードと判定した場合(S1101−Yes)、削除チェーンリスト517のユニットを取得する。
【0105】
ステップS1103において、ディスクリプタ制御部303から読み込んだ転送データのカウント値を取得する。
【0106】
ステップS1104において、ステップS1103で取得したカウント値が削除オフセットに達したかを調べる。カウント値が削除オフセットに達していないと判定した場合(S1104−No)、ステップS1105へ進む。ステップS1105において、ディスクリプタ制御部303から読み込んだデータを転送先リスト制御部307へ転送する。カウント値が削除オフセットに達するまで(S1104−Yes)、ステップS1103、ステップS1104、ステップS1105の処理を繰り返す。
【0107】
ステップS1106において、削除サイズ分のデータを転送先リスト制御部307へ転送せず破棄する。
【0108】
ステップS1107において、処理した削除チェーンリストのユニット数が削除チェーンリストユニット数513に設定した値に達したか調べる。処理した削除チェーンリストのユニット数が削除チェーンリストユニット数513に達していないと判定した場合(S1107−No)、ステップS1102へ進む。処理した削除チェーンリストのユニット数が削除チェーンリストユニット数513に達する(S1107−Yes)まで、ステップS1102からステップS1107までの処理を繰り返す。
【0109】
ステップS1108において、ステップS1107で削除チェーンリストの処理が完了したと判定した場合、残りすべてのデータ転送が完了するまで、ディスクリプタ制御部303から読み込んだデータを転送先リスト制御部307へ転送する。すべてのデータ転送が完了すると削除リスト制御処理を終了する。
【0110】
本実施形態では以上のような手順で読み出したデータの一部を削除しながら転送先チェーンリストへ転送する処理を行ったが、転送先チェーンリストと削除チェーンリストを順次読み出しながら一部データを削除するにあたり整合性が取れる手順であればよい。
【0111】
本実施形態によれば、挿入チェーンリストによって、挿入リスト制御部がデータを転送元チェーンリストに挿入しながら転送元のデータを読み込むことができる。また削除チェーンリストによって、削除リスト制御部が転送先チェーンリストからデータを一部削除しながらデータを転送することができる。
【0112】
データパス制御部はプロセッサの介在無しに任意の位置にデータの挿入、データの削除をしながらデータ転送処理を実行することができる。これによりチェーンリストによるDMA転送において任意の位置にデータの挿入、任意の位置からのデータの削除を行いながらデータ転送することが可能になる。
【0113】
DMA処理中にプロセッサの介在なしに転送することができ、プロセッサの負荷を軽減できる。またあらかじめ作成されたチェーンリストをそのまま利用可能なためチェーンリストの追加や修正、コピーといったプロセッサで行うDMA転送の前処理の負荷を軽減することができる。また転送モードにより、利用するチェーンリストを任意に組み合わせて使用することができ、汎用的に利用可能となる。さらに、順次読み出しながら挿入、削除処理を行うためデータパス制御部の内部的にチェーンリストを再構成したものを保持しておく必要がないためオンチップメモリを削減することができる。
【0114】
(その他の実施形態)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【技術分野】
【0001】
本発明は、チェーンリストによるDMA(Direct Memory Access)転送を行うデータ転送装置、データ転送方法およびプログラムに関する。
【背景技術】
【0002】
メモリや周辺機器との間でのデータ転送では、CPUを介して行うとCPUの負荷が高くなるためDMAを利用して行うのが一般的である。このDMA転送において、転送したい連続データの途中に別のアドレスに配置されたデータを途中に挿入して転送するためには、挿入する前のデータを転送してから、挿入するデータを転送し、挿入する後のデータを転送するということが求められる。そのため一連のデータ転送の中でCPU等の主制御部の介在を必要とする。この問題に対し、特許文献1では、予め挿入する位置等の設定を行うことでCPUの介在なしにDMAの処理のみでデータを挿入して転送を行うというDMAが提案されている。
【0003】
また、転送を行いたいデータが非連続に配置されている場合において、予め転送を行うチェーンリストを作成して、そのチェーンリストをもとに転送を行うというスキャッタ・ギャザー機能付きのDMA装置が知られている。
【0004】
一方で、近年汎用PCのみならず組み込み機器においても様々な処理を高速に実行可能にすることが要求されている。これをMainCPUでのソフトウェアによる処理のみで要求性能を達成するには、組み込み機器が搭載するプロセッサ能力をはるかに超えてしまう。そこで、補助的なデバイスを付加して処理性能を向上させており、その一つの手法としてシステムの一部機能をサブシステム化して実現する構成が一般化している。このようにMainCPUでの処理をサブシステムにオフロードして処理を行う処理系においては、一般的にMainCPUによってサブシステムでの処理の前処理や後処理を行っている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2001-167046号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
MainCPUが主記憶上に作成した転送元データ、転送先バッファ等のチェーンリストに対してサブシステム側でチェーンリストに従いスキャッタ・ギャザー転送を行う場合がある。この様な場合において、サブシステム側の処理の結果、転送するデータの途中にデータを挿入する必要が発生することがある。特許文献1に示す方法は連続するデータの途中にデータを挿入するというDMA装置のため、非連続に配置されチェーンリストで構成されたデータの途中に挿入するという要求に対しては効果がない。つまり従来同様、チェーンリストによる複数回DMA転送を行う、もしくはチェーンリストを修正してDMA転送を行う必要となる。しかし、チェーンリストは連続領域に配置する必要があり、MainCPUが管理するメモリ領域に配置されているため、チェーンリストを追加、修正を行うことができない。そこで、MainCPUが作成したチェーンリストをサブシステムが管理するメモリ領域にコピーしてからチェーンリストを追加、修正を行いDMA転送する必要がある。
【0007】
また、デバイス等からサブシステムが取得したデータをサブシステムでの処理の結果、一部データを削除してからMainCPUへ受け渡す場合がある。この様な場合、デバイスからデータを取得する際に使用したチェーンリストを修正してからMainCPUが用意した転送先バッファへ転送するか、チェーンリストにあうようにデータそのものを一部コピーしてから転送する必要がある。
【0008】
つまり、チェーンリストで構成されたデータの一部を挿入、削除する場合においては一度作成したチェーンリストをそのまま使用することはできない。そのために、チェーンリストを作りかえるか、データそのものをチェーンリストに合う形にコピーして配置する必要がある。これらはいずれも非効率であり、CPUの負荷を高めてしまう。
【0009】
上述の課題を鑑み、チェーンリストによるDMA転送において転送データを任意の位置に挿入、削除しながら転送することが可能なデータ転送技術を提供することを目的とする。
【課題を解決するための手段】
【0010】
上記の目的を達成する本発明の一つの側面にかかるデータ転送装置は、転送元のデータの配置情報を示す第1のリスト、転送先のデータの配置情報を示す第2のリスト、挿入するデータの配置情報を示す第3のリスト、および削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第4のリストを取得する取得手段と、
受信した転送要求に従って、前記取得手段により取得された前記第1のリスト乃至第4のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する制御手段と、
前記制御手段により生成された前記データを前記転送先に転送する転送手段と、を備えることを特徴とする。
【発明の効果】
【0011】
本発明によれば、チェーンリストによるDMA転送において転送データの任意の位置に挿入、削除を行いながら転送することが可能になる。
【0012】
DMA処理中にCPU等の主制御部の介在なしに転送することができ、CPUの負荷を軽減できる。また、あらかじめ作成されたチェーンリストをそのまま利用可能なため、追加、修正やチェーンリストのコピーといった主制御部で行うDMA転送の前処理の負荷を減らすことができる。
【0013】
またモード指定により、各リストの使用の有無を組み合わせてDMA転送することができることにより、汎用的に利用可能となる。
【図面の簡単な説明】
【0014】
【図1】第1及び第2実施形態に係るTOEサブシステムの構成を示す図。
【図2】第1実施形態に係るデータパス制御部の構成を説明する図。
【図3】第2実施形態に係るデータパス制御部の構成を説明する図。
【図4】第1及び第2実施形態に係る通信装置の構成例を示すブロック図。
【図5】第1及び第2実施形態に係るディスクリプタの構成を説明する図。
【図6】第1及び第2実施形態に係るデータ転送処理と各種設定パラメータの関係を説明する図。
【図7】第1及び第2実施形態に係るパケット送信時のディスクリプタ及び各チェーンリストの設定例を説明する図。
【図8】第1実施形態に係るディスクリプタ制御部の転送元チェーンリスト再構成処理を説明する図。
【図9】第1実施形態に係るディスクリプタ制御部の転送先チェーンリスト再構成処理を説明する図。
【図10】第2実施形態に係る挿入リスト制御部の挿入リスト制御処理を説明する図。
【図11】第2実施形態に係る削除リスト制御部の削除制御処理を説明する図。
【発明を実施するための形態】
【0015】
(第1実施形態)
通信処理をオフロードするTOE(TCP/IP Offload Engine)サブシステム105を含む通信装置の構成の例について説明する。図1及び図4のシステムバス102は英国ARM社が提唱するAMBA3.0AXI(Advanced eXtensible Ingerface)仕様に代表されるクロスバースイッチ構造のオンチップバスである。システムバス102は通信装置に求められる送受信データの並行転送動作が可能である。TOEサブシステム105は通信装置のシステムバス102に接続されている。通信装置はTOEサブシステム105が備えるPHY(Physical LayerChip)134を介してネットワーク135に接続されている(図1参照)。
【0016】
HD(Hard Disk)装置406は二次記憶制御部405を介してシステムバス102に接続されている(図4参照)。HD装置406には通信装置の機能を実現するソフトウェアとその関連データと、各サブシステム内のサブプロセッサで動作するファームウエアとその関連データとが格納されている。更に、HD装置406は通信装置の動作履歴や通信履歴等の履歴情報を格納する。ソフトウェアは、通信装置の各機能を実現するアプリケーションソフトウエアと、アプリケーションプロトコルと、関連ハードウエアを制御するためのデバイスドライバと、OS(Operating System)と備えている。
【0017】
Flashメモリ413はメモリ制御部412を介してシステムバス102に接続されている。Flashメモリ413は書き換え可能な不揮発性メモリである。Flashメモリ413には通信装置の起動時に動作するブートプログラムと通信装置の初期状態設定に必要なパラメータとが格納される。更に、Flashメモリ413には通信装置の起動時に各ハードウエアを制御するためのデバイスドライバプログラムと各ハードウエア起動時の設定パラメータ等とが保存される。
【0018】
コンピュータである通信装置の主プロセッサ101はFlashメモリ413内のブートプログラムを実行する。更に、主プロセッサ101は通信装置の各ハードウエアとサブシステムとを初期化した後、HD装置406に格納されているソフトウェアを主メモリ104にロードして、ソフトウェアが備えるOSを起動する。また、主プロセッサ101は、サブシステムの初期化時にTOEサブシステム105に内蔵されているサブプロセッサAからEの5個のサブプロセッサ(111〜115)が実行する各ファームウエアを主メモリ104上に展開して、各サブプロセッサを起動する。各サブプロセッサ(111〜115)は主メモリ104上に展開された各ファームウエアを、各サブプロセッサに内蔵する命令キャッシュメモリにロードして、ファームウエアプログラムを実行する。
【0019】
通信装置のシステムバス102には、各ハードウエアやTOEサブシステム105からの割り込みイベントを主プロセッサ101に伝達する、割り込み制御部401が接続されている。また、通信装置は、ソフトウェア等により起動され、時間計測やタイムアウトイベントを発生させるタイマ402を備える。また、通信装置は、通信装置の動作モードの設定やIP(Internet Protocol)アドレスに代表される各通信パラメータを入力するための入力キー410を備える。更に、通信装置は、アプリケーション、通信装置の状態や設定内容等を表示する表示装置404と、IEEE802.11a/b/g/n規格に準拠した無線LANに接続するための無線LANサブシステム408とを備える。
【0020】
TOEサブシステム105は、内部にサブシステムバス123を備え、バスブリッジ116を介してシステムバス102に接続されている(図1参照)。このサブシステムバス123はクロスバースイッチ接続である。TOEサブシステム105が内蔵する5個の各サブプロセッサ(111〜115)は、サブシステムバス123に接続されている。これらの各サブプロセッサによるマルチプロセッサ処理により、主システムからTCP/IPプロトコル処理をオフロードし、高速に実行する。
【0021】
また、TOEサブシステム105は、5個の各サブプロセッサA〜E(111〜115)間の通信部と、情報共有の為の共有メモリ125と、TCP/IPプロトコル処理に必要な時間計測及びタイムアウトイベントを発生させる通信タイマ124とを備える。さらに、TOEサブシステム105は、ネットワーク135に接続するためのPHY134とMAC(Media Access Control)133とを備える。PHY134はOSI参照モデルの第1層に位置するPHY(物理)層のプロトコル処理と電気信号を扱うハードウエアである。MAC133はOSI参照モデルのデータリンク層(第2層)の下位副層に相当するMAC層のプロトコルを処理するハードウエアである。
【0022】
TOEサブシステム105は、受信パケットデータと送信パケットデータとを、例えば、主メモリ104あるいは共有メモリ125であるメモリデバイスと、MAC133との間でDMA転送するデータパス制御部132を備える。データパス制御部132は転送処理中に、パケットデータのチェックサム演算を行う。さらに、TOEサブシステム105は、プロトコル処理の様々な管理情報の格納と検索処理とを行う連想メモリを保有する検索装置122を備える。
【0023】
TOEサブシステム105は、暗号通信プロトコル処理を実行する。暗号通信プロトコルとしては、IPsec(Security Architecture for Internet Protocol)などがある。また、SSL(Secure Socket Layer)、TLS(Transport Layer Security)等の暗号通信プロトコル処理も実行する。そのために、TOEサブシステム105は鍵管理部126と、乱数発生器127と、暗号器129とを備える。鍵管理部126は暗号通信プロトコル処理のために生成した暗号鍵と、乱数及び素数を機密に保持する。乱数発生器127は、暗号処理に必要となる乱数値を生成する。また、TOEサブシステム105が備える暗号器129は、米国商務省標準技術局(NIST)によって選定されたAES(Advanced Encryption Standard)暗号器を備える。また、認証やデジタル署名などに使われるSHA−1(Secure Hash Algorithm 1)ハッシュ関数器を備える。また、RFC1321としてIETFで標準化されているMD5(Message Digest 5)ハッシュ関数器等を備える。
【0024】
(データパス制御部132の構成例)
TOEサブシステム105が備えるデータパス制御部132の構成例を説明する。図2のデータパス制御部132はTOEサブシステム105のサブシステムバス123及び通信装置のシステムバス102、MAC133に接続されている。データパス制御部132は転送元のデータの配置情報を示す第1のリストおよび転送先のデータの配置情報を示す第2のリストを取得する。また、データパス制御部132は挿入するデータの配置情報を示す第3のリストおよび削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第4のリストを取得する。そして、データパス制御部132は、受信した転送要求に従って、取得した第1のリスト乃至第4のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する。データパス制御部132は生成したデータを転送先に転送する。
【0025】
データパス制御部132は各サブプロセッサ及び、主プロセッサ101から要求されることによって、メモリ間やデバイスとメモリ間の転送処理を実行する。その際、各プロセッサは共有メモリ125、もしくは主メモリ104に図5のディスクリプタ501を配置する。ディスクリプタ501は連続領域に配置する。さらに転送モード503に指定したモードで使用するチェーンリストをディスクリプタ501と同様に共有メモリ125もしくは主メモリ104に配置する。各チェーンリストはそれぞれが連続領域となるように配置する。
【0026】
ディスクリプタアドレス502をデータパス制御部132のレジスタ制御部201に設定することにより転送要求を行う。転送要求を受信すると、レジスタ制御部201はディスクリプタ制御部203へディスクリプタアドレス502を通知する。ディスクリプタ制御部203はディスクリプタ501の読み込み処理を読込制御部204から行う。読込制御部204はバス制御部202を介してディスクリプタ501の読込を行う。ディスクリプタ501を読み込んだディスクリプタ制御部203はディスクリプタ501の転送モード503に設定されたモードに従い、各リストを処理開始時に一度に取得する。ディスクリプタ制御部203は転送モード503によって転送元チェーンリスト514、転送先チェーンリスト515、挿入チェーンリスト516、削除チェーンリスト517をそれぞれ任意に使用するか否かを設定することができる。
【0027】
転送モード503が転送元チェーンリスト514(第1のリスト)を使用する場合、データパス制御部132はディスクリプタ501の転送元チェーンリストアドレス504から転送元チェーンリストユニット数510に設定された値分のリストを取得する。転送元チェーンリスト514は転送する転送元のデータが配置されているアドレス(物理的に非連続なアドレス領域を示す配置情報)及びアドレスから読み込まれるデータのサイズの組を1つの構成単位としたリストである。転送モード503が転送元チェーンリスト514を使用しない設定であった場合、転送元チェーンリストアドレス504に指定されたアドレスを転送元アドレスとして転送元から連続領域の読み込みを行う。
【0028】
転送モード503が転送先チェーンリスト515(第2のリスト)を使用する設定であった場合、ディスクリプタ501の転送先チェーンリストアドレス505のアドレスから転送先チェーンリストユニット数511に設定された値分のリストを取得する。転送先チェーンリスト515はデータが配置される転送先のアドレス(物理的に非連続なアドレス領域を示す配置情報)およびアドレスから書き込まれるデータサイズの組を1つの構成単位としたリストである。転送モード503が転送先チェーンリスト515を使用しない設定であった場合、転送先チェーンリストアドレス505に指定されたアドレスを転送先アドレスとして転送先へ連続領域の書き込みを行う。
【0029】
転送要求にデータの更新の指定が含まれている場合、更新の指定の内容と第1および第2のリストの配置情報とから第1および第2のリストの配置情報の内容は再構成される。
【0030】
更新の指定として転送モード503が挿入チェーンリスト516(第3のリスト)を使用する設定であった場合、挿入チェーンリストアドレス506のアドレスから挿入チェーンリストユニット数512に設定された値分のリストを取得する。挿入チェーンリスト516は、挿入するデータの配置されているアドレス、そのアドレスから転送する挿入元データのサイズ、転送元のデータに対する挿入開始の位置を示す挿入オフセットアドレスの組を1つの構成単位としたリストである。転送モード503が挿入チェーンリスト516を使用しない設定であった場合、挿入チェーンリストアドレス506のフィールドを無視し、データを挿入しての転送を行わない。
【0031】
更新の指定として転送モード503が削除チェーンリスト517(第4のリスト)を使用する設定であった場合、削除チェーンリストアドレス507のアドレスから削除チェーンリストユニット数513に設定された値分のリストを取得する。削除チェーンリスト517は削除開始の位置を示す削除オフセットアドレスおよび、その削除オフセットアドレスから削除するデータのデータサイズの組を1つの構成単位(1ユニット)としたリストである。転送モード503が削除チェーンリスト517を使用しない設定であった場合、削除チェーンリストアドレス507のフィールドを無視し、データを削除しての転送を行わない。
【0032】
ディスクリプタ制御部203は、取得した各リストから転送元リスト、転送先リストをローカルメモリ210に再構成(作成)する。ディスクリプタ制御部203は、ローカルメモリ制御部209を介してローカルメモリ210にアクセスを行う。
【0033】
ディスクリプタ制御部203がローカルメモリ210に作成したリストに従い転送元リスト制御部208、転送先リスト制御部207の制御によりデータ転送を行う。転送元リスト制御部208は転送元リストに示されたアドレスから指定サイズ分のデータを、読込制御部204を介してデータを読み込む。読み出したデータはディスクリプタ制御部203、チェックサム演算部206を経由して転送先リスト制御部207へと転送される。チェックサム演算部206では転送データのチェックサム計算を行う。
【0034】
転送先リスト制御部207は転送先リストに示されたアドレスへ指定サイズ分のデータを、書込制御部205を介してデータを書き込む。ディスクリプタ制御部203はディスクリプタ501の転送サイズ508に設定されたサイズに達すると転送処理を終了する。転送が終了すると、終了ステータス509にチェックサム計算結果および、転送結果のステータスを書き込む。
【0035】
本実施形態では以上のようなディスクリプタによりデータパス制御部132に各種設定パラメータやチェーンリストを与える構成としたが、この構成に限られず、データパス制御部132に情報を与えられる構成であればよい。
【0036】
(データ転送処理と各種設定パラメータの関係)
図6を参照してデータ転送処理を例示的に説明すると共に、各リストに設定したアドレス、サイズ、オフセットの関係を説明する。図6に示すデータ転送では転送元チェーンリストユニット数510を4ユニット、転送先チェーンリストユニット数511を3ユニット、挿入チェーンリストユニット数512を2ユニット、削除チェーンリストユニット数513を1ユニットとして説明する。
【0037】
転送元チェーンリスト514は転送元アドレスおよび転送元データサイズの組を1ユニットとするリストである。4ユニットは転送元アドレスI 610、転送元サイズI 612、転送元アドレスII615、転送元サイズII616、転送元アドレスIII617、転送元サイズIII620、転送元アドレスIV624、転送元サイズ625で構成され得る。
【0038】
転送先チェーンリスト515は転送先アドレスおよび転送先データサイズの組を1ユニットとするリストである。転送先チェーンリストユニット数511における3ユニットは、例えば、転送先アドレスI 633、転送先サイズI 637、転送先アドレスII638、転送先サイズII640、転送先アドレスIII641、転送先サイズIII644で構成され得る。
【0039】
挿入チェーンリスト516は挿入元アドレスと挿入オフセットと挿入データサイズとの組を1ユニットとするリストである。挿入チェーンリスト516における2ユニットは、例えば、挿入元アドレスI 626、挿入オフセットI、挿入サイズI 627、挿入元アドレスII628、挿入オフセットII、挿入サイズII630で構成され得る。挿入オフセットIはオフセットI 645とオフセットII646を合計した値となる。挿入オフセットIIはオフセットI 645、オフセットII646、オフセットIII647、オフセットIV648を合計した値となる。
【0040】
削除チェーンリスト517は削除オフセットおよび削除データサイズの組を1ユニットとするリストである。削除チェーンリスト517における1ユニットは削除オフセットI、削除サイズIで構成され得る。削除オフセットIはオフセットI 645と等しい値となり、削除サイズIはオフセットII646と等しい値となる。
【0041】
転送サイズ508は転送元サイズI 612、転送元サイズII616、転送元サイズIII620、転送元サイズIV625、挿入サイズI 627、挿入サイズII630を合計した値となる。
【0042】
本実施形態では以上のように転送サイズ508を判断して転送する例を示したが、挿入チェーンリスト516の挿入サイズを含めずに、転送サイズ508は転送元チェーンリスト514から読み込むサイズであってもよい。この場合、転送サイズ508は転送元サイズI 612、転送元サイズII616、転送元サイズIII620、転送元サイズIV625を合計した値となる。
【0043】
また削除チェーンリスト517の削除サイズについても転送サイズ508に含めてもよいし、含めない方法であってもよい。つまり転送サイズ508はデータ転送において整合性がとれて処理可能であればよい。実際には、データが書き込まれるサイズを転送サイズ508に設定することが望ましい。
【0044】
以上の設定で転送処理を開始すると、点線矢印601に示すように転送元アドレスI 610から転送先アドレスI 633へと転送元サイズI−A613分のデータが転送される。
【0045】
次に転送サイズが、オフセットI 645と等しい値で示される削除オフセットIに達すると、転送元サイズI−Aから削除サイズI(オフセットII646)分のデータが読み捨てられる。つまり、転送元の領域(Src−I−A)に連続する転送元の領域(Src―I−B)の転送元アドレスI−B611から転送元サイズI−B614分のデータは転送先への書き込みが行われない。
【0046】
次に転送サイズが、オフセットI 645とオフセットII646を合計した値で示される挿入オフセットIに達すると点線矢印602に示すように挿入元アドレスI626から転送先アドレスI−B634へと挿入サイズI 627分のデータが転送される。次に点線矢印603に示すように転送元アドレスII615から転送先アドレスI−C635へと転送元サイズII616分のデータが転送される。
【0047】
次に点線矢印604に示すように転送元アドレスIII617から転送先アドレスI−D636へと転送元サイズIII−A621分のデータが転送される。次に点線矢印605に示すように転送元アドレスIII−B618から転送先アドレスII638へと転送元サイズIII−B622分のデータが転送される。
【0048】
次に転送サイズが挿入オフセットII(オフセットI、II、III、IVの合計)に達すると点線矢印606に示すように挿入元アドレスII628から転送先アドレスII−B639へと挿入サイズII−A631分のデータが転送される。続いて点線矢印607に示すように挿入元アドレスII−B629から転送先アドレスIII641へと挿入サイズII−B632分のデータが転送される。次に点線矢印608に示すように転送元アドレスIII−C619から転送先アドレスIII−B642へと転送元サイズIII−C623分のデータが転送される。次に点線矢印609に示すように転送元アドレスIV624から転送先アドレスIII−C643へと転送元サイズIV624分のデータが転送される。以上の転送で転送サイズ508に達したため転送処理は終了する。
【0049】
(ディスクリプタ及び各チェーンリストの設定例)
図7を参照してパケット送信時のディスクリプタ及び各チェーンリストの設定例について説明する。本図ではIPv6におけるUDPデータグラムにIPsec(Security Architecture for Internet Protocol)のAH(Authentication Header)処理を行なう。そして、フラグメント処理をしてパケットをMACのFIFOへ転送する場合の処理について説明する。なお本転送処理では第1フラグメントの転送と第2フラグメントの転送を行うため2回の転送処理を行う。
【0050】
主プロセッサ101により配置された送信データが主メモリ104の非連続領域に転送元チェーンリストで構成されている。なおMACヘッダ、IPv6ヘッダ、UDPヘッダは未完成のまま主メモリ104に配置され、TOEサブシステム105内のサブプロセッサの処理によって完成されたヘッダを形成する。さらにTOEサブシステム105のサブプロセッサ及び各HWアクセラレータの処理によってIPsec処理が行われる。
【0051】
検索装置122を利用してセキュリティポリシー(SP)を検索した結果、AH処理を行う必要がある場合、さらにセキュリティアソシエーション(SA)を検索する。そして鍵管理部126、暗号器129を利用して整合性確認値(ICV)の計算等が行われ、サブプロセッサによってAHヘッダが形成される。その後サブプロセッサによってフラグメント処理が行われ、フラグメント拡張ヘッダが形成される。AHヘッダ及びフラグメント拡張ヘッダは共有メモリ125に配置される。なお、IPsec処理やフラグメント処理等追加でのTOEサブシステム105の処理が無い場合は主プロセッサ101により配置された送信データをそのままMAC133のFIFO703へと順次転送する。本図では主メモリ104に非連続領域に配置された送信データに共有メモリ125に配置したAHヘッダ、フラグメント拡張ヘッダを挿入してまず初めに第1フラグメントパケットをMAC133のFIFO703へと順次転送する。1パケット目先頭701が指しているパケットが第1フラグメントパケットである。次に第2フラグメントパケット様にフラグメント拡張ヘッダの修正が行われる。そして同様にして、主メモリ104に非連続領域に配置された送信データに共有メモリ125に配置したフラグメント拡張ヘッダを挿入し、第1フラグメントパケットで転送したUDPヘッダ、ペイロードを削除して第2フラグメントパケットを順次転送する。2パケット目先頭702が指しているパケットが第2フラグメントパケットである。MAC133のFIFO703へ転送されるとパケットの先頭にはSOF(Start Of Frame)が、パケットの終端にはEOF(End Of Frame)がデータ転送とは別にMAC133によってFIFO703に挿入される。
【0052】
次に1回目の第1フラグメントパケットの転送、2回目の第2フラグメントパケットの転送におけるディスクリプタ及び、各チェーンリストの設定について説明する。
【0053】
1回目のディスクリプタ501、各チェーンリストについて説明する。転送モード503は転送元チェーンリスト514及び挿入チェーンリスト516を使用し、転送先チェーンリスト515及び削除チェーンリスト517を使用しない。
【0054】
転送元チェーンリスト514は転送元アドレスI、転送元サイズI、転送元アドレスII、転送元サイズII、転送元アドレスIII、転送元サイズIII、転送元アドレスIV、転送元サイズIV、転送元アドレスV、転送元サイズVで構成される。
【0055】
このチェーンリストのアドレスを転送元チェーンリストアドレス504に設定する。転送元アドレスI 704はMACヘッダの先頭アドレスを、転送元サイズIはMACヘッダのサイズを示している。転送元アドレスII705はIPv6ヘッダの先頭アドレスを、転送元サイズII711はIPv6ヘッダのサイズを示している。転送元アドレスIII706はUDPヘッダの先頭アドレスを、転送元サイズIII712はUDPヘッダのサイズを示している。転送元アドレスIV707はペイロードの先頭アドレスを、転送元アドレスV708はペイロードの途中のアドレスを、転送元サイズIV713及び転送元サイズV714の合計はペイロードのサイズを示している。
【0056】
転送先チェーンリストアドレス505にはMAC133のFIFO703のアドレスである転送先アドレス728を設定する。挿入チェーンリスト516は1回目かつ2回目挿入元アドレス717、1回目挿入オフセット721、1回目かつ2回目挿入サイズI 719、1回目挿入元アドレスII720、1回目挿入オフセットII721、1回目挿入サイズII720で構成される。このチェーンリストのアドレスを挿入チェーンリストアドレス506に設定する。1回目かつ2回目挿入元アドレスI 717はフラグメント拡張ヘッダの先頭アドレスを、1回目挿入オフセットI 721はフラグメント拡張ヘッダを挿入する位置を、1回目かつ2回目挿入サイズI 719はフラグメント拡張ヘッダのサイズを示している。1回目挿入元アドレスII720はAHヘッダの先頭アドレスを、1回目挿入オフセットII721はAHヘッダを挿入する位置を、1回目挿入サイズII720はAHヘッダのサイズを示している。削除チェーンリスト517は使用しないため削除チェーンリストアドレス507には何も設定しない。転送サイズ508には1回目転送サイズ726を設定する。1回目転送サイズ726は第1フラグメントパケットの全長を示している。転送元チェーンリストユニット数510には5を設定し、転送先チェーンリストユニット数511には何も設定しない。また挿入チェーンリストユニット数512には2を設定し、削除チェーンリストユニット数513には何も設定しない。
【0057】
次に2回目のディスクリプタ501、各チェーンリストについて説明する。転送モード503は転送元チェーンリスト514、挿入チェーンリスト516及び、削除チェーンリスト517を使用し、転送先チェーンリスト515は使用しない。転送元チェーンリスト514、転送元チェーンリストアドレス504は1回目と同じ設定をする。また転送先チェーンリストアドレス505も同様に1回目と同じ設定をする。挿入チェーンリスト516は1回目かつ2回目挿入元アドレスI 717、2回目挿入オフセットI 723、1回目かつ2回目挿入サイズI 719で構成される。このチェーンリストのアドレスを挿入チェーンリストアドレス506に設定する。1回目かつ2回目挿入元アドレスI 717はフラグメント拡張ヘッダの先頭アドレスを、2回目挿入オフセットI 723はフラグメント拡張ヘッダを挿入する位置を、1回目かつ2回目挿入サイズI 719はフラグメント拡張ヘッダのサイズを示している。削除チェーンリスト517は2回目削除オフセットI 724、2回目転送サイズ−Bかつ2回目削除サイズI 725で構成される。このチェーンリストのアドレスを削除チェーンリストアドレス507に設定する。2回目削除オフセットI 724は第2フラグメントパケットのペイロードの位置を、2回目転送サイズ−Bかつ2回目削除サイズ725は第1フラグメントで送信したペイロードのサイズを示している。転送サイズ508には2回目転送サイズ−A727と2回目転送サイズ−Bかつ2回目削除サイズI 725との合計サイズを設定する。2回目転送サイズ−A727は第2フラグメントパケットの全長を、2回目転送サイズ−Bかつ2回目削除サイズI 725は削除チェーンリストによって削除されるペイロードのサイズを示している。転送元チェーンリストユニット数510には5を設定し、転送先チェーンリストユニット数511には何も設定しない。また挿入チェーンリストユニット数512には1を設定し、削除チェーンリストユニット数513には1を設定する。
【0058】
(転送元チェーンリストの挿入再構成処理)
ディスクリプタ制御部203による転送元チェーンリストの挿入再構成処理について説明する。図8におけるステップS801において、ディスクリプタ501に設定された転送モード503が転送元チェーンリスト514を使用するモードであるかを調べる。
【0059】
ステップS802において、ステップS801で転送元チェーンリスト514を使用しないモードと判定した場合(S801−No)、転送元アドレスから1ユニットの転送元チェーンリストを仮構成する。この際、転送元サイズは未定とする。
【0060】
ステップS803において、ステップS801で転送元チェーンリスト514を使用するモードと判定した場合(S801−Yes)、転送元チェーンリスト514を取得する。
【0061】
ステップS804において、ディスクリプタ501に設定された転送モード503が挿入チェーンリスト516を使用するモードであるかを調べる。挿入チェーンリスト516を使用しないモードと判定した場合(S804−No)、ステップS810へ進む。
【0062】
ステップS805において、ステップ804で挿入チェーンリスト516を使用するモードと判定した場合(S804−Yes)、挿入チェーンリスト516を取得する。
【0063】
ステップS806において、挿入チェーンリスト516の挿入オフセットから転送元チェーンリストに追加するデータの挿入位置を計算して特定する。
【0064】
ステップS807において、ステップS806で特定された位置に挿入するために、ユニットを分割する必要があるかを調べる。分割する必要が無いと判定した場合(S807−No)、つまり転送元チェーンリストのユニットとユニットの間に挿入する場合はステップS809へ進む。1つのユニットを分割する必要があると判定した場合(S807−Yes)、つまり1つのユニットを分割してその間にユニットを挿入する場合、ステップS808へ進む。
【0065】
ステップS808において、ステップS807で分割する必要があると判定されたユニットを分割する。分割したユニットの1つ目の転送元アドレスは分割前のユニットの転送元アドレスを設定し、転送元サイズは挿入オフセットより計算した値を設定する。分割したユニットの2つ目の転送元アドレスは1つ目の転送元アドレスに1つ目の転送サイズを加算したアドレスを設定し、転送元サイズは分割前のユニットの転送元サイズから分割した1つ目のユニットの転送元サイズを減算した値を設定する。転送元チェーンリスト514を使用しないモードであった場合は分割前のユニットの転送元サイズには転送サイズ508を用いる。
【0066】
ステップS809において、ステップS806で特定した転送元チェーンリスト514の位置にユニットを挿入する。挿入するユニットの転送元アドレスは挿入元アドレスを設定し、転送元サイズは挿入サイズを設定する。
【0067】
ステップS810において、再構成が完了した転送元チェーンリストのユニットを格納する。
【0068】
ステップS811において、転送元チェーンリストの再構成処理がすべて完了したかを調べる。すべての再構成処理が完了していないと判定した場合は(S811―No)、ステップS806へ進み、ステップS806からステップS810までの処理を繰り返し行う。すべての再構成処理が完了したと判定した場合は転送元チェーンリストの挿入再構成処理を終了する(S811−Yes)。
【0069】
本実施形態では以上のような手順で転送元チェーンリストを再構成したが、転送元チェーンリストと挿入チェーンリストの整合性が取れる再構成手順であればよい。
【0070】
(転送元チェーンリストの削除再構成処理)
ディスクリプタ制御部203による転送元チェーンリストの削除再構成処理について説明する。図9におけるステップS901において、再構成された転送元チェーンリストがあるかを調べる。
【0071】
ステップS902において、ステップS901で再構成された転送元チェーンリストがないと判定した場合(S901−No)、転送元アドレスから1ユニットの転送元チェーンリストを仮構成する。この際、転送元サイズは未定とする。
【0072】
ステップS903において、ステップS901で再構成された転送元チェーンリストがあると判定した場合(S901−Yes)、再構成された転送元チェーンリストを取得する。
【0073】
ステップS904において、ディスクリプタ501に設定された転送モード503が削除チェーンリスト517を使用するモードであるかを調べる。削除チェーンリスト517を使用しないモードと判定した場合(S904−No)、ステップS910へ進む。
【0074】
ステップS905において、ステップ904で削除チェーンリスト517を使用するモードと判定した場合(S904−Yes)、削除チェーンリスト517を取得する。
【0075】
ステップS906において、削除チェーンリスト517の削除オフセットから転送元チェーンリストにおける削除開始する位置(削除位置)を計算して特定する。
ステップS907において、ステップS906で特定された位置から削除することで、ユニットを分割する必要があるかを調べる。分割する必要が無いと判定した場合(S907−No)、削除を開始する削除オフセットから所定のデータサイズを削除し、転送元チェーンリストを修正する(S909)。ユニットを分割する必要があると判定した場合(S907−Yes)、つまり削除することにより1ユニットの領域が非連続領域に分割される場合、ステップS908へ進む。
【0076】
ステップS908において、ステップS907で分割する必要があると判定されたユニットを分割する。分割したユニットの1つ目の転送元アドレスは分割前のユニットの転送元アドレスを設定し、転送元サイズは削除オフセットより計算した値を設定する。分割したユニットの2つ目の転送元アドレスは1つ目の転送元アドレスに1つ目の転送サイズと削除サイズを加算したアドレスを設定する。また転送元サイズは分割前のユニットの転送元サイズから分割した1つ目のユニットの転送元サイズと削除サイズを減算した値を設定する。再構成された転送元チェーンリストが無い場合は分割前のユニットの転送元サイズには転送サイズ508を用いる。
【0077】
ステップS909において、ステップS906で特定した転送元チェーンリストの位置から削除するため、一部の転送元チェーンリストのユニットを修正・削除する。ステップS960で特定した位置から削除サイズ分、転送元チェーンリストをたどり、1ユニットの転送元アドレスから転送元サイズ分の領域が削除サイズにすべて含まれる場合はそのユニットを削除する。1ユニットの転送元アドレスから転送元サイズ分の領域の後方部の領域が一部含まれる場合は、転送元アドレスをそのままとし、転送元サイズを減算して設定する。1ユニットの転送元アドレスから転送元サイズ分の領域の前方部の領域が一部含まれる場合は転送元アドレスを削除しない部分のアドレスへ計算して設定し、転送元サイズを減算して設定する。
【0078】
ステップS910において、再構成が完了した転送元チェーンリストのユニットを格納する。
【0079】
ステップS911において、転送元チェーンリストの再構成処理がすべて完了したかを調べる。すべての再構成処理が完了していないと判定した場合はステップS906へ進み(S911−No)、ステップS906からステップS910までの処理を繰り返し行う。すべての再構成処理が完了したと判定した場合は転送元チェーンリストの削除再構成処理を終了する。
【0080】
本実施形態では以上のような手順で転送元チェーンリストを再構成したが、転送元チェーンリストと削除チェーンリストの整合性が取れる再構成手順であればよい。
【0081】
本実施形態によれば、転送元チェーンリストを挿入チェーンリスト、削除チェーンリストによって、転送処理の前処理としてデータパス制御部がプロセッサの介在無しにチェーンリストを再構成することができる。これによりチェーンリストによるDMA転送において転送データの任意の位置に挿入、削除を行いながら転送することが可能となり、DMA処理中にプロセッサの介在なしに転送することができ、プロセッサの負荷を軽減できる。またあらかじめ作成されたチェーンリストをそのまま利用可能なためチェーンリストの追加や修正、コピーといったプロセッサで行うDMA転送の前処理の負荷を軽減することができる。また転送モードにより、利用するチェーンリストを任意に組み合わせて使用することができ、汎用的に利用可能となる。
【0082】
(第2実施形態)
第2実施形態に係るTOEサブシステム105が備えるデータパス制御部132の構成例を説明する。図1、図4、図5、図6、図7は第1実施形態と共通の図であるため、説明を省略する。
【0083】
図3のデータパス制御部132はTOEサブシステム105のサブシステムバス123及び通信装置のシステムバス102、MAC133に接続されている。
【0084】
データパス制御部132は各サブプロセッサ及び、主プロセッサ101から要求されることによって、メモリ間やデバイスとメモリ間の転送処理を実行する。その際、各プロセッサは共有メモリ125、もしくは主メモリ104に図5のディスクリプタ501を配置する。ディスクリプタ501は連続領域に配置する。さらに転送モード503に指定したモードで使用するチェーンリストをディスクリプタ501と同様に共有メモリ125もしくは主メモリ104に配置する。各チェーンリストはそれぞれが連続領域となるように配置する。
【0085】
ディスクリプタアドレス502をデータパス制御部132のレジスタ制御部301に設定することにより転送要求を行う。転送要求を受け付けると、レジスタ制御部301はディスクリプタ制御部303へディスクリプタアドレス502を通知する。ディスクリプタ制御部303はディスクリプタ501の読み込み処理を読込制御部304から行う。読込制御部304はバス制御部302を介してディスクリプタ501の読込を行う。ディスクリプタ501を読み込んだディスクリプタ制御部303はディスクリプタ501の転送モード503に設定されたモードに従い、各リストを順次取得する。転送モード503は転送元チェーンリスト514、転送先チェーンリスト515、挿入チェーンリスト516、削除チェーンリスト517をそれぞれ任意に使用するか否かを設定することができる。
【0086】
転送モード503が転送元チェーンリスト514を使用する設定であった場合、転送元チェーンリストアドレス504のアドレスからリストの1ユニット目を取得する。リストの1ユニット目の転送処理が完了すると次のリストを取得し、転送元チェーンリストユニット数510に設定された値分のリストを取得するまで継続する。転送元チェーンリスト514は転送元アドレス、転送元サイズの組を1ユニットとするリストである。転送モード503が転送元チェーンリスト514を使用しない設定であった場合、転送元チェーンリストアドレス504に指定されたアドレスを転送元アドレスとして転送元から連続領域の読み込みを行う。
【0087】
転送モード503が転送先チェーンリスト515を使用する設定であった場合、転送先チェーンリストアドレス505のアドレスからリストの1ユニット目を取得する。リストの1ユニット目の転送処理が完了すると次のリストを取得し、転送先チェーンリストユニット数511に設定された値分のリストを取得するまで継続する。転送先チェーンリスト515は転送先アドレス、転送先サイズの組を1ユニットとするリストである。転送モード503が転送先チェーンリスト515を使用しない設定であった場合、転送先チェーンリストアドレス505に指定されたアドレスを転送先アドレスとして転送先へ連続領域の書き込みを行う。
【0088】
転送モード503が挿入チェーンリスト516を使用する設定であった場合、挿入チェーンリストアドレス506のアドレスからリストの1ユニット目を取得する。リストの1ユニット目の転送が完了すると次のリストを取得し、挿入チェーンリストユニット数512に設定された値分のリストを取得するまで継続する。挿入チェーンリスト516は挿入元アドレスと挿入オフセット、挿入サイズの組を1ユニットとするリストである。転送モード503が挿入チェーンリスト516を使用しない設定であった場合、挿入チェーンリストアドレス506のフィールドを無視し、データを挿入しての転送を行わない。
【0089】
転送モード503が削除チェーンリスト517を使用する設定であった場合、削除チェーンリストアドレス507のアドレスからリストの1ユニット目を取得する。リストの1ユニット目の転送処理が完了すると次のリストを取得し、削除チェーンリストユニット数513に設定された値分のリストを取得するまで継続する。削除チェーンリスト517は削除オフセット、削除サイズの組を1ユニットとするリストである。転送モード503が削除チェーンリスト517を使用しない設定であった場合、削除チェーンリストアドレス507のフィールドを無視し、データを削除しての転送を行わない。
【0090】
各リストの取得は1ユニットずつ取得せず複数ユニットを取得する方式でもよい。また挿入チェーンリスト516の挿入オフセット、削除チェーンリスト517の削除オフセットのカウント方法は、挿入サイズ、削除サイズを含めてカウントする方式であっても、含めずにカウントする方式であってもよい。挿入サイズ、削除サイズを含めてカウントする方式であった場合は挿入リストの1ユニット目のデータに2ユニット目のデータを挿入する等、ネストして挿入することが可能である。しかし、この場合はリストを1ユニットずつでは無く、複数ユニットを読み出して処理する必要がある。
【0091】
ディスクリプタ制御部303が転送元リスト制御部308、転送先リスト制御部307、挿入リスト制御部310、削除リスト制御部309の制御によりデータ転送を行う。転送元リスト制御部308は転送元チェーンリスト514に示されたアドレスから指定サイズ分のデータを、読込制御部304を介してデータを読み込む。挿入リスト制御部310は転送元リスト制御部308の読み込んだサイズが挿入チェーンリスト516に指定したオフセットに達すると、指定されたアドレスから指定サイズ分のデータを、読込制御部304を介して読み込む。読み出したデータはディスクリプタ制御部303、チェックサム演算部306を経由して削除リスト制御部309へと転送される。削除リスト制御部309は転送されてきたデータが削除チェーンリスト517に指定されたオフセットに達したデータから削除チェーンリスト517に指定されたサイズ分のデータを破棄する。
【0092】
破棄されないデータは転送先リスト制御部307へと転送される。チェックサム演算部306では転送データのチェックサム計算を行う。転送先リスト制御部307は転送先リストに示されたアドレスへ指定サイズ分のデータを、書込制御部305を介してデータを書き込む。ディスクリプタ制御部303はディスクリプタ501の転送サイズ508に設定されたサイズに達すると転送処理を終了する。転送が終了すると、終了ステータス509にチェックサム計算結果及び、転送結果のステータスを書き込む。
【0093】
(データの挿入処理)
挿入リスト制御部310によるデータの挿入処理(挿入リスト制御処理)について説明する。図10におけるステップS1001において、ディスクリプタ501に設定された転送モード503が挿入チェーンリスト516を使用するモードであるかを調べる。挿入チェーンリスト516を使用しないモードと判定した場合(S1001−No)、ステップS1010へ進む
ステップS1002において、ステップS1001で挿入チェーンリスト516を使用するモードと判定した場合(S1001−Yes)、挿入チェーンリスト516のユニットを取得する。
【0094】
ステップS1003において、転送元リスト制御部308から読み込んだ転送データのカウント値を取得する。
【0095】
ステップS1004において、ステップS1003で取得したカウント値が挿入オフセットに達したかを調べる。カウント値が挿入オフセットに達していないと判定した場合(S1004−No)、ステップS1005へ進む。ステップS1005において、転送元リスト制御部308から読み込んだデータをディスクリプタ制御部303へ転送する。カウント値が挿入オフセットに達するまでステップS1003、ステップS1004、ステップS1005の処理を繰り返す。
【0096】
ステップS1006において、ステップS1004でカウント値が挿入オフセットに達したと判定された場合(S1004−Yes)、転送元リスト制御部308の転送データの読み込み処理を中断させる。
【0097】
ステップS1007において、挿入元アドレスから挿入サイズ分のデータを読み込み、ディスクリプタ制御部303へ転送する。
【0098】
ステップS1008において、挿入データのデータサイズ分の転送が完了すると、転送元リスト制御部308の転送データの読み込み処理を再開させる。
【0099】
ステップS1009において、処理した挿入チェーンリストのユニット数が挿入チェーンリストユニット数512に設定した値に達したか調べる。処理した挿入チェーンリストのユニット数が挿入チェーンリストユニット数512に達していないと判定した場合(S1009−No)、ステップS1002へ進む。処理した挿入チェーンリストのユニット数が挿入チェーンリストユニット数512に達するまでステップS1002からステップS1009までの処理を繰り返す。
【0100】
本実施形態では以上のような手順で転送元チェーンリストにデータを挿入して読み出しを行ったが、転送元チェーンリストと挿入チェーンリストを順次読み出しながら挿入するにあたり整合性が取れる手順であればよい。
【0101】
挿入チェーンリストのユニット数が挿入チェーンリストユニット数512に達した場合(S1009−Yes)、処理はステップS1010に進められる。
【0102】
ステップS1010において、残りすべてのデータ転送が完了するまで、転送元リスト制御部308から読み込んだデータをディスクリプタ制御部303へ転送する。すべてのデータ転送が完了すると挿入リスト制御処理を終了する。
【0103】
(データの削除処理)
削除リスト制御部309によるデータの削除処理(削除リスト制御処理)を説明する。図11におけるステップS1101において、ディスクリプタ501に設定された転送モード503が削除チェーンリスト517を使用するモードであるかを調べる。削除チェーンリスト517を使用しないモードと判定した場合(S1101−No)、ステップS1108へ進む。
【0104】
ステップS1102において、ステップS1101で削除チェーンリスト517を使用するモードと判定した場合(S1101−Yes)、削除チェーンリスト517のユニットを取得する。
【0105】
ステップS1103において、ディスクリプタ制御部303から読み込んだ転送データのカウント値を取得する。
【0106】
ステップS1104において、ステップS1103で取得したカウント値が削除オフセットに達したかを調べる。カウント値が削除オフセットに達していないと判定した場合(S1104−No)、ステップS1105へ進む。ステップS1105において、ディスクリプタ制御部303から読み込んだデータを転送先リスト制御部307へ転送する。カウント値が削除オフセットに達するまで(S1104−Yes)、ステップS1103、ステップS1104、ステップS1105の処理を繰り返す。
【0107】
ステップS1106において、削除サイズ分のデータを転送先リスト制御部307へ転送せず破棄する。
【0108】
ステップS1107において、処理した削除チェーンリストのユニット数が削除チェーンリストユニット数513に設定した値に達したか調べる。処理した削除チェーンリストのユニット数が削除チェーンリストユニット数513に達していないと判定した場合(S1107−No)、ステップS1102へ進む。処理した削除チェーンリストのユニット数が削除チェーンリストユニット数513に達する(S1107−Yes)まで、ステップS1102からステップS1107までの処理を繰り返す。
【0109】
ステップS1108において、ステップS1107で削除チェーンリストの処理が完了したと判定した場合、残りすべてのデータ転送が完了するまで、ディスクリプタ制御部303から読み込んだデータを転送先リスト制御部307へ転送する。すべてのデータ転送が完了すると削除リスト制御処理を終了する。
【0110】
本実施形態では以上のような手順で読み出したデータの一部を削除しながら転送先チェーンリストへ転送する処理を行ったが、転送先チェーンリストと削除チェーンリストを順次読み出しながら一部データを削除するにあたり整合性が取れる手順であればよい。
【0111】
本実施形態によれば、挿入チェーンリストによって、挿入リスト制御部がデータを転送元チェーンリストに挿入しながら転送元のデータを読み込むことができる。また削除チェーンリストによって、削除リスト制御部が転送先チェーンリストからデータを一部削除しながらデータを転送することができる。
【0112】
データパス制御部はプロセッサの介在無しに任意の位置にデータの挿入、データの削除をしながらデータ転送処理を実行することができる。これによりチェーンリストによるDMA転送において任意の位置にデータの挿入、任意の位置からのデータの削除を行いながらデータ転送することが可能になる。
【0113】
DMA処理中にプロセッサの介在なしに転送することができ、プロセッサの負荷を軽減できる。またあらかじめ作成されたチェーンリストをそのまま利用可能なためチェーンリストの追加や修正、コピーといったプロセッサで行うDMA転送の前処理の負荷を軽減することができる。また転送モードにより、利用するチェーンリストを任意に組み合わせて使用することができ、汎用的に利用可能となる。さらに、順次読み出しながら挿入、削除処理を行うためデータパス制御部の内部的にチェーンリストを再構成したものを保持しておく必要がないためオンチップメモリを削減することができる。
【0114】
(その他の実施形態)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【特許請求の範囲】
【請求項1】
転送元のデータの配置情報を示す第1のリスト、転送先のデータの配置情報を示す第2のリスト、挿入するデータの配置情報を示す第3のリスト、および削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第4のリストを取得する取得手段と、
受信した転送要求に従って、前記取得手段により取得された前記第1のリスト乃至第4のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する制御手段と、
前記制御手段により生成された前記データを前記転送先に転送する転送手段と、
を備えることを特徴とするデータ転送装置。
【請求項2】
前記制御手段は、前記第1のリストの配置情報に従って転送元のアドレス領域に配置されたデータを読み込み、前記第2のリストの配置情報に従って転送先のアドレス領域に書き込むことにより、前記データを生成することを特徴とする請求項1に記載のデータ転送装置。
【請求項3】
受信した転送要求にデータの更新の指定が含まれている場合、前記制御手段は、前記更新の指定の内容に従って前記第1のリストの配置情報を再構成したデータを生成することを特徴とする請求項2に記載のデータ転送装置。
【請求項4】
前記更新の指定がデータを挿入する指定の場合、前記制御手段は、前記第3のリストに含まれる挿入開始の位置を示す挿入オフセットアドレスを用いて、前記第1のリストにおけるデータの挿入位置を特定することを特徴とする請求項3に記載のデータ転送装置。
【請求項5】
前記第1のリストは、転送元のデータが配置されている物理的に非連続なアドレス領域および前記アドレス領域から読み込まれるデータのデータサイズの組を構成単位として有し、
前記第2のリストは、データが配置される転送先の物理的に非連続なアドレス領域および前記アドレス領域から書き込まれるデータのデータサイズの組を構成単位として有することを特徴とする請求項1に記載のデータ転送装置。
【請求項6】
前記第3のリストは、挿入元のデータが配置されているアドレス、前記アドレスから読み込まれる挿入元データのデータサイズ、および挿入開始の位置を示す前記挿入オフセットアドレスの組を構成単位として有することを特徴とする請求項4に記載のデータ転送装置。
【請求項7】
前記制御手段は、前記第1のリストにおける挿入位置に、前記第3のリストにおけるアドレスを設定することにより前記第1のリストの配置情報を再構成することを特徴とする請求項6に記載のデータ転送装置。
【請求項8】
前記制御手段により読み込まれるデータのアドレスが前記挿入オフセットアドレスに達した場合、前記制御手段は前記第1のリストに従ったデータの読み込みを中断し、前記第3のリストのアドレスに従った挿入データを読み込むことを特徴とする請求項6または7に記載のデータ転送装置。
【請求項9】
前記第3のリストに従った挿入データのデータサイズ分の転送が完了した場合、前記制御手段は中断していた前記第1のリストに従ったデータの読み込みを再開することを特徴とする請求項8に記載のデータ転送装置。
【請求項10】
前記更新の指定がデータの削除を指定する場合、前記制御手段は、前記削除オフセットアドレスを用いて、前記第1のリストにおけるデータの削除位置を特定することを特徴とする請求項3に記載のデータ転送装置。
【請求項11】
前記制御手段は、前記削除するデータのデータサイズを用いて、前記第1のリストのデータサイズを修正することにより前記第1のリストの配置情報を再構成することを特徴とする請求項10に記載のデータ転送装置。
【請求項12】
前記制御手段により読み込まれるデータのアドレスが前記削除オフセットアドレスに達した場合に、前記制御手段は前記第4のリストのデータサイズ分のデータの転送を行わないことを特徴とする請求項10または11に記載のデータ転送装置。
【請求項13】
コンピュータを、請求項1乃至12のいずれか1項に記載のデータ転送装置の各手段として機能させるためのプログラム。
【請求項14】
データ転送装置におけるデータ転送方法であって、
前記データ転送装置の取得手段が、転送元のデータの配置情報を示す第1のリスト、転送先のデータの配置情報を示す第2のリスト、挿入するデータの配置情報を示す第3のリスト、および削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第4のリストを取得する取得工程と、
前記データ転送装置の制御手段が、受信した転送要求に従って、前記取得手段により取得された前記第1のリスト乃至第4のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する制御工程と、
前記データ転送装置の転送手段が、前記制御手段により生成された前記データを前記転送先に転送する転送工程と、
を有することを特徴とするデータ転送方法。
【請求項1】
転送元のデータの配置情報を示す第1のリスト、転送先のデータの配置情報を示す第2のリスト、挿入するデータの配置情報を示す第3のリスト、および削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第4のリストを取得する取得手段と、
受信した転送要求に従って、前記取得手段により取得された前記第1のリスト乃至第4のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する制御手段と、
前記制御手段により生成された前記データを前記転送先に転送する転送手段と、
を備えることを特徴とするデータ転送装置。
【請求項2】
前記制御手段は、前記第1のリストの配置情報に従って転送元のアドレス領域に配置されたデータを読み込み、前記第2のリストの配置情報に従って転送先のアドレス領域に書き込むことにより、前記データを生成することを特徴とする請求項1に記載のデータ転送装置。
【請求項3】
受信した転送要求にデータの更新の指定が含まれている場合、前記制御手段は、前記更新の指定の内容に従って前記第1のリストの配置情報を再構成したデータを生成することを特徴とする請求項2に記載のデータ転送装置。
【請求項4】
前記更新の指定がデータを挿入する指定の場合、前記制御手段は、前記第3のリストに含まれる挿入開始の位置を示す挿入オフセットアドレスを用いて、前記第1のリストにおけるデータの挿入位置を特定することを特徴とする請求項3に記載のデータ転送装置。
【請求項5】
前記第1のリストは、転送元のデータが配置されている物理的に非連続なアドレス領域および前記アドレス領域から読み込まれるデータのデータサイズの組を構成単位として有し、
前記第2のリストは、データが配置される転送先の物理的に非連続なアドレス領域および前記アドレス領域から書き込まれるデータのデータサイズの組を構成単位として有することを特徴とする請求項1に記載のデータ転送装置。
【請求項6】
前記第3のリストは、挿入元のデータが配置されているアドレス、前記アドレスから読み込まれる挿入元データのデータサイズ、および挿入開始の位置を示す前記挿入オフセットアドレスの組を構成単位として有することを特徴とする請求項4に記載のデータ転送装置。
【請求項7】
前記制御手段は、前記第1のリストにおける挿入位置に、前記第3のリストにおけるアドレスを設定することにより前記第1のリストの配置情報を再構成することを特徴とする請求項6に記載のデータ転送装置。
【請求項8】
前記制御手段により読み込まれるデータのアドレスが前記挿入オフセットアドレスに達した場合、前記制御手段は前記第1のリストに従ったデータの読み込みを中断し、前記第3のリストのアドレスに従った挿入データを読み込むことを特徴とする請求項6または7に記載のデータ転送装置。
【請求項9】
前記第3のリストに従った挿入データのデータサイズ分の転送が完了した場合、前記制御手段は中断していた前記第1のリストに従ったデータの読み込みを再開することを特徴とする請求項8に記載のデータ転送装置。
【請求項10】
前記更新の指定がデータの削除を指定する場合、前記制御手段は、前記削除オフセットアドレスを用いて、前記第1のリストにおけるデータの削除位置を特定することを特徴とする請求項3に記載のデータ転送装置。
【請求項11】
前記制御手段は、前記削除するデータのデータサイズを用いて、前記第1のリストのデータサイズを修正することにより前記第1のリストの配置情報を再構成することを特徴とする請求項10に記載のデータ転送装置。
【請求項12】
前記制御手段により読み込まれるデータのアドレスが前記削除オフセットアドレスに達した場合に、前記制御手段は前記第4のリストのデータサイズ分のデータの転送を行わないことを特徴とする請求項10または11に記載のデータ転送装置。
【請求項13】
コンピュータを、請求項1乃至12のいずれか1項に記載のデータ転送装置の各手段として機能させるためのプログラム。
【請求項14】
データ転送装置におけるデータ転送方法であって、
前記データ転送装置の取得手段が、転送元のデータの配置情報を示す第1のリスト、転送先のデータの配置情報を示す第2のリスト、挿入するデータの配置情報を示す第3のリスト、および削除開始の位置を示す削除オフセットアドレスと削除するデータのデータサイズとを有する第4のリストを取得する取得工程と、
前記データ転送装置の制御手段が、受信した転送要求に従って、前記取得手段により取得された前記第1のリスト乃至第4のリストから必要なリストを選択して、転送元から転送先に転送するためのデータを生成する制御工程と、
前記データ転送装置の転送手段が、前記制御手段により生成された前記データを前記転送先に転送する転送工程と、
を有することを特徴とするデータ転送方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2013−89190(P2013−89190A)
【公開日】平成25年5月13日(2013.5.13)
【国際特許分類】
【出願番号】特願2011−232119(P2011−232119)
【出願日】平成23年10月21日(2011.10.21)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成25年5月13日(2013.5.13)
【国際特許分類】
【出願日】平成23年10月21日(2011.10.21)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]