(57)【要約】      （修正有）【課題】拡張バスを介して接続した複数のプロセッサの各アプリ間におけるシステムコールの受け渡しを可能にし、負荷を他のプロセッサに分散することができるマルチプロセッサを提供する。【解決手段】独自ドライバは、アプリからのシステムコールに対して、仮ディスクリプタ番号を生成して当該アプリに返信する仮ディスクリプタ番号発行部５と、アプリからのシステムコールに指定されるＩＰアドレス及びポート番号、並びに判別条件に基づき、当該システムコールの宛先となるカーネルを特定し、システムコールを当該カーネルに送信するシステムコール再発行部６と、アプリからのシステムコールに指定される仮ディスクリプタ番号に対応する宛先フラグを、管理テーブル格納部７から抽出し、当該抽出した宛先フラグに基づき、当該システムコールの宛先となるカーネルに当該システムコールを送信するディスクリプタ番号変換部８と、を備えている。【選択図】図２
2010237977.tif 000002
【特許請求の範囲】
【請求項１】
サーバ型のアプリケーション又はクライアント型のアプリケーションを動作させる一のプロセッサと、当該アプリケーションとのソケット通信を行うクライアント型のアプリケーション又はサーバ型のアプリケーションを動作させる他のプロセッサと、を備え、当該各プロセッサのカーネルにより、ソケット同士を接続して通信経路を確立するマルチプロセッサにおいて、
前記カーネルにおけるドライバが、
bind又はconnectシステムコールの送信元である前記アプリケーションにおけるポート番号、及び当該アプリケーションを動作させる前記プロセッサにおけるＩＰアドレスに基づき、前記一のプロセッサ又は他のプロセッサにおける、当該システムコールの宛先となるカーネルを判別する条件を格納する判別条件格納部と、
前記アプリケーションからのsocketシステムコールを保持するシステムコール保持部と、
前記アプリケーションからのsocketシステムコールに対して、前記ソケットの識別子であるディスクリプタ番号に相当する仮ディスクリプタ番号を生成し、当該仮ディスクリプタ番号を当該アプリケーションに返信する仮ディスクリプタ番号発行部と、
前記アプリケーションからのbind又はconnectシステムコールに指定されるＩＰアドレス及びポート番号、並びに前記判別条件格納部に格納される判別条件に基づき、当該システムコールの宛先となるカーネルを特定し、前記システムコール保持部に保持されるシステムコールを当該カーネルに送信するシステムコール再発行部と、
前記socketシステムコールを受信したカーネルから返信されるディスクリプタ番号、当該socketシステムコールに対して生成された前記仮ディスクリプタ番号、及び当該socketシステムコールの宛先として特定されたカーネルを識別する宛先フラグを対応付けて格納する管理テーブル格納部と、
前記アプリケーションからのlisten、accept、send、recv、shutdown又はcloseシステムコールに指定される前記仮ディスクリプタ番号に対応する宛先フラグを、前記管理テーブル格納部から抽出し、当該抽出した宛先フラグに基づき、当該システムコールの宛先となるカーネルに当該システムコールを送信するディスクリプタ番号変換部と、
を備えていることを特徴とするマルチプロセッサ。
【請求項２】
前記請求項１に記載のマルチプロセッサにおいて、
前記システムコール保持部が、前記アプリケーションからのbind又はconnectシステムコール、及び当該bind又はconnectシステムコールの前に発行されるシステムコールを保持し、
前記システムコール再発行部が、前記システムコール保持部に保持されるsocketシステムコール以外のシステムコールを、前記ディスクリプタ番号を指定して、当該システムコールに対して特定したカーネルに送信することを特徴とするマルチプロセッサ。
【請求項３】
前記請求項１又は２に記載のマルチプロセッサにおいて、
前記一のプロセッサをネットワーク機器に搭載し、前記他のプロセッサを拡張カードに搭載して、拡張バスを介して、当該ネットワーク機器及び拡張カードを接続していることを特徴とするマルチプロセッサ。
【請求項４】
サーバ型のアプリケーション又はクライアント型のアプリケーションを動作させる一のプロセッサと、当該アプリケーションとのソケット通信を行うクライアント型のアプリケーション又はサーバ型のアプリケーションを動作させる他のプロセッサと、を備え、ソケット同士を接続して通信経路を確立するマルチプロセッサにおける、当該プロセッサを機能させる制御プログラムであって、
前記プロセッサを、bind又はconnectシステムコールの送信元である前記アプリケーションにおけるポート番号、及び当該アプリケーションを動作させる前記プロセッサにおけるＩＰアドレスに基づき、前記一のプロセッサ又は他のプロセッサにおける、当該システムコールの宛先となるカーネルを判別する条件を格納する判別条件格納手段と、前記アプリケーションからのsocketシステムコールを保持するシステムコール保持手段と、前記アプリケーションからのsocketシステムコールに対して、前記ソケットの識別子であるディスクリプタ番号に相当する仮ディスクリプタ番号を生成し、当該仮ディスクリプタ番号を当該アプリケーションに返信する仮ディスクリプタ番号発行手段と、前記アプリケーションからのbind又はconnectシステムコールに指定されるＩＰアドレス及びポート番号、並びに前記判別条件格納手段に格納される判別条件に基づき、当該システムコールの宛先となるカーネルを特定し、前記システムコール保持手段に保持されるシステムコールを当該カーネルに送信するシステムコール再発行手段と、前記socketシステムコールを受信したカーネルから返信されるソケットのディスクリプタ番号、当該socketシステムコールに対して生成された前記仮ディスクリプタ番号、及び当該socketシステムコールの宛先として特定されたカーネルを識別する宛先フラグを対応付けて格納する管理テーブル格納手段と、前記アプリケーションからのlisten、accept、send、recv、shutdown又はcloseシステムコールに指定される前記仮ディスクリプタ番号に対応する宛先フラグを、前記管理テーブル格納手段から抽出し、当該抽出した宛先フラグに基づき、当該システムコールの宛先となるカーネルに当該システムコールを送信するディスクリプタ番号変換手段として機能させる制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサ環境を有するネットワーク（Network：以下、ＮＷと称す）機器における、一のプロセッサによる処理の負荷分散を目的としたプロセッサ間通信を可能にするマルチプロセッサ及び制御プログラムに関する。
【背景技術】
【０００２】
近年、サーバ等のＮＷ機器における、中継処理、セキュリティ処理及び認証処理の複雑化に伴い、ＮＷ機器に搭載されるプロセッサの負荷が増大しており、マルチプロセッサ化による負荷分散技術が求められている。
マルチプロセッサ環境において負荷分散を行う仕組みとしては、例えば、図８及び図９に示すような３つの仕組みが一般的である。
【０００３】
第１に、図８（ａ）に示すように、ネットワーク経由で、汎用プロトコルを実装した複数のＮＷ機器（サーバＡ，サーバＢ）を接続して、各ＮＷ機器に搭載されるプロセッサ（プロセッサＡ，プロセッサＢ）間のデータの送受信を行う仕組みである。この場合には、ＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）等の汎用プロトコルを利用して、複数のネットワーク機器を相互にネットワーク接続し、複数のプロセッサで処理を分担することにより、高速化と負荷分散を行うものである。
【０００４】
第２に、図８（ｂ）に示すように、ネットワーク経由で、独自プロトコルを実装した複数のＮＷ機器（サーバＡ，サーバＢ）を接続して、各ＮＷ機器に搭載されるプロセッサ（プロセッサＡ，プロセッサＢ）間のデータの送受信を行う仕組みである。この場合には、独自のプロトコルを利用して、複数のＮＷ機器を相互にネットワーク接続し、複数のプロセッサで処理を分担することにより、高速化と負荷分散を行うものである。
【０００５】
第３に、図８（ｃ）に示すように、一のＮＷ機器（サーバＡ）において、一のプロセッサ（プロセッサＡ）に対して、ＰＣＩ（Peripheral Component Interconnect）バス等を介して、他のプロセッサ（プロセッサＢ）を搭載したアクセラレートカード等を装着する。この場合には、独自のドライバ及びプロトコルを各プロセッサに実装して、複数のプロセッサで処理を分担することにより、高速化と負荷分散を行うものである。
【０００６】
しかしながら、前述した仕組みでは、ネットワーク経由であることや一般的なプロトコルを利用することによる処理時間の遅延が生じる問題点や、独自プロトコルの開発や独自プロトコルに対応するためのアプリケーションの再開発による開発コストが増大する問題点がある。
これに対し、図９（ａ）に示すように、ネットワークを経由せず、プロセッサ間通信の汎用のインタフェースであるソケット通信を利用する仕組みが考えられている。
【０００７】
なお、一のプロセッサ（プロセッサＡ）上で動作するサーバ側のアプリケーション及びクライアント側のアプリケーション間におけるソケット通信は、図９（ｂ）に示すような通信に用いられるのが一般的である。すなわち、ソケット通信は、サーバアプリＡ及びクライアントアプリＢ間のようなネットワークを経由した他のサーバ又はホスト等を介した通信や、クライアントアプリＣ及びサーバアプリＤ間のような同一のサーバ又はホスト上での通信に用いられる。
【０００８】
また、従来のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システムは、マルチプロセッサ上でシングルプロセッサ向けＯＳ及び既存のアプリケーションを動作させる。そして、アプリケーションに対してマルチプロセッサによる並列処理を実現するシングルプロセッサ向けＯＳによる並列処理システム上で、各プロセッサに、プロセッサ間にまたがるタスクどうしのデータ転送を代理で行う通信代理手段を備える（例えば、特許文献１参照）。なお、この従来の並列処理システムは、自プロセッサ内のみで通信可能なプロセス間通信方式として、ＵＮＩＸ（登録商標）（Ｒ）ドメインソケットを主に記述しており、ＴＣＰ／ＩＰのＩＮＥＴドメインについては、一部に記述があるのみで、詳細に開示したものではない。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００５−２６７１１８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ここで、ソケット通信においては、プロセッサ上で動作するアプリケーションから発行されるソケット関連のシステムコールが、当該プロセッサのカーネルで処理されることが前提であり、他のプロセッサのカーネルで処理させることができない。このため、例えば、図９（ｂ）に示すように、一のプロセッサＡ上で動作するクライアントアプリＥと、プロセッサＡを搭載したＮＷ機器の外部にある他のプロセッサＢ上で動作するサーバアプリＧとの間のソケット通信ができないという課題がある。同様に、一のプロセッサＡ上で動作するサーバアプリＦと、プロセッサＡを搭載したＮＷ機器の外部にある他のプロセッサＢ上で動作するサーバアプリＨとの間のソケット通信ができないという課題がある。
【課題を解決するための手段】
【００１１】
マルチプロセッサは、カーネルにおけるドライバが、ポート番号及びＩＰアドレスに基づき、一のプロセッサ又は他のプロセッサにおける、当該システムコールの宛先となるカーネルを判別する条件を格納する判別条件格納部を備える。また、ドライバは、アプリケーションからのsocketシステムコールを保持するシステムコール保持部を備える。また、ドライバは、アプリケーションからのsocketシステムコールに対して、ソケットの識別子であるディスクリプタ番号に相当する仮ディスクリプタ番号を生成し、当該仮ディスクリプタ番号を当該アプリケーションに返信する仮ディスクリプタ番号発行部を備えている。また、ドライバは、アプリケーションからのシステムコールに指定されるＩＰアドレス及びポート番号、並びに判別条件格納部に格納される判別条件に基づき、当該システムコールの宛先となるカーネルを特定し、システムコール保持部に保持されるシステムコールを当該カーネルに送信するシステムコール再発行部を備えている。また、ドライバは、socketシステムコールを受信したカーネルから返信されるディスクリプタ番号、仮ディスクリプタ番号、及び当該socketシステムコールの宛先として特定されたカーネルを識別する宛先フラグを対応付けて格納する管理テーブル格納部を備えている。また、ドライバは、アプリケーションからのシステムコールに指定される仮ディスクリプタ番号に対応する宛先フラグを、管理テーブル格納部から抽出し、当該抽出した宛先フラグに基づき、当該システムコールの宛先となるカーネルに当該システムコールを送信するディスクリプタ番号変換部を備えている。
【発明の効果】
【００１２】
開示のマルチプロセッサは、拡張バスを介して接続した複数のプロセッサの各アプリ間におけるシステムコールの受け渡しを可能にし、一のプロセッサに対する負荷を他のプロセッサに分散することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】本実施形態に係るマルチプロセッサを搭載したＮＷ機器の一例を示す構成図である。
【図２】図１に示すプロセッサのカーネルにおける独自ドライバの概略構成を示す機能ブロック図であり、（ａ）はサーバアプリから発行されるシステムコールに対するデータの流れを示す機能ブロック図であり、（ｂ）はクライアントアプリから発行されるシステムコールに対するデータの流れを示す機能ブロック図である。
【図３】サーバアプリから発行されるシステムコールに対する独自ドライバの処理動作を説明するためのシーケンス図である。
【図４】クライアントアプリから発行されるシステムコールに対する独自ドライバの処理動作を説明するためのシーケンス図である。
【図５】図２に示す管理テーブル格納部における図３及び図４に対応するデータ更新の流れの一例を示す説明図である。
【図６】図２に示す管理テーブル格納部におけるデータ更新の流れの一例を示す説明図である。
【図７】本実施形態に係るマルチプロセッサによる作用効果を説明するための説明図であり、（ａ）は第１のプロセッサのクライアントアプリを第３のプロセッサに実装する前のＮＷ機器の一例を示す構成図であり、（ａ）は第１のプロセッサのクライアントアプリを第３のプロセッサに実装した後のＮＷ機器の一例を示す構成図である。
【図８】（ａ）は従来のプロセッサの負荷分散の仕組みを説明するための説明図、（ｂ）は従来のプロセッサの負荷分散の他の仕組みを説明するための説明図、（ｃ）は従来のプロセッサの負荷分散のさらに他の仕組みを説明するための説明図である。
【図９】（ａ）はソケット通信を利用する仕組みを説明するための説明図、（ｂ）は従来のプロセッサ間通信の課題を説明するための説明図である。
【発明を実施するための形態】
【００１４】
ここで、本発明は多くの異なる形態で実施可能である。したがって、下記の実施形態の記載内容のみで解釈すべきではない。また、実施形態の全体を通して同じ要素には同じ符号を付けている。
【００１５】
実施形態では、主にシステムについて説明するが、いわゆる当業者であれば明らかな通り、本発明はコンピュータで使用可能なプログラム、方法としても実施できる。また、本発明は、ハードウェア、ソフトウェア、又は、ソフトウェア及びハードウェアの実施形態で実施可能である。プログラムは、ハードディスク、CD-ROM、DVD-ROM、光記憶装置又は磁気記憶装置等の任意のコンピュータ可読媒体に記録できる。さらに、プログラムはネットワークを介した他のコンピュータに記録することができる。
【００１６】
（本発明の第１の実施形態）
本実施形態に係るマルチプロセッサは、サーバ型のアプリケーション又はクライアント型のアプリケーションを動作させる一のプロセッサと、当該アプリケーションとのソケット通信を行うクライアント型のアプリケーション又はサーバ型のアプリケーションを動作させる他のプロセッサとを備えている。
【００１７】
ここで、サーバ型のアプリケーションとは、ソケット同士を接続して通信経路を確立するために、socket、bind、listen及びacceptシステムコールを発行するアプリケーションであり、以下、サーバアプリと称す。また、クライアント型のアプリケーションとは、ソケット同士を接続して通信経路を確立するために、socket及びconnectシステムコールを発行するアプリケーションであり、以下、クライアントアプリと称す。
【００１８】
なお、前述した他のプロセッサは、一又は複数のプロセッサであり、以下の説明においては、図１に示すように、一のプロセッサとして、第１のプロセッサ１１０をＮＷ機器１００に搭載した場合を例に挙げて説明する。また、以下の説明においては、他のプロセッサとして、第２のプロセッサ２１０をサーバやホスト等の他のＮＷ機器（以下、他ＮＷ機器２００と称す）に搭載し、第３のプロセッサ３１０をプロセッサカード等の拡張カード３００に搭載した場合を例に挙げて説明する。また、ＮＷ機器１００と他ＮＷ機器２００とは、ネットワーク４００を介して接続し、ＮＷ機器１００と拡張カード３００とは、ＰＣＩバス等の拡張バス５００を介して接続する。
【００１９】
また、前述した一のプロセッサ及び他のプロセッサは、ソフトウェア部品である、後述するカーネル１０と、サーバアプリ２１及び／又はクライアントアプリ２２を実装するユーザ２０とをそれぞれ備えている。
【００２０】
なお、以下の説明においては、アプリケーションに対して、当該アプリケーションが実装されたユーザ２０を備えるプロセッサ内部のカーネル１０を自カーネルと称する。また、アプリケーションに対して、当該アプリケーションが実装されたユーザ２０を備えるプロセッサ外部におけるソケット通信相手である他のプロセッサ内部のカーネル１０を相手カーネルと称して説明する。
【００２１】
ここで、カーネル１０とは、ＯＳ（Operating System）の基本機能を実装したソフトウェアであり、アプリケーションソフトや周辺機器の監視、ディスクやメモリ等の資源の管理、割りこみ処理又はプロセス間通信等、ＯＳとしての基本機能を提供する。特に、カーネル１０は、追加機能や周辺機器の制御ソフトウェア（ドライバ）等をモジュール化して、後から追加できるようになっている。
【００２２】
カーネル１０は、後述する独自ドライバ１１及びソケットインタフェース（interface：以下、Ｉ／Ｆと称す）１２が実装され、必要に応じて、Ｉ／Ｆドライバ１３及び／又はネットワークカード（Network Interface Card：NIC）等のネットワークＩ／Ｆ１４が実装される。
【００２３】
図２において、独自ドライバ１１は、後述するサーバアプリ側送受信部１、クライアントアプリ側送受信部２、判別条件格納部３、システムコール保持部４、仮ディスクリプタ番号発行部５、システムコール再発行部６、管理テーブル格納部７及びディスクリプタ番号変換部８を備えている。
【００２４】
図２（ａ）において、サーバアプリ側送受信部１は、サーバアプリ２１から送信されるシステムコールを受信し、システムコールの種別に応じて、仮ディスクリプタ番号発行部５、システムコール再発行部６又はディスクリプタ番号変換部８にシステムコールを出力する。すなわち、サーバアプリ側送受信部１は、socketシステムコールを仮ディスクリプタ番号発行部５に出力し、bindシステムコールをシステムコール再発行部６に出力し、listen、accept、send、recv、shutdown及びcloseシステムコールをディスクリプタ番号変換部８に出力する。
【００２５】
また、サーバアプリ側送受信部１は、仮ディスクリプタ番号発行部５から入力される、ソケットの識別子（identification：ＩＤ）であるディスクリプタ番号に相当する仮ディスクリプタ番号を、サーバアプリ２１に送信する。
【００２６】
ここで、ディスクリプタ番号とは、ソケットの生成時に、カーネル１０により割り当てられるソケットのＩＤに相当するものであり、アプリケーションは、カーネル１０から通知されるディスクリプタ番号を指定して、アクセスしたいソケットを指定する。
【００２７】
さらに、図２（ｂ）において、サーバアプリ側送受信部１は、システムコール再発行部６から入力されるsocket及びconnectシステムコールを、サーバアプリ２１側のカーネル１０に送信する。また、サーバアプリ側送受信部１は、ディスクリプタ番号変換部８から入力されるsend、recv、shutdown及びcloseシステムコールを、サーバアプリ２１側のカーネル１０に送信する。
また、サーバアプリ側送受信部１は、サーバアプリ２１側のカーネル１０から送信されるディスクリプタ番号を受信し、ディスクリプタ番号変換部８に出力する。
【００２８】
図２（ｂ）において、クライアントアプリ側送受信部２は、クライアントアプリ２２から送信されるシステムコールを受信し、システムコールの種別に応じて、仮ディスクリプタ番号発行部５、システムコール再発行部６又はディスクリプタ番号変換部８にシステムコールを出力する。すなわち、クライアントアプリ側送受信部２は、socketシステムコールを仮ディスクリプタ番号発行部５に出力し、connectシステムコールをシステムコール再発行部６に出力し、send、recv、shutdown及びcloseシステムコールをディスクリプタ番号変換部８に出力する。
また、クライアントアプリ側送受信部２は、仮ディスクリプタ番号発行部５から入力される仮ディスクリプタ番号を、クライアントアプリ２２に送信する。
【００２９】
さらに、図２（ａ）において、クライアントアプリ側送受信部２は、システムコール再発行部６から入力されるsocket及びbindシステムコールを、クライアントアプリ２２側のカーネル１０に送信する。また、クライアントアプリ側送受信部２は、ディスクリプタ番号変換部８から入力されるlisten、accept、send、recv、shutdown及びcloseシステムコールを、クライアントアプリ２２側のカーネル１０に送信する。
また、クライアントアプリ側送受信部２は、クライアントアプリ２２側のカーネル１０から送信されるディスクリプタ番号を受信し、ディスクリプタ番号変換部８に出力する。
【００３０】
判別条件格納部３は、bindシステムコールの送信元であるサーバアプリ２１におけるポート番号、及び当該アプリを動作させるプロセッサにおけるＩＰアドレスに基づき、当該システムコールの宛先となるカーネル１０を判別する条件を格納する。また、判別条件格納部３は、connectシステムコールの送信元であるクライアントアプリ２２におけるポート番号、及び当該アプリを動作させるプロセッサにおけるＩＰアドレスに基づき、当該システムコールの宛先となるカーネル１０を判別する条件を格納する。
【００３１】
システムコール保持部４は、サーバアプリ２１又はクライアントアプリ２２からのsocketシステムコールを保持する。また、システムコール保持部４は、サーバアプリ２１からのbind又はクライアントアプリ２２からのconnectシステムコール、及び当該bind又はconnectシステムコールの前に発行されるシステムコールを保持する。
【００３２】
仮ディスクリプタ番号発行部５は、サーバアプリ２１又はクライアントアプリ２２からのsocketシステムコールに対して、ディスクリプタ番号に相当する仮ディスクリプタ番号を生成する。また、仮ディスクリプタ番号発行部５は、生成した仮ディスクリプタ番号を、socketシステムコールを送信したサーバアプリ２１又はクライアントアプリ２２に返信する。また、仮ディスクリプタ番号発行部５は、生成した仮ディスクリプタ番号を管理テーブル格納部７に格納する。
【００３３】
なお、仮ディスクリプタ番号発行部５は、管理テーブル格納部７に格納されている仮ディスクリプタ番号が重複しないように、仮ディスクリプタ番号を割り当てる。これにより、自カーネル１０及び相手カーネル１０により重複したディスクリプタ番号が割り当てられ、管理テーブル格納部７に格納された場合であっても、システムコール再発行部６が、異なる仮ディスクリプタ番号により、システムコールの宛先を一意に特定することができる。
【００３４】
システムコール再発行部６は、サーバアプリ２１からのbindシステムコールに指定されるＩＰアドレス及びポート番号、並びに判別条件格納部３に格納される判別条件に基づき、当該システムコールの宛先となるカーネル１０を特定する。また、システムコール再発行部６は、クライアントアプリ２２からのconnectシステムコールに指定されるＩＰアドレス及びポート番号、並びに判別条件格納部３に格納される判別条件に基づき、当該システムコールの宛先となるカーネル１０を特定する。また、システムコール再発行部６は、特定したカーネル１０に、システムコール保持部４に保持されるシステムコールを送信する。また、システムコール再発行部６は、システムコール保持部４に保持されるsocketシステムコール以外のシステムコールを、ディスクリプタ番号を指定して、特定したカーネル１０に送信する。
【００３５】
管理テーブル格納部７は、socketシステムコールを受信したカーネル１０から返信されるディスクリプタ番号、当該socketシステムコールに対して生成された仮ディスクリプタ番号、及び当該socketシステムコールの宛先として特定されたカーネル１０を識別する宛先フラグを対応付けて格納する。なお、宛先フラグとしては、例えば、自カーネル１０を「０」とし、相手カーネル１０を「１」とすることが考えられる。
【００３６】
ディスクリプタ番号変換部８は、サーバアプリ２１からのlisten、accept、send、recv、shutdown又はcloseシステムコールに指定される仮ディスクリプタ番号に対応する宛先フラグを、管理テーブル格納部７から抽出する。また、ディスクリプタ番号変換部８は、クライアントアプリ２２からのsend、recv、shutdown又はcloseシステムコールに指定される仮ディスクリプタ番号に対応する宛先フラグを、管理テーブル格納部７から抽出する。また、ディスクリプタ番号変換部８は、抽出した宛先フラグに基づき、当該システムコールの宛先となるカーネル１０に当該システムコールを送信する。
【００３７】
つぎに、本実施形態に係るマルチプロセッサにおける処理動作について説明する。
まず、サーバアプリ２１が発行するシステムコールに対する独自ドライバ１１の処理動作を、図２（ａ）、図３及び図５（ａ）〜（ｃ）を用いて説明する。
【００３８】
サーバアプリ２１は、自カーネル１０に対して、クライアントアプリ２２の接続を受け付けるソケットの生成を要求するためのsocketシステムコールを発行する（ステップＳ１）。
【００３９】
自カーネル１０における独自ドライバ１１のサーバアプリ側送受信部１は、socketシステムコールを受信すると、仮ディスクリプタ番号発行部５にsocketシステムコールを出力する。
【００４０】
仮ディスクリプタ番号発行部５は、socketシステムコールが入力されると、ソケットの識別子であるディスクリプタ番号に相当する仮ディスクリプタ番号を生成する（ステップＳ２）。
【００４１】
そして、仮ディスクリプタ番号発行部５は、生成した仮ディスクリプタ番号を、管理テーブル格納部７に対して、新規に登録する（ステップＳ３、図５（ａ））。なお、図５（ａ）においては、仮ディスクリプタ番号として、「１０」を登録した場合を、一例として示している。
【００４２】
また、仮ディスクリプタ番号発行部５は、生成した仮ディスクリプタ番号を、サーバアプリ側送受信部１に出力し、サーバアプリ側送受信部１は、socketシステムコールを送信したサーバアプリ２１に仮ディスクリプタ番号を返信する（ステップＳ４）。なお、仮ディスクリプタ番号発行部５は、socketシステムコールをシステムコール保持部４に出力し、システムコール保持部４は、socketシステムコールを一時的に保持する。
【００４３】
サーバアプリ２１は、自カーネル１０に対して、自身に設定されたソケット通信用のポート番号、及び自身を動作させるプロセッサにおけるＩＰアドレスを、ソケットに設定するためのbindシステムコールを発行する。このとき、サーバアプリ２１は、ソケットを指定するための仮ディスクリプタ番号を指定して、bindシステムコールを発行する（ステップＳ５）。
【００４４】
なお、サーバアプリ２１は、一般的には、socketシステムコールに対するディスクリプタ番号（仮ディスクリプタ番号）を受信した後に、他のシステムコールを発行することなく、bindシステムコールが発行される。しかしながら、アプリケーションのオプション設定によっては、socketシステムコールとbindシステムコールとの間に、他のシステムコールが発行される場合がある（ステップＳ４ａ）。この場合には、サーバアプリ側送受信部１は、他のシステムコールを受信すると、システムコール再発行部６を介して、システムコール保持部４に他のシステムコールを出力する。そして、システムコール保持部４は、他のシステムコールを一時的に保持し（ステップＳ４ｂ）、サーバアプリ２１に適当な返り値を返すことになる（ステップＳ４ｃ）。
【００４５】
サーバアプリ側送受信部１は、bindシステムコールを受信すると、システムコール再発行部６にbindシステムコールを出力する。
システムコール再発行部６は、bindシステムコールが入力されると、bindシステムコールに指定されるＩＰアドレス及びポート番号に基づき、判別条件格納部３を参照し、当該システムコールの宛先となるカーネル１０を特定する（ステップＳ６）。
【００４６】
そして、システムコール再発行部６は、前述したステップＳ３で登録した仮ディスクリプタ番号に対応させて、特定したカーネル１０を管理テーブル格納部７に登録する（ステップＳ７、図５（ｂ））。なお、図５（ｂ）においては、宛先フラグとして、「１」（相手カーネル１０）を登録した場合を、一例として示している。
【００４７】
また、システムコール再発行部６は、システムコール保持部４に保持しているsocketシステムコールを抽出し、特定したカーネル１０の情報と共に、クライアントアプリ側送受信部２に出力する。そして、クライアントアプリ側送受信部２は、特定したカーネル１０にsocketシステムコールを送信する（ステップＳ８）。なお、システムコール再発行部６は、システムコール保持部４にbindシステムコールを出力し、システムコール保持部４はbindシステムコールを一時的に保持する。
【００４８】
そして、クライアントアプリ側送受信部２は、socketシステムコールに対して、クライアントアプリ２２側のカーネル１０から送信されるディスクリプタ番号を受信し、ディスクリプタ番号変換部８に出力する（ステップＳ９）。
【００４９】
ディスクリプタ番号変換部８は、クライアントアプリ２２からのディスクリプタ番号が入力されると、前述したステップＳ３で登録した仮ディスクリプタ番号に対応させて、ディスクリプタ番号を管理テーブル格納部７に登録する（ステップＳ１０、図５（ｃ））。なお、図５（ｃ）においては、ディスクリプタ番号として、「５０」を登録した場合を、一例として示している。
【００５０】
そして、システムコール再発行部６は、システムコール保持部４に保持しているbindシステムコールを抽出し、ステップＳ１０で登録されたディスクリプタ番号に対応するカーネル１０の情報と共に、クライアントアプリ側送受信部２に出力する。そして、クライアントアプリ側送受信部２は、ディスクリプタ番号を指定して、対応するカーネル１０にbindシステムコールを送信する（ステップＳ１１）。
【００５１】
なお、前述したステップＳ４ｂにおいて、システムコール保持部４が他のシステムコールを保持しているのであれば、システムコール保持部４に保持される他のシステムコールを、ディスクリプタ番号を指定して、対応するカーネル１０に送信する（ステップＳ１０ａ）。
【００５２】
そして、サーバアプリ２１は、自カーネル１０に対して、複数のクライアントアプリ２２の接続を受けるための待ち行列であるソケット・キューを作成するためのlistenシステムコールを発行する。このとき、サーバアプリ２１は、ソケットを指定するための仮ディスクリプタ番号を指定して、listenシステムコールを発行する（ステップＳ１２）。
サーバアプリ側送受信部１は、listenシステムコールを受信すると、ディスクリプタ番号変換部８にlistenシステムコールを出力する。
【００５３】
ディスクリプタ番号変換部８は、listenシステムコールが入力されると、listenシステムコールに指定される仮ディスクリプタ番号に基づき、管理テーブル格納部７を参照し、当該システムコールの宛先となるカーネル１０の情報と、対応するディスクリプタ番号を抽出する。
【００５４】
また、ディスクリプタ番号変換部８は、抽出したカーネル１０の情報及びディスクリプタ番号と共に、listenシステムコールをクライアントアプリ側送受信部２に出力する。そして、クライアントアプリ側送受信部２は、ディスクリプタ番号を指定して、対応するカーネル１０にlistenシステムコールを送信する（ステップＳ１３）。
【００５５】
そして、サーバアプリ２１は、自カーネル１０に対して、ソケットにクライアントアプリ２２が接続してくるのを待つためのacceptシステムコールを発行する。このとき、サーバアプリ２１は、ソケットを指定するための仮ディスクリプタ番号を指定して、acceptシステムコールを発行する（ステップＳ１４）。
サーバアプリ側送受信部１は、acceptシステムコールを受信すると、ディスクリプタ番号変換部８にacceptシステムコールを出力する。
【００５６】
ディスクリプタ番号変換部８は、acceptシステムコールが入力されると、acceptシステムコールに指定される仮ディスクリプタ番号に基づき、管理テーブル格納部７を参照し、当該システムコールの宛先となるカーネル１０の情報と、対応するディスクリプタ番号を抽出する。
【００５７】
また、ディスクリプタ番号変換部８は、抽出したカーネル１０の情報及びディスクリプタ番号と共に、acceptシステムコールをクライアントアプリ側送受信部２に出力する。そして、クライアントアプリ側送受信部２は、ディスクリプタ番号を指定して、対応するカーネル１０にacceptシステムコールを送信する（ステップＳ１５）。
【００５８】
そして、クライアントアプリ２２から後述するconnectシステムコールが発行されると、サーバアプリ２１及びクライアントアプリ２２のソケットを介した通信経路が確立し、データの送受信が可能となる（ステップＳ１６）。なお、データの送受信においては、サーバアプリ２１からsendシステムコールやrecvシステムコールが発行されるが、このsend及びrecvシステムコールに対しても、独自ドライバ１１においてlisten及びacceptシステムコールと同様の処理が行われることになる。
【００５９】
そして、データの送受信が完了し、ソケット通信を終了するために、サーバアプリ２１は、自カーネル１０に対して、ソケットを開放するためのcloseシステムコールを発行する。このとき、サーバアプリ２１は、ソケットを指定するための仮ディスクリプタ番号を指定して、closeシステムコールを発行する（ステップＳ１７）。
サーバアプリ側送受信部１は、closeシステムコールを受信すると、ディスクリプタ番号変換部８にcloseシステムコールを出力する。
【００６０】
ディスクリプタ番号変換部８は、closeシステムコールが入力されると、closeシステムコールに指定される仮ディスクリプタ番号に基づき、管理テーブル格納部７を参照し、当該システムコールの宛先となるカーネル１０の情報と、対応するディスクリプタ番号を抽出する。
【００６１】
また、ディスクリプタ番号変換部８は、抽出したカーネル１０の情報及びディスクリプタ番号と共に、closeシステムコールをクライアントアプリ側送受信部２に出力する。そして、クライアントアプリ側送受信部２は、ディスクリプタ番号を指定して、対応するカーネル１０にcloseシステムコールを送信する（ステップＳ１８）。
【００６２】
なお、ソケット通信を終了するために、shutdownシステムコールを使用して、コネクションの切断を明示的に行うこともできるが、ソケットを開放すれば、コネクションの切断処理も行うために、shutdownシステムコールの発行を省略してもよい。
【００６３】
つぎに、クライアントアプリ２２が発行するシステムコールに対する独自ドライバ１１の処理動作を、図２（ｂ）、図４及び図５（ｄ）〜（ｆ）を用いて説明する。
クライアントアプリ２２は、自カーネル１０に対して、サーバアプリ２１の接続を受け付けるソケットの生成を要求するためのsocketシステムコールを発行する（ステップＳ１０１）。
【００６４】
自カーネル１０における独自ドライバ１１のクライアントアプリ側送受信部２は、socketシステムコールを受信すると、仮ディスクリプタ番号発行部５にsocketシステムコールを出力する。
【００６５】
仮ディスクリプタ番号発行部５は、socketシステムコールが入力されると、ソケットの識別子であるディスクリプタ番号に相当する仮ディスクリプタ番号を生成する（ステップＳ１０２）。
【００６６】
そして、仮ディスクリプタ番号発行部５は、生成した仮ディスクリプタ番号を、管理テーブル格納部７に対して、新規に登録する（ステップＳ１０３、図５（ｄ））。なお、図５（ｄ）においては、仮ディスクリプタ番号として、「１１」を登録した場合を、一例として示している。
【００６７】
また、仮ディスクリプタ番号発行部５は、生成した仮ディスクリプタ番号を、クライアントアプリ側送受信部２に出力し、クライアントアプリ側送受信部２は、socketシステムコールを送信したクライアントアプリ２２に仮ディスクリプタ番号を返信する（ステップＳ１０４）。なお、仮ディスクリプタ番号発行部５は、socketシステムコールをシステムコール保持部４に出力し、システムコール保持部４は、socketシステムコールを一時的に保持する。
【００６８】
クライアントアプリ２２は、自カーネル１０に対して、自身に設定されたソケット通信用のポート番号、及び自身を動作させるプロセッサにおけるＩＰアドレスを、ソケットに設定するためのconnectシステムコールを発行する。このとき、クライアントアプリ２２は、ソケットを指定するための仮ディスクリプタ番号を指定して、connectシステムコールを発行する（ステップＳ１０５）。
【００６９】
なお、クライアントアプリ２２は、一般的には、socketシステムコールに対するディスクリプタ番号（仮ディスクリプタ番号）を受信した後に、他のシステムコールを発行することなく、connectシステムコールが発行される。しかしながら、アプリケーションのオプション設定によっては、socketシステムコールとconnectシステムコールとの間に、他のシステムコールが発行される場合がある（ステップＳ１０４ａ）。この場合には、クライアントアプリ側送受信部２は、他のシステムコールを受信すると、システムコール再発行部６を介して、システムコール保持部４に他のシステムコールを出力する。そして、システムコール保持部４は、他のシステムコールを一時的に保持し（ステップＳ１０４ｂ）、クライアントアプリ２２に適当な返り値を返すことになる（ステップＳ１０４ｃ）。
【００７０】
クライアントアプリ側送受信部２は、connectシステムコールを受信すると、システムコール再発行部６にconnectシステムコールを出力する。
【００７１】
システムコール再発行部６は、connectシステムコールが入力されると、connectシステムコールに指定されるＩＰアドレス及びポート番号に基づき、判別条件格納部３を参照し、当該システムコールの宛先となるカーネル１０を特定する（ステップＳ１０６）。
【００７２】
そして、システムコール再発行部６は、前述したステップＳ１０３で登録した仮ディスクリプタ番号に対応させて、特定したカーネル１０を管理テーブル格納部７に登録する（ステップＳ１０７、図５（ｅ））。なお、図５（ｅ）においては、宛先フラグとして、「１」（相手カーネル１０）を登録した場合を、一例として示している。
【００７３】
また、システムコール再発行部６は、システムコール保持部４に保持しているsocketシステムコールを抽出し、特定したカーネル１０の情報と共に、サーバアプリ側送受信部１に出力する。そして、サーバアプリ側送受信部１は、特定したカーネル１０にsocketシステムコールを送信する（ステップＳ１０８）。なお、システムコール再発行部６は、システムコール保持部４にconnectシステムコールを出力し、システムコール保持部４はconnectシステムコールを一時的に保持する。
【００７４】
そして、サーバアプリ側送受信部１は、socketシステムコールに対して、サーバアプリ２１側のカーネル１０から送信されるディスクリプタ番号を受信し、ディスクリプタ番号変換部８に出力する（ステップＳ１０９）。
【００７５】
ディスクリプタ番号変換部８は、クライアントアプリ２２からのディスクリプタ番号が入力されると、前述したステップＳ１０３で登録した仮ディスクリプタ番号に対応させて、ディスクリプタ番号を管理テーブル格納部７に登録する（ステップＳ１１０、図５（ｆ））。なお、図５（ｆ）においては、ディスクリプタ番号として、「５１」を登録した場合を、一例として示している。
【００７６】
そして、システムコール再発行部６は、システムコール保持部４に保持しているconnectシステムコールを抽出し、ステップＳ１１０で登録されたディスクリプタ番号に対応するカーネル１０の情報と共に、サーバアプリ側送受信部１に出力する。そして、サーバアプリ側送受信部１は、ディスクリプタ番号を指定して、対応するカーネル１０にconnectシステムコールを送信する（ステップＳ１１１）。
【００７７】
なお、前述したステップＳ１０４ｂにおいて、システムコール保持部４が他のシステムコールを保持しているのであれば、システムコール保持部４に保持される他のシステムコールを、ディスクリプタ番号を指定して、対応するカーネル１０に送信する（ステップＳ１１０ａ）。
【００７８】
そして、サーバアプリ２１及びクライアントアプリ２２のソケットを介した通信経路が確立すると、データの送受信が可能となる（ステップＳ１１２）。なお、データの送受信においては、クライアントアプリ２２からsendシステムコールやrecvシステムコールが発行されるが、このsend及びrecvシステムコールに対しても、独自ドライバ１１において前述したlisten及びacceptシステムコールと同様の処理が行われることになる。
【００７９】
そして、データの送受信が完了し、ソケット通信を終了するために、クライアントアプリ２２は、自カーネル１０に対して、ソケットを開放するためのcloseシステムコールを発行する。このとき、クライアントアプリ２２は、ソケットを指定するための仮ディスクリプタ番号を指定して、closeシステムコールを発行する（ステップＳ１１３）。
クライアントアプリ側送受信部２は、closeシステムコールを受信すると、ディスクリプタ番号変換部８にcloseシステムコールを出力する。
【００８０】
ディスクリプタ番号変換部８は、closeシステムコールが入力されると、closeシステムコールに指定される仮ディスクリプタ番号に基づき、管理テーブル格納部７を参照し、当該システムコールの宛先となるカーネル１０の情報と、対応するディスクリプタ番号を抽出する。
【００８１】
また、ディスクリプタ番号変換部８は、抽出したカーネル１０の情報及びディスクリプタ番号と共に、closeシステムコールをサーバアプリ側送受信部１に出力する。そして、サーバアプリ側送受信部１は、ディスクリプタ番号を指定して、対応するカーネル１０にcloseシステムコールを送信する（ステップＳ１１４）。
【００８２】
なお、ソケット通信を終了するために、shutdownシステムコールを使用して、コネクションの切断を明示的に行うこともできるが、ソケットを開放すれば、コネクションの切断処理も行うために、shutdownシステムコールの発行を省略してもよい。
【００８３】
つぎに、具体例として、図１に示すＮＷ機器１００の第１のプロセッサ１１０におけるユーザ２０に実装された各アプリケーションが発行するシステムコールに対する独自ドライバ１１の処理動作について説明する。
【００８４】
なお、以下の説明においては、図１に示すように、第１のプロセッサ１１０のユーザ２０に、サーバアプリ２１ａ、クライアントアプリ２２ｃ、サーバアプリ２１ｄ及びサーバアプリ２１ｆを実装する場合を例に挙げて説明する。また、図１に示すように、第２のプロセッサ２１０のユーザ２０にクライアントアプリ２２ｂを実装し、第３のプロセッサ３１０のユーザ２０にクライアントアプリ２２ｅを実装する場合を例に挙げて説明する。
【００８５】
さらに、図１において、クライアントアプリ２２ｃとサーバアプリ２１ｄとは、第１のプロセッサ１１０のカーネル１０を互いに使用して、ソケット通信を行うものである。また、サーバアプリ２１ａは、第２のプロセッサ２１０上で動作するクライアントアプリ２２ｂとのソケット通信を行い、サーバアプリ２１ｆは、第３のプロセッサ３１０上で動作するクライアントアプリ２２ｅとのソケット通信を行うものである。
【００８６】
ここで、ＮＷ機器１００は、ネットワークＩ／Ｆ１４のＩＰアドレスとして「Ａｙ」が設定され、サーバアプリＦにおける通信に使用するＩＰアドレスとして「Ａｆ」が設定されているものとする。また、他ＮＷ機器２００は、ネットワークＩ／Ｆ１４のＩＰアドレスとして「Ａｘ」が設定されているものとする。
【００８７】
また、ＮＷ機器１００は、第１のプロセッサ１１０のカーネル１０に実装されたクライアントアプリ２２ｃ及びサーバアプリ２１ｄ間の通信に使用するＩＰアドレスとして、カーネル１０におけるループアドレスである、内部ループアドレス「Ａｌ」が設定されているものとする。
【００８８】
また、各アプリケーションは、ソケット通信用のポート番号がそれぞれ設定されている。すなわち、サーバアプリ２１ａにはポート番号「Ｐａ」が設定され、クライアントアプリ２２ｃにはポート番号「Ｐｃ」が設定され、サーバアプリ２１ｄにはポート番号「Ｐｄ」が設定され、サーバアプリ２１ｆにはポート番号「Ｐｆ」が設定されているものとする。また、クライアントアプリ２２ｂにはポート番号「Ｐｂ」が設定され、クライアントアプリ２２ｅにはポート番号「Ｐｅ」が設定されているものとする。
【００８９】
また、第１のプロセッサ１１０のカーネル１０における独自ドライバ１１は、判別条件格納部３に格納される判別条件として、例えば、下表１に示す条件が設定されているものとする。なお、下表１に示す条件は、プロセッサのシステム設計者が適宜設定するものであり、設定値をプログラマブルロジックデバイス等により再構成可能にすることが好ましい。
【００９０】
【表１】
2010237977.tif 000003
【００９１】
以下、前述した環境において、サーバアプリ２１ａ、クライアントアプリ２２ｃ、サーバアプリ２１ｄ、サーバアプリ２１ｆの順に、各アプリケーションが、ソケット関連のシステムコールを発行した場合の独自ドライバ１１の処理動作を説明する。
【００９２】
なお、サーバアプリ２１ａ、サーバアプリ２１ｄ、サーバアプリ２１ｆから発行されるシステムコールに対する独自ドライバ１１の動作は、前述した図３に示すステップＳ１〜ステップＳ１８に従うものである。また、クライアントアプリ２２ｃから発行されるシステムコールに対する独自ドライバ１１の動作は、前述した図４に示すステップＳ１０１〜ステップＳ１１４に従うものである。
【００９３】
したがって、以下の説明では、管理テーブル格納部７に対する、仮ディスクリプタ番号、ディスクリプタ番号及び宛先フラグの登録の流れを主として、図６を用いて説明する。
まず、サーバアプリ２１ａから発行されるシステムコールに対する独自ドライバ１１の動作を説明する。
【００９４】
独自ドライバ１１は、サーバアプリ２１ａから発行されるsocketシステムコールを受信すると（ステップＳ１）、仮ディスクリプタ番号「１０」を管理テーブル格納部に新規に登録する（ステップＳ２、ステップＳ３、図６（ａ））。また、独自ドライバ１１は、仮ディスクリプタ番号「１０」をサーバアプリ２１ａに返信する（ステップＳ４）。
【００９５】
そして、独自ドライバ１１は、サーバアプリ２１ａから発行されるbindシステムコールを受信する（ステップＳ５）。このとき、bindシステムコールには、IPアドレス「Ａｙ」が指定され、ポート番号「Ｐａ」が指定される。
【００９６】
独自ドライバ１１は、判別条件格納部３に格納される判別条件（表１の条件２）に基づき、自カーネル宛であると判断し（ステップＳ６）、管理テーブル格納部７に宛先フラグ「０」を設定して（ステップＳ７、図６（ｂ））、socketシステムコールを自カーネル１０に発行する（ステップＳ８）。
【００９７】
そして、独自ドライバ１１は、自カーネル１０からディクリプタ番号「５０」が返信されると（ステップＳ９）、管理テーブル格納部７にディクリプタ番号「５０」を設定し（ステップＳ１０、図６（ｃ））、自カーネル１０にbindシステムコールを発行する（ステップＳ１１）。
【００９８】
これ以降は、サーバアプリ２１ａが仮ディスクリプタ番号「１０」を指定してシステムコールを発行すると、独自ドライバ１１が、仮ディスクリプタ番号「１０」に基づき、管理テーブル格納部７を検索して、当該システムコールが自カーネル宛であると判断する。そして、独自ドライバ１１は、仮ディスクリプタ番号「１０」に基づき、管理テーブル格納部７から求めたディスクリプタ番号「５０」を指定して、受信したシステムコールを自カーネル１０に発行する。
【００９９】
つぎに、クライアントアプリ２２ｃから発行されるシステムコールに対する独自ドライバ１１の動作を説明する。
独自ドライバ１１は、クライアントアプリ２２ｃから発行されるsocketシステムコールを受信すると（ステップＳ１０１）、仮ディスクリプタ番号「１１」を管理テーブル格納部に新規に登録する（ステップＳ１０２、ステップＳ１０３、図６（ｄ））。また、独自ドライバ１１は、仮ディスクリプタ番号「１１」をクライアントアプリ２２ｃに返信する（ステップＳ１０４）。
【０１００】
そして、独自ドライバ１１は、クライアントアプリ２２ｃから発行されるconnectシステムコールを受信する（ステップＳ１０５）。このとき、connectシステムコールには、IPアドレス「Ａｌ」が指定され、ポート番号「Ｐｃ」が指定される。
【０１０１】
独自ドライバ１１は、判別条件格納部３に格納される判別条件（表１の条件３）に基づき、自カーネル宛であると判断する（ステップＳ１０６）。また、独自ドライバ１１は、管理テーブル格納部７に宛先フラグ「０」を設定して（ステップＳ１０７、図６（ｅ））、socketシステムコールを自カーネル１０に発行する（ステップＳ１０８）。
【０１０２】
そして、独自ドライバ１１は、自カーネル１０からディクリプタ番号「５１」が返信されると（ステップＳ１０９）、管理テーブル格納部７にディクリプタ番号「５１」を設定し（ステップＳ１１０、図６（ｆ））、自カーネル１０にconnectシステムコールを発行する（ステップＳ１１１）。
【０１０３】
これ以降は、クライアントアプリ２２ｃが仮ディスクリプタ番号「１１」を指定してシステムコールを発行すると、独自ドライバ１１が、仮ディスクリプタ番号「１１」に基づき、管理テーブル格納部７を検索して、当該システムコールが自カーネル宛であると判断する。そして、独自ドライバ１１は、仮ディスクリプタ番号「１１」に基づき、管理テーブル格納部７から求めたディスクリプタ番号「５１」を指定して、受信したシステムコールを自カーネル１０に発行する。
【０１０４】
つぎに、サーバアプリ２１ｄから発行されるシステムコールに対する独自ドライバ１１の動作を説明する。
独自ドライバ１１は、サーバアプリ２１ｄから発行されるsocketシステムコールを受信すると（ステップＳ１）、仮ディスクリプタ番号「１２」を管理テーブル格納部に新規に登録する（ステップＳ２、ステップＳ３、図６（ｇ））。また、独自ドライバ１１は、仮ディスクリプタ番号「１２」をサーバアプリ２１ｄに返信する（ステップＳ４）。
【０１０５】
そして、独自ドライバ１１は、サーバアプリ２１ｄから発行されるbindシステムコールを受信する（ステップＳ５）。このとき、bindシステムコールには、IPアドレス「Ａｌ」が指定され、ポート番号「Ｐｄ」が指定される。
【０１０６】
独自ドライバ１１は、判別条件格納部３に格納される判別条件（表１の条件４）に基づき、自カーネル宛であると判断し（ステップＳ６）、管理テーブル格納部７に宛先フラグ「０」を設定して（ステップＳ７、図６（ｈ））、socketシステムコールを自カーネル１０に発行する（ステップＳ８）。
【０１０７】
そして、独自ドライバ１１は、自カーネル１０からディクリプタ番号「５２」が返信されると（ステップＳ９）、管理テーブル格納部７にディクリプタ番号「５２」を設定し（ステップＳ１０、図６（ｉ））、自カーネル１０にbindシステムコールを発行する（ステップＳ１１）。
【０１０８】
これ以降は、サーバアプリ２１ｄが仮ディスクリプタ番号「１２」を指定してシステムコールを発行すると、独自ドライバ１１が、仮ディスクリプタ番号「１２」に基づき、管理テーブル格納部７を検索して、当該システムコールが自カーネル宛であると判断する。そして、独自ドライバ１１は、仮ディスクリプタ番号「１２」に基づき、管理テーブル格納部７から求めたディスクリプタ番号「５２」を指定して、受信したシステムコールを自カーネル１０に発行する。
【０１０９】
つぎに、サーバアプリ２１ｆから発行されるシステムコールに対する独自ドライバ１１の動作を説明する。
独自ドライバ１１は、サーバアプリ２１ｆから発行されるsocketシステムコールを受信すると（ステップＳ１）、仮ディスクリプタ番号「１３」を管理テーブル格納部に新規に登録する（ステップＳ２、ステップＳ３、図６（ｊ））。また、独自ドライバ１１は、仮ディスクリプタ番号「１３」をサーバアプリ２１ｆに返信する（ステップＳ４）。
【０１１０】
そして、独自ドライバ１１は、サーバアプリ２１ｆから発行されるbindシステムコールを受信する（ステップＳ５）。このとき、bindシステムコールには、IPアドレス「Ａｆ」が指定され、ポート番号「Ｐｆ」が指定される。
【０１１１】
独自ドライバ１１は、判別条件格納部３に格納される判別条件（表１の条件５）に基づき、相手カーネル宛であると判断し（ステップＳ６）、管理テーブル格納部７に宛先フラグ「１」を設定して（ステップＳ７、図６（ｋ））、socketシステムコールを相手カーネル１０に発行する（ステップＳ８）。
【０１１２】
そして、独自ドライバ１１は、相手カーネル１０からディクリプタ番号「５０」が返信されると（ステップＳ９）、管理テーブル格納部７にディクリプタ番号「５０」を設定し（ステップＳ１０、図６（ｌ））、相手カーネル１０にbindシステムコールを発行する（ステップＳ１１）。
【０１１３】
これ以降は、サーバアプリ２１ｆが仮ディスクリプタ番号「１３」を指定してシステムコールを発行すると、独自ドライバ１１が、仮ディスクリプタ番号「１３」に基づき、管理テーブル格納部７を検索して、当該システムコールが相手カーネル宛であると判断する。そして、独自ドライバ１１は、仮ディスクリプタ番号「１３」に基づき、管理テーブル格納部７から求めたディスクリプタ番号「５０」を指定して、受信したシステムコールを相手カーネル１０に発行する。
【０１１４】
以上のように、本実施形態に係るマルチプロセッサは、一のプロセッサ内部に実装した各アプリ間やネットワークを介した複数のプロセッサの各アプリ間のみならず、拡張バスを介して接続した複数のプロセッサの各アプリ間におけるシステムコールの受け渡しを可能にする。これにより、本実施形態に係るマルチプロセッサは、一のプロセッサに対する負荷を他のプロセッサに分散することができ、プロセッサの処理負荷分散を実現できるという作用効果を奏する。
【０１１５】
特に、本実施形態に係るマルチプロセッサは、例えば、図７（ａ）に示すように、第１のプロセッサ１１０で処理していたクライアントアプリ２２ｃを、図７（ｂ）に示すように、第１のプロセッサ１１０から削除し、第３のプロセッサ３１０に実装する。これにより、本実施形態に係るマルチプロセッサは、クライアントアプリ２２ｃを第３のプロセッサ３１０により処理させることが可能になり、第１のプロセッサ１１０の負荷を低減することができる。また、本実施形態に係るマルチプロセッサは、クライアントアプリ２２ｃを処理するプロセッサを、第１のプロセッサ１１０から第３のプロセッサ３１０に移動することによる、クライアントアプリ２２ｃの変更は発生せずに、低コストのプロセッサの処理負荷分散を実現できる。
【符号の説明】
【０１１６】
１      サーバアプリ側送受信部
２      クライアントアプリ側送受信部
３      判別条件格納部
４      システムコール保持部
５      仮ディスクリプタ番号発行部
６      システムコール再発行部
７      管理テーブル格納部
８      ディスクリプタ番号変換部
１０    カーネル
１１    独自ドライバ
１２    ソケットインタフェース
１３    Ｉ／Ｆドライバ
２０    ユーザ
２１，２１ａ，２１ｄ，２１ｆ    サーバアプリ
２２，２２ｂ，２２ｃ，２２ｅ    クライアントアプリ
１００  ＮＷ機器
１１０  第１のプロセッサ
２００  他ＮＷ機器
２１０  第２のプロセッサ
３００  拡張カード
３１０  第３のプロセッサ
４００  ネットワーク
５００  拡張バス
【図１】
2010237977.tif 000004
【図２】
2010237977.tif 000005
【図３】
2010237977.tif 000006
【図４】
2010237977.tif 000007
【図５】
2010237977.tif 000008
【図６】
2010237977.tif 000009
【図７】
2010237977.tif 000010
【図８】
2010237977.tif 000011
【図９】
2010237977.tif 000012