(57)【要約】【課題】トータルの転送時間とアクセス待ち時間が適切になるように複数のデータ転送を制御する。【解決手段】データ転送装置は、各々が、転送元のメモリからデータをロードして転送先のメモリへデータをストアするデータ転送を独立に実行する複数のデータ転送部を有し、複数のデータ転送部から同時にアクセスすることができない一つのメモリに対して２つ以上のデータ転送部によるデータ転送が重なったか否かを判定し、データ転送が重なったと判定された場合に、重なったデータ量を取得し、重なったデータ量に基づいて、一つのメモリに対する重なったデータ転送の連続転送の単位を変更する。【選択図】図９
2018116574.tif 000002
【特許請求の範囲】
【請求項１】
各々が、転送元のメモリからデータをロードして転送先のメモリへ前記データをストアするデータ転送を独立に実行する複数のデータ転送手段と、
複数のデータ転送手段から同時にアクセスすることができない一つのメモリに対して２つ以上のデータ転送手段によるデータ転送が重なった場合に、重なったデータ量を取得する取得手段と、
前記重なったデータ量に基づいて、前記一つのメモリに対する重なったデータ転送の連続転送の単位を変更する変更手段と、を備えることを特徴とするデータ転送装置。
【請求項２】
前記変更手段は、前記重なったデータ量が所定の閾値以上の場合に前記連続転送を第一の単位とし、前記重なったデータ量が所定の閾値未満の場合に前記連続転送の単位を第二の単位とし、前記第一の単位は前記第二の単位よりも大きいことを特徴とする請求項１に記載のデータ転送装置。
【請求項３】
前記変更手段は、
前記重なったデータ量が前記所定の閾値以上の場合には、前記第一の単位による連続転送により、前記２つ以上のデータ転送手段によるデータ転送を順次に完了させる第一の転送方法を採用し、
前記重なったデータ量が前記所定の閾値未満の場合には、前記第二の単位による連続転送ごとに、前記２つ以上のデータ転送手段の間でデータ転送を実行するデータ転送手段を順次に切り替える第二の転送方法を採用する、ことを特徴とする請求項２に記載のデータ転送装置。
【請求項４】
前記第一の転送方法においては、前記２つ以上のデータ転送手段による重なったデータ転送を、予めデータ転送手段に割り当てられた優先順で行うことを特徴とする請求項３に記載のデータ転送装置。
【請求項５】
前記優先順は、実行される通信プロトコル処理に基づいて決定されていることを特徴とする請求項４に記載のデータ転送装置。
【請求項６】
前記変更手段は、前記一つのメモリに対して重なったデータ転送の数に応じて前記閾値の値を変化させることを特徴とする請求項２乃至５のいずれか１項に記載のデータ転送装置。
【請求項７】
前記変更手段は、前記一つのメモリに対して３つ以上のデータ転送手段によるデータ転送が重なった場合に、前記重なったデータ量に関わらず前記第一の転送方法を採用することを特徴とする請求項３乃至５のいずれか１項に記載のデータ転送装置。
【請求項８】
前記複数のデータ転送手段のそれぞれについて、前記一つのメモリに対するデータ転送の残りデータ量を監視する監視手段をさらに備え、
前記取得手段は、前記残りデータ量が０以外となっているデータ転送手段が複数存在する場合にデータ転送が重なっていると判定し、前記残りデータ量が０以外のデータ量のうち最小のデータ量を前記重なったデータ量として取得することを特徴とする請求項１乃至７のいずれか１項に記載のデータ転送装置。
【請求項９】
前記監視手段は、前記複数のデータ転送手段の各々が読み出したディスクリプタに記述されたデータ転送サイズから、前記複数のデータ転送手段の各々が実行したデータ転送のデータ量を減じて前記残りのデータ量を得ることを特徴とする請求項８に記載のデータ転送装置。
【請求項１０】
各々が、転送元のメモリからデータをロードして転送先のメモリへ前記データをストアするデータ転送を独立に実行する複数のデータ転送手段を有するデータ転送装置の制御方法であって、
複数のデータ転送手段から同時にアクセスすることができない一つのメモリに対して２つ以上のデータ転送手段によるデータ転送が重なったか否かを判定する判定工程と、
前記判定工程によりデータ転送が重なったと判定された場合に、重なったデータ量を取得する取得工程と、
前記重なったデータ量に基づいて、前記一つのメモリに対する重なったデータ転送の連続転送の単位を変更する変更工程と、を有することを特徴とするデータ転送装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のデータ転送装置を制御するデータ転送装置およびその制御方法に関する。
【背景技術】
【０００２】
ＴＣＰ（Transmission Control Protocol）／ＩＰ（Internet Protocol）の通信プロトコルを使用してネットワークに接続し、通信相手とデータ転送を行う通信装置がある。通信装置間で高解像度、高精細の映像データを転送する場合、広帯域なデータ転送を可能とする通信プロトコル処理の高速化が不可欠である。通信プロトコル処理の高速化への対応として、通信プロトコル処理に特化した補助的デバイスであるＴＯＥ（ＴＣＰ／ＩＰオフロードエンジン）を通信装置の内部に装備することが行われている。ＴＯＥは通信プロトコル処理を専用のソフトウエア／ハードウエアを使用することで通信装置のＣＰＵで実行するよりも高速な通信プロトコル処理を実現し、広帯域なデータ転送を実現している。
【０００３】
ＴＯＥ内部のハードウエアは、メモリ間におけるデータのＤＭＡ転送を制御するＤＭＡ（Direct Memory Access）コントローラを有している。そして、複数のＤＭＡ転送を並列実行する場合に関して、様々な制御方法が提案されている。特許文献１では、ＤＭＡパラメータにより設定された転送サイズの転送要求を最大Ｎバイト単位の転送要求に分割し、複数回にわたってＤＭＡ転送要求を出す構成が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００２−３６６５０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一般的に、単位をＤＭＡ転送する毎にオーバヘッドの時間が累積される。このため、転送の単位が細かくなるほどオーバヘッドの累積時間が増加し、ＤＭＡ転送の完了までの時間が長くなってしまう。ＤＭＡ転送の高速実行を考えた場合、あるまとまった大きな単位でデータ転送を繰り返す方が効率的である。一方、ＤＭＡ転送中に同じアクセス先にアクセスが重なった場合は、大きな単位でＤＭＡ転送を実行すると、アクセスの待ち時間が長くなる。したがって、アクセスの重複がある場合には、アクセス待ち時間の観点では大きな単位でのＤＭＡ転送を回避した方がアクセスはより効率的である。
【０００６】
特許文献１は、複数のＤＭＡ転送が重なった場合においてＤＭＡ転送待ち時間を減らすための工夫である。しかしながら、特許文献１は、複数のＤＭＡ転送の全てが転送完了になるまでのトータルの時間について考慮していない。特許文献１では、複数のＤＭＡ転送の各々を効率良く順に実行するために、ＤＭＡ転送を一定間隔で切り替え、各々のＤＭＡ転送を小さな単位で行うようにしている。ＤＭＡ転送を切り替える際にはオーバヘッドが発生する。このオーバヘッドの発生回数が少ない場合は待ち時間が少なくなる効果が得られるが、オーバヘッドの発生回数が多ければ多いほど複数のＤＭＡ転送の全てが転送完了するまでの時間が長くなってしまうという課題がある。
【０００７】
本発明はこのような課題に鑑みてなされたものであり、トータルの転送時間とアクセス待ち時間の両方を考慮して、より適切に複数のデータ転送を制御することが可能な技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記の目的を達成するための本発明の一態様によるデータ転送装置は以下の構成を備える。すなわち、
各々が、転送元のメモリからデータをロードして転送先のメモリへ前記データをストアするデータ転送を独立に実行する複数のデータ転送手段と、
複数のデータ転送手段から同時にアクセスすることができない一つのメモリに対して２つ以上のデータ転送手段によるデータ転送が重なった場合に、重なったデータ量を取得する取得手段と、
前記重なったデータ量に基づいて、前記一つのメモリに対する重なったデータ転送の連続転送の単位を変更する変更手段と、を備える。
【発明の効果】
【０００９】
本発明によれば、トータルの転送時間とアクセス待ち時間を考慮してより適切に複数のデータ転送を制御することが可能になる。
【図面の簡単な説明】
【００１０】
【図１】実施形態による通信装置の内部構成例を示すブロック図
【図２】実施形態によるサブＣＰＵの役割分担を説明する図
【図３】実施形態の通信装置の送信動作を示すフローチャート
【図４】実施形態の通信装置の受信動作を示すフローチャート
【図５】ＤＲＡＭのアクセス時間を説明する図
【図６】ディスクリプタフォーマットの例を示す図
【図７】ＤＭＡコントローラの内部レジスタのデータ構成例を示す図
【図８】アクセス制御部の構成を示す図
【図９】実施形態によるＤＭＡ転送制御を示すフローチャート
【発明を実施するための形態】
【００１１】
以下、添付の図面を参照して、本発明の実施形態の一例を説明する。
【００１２】
図１は、本実施形態における通信装置１００の内部構成例を示すブロック図である。通信装置１００は、メインＣＰＵ１０２とメインメモリ１０３とサブシステム１０４を有し、各ブロック（１０２〜１０４）はシステムバス１０１を介して相互に通信可能に接続されている。通信装置１００は、少なくとも図１に示す構成を有する装置であれば、カメラ、プリンタ、ＰＣ、モバイル端末等、どのような種類の装置であってもよい。
【００１３】
メインＣＰＵ１０２は、通信装置全体の制御を実行する。また、メインＣＰＵ１０２は、図２で後述するアプリケーション層２０１でアプリケーションソフトウエアを実行する。アプリケーションソフトウエアを実行する上で必要となるデータやプログラムなどはメインメモリ１０３に記憶されている。メインＣＰＵ１０２は、必要に応じてシステムバス１０１を介してメインメモリ１０３に対してデータやプログラムの読み出しや書き込みを行う。
【００１４】
メインメモリ１０３は、通信装置内の各機能ブロックが共有して利用可能なメモリである。メインメモリ１０３は、ＤＲＡＭ（Dynamic Random Access Memory）に代表されるような半導体メモリで構成される。メインメモリ１０３には、主にアプリケーションソフトウエアが使用するアプリケーションバッファ１０３ａとサブシステム１０４が使用するソケットバッファ１０３ｂ、一時退避バッファ１０３ｃの領域が設けられている。
【００１５】
サブシステム１０４は、ＴＯＥの機能を有し、通信装置１００における通信プロトコル処理を実行する。特に、サブシステム１０４は、ＴＣＰ／ＩＰプロトコルといった通信プロトコル処理に特化して外部機器との間のネットワークを介したデータ転送処理を担っている。サブシステム１０４は、通信プロトコル処理専用のソフトウエア／ハードウエアを具備しており、メインＣＰＵ１０２で実行するよりも高速な通信プロトコル処理を実現する。なお、本実施形態において、ＴＣＰ／ＩＰプロトコルは説明を行うために示した通信プロトコルの一例であり、他の通信プロトコルが適用されてもよい。
【００１６】
サブシステム１０４は、複数のサブＣＰＵ（１０６〜１１０）と、内部メモリ１１１と、通信インターフェース１１２と、ＤＭＡコントローラ１１３を有する。これらブロック（１０６〜１１３）は、ローカルバス１０５を介して相互に通信可能に接続されている。サブＣＰＵ（１０６〜１１０）は、ＴＣＰ／ＩＰプロトコル処理を分担して実行する。サブＣＰＵ（１０６〜１１０）による処理の分担については、図２の参照により後述する。
【００１７】
通信インターフェース１１２は、有線又は無線によって他装置と通信するためのインターフェースであり、ＬＡＮ（Local Area Network）に代表されるようなネットワークとのインターフェースである。通信インターフェース１１２は、通信における物理層（ＰＨＹ層）とデータリンク層（ＭＡＣ層）の通信制御を担う。通信インターフェース１１２は、内部に送受信情報を一時的に蓄積するバッファメモリを具備する。バッファメモリに対する送受信情報の入出力は、ＤＭＡコントローラ１１３のＤＭＡ転送によって行われる。
【００１８】
内部メモリ１１１は、サブシステム１０４のサブＣＰＵ（１０６〜１１０）が共有して利用可能なメモリである。内部メモリ１１１はＳＲＡＭ（Static Random Access Memory）に代表されるような半導体メモリで構成されている。また、メインＣＰＵ１０２からも、システムバス１０１とローカルバス１０５を経由して内部メモリ１１１へのアクセスが可能になっている。ＳＲＡＭはＤＲＡＭに比べてデータの読み書きを高速に行うことができる。即ち、内部メモリ１１１は、メインメモリ１０３に比べて、より高速にデータの読み書きが可能なメモリが用いられている。
【００１９】
ＤＭＡコントローラ１１３は、複数のＤＭＡ転送を同時実行可能であり、受信バッファ１１４、送信バッファ１１５、アクセス制御部１１６、ＤＭＡコア部１１７、レジスタ１１８を有する。
【００２０】
ＤＭＡコア部１１７は複数のＤＭＡ転送を同時実行することができるように複数のＤＭＡ転送装置を有する。すなわち、ＤＭＡコア部は、各々が、転送元のメモリからデータをロードして転送先のメモリへデータをストアする、ＤＭＡによるデータ転送（ＤＭＡ転送）を独立に実行する複数のデータ転送部としての複数のＤＭＡ転送装置を有している。ＤＭＡ転送はディスクリプタに記述された内容に従って実行される。ディスクリプタには、データ転送を行うソース側のアドレス情報、ディスティネーション側のアドレス情報、データ転送サイズ等の情報が記述されている。
【００２１】
アクセス制御部１１６は、メインメモリ１０３に対する複数のＤＭＡ転送が重なった場合に競合制御を行う。受信バッファ１１４は、通信インターフェース１１２で受信した受信パケットを、通信プロトコル処理のために一時的に記憶する。送信バッファ１１５は、通信インターフェース１１２からネットワークへ送信する送信情報を一時的に記憶する。送信バッファ１１５は、送信パケットを生成する際に使用される。レジスタ１１８は、サブＣＰＵ（１０６〜１１０）やメインＣＰＵ１０２からアクセス可能である。
【００２２】
レジスタ１１８は、これらＣＰＵとＤＭＡコントローラ１１３との間のインターフェースの役割を担う。レジスタ１１８を利用したＤＭＡ転送の実行手順について以下に説明する。サブＣＰＵ（１０６〜１１０）あるいはメインＣＰＵ１０２は、ＤＭＡ転送の指示書となるディスクリプタを生成して内部メモリ１１１に保存する。サブＣＰＵ（１０６〜１１０）あるいはメインＣＰＵ１０２は、ディスクリプタが保存されている内部メモリ１１１のアドレス情報をレジスタ１１８の所定の場所に書き込む。ＤＭＡコントローラ１１３は、レジスタ１１８の所定の場所に書き込まれたアドレス情報にしたがって、内部メモリ１１１からディスクリプタを読み込む。ＤＭＡコア部１１７でディスクリプタに記述されている情報に従ってＤＭＡ転送を実行する。また、レジスタ１１８はＤＭＡ転送状況を通知するステータス情報を格納する。
【００２３】
次に、通信装置１００内の通信プロトコル処理を実行するサブシステム１０４内のサブＣＰＵ（１０６〜１１０）の役割分担について、図２を用いて説明する。通信装置１００で実行される処理の階層構造は、アプリケーション層２０１、ソケットＡＰＩ２０２、ＴＣＰ／ＵＤＰ層２０３、ＩＰ層２０４、ＭＡＣドライバ２０５、ＭＡＣ層２０６、ＰＨＹ層２０７を有する。範囲２０９は、この階層構造のうちサブシステム１０４が担当する範囲であり、範囲２０８はメインＣＰＵ１０２が担当する範囲である。
【００２４】
サブシステム１０４はＴＣＰ／ＩＰプロトコルに代表される通信プロトコル処理を実行する。サブシステム１０４は、ソケットＡＰＩ２０２の部分において、アプリケーション層２０１を実行するメインＣＰＵ１０２と必要な情報の受け渡しを実行する。サブシステム１０４の内部では各サブＣＰＵ（１０６〜１１０）間で必要な情報の伝達が実施される。
【００２５】
サブＣＰＵ（１０６〜１１０）は、ＭＡＣ層２０６との間で送受信パケットと通信情報を交換するＭＡＣドライバ２０５の機能を分担する。またサブＣＰＵ（１０６〜１１０）は、ＩＰプロトコルを処理するインターネット層（ＩＰ層）２０４と、ＴＣＰ及びＵＤＰプロトコルを処理するトランスポート層（ＴＣＰ／ＵＤＰ層）２０３の機能を分担する。さらに、サブＣＰＵ（１０６〜１１０）は、ソケットＡＰＩ２０２の一部の機能を分担する。
【００２６】
次に各サブＣＰＵ（１０６〜１１０）のそれぞれが分担する処理について以下に説明する。サブＣＰＵ１１０はソケットＡＰＩ２０２の部分を分担する。サブＣＰＵ１０８はＴＣＰ及びＵＤＰプロトコル処理の内、受信処理に関わる処理を分担する。サブＣＰＵ１０６はＴＣＰ及びＵＤＰプロトコル処理の内、送信処理に関わる処理を分担する。サブＣＰＵ１０９はＭＡＣドライバ２０５及びＩＰプロトコル処理の内、受信処理に関わる処理を分担する。サブＣＰＵ１０７はＭＡＣドライバ２０５及びＩＰプロトコル処理の内、送信処理に関わる処理を分担する。
【００２７】
以上のように各サブＣＰＵ（１０６〜１１０）のそれぞれに処理が分担される。これにより、一連の通信プロトコル処理は、ステージ２１０、２１１，２１２の３つのパイプラインステージに分割されたパイプライン動作により実現され得る。さらに、ステージ２１０，２１１において送信処理と受信処理を分離することで、それぞれの処理を担当するサブＣＰＵ同士の並列動作が可能となる。
【００２８】
なお、ＴＣＰプロトコルは送信パケットの到達保証を行う必要があり、コネクション間で送信パケットの受信側から送信側に対して確認応答を意味する到達確認情報が送信される。送信側でこの到達確認情報を受け取った場合、サブＣＰＵ１０８とサブＣＰＵ１０６の間で到達確認情報の伝達（到達確認の通知２１３）が実行される。これにより、送信パケットの到達が確認される。
【００２９】
次に、図１に示す通信装置１００内の各ＣＰＵ（１０２、１０６〜１１０）間で行われる情報伝達方法について説明する。メインＣＰＵ１０２とサブＣＰＵ１１０との間の情報の受け渡しは、内部メモリ１１１あるいはメインメモリ１０３を媒体として行われる。また、受け渡す情報があるかどうかの通知は、割込みを利用する方法とポーリングによる方法の何れかで行われる。
【００３０】
本実施形態では、サブＣＰＵ（１０６〜１１０）からメインＣＰＵ１０２への上記通知には割込みを利用する方法が用いられる。他方、メインＣＰＵ１０２からサブＣＰＵ（１０６〜１１０）への上記通知にはポーリングによる方法が用いられる。ポーリングによる通知の方法では、たとえば、メインＣＰＵ１０２が内部メモリ１１１の所定の場所に"１"を書き込み、その後、サブＣＰＵ（１０６〜１１０）がポーリングによって上記所定の場所に書き込まれた"１"を読み取ることで通知が行われる。
【００３１】
次に、通信装置１００が、ネットワークを介して外部機器と接続し、その外部機器へ送信パケットを送信する動作について、図３のフローチャートを用いて説明する。なお、本実施形態では、通信装置１００が外部機器との間でデータ転送する際に使用する通信プロトコルとしてＴＣＰ／ＩＰプロトコルが用いられる場合を例に説明している。なお、ＴＣＰ／ＩＰプロトコル以外の通信プロトコルが用いられてもよい。
【００３２】
図３のフローチャートは、送信パケットを外部機器へ送信する際の通信装置１００の動作を示しており、通信装置がネットワークを介して外部機器と接続された状態で、ステップＳ３０１より実行を開始する。
【００３３】
ステップＳ３０２において、通信装置１００は、外部機器へ送信するための送信情報の準備ができたかどうかを判断する。サブシステム１０４に外部機器へ送信するための送信情報を引き渡す準備が完了している場合、処理はステップＳ３０３へ移行し、そうでなければステップＳ３０２が繰り返される。送信情報の準備ができたかどうかは、たとえば次のようにして判断される。まず、通信装置１００のアプリケーションソフトウエアを実行しているメインＣＰＵ１０２は、外部機器へ送信するための送信情報をメインメモリ１０３のアプリケーションバッファ１０３ａに配置する。次に、メインＣＰＵ１０２はサブシステム１０４のサブＣＰＵ１１０に対して、外部機器へ通信プロトコルに従って送信処理を実施するために必要な情報を提供するべく通知（ポーリングによる通知）を行う。そして、サブＣＰＵ１１０は、この通知に応じて上記情報を受け取ると、送信情報の準備が完了したと判定する。なお、上記通知を受けるサブＣＰＵは、サブＣＰＵ１１０に限られるものではなく、他のサブＣＰＵ（１０６〜１０９）であってもよい。
【００３４】
ステップＳ３０３において、外部機器へ送信する送信情報が、メインＣＰＵ１０２からサブシステム１０４へ引き渡される。より具体的には、サブＣＰＵ１１０が、上記通知に応じて、メインＣＰＵ１０２から受け取った情報に基づいてアプリケーションバッファ１０３ａからソケットバッファ１０３ｂへ送信情報を転送するためのＤＭＡ転送の設定を行う。ＤＭＡ転送の設定はサブＣＰＵ１１０がＤＭＡ転送の内容を記述したディスクリプタを生成して内部メモリ１１１に保存することで実行される。そして、サブＣＰＵ１１０がこのディスクリプタが保存されている内部メモリ１１１のアドレス情報をレジスタ１１８へ書き込むと、ＤＭＡコントローラ１１３はＤＭＡ転送を実行する。このＤＭＡ転送が完了すると、ソケットバッファ１０３ｂへの送信情報の転送が完了する。すなわち、メインＣＰＵ１０２からサブシステム１０４への送信情報の引き渡しが完了する。
【００３５】
ステップＳ３０４において、サブシステム１０４は、外部機器へ送信情報を送信するために通信プロトコルに従った送信パケットのヘッダを生成する。より具体的には、サブＣＰＵ１１０はステップＳ３０２でメインＣＰＵ１０２から受け取った情報を基に、サブＣＰＵ１０６にＴＣＰヘッダの生成を指示するとともに必要な情報を渡す。サブＣＰＵ１０６はサブＣＰＵ１１０から受け取った情報を基にＴＣＰヘッダを生成し、生成したＴＣＰヘッダをＤＭＡコントローラ１１３内の送信バッファ１１５に記憶する。ＴＣＰヘッダの生成が完了すると、サブＣＰＵ１０６は、サブＣＰＵ１０７にＩＰヘッダの生成を指示するとともに必要な情報を渡す。
【００３６】
ここで、サブＣＰＵ１０６が図４で後述するステップＳ４０５における到達確認の通知２１３を受けた場合の処理を説明する。サブＣＰＵ１０６は、到達確認の通知（２１４）を受けるとその内容と合致するＴＣＰヘッダを検索する。サブＣＰＵ１０６は、通知の内容と合致したＴＣＰヘッダが付加されている送信パケットが、外部機器へ到達したと認識する。そして、サブＣＰＵ１０６は、このＴＣＰヘッダに関連するペイロードを送信バッファ１１５から削除する。
【００３７】
ステップＳ３０５において、サブシステム１０４は、外部機器へ送信情報を送信するために通信プロトコルに従った送信パケットのペイロードをメインメモリ１０３からサブシステム１０４に転送する。より具体的には、サブＣＰＵ１０７が、ステップＳ３０４でサブＣＰＵ１０６から受け取った情報に基づいて、ソケットバッファ１０３ｂから送信バッファ１１５へ送信情報を転送するＤＭＡ転送の設定を行う。ＤＭＡ転送の設定はサブＣＰＵ１０７がＤＭＡ転送の内容を記述したディスクリプタを生成して内部メモリ１１１に保存することで実行される。そして、サブＣＰＵ１０７が、このディスクリプタを保存した、内部メモリ１１１のアドレス情報をＤＭＡコントローラ１１３のレジスタ１１８へ書き込むと、ＤＭＡコントローラ１１３はＤＭＡ転送を実行する。このＤＭＡ転送の完了をもって送信パケットのペイロード（送信情報）の送信バッファ１１５への転送完了となる。その後、サブＣＰＵ１０７は、サブＣＰＵ１０６から受け取った情報を基にＩＰヘッダを生成し、生成したＩＰヘッダをＤＭＡコントローラ１１３内の送信バッファ１１５に記憶する。
【００３８】
次に、ステップＳ３０６において、サブシステム１０４は、送信パケットを、通信インターフェース１１２を介して外部機器へ送信する。より具体的には、サブＣＰＵ１０７が、ステップＳ３０４とステップＳ３０５で生成されたＴＣＰヘッダ、ＩＰヘッダ、ペイロードを１つの送信パケットとして通信インターフェース１１２へ転送するＤＭＡ転送設定を行う。ＤＭＡ転送の設定はサブＣＰＵ１０７がＤＭＡ転送の内容を記述したディスクリプタを生成して内部メモリ１１１に保存することで実行される。そして、サブＣＰＵ１０７がこのディスクリプタを保存した内部メモリ１１１のアドレス情報をＤＭＡコントローラ１１３のレジスタ１１８へ書き込むとＤＭＡコントローラ１１３はＤＭＡ転送を実行する。このＤＭＡ転送が完了すると、送信パケットが通信インターフェース１１２に転送完了したことになる。通信インターフェース１１２では、物理層（ＰＨＹ層）とデータリンク層（ＭＡＣ層）の通信処理を行った後、ネットワークを介して外部機器へ送信パケットを送信する。
【００３９】
次に、ステップＳ３０７において、通信装置１００と外部機器の接続を終了させる要因が発生したかどうかを判断する。外部機器との接続を終了させる要因が発生したと判断された場合はステップＳ３０７へ処理が進み、そうでなければステップＳ３０２へ処理が戻る。より具体的には、メインＣＰＵ１０２で実行しているアプリケーションソフトウエアにおいて、ユーザからの操作などで通信装置１００と外部機器の接続を終了させる指示を検知した場合は、外部機器との接続を終了させる要因が発生したと判断される。また、ユーザがネットワークケーブルを通信装置から抜くなどして通信回線が断絶したことを通信インターフェース１１２が検知した場合も、外部機器との接続を終了させる要因の発生となる。また、通信相手である外部機器から通信回線を切断する旨の通知を含んだ受信パケットを受信した場合も上記の外部機器との接続を終了させる要因となる。
【００４０】
ステップＳ３０８において、通信装置１００は、外部機器との接続を終了させ、本処理を終了する（ステップＳ３０９）。より具体的には、サブシステム１０４内の各サブＣＰＵ（１０６〜１１０）が分担する通信プロトコル処理に従って外部機器との通信回線の切断処理を実行する。そして、サブＣＰＵ（１０６〜１１０）の何れかが、送信バッファ１１５、受信バッファ１１４、内部メモリ１１１に一時的に保存されている関連情報を削除する。その後、サブＣＰＵ１１０からメインＣＰＵ１０２へ通信回線の切断完了の通知が伝達されると、通信回線が切断した事をユーザへ示す表示をアプリケーションソフトウエアが行う。
【００４１】
次に、通信装置１００において、ネットワークを介して外部機器と接続し、外部機器から受信パケットを受信する際の通信装置１００の動作について、図４のフローチャートを用いて説明する。なお、本実施形態では通信装置１００が外部機器との間でデータ転送する際に使用する通信プロトコルとしてＴＣＰ／ＩＰプロトコルを用いる場合を例示している。なお、ＴＣＰ／ＩＰプロトコル以外の通信プロトコルであってもよい。
【００４２】
ステップＳ４０１から受信パケットの受信処理が開始する。通信装置１００はネットワークを介して外部機器と接続された状態となっている。
【００４３】
ステップＳ４０２において、通信装置１００は外部機器から受信パケットを受信したかどうかを判断する。受信パケットを受信した場合は、処理はステップＳ４０３へ移行し、そうでなければステップＳ４０２の処理が繰り返される。なお、受信パケットを受信したことの判断は、たとえば次のようになされる。通信インターフェース１１２がネットワークから受信パケットを一定量受信したことを検知すると、その旨をサブＣＰＵ１０７に通知する。このとき、通信インターフェース１１２は、通信インターフェース１１２の内部から受信パケットを取り出すために必要な情報をサブＣＰＵ１０７に提供する。サブＣＰＵ１０７が上記情報と共に通知を受け取ると、受信パケットを受信したと判断される。なお、サブＣＰＵ１０７に限らずその他のサブＣＰＵ（１０６，１０８〜１１０）であってもよい。
【００４４】
次に、ステップＳ４０３において、サブシステム１０４は、受信した受信パケットをメインメモリ１０３の一時退避バッファ１０３ｃへ転送する。より具体的には、サブＣＰＵ１０７は、ステップＳ４０２で受け取った情報を基に通信インターフェース１１２からメインメモリ１０３の一時退避バッファ１０３ｃへ受信パケットを転送するＤＭＡ転送設定を行う。ＤＭＡ転送の設定はサブＣＰＵ１０７がＤＭＡ転送の内容を記述したディスクリプタを生成して内部メモリ１１１に保存することで実行される。そして、サブＣＰＵ１０７がこのディスクリプタを保存した内部メモリ１１１のアドレス情報をＤＭＡコントローラ１１３のレジスタ１１８へ書き込むと、ＤＭＡコントローラ１１３がＤＭＡ転送を実行する。このＤＭＡ転送が完了すると、受信パケットの一時退避バッファ１０３ｃへの転送完了となる。その後、サブＣＰＵ１０７は、サブＣＰＵ１０９に対して、受信パケットが一時退避バッファ１０３ｃに保存されている旨の通知を行うとともに必要な情報を渡す。
【００４５】
ステップＳ４０４において、サブシステム１０４は、通信プロトコル処理を行うために、一時退避バッファ１０３ｃに保存した受信パケットを再度サブシステム１０４に転送する。より具体的には、サブＣＰＵ１０９がステップＳ４０３でサブＣＰＵ１０７から受け取った情報に基づいて一時退避バッファ１０３ｃから受信バッファ１１４へ受信パケットを転送するＤＭＡ転送の設定を行う。ＤＭＡ転送の設定はサブＣＰＵ１０９がＤＭＡ転送の内容を記述したディスクリプタを生成して内部メモリ１１１に保存することで実行される。そして、サブＣＰＵ１０９がこのディスクリプタを保存した内部メモリ１１１のアドレス情報をＤＭＡコントローラ１１３のレジスタ１１８へ書き込むと、ＤＭＡコントローラ１１３は、ＤＭＡ転送を実行する。このＤＭＡ転送の完了をもって受信パケットの受信バッファ１１４への転送が完了する。
【００４６】
ステップＳ４０５において、サブシステム１０４は受信パケットの通信プロトコル処理を行う。ここでは受信した受信パケットの解析を行い、その解析結果に応じて処理を実行する。まず、サブＣＰＵ１０９はＤＭＡコントローラ１１３内の受信バッファ１１４に転送された受信パケットのＩＰヘッダ部分の通信プロトコル処理を実行する。その後、サブＣＰＵ１０９はＴＣＰヘッダ部分の通信プロトコル処理を指示する通知と必要な情報をサブＣＰＵ１０８へ引き渡す。サブＣＰＵ１０８は、サブＣＰＵ１０９から受け取った情報を基に受信パケットのＴＣＰヘッダ部分を解析する。ＴＣＰヘッダの解析の結果、受信パケットのペイロードが外部機器から送信された情報であると判定した場合、受信パケットのペイロードの部分をアプリケーションソフトウエアに引き渡すために、処理はステップＳ４０６へ進む。
【００４７】
他方、ＴＣＰヘッダの解析の結果、通信装置自身が送信した送信パケットに対する確認応答を意味する到達確認情報であると判定した場合、サブＣＰＵ１０８は、到達確認の通知２１３をサブＣＰＵ１０６に対して行う。到達確認の通知２１３は、送信バッファ１１５に残っている送信情報の内、到達確認情報に記述されている送信情報については再送のために保持する必要が無くなったことを意味する。サブＣＰＵ１０６による到達確認の通知２１３の処理は、ステップＳ３０４で述べたとおりである。到達確認の通知が行われた後、次の受信パケットの処理待ち状態（Ｓ４０２）へ移行する（図４のフローチャートでは不図示）。
【００４８】
また、ＴＣＰヘッダの解析の結果、通信プロトコルとして不適切な情報（エラーが発生してるなど）であると判定された場合は、サブＣＰＵ１０８は、受信パケットのペイロードの部分も含め破棄する。そして、処理は、次の受信パケットの処理待ち状態（Ｓ４０２）へ移行する（図４のフローチャートでは不図示）。受信パケットが到達確認情報であった場合、あるいは、通信プロトコルとして不適切な情報であった場合には、ステップＳ４０６以降の処理は実行されない。
【００４９】
受信した受信パケットの通信プロトコル処理を終え、ＴＣＰヘッダの解析により受信パケットのペイロードが外部機器から送信された情報であると判定された場合、処理はステップＳ４０６に進む。ステップＳ４０６とステップＳ４０７において、サブシステム１０４は、受信パケットのペイロードをサブシステム１０４からメインメモリ１０３へ転送する。
【００５０】
まず、ステップＳ４０６において、サブＣＰＵ１０８は、受信パケットのペイロードの部分をアプリケーションソフトウエアに引き渡す前準備を行う。この前準備では、受信バッファ１１４からメインメモリ１０３のソケットバッファ１０３ｂへ転送するＤＭＡ転送の設定が行われる。ＤＭＡ転送の設定はサブＣＰＵ１０８がＤＭＡ転送の内容を記述したディスクリプタを生成して内部メモリ１１１に保存することで実行される。そして、サブＣＰＵ１０８がこのディスクリプタを保存した内部メモリ１１１のアドレス情報をＤＭＡコントローラ１１３のレジスタ１１８へ書き込むと、ＤＭＡコントローラ１１３がＤＭＡ転送を実行する。このＤＭＡ転送が完了すると、受信パケットのペイロードがソケットバッファ１０３ｂに転送されたことになる。その後、サブＣＰＵ１０８はソケットバッファ１０３ｂにあるペイロードをアプリケーションソフトウエアに引き渡す指示の通知と必要な情報をサブＣＰＵ１１０へ引き渡す。
【００５１】
ステップＳ４０７において、サブシステム１０４は、受信パケットのペイロードをサブシステム１０４の管理下であるソケットバッファ１０３ｂからメインＣＰＵ１０２の管理下であるアプリケーションバッファ１０３ａへ引き渡す。より具体的には、サブＣＰＵ１１０がステップＳ４０６で受け取った情報を基に受信パケットのペイロードの部分をメインメモリ１０３のソケットバッファ１０３ｂからアプリケーションバッファ１０３ａへ転送するＤＭＡ転送の設定を行う。ＤＭＡ転送の設定はサブＣＰＵ１１０がＤＭＡ転送の内容を記述したディスクリプタを生成して内部メモリ１１１に保存することで実行される。そして、サブＣＰＵ１１０がこのディスクリプタを保存した内部メモリ１１１のアドレス情報をＤＭＡコントローラ１１３のレジスタ１１８へ書き込むと、ＤＭＡコントローラ１１３がＤＭＡ転送を実行する。このＤＭＡ転送が完了すると、受信パケットのペイロードがアプリケーションバッファ１０３ａに転送完了したこととなる。サブＣＰＵ１１０はソケットバッファ１０３ｂにあるペイロードをアプリケーションソフトウエアの管理下に転送完了した旨の通知と必要な情報をメインＣＰＵ１０２へ引き渡す。
【００５２】
ステップＳ４０８において、サブシステム１０４は、通信装置と外部機器の接続を終了させる要因が発生したかどうかを判断する。外部機器との接続を終了させる要因が発生した場合は、処理はステップＳ４０９へ進み、そうでなければ処理はステップＳ４０２へ戻る。たとえば、メインＣＰＵ１０２で実行しているアプリケーションソフトウエアにおいてユーザからの操作などで通信装置と外部機器の接続を終了させる指示を検知した場合は「外部機器との接続を終了させる要因」となる。また、ユーザがネットワークケーブルを通信装置から抜くなどして通信回線が断絶したことを通信インターフェース１１２が検知した場合も「外部機器との接続を終了させる要因」となる。また、通信相手である外部機器から通信回線を切断する旨の通知を含んだ受信パケットを受信した場合も「外部機器との接続を終了させる要因」となる。
【００５３】
ステップＳ４０９において、通信装置１００は外部機器の接続を終了させる。より具体的には、サブシステム１０４内の各サブＣＰＵ（１０６〜１１０）が分担する通信プロトコル処理に従って外部機器との通信回線を切断する処理を実行する。そして、送信バッファ１１５や受信バッファ１１４や内部メモリ１１１に一時的に保存している関連情報を削除する。その後、サブＣＰＵ１１０からメインＣＰＵ１０２へ通信回線の切断完了の通知が伝達されるとアプリケーションソフトウエアで通信回線が切断した事をユーザへ示す表示を行う。
【００５４】
ステップＳ４１０で、フローチャートに示される処理が終了する。この段階で、通信装置１００はネットワークを介して外部機器と接続していない。
【００５５】
図３、図４のフローチャートで説明したように、それぞれのサブＣＰＵ（１０６〜１１０）はメインメモリ１０３に対するＤＭＡ転送を実行している。メインメモリ１０３に対するＤＭＡ転送は、送信処理においてステップＳ３０３，Ｓ３０５の２つ、受信処理においてステップＳ４０３，Ｓ４０４，Ｓ４０６，Ｓ４０７の４つの、合計６つとなる。図２で説明したようにサブシステム１０４内のサブＣＰＵ（１０６〜１１０）は、通信プロトコル処理を実行する際にパイプライン動作、かつ並列動作を行っている。そのため、通信装置１００の通信状況によっては上記６つのメインメモリ１０３に対するＤＭＡ転送は重なって発生する場合がある。
【００５６】
図５は、メインメモリ１０３として一般的に採用されるＤＲＡＭのアクセス時間について示した図である。横軸は時間を示している。ＤＲＡＭに対するデータの読み書きにかかる時間は、アクセス要求時間５０１、アドレス選択時間５０２、データ転送時間５０３、リフレッシュ時間５０４の４種類のアクセス時間に分類することができる。これらアクセス時間について、ＤＭＡコントローラ１１３がＤＭＡ転送によってメインメモリ１０３からデータを読み出す場合で説明する。
【００５７】
［アクセス要求時間５０１］
ＤＭＡ転送が開始されるとＤＭＡコントローラ１１３はメインメモリ１０３に対するアクセス要求をローカルバス１０５に出力する。そして、このアクセス要求はローカルバス１０５とシステムバス１０１を通ってメインメモリ１０３に伝送される。アクセス要求時間５０１は、上述したようにマスタデバイスであるＤＭＡコントローラ１１３がアクセス要求を出力してからそのアクセス要求がスレーブデバイスであるメインメモリ１０３に到達するまでの時間を示している。アクセス要求時間５０１は、ローカルバス１０５やシステムバス１０１に対するアクセス競合が発生する場合などメインメモリ１０３以外の外的要因によって長くなる場合がある。
【００５８】
［アドレス選択時間５０２］
アクセス要求がメインメモリ１０３へ到達した後、ＤＭＡコントローラ１１３からアクセスするエリアを特定するアドレス情報が送信される。アクセス要求がメインメモリ１０３へ到達してから、アドレス情報をメインメモリ１０３が認識するまでの時間がアドレス選択時間５０２となる。アドレス選択時間５０２は、メインメモリ１０３に採用されるＤＲＡＭの種別等で決定される固定値となる。
【００５９】
［データ転送時間５０３］
メインメモリ１０３がアドレス情報を認識した後、指定されたエリアに記録されているデータがメインメモリ１０３から出力される。この時、読み出されるデータは、所定のデータ単位で分割して読み出され、このデータ単位の大きさは設定によって選択できるようになっている。この分割するデータ単位を大きく設定すると、オーバヘッド（アクセス要求時間５０１，アドレス選択時間５０２，リフレッシュ時間５０４）の発生頻度が減るのでメインメモリ１０３からの高速な読み出しが可能となる。一方、アクセス競合が発生すると競合待ちが長くなる。逆にこの分割するデータ単位を小さく設定すると、オーバヘッドの発生頻度が増えるのでメインメモリ１０３からの読み出しは低速になる。一方、アクセス競合の発生時における競合待ち時間は短くなる。
【００６０】
［リフレッシュ時間５０４］
メインメモリ１０３から所定のデータ長の読み出しが完了すると次のアクセスを受け付け可能となるまで一定期間のリフレッシュ期間が必要となる。これは、ＤＲＡＭにおいて内部に記憶している情報を保持するために電荷を補充する期間である。
【００６１】
次にメインメモリ１０３に対してＤＭＡ転送が重なった場合の転送完了までにかかる時間について説明する。アクセス要求時間５０１、アドレス選択時間５０２、リフレッシュ時間５０４を合計してメインメモリ１０３に対して分割したデータ単位毎の転送で発生するオーバヘッド時間ａとする。また、データ転送時間５０３において、最小の分割したデータ単位をＮバイトとし、最長の分割したデータ単位をＭバイトとする。この時、以下の［数１］の関係が成り立つ。
【数１】
2018116574.tif 000003
【００６２】
ここでメインメモリ１０３に対してアクセス競合による待ち時間を最小化するためにはアクセス競合が発生している時にデータ長をＮバイトに設定する必要がある。また、メインメモリ１０３に対してデータ転送時間を高速化するためにはアクセス競合が発生していない時にデータ長をＭバイトに設定する必要がある。データ転送時間５０３において、Ｎバイト転送する時間をｎとし、Ｍバイト転送する時間をｍとする。この時、以下の［数２］の関係が成り立つ。
【数２】
2018116574.tif 000004
【００６３】
次に第一の転送方法（順次転送）について説明する。メインメモリ１０３に対して２つのＤＭＡ転送が重なり、このＤＭＡ転送が重なる部分の転送量がそれぞれＸバイトとする。この時、一方のＤＭＡ転送をデータ単位Ｍバイトで分割しながら連続して転送し、一方のＤＭＡ転送が先に転送完了した後、他方のＤＭＡ転送をデータ単位Ｍバイトで分割しながら連続して転送したとする。この場合、ＤＭＡ転送が重なっていたそれぞれのＤＭＡ転送によるＸバイト分の転送が全て終了するまでの時間ｔ１は次の［数３］ようになる。
【数３】
2018116574.tif 000005
【００６４】
次に第二の転送方法（並列転送）について説明する。メインメモリ１０３に対して２つのＤＭＡ転送が重なり、このＤＭＡ転送が重なる部分の転送量がそれぞれＸバイトとする。この場合、一方のＤＭＡ転送をデータ単位Ｎバイトで分割して転送後、他方のＤＭＡ転送をデータ単位Ｎバイトで分割して転送する。この際、それぞれのＤＭＡ転送はデータ単位Ｎバイト毎に切替えられる。すると、ＤＭＡ転送が重なっていたそれぞれのＤＭＡ転送によるＸバイト分の転送が全て終了するまでの時間ｔ２は次の［数４］のようになる。
【数４】
2018116574.tif 000006
【００６５】
ここで上記２種類の転送方法によるＤＭＡ転送時間の差分時間ｔ３は、［数５］のようになる。
【数５】
2018116574.tif 000007
【００６６】
［数５］によれば、差分時間ｔ３は、ＤＭＡ転送が重なる部分の転送量Ｘが大きいほど長くなることがわかる。図１のようなシステムにおいて、変数ａ、ｃ、Ｎを固定値と仮定するとＤＭＡ転送が重なる部分の転送量Ｘによって差分時間ｔ３が決定されることになる。
【００６７】
転送量Ｘの量が一定値未満の場合は差分時間ｔ３を小さく抑えられるのでＤＭＡ転送待ち時間が少ない第二の転送方法を選択する。また、転送量Ｘの量が一定値以上の場合はＤＭＡ転送待ち時間は大きくなるが差分時間ｔ３を小さくするために第一の転送方法を選択する。なお、ここまではメインメモリ１０３に対して２つのＤＭＡ転送が重なった場合について説明を行ってきた。さらに、同じアルゴリズムを用いて３つから６つまでＤＭＡ転送が重なった場合でも上記２種類の転送方法によるＤＭＡ転送時間の差分時間ｔ４、ｔ５、ｔ６、ｔ７を求めることは可能である。
【００６８】
次に上記の転送量Ｘを求めるための構成について、図６、図７を参照して説明する。図６は、ＤＭＡコントローラ１１３のＤＭＡ転送に使用されるディスクリプタを示したものである。ＤＭＡコア部１１７内のＤＭＡ転送装置は、このディスクリプタに示された情報にしたがってデータ転送を実行する。ディスクリプタは、内部メモリ１１１あるいはメインメモリ１０３に記憶される。
【００６９】
ディスクリプタＩＤ６０１は、ディスクリプタの識別子（ＩＤ）である。ディスクリプタＩＤ６０１によって複数のＤＭＡ転送要求が発行されても、各ＤＭＡ転送要求を管理することが可能となる。また、ディスクリプタＩＤ６０１によって、ＤＭＡ転送が終了していなくても次のＤＭＡ転送を実行するためのディスクリプタを用意することができる。
【００７０】
データソース側アドレス６０２は、データ転送を行う場合のソース側のアドレス情報である。本実施形態では、通信インターフェース１１２、内部メモリ１１１、受信バッファ１１４、送信バッファ１１５、メインメモリ１０３の何れかのアドレス情報が記述される。データソース側転送サイズ６０３は、データ転送を行う場合のソース側の転送サイズ情報である。転送サイズ情報は、転送するデータの総量を示す。
【００７１】
データディスティネーション側アドレス６０４は、データ転送を行う場合のディスティネーション側のアドレス情報である。実際には通信インターフェース１１２、内部メモリ１１１、受信バッファ１１４、送信バッファ１１５、メインメモリ１０３の何れかのアドレス情報が記述される。データディスティネーション側転送サイズ６０５は、データ転送を行う場合のディスティネーション側の転送サイズ情報である。転送サイズ情報は、転送するデータの総量を示す。
【００７２】
図７は、ＤＭＡコントローラ１１３のレジスタ１１８におけるＤＭＡ転送の要求の登録状態を示している。サブレジスタ１１８１〜１１８６は、メインＣＰＵ１０２とサブＣＰＵ（１０６〜１１０）によるＤＭＡ転送要求を受け付ける。サブレジスタ１１８１〜１１８６は同じ構造のレジスタであり、メインＣＰＵ１０２とサブＣＰＵ（１０６〜１１０）のそれぞれに専用に割り当てられている。
【００７３】
サブレジスタ１１８１は、メインＣＰＵ１０２がＤＭＡ転送要求を実行する際に使用するレジスタである。サブレジスタ１１８２〜１１８６はそれぞれサブＣＰＵ１０６〜１１０がＤＭＡ転送要求を実行する際に使用するレジスタである。サブレジスタ１１８１〜１１８６は、構造が同じであるので、以下ではサブレジスタ１１８１について説明する。
【００７４】
サブレジスタ１１８１には、ディスクリプタを保存しているメモリのアドレスを示すディスクリプタアドレス１１８１ａと、ＤＭＡ転送の指示を行ったマスタデバイスを識別するためのマスタ番号１１８１ｂが記述される。ＤＭＡ転送の指示（ディスクリプタ）は、例えばサブレジスタ１１８１のディスクリプタアドレス１１８１ａにディスクリプタを保存しているメモリのアドレス情報を記述することでなされる。ディスクリプタアドレス１１８１ａへのアドレス情報の記述により、ＤＭＡコントローラ１１３はＤＭＡ転送要求の発行を検知する。
【００７５】
次に、図８、図９を参照して、転送量ＸによるＤＭＡ転送の制御方法を説明する。図８は、ＤＭＡコントローラ１１３のアクセス制御部１１６の内部構造を示している。アクセス制御部１１６はメインメモリ１０３に対するＤＭＡ転送状況の監視とＤＭＡ転送のバスアクセス制御を行う。
【００７６】
バスアクセス制御部１１６２は、ローカルバス１０５とＤＭＡコア部１１７内の各ＤＭＡ転送装置との間でバスアクセスを調停する。特にメインメモリ１０３に対するＤＭＡ転送が同時に発生した場合に、ＤＭＡ転送の重なり具合に応じて効率良く、重複したＤＭＡ転送の各々を実行する転送制御を行う。より詳細には、バスアクセス制御部１１６２は、ＤＭＡコア部１１７のＤＭＡ転送装置によるメインメモリ１０３へのＤＭＡ転送において、ＤＭＡ転送が重なる部分の転送量Ｘに基づいて第一の転送方法か第二の転送方法を選択し、選択した転送方法を実行する。
【００７７】
管理テーブル１１６１は、メインメモリ１０３へのＤＭＡ転送の状況を示す。管理テーブル１１６１では、マスタ番号毎に、ＤＭＡ転送量のステータスをカウンタのカウント値を用いて表す。ＤＭＡコア部１１７内の各ＤＭＡ転送装置とバスアクセス制御部１１６２のＤＭＡ転送状況をスヌープするように配置されている。また、図７に示すサブレジスタ１１８１〜１１８６にそれぞれ対応するように項目１１６１ａ〜１１６１ｆが配置されている。項目１１６１ａ〜１１６１ｆは、カウンタとなっており、メインメモリ１０３に対するＤＭＡ転送量をカウントする。カウンタは、マスタ番号毎に配置されメインメモリ１０３をソース側とするデータの読み出し量に基づくカウンタとメインメモリ１０３をディスティネーション側としたデータの書き込み量に基づくカウンタで構成されている。初期値は、項目１１６１ａ〜１１６１ｆの何れのカウンタも０になっている。
【００７８】
次に、通信装置１００において、ＤＭＡコントローラ１１３によってＤＭＡ転送が実施される場合の動作について図９のフローチャートを参照して説明する。ここでは、特にメインメモリ１０３に対して複数のＤＭＡ転送が重なった場合にどのように転送方法を選択してＤＭＡ転送を実行するかを説明する。
【００７９】
ステップＳ９０１より処理が開始する。この時点で、通信装置１００はネットワークを介して外部機器と接続状態となっている。
【００８０】
ステップＳ９０２において、通信装置１００は、外部機器との通信処理を実行するためにＤＭＡ転送の指示があったかどうかを判断する。ＤＭＡ転送の指示があったと判断された場合、処理はステップＳ９０３へ移行し、そうでなければステップＳ９０２の処理を継続する。なお、ＤＭＡ転送の指示は、メインＣＰＵ１０２あるいはサブＣＰＵ（１０６〜１１０）の何れかがレジスタ１１８にディスクリプタアドレスを書込んだかどうかで判断される。例えば、メインＣＰＵ１０２がレジスタ１１８のサブレジスタ１１８１のディスクリプタアドレス１１８１ａに、ディスクリプタが保存されているメモリのアドレス情報を記述することでＤＭＡ転送の指示となる。
【００８１】
ステップＳ９０３において、ＤＭＡコントローラ１１３はＤＭＡ転送処理を実行する。より具体的には、ステップＳ９０２において、レジスタ１１８にディスクリプタアドレスが書込まれるとレジスタ１１８からアクセス制御部１１６はマスタ番号１１８１ｂの通知を受ける。同時にＤＭＡコア部１１７はレジスタ１１８からディスクリプタアドレス１１８１ａとマスタ番号１１８１ｂの通知を受ける。
【００８２】
その後、ＤＭＡコア部１１７内のＤＭＡ転送装置はディスクリプタアドレス１１８１ａの情報に従ってディスクリプタをローカルバス１０５経由で読み込む。この時、バスアクセス制御部１１６２はＤＭＡ転送装置によって読み込まれるディスクリプタをスヌープする。バスアクセス制御部１１６２は、このスヌープによりディスクリプタに記述されているディスクリプタＩＤ６０１とデータソース側転送サイズ６０３、データディスティネーション側転送サイズ６０５を読み取って管理テーブル１１６１に記憶する。なお、本実施形態ではディスクリプタＩＤ６０１がマスタ番号を含み、バスアクセス制御部１１６２はスヌープしたディスクリプタＩＤ６０１からマスタ番号を得ることができる。バスアクセス制御部１１６２は、管理テーブル１１６１の得られたマスタ番号に該当するカウンタにデータソース側転送サイズ（Source Count）とデータティスティネーション側転送サイズ（Destination Count）を登録する。
【００８３】
ここで、カウンタ１１６１ａ〜１１６１ｆとＤＭＡ転送装置はマスタ番号で対応付けされている。すなわち、各ＤＭＡ転送においてどのＤＭＡ転送装置がどのカウンタ１１６１ａ〜１１６１ｆに対応しているかが分かるようになっている。ただし、カウンタ１１６１ａ〜１１６１ｆには読みとったディスクリプタのアドレス情報（データソース側アドレス６０２、データディスティネーション側アドレス６０４）の何れかがメインメモリ１０３のアドレスとなっている場合にのみに記述される。
【００８４】
その後、ＤＭＡ転送が開始されるとバスアクセス制御部１１６２はＤＭＡ転送データをスヌープして転送量に応じて、対応するカウンタ１１６１ａ〜１１６１ｆの値をディクリメントする。
【００８５】
また、ステップＳ９０３において実行されるＤＭＡ転送方法は第一の転送方法である。つまり、データ単位Ｍバイトで分割しながら連続してＤＭＡ転送する方法が用いられる。これはメインメモリ１０３以外の例えば内部メモリ１１１に対するＤＭＡ転送にも適用される。
【００８６】
上記のように制御することで管理テーブル１１６１内の各カウンタ１１６１ａ〜１１６１ｆの値が０でない場合は、メインメモリ１０３に対するＤＭＡ転送が実行されていることを認識できる。また、値が０で無いカウンタ１１６１ａ〜１１６１ｆが複数存在すればメインメモリ１０３に対するＤＭＡ転送が重複して実行されていることを認識できる。
【００８７】
次に、ステップＳ９０４において、ＤＭＡコントローラ１１３は、複数のＤＭＡ転送装置から同時にアクセスすることができない一つのメモリ（メインメモリ１０３）に対して２つ以上のＤＭＡ転送装置によるデータ転送が重なったか否かを判定する。なお、一つのメモリとは、たとえば、複数のＤＭＡ転送装置から同時にアクセスすることのできないメモリ空間を提供するメモリであって、１つのメモリチップに限られるものではない。ＤＭＡコントローラ１１３は、管理テーブル１１６１内のカウンタ１１６１ａ〜１１６１ｆのうち、値が０以外となっているカウンタが複数存在するかどうかを判断する。管理テーブル１１６１内のカウンタ１１６１ａ〜１１６１ｆのうち値が０以外となっているカウンタが複数存在する場合は、処理はステップＳ９０５へ移行し、そうでなければ処理はステップＳ９０８へ移行する。０以外の数値になっているカウンタが複数存在することはメインメモリ１０３に対するＤＭＡ転送が重複して発生していることを意味している。また、０以外の数値になっているカウンタが１つ以下であれば、メインメモリ１０３に対するＤＭＡ転送は重複していないことを意味する。
【００８８】
ステップＳ９０５において、ＤＭＡコントローラ１１３は、メインメモリ１０３に対する重複しているＤＭＡ転送において重なっている部分の転送量Ｘが閾値以下かどうかを判断する。すなわち、ＤＭＡコントローラ１１３は、データ転送が重なったと判定した場合（Ｓ９０４でＹＥＳ）に、重なったデータ量（重なっている部分のデータ転送量Ｘ）を取得する。ＤＭＡコントローラ１１３は、重なっている部分のデータ転送量Ｘに基づいて、メインメモリ１０３に対する重なったデータ転送の方法を変更する。重なっている部分の転送量Ｘが閾値未満の場合は、処理はステップＳ９０７へ移行し、重なっている部分の転送量Ｘが閾値以上の場合は、ステップＳ９０６へ移行する。ここで、０以外の数値になっているカウンタ１１６１ａ〜１１６１ｆの値のうちの最小値が、重なっている部分の転送量Ｘとして用いられる。
【００８９】
次にＤＭＡ転送が重なっている部分の転送量の閾値について説明する。上述のようにＤＭＡ転送が重なっている部分の転送量Ｘが分かると上述の差分時間ｔ３が決定することになる。この差分時間時ｔ３が所定の時間（例えば１０μＳ）となる転送量を閾値とする。この閾値は、例えば、通信装置がネットワークを介して外部機器と情報交換する際に通信装置内部のＤＭＡ転送時間としてこれ以上長くなると性能劣化の要因となると想定される数値から決定される。また一つのメモリ（本実施形態ではメインメモリ１０３）に対して重なったＤＭＡ転送の数に応じて閾値の値を変化させるようにしてもよい。すなわち、上述した差分時間ｔ３、ｔ４、ｔ５、ｔ６、ｔ７のそれぞれに閾値を設けるようにしてもよい。例えば、差分時間ｔ３は１０μＳ、差分時間ｔ４は１２μＳ、差分時間ｔ５は１４μＳ、差分時間ｔ６は１６μＳ、差分時間ｔ７は１８μＳのように閾値を変更しても良い。また、ステップＳ９０５において、３つ以上のＤＭＡ転送が重複した場合には、重なっている部分の転送量Ｘが閾値より小さいか否かに関係なくステップＳ９０６へ進むようにしてもよい。
【００９０】
ステップＳ９０６において、ＤＭＡコントローラ１１３は、メインメモリ１０３に対する重複したＤＭＡ転送を第一の転送方法で実行する。第一の転送方法では、優先する１つのＤＭＡ転送をデータ単位Ｍバイトで分割しながら（すなわち、連続転送の単位をＭバイトとして）連続して先に転送する。そして、その転送の完了後、次の優先順のＤＭＡ転送をデータ単位Ｍバイトで分割しながら連続して転送する。重複したＤＭＡ転送が全て終了するまで、予め設定された優先順に従って順次ＤＭＡ転送が実行される。このＤＭＡ転送制御は、ＤＭＡコントローラ１１３のアクセス制御部１１６によって制御される。すなわち、アクセス制御部１１６は、優先順位に従ってＤＭＡ転送を選択し、データ単位Ｍバイトで分割しながら選択したＤＭＡ転送を実行する。
【００９１】
ここで、ＤＭＡ転送（ＤＭＡ転送装置）の優先順は、たとえば、実行される通信プロトコル処理に基づいて予め決定され、各ＤＭＡ転送に割り当てられている。メインメモリ１０３に対する重複したＤＭＡ転送の優先順について説明する。まず、通信処理を実行している場合にメインメモリ１０３に対してＤＭＡ転送が発生するのは図３と図４におけるステップＳ３０３、Ｓ３０５、Ｓ４０３、Ｓ４０４、Ｓ４０６、Ｓ４０７である。第一優先となるのは図４のステップＳ４０３で実行されるＤＭＡ転送である。つまりサブＣＰＵ１０７が受信した受信パケットをメインメモリ１０３の一時退避バッファ１０３ｃへ転送するＤＭＡ転送が第一優先となる。その理由は以下のとおりである。ネットワークから受信する受信パケットは通信相手の都合によって送られてくるものであるので予測することが難しい。そのため取りこぼし等が発生しないように全てのＤＭＡ転送において優先するように設定される。その他のＤＭＡ転送には均等に割当が行われるように優先度が設定される。
【００９２】
別の方法として、通信装置１００のアプリケーションソフトウエアが送信処理を重視する場合に、ＤＭＡ転送の優先順位として、Ｓ３０５＞Ｓ３０３＞Ｓ４０３＞Ｓ４０４＞Ｓ４０６＞Ｓ４０７の関係になるように設定しても良い。また、別の方法として、通信装置１００のアプリケーションソフトウエアが受信処理を重視する場合に、優先順位をＳ４０３＞Ｓ４０４＞Ｓ４０６＞Ｓ４０７＞Ｓ３０５＞Ｓ３０３の関係になるように設定しても良い。また、優先順位を任意に設定可能にしてもよい。
【００９３】
ステップＳ９０７では、ＤＭＡコントローラ１１３は、メインメモリ１０３に対する重複したＤＭＡ転送を第二の転送方法で実行する。第二の転送方法では、重複したＤＭＡ転送のうちの一つをデータ単位Ｎバイトで分割して転送後、別のＤＭＡ転送をデータ単位Ｎバイトで分割して転送する。重複したＤＭＡ転送が全て終了するまでＤＭＡ転送をデータ単位Ｎバイトで交互にＤＭＡ転送を実行する。このように、ＤＭＡ転送の連続転送のデータ単位をＮバイトとし、Ｎバイト毎にＤＭＡ転送を切替えながら転送することで、見かけ上並列にＤＭＡ転送が進行する。このＤＭＡ転送制御はＤＭＡコントローラ１１３のアクセス制御部１１６によって実行される。すなわち、アクセス制御部１１６は、データ単位ＮバイトでＤＭＡ転送を分割して重複しているＤＭＡ転送を交互に実行する。
【００９４】
ステップＳ９０８において、ＤＭＡコントローラ１１３は、管理テーブル１１６１内の各カウンタ１１６１ａ〜１１６１ｆの値が全て０となっているかどうかをチェックすることにより、すべてのＤＭＡ転送が完了したかを判断する。管理テーブル１１６１内の各カウンタ１１６１ａ〜１１６１ｆの値が全て０となっている場合は、本処理を終了し（ステップＳ９０９）、そうでなければ処理はステップＳ９０４に戻る。なお、全てのカウンタ１１６１ａ〜１１６１ｆの数値が０になっているということはメインメモリ１０３に対するＤＭＡ転送が発生していないということである。１つでも０以外の数値になっているカウンタ１１６１ａ〜１１６１ｆがあればメインメモリ１０３に対するＤＭＡ転送が発生しているということである。なお、ステップＳ９０９において、通信装置１００はネットワークを介して外部機器と接続状態となっているが、通信装置１００内でメインメモリ１０３に対するＤＭＡ転送は実施されていない状態である。
【００９５】
なお、上記実施形態では、第一の転送方法としてＭバイトを連続転送単位として個々のＤＭＡ転送を順次に完了させていくようにしたがこれに限られるものではない。たとえば、第二の転送方法でＮバイトの連続転送単位でＤＭＡ転送を切り替えるのと同様に、第一の転送方法でＭバイトの連続転送単位でＤＭＡ転送を切り替えるようにしてもよい。Ｎバイト＜Ｍバイトなので、切り替えの回数が減少し、オーバーヘッドの時間を低減することができる。
【００９６】
以上のように、本実施形態によれば、ＤＭＡ転送が重なった量が少ない場合にはアクセス待ち時間を小さくするように制御を行い、多い場合にはトータルの転送完了時間が短くなるように制御を行う。結果、本実施形態によれば、ＤＲＡＭのような、アクセス単位毎に発生するオーバヘッドが比較的大きな記憶装置に対してＤＭＡ転送が重なった場合に、トータルの転送時間とアクセス待ち時間の両方を考慮して、より最適にデータ転送を制御できる。
【符号の説明】
【００９７】
１０２：メインＣＰＵ、１０３：メインメモリ、１０４：サブシステム、１０６〜１１０：サブＣＰＵ、１１１：内部メモリ、１１３：ＤＭＡコントローラ
【図１】
2018116574.tif 000008
【図２】
2018116574.tif 000009
【図３】
2018116574.tif 000010
【図４】
2018116574.tif 000011
【図５】
2018116574.tif 000012
【図６】
2018116574.tif 000013
【図７】
2018116574.tif 000014
【図８】
2018116574.tif 000015
【図９】
2018116574.tif 000016