(57)【要約】【課題】受信装置により受信されたデータを用いて処理を行うデータ処理装置の処理速度を向上させる。【解決手段】記憶制御部１７１は、パケット受信部により受信されたパケットをRAMのパケット領域に記憶させる。生成部２２２は、パケットに関する情報である受信情報を、割込処理に対応する形式で生成する。生成部２２２は、その生成された受信情報である割込対応受信情報を、RAMのディスクリプタ領域に記憶させる。本発明は、例えば、ネットワークカードに適用することができる。【選択図】図１４
2007172008.tif 000002
【特許請求の範囲】
【請求項１】
データを受信する受信装置と、前記データを用いたデータ処理を実行するデータ処理装置と、から構成される情報処理システムにおいて、
前記受信装置は、
前記データを受信する受信手段と、
受信された前記データに基づき、前記データ処理に対応する形式のデータである形式データを生成し、当該形式データを前記データと共に記憶手段に記憶させる記憶制御手段と
を備え、
前記データ処理装置は、
前記記憶手段に記憶されているデータと形式データを用いて、前記データ処理を行う処理手段
を備える情報処理システム。
【請求項２】
データ処理装置がデータ処理を行う際に用いるデータを記憶手段に記憶させる受信装置において、
前記データを受信する受信手段と、
受信された前記データに基づき、前記データ処理に対応する形式のデータである形式データを生成し、当該形式データを前記データとともに、前記記憶手段に記憶させる記憶制御手段と
を備える受信装置。
【請求項３】
前記データ処理に対応する形式は、前記データ処理の処理単位のサイズである
請求項１に記載の受信装置。
【請求項４】
前記データ処理に対応する形式は、前記データ処理で用いる値を用いる形式である
請求項１に記載の受信装置。
【請求項５】
データ処理装置がデータ処理を行う際に用いられるデータを記憶手段に記憶させる処理を、コンピュータに行わせるプログラムにおいて、
前記データを受信し、
受信された前記データに基づき、前記データ処理に対応する形式のデータである形式データを生成し、当該形式データを前記データとともに、前記記憶手段に記憶させる
ステップを含むプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、受信装置、およびプログラムに関し、特に、受信装置により受信されたデータを用いて処理を行うデータ処理装置の処理速度を向上させることができるようにした情報処理システム、受信装置、およびプログラムに関する。
【背景技術】
【０００２】
図１は、ディスクリプタ５０（後述する図２）を用いてDMA（Direct Memory Access）転送を行うネットワークカード１９を備えたパーソナルコンピュータ（以下、パソコンという）１の一例を示すブロック図である。
【０００３】
図１に示されるように、CPU（Central Processing Unit）１０は、バス１４を介して、ROM(Read Only Memory)１１，RAM（Random Access Memory）１２、およびメモリコントローラ１３に接続される。CPU１０は、ROM１１または記録部１８に記録されている、デバイスドライバなどのプログラムにしたがって各種の処理を実行する。なお、CPU１０が行う処理の処理単位（ワード）は、３２ビットであるものとする。
【０００４】
例えば、CPU１０は、RAM１２のディスクリプタ領域３１に、ネットワークカード１９からメモリコントローラ１３を介してDMA転送されてくるパケットを記憶するパケット領域３２のアドレスなどを、ディスクリプタ５０として記憶させる。また、CPU１０は、ディスクリプタ５０に基づいて、RAM１２のパケット領域３２に、ネットワークカード１９からDMA転送されたパケットを、ROM１１または記録部１８に記録されているプログラムにしたがって処理する。
【０００５】
さらに、CPU１０は、デバイスドライバの割込ハンドラを起動することにより、パケットと、そのパケットに対応するディスクリプタ５０を用いて割込処理を行う。
【０００６】
RAM１２は、ディスクリプタ５０が記憶されるディスクリプタ領域３１、ネットワークカード１９からDMA転送されてくるパケットが記憶されるパケット領域３２などから構成される。メモリコントローラ１３は、RAM１２を制御し、ネットワーク１９との間でDMA転送を行う。また、メモリコントローラ１３は、ネットワークカード１９から供給される、他の装置から受信したパケットに関する情報である受信情報を、ディスクリプタ５０に格納することにより、ディスクリプタ５０を更新する。
【０００７】
CPU１０にはまた、バス１４を介して入出力インターフェース１５が接続されている。入出力インターフェース１５には、キーボード、マウスなどよりなる入力部１６、LCD（Liquid Crystal Display）やCRT（Cathode Ray Tube）ディスプレイなどよりなる出力部１７が接続されている。CPU１０は、入力部１６から入力される指令に対応して各種の処理を実行する。そして、CPU１０は、処理の結果得られた画像や音声などを出力部１７に出力する。
【０００８】
入出力インターフェース１５に接続されている記録部１８は、例えば、ハードディスクなどで構成され、CPU１０が実行するプログラムや各種のデータを記録する。ネットワークカード１９は、図示せぬネットワークを介して他の装置から送信されてくる、Ethernet（登録商標）などに準拠したパケットを受信し、そのパケットを、メモリコントローラ１３を介してRAM１２にDMA転送する。また、ネットワークカード１９は、受信情報を生成し、その受信情報をメモリコントローラ１３に供給する。
【０００９】
なお、以下では、他の装置からEthernet（登録商標）に準拠したパケットが送信されるものとし、パケットは、データに、イーサヘッダ、IPv4ヘッダ、TCP（Transmission Control Protocol）ヘッダなどが付加されて構成される。また、ネットワークカード１９には、MAC（Media Access Control）アドレスが付与されている。
【００１０】
入出力インターフェース１５に接続されているドライブ２０は、磁気ディスク、光ディスク、光磁気ディスク、または半導体メモリなどのリムーバブルメディア２１が装着されたとき、それらを駆動し、そこに記録されているプログラムやデータなどを取得する。取得されたプログラムやデータは、必要に応じて記録部１８に転送され、記録される。
【００１１】
図２は、図１のディスクリプタ領域３１に記憶されるディスクリプタ５０の一例を示している。
【００１２】
図２のディスクリプタ５０には、アドレス５１、パケットサイズ５２、およびステータス５３が格納される。
【００１３】
アドレス５１は、ネットワークカード１９からDMA転送されてくるパケットを記憶するために用意されたパケット領域３２の３２ビットのアドレスである。パケットサイズ５２は、その用意されたパケット領域３２のサイズ、または実際にパケット領域３２に記憶されたパケットのデータサイズである。ステータス５３は、パケット領域３２のアドレス５１に記憶されたパケットが、ネットワークカード１９において受信されたときに発生したエラーの内容を表す情報（以下、エラー情報という）である。なお、エラーが発生していない場合、エラーの発生の無を表すエラー情報が、ステータス５３としてディスクリプタ５０に格納される。
【００１４】
次に、図３を参照して、図１のパソコン１におけるDMA転送の処理について説明する。
【００１５】
ステップＳ１１において、CPU１０はROM１１または記録部１８に記録されているデバイスドライバを実行することにより、RAM１２のディスクリプタ領域３１に、図２のディスクリプタ５０を設定（記憶）する。なお、このとき、ディスクリプタ５０には、ネットワークカード１９からDMA転送されてくるパケットを記憶するために用意されたパケット領域３２のアドレスが、アドレス５１として格納され、そのパケット領域３２のサイズがパケットサイズ５２として格納されている。
【００１６】
ステップＳ１１の処理後は、ステップＳ１２に進み、CPU１０は、デバイスドライバを実行することにより、ディスクリプタ５０の設定の完了をネットワークカード１９に通知する。
【００１７】
ステップＳ２１において、ネットワークカード１９は、CPU１０から、ディスクリプタ５０の設定の完了の通知を受信し、ステップＳ２２に進む。ステップＳ２２において、ネットワークカード１９は、メモリコントローラ１３にディスクリプタ５０のDMA転送を要求する。なお、ネットワークカード１９は、ディスクリプタ領域３１のアドレスと、ディスクリプタ５０のサイズを予め記憶しており、そのアドレスとサイズを、ディスクリプタ５０のDMA転送の要求とともにメモリコントローラ１３に送信する。
【００１８】
ステップＳ３１において、メモリコントローラ１３は、ネットワークカード１９から、ディスクリプタ５０のDMA転送の要求とともに、ディスクリプタ領域３１のアドレスとディスクリプタ５０のサイズを受信し、ステップＳ３２に進む。ステップＳ３２において、メモリコントローラ１３は、ネットワークカード１９から受信したアドレスとサイズに基づいて、RAM１２のディスクリプタ領域３１からディスクリプタ５０を読み出し、ステップＳ３３に進む。
【００１９】
ステップＳ３３において、メモリコントローラ１３は、ステップＳ３２で読み出されたディスクリプタ５０をネットワークカード１９に送信することにより、ディスクリプタ５０のDMA転送を行う。
【００２０】
ステップＳ２３において、ネットワークカード１９は、メモリコントローラ１３からDMA転送されてくるディスクリプタ５０を受信し、内蔵するメモリ(図示せず)に保持して、ステップＳ２４に進む。ステップＳ２４において、ネットワークカード１９は、図示せぬ他の装置からネットワークを介してパケットが受信されたかどうかを判定し、パケットが受信されていないと判定された場合、パケットが受信されるまで待機する。
【００２１】
ステップＳ２４において、パケットが受信されたと判定された場合、ステップＳ２５に進み、ネットワークカード１９は、保持されているディスクリプタ５０のアドレス５１を指定して、受信されたパケットをメモリコントローラ１３に送信することにより、パケットのDMA転送を行う。
【００２２】
ステップＳ３４において、メモリコントローラ１３は、アドレス５１を指定して、ネットワークカード１９からDMA転送されてくるパケットを受信し、ステップＳ３５に進む。ステップＳ３５において、メモリコントローラ１３は、パケット領域３２のアドレス５１に、メモリコントローラ１３から受信したパケットを記憶させる。
【００２３】
ステップＳ２６において、ネットワークカード１９は、ステップＳ２４において受信されたパケットのデータサイズとエラー情報を、受信されたパケットに関する情報である受信情報として、メモリコントローラ１３に送信することにより、受信情報のDMA転送を行う。
【００２４】
ステップＳ３６において、メモリコントローラ１３は、ネットワークカード１９からDMA転送されてくる受信情報を受信し、ステップＳ３７に進む。ステップＳ３７において、メモリコントローラ１３は、受信された受信情報をディスクリプタ５０に格納することにより、ディスクリプタ５０を更新する。具体的には、メモリコントローラ１３は、受信情報のうちのデータサイズを、ディスクリプタ５０のパケットサイズ５２として格納(更新)し、エラー情報をステータス５３として格納する。
【００２５】
ステップＳ３７の処理後は、ステップＳ３８に進み、メモリコントローラ１３は、パケットのDMA転送の完了を、ネットワークカード１９に通知し、処理を終了する。
【００２６】
ステップＳ２７において、ネットワークカード１９は、メモリコントローラ１３からDMA転送の完了の通知を受信し、ステップＳ２８に進む。ステップＳ２８において、ネットワークカード１９は、CPU１０に割込を通知し、処理を終了する。
【００２７】
ステップＳ１３において、CPU１０は、ネットワークカード１９からの割込の通知を受信し、ステップＳ１４に進む。ステップＳ１４において、CPU１０は、デバイスドライバの割込ハンドラを起動し、処理を終了する。
【００２８】
次に、図４を参照して、割込ハンドラによる割込処理について説明する。この割込処理は、例えば、図３のステップＳ１４において割込ハンドラが起動されたとき、開始される。
【００２９】
ステップＳ５１において、割込ハンドラは、RAM１２のディスクリプタ領域３１に記憶されているディスクリプタ５０から、アドレス５１とステータス５３を読み出し、ステップＳ５２に進む。
【００３０】
ステップＳ５２において、割込ハンドラは、ステップＳ５１で読み出されたステータス５３がエラーの発生を表しているかどうかを判定し、ステータス５３がエラーの発生を表していない、即ちステータス５３がエラーの発生の無を表していると判定した場合、ステップＳ５３に進む。
【００３１】
ステップＳ５３において、割込ハンドラは、ステップＳ５１で読み出されたアドレス５１に基づいて、パケット領域３２のアドレス５１に記憶されているパケットを読み出し、そのパケットからイーサヘッダなどを取り除くヘッダ処理を行う。ステップＳ５３の処理後は、ステップＳ５４に進み、割込ハンドラは、上位のＩＰ(Internet Protocol)層にヘッダ処理後のパケットを渡し、ステップＳ５６に進む。
【００３２】
一方、ステップＳ５２において、ステータス５３がエラーの発生を表していると判定された場合、割込ハンドラは、ステップＳ５１で読み出されたアドレス５１に基づいて、パケット領域３２のアドレス５１に記憶されているパケットを破棄（削除）し、ステップＳ５６に進む。ステップＳ５６において、割込ハンドラは、図３のステップＳ１３で受信された割込の通知をクリアし、処理を終了する。
【００３３】
また、近年、TOE(TCP/IP Offload Engine)などにより、従来、パケットのDMA転送終了後にCPUで行われていた処理を、ネットワークカードにおいて行う場合がある。この場合、その処理の結果が、ディスクリプタに格納される。
【００３４】
例えば、従来、パケットのDMA転送処理後にCPUで行われていた、パケットに基づいてヘッダチェックサムを計算する処理を、ネットワークカード１９において行う場合、図５に示すように、ディスクリプタには、その処理の結果であるヘッダチェックサムが格納される。
【００３５】
即ち、図５のディスクリプタ７０には、アドレス５１、パケットサイズ５２、ステータス５３、ヘッダチェックサム７１、およびリザーブ７２が格納される。なお、図５において、図２と同一の要素については、説明を省略する（同一の要素に関しては同一の符号を付す）。
【００３６】
ヘッダチェックサム７１は、ネットワークカード１９によりパケットに基づいて計算された結果得られるヘッダチェックサムである。また、リザーブ７２は空き領域である。
【００３７】
図５のディスクリプタ７０が、ディスクリプタ領域３１に記憶される場合、図３のステップＳ２６において、ネットワークカード１９は、受信されたパケットに基づいてヘッダチェックサムを計算し、パケットのデータサイズとエラー情報のほかに、ヘッダチェックサムも受信情報として、メモリコントローラ１３に送信する。
【００３８】
この場合に、図３のステップＳ１４において起動された割込ハンドラによる割込処理を、図６を参照して説明する。
【００３９】
ステップＳ７１において、割込ハンドラは、RAM１２のディスクリプタ領域３１に記憶されているディスクリプタ７０（図５）から、アドレス５１、ステータス５３、およびヘッダチェックサム７１を読み出し、ステップＳ７２に進む。
【００４０】
ステップＳ７２において、割込ハンドラは、図４のステップＳ５２と同様に、ステータス５３がエラーの発生を表しているかどうかを判定し、ステータス５３がエラーの発生を表していないと判定した場合、ステップＳ７３に進む。
【００４１】
ステップＳ７３において、割込ハンドラは、ステップＳ７１で読み出されたアドレス５１に基づいて、パケット領域３２のアドレス５１に記憶されているパケットを読み出し、そのパケットのIPv4（Internet Protocol Version 4）ヘッダに含まれるヘッダチェックサムと、ステップＳ７１で読み出されたヘッダチェックサム７１が一致するかどうかを判定する。
【００４２】
ステップＳ７３において、IPv4ヘッダに含まれるヘッダチェックサムとヘッダチェックサム７１が一致したと判定された場合、処理はステップＳ７４に進む。
【００４３】
一方、ステップＳ７２においてステータス５３がエラーの発生を表していると判定された場合、またはステップＳ７３においてIPv4ヘッダに含まれるヘッダチェックサムとヘッダチェックサム７１が一致しないと判定された場合、ステップＳ７６に進む。
【００４４】
ステップＳ７４乃至Ｓ７７の処理は、図４のステップＳ５３乃至Ｓ５６の処理と同様であるので、説明は省略する。
【００４５】
一方、例えば、Linux上で動作する割込ハンドラは、受信されたパケットのイーサヘッダに記述されているMACアドレスを解析し、その解析結果を表す値を、パケットタイプ(skb->pkt_type)として設定する（eth_type_trans関数）。
【００４６】
ここで、パケットタイプについて、図７を参照して説明する。
【００４７】
図７に示すように、パケットタイプが０である場合、パケットタイプは、受信されたパケットが自分宛にユニキャストで送信されたパケットであるという解析結果を表し（PACKET_HOST）、パケットタイプが１である場合、パケットは、受信されたパケットがブロードキャストで送信されたパケットであるという解析結果を表す（PACKET_BROADCAST）。
【００４８】
また、パケットタイプが２である場合、受信されたパケットがマルチキャストで送信されたパケットであるという解析結果を表し（PACKET_MULTICAST）、パケットタイプが３である場合、受信されたパケットが他人宛にユニキャストで送信されたパケットであるという解析結果を表す（PACKET_OTHERHOST）。
【００４９】
次に、MACアドレスを解析する割込ハンドラによる割込処理を、図８を参照して説明する。
【００５０】
なお、図８の割込処理は、ステップＳ９３の処理を除いて、図４の割込処理と同様である。即ち、ステップＳ９１，Ｓ９２，Ｓ９４乃至Ｓ９７の処理は、図４のステップＳ５１，Ｓ５２，Ｓ５３乃至Ｓ５６の処理と同様である。従って、これらの処理の説明は繰り返しになるので省略する。
【００５１】
ステップＳ９３において、割込ハンドラは、ディスクリプタ５０のアドレス５１に基づいて、パケット領域３２のアドレス５１に記憶されているパケットを読み出し、そのパケットのイーサヘッダに記述されているMACアドレスに基づいて、パケットタイプを設定する設定処理を行う。この設定処理の詳細は、図９を参照して後述する。
【００５２】
次に、図９を参照して、図８のステップＳ９３の設定処理について説明する。
【００５３】
ステップＳ１１１において、割込ハンドラは、パケット領域３２から読み出されたパケットのイーサヘッダに記述されているMACアドレスの最下位ビットが１であるかどうか、即ち、読み出されたパケットがブロードキャストまたはマルチキャストで送信されたパケットであるかどうかを判定する。
【００５４】
ステップＳ１１１において、MACアドレスの最下位ビットが１ではないと判定された場合、即ち読み出されたパケットがユニキャストで送信されたパケットである場合、ステップＳ１１２に進み、割込ハンドラは、MACアドレスが自分のアドレス（ネットワークカード１９に付与されているMACアドレス）であるかどうかを判定する。
【００５５】
ステップＳ１１２において、MACアドレスが自分のアドレスではないと判定された場合、即ち読み出されたパケットが、他人宛にユニキャストで送信されたパケットである場合、ステップＳ１１３に進み、割込ハンドラはパケットタイプを３に設定し、図８のステップＳ９４に進む。
【００５６】
一方、ステップＳ１１２において、MACアドレスが自分のアドレスであると判定された場合、即ち読み出されたパケットが、自分宛にユニキャストで送信されたパケットである場合、ステップＳ１１４に進み、割込ハンドラはパケットタイプを０に設定し、図８のステップＳ９４に進む。
【００５７】
また、ステップＳ１１１において、MACアドレスの最下位ビットが１であると判定された場合、ステップＳ１１５に進み、割込ハンドラは、MACアドレスがブロードキャストアドレスであるかどうか、即ちMACアドレスのすべてのビットが１であるかどうかを判定する。
【００５８】
ステップＳ１１５において、MACアドレスがブロードキャストアドレスではないと判定された場合、ステップＳ１１６に進み、割込ハンドラはパケットタイプを２に設定し、図８のステップＳ９４に進む。
【００５９】
一方、ステップＳ１１５において、MACアドレスがブロードキャストアドレスであると判定された場合、ステップＳ１１７に進み、割込ハンドラはパケットタイプを１に設定し、図８のステップＳ９４に進む。
【００６０】
また、TOEなどにより、ネットワークカード１９がMACアドレスの解析を行う場合、図１０に示すように、その解析結果を表すアドレスクラスが、ディスクリプタに格納される。
【００６１】
図１０のディスクリプタ９０には、アドレス５１、パケットサイズ５２、ステータス５３、アドレスクラス９１、およびリザーブ９２が格納される。なお、図１０において、図２と同一の要素については、説明を省略する（同一要素に関しては同一の符号を付す）。
【００６２】
アドレスクラス９１は、ネットワークカード１９によりMACアドレスが解析された結果得られる解析結果を表す値である。リザーブ９２は空き領域である。
【００６３】
次に、図１１を参照して、図１０のアドレスクラス９１について説明する。
【００６４】
図１１に示すように、アドレスクラス９１が0x20である場合、アドレスクラス９１は、受信されたパケットがマルチキャストで送信されたパケットであるという解析結果を表し（RX_FLAG_MCAST）、アドレスクラス９１が0x40である場合、パケットは、受信されたパケットがブロードキャストで送信されたパケットであるという解析結果を表す（RX_FLAG_BCAST）。また、アドレスクラス９１が0x80である場合、受信されたパケットがプロミスカスモードで受信されたパケットであるという解析結果を表す（RX_FLAG_MISS）。
【００６５】
なお、プロミスカスモードとは、すべてのパケットを受信するモードであり、他人宛にユニキャストで送信されたパケットは、プロミスカスモードで受信される。即ち、プロミスカスモードで受信されたパケットは、他人宛にユニキャストで送信されたパケットである。
【００６６】
次に、図１２を参照して、ネットワークカード１９がMACアドレスの解析を行う場合の、図８のステップＳ９３の設定処理について説明する。
【００６７】
ステップＳ１３１において、割込ハンドラは、ディスクリプタ領域３１に記憶されているディスクリプタ９０のアドレスクラス９１を読み出し、その読み出されたアドレスクラス９１が0x40であるかどうか、即ちディスクリプタ９０に対応するパケット（パケット領域３２の、ディスクリプタ９０に格納されるアドレス５１に記憶されているパケット）がブロードキャストで送信されたパケットであるかどうかを判定する。
【００６８】
ステップＳ１３１において、アドレスクラス９１が0x40であると判定された場合、ステップＳ１３２に進み、割込ハンドラは、パケットタイプを１に設定し、図８のステップＳ９４に進む。
【００６９】
一方、ステップＳ１３１において、アドレスクラス９１が0x40ではないと判定された場合、ステップＳ１３３に進み、割込ハンドラは、アドレスクラス９１が0x20であるかどうか、即ちディスクリプタ９０に対応するパケットがマルチキャストで送信されたパケットであるかどうかを判定する。
【００７０】
ステップＳ１３３において、アドレスクラス９１が0x20であると判定された場合、ステップＳ１３４に進み、割込ハンドラは、パケットタイプを２に設定し、図８のステップＳ９４に進む。
【００７１】
また、ステップＳ１３３において、アドレスクラス９１が0x20ではないと判定された場合、ステップＳ１３５に進み、割込ハンドラは、アドレスクラス９１が0x80であるかどうか、即ちディスクリプタ９０に対応するパケットがプロミスカスモードで受信されたパケットであるかどうかを判定する。
【００７２】
ステップＳ１３５において、アドレスクラス９１が0x80ではないと判定された場合、ステップＳ１３６に進み、割込ハンドラは、パケットタイプを０に設定し、図８のステップＳ９４に進む。
【００７３】
一方、ステップＳ１３５において、アドレスクラス９１が0x80であると判定された場合、即ちディスクリプタ９０に対応するパケットが他人宛にユニキャストで送信されたパケットである場合、ステップＳ１３７に進み、割込ハンドラは、パケットタイプを３に設定し、図８のステップＳ９４に進む。
【００７４】
ところで、従来、DMA転送処理を行う装置において、DMA転送処理を効率的に行うための様々な方法が提案されている。例えば、２つのバッファを交互に用いることにより、データセグメントの変わり目においても、データを途切れることなくDMA転送するデータ転送制御装置がある(例えば、特許文献１参照)。また、アライメントの不一致が発生した場合でも、最大バス幅で転送を行うデータ転送装置がある(例えば、特許文献２参照)。
【００７５】
【特許文献１】特開２０００−１７２６３４号公報
【００７６】
【特許文献２】特開２００３−６７３２１号公報
【発明の開示】
【発明が解決しようとする課題】
【００７７】
しかしながら、CPUが、ネットワークカードからDMA転送されたパケットを用いて行う割込処理などの処理を効率的に行うために、その処理に対応する形式で受信情報を生成し、その処理の処理速度を向上させることは考えられていなかった。
【００７８】
本発明は、このような状況に鑑みてなされたものであり、受信装置により受信されたデータを用いて処理を行うデータ処理装置の処理速度を向上させることができるようにするものである。
【課題を解決するための手段】
【００７９】
本発明の第１の側面の情報処理システムは、データを受信する受信装置と、前記データを用いたデータ処理を実行するデータ処理装置と、から構成される情報処理システムにおいて、前記受信装置は、前記データを受信する受信手段と、受信された前記データに基づき、前記データ処理に対応する形式のデータである形式データを生成し、当該形式データを前記データと共に記憶手段に記憶させる記憶制御手段とを備え、前記データ処理装置は、前記記憶手段に記憶されているデータと形式データを用いて、前記データ処理を行う処理手段を備える。
【００８０】
本発明の第２の側面の受信装置は、データ処理装置がデータ処理を行う際に用いるデータを記憶手段に記憶させる受信装置において、前記データを受信する受信手段と、受信された前記データに基づき、前記データ処理に対応する形式のデータである形式データを生成し、当該形式データを前記データとともに、前記記憶手段に記憶させる記憶制御手段とを備える。
【００８１】
前記データ処理に対応する形式は、前記データ処理の処理単位のサイズであるようにすることができる。
【００８２】
前記データ処理に対応する形式は、前記データ処理で用いられる値を用いる形式であるようにすることができる。
【００８３】
本発明の第２の側面のプログラムは、データ処理装置がデータ処理を行う際に用いるデータを記憶手段に記憶させる処理を、コンピュータに行わせるプログラムにおいて、前記データを受信し、受信された前記データに基づき、前記データ処理に対応する形式のデータである形式データを生成し、当該形式データを前記データとともに、前記記憶手段に記憶させるステップを含む。
【００８４】
本発明の第１の側面においては、データが受信され、受信された前記データに基づき、前記データを用いたデータ処理に対応する形式のデータである形式データが生成され、当該形式データが前記データと共に記憶手段に記憶される。
【００８５】
本発明の第２の側面においては、データが受信され、受信された前記データに基づき、データ処理に対応する形式のデータである形式データが生成され、当該形式データが前記データとともに、前記記憶手段に記憶される。
【発明の効果】
【００８６】
以上のように、本発明の第１の側面と第２の側面によれば、受信されたデータを記憶させることができる。
【００８７】
また、本発明の第１の側面と第２の側面によれば、受信装置により受信されたデータを用いて処理を行うデータ処理装置の処理速度を向上させることができる。
【発明を実施するための最良の形態】
【００８８】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
【００８９】
図１３は、本発明を適用したパソコン１０１の一実施の形態のハードウェア構成例を示すブロック図である。
【００９０】
図１３のパソコン１０１は、ROM１１、メモリコントローラ１３、バス１４、入出力インターフェース１５、入力部１６、出力部１７、記録部１８、ドライブ２０、CPU１１０、RAM１１１、およびネットワークカード１１２から構成される。
【００９１】
ここで、本実施形態に特徴的な事項として、このパソコン１０１は、ネットワークカード１１２により受信されたデータ（即ち、パケット）をRAM１１１に対してDMA転送する際に、ディスクリプタ２１０（後述する図１７）に格納する、ヘッダチェックサムを含むデータ（以下、ヘッダチェックサムデータという）のデータ形式を、CPU１１０の処理単位(即ち、処理ワード)と合致させるようになっている。なお、特許請求の範囲における「形式データ」は、例えば、このヘッダチェックサムデータに相当するものとなっている。
【００９２】
このヘッダチェックサムデータは、受信されたパケット中の所定のデータを用いて生成され、例えば、エラーチェック等の各種割込処理に用いられることになるが、ヘッダチェックサムデータのデータ形式がCPU１１０の処理単位と異なる場合、ヘッダチェックサムの比較等を行う際のCPU１１０の処理負担が大きくなる。例えば、CPU１１０の処理単位が３２ビットである場合に、受信されたパケットに基づいて計算された１６ビットのヘッダチェックサムのみを、ヘッダチェックサムデータとして、ディスクリプタに格納する場合を想定する。この場合、ディスクリプタ内の１６ビットのヘッダチェックサムと、受信されたパケットのヘッダに含まれる１６ビットのヘッダチェックサムデータとを比較することにより、ヘッダチェックサムの比較を行うことになるため、その比較の処理の処理単位は、CPU１１０の処理単位と異なることになる。その結果、CPU１１０の処理負担が大きくなり、高速データ処理の阻害要因となる。本実施形態においては、かかる点に着目して、ディスクリプタ２１０内のヘッダチェックサムデータのデータ形式であるデータのサイズを、CPU１１０の処理単位に合致させ、CPU１１０の処理負担を軽減させることにしたのである。
【００９３】
また、本実施形態に特徴的な事項として、このパソコン１０１は、ネットワークカード１１２により受信されたパケットをRAM１１１に対してDMA転送する際に、ディスクリプタ２３０（後述する図２２）に格納する、受信されたパケットのMACアドレスの解析結果を表すアドレスクラスのデータ形式を、割込処理でパケットタイプとして設定される（用いられる）値を用いる形式としている。なお、特許請求の範囲における「形式データ」は、例えば、このアドレスクラスに相当するものとなっている。
【００９４】
このアドレスクラスは、受信されたパケットのMACアドレスを解析することにより生成され、例えば、パケットタイプの設定等の各種割込処理に用いられることになるが、アドレスクラスのデータ形式が、パケットタイプの設定に用いられる値を用いる形式ではない場合、CPU１１０は、アドレスクラスの値をそのままパケットタイプに設定することはできず、アドレスクラスからパケットの種類を判定し、その種類に基づいてパケットタイプを設定する必要がある。その結果、パケットタイプの設定等を行う際のCPU１１０の処理負担が大きくなり、高速データ処理の阻害要因となる。本実施形態においては、かかる点に着目して、アドレスクラスのデータ形式を、割込処理でパケットタイプとして設定される値を用いる形式とし、CPU１１０の処理負担を軽減させることにしたのである。
【００９５】
以下、図１３を参照しつつ本実施形態にかかるパソコン１０１の具体的な構成について説明することとするが、図１３において、図１と同一の要素については、説明は省略する（同一要素に関しては同一の符号を付す）。
【００９６】
CPU１１０は、ROM１１または記録部１８に記録されている、デバイスドライバなどのプログラムにしたがって各種の処理を実行する。なお、CPU１１０が行う処理の処理単位（ワード）は、３２ビットであるものとする。また、このCPU１１０は、特許請求の範囲におけるデータ処理装置の一例となりうるものである。
【００９７】
例えば、CPU１１０は、RAM１１１のディスクリプタ領域１２１に、ネットワークカード１１２からメモリコントローラ１３を介してDMA転送されてくるパケットを記憶するパケット領域３２のアドレスなどを、ディスクリプタ２１０（後述する図１７）として記憶させる。また、CPU１１０は、ディスクリプタ２１０に基づいて、RAM１１１のパケット領域３２に、ネットワークカード１１２からDMA転送されたパケットを、ROM１１または記録部１８に記録されているプログラムにしたがって処理する。
【００９８】
さらに、CPU１１０は、デバイスドライバの割込ハンドラを起動することにより、パケットと、そのパケットに対応するディスクリプタ２１０を用いて割込処理を行う。
【００９９】
RAM１１１は、ディスクリプタ２１０が記憶されるディスクリプタ領域１２１、ネットワークカード１１２からDMA転送されてくるパケットが記憶されるパケット領域３２などから構成される。なお、このRAM１１１は、特許請求の範囲における記憶手段の一例となりうるものである。
【０１００】
ネットワークカード１１２は、図示せぬネットワークを介して他の装置から送信されてくる、Ethernet（登録商標）に準拠したパケットを受信し、そのパケットを、メモリコントローラ１３を介してRAM１１１にDMA転送する。また、ネットワークカード１１２は、CPU１１０が行う割込処理に対応する形式で、受信されたパケットに関する情報である受信情報を生成する。そして、ネットワークカード１１２は、割込処理に対応する形式で生成された受信情報（以下、割込対応受信情報という）を、メモリコントローラ１３に供給する。なお、ネットワークカード１１２には、MACアドレスが付与されている。また、このネットワークカード１１２は、特許請求の範囲における受信装置の一例となりうるものである。
【０１０１】
次に、図１４は、図１３のパソコン１０１の機能を示すブロック図である。
【０１０２】
図１４のパソコン１０１は、メモリコントローラ１３、CPU１１０、RAM１１１、およびネットワークカード１１２から構成される。
【０１０３】
図１４のCPU１１０は、デバイスドライバ１５１と割込ハンドラ起動部１５２から構成される。
【０１０４】
デバイスドライバ１５１は、割込ハンドラ１５１Ａを含んで構成される。デバイスドライバ１５１は、RAM１１１のディスクリプタ領域１２１にディスクリプタ２１０を設定する(記憶させる)。そして、デバイスドライバ１５１は、ディスクリプタ２１０の設定の完了を、ディスクリプタ制御部１３１に通知する。
【０１０５】
また、デバイスドライバ１５１は、割込ハンドラ起動部１５２からの指令に応じて、割込ハンドラ１５１Ａを起動する。割込ハンドラ１５１Ａは、パケット領域３２からパケットを読み出すとともに、そのパケットに対応するディスクリプタ２１０をディスクリプタ領域１２１から読み出し、そのパケットとディスクリプタ２１０を用いて割込処理を行う。なお、この割込ハンドラ１５１Ａは、特許請求の範囲における処理手段の一例となりうるものである。
【０１０６】
割込ハンドラ起動部１５２は、ネットワークカード１１２の割込制御部１３５（後述する）から割込の通知を受信し、その割込の通知に応じて割込ハンドラ１５１Ａの起動をデバイスドライバ１５１に指令する。
【０１０７】
ネットワークカード１１２は、ディスクリプタ制御部１３１、ディスクリプタ情報部１３２、DMA制御部１３３、パケット受信部１３４、および割り込み制御部１３５から構成される。
【０１０８】
ディスクリプタ制御部１３１は、CPU１１０のデバイスドライバ１５１から供給される、ディスクリプタの設定の完了の通知を受信し、その通知に応じてディスクリプタ２１０のDMA転送を、ディスクリプタ情報部１３２に要求する。
【０１０９】
ディスクリプタ情報部１３２は、ディスクリプタ制御部１３１から供給される、ディスクリプタ２１０のDMA転送の要求に応じて、ディスクリプタ２１０のDMA転送を、DMA制御部１３３に要求する。ディスクリプタ情報部１３２は、メモリコントローラ１３を介して、RAM１１１のディスクリプタ領域１２１からDMA転送されてくるディスクリプタ２１０を、内蔵するメモリ（図示せず）に保持する。さらに、ディスクリプタ情報部１３２は、内蔵するメモリに保持されているディスクリプタ２１０を読み出し、DMA制御部１３３に供給する。
【０１１０】
DMA制御部１３３は、ディスクリプタ情報部１３２からのディスクリプタ２１０のDMA転送の要求に応じて、メモリコントローラ１３にディスクリプタ２１０のDMA転送を要求する。また、DMA制御部１３３は、パケット受信部１３４から供給されるパケットと、ディスクリプタ情報部１３２から供給されるディスクリプタ２１０に基づいて、そのパケットをメモリコントローラ１３にDMA転送する。
【０１１１】
さらに、DMA制御部１３３は、パケット受信部１３４から供給されるパケットとエラー情報に基づいて割込対応受信情報を生成し、その割込対応受信情報をメモリコントローラ１３にDMA転送する。また、DMA制御部１３３は、メモリコントローラ１３から供給される、パケットのDMA転送の完了の通知に応じて、パケットのDMA転送の完了を、割込制御部１３５に通知する。
【０１１２】
パケット受信部１３４は、他の装置からネットワークを介してパケットを受信し、そのパケットを内蔵するメモリ(図示せず)に保持する。また、パケット受信部１３４は、保持しているパケットをDMA制御部１３３に供給する。さらに、パケット受信部１３４は、パケットの受信時におけるエラーの発生内容を検出し、その検出結果に基づいてエラー情報を生成して、DMA制御部１３３に供給する。
【０１１３】
割込制御部１３５は、DMA制御部１３３から供給される通知に応じて、CPU１１０の割込ハンドラ起動部１５２に割込を通知する。
【０１１４】
メモリコントローラ１３は、ネットワークカード１１２のDMA制御部１３３から供給される、ディスクリプタ２１０のDMA転送の要求に基づいて、ディスクリプタ領域１２１からディスクリプタ２１０を読み出し、ディスクリプタ情報部１３２に送信することにより、ディスクリプタ２１０のDMA転送を行う。
【０１１５】
また、メモリコントローラ１３は、DMA制御部１３３からDMA転送されてくるパケットを、パケット領域３２に記憶させる。さらに、メモリコントローラ１３は、DMA制御部１３３からDMA転送されてくる割込対応受信情報を、ディスクリプタ領域１２１のディスクリプタ２１０に格納させることにより、ディスクリプタ２１０を更新する。また、メモリコントローラ１３は、パケットのDMA転送の完了をDMA制御部１３３に通知する。
【０１１６】
次に、図１５乃至図２０を参照して、割込ハンドラ１５１Ａが、割込処理において、パケットに基づいてヘッダチェックサムを計算する処理を行う場合について説明する。
【０１１７】
図１５は、図１４のDMA制御部１３３の詳細構成例を示すブロック図である。
【０１１８】
図１５のDMA制御部１３３は、記憶制御部１７１、抽出部１７２、計算部１７３、生成部１７４、および割り込み処理部１７５から構成される。図１５のDMA制御部１３３では、生成部１７４が、本発明に特徴的な事項として、CPU１１０のワード、即ち割込処理の処理単位である３２ビットのサイズを、割込処理に対応する形式として、その形式のヘッダチェックサムを含むデータを、割込対応受信情報としてディスクリプタ２１０に格納する。
【０１１９】
記憶制御部１７１は、図１４のパケット受信部１３４から供給されるパケットと、ディスクリプタ情報部１３２から供給されるディスクリプタ２１０とに基づいて、そのパケットをメモリコントローラ１３に送信することにより、パケットのDMA転送を行う。
【０１２０】
抽出部１７２は、パケット受信部１３４から供給されるパケットに含まれるIPv4ヘッダ１９０（後述する図１６）を抽出し、計算部１７３と生成部１７４に供給する。計算部１７３は、抽出部１７２からのIPv4ヘッダ１９０に基づいてヘッダチェックサムを計算し、生成部１７４に供給する。
【０１２１】
生成部１７４には、パケット受信部１３４からエラー情報が供給される。生成部１７４は、そのエラー情報とIPv4ヘッダ１９０のIPデータグラム長１９４、並びにTTL１９８、プロトコル１９９、および計算部１７３から供給されるヘッダチェックサムからなる、CPU１１０のワードである３２ビットの、ヘッダチェックサムデータを、割込対応受信情報として生成する。
【０１２２】
生成部１７４は、割込対応受信情報をメモリコントローラ１３に送信することにより、割込対応受信情報のDMA転送を行い、その割込対応受信情報をディスクリプタ２１０に格納させる。割込処理部１７５は、メモリコントローラ１３から供給される、パケットのDMA転送の完了の通知に応じて、パケットのDMA転送の完了を、割込制御部１３５に通知する。
【０１２３】
図１６は、IPv4ヘッダ１９０の構成例を示す図である。
【０１２４】
図１６のIPv4ヘッダ１９０には、４ビットのバージョン１９１、４ビットのヘッダ長１９２、８ビットのＴｏＳ(Type of Service)１９３、および１６ビットのＩＰデータグラム長１９４が格納される。バージョン１９１は、パケットのバージョンの情報であり、ヘッダ長１９２は、バージョン１９１から宛先ＩＰアドレス２０２までを含む、IPv4ヘッダ１９０の長さの情報である。ＴｏＳ１９３は、データの優先度の定義やどのようなタイプの転送を行うかなどを指定する情報であり、ＩＰデータグラム長１９４は、パケットの全長（データサイズ）の情報である。
【０１２５】
IPv4ヘッダ１９０にはまた、１６ビットのデータグラム識別子１９５、３ビットのフラグ１９６、および１３ビットのフラグメントオフセット１９７が格納される。データグラム識別子１９５は、パケットを識別するための情報であり、フラグ１９６は、フラグメント禁止か否か、または、分割されたデータグラムの最後であるか否かである情報である。フラグメントオフセット１９７は、分割されたデータグラムが再構成される際の順番を示す情報である。
【０１２６】
IPv4ヘッダ１９０には、さらに、８ビットのＴＴＬ（Time To Live）１９８、８ビットのプロトコル１９９、１６ビットのヘッダチェックサム２００が格納される。ＴＴＬ１９８は、パケットの生存時間、すなわち、パケットが通過できるルータの数の情報であり、プロトコル１９９は、上位のプロトコルを示す情報である。ヘッダチェックサム２００は、IPv4ヘッダのエラー判定に使用される情報である。
【０１２７】
また、IPv4ヘッダ１９０には、３２ビットの送信元ＩＰアドレス２０１と、３２ビットの宛先ＩＰアドレス２０２が格納される。送信元ＩＰアドレス２０１は、このパケットをネットワークカード１１２に送信した送信元の装置のＩＰアドレスであり、宛先ＩＰアドレスは、このパケットを送信する送信先（宛先）の装置のＩＰアドレスである。
【０１２８】
次に、図１７は、RAM１１１のディスクリプタ領域１２１に記憶されるディスクリプタ２１０の例を示している。
【０１２９】
図１７のディスクリプタ２１０は、アドレス５１、パケットサイズ５２、ステータス５３、TTL２１１、プロトコル２１２、およびヘッダチェックサム２１３が格納される。なお、図１７において、図２と同一の要素については、説明を省略する（同一要素に関しては同一の符号を付す）。
【０１３０】
TTL２１１は、受信されたパケットのIPv4ヘッダ１９０(図１６)に含まれる８ビットのTTL１９８と同一の情報である。プロトコル２１２は、受信されたパケットのIPv4ヘッダ１９０に含まれる８ビットのプロトコル１９９と同一の情報である。ヘッダチェックサム２１３は、計算部１７３により計算された１６ビットのヘッダチェックサムである。
【０１３１】
次に、図１８を参照して、パソコン１０１におけるDMA転送の処理について説明する。
【０１３２】
ステップＳ１５１において、CPU１１０のデバイスドライバ１５１は、RAM１１１のディスクリプタ領域１２１に、図１７のディスクリプタ２１０を設定（記憶）する。なお、このとき、ディスクリプタ２１０には、ネットワークカード１１２からDMA転送されてくるパケットを記憶するために用意されたパケット領域３２のアドレスが、アドレス５１として格納され、そのパケット領域３２のサイズがパケットサイズ５２として格納されている。
【０１３３】
ステップＳ１５１の処理後は、ステップＳ１５２に進み、CPU１１０のデバイスドライバ１５１は、ディスクリプタ２１０の設定の完了をネットワークカード１１２のディスクリプタ制御部１３１に通知する。
【０１３４】
ステップＳ１６１において、ネットワークカード１１２のディスクリプタ制御部１３１は、CPU１１０から、ディスクリプタ２１０の設定の完了の通知を受信し、その通知に応じてディスクリプタ２１０のDMA転送を、ディスクリプタ情報部１３２に要求する。ディスクリプタ情報部１３２は、内蔵するメモリ（図示せず）に予め記憶されている、ディスクリプタ領域１２１のアドレスと、ディスクリプタ２１０のサイズを、ディスクリプタ２１０のDMA転送の要求とともに、DMA制御部１３３に供給する。
【０１３５】
ステップＳ１６１の処理後は、ステップＳ１６２に進み、DMA制御部１３３は、ディスクリプタ情報部１３２から供給されるDMA転送の要求に応じて、ディスクリプタ２１０のDMA転送をメモリコントローラ１３に要求するとともに、ディスクリプタ情報部１３２から供給されるアドレスとサイズを、メモリコントローラ１３に送信する。
【０１３６】
ステップＳ１７１において、メモリコントローラ１３は、ネットワークカード１１２のDMA制御部１３３から、ディスクリプタ２１０のDMA転送の要求とともに、ディスクリプタ領域１２１のアドレスとディスクリプタ２１０のサイズを受信し、ステップＳ１７２に進む。
【０１３７】
ステップＳ１７２において、メモリコントローラ１３は、DMA制御部１３３から受信したアドレスとサイズに基づいて、RAM１１１のディスクリプタ領域１２１からディスクリプタ２１０を読み出し、ステップＳ１７３に進む。ステップＳ１７３において、メモリコントローラ１３は、ステップＳ１７２で読み出されたディスクリプタ２１０をネットワークカード１１２のディスクリプタ情報部１３２に送信することにより、ディスクリプタ２１０のDMA転送を行う。
【０１３８】
ステップＳ１６３において、ネットワークカード１１２のディスクリプタ情報部１３２は、メモリコントローラ１３からDMA転送されてくるディスクリプタ２１０を受信し、内蔵するメモリ(図示せず)に保持する。そして、ディスクリプタ情報部１３２は、保持しているディスクリプタ２１０を読み出し、DMA制御部１３３に供給する。
【０１３９】
ステップＳ１６３の処理後は、ステップＳ１６４に進み、ネットワークカード１１２のパケット受信部１３４は、図示せぬ他の装置からネットワークを介してパケットが受信されたかどうかを判定し、パケットが受信されていないと判定された場合、パケットが受信されるまで待機する。
【０１４０】
ステップＳ１６４において、パケットが受信されたと判定された場合、パケット受信部１３４は、そのパケットを内蔵するメモリ（図示せず）に保持するとともに、エラーの発生内容を検出し、その検出結果を表すエラー情報を生成する。そして、パケット受信部１３４は、パケットとエラー情報をDMA制御部１３３に供給する。
【０１４１】
そして、ステップＳ１６５において、DMA制御部１３３は、ディスクリプタ情報部１３２から供給されるディスクリプタ２１０のアドレス２１１を指定して、パケット受信部１３４から供給されるパケットを、メモリコントローラ１３に送信することにより、パケットのDMA転送を行い、メモリコントローラ１３を介してパケットをパケット領域３２に記憶させる。
【０１４２】
ステップＳ１７４において、メモリコントローラ１３は、アドレス２１１を指定してDMA制御部１３３からDMA転送されてくるパケットを受信し、ステップＳ１７５に進む。ステップＳ１７５において、メモリコントローラ１３は、パケット領域３２のアドレス２１１に、メモリコントローラ１３から受信したパケットを記憶させる。
【０１４３】
ステップＳ１６６において、ネットワークカード１１２のDMA制御部１３３は、パケット受信部１３４から供給されるパケットの割込対応受信情報を生成する生成処理を行う。この生成処理の詳細は、図１９を参照して後述する。
【０１４４】
ステップＳ１６６の処理後は、ステップＳ１６７に進み、DMA制御部１３３は、ステップＳ１６６で生成された割込対応受信情報をメモリコントローラ１３に送信することにより、割込対応受信情報のDMA転送を行い、メモリコントローラ１３を介して割り込み対応受信情報をディスクリプタ領域１２１のディスクリプタ２１０に格納（記憶）させる。
【０１４５】
ステップＳ１７６において、メモリコントローラ１３は、ネットワークカード１１２のDMA制御部１３３から送信されてくる割込対応受信情報を受信し、ステップＳ１７７に進む。ステップＳ１７７において、メモリコントローラ１３は、受信された割込対応受信情報をディスクリプタ２１０に格納することにより、ディスクリプタ２１０を更新する。
【０１４６】
具体的には、メモリコントローラ１３は、割込対応受信情報のうちのIPデータグラム長１９４をパケットサイズ５２として格納(更新)し、エラー情報をステータス５３として格納する。また、メモリコントローラ１３は、ヘッダチェックサムデータのTTL１９８、プロトコル１９９、ヘッダチェックサムを、TTL２１１、プロトコル２１２、ヘッダチェックサム２１３として格納する。
【０１４７】
ステップＳ１７７の処理後は、ステップＳ１７８に進み、メモリコントローラ１３は、パケットのDMA転送の完了を、ネットワークカード１１２のDMA制御部１３３に通知し、処理を終了する。
【０１４８】
ステップＳ１６８において、ネットワークカード１１２のDMA制御部１３３は、メモリコントローラ１３からパケットのDMA転送の完了の通知を受信し、その通知に応じて、DMA転送の完了を割り込み制御部１３５に通知する。
【０１４９】
ステップＳ１６８の処理後は、ステップＳ１６９に進み、ネットワークカード１１２の割込処理部１３５は、DMA制御部１３３からの、パケットのDMA転送の完了の通知に応じて、CPU１１０に割込を通知し、処理を終了する。
【０１５０】
ステップＳ１５３において、CPU１１０の割込ハンドラ起動部１５２は、ネットワークカード１１２からの割込の通知を受信し、その通知に応じて、割込ハンドラ１５１Ａの起動をデバイスドライバ１５１に指令する。ステップＳ１５３の処理後は、ステップＳ１５４に進み、CPU１１０のデバイスドライバ１５１は、割込ハンドラ起動部１５２からの指令に応じて、割込ハンドラ１５１Ａを起動し、処理を終了する。
【０１５１】
次に、図１９を参照して、図１８のステップＳ１６６の生成処理について説明する。
【０１５２】
ステップＳ１９１において、抽出部１７２は、パケット受信部１３４から供給されるパケットのIPv4ヘッダ１９０から、IPデータグラム長１９４を抽出し、そのIPデータグラム長１９４を生成部１７４に供給する。
【０１５３】
ステップＳ１９１の処理後は、ステップＳ１９２に進み、抽出部１７２は、パケット受信部１３４から供給されるパケットのIPv4ヘッダ１９０から、TTL１９８とプロトコル１９９を抽出し、そのTLL１９８とプロトコル１９９を生成部１７４に供給する。
【０１５４】
ステップＳ１９２の処理後は、ステップＳ１９３に進み、計算部１７３は、パケット受信部１３４から供給されるパケットのIPv4ヘッダ１９０に基づいて、ヘッダチェックサムを計算し、その結果得られるヘッダチェックサムを生成部１７４に供給する。
【０１５５】
ステップＳ１９３の処理後は、ステップＳ１９４に進み、生成部１７４は、パケット受信部１３４から供給されるエラー情報と抽出部１７２から供給されるIPデータグラム長、並びにTTL１９８、プロトコル１９９、およびステップＳ１９３で計算されたヘッダチェックサムからなる３２ビットのヘッダチェックサムデータを、割込対応受信情報として生成し、図１８のステップＳ１６７に進む。
【０１５６】
次に、図２０を参照して、割込ハンドラ１５１Ａが行う割込処理について説明する。この割込処理は、例えば、図１８のステップＳ１５４において割込ハンドラ１５１Ａが起動されたとき、開始される。
【０１５７】
ステップＳ２１１において、割込ハンドラ１５１Ａは、RAM１１１のディスクリプタ領域１２１に記憶されているディスクリプタ２１０（図１７）からアドレス５１、ステータス５３、並びにTTL２１１、プロトコル２１２、およびヘッダチェックサム２１３からなる３２ビットのヘッダチェックサムデータを読み出し、ステップＳ２１２に進む。
【０１５８】
ステップＳ２１２において、割込ハンドラ１５１Ａは、ステップＳ２１１で読み出されたステータス５３がエラーの発生を表しているかどうかを判定し、ステータス５３がエラーの発生を表していないと判定した場合、ステップＳ２１３に進む。
【０１５９】
ステップＳ２１３において、割込ハンドラ１５１Ａは、ステップＳ２１１で読み出されたアドレス５１に基づいて、パケット領域３２のアドレス５１に記憶されているパケットを読み出し、そのパケットのIPv4ヘッダ１９０に含まれるTTL１９８、プロトコル１９９、およびヘッダチェックサム２００からなる３２ビットのヘッダチェックサムデータと、ディスクリプタ２１０の３２ビットのヘッダチェックサムデータとが一致するかどうかを判定する。
【０１６０】
このように、ステップＳ２１３では、割込ハンドラ１５１Ａは、CPU１１０のワードである３２ビットのヘッダチェックサムデータを比較するので、ハーフワードである１６ビットのヘッダチェックサムを比較する処理（図６のステップＳ７３の処理）に比べて、高速に処理を行うことができる。その結果、割込処理の処理速度を向上させることができる。
【０１６１】
ステップＳ２１３において、ヘッダチェックサムデータが一致すると判定された場合、ステップＳ２１４に進み、割込ハンドラ１５１Ａは、読み出されたパケットからイーサヘッダなどを取り除くヘッダ処理を行う。ステップＳ２１４の処理後は、ステップＳ２１５に進み、割込ハンドラ１５１Ａは、上位のＩＰ層にヘッダ処理後のパケットを渡し、ステップＳ２１７に進む。
【０１６２】
一方、ステップＳ２１２において、ステータス５３がエラーの発生を表していると判定された場合、またはステップＳ２１３において、ヘッダチェックサムデータが一致しないと判定された場合、ステップＳ２１６に進み、割込ハンドラ１５１Ａは、パケット領域３２のアドレス５１に記憶されているパケットを破棄（削除）し、ステップＳ２１７に進む。ステップＳ２１７において、割込ハンドラ１５１Ａは、図１８のステップＳ１５３で受信された割込の通知をクリアし、処理を終了する。
【０１６３】
以上のように、ネットワークカード１１２は、ディスクリプタ２１０に１６ビットのヘッダチェックサムだけ格納するのではなく、TTL２１１、プロトコル２１２、およびヘッダチェックサム２１３からなる、CPU１１０のワードである３２ビットのサイズであるヘッダチェックサムデータを格納するので、CPU１１０は、ディスクリプタ２１０に格納されている３２ビットのヘッダチェックサムデータと、IPv4ヘッダ１９０に含まれる３２ビットのヘッダチェックサムデータとを比較することにより、ヘッダチェックサムを比較する処理を高速に行うことができる。
【０１６４】
次に、図２１乃至図２６を参照して、割込ハンドラ１５１ＡがLinux上で動作し、割込処理において、パケットのイーサヘッダに記述されているMACアドレスの解析結果を表す値を、パケットタイプ(skb->pkt_type)として設定する処理（eth_type_trans関数）を行う場合について説明する。
【０１６５】
この場合、図１４のDMA制御部は、図２１に示すように構成される。
【０１６６】
図２１のDMA制御部２２０は、記憶制御部１７１、抽出部１７２、割込処理部１７５、解析部２２１、および生成部２２２から構成される。図２１のDMA制御部２２０では、生成部２２２が、本発明に特徴的な事項として、割込処理でパケットタイプとして設定される（用いられる）値を用いる形式を、割込処理に対応する形式として、その形式の、MACアドレスの解析結果を表すアドレスクラスを、受信情報としてディスクリプタ２３０に格納する。
【０１６７】
なお、図２１において、図１５と同一の要素については、説明を省略する（同一要素に関しては同一の符号を付す）。
【０１６８】
解析部２２１は、パケット受信部１３４から供給されるパケットのイーサヘッダに含まれるMACアドレスを解析し、その解析結果を表すアドレスクラスを、生成部２２２に供給する。
【０１６９】
生成部２２２は、パケット受信部１３４から供給されるエラー情報、抽出部１７２から供給されるIPデータグラム長１９４、および解析部２２１から供給されるアドレスクラスを、割込対応受信情報として生成する。生成部２２２は、割込対応受信情報をメモリコントローラ１３に送信することにより、割込対応受信情報のDMA転送を行い、その割込対応受信情報をディスクリプタ２３０に格納させる。
【０１７０】
次に、図２２を参照して、図１４のDMA制御部が図２１のDMA制御部２２０により構成される場合、ディスクリプタ領域１２１に記憶されるディスクリプタの例を示す。
【０１７１】
図２２のディスクリプタ２３０には、アドレス５１、パケットサイズ５２、ステータス５３、アドレスクラス２３１、およびリザーブ２３２が格納される。なお、図２２において、図２と同一の要素については、説明を省略する（同一要素に関しては同一の符号を付す）。
【０１７２】
アドレスクラス２３１は、解析部２２１により解析された結果を表すアドレスクラスである。リザーブ２３２は、空き領域である。
【０１７３】
次に、図２３を参照して、アドレスクラス２３１について説明する。
【０１７４】
図２３に示すように、アドレスクラス２３１が０である場合、アドレスクラス２３１は、受信されたパケットが自分宛にユニキャストで送信されたパケットであるという解析結果を表し、アドレスクラス２３１が１である場合、パケットは、受信されたパケットがブロードキャストで送信されたパケットであるという解析結果を表す。
【０１７５】
また、アドレスクラス２３１が２である場合、受信されたパケットがマルチキャストで送信されたパケットであるという解析結果を表し、アドレスクラス２３１が３である場合、受信されたパケットが他人宛にユニキャストで送信されたパケットであるという解析結果を表す。
【０１７６】
以上のように、各解析結果を表すアドレスクラス２３１の値は、Linux上で動作する割込ハンドラ１５１Ａが設定するパケットタイプ(skb->pkt_type)の値(図７)と同一である。
【０１７７】
次に、図２４を参照して、図２１のDMA制御部２２０が行う生成処理について説明する。
【０１７８】
ステップＳ２３１の処理は、図１９のステップＳ１９１の処理と同様であるので、説明は省略する。
【０１７９】
ステップＳ２３１の処理後は、ステップＳ２３２に進み、解析部２２１は、パケット受信部１３４から供給されるパケットのイーサヘッダのMACアドレスを解析する解析処理を行う。この解析処理の詳細は、図２５を参照して後述する。
【０１８０】
ステップＳ２３２の処理後は、ステップＳ２３３に進み、生成部２２２は、パケット受信部１３４から供給されるエラー情報、抽出部１７２から供給されるIPデータグラム長１９４、解析部２２１から供給されるアドレスクラスを、割込対応受信情報として生成し、図１８のステップＳ１６７に進む。
【０１８１】
次に、図２５を参照して、図２４のステップＳ２３２の解析処理について説明する。
【０１８２】
ステップＳ２５１において、解析部２２１は、パケット受信部１３４から供給されるパケットのイーサヘッダに記述されているMACアドレスの最下位ビットが１であるかどうか、即ち受信されたパケットがブロードキャストまたはマルチキャストで送信されたパケットであるかどうかを判定する。
【０１８３】
ステップＳ２５１において、MACアドレスの最下位ビットが１ではないと判定された場合、即ち受信されたパケットがユニキャストで送信されたパケットである場合、ステップＳ２５２に進み、解析部２２１は、MACアドレスが自分のアドレス（ネットワークカード１１２に付与されているMACアドレス）であるかどうかを判定する。
【０１８４】
ステップＳ２５２において、MACアドレスが自分のアドレスではないと判定された場合、即ち受信されたパケットが、他人宛にユニキャストで送信されたパケットである場合、ステップＳ２５３に進み、解析部２２１はパケットタイプを３に設定し、図２４のステップＳ２３３に進む。
【０１８５】
一方、ステップＳ２５２において、MACアドレスが自分のアドレスであると判定された場合、即ち受信されたパケットが、自分宛にユニキャストで送信されたパケットである場合、ステップＳ２５４に進み、解析部２２１はパケットタイプを０に設定し、図２４のステップＳ２３３に進む。
【０１８６】
また、ステップＳ２５１において、MACアドレスの最下位ビットが１であると判定された場合、ステップＳ２５５に進み、解析部２２１は、MACアドレスがブロードキャストアドレスであるかどうか、即ちMACアドレスのすべてのビットが１であるかどうかを判定する。
【０１８７】
ステップＳ２５５において、MACアドレスがブロードキャストアドレスではないと判定された場合、ステップＳ２５６に進み、解析部２２１はパケットタイプを２に設定し、図２４のステップＳ２３３に進む。
【０１８８】
一方、ステップＳ２５５において、MACアドレスがブロードキャストアドレスであると判定された場合、ステップＳ２５７に進み、解析部２２１はパケットタイプを１に設定し、図２４のステップＳ２３３に進む。
【０１８９】
次に、図２６を参照して、Linux上で動作する割込ハンドラ１５１Ａが行う割込処理について説明する。この割込処理は、例えば、図１８のステップＳ１５４において割込ハンドラが起動されたとき、開始される。
【０１９０】
ステップＳ２７１において、割込ハンドラ１５１Ａは、RAM１１１のディスクリプタ領域１２１に記憶されているディスクリプタ２３０（図２２）から、アドレス５１、ステータス５３、およびアドレスクラス２３１を読み出し、ステップＳ２７２に進む。
【０１９１】
ステップＳ２７２において、割込ハンドラ１５１Ａは、ステップＳ２７１で読み出されたステータス２１３がエラーの発生を表しているかどうかを判定し、ステータス２１３がエラーの発生を表していないと判定した場合、ステップＳ２７３に進む。
【０１９２】
ステップＳ２７３において、割込ハンドラ１５１Ａは、ステップＳ２７１で読み出されたアドレスクラス２３１を、パケットタイプに設定する。
【０１９３】
上述したように、各解析結果を表すアドレスクラス２３１の値は、各解析結果を表すパケットタイプの値と同一であるので、割込ハンドラ１５１Ａは、ディスクリプタ２３０に格納されているアドレスクラス２３１を、そのままパケットタイプに設定することができる。これにより、図１２に示した設定処理を行う従来の割込処理に比べて、割込処理の処理速度を向上させることができる。
【０１９４】
ステップＳ２７４乃至ステップＳ２７７の処理は、図２０のステップＳ２１４乃至Ｓ２１７の処理と同様であるので、説明は省略する。
【０１９５】
以上のように、ネットワークカード１１２は、CPU１１０の割込処理において用いられるパケットタイプの値をアドレスクラス２３１の値として用いて、ディスクリプタ２３０に格納するので、CPU１１０は、ディスクリプタ２１０に格納されているアドレスクラス２３１を、そのままパケットタイプに設定することができる。その結果、CPU１１０は、パケットタイプを設定する処理を高速に行うことができる。
【０１９６】
なお、上述した説明では、各解析結果を表すアドレスクラス２３１の値は、Linux上で動作する割込ハンドラ１５１Ａが行う割込処理において設定されるパケットタイプ(skb->pkt_type)の値(図７)と同一の値としたが、その他のＯＳ（Operating System）上で動作する割込ハンドラが行う割込処理において設定されるMACアドレスの解析結果の値と同一の値としてもよい。
【０１９７】
また、各解析結果を表すアドレスクラス２３１の値は、製造時に予め設定されるようにしてもよいし、ネットワークカード１１２を初期化することにより、ＯＳに対応する値に設定されるようにしてもよい。
【０１９８】
以上のように、ネットワークカード１１２は、CPU１１０が行う割込処理に対応する形式で受信情報を生成し、その生成された受信情報である割込対応受信情報を、ディスクリプタ領域１２１のディスクリプタ２１０（２３０）に記憶させるので、CPU１１０の処理速度を向上させることができる。
【０１９９】
なお、本明細書において、プログラム記録媒体に格納されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０２００】
また、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
【図面の簡単な説明】
【０２０１】
【図１】従来のパーソナルコンピュータの一例を示すブロック図である。
【図２】従来のディスクリプタの一例を示す図である。
【図３】従来のDMA転送の処理について説明するフローチャートである。
【図４】従来の割込ハンドラによる割込処理の一例について説明するフローチャートである。
【図５】従来のディスクリプタの他の一例を示す図である。
【図６】従来の割込ハンドラによる割込処理の他の一例についてフローチャートである。
【図７】パケットタイプを説明する図である。
【図８】従来の割込ハンドラによる割込処理の、さらに他の一例について説明するフローチャートである。
【図９】設定処理を説明するフローチャートである。
【図１０】従来のディスクリプタの、さらに他の一例を示す図である。
【図１１】従来のアドレスクラスについて説明する図である。
【図１２】他の設定処理を説明するフローチャートである。
【図１３】本発明を適用したパーソナルコンピュータの一実施の形態のハードウェア構成例を示すブロック図である。
【図１４】図１３のパーソナルコンピュータの機能を示すブロック図である。
【図１５】DMA制御部の詳細構成例を示すブロック図である。
【図１６】IPv4ヘッダの構成を示す図である。
【図１７】ディスクリプタの例を示す図である。
【図１８】DMA転送の処理について説明するフローチャートである。
【図１９】生成処理について説明するフローチャートである。
【図２０】割込処理について説明するフローチャートである。
【図２１】DMA制御部の詳細構成例を示す他のブロック図である。
【図２２】ディスクリプタの他の例を示す部である。
【図２３】アドレスクラスについて説明する図である。
【図２４】他の生成処理について説明するフローチャートである。
【図２５】解析処理について説明するフローチャートである。
【図２６】他の割込処理について説明するフローチャートである。
【符号の説明】
【０２０２】
１１  ROM，  １８  記録部，  ２１  リムーバブルメディア，  １１０  CPU，  １１１  RAM，  １３３  DMA制御部，  １３４  パケット受信部，  １５１Ａ  割込ハンドラ，  １７１  記憶制御部，  １７２  抽出部，  １７３  計算部，  １７４  生成部，  １７５  割込処理部，  ２２１  解析部，  ２２２  生成部
【図１】
2007172008.tif 000003
【図２】
2007172008.tif 000004
【図３】
2007172008.tif 000005
【図４】
2007172008.tif 000006
【図５】
2007172008.tif 000007
【図６】
2007172008.tif 000008
【図７】
2007172008.tif 000009
【図８】
2007172008.tif 000010
【図９】
2007172008.tif 000011
【図１０】
2007172008.tif 000012
【図１１】
2007172008.tif 000013
【図１２】
2007172008.tif 000014
【図１３】
2007172008.tif 000015
【図１４】
2007172008.tif 000016
【図１５】
2007172008.tif 000017
【図１６】
2007172008.tif 000018
【図１７】
2007172008.tif 000019
【図１８】
2007172008.tif 000020
【図１９】
2007172008.tif 000021
【図２０】
2007172008.tif 000022
【図２１】
2007172008.tif 000023
【図２２】
2007172008.tif 000024
【図２３】
2007172008.tif 000025
【図２４】
2007172008.tif 000026
【図２５】
2007172008.tif 000027
【図２６】
2007172008.tif 000028