(57)【要約】  入出力装置は、指示部と実行部とを有し、指示部は、メインメモリとバッファメモリとの間における複数のデータブロックの各々についての転送を指示し、実行部は、指示部からの転送指示に係る１のデータブロックについての転送を実行し、転送完了後、その１のデータブロックに係る完了情報を指示部へ通知するにあたり、複数のデータブロックの転送の進捗状況を管理する管理情報に基づいて、複数のデータブロックの全ての転送が完了したか否かを判定し、全ての転送が完了したと判定した場合、全ての転送が完了した旨を示す全完了情報を指示部へ通知する。
2015155850.tif 000002
【特許請求の範囲】
【請求項１】
メインメモリに格納されているデータを複数のデータブロックに分割してバッファメモリへ転送する場合、又は、バッファメモリに格納されているデータを複数のデータブロックに分割してメインメモリへ転送する場合、前記複数のデータブロックの各々のデータブロックについての転送を指示する指示部と、
前記指示部からの転送指示に係る前記データブロックについての転送を実行し、転送完了後、前記データブロックの転送が完了した旨を示す完了情報を前記指示部へ通知する実行部と、を有し、
前記実行部は、前記複数のデータブロックの転送の進捗状況を管理する管理情報に基づいて、前記複数のデータブロックの全ての転送が完了したか否かを判定し、全ての転送が完了したと判定した場合、前記複数のデータブロックの全ての転送が完了した旨を示す全完了情報を前記指示部へ通知する、
を有する入出力装置。
【請求項２】
前記指示部は、前記複数のデータブロックの内の第１のデータブロックに係る転送指示に対応する前記完了情報の通知を待つことなく、前記複数のデータブロックの内の第２のデータブロックについての転送を指示する
請求項１に記載の入出力装置。
【請求項３】
前記指示部は、前記複数のデータブロックの内の最終のデータブロックについての転送を指示するにあたり、その指示に最終である旨を表す最終情報を含め、
前記管理情報は、前記実行部が指示を受けた前記複数のデータブロックの各々の転送が完了したか否か、及び、前記最終情報を受けたか否かを管理するものであり、
前記実行部は、前記管理情報において、転送指示された全ての転送が完了しており、且つ、前記最終情報を受けている場合、全ての転送が完了したと判定する
請求項２に記載の入出力装置。
【請求項４】
前記指示部は、前記メインメモリに格納されているデータを複数のデータブロックに分割して前記バッファメモリへ転送する場合、前記全完了情報の通知を受けた後、前記バッファメモリへ転送された前記複数のデータブロックから構成されるデータについての送信を指示する
請求項２に記載の入出力装置。
【請求項５】
前記指示部は、前記バッファメモリに格納されているデータを複数のデータブロックに分割して前記メインメモリへ転送する場合、前記全完了情報の通知を受けた後、前記バッファメモリについての解放を指示する
請求項２に記載の入出力装置。
【請求項６】
前記全完了情報は、前記完了情報に含まれて前記指示部へ通知される
請求項２に記載の入出力装置。
【請求項７】
複数のバッファメモリを有する場合、前記完了情報は、１のバッファメモリに係る全てのデータブロックの転送が完了した旨を示すものである
請求項２に記載の入出力装置。
【請求項８】
前記メインメモリから前記バッファメモリへ、又は、前記バッファメモリから前記メインメモリへのデータブロックの転送は、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送であり、
前記第１のデータブロックと前記第２のデータブロックとは、異なるＤＭＡチャネルを用いて転送される
請求項２に記載の入出力装置。
【請求項９】
メインメモリに格納されているデータを複数のデータブロックに分割してバッファメモリへ転送する場合、又は、バッファメモリに格納されているデータを複数のデータブロックに分割してメインメモリへ転送する場合における入出力方法であって、
前記複数のデータブロックの内の１のデータブロックの転送指示を受け、前記１のデータブロックについての転送を実行し、
転送完了後、前記１のデータブロックの転送が完了した旨を示す完了情報を前記転送指示の指示元へ通知するにあたり、前記複数のデータブロックの転送の進捗状況を管理する管理情報に基づいて前記複数のデータブロックの全ての転送が完了したか否かを判定し、全ての転送が完了したと判定した場合、前記複数のデータブロックの全ての転送が完了した旨を示す全完了情報を前記転送指示の指示元へ通知する
入出力方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、データの入出力の技術に関する。
【背景技術】
【０００２】
計算機が通信ネットワークを介してストレージ装置などにアクセスする場合、計算機内のバス通信に係るプロトコルと、通信ネットワークに係るプロトコルとが異なり得る。このような異なるプロトコルを変換する入出力装置の一つとしてＨＢＡ（Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｅｒ）が知られている（特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１５０６２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
通常、通信ネットワークに係るプロトコルに従う１フレームのサイズは、バス通信に係るプロトコルに従う１データブロックのサイズよりも大きい。そこで、ＨＢＡは、計算機のメインメモリに格納されている複数のデータブロックを１フレームに格納して通信ネットワークに送信し、又は、通信ネットワークから受信した１フレームから複数のデータブロックを抽出して計算機のメインメモリに格納する。このとき、ＨＢＡは、計算機のメインメモリと、フレームが格納されるバッファメモリとの間でデータ転送を行う。【０００５】
計算機内のバス通信及び通信ネットワークの高速化に伴い、ＨＢＡに関する処理の高速化が求められているところ、上述のデータ転送も高速化する必要がある。【０００６】
そこで、本発明の目的は、入出力装置の処理を高速化することにある。また、本発明の別の目的は、計算機内のメインメモリと、入出力装置内のバッファメモリとの間のデータ転送を高速化することにある。
【課題を解決するための手段】
【０００７】
一実施形態に係る入出力装置は、指示部と実行部とを有する。指示部は、メインメモリに格納されているデータを複数のデータブロックに分割してバッファメモリへ転送する場合、又は、バッファメモリに格納されているデータを複数のデータブロックに分割してメインメモリへ転送する場合、複数のデータブロックの各々のデータブロックについての転送を指示する。実行部は、指示部からの転送指示に係るデータブロックについての転送を実行し、転送完了後、このデータブロックの転送が完了した旨を示す完了情報を指示部へ通知する。さらに、実行部は、複数のデータブロックの転送の進捗状況を管理する転送管理情報に基づいて、複数のデータブロックの全ての転送が完了したか否かを判定し、全ての転送が完了したと判定した場合、その複数のデータブロックの全ての転送が完了した旨を示す全完了情報を指示部へ通知する。【０００８】
入出力装置は、入出力データを変換する変換アダプタ、若しくは、他のネットワーク機器又はストレージ機器とホスト計算機とを接続するホストバスアダプタなどであってもよい。
【発明の効果】
【０００９】
本発明によれば、入出力装置の処理を高速化することができる。また、本発明によれば、計算機内のメインメモリと、入出力装置内のバッファメモリとの間のデータ転送を高速化することができる。
【図面の簡単な説明】
【００１０】
【図１】一実施例に係る計算機の構成例を示す。
【図２】一比較例に係るＨＢＡがフレームを送信する処理を示すシーケンスチャートである。
【図３】一比較例に係るＨＢＡがフレームを受信する処理を示すシーケンスチャートである。
【図４】送信バッファ管理テーブルの構成例を示す。
【図５】受信バッファ管理テーブルの構成例を示す。
【図６】送信データ管理テーブルの構成例を示す。
【図７】受信データ管理テーブルの構成例を示す。
【図８】ＨＢＡからストレージ装置へフレームを送信する処理例を表すシーケンスチャートである。
【図９】ＨＢＡがストレージ装置からフレームを受信する処理例を表すシーケンスチャートである。
【発明を実施するための形態】
【００１１】
以下、実施形態を説明する。なお、以後の説明では、「×××テーブル」等の表現にて情報を説明することがあるが、これら情報はテーブル等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「×××テーブル」等について「×××情報」と呼ぶことがある。また、各情報の内容を説明する際に、「番号」、「名称」という表現の識別情報が採用されるが、他種の識別情報が使用されてよい。
【００１２】
図１は、本実施例に係る計算機１０の構成例を示す。
【００１３】
計算機１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１と、メインメモリ１３と、ホストブリッジ１１２と、ＰＣＩｅ（ＰＣＩ  Ｅｘｐｒｅｓｓ）バス１０５と、ＨＢＡ１０６とを有する。ホストブリッジ１１２には、ＣＰＵ１１とメインメモリ１３とＰＣＩｅバス１０５とが接続されている。内部バスの一種であるＰＣＩｅバス１０５には、ＨＢＡ１０６とホストブリッジ１１２とが接続されている。ＨＢＡ１０６とストレージ装置１１３とは、通信ネットワークの一種であるＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）で接続されている。すなわち、ＨＢＡ１０６は、計算機１０を、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌに接続するためのデバイスである。
【００１４】
ＨＢＡ１０６は、ＬＳＩ１０４と記憶デバイス１０８とを有し、計算機１０内のＰＣＩｅバス１０５を伝送するデータと、ＳＡＮを伝送するデータと、を制御する。ＬＳＩ１０４ではＦＷ１０７が実行され、ＨＢＡ１０６の有する様々な機能が実現される。
【００１５】
ＨＢＡ１０６は、ＰＣＩｅに係るプロトコルに従ってメインメモリ１３からデータブロックをリードし、そのデータブロックをＳＡＮに係るプロトコルに従うフレームに変換し、そのフレームをストレージ装置１１３へ送信する機能を有する。このとき、ＨＢＡ１０６は、メインメモリ１３からリードしたデータブロックをいったん記憶デバイス１０８内の送信バッファ１０９に格納し、ＳＡＮに係るプロトコルに従うフレームに変換する。
【００１６】
ＨＢＡ１０６は、ストレージ装置１１３からＳＡＮに係るプロトコルに従うフレームを受信し、そのフレームをＰＣＩｅに係るプロトコルに従うデータブロックに変換し、そのデータブロックをメインメモリ１３にライトする機能を有する。このとき、ＨＢＡ１０６は、ストレージ装置１１３から受信したフレームをいったん記憶デバイス１０８内の受信バッファ１１０に格納し、ＰＣＩｅに係るプロトコルに従うデータブロックに変換する。
【００１７】
計算機１０内のＣＰＵ１１では、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）１００が実行される。ＯＳ１００上では、アプリケーションプログラム１０１と、ＨＢＡドライバ１０２とが実行される。
【００１８】
アプリケーションプログラム１０１がストレージ装置１１３へデータを送信する場合、ＯＳ１００は、送信データをメインメモリ１３に格納する。そして、ＨＢＡドライバ１０２は、ＨＢＡ１０６に対して、メインメモリ１３に格納されている送信データを送信バッファ１０９へＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送する旨指示する。ＨＢＡ１０６は、その指示を受けて、上述のように、メインメモリ１３から送信データを構成する複数のデータブロックをリードし、そのデータブロックを送信バッファ１０９へＤＭＡ転送する。
【００１９】
アプリケーションプログラム１０１がストレージ装置１１３からデータを受信する場合、ＨＢＡドライバ１０２は、ＨＢＡ１０６に対して、受信バッファ１１０のフレームに格納されている受信データをメインメモリ１３へＤＭＡ転送する旨指示する。ＨＢＡ１０６は、その指示を受けて、上述のように、受信バッファ１１０から受信データを構成する複数のデータブロックをリードし、そのリードしたデータブロックをメインメモリ１３へＤＭＡ転送する。そして、ＯＳ１００は、メインメモリ１３に転送された受信データを、アプリケーションプログラム１０１に提供する。
【００２０】
以下、ＨＢＡ１０６において、ＤＭＡ転送を指示する機能を「指示部２０１」、ＤＭＡ転送を実行する機能を「実行部２０２」と表現して説明する。指示部２０１は、ＬＳＩ１０４のＦＷ１０７又はＬＳＩ１０４の所定の論理回路によって実現されてよい。実行部２０２の機能は、ＬＳＩ１０４は、ＬＳＩ１０４のＦＷ１０７又はＬＳＩ１０４の所定の論理回路によって実現されてよい。
【００２１】
以下、本実施例の特徴を理解し易くするため、まず、図２を参照しながら一比較例に係るＨＢＡにおけるフレーム送信時の処理を説明し、また、図３を参照しながら一比較例に係るＨＢＡにおけるフレーム受信時の処理を説明する。
【００２２】
図２は、一比較例に係るＨＢＡにおけるフレーム送信時の処理を示すシーケンスチャートである。
【００２３】
指示部は、実行部に対して、送信バッファの確保を要求する（Ｓ４００）。
【００２４】
送信バッファの確保要求を受けた実行部は、未使用の送信バッファの１つを確保する（Ｓ４０１）。ここで、実行部は、送信バッファ番号「０」の送信バッファ（「送信バッファ＃０」と表現する）を確保したとする。実行部は、送信バッファ＃０の確保完了を指示部へ通知する（Ｓ４０２）。
【００２５】
送信バッファ＃０の確保完了の通知を受けた指示部は、送信用のフレームヘッダを生成する。そして、指示部は、その生成した送信用のフレームヘッダを、送信バッファ番号＃０にライトする（Ｓ４０３）。送信用のフレームヘッダには、送信元のアドレス及び宛先のアドレスなどが含まれている。
【００２６】
指示部は、実行部に対して、１回目のＤＭＡ転送に係るデータブロック情報を通知する（Ｓ４０４）。このデータブロック情報には、例えば、１回目のＤＭＡ転送に係る、データブロックのサイズ、データブロックのリード先となるメインメモリのアドレス（「リード先メモリアドレス」という）、及び、データブロックのライト先となる送信バッファ番号（ここでは「０」となる）などが含まれる。
【００２７】
そして、指示部は、実行部に対して、Ｓ４０４で通知したデータブロック情報に基づくＤＭＡ転送を指示する（Ｓ４０５）。
【００２８】
Ｓ４０５のＤＭＡ転送の指示を受けた実行部は、ＤＭＡエンジンを用いて、Ｓ４０４で通知されたデータブロック情報に基づくＤＭＡ転送を実行する（Ｓ４０６）。つまり、ＤＭＡエンジンは、データブロック情報に含まれるリード先メモリアドレスから、データブロックのサイズ分のデータブロックをリードし、そのデータブロックを送信バッファ＃０へライトする。このＤＭＡ転送の完了後、実行部は、指示部に対して、ＤＭＡ転送完了を通知する（Ｓ４０７）。
【００２９】
ＤＭＡ転送完了の通知を受けた指示部は、フレームに格納する送信データのサイズから、Ｓ４０６によりＤＭＡ転送したデータブロックのサイズ（Ｓ４０４で通知したデータブロックのサイズ）を減算し、残りのデータのサイズを算出する。そして、指示部は、「残りのデータのサイズ≦０」であるか否かを判定する（Ｓ４０８）。つまり、ＤＭＡ転送すべきデータブロックが残っているか否かを判定する。
【００３０】
「残りのデータのサイズ＞０」である場合（Ｓ４０８：ＮＯ）、指示部は、実行部に対して、２回目のＤＭＡ転送に係るデータブロック情報を通知する（Ｓ４０９）。このデータブロック情報には、２回目のＤＭＡ転送に係る、データブロックのサイズ、リード先メモリアドレス、及び送信バッファ番号「０」が含まれる。
【００３１】
そして、指示部は、実行部に対して、Ｓ４０９で通知したデータブロック情報に基づくＤＭＡ転送を指示する（Ｓ４１０）。
【００３２】
Ｓ４１０のＤＭＡ転送の指示を受けた実行部は、ＤＭＡエンジンを用いて、Ｓ４０９で通知されたデータブロック情報に基づくＤＭＡ転送を実行する（Ｓ４１２）。このＤＭＡ転送の完了後、実行部は、指示部に、ＤＭＡ転送完了を通知する（Ｓ４１３）。
【００３３】
ＤＭＡ転送完了通知を受けた指示部は、上記の残りのデータのサイズから、Ｓ４１０によりＤＭＡ転送したデータブロックのサイズ（Ｓ４０９で通知したデータブロックのサイズ）を減算し、新たに残りのデータのサイズを算出する。そして、指示部２０１は、Ｓ４０８と同様、「残りのデータのサイズ≦０」であるか否かを判定する（Ｓ４１４）。
【００３４】
「残りのデータのサイズ≦０」である場合（Ｓ４１４：ＹＥＳ）、指示部は、実行部に対して、送信バッファ＃０におけるフレームの送信を指示する（Ｓ４１５）。フレームの送信指示を受けた実行部は、送信バッファ＃０に格納されたフレームヘッダ及び複数のデータブロックを含むフレームを、ストレージ装置１１３へ送信する（Ｓ４１６）。
【００３５】
このようにして一比較例に係るＨＢＡは、メインメモリの送信データからフレームを構成し、そのフレームをストレージ装置へ送信する。
【００３６】
図３は、一比較例に係るＨＢＡにおけるフレーム受信時の処理を示すシーケンスチャートである。
【００３７】
実行部は、ストレージ装置からフレームを受信すると、フレームを受信した旨及びそのフレームを格納した受信バッファの受信バッファ番号を、指示部へ通知する（Ｓ５００）。ここで、実行部は、受信バッファ番号「１」の受信バッファ（「受信バッファ＃１」と表現する）にフレームを格納したとする。
【００３８】
フレームの受信通知を受けた指示部は、受信バッファ＃１からフレームヘッダをリードする（Ｓ５０１）。そして、指示部は、このリードしたフレームヘッダの情報に基づき、１回目のＤＭＡ転送に係るデータブロック情報を生成する。このデータブロック情報には、１回目のＤＭＡ転送に係る、データブロックのサイズ、データブロックのライト先となるメインメモリのアドレス（「ライト先メモリアドレス」という）、データブロックのリード先となる受信バッファ番号（ここでは「１」となる）が含まれる。
【００３９】
指示部は、実行部に対して、この１回目のＤＭＡ転送に係るデータブロック情報を通知する（Ｓ５０２）。そして、指示部は、実行部に対して、Ｓ５０２で通知したデータブロック情報に基づくＤＭＡ転送を指示する（Ｓ５０３）。
【００４０】
Ｓ５０３のＤＭＡ転送の指示を受けた実行部は、ＤＭＡエンジンを用いて、Ｓ５０２で通知されたデータブロック情報に基づくＤＭＡ転送を実行する（Ｓ５０４）。つまり、ＤＭＡエンジンは、受信バッファ＃１から、データブロックのサイズ分のデータブロックをリードし、そのデータブロックをメインメモリのライト先メモリアドレスへライトする。このＤＭＡ転送の完了後、実行部は、指示部に対して、ＤＭＡ転送完了を通知する（Ｓ５０５）。
【００４１】
ＤＭＡ転送完了の通知を受けた指示部は、フレームに格納されている受信データのサイズから、Ｓ５０４によりＤＭＡ転送したデータブロックのサイズ（Ｓ５０２で通知したデータブロックのサイズ）を減算し、残りのデータのサイズを算出する。そして、指示部は、「残りのデータのサイズ≦０」であるか否かを判定する（Ｓ５０６）。つまり、ＤＭＡ転送すべきデータブロックが残っているか否かを判定する。
【００４２】
「残りのデータのサイズ＞０」である場合（Ｓ５０６：ＮＯ）、指示部は、実行部に対して、２回目のＤＭＡ転送に係るデータブロック情報を通知する（Ｓ５０７）。このデータブロック情報には、２回目のＤＭＡ転送に係る、データブロックのサイズ、ライト先メモリアドレス、及び受信バッファ番号「１」が含まれる。
【００４３】
そして、指示部は、実行部に対して、Ｓ５０７で通知したデータブロック情報に基づくＤＭＡ転送を指示する（Ｓ５０８）。
【００４４】
Ｓ５０８のＤＭＡ転送の指示を受けた実行部は、ＤＭＡエンジンを用いて、Ｓ５０７で通知されたデータブロック情報に基づくＤＭＡ転送を実行する（Ｓ５０９）。このＤＭＡ転送の完了後、実行部は、指示部に対して、ＤＭＡ転送完了を通知する（Ｓ５１０）。
【００４５】
ＤＭＡ転送完了の通知を受けた指示部は、上記の残りの受信データのサイズから、Ｓ５０９によりＤＭＡ転送したデータブロックのサイズ（Ｓ５０７で通知したデータブロックのサイズ）を減算し、新たに残りのデータのサイズを算出する。そして、指示部は、Ｓ５０６と同様、「残りのデータのサイズ≦０」であるか否かを判定する（Ｓ５１１）。
【００４６】
「残りのデータのサイズ≦０」である場合（Ｓ５１１：ＹＥＳ）、指示部は、実行部に対して、受信バッファ＃１の解放を指示する（Ｓ５１２）。受信バッファ＃１の解放指示を受けた実行部は、受信バッファ＃１を解放する（Ｓ５１３）。
【００４７】
このようにして一比較例に係るＨＢＡは、受信したフレームから受信データを抽出し、メインメモリに格納する。
【００４８】
図２に示す一比較例に係るＨＢＡの場合、指示部は、ＤＭＡ転送を指示した後（Ｓ４０５）、ＤＭＡ転送完了の通知を受けてから（Ｓ４０７）、次のＤＭＡ転送を指示する（Ｓ４１０）。すなわち、ＨＢＡは、１つのＤＭＡ転送が完了するまで、次のＤＭＡ転送を実行することができない。したがって、フレームに格納すべき送信データを１回のＤＭＡ転送で送信バッファへ転送できない場合（つまり、複数回のＤＭＡ転送が必要な場合）、指示部において待ち時間が発生してしまう。これは、ＨＢＡの性能低下につながる。
【００４９】
図３に示す一比較例に係るＨＢＡの場合も同様に、指示部は、ＤＭＡ転送を指示した後（Ｓ５０３）、ＤＭＡ転送完了の通知を受けてから（Ｓ５０５）、次のＤＭＡ転送を指示する（Ｓ５０８）。すなわち、ＨＢＡは、１つのＤＭＡ転送が完了するまで、次のＤＭＡ転送を実行することができない。したがって、フレームから抽出すべき受信データを１回のＤＭＡ転送でメインメモリへ転送できない場合（つまり、複数回のＤＭＡ転送が必要な場合）、指示部において待ち時間が発生してしまう。これも、ＨＢＡの性能低下につながる。
【００５０】
以下、このような課題を解決するＨＢＡ１０６の実施例について、図面を参照しながら説明する。
【００５１】
ＨＢＡ１０６は、送信バッファ管理テーブル３００と、受信バッファ管理テーブル３２０と、送信データ管理テーブル３４０と、受信データ管理テーブル３６０とを有する。これらのテーブルは、記憶デバイス１０８に保持されてもよいし、ＬＳＩ１０４のレジスタとして保持されてもよい。ＨＢＡ１０６は、記憶デバイス１０８に、複数の送信バッファ１０９及び複数の受信バッファ１１０を有する。
【００５２】
図４は、送信バッファ管理テーブル３００の構成例を示す。
【００５３】
送信バッファ管理テーブル３００は、送信バッファ１０９に関する情報を有する送信バッファ情報を、レコードとして管理する。送信バッファ管理テーブル３００は、送信バッファ番号のフィールド３０１と、最終指示フラグのフィールド３０２と、ＤＭＡステータスのフィールド３０３と、を有する。
【００５４】
送信バッファ番号のフィールド３０１には、送信バッファ１０９を識別する番号が格納される。
【００５５】
最終指示フラグのフィールド３０２には、送信バッファ番号に係る送信バッファ１０９に対する最終のＤＭＡ転送の指示を受けたか否かを示すフラグが格納される。例えば、最終のＤＭＡ転送の指示を受ける前のフラグを「未」とし、最終のＤＭＡ転送の指示を受けた後のフラグを「済」とする。
【００５６】
ＤＭＡステータスのフィールド３０３は、ＤＭＡチャネル毎のフィールド３０４を有する。ＤＭＡチャネルのフィールド３０４には、そのＤＭＡチャネルを用いて実行されるＤＭＡ転送の進捗状況に関する情報が格納される。例えば、ＤＭＡチャネルのフィールド３０４には、そのＤＭＡチャネルを用いて実行されるＤＭＡ転送が、複数回のＤＭＡ転送の内の何番目に該当するのかを示す番号、及びそのＤＭＡ転送が完了したか否かを示すフラグが格納される。例えば、ＤＭＡ転送が完了する前のフラグを「未」とし、ＤＭＡ転送が完了した後のフラグを「済」とする。
【００５７】
送信バッファ管理テーブル３００におけるレコード３１０ａは、送信バッファ＃０に対するＤＭＡ転送は、最終のＤＭＡ転送指示を受けた後の状態であり（フィールド３０２）、ＤＭＡチャネル「０」（「ＤＭＡ＃０」と表現する）を用いた１番目のＤＭＡ転送（「ＤＭＡ＃０転送」と表現する）及び２番目のＤＭＡ＃１転送の何れも完了していることを表す（フィールド３０４）。
【００５８】
送信バッファ管理テーブル３００におけるレコード３１０ｂは、送信バッファ＃１に対するＤＭＡ転送は、最終のＤＭＡ転送指示を受ける前の状態であり（フィールド３０２参照）、１番目のＤＭＡ＃１転送は完了しているが、２番目のＤＭＡ＃２転送及び３番目のＤＭＡ＃３転送は何れも未完了であることを表す（フィールド３０４）。
【００５９】
すなわち、送信バッファ管理テーブル３００は、複数の送信バッファの各々について、その送信バッファに対するＤＭＡ転送に使用されている複数のＤＭＡチャネルと、その使用されている複数のＤＭＡチャネルのそれぞれにおけるＤＭＡ転送の進捗状況と、を管理するための情報を有する。さらに、送信バッファ管理テーブル３００は、その送信バッファに対する最終のＤＭＡ転送指示を実行部２０２が受けたか否かを管理するための情報を有してもよい。
【００６０】
図５は、受信バッファ管理テーブル３２０の構成例を示す。
【００６１】
受信バッファ管理テーブル３２０は、受信バッファ１１０に関する情報を有する受信バッファ情報を、レコードとして管理する。受信バッファ管理テーブル３２０は、受信バッファ番号のフィールド３２１と、最終指示フラグのフィールド３２２と、ＤＭＡステータスのフィールド３２３と、を有する。
【００６２】
受信バッファ番号のフィールド３２１には、受信バッファ１１０を識別する番号が格納される。
【００６３】
最終指示フラグのフィールド３２２には、受信バッファ番号に係る受信バッファ１１０に対する最終のＤＭＡ転送の指示を受けたか否かを示すフラグが格納される。例えば、最終のＤＭＡ転送の指示を受ける前のフラグを「未」とし、最終のＤＭＡ転送の指示を受けた後のフラグを「済」とする。
【００６４】
ＤＭＡステータスのフィールド３２３及びＤＭＡチャネルのフィールド３２４には、図４におけるＤＭＡステータスのフィールド３０３及びＤＭＡチャネルのフィールド３０４と同様の情報が格納される。
【００６５】
受信バッファ管理テーブル３２０におけるレコード３３０ａは、受信バッファ＃１に対するＤＭＡ転送は、最終のＤＭＡ転送指示を受けた後の状態であり（フィールド３２２）、１番目のＤＭＡ＃０転送及び２番目のＤＭＡ＃１転送は完了しているが、３番目のＤＭＡ＃２転送は未完了であることを表す（フィールド３２４）。
【００６６】
すなわち、受信バッファ管理テーブル３２０は、複数の受信バッファの各々について、その受信バッファからのＤＭＡ転送に使用されている複数のＤＭＡチャネルと、その使用されている複数のＤＭＡチャネルのそれぞれにおけるＤＭＡ転送の進捗状況と、を管理するための情報を有する。さらに、受信バッファ管理テーブル３２０は、その受信バッファからの最終のＤＭＡ転送指示を実行部２０２が受けたか否かを管理するための情報を有してもよい。
【００６７】
図６は、送信データ管理テーブル３４０の構成例を示す。
【００６８】
送信データ管理テーブル３４０は、送信データに関する情報を有する送信データ情報を、レコードとして管理する。送信データ管理テーブル３４０は、送信データ番号のフィールド３４１と、データサイズのフィールド３４２と、メモリアドレスのフィールド３４３と、送信バッファ番号のフィールド３４４と、完了フラグのフィールド３４５と、フレーム送信用情報のフィールド３４６とを有する。
【００６９】
送信データ番号のフィールド３４１には、送信データを識別する番号が格納される。ここで、送信データは、フレームに格納されるべき全てのデータブロックの集合体を意味する。
【００７０】
データサイズのフィールド３４２には、送信データのサイズが格納される。すなわち、このデータサイズは、フレームに格納されるべき全てのデータブロックの集合体のサイズである。
【００７１】
メモリアドレスのフィールド３４３には、送信データが格納されているメインメモリ１３の先頭アドレスが格納される。
【００７２】
送信バッファ番号のフィールド３４４には、送信バッファ１０９を識別する送信バッファ番号が格納される。この送信バッファ番号と、送信バッファ管理テーブル３００の送信バッファ番号のフィールド３０１に格納される送信バッファ番号とは対応関係を有する。
【００７３】
完了フラグのフィールド３４５には、送信データの送信バッファ１０９への格納が全て完了したか否かを示す完了フラグが格納される。例えば、完了フラグが「済」の場合、送信データの送信バッファ１０９への格納が全て完了したことを示し、完了フラグが「未」の場合、送信データの送信バッファ１０９への格納が未完了であることを示す。
【００７４】
フレーム送信用情報のフィールド３４６には、送信用のフレームヘッダの生成に用いられるフレーム送信用情報が格納される。例えば、フレーム送信用情報は、ＳＡＳに係るプロトコルに従う宛先ポートＩＤ及び送信元ポートＩＤなどを有する。
【００７５】
送信データ管理テーブル３４０におけるレコード３５０は、送信データ番号「Ｓ０」に対応する送信データ（「送信データＳ０」と表現する）は、メインメモリ１３の先頭アドレス「０ｘ００２０００００」から「１０２４Ｂｙｔｅ」の領域に格納されていることを表す（フィールド３４１、３４２、３４３）。そして、レコード３５０は、この送信データＳ０が、送信バッファ＃０（フィールド３４４）に全て格納済み（フィールド３４５）であることを表す。また、レコード３５０は、この送信データＳ０が、フレームに格納されて宛先Ｂ（フィールド３４６）へ送信されることを表す。
【００７６】
図７は、受信データ管理テーブル３６０の構成例を示す。
【００７７】
受信データ管理テーブル３６０は、受信データに関する情報を有する受信データ情報を、レコードとして管理する。受信データ管理テーブル３６０は、受信データ番号のフィールド３６１と、データサイズのフィールド３６２と、メモリアドレスのフィールド３６３と、受信バッファ番号のフィールド３６４と、完了フラグのフィールド３６５と、フレーム受信用情報のフィールド３６６とを有する。
【００７８】
受信データ番号のフィールド３６１には、受信したフレームに格納されている受信データを識別する番号が格納される。ここで、受信データは、フレームに格納されている全てのデータブロックの集合体を意味する。
【００７９】
データサイズのフィールド３６２には、受信データのサイズが格納される。
【００８０】
メモリアドレスのフィールド３６３には、受信データの格納先となるメインメモリ１３の先頭アドレスが格納される。
【００８１】
受信バッファ番号のフィールド３６４には、受信バッファ１１０を識別する受信バッファ番号が格納される。この受信バッファ番号は、受信バッファ管理テーブル３２０の受信バッファ番号のフィールド３２１の受信バッファ番号と対応関係を有する。
【００８２】
完了フラグのフィールド３６５には、受信データのメインメモリ１３への格納が全て完了したか否かを示す完了フラグが格納される。例えば、完了フラグが「済」の場合、受信データのメインメモリ１３への格納が全て完了したことを示し、完了フラグが「未」の場合、受信データのメインメモリ１３への格納が未完了であることを示す。
【００８３】
フレーム受信用情報のフィールド３６６には、受信したフレームヘッダから取得したフレーム受信用情報が格納される。例えば、フレーム受信用情報は、上記のフレーム送信用情報と同様、ＳＡＳに係るプロトコルに従う宛先ポートＩＤ及び送信元ポートのＩＤなどを有する。
【００８４】
受信データ管理テーブル３６０におけるレコード３７０は、受信データ番号「Ｒ０」に対応する受信データ（「受信データＲ０」と表現する）は、データサイズが「２５６Ｂｙｔｅ」であり、メインメモリ１３の先頭アドレス「０ｘ００２０００００」からライトされるべきものであることを表す。そして、レコード３７０は、この受信データＲ０は、送信元Ｂ（フィールド３６６）から受信したものであり、受信バッファ＃０（フィールド３６４）に格納されていることを表す。そして、レコード３７０は、この受信データＲ０は、全てメインメモリ１３に格納済み（フィールド３６５）であることを表す。
【００８５】
図８は、本実施例に係るＨＢＡ１０６からストレージ装置１１３へフレームを送信する処理例を表すシーケンスチャートである。以下、送信データ管理テーブル３４０における送信データＳ０を、フレームに格納して送信する処理について説明する。
【００８６】
指示部２０１は、実行部２０２に対して、送信バッファ１０９の確保を要求する（Ｓ２００）。
【００８７】
送信バッファ１０９の確保要求を受けた実行部２０２は、未使用の送信バッファ１０９の１つを確保する（Ｓ２０１）。ここでは、実行部２０２は、送信バッファ＃０を確保したとする。実行部２０２は、指示部２０１に対して、送信バッファ＃０の確保完了を通知する（Ｓ２０２）。この完了通知には、確保した送信バッファ番号が含まれてよい。実行部２０２は、送信バッファ管理テーブル３００において、送信バッファ＃０のレコードにおける最終指示フラグを「未」に変更する（Ｓ２０３）。
【００８８】
送信バッファ＃０の確保完了の通知を受けた指示部２０１は、送信データ管理テーブル３４０において、送信データＳ０に係るレコード３５０から、フレーム送信用情報を取得する。指示部２０１は、その取得したフレーム送信用情報に基づき、送信用のフレームヘッダを生成する。指示部２０１は、その生成した送信用のフレームヘッダを、送信バッファ＃０にライトする（Ｓ２０４）。
【００８９】
指示部２０１は、送信データ管理テーブル３４０において、送信データＳ０に係るレコード３５０から、データサイズ、メモリアドレス及び送信バッファ番号を取得する。指示部２０１は、この取得したデータサイズ、メモリアドレス及び送信バッファ番号に基づき、１番目のＤＭＡ転送に係るデータブロック情報を生成する。指示部２０１は、この１番目のＤＭＡ転送に係るデータブロック情報を、実行部２０２へ通知する（Ｓ２０５）。このデータブロック情報には、１番目のＤＭＡ転送に係るデータブロックのサイズと、メインメモリ１３におけるそのデータブロックのリード先の先頭アドレスと、そのデータブロックの転送先の送信バッファ番号とが含まれてよい。
【００９０】
指示部２０１は、初回、フレームに格納する送信データのデータサイズ（フィールド３４２）から、Ｓ２０５で通知したデータブロックのサイズを減算し、残りのデータのサイズを算出する。指示部２０１は、「残りのデータのサイズ≦０」であるか否かを判定する（Ｓ２０６）。つまり、指示部２０１は、この１番目のＤＭＡ転送の指示が最終となるか否かを判定する。
【００９１】
「残りのデータのサイズ＞０」である場合、すなわち、このＤＭＡ転送指示が最終でない場合（Ｓ２０６：ＮＯ）、指示部２０１は、実行部２０２に対して、このＤＭＡ転送の指示が最終で或る旨を示す最終フラグを含めずにＤＭＡ転送を指示する（Ｓ２０７）。この後もＤＭＡ転送指示が続くからである。なお、このＤＭＡ転送指示は、Ｓ２０５で通知した１番目のデータブロック情報に対応するものである。
【００９２】
指示部２０１は、２番目のＤＭＡ転送に係るデータブロック情報を生成し、実行部２０２へ通知する（Ｓ２０８）。このデータブロック情報には、２番目のＤＭＡ転送に係るデータブロックのサイズと、メインメモリ１３におけるそのデータブロックのリード先の先頭アドレスと、そのデータブロックの転送先の送信バッファ番号とが含まれてよい。
【００９３】
指示部２０１は、Ｓ２０６において算出した残りのデータのサイズから、Ｓ２０８で通知したデータブロックのサイズを減算し、新たに残りのデータのサイズを算出する。指示部２０１は、Ｓ２０６と同様、「残りのデータのサイズ≦０」であるか否かを判定する（Ｓ２０９）。つまり、この２番目のＤＭＡ転送の指示が最終となるか否かを判定する。
【００９４】
「残りのデータのサイズ≦０」である場合、すなわち、このＤＭＡ転送指示が最終である場合（Ｓ２０９：ＹＥＳ）、指示部２０１は、実行部２０２に対して、最終フラグを含めてＤＭＡ転送を指示する（Ｓ２１０）。このＤＭＡ転送指示が最終となるからである。なお、このＤＭＡ転送指示は、Ｓ２０８で通知した２番目のデータブロック情報に対応するものである。
【００９５】
一方、実行部２０２は、Ｓ２０７で１番目のＤＭＡ転送指示を受けると、Ｓ２０５で通知されたデータブロック情報に基づき、送信バッファ管理テーブル３００から、送信バッファ＃０のレコード３１０ａを見つける。実行部２０２は、未使用のＤＭＡチャネルを確保する。例えば、実行部２０２は、ＤＭＡ＃０を確保する。実行部２０２は、送信バッファ＃０のレコード３１０ａのＤＭＡ＃０を「１（未）」に変更する。
【００９６】
実行部２０２は、ＤＭＡ＃０を用いて、Ｓ２０５で通知されたデータブロック情報に基づくＤＭＡ転送を実行する（Ｓ２３０）。すなわち、ＤＭＡエンジンは、メインメモリ１３の１番目のデータブロックを、ＤＭＡ＃０を通じて、送信バッファ＃０へ転送する。このＤＭＡ＃０を用いたＤＭＡ転送を「ＤＭＡ＃０転送」と表現する。
【００９７】
ＤＭＡ＃０転送完了後、実行部２０２は、送信バッファ管理テーブル３００において、送信バッファ＃０のレコード３１０ａのＤＭＡ＃０を「１（済）」に変更する。
【００９８】
実行部２０２は、送信バッファ管理テーブル３００の送信バッファ＃０のレコード３１０ａにおいて、最終指示フラグが「済」であり、且つ、使用されているＤＭＡチャネル（ＤＭＡ＃０）の何れもが「済」であるか否かを判定する（Ｓ２３１）。
【００９９】
例えば、最終指示フラグが「未」の場合（Ｓ２３１：ＮＯ）、実行部２０２は、指示部２０１に対して、フレームに格納すべき全てのデータブロックのＤＭＡ転送が完了した旨を示す全完了フラグを含めずにＤＭＡ転送完了を通知する（Ｓ２３２）。なお、このＤＭＡ転送完了通知は、Ｓ２０７の１番目のＤＭＡ転送指示に対する完了を表すものである。
【０１００】
上記Ｓ２３０〜Ｓ２３２の処理と並行して、実行部２０２は、以下のＳ２４１〜Ｓ２４４の処理を行う。
【０１０１】
実行部２０２は、Ｓ２１０で２番目のＤＭＡ転送指示を受けると、このＤＭＡ転送指示に最終フラグが含まれていることを認識する。そこで、実行部２０２は、送信バッファ管理テーブル３００において、送信バッファ＃０のレコード３１０ａの最終指示フラグを「済」に変更する（Ｓ２４１）。
【０１０２】
実行部２０２は、Ｓ２０８で通知されたデータブロック情報に基づき、送信バッファ管理テーブル３００から、送信バッファ＃０のレコード３１０ａを見つける。実行部２０２は、未使用のＤＭＡチャネルを確保する。ここで、ＤＭＡ＃０は使用済みであるので、実行部２０２は、例えば、ＤＭＡ＃１を確保する。実行部２０２は、送信バッファ管理テーブル３００において、送信バッファ＃０のレコード３１０ａのＤＭＡ＃１を「２（未）」に変更する。
【０１０３】
実行部２０２は、ＤＭＡ＃１を用いて、Ｓ２０８で通知されたデータブロック情報に基づくＤＭＡ転送を実行する（Ｓ２４２）。すなわち、ＤＭＡエンジンは、メインメモリ１３の２番目のデータブロックを、ＤＭＡ＃１を通じて、送信バッファ＃０へ転送する。このＤＭＡ＃１を用いたＤＭＡ転送を「ＤＭＡ＃１転送」と表現する。
【０１０４】
ＤＭＡ＃１転送完了後、実行部２０２は、送信バッファ管理テーブル３００において、送信バッファ＃０のレコード３１０ａのＤＭＡ＃１を「２（済）」に変更する。
【０１０５】
実行部２０２は、送信バッファ管理テーブル３００の送信バッファ＃０のレコード３１０ａにおいて、最終指示フラグが「済」であり、且つ、使用されているＤＭＡチャネル（ＤＭＡ＃０及びＤＭＡ＃１）の何れもが「済」であるか否かを判定する（Ｓ２４３）。
【０１０６】
例えば、最終指示フラグ、ＤＭＡ＃０及びＤＭＡ＃１の何れもが「済」である場合（Ｓ２４３：ＹＥＳ）、実行部２０２は、指示部２０１に対して、全完了フラグを含めてＤＭＡ転送完了を通知する（Ｓ２４４）。なお、このＤＭＡ転送完了通知は、Ｓ２１０のＤＭＡ転送指示に対する完了を表すものである。
【０１０７】
指示部２０１は、全完了フラグを含むＤＭＡ転送完了の通知を受けると、送信データ管理テーブル３４０から、送信データＳ０のレコード３５０を見つける。そして、指示部２０１は、そのレコード３５０の完了フラグを「済」に変更する。
【０１０８】
指示部２０１は、実行部２０２に対して、送信バッファ＃０に格納されているフレームの送信を指示する（Ｓ２５０）。フレームの送信指示を受けた実行部２０２は、送信バッファ＃０に格納されたフレームヘッダ及びデータブロックを含むフレームを、ストレージ装置１１３へ送信する（Ｓ２５１）。
【０１０９】
以上の処理によれば、ＨＢＡ１０６は、複数のデータブロックを並行して、メインメモリ１３から送信バッファ１０９へＤＭＡ転送することができる。すなわち、図２に示す一比較例に係るＨＢＡと比較して、図８に示す本実施例に係るＨＢＡは、ＤＭＡ転送を指示した後に、そのＤＭＡ転送指示に対応するＤＭＡ転送完了通知を待つことなく、次のＤＭＡ転送を指示することができる。よって、図２に示す一比較例に係るＨＢＡと比較して、図８に示す本実施例に係るＨＢＡ１０６は、短時間でＤＭＡ転送を完了し、フレームを送信することができる。
【０１１０】
なお、図８の処理において、Ｓ２０５の通知処理とＳ２０６の判定処理との実行順序を入れ替えてもよい。Ｓ２０８とＳ２０９についても同様である。また、指示部２０１は、最終フラグを最終のＤＭＡ転送指示（Ｓ２１０）とは別に通知してもよい。また、指示部２０１は、最終のデータブロック情報の通知（Ｓ２０８）に最終フラグを含めてもよい。また、実行部２０２は、全完了フラグを最終のＤＭＡ転送完了通知（Ｓ２４４）とは別に通知してもよい。
【０１１１】
図９は、本実施例に係るＨＢＡ１０６がストレージ装置１１３からフレームを受信する処理例を表すシーケンスチャートである。以下、受信データ管理テーブル３６０における受信データＲ０を、フレームから抽出する処理について説明する。
【０１１２】
実行部２０２は、フレームを受信すると、フレームを受信した旨及びそのフレームを格納した受信バッファ１１０の受信バッファ番号を、指示部２０１へ通知する（Ｓ３００）。ここでは、実行部２０２は、受信バッファ＃１にフレームを格納したとする。
【０１１３】
実行部２０２は、受信バッファ管理テーブル３２０において、受信バッファ＃１のレコード３３０ａの最終指示フラグを「未」に変更する（Ｓ３０１）。
【０１１４】
フレームの受信通知を受けた指示部２０１は、受信バッファ＃１からフレームヘッダをリードする（Ｓ３０２）。フレームヘッダには、例えば、受信データのデータサイズ、フレームの送信元ポートＩＤ及び宛先ポートＩＤなどが含まれている。指示部２０１は、受信バッファ＃１の受信データの格納先となるメインメモリ１３のアドレスを決定する。そして、指示部２０１は、これらの情報に基づき、受信データ管理テーブル３６０に、受信データＲ０のレコード３７０を登録する。
【０１１５】
指示部２０１は、受信データ管理テーブル３６０において、受信データＲ０に係るレコード３７０から、データサイズ、メモリアドレス及び受信バッファ番号を取得する。指示部２０１は、この取得したデータサイズ及びメモリアドレスに基づき、１番目のＤＭＡ転送に係るデータブロック情報を生成する。指示部２０１は、この１番目のＤＭＡ転送に係るデータブロック情報を、実行部２０２へ通知する（Ｓ３０３）。このデータブロック情報には、１番目のデータブロックのサイズと、メインメモリ１３におけるデータブロックのライト先の先頭アドレスと、そのデータブロックの転送元の受信バッファ番号とが含まれてよい。
【０１１６】
指示部２０１は、初回、フレームに格納されている受信データのデータサイズ（フィールド３６２）から、Ｓ３０３で通知したデータブロックのサイズを減算し、残りのデータのサイズを算出する。指示部２０１は、「残りのデータのサイズ≦０」であるか否かを判定する（Ｓ３０４）。つまり、この１番目のＤＭＡ転送の指示が最終となるか否かを判定する。
【０１１７】
「残りのデータのサイズ＞０」である場合、すなわち、このＤＭＡ転送の指示が最終でない場合（Ｓ３０４：ＮＯ）、指示部２０１は、実行部２０２に対して、最終フラグを含めずにＤＭＡ転送を指示する（Ｓ３０５）。なお、このＤＭＡ転送指示は、Ｓ３０３で通知した１番目のデータブロック情報に対応するものである。
【０１１８】
指示部２０１は、２番目のＤＭＡ転送に係るデータブロック情報を、実行部２０２へ通知する（Ｓ３０６）。このデータブロック情報には、２番目のＤＭＡ転送に係るデータブロックのサイズと、メインメモリ１３におけるそのデータブロックのライト先の先頭アドレスと、そのデータブロックの転送先の送信バッファ番号とが含まれてよい。
【０１１９】
指示部２０１は、Ｓ３０４において算出した残りのデータのサイズから、Ｓ３０６で通知したデータブロックのサイズを減算し、新たに残りのデータのサイズを算出する。指示部２０１は、Ｓ３０４と同様、「残りのデータのサイズ≦０」であるか否かを判定する（Ｓ３０７）。つまり、この２番目のＤＭＡ転送の指示が最終となるか否かを判定する。
【０１２０】
「残りのデータのサイズ≦０」である場合、すなわち、このＤＭＡ転送指示が最終である場合（Ｓ３０７：ＹＥＳ）、指示部２０１は、実行部２０２に対して、最終フラグを含めてＤＭＡ転送を指示する（Ｓ３０８）。なお、このＤＭＡ転送指示は、Ｓ３０６で通知した２番目のデータブロック情報に対応するものである。
【０１２１】
一方、実行部２０２は、Ｓ３０５で１番目のＤＭＡ転送指示を受けると、Ｓ３０３で通知されたデータブロック情報に基づき、受信バッファ管理テーブル３２０から、受信バッファ＃１のレコード３３０ａを見つける。実行部２０２は、未使用のＤＭＡチャネルを確保する。例えば、実行部２０２は、ＤＭＡ＃０を確保する。実行部２０２は、受信バッファ＃１のレコード３３０ａのＤＭＡ＃０を「１（未）」に変更する。
【０１２２】
実行部２０２は、ＤＭＡ＃０を用いて、Ｓ３０３で通知されたデータブロック情報に基づくＤＭＡ＃０転送を実行する（Ｓ３３０）。すなわち、ＤＭＡエンジンは、受信バッファ＃１の１番目のデータブロックを、ＤＭＡ＃０を通じて、メインメモリ１３へ転送する。
【０１２３】
ＤＭＡ＃０転送完了後、実行部２０２は、受信バッファ管理テーブル３２０において、受信バッファ＃１のレコード３３０ａを「１（済）」に変更する。
【０１２４】
実行部２０２は、受信バッファ管理テーブル３２０の受信バッファ＃１のレコード３３０ａにおいて、最終指示フラグが「済」であり、且つ、使用されているＤＭＡチャネル（ＤＭＡ＃０）の何れもが「済」であるか否かを判定する（Ｓ３３１）。
【０１２５】
例えば、最終指示フラグが「未」の場合（Ｓ３３１：ＮＯ）、実行部２０２は、指示部２０１に対して、全完了フラグを含めずにＤＭＡ転送完了を通知する（Ｓ３３２）。なお、このＤＭＡ転送完了通知は、Ｓ３０５の１番目のＤＭＡ転送指示に対する完了を表すものである。
【０１２６】
上記Ｓ３３０〜Ｓ３３２の処理と並行して、実行部２０２は、以下のＳ３４１〜Ｓ３４４の処理を行う。
【０１２７】
実行部２０２は、Ｓ３０８で２番目のＤＭＡ転送指示を受けると、このＤＭＡ転送指示に最終フラグが含まれていることを認識する。そこで、実行部２０２は、受信バッファ管理テーブル３２０において、受信バッファ＃１のレコード３３０ａの最終指示フラグを「済」に変更する（Ｓ３４１）。
【０１２８】
実行部２０２は、Ｓ３０６で通知されたデータブロック情報に基づき、受信バッファ管理テーブル３２０から、受信バッファ＃１のレコード３３０ａを見つける。実行部２０２は、未使用のＤＭＡチャネルを確保する。ここで、ＤＭＡ＃０は使用済みであるので、実行部２０２は、例えば、ＤＭＡ＃１を確保する。実行部２０２は、受信バッファ管理テーブル３２０において、受信バッファ＃１のレコード３３０ａのＤＭＡ＃１を「２（未）」に変更する。
【０１２９】
実行部２０２は、ＤＭＡ＃１を用いて、Ｓ３０６で通知されたデータブロック情報に基づくＤＭＡ＃１転送を実行する（Ｓ３４２）。すなわち、ＤＭＡエンジンは、受信バッファ＃１の２番目のデータブロックを、ＤＭＡ＃１を通じて、メインメモリ１３へ転送する。
【０１３０】
ＤＭＡ＃１転送完了後、実行部２０２は、受信バッファ管理テーブル３２０において、受信バッファ＃１のレコード３３０ａのＤＭＡ＃１を「２（済）」に変更する。
【０１３１】
実行部２０２は、受信バッファ管理テーブル３２０の受信バッファ＃１のレコード３３０ａにおいて、最終指示フラグが「済」であり、且つ、使用されているＤＭＡチャネル（ＤＭＡ＃０及びＤＭＡ＃１）の何れもが「済」であるか否かを判定する（Ｓ３４３）。
【０１３２】
例えば、最終指示フラグ、ＤＭＡ＃０及びＤＭＡ＃１の何れもが「済」である場合（Ｓ３４３：ＹＥＳ）、実行部２０２は、指示部２０１に対して、全完了フラグを含めてＤＭＡ転送完了を通知する（Ｓ３４４）。なお、このＤＭＡ転送完了通知は、Ｓ３０８のＤＭＡ転送指示に対する完了を表すものである。
【０１３３】
指示部２０１は、全完了フラグを含むＤＭＡ転送完了の通知を受けると、受信データ管理テーブル３６０から、受信データＲ０のレコード３７０を見つける。そして、指示部２０１は、そのレコード３７０の完了フラグを「済」に変更する。
【０１３４】
指示部２０１は、実行部２０２に対して、受信バッファ＃１の解放を指示する（Ｓ３５０）。受信バッファ＃１の解放指示を受けた実行部２０２は、受信バッファ＃１を解放する（Ｓ３５１）。
【０１３５】
以上の処理によれば、ＨＢＡ１０６は、複数のデータブロックを並行して、受信バッファ１１０からメインメモリ１３へＤＭＡ転送することができる。すなわち、図３に示す一比較例に係るＨＢＡと比較して、図９に示す本実施例に係るＨＢＡ１０６は、ＤＭＡ転送を指示した後に、そのＤＭＡ転送指示に対応するＤＭＡ転送完了通知を待つことなく、次のＤＭＡ転送を指示することができる。よって、図３に示す一比較例に係るＨＢＡと比較して、図９に示す本実施例に係るＨＢＡ１０６は、短時間でＤＭＡ転送を完了し、受信バッファ１１０を解放することができる。
【０１３６】
なお、図９の処理において、Ｓ３０３の通知処理とＳ２０４の判定処理との実行順序を入れ替えてもよい。Ｓ３０６とＳ３０７についても同様である。また、指示部２０１は、最終フラグを最終のＤＭＡ転送指示（Ｓ３０８）とは別に通知してもよい。また、指示部２０１は、最終のデータブロック情報の通知（Ｓ３０６）に最終フラグを含めてもよい。また、実行部２０２は、全完了フラグを最終のＤＭＡ転送完了通知（Ｓ３４４）とは別に通知してもよい。
【０１３７】
上述した実施例は、本発明の説明のための例示であり、本発明の範囲をそれらの実施例にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【０１３８】
例えば、ＨＢＡ１０６は、計算機１０を、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）、ＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）、ＩＤＥ（Ｉｎｔｅｇｒａｔｅｄ  Ｄｒｉｖｅ  Ｅｌｅｃｔｒｏｎｉｃｓ）、Ｅｔｈｅｒｎｅｔ（登録商標）、ＦｉｒｅＷｉｒｅ、又はＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）などに接続するためのデバイスであってもよい。
【符号の説明】
【０１３９】
１０：計算機  １１：ＣＰＵ  １３：メインメモリ  １０５：ＰＣＩ  Ｅｘｐｒｅｓｓバス  １１２：ホストブリッジ  １０６：ＨＢＡ（Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｅｒ）  １０４：ＬＳＩ  １０７：ＦＷ（ＦｉｒｍＷａｒｅ）  １０８：記憶デバイス  １０９：送信バッファ  １１０：受信バッファ  １１３：ストレージ装置  １２１：ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）
【図１】
2015155850.tif 000003
【図２】
2015155850.tif 000004
【図３】
2015155850.tif 000005
【図４】
2015155850.tif 000006
【図５】
2015155850.tif 000007
【図６】
2015155850.tif 000008
【図７】
2015155850.tif 000009
【図８】
2015155850.tif 000010
【図９】
2015155850.tif 000011
【国際調査報告】
2015155850.tif 000012
2015155850.tif 000013