(57)【特許請求の範囲】
【請求項１】
ネットワークを介して、前記ネットワークに接続された他の機器と通信するために通信処理を実行する情報処理装置において、
アプリケーションプログラムからの要求に応じて、複数の階層からなる前記通信処理のうち、TCP/IP（Transmission Control Protocol/Internet Protocol）プロトコルスタックの上位の層の第１の通信処理を、ソフトウェアによるTCP/IP制御により実行する第１のソフト通信処理手段と、
前記第１のソフト通信処理手段により実行された前記第１の通信処理の処理結果に応じて、前記TCP/IPプロトコルスタックの第２の通信処理を、TOE（TCP Offload Engine）によるTCP/IP制御により実行する第１のハード通信処理手段と、
前記第１のソフト通信処理手段と前記第１のハード通信処理手段の両方またはいずれか一方に障害が発生した場合、前記アプリケーションプログラムから障害発生前の状態を取得し、取得した前記状態の結果に応じて、前記第１の通信処理を実行する第２のソフト通信処理手段と、
前記第２のソフト通信処理手段により実行された前記第１の通信処理の処理結果に応じて、前記第２の通信処理を実行する第２のハード通信処理手段と
を備え、
前記第１のソフト通信処理手段または前記第２のソフト通信処理手段は、前記第１の通信処理を実行するために必要な機能を提供するAPI(Application Program Interface)を選択し、選択された前記APIをロードすることにより、前記第１の通信処理を実行する
情報処理装置。
【請求項２】
前記第１のハード通信処理手段の状態を監視し、その状態に関する情報を蓄積する監視手段を備える
請求項１の情報処理装置。
【請求項３】
前記APIは、ソケットAPIである
請求項１の情報処理装置。
【請求項４】
ネットワークを介して、前記ネットワークに接続された他の機器と通信するために通信処理を実行する情報処理装置の情報処理方法であって、
アプリケーションプログラムからの要求に応じて、複数の階層からなる前記通信処理のうち、ネットワークプロトコルスタックの上位の層の第１の通信処理を、ソフトウェアによるTCP/IP制御により実行する第１のソフト通信処理ステップと、
前記第１のソフト通信処理ステップの処理により実行された前記第１の通信処理の処理結果に応じて、前記ネットワークプロトコルスタックの第２の通信処理を、TOEによるTCP/IP制御により実行する第１のハード通信処理ステップと、
前記第１のソフト通信処理ステップの処理と前記第１のハード通信処理ステップの処理の両方またはいずれか一方に障害が発生した場合、前記アプリケーションプログラムから障害発生前の状態を取得し、取得した前記状態の結果に応じて、前記第１の通信処理を実行する第２のソフト通信処理ステップと、
前記第２のソフト通信処理ステップの処理により実行された前記第１の通信処理の処理結果に応じて、前記第２の通信処理を実行する第２のハード通信処理ステップと
を含み、
前記第１のソフト通信処理ステップの処理または前記第２のソフト通信処理ステップの処理は、前記第１の通信処理を実行するために必要な機能を提供するAPIを選択し、選択された前記APIをロードすることにより、前記第１の通信処理を実行する
情報処理方法。
【請求項５】
ネットワークを介して、前記ネットワークに接続された他の機器と通信するために通信処理を、情報処理装置に行わせるプログラムにおいて、
アプリケーションプログラムからの要求に応じて、複数の階層からなる前記通信処理のうち、ネットワークプロトコルスタックの上位の層の第１の通信処理を、ソフトウェアによるTCP/IP制御により実行する第１のソフト通信処理ステップと、
前記第１のソフト通信処理ステップの処理により実行された前記第１の通信処理の処理結果に応じて、前記ネットワークプロトコルスタックの第２の通信処理を、TOEによるTCP/IP制御により実行する第１のハード通信処理ステップと、
前記第１のソフト通信処理ステップの処理と前記第１のハード通信処理ステップの処理の両方またはいずれか一方に障害が発生した場合、前記アプリケーションプログラムから障害発生前の状態を取得し、取得した前記状態の結果に応じて、前記第１の通信処理を実行する第２のソフト通信処理ステップと、
前記第２のソフト通信処理ステップの処理により実行された前記第１の通信処理の処理結果に応じて、前記第２の通信処理を実行する第２のハード通信処理ステップと
を含み、
前記第１のソフト通信処理ステップの処理または前記第２のソフト通信処理ステップの処理は、前記第１の通信処理を実行するために必要な機能を提供するAPIを選択し、選択された前記APIをロードすることにより、前記第１の通信処理を実行する
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置および方法、並びにプログラムに関し、特に、TOE（TCP Offload Engine）により通信をする情報処理装置および方法、並びにプログラムに関する。
【背景技術】
【０００２】
従来より、インターネットなどのネットワークで使用されるプロトコルとして、TCP/IP（Transmission Control Protocol/Internet Protocol）がある。TCP/IPは、もともとUNIX（登録商標）においてソフトウェア（ソフトウェアプログラム）により実装されていた経緯があり、現在でもその処理の大部分がソフトウェアにより行われている。しかし、容量の大きいデータのネットワーク転送要求が高まるにつれて、TCP/IPの処理の高速化を求める声が大きくなってきた。
【０００３】
そのような要求に対して、例えば、TOE（TCP Offload Engine）と称される、ホスト側のCPU（Central Processing Unit）リソースが費やされていたTCP/IPの処理を、別のチップ（専用のハードウェア）が代わりに行うようにする技術がある。このようにすることで、ホスト側のCPUリソースをアプリケーションプログラムの処理だけに割り当てることができるようになり、ホスト側のCPUの負荷を減らすとともに、TCP/IPの処理を高速化させることができる。
【０００４】
また、TCP/IPなどのネットワークプロトコルスタック（Network Protocol Stack）（以下、プロトコルスタックとも称する）を実装する場合、一般的に、プロトコルスタックとAPI（Application Program Interface）とが、OS（Operating System）のカーネル（kernel）内部に実装されているため（１つのプログラムになっているため）、それらは不可分に結び付いている。
【０００５】
ここで、プロトコルスタックとは、１つの通信であっても、役割の異なる複数のプロトコルからなることが多いため、それらのプロトコルをまとめたものをいう。例えば、TCP/IPの場合、TCP（Transmission Control Protocol）とIP（Internet Protocol）とは、本来独立したプロトコルであるが、２つを組み合わせた使用方法が一般的であるため、それらを組み合わせたプロトコルスタックとして表現されている。また、一般的に、階層的に定義されているプロトコルに対応して、それを実装するソフトウェアも階層的に構築されており、このことから、プロトコルスタックは、それらのソフトウェアによる実装を指すこともある。したがって、以下、例えば、TCP/IPやUDP/IP（User Datagram Protocol/Internet Protocol）などの複数のプロトコルからなるプロトコル、またはそれを実装するソフトウェアのことをプロトコルスタックと称して説明する。
【０００６】
また、APIとは、あるプラットホーム向けのソフトウェアを開発するときに使用することができる命令や関数の集合のことをいう。具体的には、例えば、ソケットAPI（Socket API）は、アプリケーション層とトランスポート層との間に定義されており、これによりネットワーク通信や、プロセス間通信（IPC（InterProcess Communication））を行う。これらのソケットAPIは、例えば、OSがUNIX（登録商標）である場合、BSDソケットにより実装され、また、OSがWindows（登録商標）である場合、Winsock（Windows（登録商標） Sockets）により実装されている。
【０００７】
すなわち、従来においては、プロトコルスタックとAPIとが不可分に結び付いた状態で、TCP/IPの処理を行っていた。
【０００８】
さらに、入力してくるAV（Audio Visual）データをAVバッファ回路に格納した後に、パケット処理部において、32キロバイトのジャンボパケットデータを生成し、CPUが生成したヘッダデータに基づいて、生成したジャンボパケットデータを分割して、最大1518バイトのイーサーネット（登録商標）パケットを生成して送信する送信装置もある（例えば、特許文献１）。
【０００９】
【特許文献１】特開２００３−２２９９０５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、プロトコルスタックを実装する場合、プロトコルスタックとAPIとがOSのカーネルの内部により不可分に結び付いているために、特定のプロトコルスタックに対して、多様なAPIを提供することができないという問題があった。
【００１１】
例えば、特開２００３−２２９９０５号公報に開示されている送信装置は、パケットデータを分割して送信しているが、プロトコルスタックとAPIとが不可分に結び付いているために、多様なAPIを使用することができない可能性があった。
【００１２】
また、プロトコルスタックとAPIとが密接に結び付いていることにより、プロトコルスタックとAPIのうち、片方に障害が発生した場合、他方にも直接影響が及んでしまうという問題もあった。
【００１３】
さらに、必要となるAPIのみを選択してメモリ上にロードすることができないため、メモリの使用効率が悪くなるという問題もあった。
【００１４】
本発明はこのような状況に鑑みてなされたものであり、特定のプロトコルスタックに対して、多様なAPIを提供することができるようにするものである。
【課題を解決するための手段】
【００１５】
本発明の一側面の情報処理装置は、ネットワークを介して、前記ネットワークに接続された他の機器と通信するために通信処理を実行する情報処理装置において、アプリケーションプログラムからの要求に応じて、複数の階層からなる前記通信処理のうち、TCP/IP（Transmission Control Protocol/Internet Protocol）プロトコルスタックの上位の層の第１の通信処理を、ソフトウェアによるTCP/IP制御により実行する第１のソフト通信処理手段と、前記第１のソフト通信処理手段により実行された前記第１の通信処理の処理結果に応じて、前記TCP/IPプロトコルスタックの第２の通信処理を、TOE（TCP Offload Engine）によるTCP/IP制御により実行する第１のハード通信処理手段と、前記第１のソフト通信処理手段と前記第１のハード通信処理手段の両方またはいずれか一方に障害が発生した場合、前記アプリケーションプログラムから障害発生前の状態を取得し、取得した前記状態の結果に応じて、前記第１の通信処理を実行する第２のソフト通信処理手段と、前記第２のソフト通信処理手段により実行された前記第１の通信処理の処理結果に応じて、前記第２の通信処理を実行する第２のハード通信処理手段とを備え、前記第１のソフト通信処理手段または前記第２のソフト通信処理手段は、前記第１の通信処理を実行するために必要な機能を提供するAPI(Application Program Interface)を選択し、選択された前記APIをロードすることにより、前記第１の通信処理を実行する。
【００１６】
ネットワークとは、少なくとも２つの装置が接続され、ある装置から、他の装置に対して、情報の伝達をできるようにした仕組みをいう。ネットワークを介して通信する装置は、独立した装置どうしであってもよいし、１つの装置を構成している内部ブロックどうしであってもよい。
【００１７】
また、通信とは、無線通信および有線通信は勿論、無線通信と有線通信とが混在した通信、すなわち、ある区間では無線通信が行われ、他の区間では有線通信が行われるようなものであってもよい。さらに、ある装置から他の装置への通信が有線通信で行われ、他の装置からある装置への通信が無線通信で行われるようなものであってもよい。
【００１８】
前記第１のハード通信処理手段の状態を監視し、その状態に関する情報を蓄積する監視手段を備えるようにすることができる。
【００２０】
前記APIは、ソケットAPIであるようにすることができる。
【００２４】
本発明の一側面の情報処理方法は、ネットワークを介して、前記ネットワークに接続された他の機器と通信するために通信処理を実行する情報処理装置の情報処理方法であって、アプリケーションプログラムからの要求に応じて、複数の階層からなる前記通信処理のうち、ネットワークプロトコルスタックの上位の層の第１の通信処理を、ソフトウェアによるTCP/IP制御により実行する第１のソフト通信処理ステップと、前記第１のソフト通信処理ステップの処理により実行された前記第１の通信処理の処理結果に応じて、前記ネットワークプロトコルスタックの第２の通信処理を、TOEによるTCP/IP制御により実行する第１のハード通信処理ステップと、前記第１のソフト通信処理ステップの処理と前記第１のハード通信処理ステップの処理の両方またはいずれか一方に障害が発生した場合、前記アプリケーションプログラムから障害発生前の状態を取得し、取得した前記状態の結果に応じて、前記第１の通信処理を実行する第２のソフト通信処理ステップと、前記第２のソフト通信処理ステップの処理により実行された前記第１の通信処理の処理結果に応じて、前記第２の通信処理を実行する第２のハード通信処理ステップとを含み、前記第１のソフト通信処理ステップの処理または前記第２のソフト通信処理ステップの処理は、前記第１の通信処理を実行するために必要な機能を提供するAPIを選択し、選択された前記APIをロードすることにより、前記第１の通信処理を実行する。
【００２５】
本発明の一側面のプログラムは、ネットワークを介して、前記ネットワークに接続された他の機器と通信するために通信処理を、情報処理装置に行わせるプログラムにおいて、アプリケーションプログラムからの要求に応じて、複数の階層からなる前記通信処理のうち、ネットワークプロトコルスタックの上位の層の第１の通信処理を、ソフトウェアによるTCP/IP制御により実行する第１のソフト通信処理ステップと、前記第１のソフト通信処理ステップの処理により実行された前記第１の通信処理の処理結果に応じて、前記ネットワークプロトコルスタックの第２の通信処理を、TOEによるTCP/IP制御により実行する第１のハード通信処理ステップと、前記第１のソフト通信処理ステップの処理と前記第１のハード通信処理ステップの処理の両方またはいずれか一方に障害が発生した場合、前記アプリケーションプログラムから障害発生前の状態を取得し、取得した前記状態の結果に応じて、前記第１の通信処理を実行する第２のソフト通信処理ステップと、前記第２のソフト通信処理ステップの処理により実行された前記第１の通信処理の処理結果に応じて、前記第２の通信処理を実行する第２のハード通信処理ステップとを含み、前記第１のソフト通信処理ステップの処理または前記第２のソフト通信処理ステップの処理は、前記第１の通信処理を実行するために必要な機能を提供するAPIを選択し、選択された前記APIをロードすることにより、前記第１の通信処理を実行する。
【００２６】
本発明の一側面においては、アプリケーションプログラムからの要求に応じて、複数の階層からなる前記通信処理のうち、TCP/IPプロトコルスタックの上位の層の第１の通信処理が、ソフトウェアによるTCP/IP制御により実行され、実行された前記第１の通信処理の処理結果に応じて、前記TCP/IPプロトコルスタックの第２の通信処理が、TOEによるTCP/IP制御により実行され、第１の通信処理を実行するために必要な機能を提供するAPIが選択され、選択されたAPIをロードすることにより、第１の通信処理が実行される。また、障害が発生した場合、前記アプリケーションプログラムから障害発生前の状態が取得され、取得した前記状態の結果に応じて、前記第１の通信処理が実行され、実行された前記第１の通信処理の処理結果に応じて、前記第２の通信処理が実行される。
【発明の効果】
【００２７】
以上のように、本発明の一側面によれば、特定のプロトコルスタックに対して、多様なAPIを提供することができる。
【発明を実施するための最良の形態】
【００３８】
以下、図面を参照しながら本発明の実施の形態について説明する。
【００３９】
図１は、パーソナルコンピュータ１のハードウェアの構成の例を示すブロック図である。
【００４０】
図１の例のパーソナルコンピュータ１において、CPU（Central Processing Unit）１１は、ROM（Read Only Memory）１２に記憶されているプログラム、または記録部１８からRAM（Random Access Memory）１３にロードされたプログラムにしたがって各種の処理を実行する。RAM１３にはまた、CPU１１が各種の処理を実行する上において必要なデータなども適宜記憶される。
【００４１】
CPU１１、ROM１２、およびRAM１３は、バス１４を介して相互に接続されている。このバス１４にはまた、入出力インターフェース１５も接続されている。
【００４２】
入出力インターフェース１５には、キーボード、マウスなどよりなる入力部１６、スピーカおよびLCD（Liquid Crystal Display）などのディスプレイなどよりなる出力部１７、ハードディスクなどより構成される記録部１８、並びに通信部１９が接続されている。
【００４３】
通信部１９は、例えば、NIC（Network Interface Card）などから構成され、ネットワークを介しての他のブロックとの通信処理を制御する。通信部１９の詳細は後述する。
【００４４】
入出力インターフェース１５にはまた、必要に応じてドライブ２０が接続され、磁気ディスク、光ディスク、光磁気ディスク、または半導体メモリなどのリムーバブルメディア２１が適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記録部１８にインストールされる。
【００４５】
なお、パーソナルコンピュータ１のハードウェアの構成は、図１の例に限定されず、後述する図３のユーザモジュール１０１の機能的構成を少なくとも有していればよい。
【００４６】
図２は、通信部１９のハードウェアの構成の例を示すブロック図である。
【００４７】
通信部１９は、入出力インターフェース１５（図１）に接続され、CPU１１（図１）から供給されるデータを、ネットワークを介して、ネットワークに接続されている他の機器に送信したり、ネットワークに接続されている他の機器から送信されてくるデータを受信し、受信したデータをCPU１１に供給したりする。また、通信部１９は、例えば、TCP/IPなどのプロトコルスタックの処理（プロトコルスタックに関する所定の処理）を行う。
【００４８】
通信部１９は、CPU５１、ROM５２、RAM５３、記録部５５、インターフェース５６、および送受信処理部５７を含むようにして構成される。CPU５１、ROM５２、RAM５３、記録部５５、インターフェース５６、および送受信処理部５７のそれぞれは、バス５４を介して相互に接続されている。
【００４９】
図２の例の通信部１９において、CPU５１は、ROM５２に記憶されているプログラム、または記録部５５からRAM５３にロードされたプログラムにしたがって各種の処理を実行する。RAM５３にはまた、CPU５１が各種の処理を実行する上において必要なデータなども適宜記憶される。
【００５０】
送受信処理部５７は、CPU５１の制御の基に、例えば、ネットワークを介して、ネットワークに接続されている他の機器にデータを送信したり、ネットワークに接続されている他の機器から送信されてくるデータを受信したりするための所定の処理を行う。
【００５１】
なお、通信部１９のハードウェアの構成は、図２の例に限定されず、後述する図３のプロトコルスタックモジュール１０２の機能的構成例を少なくとも有していればよい。
【００５２】
図３は、本発明を適用したパーソナルコンピュータ１の一実施の形態の構成を示すブロック図である。
【００５３】
パーソナルコンピュータ１は、ネットワークを介して、ネットワークに接続されている他の機器と通信を行う機器であり、本発明の情報処理装置の一例である。
【００５４】
パーソナルコンピュータ１は、ユーザモジュール１０１およびプロトコルスタックモジュール１０２を含むようにして構成される。すなわち、例えば、パーソナルコンピュータ１のうち、ユーザモジュール１０１は、パーソナルコンピュータ１の機能的構成例を示し、プロトコルスタックモジュール１０２は、通信部１９の機能的構成例を示している。
【００５５】
なお、本実施の形態では、パーソナルコンピュータ１は、上述した図１のハードウェア構成を有しているので、ユーザモジュール１０１は、例えば、CPU１１（図１）が実行するプログラム（ソフトウェア）として構成されている。ただし、パーソナルコンピュータ１のハードウェア構成を図１とは異ならせることで、ユーザモジュール１０１は、ハードウェア単体として構成することもできるし、ソフトウェアとハードウェアとの組み合わせとして構成することもできる。
【００５６】
また、通信部１９は、上述した図２のハードウェア構成を有しているので、プロトコルスタックモジュール１０２は、例えば、CPU５１（図２）が実行するプログラム（ソフトウェア）として構成されている。ただし、通信部１９のハードウェア構成を図２とは異ならせることで、プロトコルスタックモジュール１０２は、ハードウェア単体として構成することもできるし、ソフトウェアとハードウェアとの組み合わせとして構成することもできる。
【００５７】
ユーザモジュール１０１は、例えば、記録部１８（図１）などに記録され、必要に応じて、RAM１３（図１）にロードされて、CPU１１（図１）により実行される。
【００５８】
なお、CPU１１は、ユーザモジュール１０１を実行する場合、ユーザモジュール１０１の全てをRAM１３にロードするのではなく、必要となる機能のみを選択してRAM１３にロードし、その選択された機能を実行することができる。
【００５９】
ユーザモジュール１０１は、アプリケーションプログラム１１１、GUIコマンドツール１１２、およびミドルウェア１１３を含むようにして構成される。
【００６０】
アプリケーションプログラム１１１は、例えば、ウェブブラウザ、メーラー（電子メールを送受信し、管理するためのアプリケーションプログラム）などの、パーソナルコンピュータ１において、ユーザにより操作されるアプリケーションプログラムである。アプリケーションプログラム１１１は、ユーザによる操作に応じて、その操作に対応する処理を実行するAPIを指定するコマンド（以下、APIコールと称する）をミドルウェア１１３に供給する。
【００６１】
GUIコマンドツール１１２は、例えば、ネットワークの運用監視や開発時のデバックなどに使用するアプリケーションプログラムである。GUIコマンドツール１１２は、ユーザによる操作に応じて、その操作に対応するAPIコールをミドルウェア１１３に供給する。
【００６２】
ミドルウェア１１３は、アプリケーションプログラム１１１およびGUIコマンドツール１１２のそれぞれに、例えば、通信に関する機能などの、特定の機能を提供するソフトウェアである。例えば、ミドルウェア１１３は、後述するプロトコルスタックモジュール１０２に関する機能を提供する。
【００６３】
ミドルウェア１１３は、API処理部１２１およびネットワーク管理部１２２を含むようにして構成される。
【００６４】
API処理部１２１は、アプリケーションプログラム１１１またはGUIコマンドツール１１２から供給されてくる、APIコールに応じた所定の処理を実行する。API処理部１２１は、所定の処理の処理結果をプロトコルスタックモジュール１０２に供給する。
【００６５】
すなわち、API処理部１２１は、例えば、OSのカーネルなどにおいて、不可分に結び付いていたAPIとプロトコルスタックとが分離されているので、プロトコルスタックの処理を行わないことになる（プロトコルスタックの処理は、後述するプロトコルスタック処理部１４２が行う）。
【００６６】
換言すれば、通信機能（通信処理）を階層構造に分割したモデルで考えた場合、API処理部１２１は、例えば、TCP/IPなどのプロトコルスタックの上位の層における処理を行っているとも言える。
【００６７】
ここで、詳細は後述するが、API処理部１２１による所定の処理結果としては、図中のユーザモジュール１０１とプロトコルスタックモジュール１０２との間の２本の線（後述するコマンドバスとデータバス）により示すように、例えば、コマンド（以下、プロトコルスタックコマンドとも称する）やデータ（例えば、AV（Audio Visual）データなど）などが、プロトコルスタックモジュール１０２に供給される。
【００６８】
API処理部１２１は、APIディスパッチャ１３１、ソケットプロキシ１３２、プロトコルスタックAPI１３３、およびデバイスドライバ１３４を含むようにして構成される。
【００６９】
なお、図３の例では、プロトコルスタックAPI１３３を拡張用のAPIの一例として説明するが、他の拡張用のAPIを追加してもよい。また、API処理部１２１は、デバイスドライバ１３４を含まないようにして、APIディスパッチャ１３１、ソケットプロキシ１３２、およびプロトコルスタックAPI１３３から構成するようにしてもよい。この場合、デバイスドライバ１３４は、ミドルウェア１１３に含まれることになる。
【００７０】
APIディスパッチャ１３１は、アプリケーションプログラム１１１またはGUIコマンドツール１１２から供給されるAPIコールを基に、ソケットプロキシ１３２またはプロトコルスタックAPI１３３のいずれか一方にAPIコールを供給することにより、所定の処理を実行させる。
【００７１】
ソケットプロキシ１３２は、標準的なAPIであり、例えば、UNIX（登録商標）系のBSDソケットやWindows（登録商標）系のWinsockなどのソケットAPIにより、データを送受信するための所定の機能を提供する。ソケットプロキシ１３２は、APIディスパッチャ１３１から供給されるAPIコールに応じた所定の処理を行い、所定の処理を行うことにより得られたデータをデバイスドライバ１３４に供給する。また、ソケットプロキシ１３２は、APIディスパッチャ１３１から供給されるAPIコールに応じて、プロトコルスタックモジュール１０２に指示するためのプロトコルスタックコマンドを生成し、生成したプロトコルスタックコマンドをデバイスドライバ１３４に供給する。
【００７２】
プロトコルスタックAPI１３３は、プロトコルスタックモジュール１０２専用の拡張APIであり、例えば、SNMP（Simple Network Management Protocol）インターフェースなどのプロトコルスタックモジュール１０２に関する所定の機能を提供する。プロトコルスタックAPI１３３は、APIディスパッチャ１３１から供給されるAPIコールに応じた所定の処理を行い、所定の処理を行うことにより得られたデータをデバイスドライバ１３４に供給する。また、プロトコルスタックAPI１３３は、APIディスパッチャ１３１から供給されるAPIコールに応じて、プロトコルスタックモジュール１０２に指示するためのプロトコルスタックコマンドを生成し、生成したプロトコルスタックコマンドをデバイスドライバ１３４に供給する。
【００７３】
すなわち、ソケットプロキシ１３２およびプロトコルスタックAPI１３３のそれぞれにおいては、例えば、TCP/IPなどのプロトコルスタックの処理を行っていないことになる。
【００７４】
したがって、API処理部１２１で行われる処理は、プロトコルスタックに依存しないので、プロトコルスタックを意識することなく、拡張用のAPI（例えば、プロトコルスタックAPI１３３以外のAPI）を自由に追加することができる。換言すれば、API処理部１２１は、プロトコルスタックに対して、多様なAPIを提供できるとも言える。
【００７５】
デバイスドライバ１３４は、ソケットプロキシ１３２またはプロトコルスタックAPI１３３のいずれか一方から供給される、AVデータなどのデータをプロトコルスタックモジュール１０２に供給する。また、デバイスドライバ１３４は、ソケットプロキシ１３２またはプロトコルスタックAPI１３３のいずれか一方から供給されるプロトコルスタックコマンドをプロトコルスタックモジュール１０２に供給する。
【００７６】
なお、デバイスドライバ１３４（ユーザモジュール１０１）とプロトコルスタックインターフェース１４１（プロトコルスタックモジュール１０２）との間のインターフェースの詳細は、図４を参照して後述する。
【００７７】
ネットワーク管理部１２２は、API処理部１２１を介して、プロトコルスタックモジュール１０２の状態を監視し、その状態に関する情報を蓄積する。例えば、ネットワーク管理部１２２は、プロトコルスタックモジュール１０２の状態を監視することにより、ログやエラーに関する情報、すなわち、例えば、ネットワークの負荷、プロトコルスタックモジュール１０２の負荷、またはプロトコルスタックモジュール１０２が新規で追加されたかなどの情報を蓄積する。
【００７８】
ネットワーク管理部１２２は、GUIコマンドツール１１２（またはアプリケーションプログラム１１１）から供給されるコマンドが、プロトコルスタックモジュール１０２のモニタや管理に関するコマンドである場合、自分が蓄積しているプロトコルスタックモジュール１０２の状態に関する情報をGUIコマンドツール１１２（またはアプリケーションプログラム１１１）に供給する。また、このとき、ネットワーク管理部１２２は、自分が蓄積している情報を分析したり、それらの情報を加工してから、GUIコマンドツール１１２（またはアプリケーションプログラム１１１）に供給するようにしてもよい。
【００７９】
このとき、GUIコマンドツール１１２（またはアプリケーションプログラム１１１）は、API処理部１２１を介して、ネットワーク管理部１２２から供給される情報を、出力部１７の画面などに表示させる。その結果、ユーザは、プロトコルスタックモジュール１０２やネットワークの状態を知ることができる。
【００８０】
プロトコルスタックモジュール１０２は、例えば、ROM５２（図２）または記録部５５（図２）などに記録され、必要に応じて、RAM５３（図２）にロードされて、CPU５１（図２）により実行される。
【００８１】
プロトコルスタックモジュール１０２は、プロトコルスタックインターフェース１４１およびプロトコルスタック処理部１４２を含むように構成される。
【００８２】
プロトコルスタック処理部１４２は、プロトコルスタックインターフェース１４１を介して、デバイスドライバ１３４（ユーザモジュール１０１）から供給される、AVデータなどのデータまたはプロトコルスタックコマンドを基に、プロトコルスタックの処理を行う。プロトコルスタック処理部１４２は、所定の処理が施されたデータ（パケット）を、ネットワークを介して、ネットワークに接続された他の機器に送信する。
【００８３】
また、プロトコルスタック処理部１４２は、プロトコルスタックインターフェース１４１およびデバイスドライバ１３４を介して、API処理部１２１により提供される機能を適宜取得して、プロトコルスタックの処理を行う。
【００８４】
換言すれば、通信機能（通信処理）を階層構造に分割したモデルで考えた場合、プロトコルスタック処理部１４２は、API処理部１２１により行われる処理の下位の層、すなわち、例えば、TCP/IPなどのプロトコルスタックの処理を行っているとも言える。
【００８５】
ここで、プロトコルスタックの処理では、例えば、チェックサム（Check Sum）、IPフラグメント（IP Fragment）、またはIPデフラグメント（IP Defragment）などの処理や、セッションを張る処理、パケットをロスしたときのパケットを再送する処理、またはルーティングの処理などが行われる。
【００８６】
なお、プロトコルスタック処理部１４２における、チェックサム、IPフラグメント、またはIPデフラグメントの処理のそれぞれは、例えば、ハードウェアにより実装され、セッションを張る処理、パケットをロスしたときのパケットを再送する処理、またはルーティングの処理のそれぞれは、例えば、CPU５１（図２）が実行するプログラム（ソフトウェア）により実装される。すなわち、上述したように、プロトコルスタックモジュール１０２は、例えば、CPU５１（図２）が実行するプログラム（ソフトウェア）として構成されているが、通信部１９のハードウェア構成を図２とは異ならせることで、プロトコルスタックモジュール１０２は、ハードウェア単体として構成することもできるし、ソフトウェアとハードウェアとの組み合わせとして構成することもできる。
【００８７】
すなわち、本実施の形態では、これらプロトコルスタックの処理を、CPU１１（図１）に負担がかからないようにするために、CPU１１が実行するのではなく、CPU５１（図２）が実行している。
【００８８】
以上のように、パーソナルコンピュータ１においては、APIとプロトコルスタックとが分離しているので、ユーザモジュール１０１が、プロトコルスタックの処理を行わずに、プロトコルスタックモジュール１０２が、プロトコルスタックの処理を行うことになる。
【００８９】
次に、図４を参照して、ユーザモジュール１０１とプロトコルスタックモジュール１０２との間のインターフェースについて説明する。
【００９０】
図４の例に示されるように、プロトコルスタックモジュール１０２は、コマンド用とデータ用の２つのインターフェースを持っている。プロトコルスタックモジュール１０２は、これらの２つのインターフェースにより、コマンドバスおよびデータバスを介して、ユーザモジュール１０１と接続されている。すなわち、ユーザモジュール１０１とプロトコルスタックモジュール１０２とは、図中左側のコマンド用のコマンドバスと、図中右側のデータ用のデータバスによりそれぞれ接続されている。
【００９１】
ここで、コマンドバスであるが、例えば、32ビットのSRAM/SSRAM（Static Random Access Memory/Synchronous SRAM）に準拠しており、ユーザモジュール１０１とプロトコルスタックモジュール１０２との間のコマンド（プロトコルスタックコマンド）のやり取りや、高速転送を必要としないデータを転送する場合に使用される。
【００９２】
また、データバスは、例えば、32/64ビット選択式のDMA（Direct Memory Access）からなり、ユーザモジュール１０１とプロトコルスタックモジュール１０２との間で、例えば、AVデータなどの大容量のデータを高速転送する。
【００９３】
なお、ユーザモジュール１０１とプロトコルスタックモジュール１０２との間においては、データバスを使用せずに、コマンドバスのみを使用して、コマンドまたはデータを転送することも可能である。
【００９４】
ところで、上述したように、パーソナルコンピュータ１においては、ユーザモジュール１０１が、プロトコルスタックの処理を行わずに、プロトコルスタックモジュール１０２が、プロトコルスタックの処理を行うが、以下、その処理の一例として、図５のフローチャートを参照して、図３のパーソナルコンピュータ１による、データ送信の処理について説明する。なお、この処理は、例えば、ユーザによりユーザインターフェースを介して、データを送信するための所定の指令がされたときに開始される。
【００９５】
ステップＳ１１において、アプリケーションプログラム１１１は、ユーザの操作に応じて、コマンドを発行し、発行したコマンドをAPI処理部１２１に供給する。
【００９６】
例えば、ステップＳ１１において、アプリケーションプログラム１１１は、ユーザの操作に応じて、UNIX（登録商標）系のOS上で動作している場合、BSDソケットコマンドを発行し（Windows（登録商標）系のOS上で動作している場合、Winsockコマンドを発行し）、発行したBSDソケットコマンド（Winsockコマンド）をAPI処理部１２１に供給する。
【００９７】
ステップＳ１２において、API処理部１２１は、アプリケーションプログラム１１１から供給されるAPIコールに応じて、所定の処理を行い、所定の処理を行うことにより得られたデータまたはコマンド（プロトコルスタックコマンド）を、プロトコルスタックモジュール１０２（プロトコルスタック処理部１４２）に供給する。
【００９８】
例えば、ステップＳ１２において、API処理部１２１は、UNIX（登録商標）系のOS上で動作している場合、アプリケーションプログラム１１１から供給されるBSDソケットコマンドに応じた所定の処理を行い、所定の処理を行うことにより得られたAVデータなどのデータを、データバスを介して、プロトコルスタックモジュール１０２（プロトコルスタック処理部１４２）に供給する。また、API処理部１２１は、アプリケーションプログラム１１１から供給されるBSDソケットコマンドに応じたプロトコルスタックコマンドを生成し、生成したプロトコルスタックコマンドを、コマンドバスを介して、プロトコルスタックモジュール１０２（プロトコルスタック処理部１４２）に供給する。
【００９９】
なお、このとき、API処理部１２１は、APIとプロトコルスタックとが分離しているので、例えば、TCP/IPなどのプロトコルスタックの処理を行わないことになる。
【０１００】
ステップＳ１３において、プロトコルスタック処理部１４２は、データバスを介して、API処理部１２１から供給されるデータまたはプロトコルスタックコマンドを基に、プロトコルスタックの処理を行う。プロトコルスタック処理部１４２は、所定の処理が施されたデータ（パケット）を、ネットワークを介して、ネットワークに接続された他の機器に送信して、データ送信の処理は終了する。
【０１０１】
例えば、ステップＳ１３において、プロトコルスタック処理部１４２は、コマンドバスを介して、API処理部１２１から供給されるプロトコルスタックコマンドを基に、データバスを介して、API処理部１２１から供給されるAVデータに対して、例えば、チェックサム（Check Sum）、IPフラグメント（IP Fragment）、またはIPデフラグメント（IP Defragment）などの処理や、セッションを張る処理、パケットをロスしたときのパケットの再送処理、またはルーティングの処理などを行って、それらの処理が施されたデータ（パケット）を、ネットワークを介して、ネットワークに接続された他の機器に送信する。
【０１０２】
すなわち、プロトコルスタック処理部１４２は、APIとプロトコルスタックとが分離しているので、プロトコルスタックの処理のみを行うことになる。
【０１０３】
以上のように、パーソナルコンピュータ１においては、ユーザモジュール１０１（API処理部１２１）が、プロトコルスタックの処理を行わずに、プロトコルスタックモジュール１０２（プロトコルスタック処理部１４２）が、プロトコルスタックの処理を行う。
【０１０４】
このように、本発明においては、OSのカーネルなどにおいて、不可分に結び付いていたAPIとプロトコルスタックとを分離させることにより、API処理部１２１の代わりに、プロトコルスタック処理部１４２がプロトコルスタックの処理を行う。その結果、APIとプロトコルスタックとが分離されているので、例えば、TCP/IPやUDP/IPなどのプロトコルスタックに対して、多様なAPIを提供することができる。
【０１０５】
ところで、パーソナルコンピュータ１においては、プロトコルスタックモジュール１０２またはミドルウェア１１３を複数設けるようにすることで、本番系に障害が発生した場合に待機系に切り替えて、障害を回避することができる（フォールトトレラント）。
【０１０６】
ここで、ミドルウェア１１３は、例えば、機器（パーソナルコンピュータ１）上に１つまたは２つのインスタンスを生成することができる。したがって、パーソナルコンピュータ１においては、１つのミドルウェア１１３のインスタンスに２つのプロトコルスタックモジュール１０２が接続される場合と、ミドルウェア１１３のインスタンスとプロトコルスタックモジュール１０２とが１対１となるように接続される場合とがある。
【０１０７】
まず、図６を参照して、パーソナルコンピュータ１において、１つのミドルウェア１１３のインスタンスに２つのプロトコルスタックモジュール１０２が接続される場合について説明する。
【０１０８】
図６のパーソナルコンピュータ１において、ユーザモジュール１０１は、アプリケーションプログラム１１１−１乃至アプリケーションプログラム１１１−３およびミドルウェア１１３を含むようにして構成される。
【０１０９】
すなわち、図６で示される例においては、アプリケーションプログラム１１１−１乃至アプリケーションプログラム１１１−３が起動しており、ミドルウェア１１３を介して、本番系のプロトコルスタックモジュール１０２−１により、ネットワークを介して、ネットワークに接続された他の機器（リモート）と通信を行っている。また、このとき、プロトコルスタックモジュール１０２−２は、処理を行わずに待機系となっている。
【０１１０】
ここで、パーソナルコンピュータ１では、本番系のプロトコルスタックモジュール１０２−１に障害が発生した場合、既存のセッションが切断されるので、ミドルウェア１１３は、待機系のプロトコルスタックモジュール１０２−２を初期化して、リモートと再接続をする。ただし、障害が発生した本番系のプロトコルスタックモジュール１０２−１の中にバッファされていたパケットは破棄されてしまうので、ミドルウェア１１３は、アプリケーションプログラム１１１−１乃至アプリケーションプログラム１１１−３のそれぞれに、それぞれがどこまでパケットを送信し終えたかを通知する。アプリケーションプログラム１１１−１乃至アプリケーションプログラム１１１−３のそれぞれは、ミドルウェア１１３からの通知にしたがって、あらためて破棄されたパケットを再送する。
【０１１１】
次に、図７を参照して、パーソナルコンピュータ１において、ミドルウェア１１３のインスタンスとプロトコルスタックモジュール１０２とが１対１となるように接続される場合について説明する。
【０１１２】
図７のパーソナルコンピュータ１において、ユーザモジュール１０１は、アプリケーションプログラム１１１−１乃至アプリケーションプログラム１１１−３、ミドルウェア１１３−１、およびミドルウェア１１３−２を含むようにして構成される。
【０１１３】
すなわち、図７で示される例においては、アプリケーションプログラム１１１−１およびアプリケーションプログラム１１１−２が起動しており、本番系のミドルウェア１１３−１を介して、本番系のプロトコルスタックモジュール１０２−１により、ネットワークを介して、リモートと通信を行っている。また、ミドルウェア１１３−２およびプロトコルスタックモジュール１０２−２は、待機系となり、アプリケーションプログラム１１１−３も起動していないことになる。
【０１１４】
ここで、パーソナルコンピュータ１では、本番系のプロトコルスタックモジュール１０２−１に障害が発生した場合、既存のセッションは切断されて送信途中のパケットは破棄される。したがって、パケットを送信していたアプリケーションプログラム１１１−２は、待機系のミドルウェア１１３−２およびプロトコルスタックモジュール１０２−２のそれぞれを用いて、あらためてリモートとセッションを確立し、パケットを再送する。
【０１１５】
なお、本番系のミドルウェア１１３−１に障害が発生した場合、本番系のプロトコルスタックモジュール１０２−１に障害が発生した場合と同様に、既存のセッションは切断されて送信途中のパケットは破棄され、パケットを送信していたアプリケーションプログラム１１１−２は、待機系のミドルウェア１１３−２およびプロトコルスタックモジュール１０２−２のそれぞれを用いて、あらためてリモートとセッションを確立し、パケットを再送する。
【０１１６】
以上のように、パーソナルコンピュータ１においては、２つのプロトコルスタックモジュール１０２−１およびプロトコルスタックモジュール１０２−２のそれぞれを設けることにより、本番系のプロトコルスタックモジュール１０２−１に障害が発生した場合、待機系のプロトコルスタックモジュール１０２−２に切り替えて、プロトコルスタックの処理を続けることができる。
【０１１７】
このように、OSのカーネルなどにおいて、不可分に結び付いていたAPIとプロトコルスタックとを分離させることにより、プロトコルスタックの処理を分離することができるので、例えば、プロトコルスタックの処理を行う、本番系のプロトコルスタックモジュール１０２−１に障害が起こった場合でも、待機系のプロトコルスタックモジュール１０２−２に切り替えることで、その影響を最小限に抑えることが可能となる。また、障害発生時には、例えば、ミドルウェア１１３とプロトコルスタックモジュール１０２とを別個に検証し、どちらに原因があるかなどが明確となり、より迅速に、障害の原因を突き止めることができる。
【０１１８】
なお、パーソナルコンピュータ１のリソースに余裕のある場合、ミドルウェア１１３レベルでの耐故障性を上げたいとき、１つのミドルウェア１１３から構成される図６よりも、２つのミドルウェア１１３から構成される図７の構成とするほうが望ましい。
【０１１９】
以上のようにして、本発明によれば、不可分に結び付いていたAPIとプロトコルスタックとを分離させることにより、プロトコルスタックの処理を分離することができるので、特定のプロトコルスタックに対して、多様なAPIを提供することができる。その結果、例えば、アプリケーションプログラムを開発するユーザ（開発者）に対して、多様なネットワークプログラミングに関するAPIを提供することができる。
【０１２０】
また、本発明によれば、ホスト側のCPU１１が行っていた、TCP/IPなどのプロトコルスタックの処理を、プロトコルスタックの処理を専用で実行するCPU５１が行うようにしたので、ホスト側のCPUリソースをアプリケーションプログラムの処理だけに割り当てることができるようになり、ホスト側のCPU１１の負荷を減らすとともに、TCP/IPの処理を高速化させることができる。
【０１２１】
さらに、本発明によれば、例えば、ユーザによるアプリケーションプログラム１１１（GUIコマンドツール１１２）の操作に応じて、ソケットプロキシ１３２またはプロトコルソケットAPI１３３など、各機能ごとに必要となるものだけ選択してロードすることにより、メモリを有効に利用することができる。その結果、リソースが十分でない機器であっても、メモリを有効に利用可能となるので、例えば、大容量のAVデータの送受信を行うことができる。
【０１２２】
また、本発明によれば、不可分に結び付いていたAPIとプロトコルスタックとが分離されているので、ユーザ（開発者）は、APIとプロトコルスタックとの間のインターフェースを自由に定義することができる。
【０１２３】
なお、図１の通信部１９は、上述した例ではパーソナルコンピュータ１の一構成要素とされたが、図２の構成例に示すように、１つの装置として把握することも可能である。すなわち、例えば、図１の通信部１９を、パーソナルコンピュータ１から着脱自在な装置として構成することも可能である。この場合、通信部１９は、パーソナルコンピュータ１のみならず、例えば、ビデオカメラ、AVサーバ、またはスイッチャなどの様々な機器に装着されて、ネットワーク通信を行うための上述した各種処理を実行することができる。
【０１２４】
また、上述した例においては、プロトコルスタックとして、TCP/IPを一例にして説明したが、本発明においてはそれに限らず、例えば、UDP/IPなどであってもよい。
【０１２５】
さらにまた、本発明においては、例えば、パーソナルコンピュータ１と通信用機器とを、シリアル接続やUSB（Universal Serial Bus）接続などにより接続させて、接続された通信用機器により、ネットワークを介して、ネットワークに接続されている他の機器と通信をさせるようにしてもよい。すなわち、この場合、パーソナルコンピュータ１は、ユーザモジュール１０１に関する処理を行い、通信用機器は、シリアルケーブルやUSBケーブルなどを介して、パーソナルコンピュータ１から供給されてくるコマンドやデータを基に、プロトコルスタックモジュール１０２に関する所定の処理を行って、データ（パケット）を他の機器に送信する。
【０１２６】
上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
【０１２７】
この記録媒体は、コンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク（フレキシブルディスクを含む）、光ディスク（CD-ROM(Compact Disk-Read Only Memory)，DVD（Digital Versatile Disk））を含む）、光磁気ディスク（MD（Mini-Disk）（登録商標）を含む）、若しくは半導体メモリなどよりなる図１のリムーバブルメディア２１により構成されるだけでなく、コンピュータに予め組み込まれた状態でユーザに提供される、プログラムが記録されている図１のROM１２や記録部１８などで構成される。
【０１２８】
また、上述した一連の処理を実行させるプログラムは、必要に応じてルータ、モデムなどのインターフェースを介して、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の通信媒体を介してコンピュータにインストールされるようにしてもよい。
【０１２９】
なお、本明細書において、記録媒体に格納されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０１３０】
また、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
【図面の簡単な説明】
【０１３１】
【図１】パーソナルコンピュータのハードウェアの構成の例を示すブロック図である。
【図２】通信部のハードウェアの構成の例を示すブロック図である。
【図３】本発明を適用したパーソナルコンピュータの一実施の形態の構成を示すブロック図である。
【図４】ユーザモジュールとプロトコルスタックモジュールとの間のインターフェースについて説明する図である。
【図５】パーソナルコンピュータによる、データ送信の処理について説明するフローチャートである。
【図６】パーソナルコンピュータにおいて、１つのミドルウェアのインスタンスに２つのプロトコルスタックモジュールが接続される場合について説明する図である。
【図７】パーソナルコンピュータにおいて、ミドルウェアのインスタンスとプロトコルスタックモジュールとが１対１となるように接続される場合について説明する図である。
【符号の説明】
【０１３２】
１  パーソナルコンピュータ，  １１  CPU，  １２  ROM，  １３  RAM，  １８  記録部，  １９  通信部，  ２０  ドライブ，  ２１  リムーバブルメディア，  ５１  CPU，  ５２  ROM，  ５３  RAM，  ５５  記録部，  １０１  ユーザモジュール，  １０２  プロトコルスタックモジュール，  １１１  アプリケーションプログラム，  １１２  GUIコマンドツール，  １１３  ミドルウェア，  １２１  API処理部，  １２２  ネットワーク管理部，  １３１  APIディスパッチャ，  １３２  ソケットプロキシ，  １３３  プロトコルスタックAPI，  １３４  デバイスドライバ，  １４１  プロトコルスタックインターフェース，  １４２  プロトコルスタック処理部
【図１】
0004506676.tif 000002
【図２】
0004506676.tif 000003
【図３】
0004506676.tif 000004
【図４】
0004506676.tif 000005
【図５】
0004506676.tif 000006
【図６】
0004506676.tif 000007
【図７】
0004506676.tif 000008