(57)【特許請求の範囲】
【請求項１】
ネットワーク回線と接続し、データ通信を実行する通信装置であって、
前記ネットワーク回線と接続する回線接続部と、
前記回線接続部から入力されたパケットに対する経路情報を取得しパケット送信を制御するパケット転送部と、
プリエンプティブＯＳによって前記パケット転送部を制御する制御部と、
前記制御部から送信すべきデータ列を含む第１命令を受信すると前記送信すべきデータ列を通信エントリに事前登録しておき、前記制御部とは独立して動作し、所定の間隔を管理して、事前登録した前記データ列を含むパケットを前記所定の間隔毎に繰り返し前記回線接続部から送信するための第２命令を発する通信補助部とを有する。
【請求項２】
請求項１記載の通信装置であって、
前記通信補助部は、前記制御部のタイマとは独立したタイマを有し、当該タイマに基づいて前記第２命令を発する。
【請求項３】
請求項２記載の通信装置であって、
前記通信補助部は、前記タイマからの割込みを受信すると、前記データ列を含むパケットの最終送信時刻から前記所定の間隔が経過したかを判断し、前記所定の間隔が経過していたときに前記第２命令を発する。
【請求項４】
請求項１から３のいずれかに記載の通信装置であって、
前記通信補助部は、前記制御部で実行する前記プリエンプティブＯＳのカーネルによる制御を受ける。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク上で他の通信装置と相互接続を行ない、一定間隔で通信を行う通信装置に関する。
【背景技術】
【０００２】
現在、VRRP等の通信プロトコルでは、ある一定の時間間隔以内に送受信しなければいけないパケットが存在し、プリエンプティブなOSを用いた装置では、時間制約を受ける処理を明示できないため、システムの状態によりその通信が遅延されて送信される場合があり、プロトコルの指定する間隔内にそのパケットを送信できなかった場合、対向の装置はプロトコルのルールでコネクションが切断されたとみなし、装置が正常動作しているにも関わらず通信が止まってしまう。 
通信装置では、実時間処理に特化した機能を持つリアルタイムOSだけではなく、プリエンプティブOSを使用して装置を動作させている機種も存在する。これはリアルタイムOSと比較してアプリケーションの移植が容易であり、また複数のプロセスを容易に並行動作させることができることから複数の通信処理を効率的に処理できる優位性がある。
【０００３】
また、プリエンプティブOSに更にリアルタイムOSの機能をも追加する試みがある。例えば特許文献1には、チェンジャースレッドと呼ばれるプロセスを管理する管理スレッドを用いてタスク、割込みを処理することでリアルタイム OSと同様のスケジューリングを行っている。
【０００４】
【特許文献１】特開２００２−７１４７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
現在ルータなどの通信装置は高性能化、及び通信ケーブルを収用するポート数の増加等の高性能を求める動きがある。その結果、ポートの増大及び各ポートの回線管理処理及びネットワークプロトコル処理に代表される処理コストが増加し上記VRRP等に代表される一定の送信間隔で制御通信を行うことを必要とするプロトコルが正常に動作しない恐れが生じてしまった。
【０００６】
そこで、プリエンプティブOSであっても、それら時間的制約を受ける通信を保証することが求められている。特に開発にあたって最小限の変化を加えることで達成できることが望ましい。
【０００７】
特許文献１は、リアルタイムのタスク処理をプリエンプティブOSで実現するひとつの方法であるが、チェンジャースレッド自身がマルチスレッドOS上で動作するプロセスであり、チェンジャースレッドの下で動作する全プロセス及びチェンジャースレッド自身はマルチスレッドOSのプロセススケジューラの影響を受ける。すると、マルチスレッドOS内で動作する別のプロセスと上記チェンジャースレッドがマルチスレッドOSの元で対等なプロセスとして並列実効処理される。この場合、チェンジャースレッドの管理にない他のスレッドが高負荷状態になると、チェンジャースレッドにプロセススケジューラによってCPU資源が十分には割り当てられない状況になり、一定時間内の通信が保証できない。一方で、全てのスレッドをチェンジャースレッドの管理とした場合、そのOSは動作上プリエンプティブOSではなく、リアルタイムOSと等価なものになってしまい、プリエンプティブOSの優位性が減少し上記した複数通信を効率的に処理することができない。
【課題を解決するための手段】
【０００８】
直面している課題は一定間隔での実行の保証であり、他のリアルタイム性迄は求められていない。そのため、例えば、特許文献１のようなOS上で動作するスレッドではなく、カーネルが持つプロセススケジューラと並行動作するソフトウェア、またはOSを実行するCPUとスケジュールに関してはある程度独立した処理を行うことのできるハードウェアを実装することで上記問題を解決する手段を提供する。
【発明の効果】
【０００９】
本発明によって、ある任意のプロセスが一時的にCPU資源を利用し続け他のプロセスにCPU資源が割り当てられない結果、正常動作しているにもかかわらず、一定間隔で通信を行わなければいけないプロセスが提供しているサービスが停止することを防ぐことが可能になる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施に好適な実施例を図面に従って説明する。ただし、本発明は実施例に限定されない。
【実施例１】
【００１１】
実施例１は上記通信補助機構をハードウェアの装置として用意して、装置内に組み込むことにより実現する例である。図1は、CPU1a、メモリ5h、パケット転送機構1b、パケット転送機構内タイマ1c、経路制御機構 1d、パケットバッファ1e、インターフェース（回線接続部）1f、補助機構1gから構成される通信装置を示す。CPU1aは、メモリ1kと協調して通信装置の主な制御を処理する。以下、カーネルやプログラムが実行するとは、すなわちソフトウェアがCPUや制御部等のハードウェアと協働して動作することを意味する。パケット転送機構1bは、インターフェース1fから入力されたパケットをパケットバッファ1eに保持し、経路制御機構1dから経路情報を取得し、インターフェース1fに出力する。
【００１２】
補助機構1gは、本実施例での独自の装置であり、内部に制御部1h、通信エントリ1j、補助機構内タイマ1iを持つ。制御部1hは補助機構を制御するものであり、CPU1aとは独立して動作する。補助機構内タイマ1iは、内部クロックをカウントし、一定の間隔で補助機構1ｇの制御部に割込みを入れる。パケットバッファ1eにはCPUから依頼された通信のパケット、最終送信時刻、送信間隔、出力先インターフェース情報を保存する。
【００１３】
通信エントリ1jは、本提案での独自の機構であり、内部に送信先アドレス、送信元アドレス、送信データ列、最終送信時刻、出力先インターフェースを保持する領域が存在する。
【００１４】
図2は、前記通信装置による通常の送信方法を記したフロー図である。ステップ2aでは通常の通信ではメモリ1k内に存在しCPU1a上で動作するプロセスが、送信を命令する。ステップ2bではその命令を受けたCPU1aが、パケット転送機構 1bに対して送信を命令する。ステップ2cではCPU1aの命令によってパケット転送機構1bがパケットバッファ1eに登録し、ステップ2dでパケット転送機構1bがパケットバッファ1eからインターフェース1fに送信する。
【００１５】
図3は、補助機構1gを用いて一定間隔での送信を行う際に、補助機構1gにその通信を登録する方法を記したフロー図である。ステップ3aでメモリ1k内に存在しCPU1a上で動作しているプロセスがCPU1aに送信間隔、出力するインターフェース1f、出力するデータ列と一緒に命令を送信する。ステップ3bでCPU1aは、補助機構1gに通信の命令を送信する。ステップ3cでは要求を受け取った補助機構1gが、その要求を補助機構1g内にある通信エントリ 1jに登録する。
【００１６】
図4は、補助機構1g内の処理を表したフロー図である。補助機構1g内でタイマi1からの割込みで補助機構は一定周期に図4の処理を行う。ステップ4aでタイマ1iからの割込みを受けた補助機構は初めにステップ4bで通信エントリ1j内に登録されたエントリが存在するか確認する。存在しない場合はステップ4hで次の割込みを待つ。エントリがある場合にはステップ4cでそのエントリを取得し、そのエントリの最終送信時刻を参照して、ステップ4dで指定した間隔を過ぎていないかを確認する。指定した間隔を超えていた場合には、ステップ4eパケットの送信を指定したインターフェース1fに出力する。その後にステップ4fで最終更新時間をエントリに記録する。ステップ4gでは通信エントリ1j内に未処理のエントリがあるか確認し、あった場合には未処理のエントリに対してステップ4cでエントリ取得を行ない、ステップ4cから4fの処理を行う。全てのエントリについて処理が終了したら（ステップ4ｇで処理終了）、ステップ4hで次の割込みを待つ。
【実施例２】
【００１７】
実施例２では上記実施例１で用いた補助機構１ｈに相当するものを持つこと無しに解決する例を示す。この例では補助機構1gの処理をパケット転送機構5bが行う。図5は、CPU5a、メモリ5h、パケット転送機構5b及び内包されているタイマ5c、経路制御機構5d、パケットバッファ5e、通信エントリ5g、インターフェース 5fから構成される前記通信装置である。CPU5aは、メモリ5hと協調して通信装置の主な制御を処理し、パケット転送機構5bは、インターフェース5fから入力されたパケットをパケットバッファ1eに保持し、経路制御機構5dから経路情報を取得し、インターフェース5fに出力する。
【００１８】
通信エントリ5gは、本実施例での独自の機構であり、内部に送信先アドレス、送信元アドレス、送信データ列、最終送信時刻、出力先インターフェースを保持する領域を保持する。
【００１９】
図6は、プロセスが通信の命令を出した際の処理を示すフロー図である。通常の通信の場合は、ステップ6aでメモリ5h内に存在しCPU5a上で動作するプロセスがCPU5aにパケットと共に送信を命令し、ステップ6bでCPU5aがパケット転送機構5bに同様の命令を送り、ステップ6cの条件では通常の動作を通りパケット転送機構5bがインターフェース5fから送信を行う。プロセスが一定間隔での送信を行う際には、ステップ6cの分岐によってパケット転送機構5bが通信エントリ5gにエントリを追加する。
【００２０】
図7は、パケット転送機構5bの送信処理を表わしたフロー図である。初めにステップ7aでタイマ5cから割込みを受けたパケット転送機構5bは、ステップ7bでパケットバッファ5eを走査し、内部にあるデータをインターフェース5fに送信し、その後にステップ7cで通信エントリ5gを確認する。エントリが存在しない場合は、ステップ7iで次の割込みを待つ。エントリが存在する場合はステップ7dでそのエントリを取得し、ステップ7dで経過秒数の確認をする。経過秒数が指定した秒数を超えていない場合はステップ7hに移り、次のエントリの確認に移る。指定した秒数を超えていた場合には、ステップ7fでパケット転送機構5bがエントリのデータをインターフェース5fに送信し、ステップ7gで最終送信時間を記録する。その後にステップ7hで通信エントリを確認し、未処理のエントリがある場合はそのエントリに対してステップ7dでエントリを取得し、ステップ7ｄから7ｇを行う。全てのエントリについて処理が終了したら、ステップ7iに移り次の割込みを待つ。
【実施例３】
【００２１】
実施例３では補助機構の役割を実施例１及び実施例２のようなハードウェアでの実装ではなく、ハードウェアを制御するOSの上で実現する例を示す。この場合カーネル8i内で実施例１にあげる補助機構1hの処理をカーネル8iが行う。また実施例１、実施例２には存在しない機能の、ある特定の通信に対応した自動応答も示す。通常あるデータを受信してプロセスが応答を返す場合には、カーネル・プロセス間でのデータのやりとりが発生する為、そのためのオーバヘッドが存在する。本実装では特定の、予測できる通信に対してプロセスとのやり取りを行わずにカーネル内で応答処理を行うことで、上記オーバヘッドをなくす効果がある。図8は、記憶部8a、インターフェース8k、CPU8l、パケット転送機構8m及びタイマ8oから構成されるOSを中心として見た際の前記通信装置である。主記憶部8aの中にプロセス8b、プロセス8c、プロセス8d、補助プログラム8e、カーネル8i及びドライバ8jが存在し、ドライバ8iを用いてCPU8lがインターフェース8k及びパケット転送機構8mを制御する。タイマ8oは与えられた間隔でCPUに割込みを入れる。補助プログラム8eは上記の補助機構部にあたり、内部に補助機構処理部、送信エントリ8g及びルールテーブル8hを含む。送信エントリ8gには送信先アドレス、送信元アドレス、送信データ列、最終送信時刻、対象となるプロセスIDを保持し、ルールテーブル8hには対象パケットの特定フィールド列、条件値、及び返信データを保持する。カーネル8iはファイルシステム処理、プロセス管理及びネットワーク処理を内包し、プロセス8b、プロセス8c及びプロセス8dのスケジューリングやネットワーク処理、ファイルシステムの管理を行う。
【００２２】
図9は、図8内のプロセス8bが送信することを想定して描いた、通常の送信の処理を表したものである。9aでプロセスがCPU8lを介してドライバ8jに送信を要求し、9bでドライバ8jがインターフェース8kより要求を受けたデータを送信する。
【００２３】
図10は、インターフェース8kからプロセス8dを対象とする通信を受信したときの通常処理を表わしたものである。10aで外部からの通信をインターフェース8kが受信し、10bでインターフェース8kがドライバ8jに通知する。10cでドライバ8jが前記受信データの処理をカーネル8iに命令をし、10dでカーネルが対象のプロセス8dに処理を命令、10eでプロセス8dが受信データの処理を行う。
【００２４】
図11は、プロセスが一定間隔での送信・与えられた条件に一致するパケットへの自動応答を行う際に補助装置にそれらを登録する場合、前記プロセス8cが登録すると仮定して、その登録処理を表したフロー図である。ステップ11aでプロセス8cが登録をカーネルに命令する。ステップ11bでカーネル8iが補助機構処理部8fに処理を命令し、ステップ11cで補助機構処理部8fが命令種別を判定する。その命令が「一定間隔の送信処理」の場合は、ステップ11dで補助機構処理部8fが送信エントリ8gに与えられた情報を登録する。その命令が「条件に一致するパケットへの自動応答」の場合は、ステップ11eで補助機構処理部8fがルールテーブル8hに与えられた情報を登録する。
【００２５】
図12は、補助プログラム8eがステップ11dで登録された一定間隔の送信の処理を表したフロー図である。初めにステップ12aでタイマ8oからCPU8lに一定間隔で割込みが入り、ステップ12bでカーネルの処理が始まる。ステップ12bでカーネルはシステム情報の更新、プロセス情報の更新、CPU資源の再割り当て及び内部時刻の調整等の処理を行う。その後に補助プログラムが12cで送信エントリの確認を行う。送信エントリにエントリが存在しない場合にはステップ12iに移り、次の割込みまで待つ。エントリが存在した場合、ステップ12dでそのエントリの情報をメモリ内に読み込み（フェッチ）、ステップ12eで経過秒数、指定されたプロセスIDの状態を確認する。経過した秒数が指定した秒数を超えていてかつプロセスが指定の状態を保持している場合、ステップ12fで指定されたデータの送信を行ない、ステップ12gで最終送信時刻を記録する。ステップ12eで経過した秒数が指定した秒数を超えていない、またはプロセスが指定した状態を保持していない場合及び、秒数を超えていてかつ、ステップ12fとステップ12gを終えた場合にステップ12hで未処理のエントリが存在するかを確認する。もし存在した場合にはステップ12dで次のエントリのフェッチを行ない、ステップ12ｄから12ｇを行う。ステップ12hで未処理のエントリが存在しない場合にはカーネルに処理を移し、次の割込みを待つ。
【００２６】
図13は、前記8cプロセスがステップ11eで与えられた条件に一致するパケットへの自動応答を登録したと仮定したうえで、インターフェース8kからデータを受信した時の処理を表したフロー図である。ステップ13aでインターフェース8kからの割込みが入り、ドライバ8jがステップ13bで処理を行う。その後に補助プログラム8e内にあるルールテーブル8hのルールと受信したデータを比較し、対象のルールが存在するかを調べる。一致する場合には、ステップ13eで補助機構処理部8f内にある出力ルーチンが、ルールテーブルに存在するデータをドライバに出力する。ステップ13dでルールに一致しない場合にはステップ13gでカーネル8i内にあるネットワーク入力処理ルーチンに渡され、ステップ13hで対象となるプロセスに処理が渡される。この処理は図10に記したものである。ステップ13dでルールに一致した場合、補助機構処理部8f内にある出力ルーチンがルールテーブルにある対象の返信データを出力する命令をドライバ8jに送り、ステップ13fでドライバ8jがインターフェース8kから出力を行う。
【００２７】
以上の通り、本実施例によると、プリエンプティブOSの上で動作する通信装置において、一定間隔で通信を行う機構である補助通信機構を装置内またはOS内に組み込むことによって、他のソフトウェア及び、OSに多くの影響を与えることなく一定間隔での通信を実行できる。また、与えられた条件に一致するパケットへの自動応答を独立で又は一定間隔での通信と切り替えて実行できる。
【図面の簡単な説明】
【００２８】
【図１】実施例1の通信装置構成図。
【図２】実施例1における通常の送信方法を示す図。
【図３】実施例1における一定間隔の送信を登録する処理を示す図。
【図４】実施例1における補助機構1g内の処理を示す図。
【図５】実施例2の通信装置構成図。
【図６】実施例2におけるプロセスから見た通常の送信方法を示す図。
【図７】実施例2におけるパケット転送機構5bの送信処理を示す図。
【図８】実施例3の通信装置構成図。
【図９】実施例3におけるプロセスから見た通常の送信方法を示す図。
【図１０】実施例3における通信受信を受信した時の処理を示す図。
【図１１】実施例3における一定間隔の送信及び与えられた条件のパケットに対する自動応答の登録処理を示す図。
【図１２】補助プログラム8eによる一定間隔での送信処理を表わした図。
【図１３】補助プログラム8eによる与えられた条件のパケットに対する自動応答の処理を表わした図。
【図１】
0004654106.tif 000002
【図２】
0004654106.tif 000003
【図３】
0004654106.tif 000004
【図４】
0004654106.tif 000005
【図５】
0004654106.tif 000006
【図６】
0004654106.tif 000007
【図７】
0004654106.tif 000008
【図８】
0004654106.tif 000009
【図９】
0004654106.tif 000010
【図１０】
0004654106.tif 000011
【図１１】
0004654106.tif 000012
【図１２】
0004654106.tif 000013
【図１３】
0004654106.tif 000014