(58)【調査した分野】(Int.Cl.,DB名)
前記リアルタイム通信部インターフェース部は、前記自己診断部から前記動作状況の前記通知を所定時間継続して受けた場合には、前記通知を所定時間継続して受けない場合よりも前記要求バッファーから前記送信要求を取り出す前記時間間隔をさらに調整する、
ことを特徴とする請求項1に記載の通信処理装置。
前記アプリケーション部は、複数の前記アプリケーションソフトウェアを同時並行的に稼働させるものであり、各々の前記アプリケーションソフトウェアからの前記通信要求を、前記複数のアプリケーションソフトウェア間で共有される記憶部であるリアルタイム通信要求共有メモリーに一旦格納してから、前記リアルタイム通信要求共有メモリーから取り出した前記通信要求を前記リアルタイム通信部に渡す、
ことを特徴とする請求項1または請求項2に記載の通信処理装置。
前記アプリケーション部から独立のタスクとして稼働し、前記アプリケーションソフトウェアからの前記通信要求を受け付け、受け付けた前記通信要求を当該タスク内の専用の記憶部であるリアルタイム通信要求タスク内メモリーに一旦格納してから、前記リアルタイム通信要求タスク内メモリーから取り出した前記通信要求を前記リアルタイム通信部に渡すアプリケーション代理部、
をさらに具備することを特徴とする請求項1または請求項2に記載の通信処理装置。
前記アプリケーション部と前記リアルタイム通信部とは、汎用オペレーティングシステム上で稼働するものであり、前記汎用オペレーティングシステム内のスケジューラーの制御によって中央処理装置資源を与えられる、
ことを特徴とする請求項5に記載の通信処理装置。
【発明を実施するための形態】
【0019】
次に、図面を参照しながら、複数の実施形態について説明する。
【0020】
[第1実施形態]
図1は、本実施形態による通信処理装置3の概略機能構成を示すブロック図である。本実施形態による通信処理装置3は、PC・31上で構成される。PC・31(ハードウェア)は、物理CPU・310と、物理NIC・312と、NICインターフェース313とを含む。また、PC・31は、メモリー等、不図示の他の構成要素を含む。PCは、「パーソナルコンピューター」の略である。CPUは、「中央処理装置(Central Processing Unit)」である。NICは、「ネットワークインターフェースカード」の略である。NICは、単に「ネットワークカード」と呼ばれる場合もある。また、「インターフェース」は、「IF」と略記される場合がある。
【0021】
PC・31上では、汎用OS・36が稼働する。OSは、「オペレーティングシステム」の略である。汎用OS・36を用いて通信処理装置3を構成することにより、通信処理装置3を低コスト化し、且つ安定的に供給することが可能となる。汎用OS・36の一例としては、マイクロソフト社(Microsoft Corporation,米国)のPC用OSであるWindows(登録商標)系のOSを用いることができる。
【0022】
物理CPU・310は、メモリーにロードされたプログラムに含まれる命令を逐次フェッチして実行するものである。なお、物理CPU・310は、複数のコアを含むものであってもよい。また、PC・31が複数の物理CPU・310を備える構成としてもよい。物理CPU310のCPU時間がユーザー空間38内の各機能に割り当てられる。
物理NIC・312は、当該PC・31内の各機能が外部のネットワークを介して通信するためのインターフェース機能を有するものである。
NICインターフェース313は、ユーザー空間38内で稼働する機能と、物理NIC・312との間を仲介する機能を有するものである。
【0023】
汎用OS・36は、汎用OSスケジューラー37を含む。汎用OS・36が管理するユーザー空間38においては、種々の機能が同時並列的に稼働することができる。汎用OSスケジューラー37は、ユーザー空間38内において稼働する各機能(タスク、プログラム)の優先度にしたがって、適宜、計算資源を割当て、それらの機能の稼働を管理する。ここで、計算資源とは、典型的にはCPU時間(CPU資源,中央処理装置資源)である。また、計算資源として、CPU時間以外のものを含んでもよい。計算資源は、例えば、割り当てられるメモリーや、入出力処理手段等を含む。汎用OSスケジューラー37はリアルタイムスケジューラーではない。なお、同図では1つのユーザー空間38のみを示しているが、汎用OSスケジューラー37が複数のユーザー空間38を管理するものであってもよい。
【0024】
また、汎用OS・36は、リアルタイム通信要求共有メモリー191を有する。
リアルタイム通信要求共有メモリー191は、ユーザー空間38内で稼働するすべてのタスクからアクセス可能なメモリーである。後述するリアルタイム通信要求処理共有ライブラリ192が、アプリケーション部701からの通信要求等を一時的に記憶するバッファーは、このリアルタイム通信要求共有メモリー191内に設けられる。汎用OS・36の機能として、タスク間で共有するためのメモリー空間を設けることができる。本実施形態では、リアルタイム通信要求共有メモリー191は、ユーザー空間の外に設けられているが、アプリケーション部701のメモリー空間内の所定の場所にマッピングされる。これにより、アプリケーション部701はリアルタイム通信要求共有メモリー191にもアクセスすることができる。
【0025】
ユーザー空間38は、リアルタイム通信部181と、アプリケーション部701−1,701−2,・・・の各機能を稼働させる環境である。アプリケーション部701は、リアルタイム通信要求処理共有ライブラリ192と、リアルタイム通信API共有ライブラリ193(APIは、「アプリケーションプログラミングインタフェース」の略)の機能を実行させる。リアルタイム通信要求処理共有ライブラリ192と、リアルタイム通信API共有ライブラリ193との機能は、アプリケーションロジックに適宜連係される。ユーザー空間38に含まれるアプリケーション部701、リアルタイム通信要求処理ライブラリ192、リアルタイム通信API共有ライブラリ193、リアルタイム通信部181等は、プログラムやメモリーを用いて実現可能である。それらのプログラムは、汎用OSスケジューラー37によって適宜割り当てられるCPUによって実行される。また、メモリーは、例えば半導体や磁気記録媒体などを用いて実現される。なお、ユーザー空間38で実行される機能は必ずしもメモリーを持たない場合もあり得る。逆に、情報を記憶するのみであって実行する処理を持たない機能は、プログラムを持つ必要がない。
なお、アプリケーション部701−1,701−2,・・・を、単に「アプリケーション部701」と呼ぶ場合がある。
【0026】
リアルタイム通信要求処理共有ライブラリ192は、デバイスドライバとしてカーネル空間に組み込まれるものではなく、ユーザー空間38において稼働する。なお、リアルタイム通信要求処理共有ライブラリ192の機能(プログラム)は、アプリケーションソフトウェアのプログラムに静的にリンクされていてもよいし、リアルタイム通信要求処理共有ライブラリ192の機能が独立したタスクとして稼働してもよい。
リアルタイム通信要求処理共有ライブラリ192は、内部に、いずれも不図示の、リアルタイム通信要求受付ロジックと、リアルタイム通信送信ロジックと、リアルタイム通信受信ロジックの機能を備える。
【0027】
リアルタイム通信要求処理共有ライブラリ192内のリアルタイム通信要求受付ロジックは、アプリケーション部701−1や701−2等の各々のアプリケーションロジックから、リアルタイム通信API共有ライブラリ193経由で届くリアルタイム通信要求を受け付ける。そして、このリアルタイム通信要求受付ロジックは、受け付けた要求を集約し、要求(例えば送信要求)に付随する送信フレーム等を、送信要求の優先度に従って、バッファーに書き込む。このバッファーは、リアルタイム通信要求共有メモリー191内に存在する。このリアルタイム通信要求受付ロジックは、送信フレームをリアルタイム通信要求共有メモリー191内のバッファーに格納した場合には、リアルタイム通信要求処理共有ライブラリ192内のリアルタイム通信送信要求処理ロジックにその旨を通知する。
【0028】
リアルタイム通信要求処理共有ライブラリ192内のリアルタイム通信送信ロジックは、上記のリアルタイム通信要求受付ロジックからの通知を受けると、リアルタイム通信要求共有メモリー191内のバッファーから送信フレームを取り出し、リアルタイム通信部181に渡す。具体的には、このリアルタイム通信送信ロジックは、リアルタイム通信部181内のリアルタイム通信部インターフェース182(リアルタイム通信部インターフェース)が有する要求バッファー188に送信フレームを書き込むことによって、送信を行う。なお、リアルタイム通信要求受付ロジックが要求を集約し、リアルタイム通信要求共有メモリー191内のバッファーに格納するのは、各アプリケーションの要求を要求内容や送信要求の優先度で整理した上で、リアルタイム通信部181に要求するためである。
【0029】
リアルタイム通信要求処理共有ライブラリ192内のリアルタイム通信受信ロジックは、リアルタイム通信部181内のリアルタイム通信通知部183から受信通知を受けると、外部から受信されたフレームを受け取り、リアルタイム通信要求共有メモリー191内のバッファーに書き込む。また、このリアルタイム通信受信ロジックは、フレームを受信した旨を、リアルタイム通信要求受付ロジックに通知する。
リアルタイム通信要求受付ロジックは、リアルタイム通信受信ロジックからの上記の通知に基づき、リアルタイム通信要求共有メモリー191内のバッファーから受信フレームを取り出し、受信要求を発行していたアプリケーション部701にその受信フレームを返す。
【0030】
なお、リアルタイム通信要求処理共有ライブラリ192とリアルタイム通信送信ロジックおよびリアルタイム通信受信処理ロジックは、従来技術における、マイクロソフト社のWindowsにおけるNetwork Driver Interface Specification (NDIS)に準拠するデバイスドライバで実現していた機能に相当する。従来技術におけるNDISはカーネル空間で稼働するものであった。本実施形態におけるリアルタイム通信要求処理共有ライブラリ192の機能はユーザー空間で稼働する。
【0031】
リアルタイム通信API共有ライブラリ193は、アプリケーション部701がリアルタイム通信を行うためのAPIを含む共有ライブラリである。アプリケーション部701がリアルタイム通信API共有ライブラリ193の機能を静的にリンクして使用してもよい。また、アプリケーション部701の実行時にリアルタイム通信API共有ライブラリ193の機能に動的にリンクするようにしてもよい。
【0032】
アプリケーション部701−1,701−2等は、例えばプラントや機器の制御のための処理を行うものである。アプリケーション部701は、例えば、プラントの測定データの表示やプラントに対する操作が行えるHMI(ヒューマンマシンインターフェエース)や、プラントを制御するコントローラーの制御プログラムが作成されるENG(エンジニアリングサーバー)や、ゲートウェイや、プラントの制御を行うコントローラーなどといったアプリケーションに関するソフトウェアを稼働させる。複数のアプリケーション部701が同時並行的に稼働してもよい。本実施形態では、アプリケーション部701は、通信要求を、複数のアプリケーション部701間で共有される記憶部であるリアルタイム通信要求共有メモリー191に一旦格納してから、そのリアルタイム通信要求共有メモリー191から取り出した通信要求をリアルタイム通信部181に渡す。ユーザー空間18内で稼働するアプリケーションソフトウェアの数は任意である。アプリケーション部701がリアルタイム通信部181に対して行う要求は、論理的な通信路の確立又は解放や、フレーム(パケット等とも呼ぶ。データ送受信の論理的な単位である。)の送信あるいは受信等である。
【0033】
リアルタイム通信部181は、アプリケーション部701等からの通信要求に基づいて、リアルタイムに通信を行う機能を有するものである。具体的には、リアルタイム通信部181は、アプリケーション部701等から通信要求を受け、その通信要求に基づいてデータの送受信を行う。リアルタイム通信部181が行う処理の性質上、コントローラー801やPC・802とフレームの送受信等のタイミングを合わせる必要があり、リアルタイム性が要求される。ここで、リアルタイム性とは、リアルタイム通信部181がコントローラー801やPC・802対して行った要求が所定の時間内に完結することである。また、仮に所定の時間内に要求が完結しない場合にも当該所定の時間内にリアルタイム通信部181にレスポンスが戻る(例えばエラー等が報告される)ことである。ここで「所定の時間」は、適用分野によって異なるが、例えば、数ミリ秒から数百ミリ秒までといった範囲内の時間である。なお、リアルタイム通信部181は、アプリケーション部701から独立のタスクとして稼働する。
【0034】
これにより、リアルタイム通信部181が行う他機器への通信は、滞らず実行される。つまり、リアルタイム通信部181は、送信相手からの肯定応答(Ack)を確実に受信できる。また、自機器(通信処理装置)の存在を他機器へ通知するための診断通信が滞らず実行される。診断通信が確実に行われることにより、自機器の存在は、他機器から正しく認識される。これにより、システム内で自機器の通信不具合による他機器への悪影響は発生しない。
【0035】
アプリケーション部701およびリアルタイム通信部181には、PC・31内の物理CPU・310が割り当てられる。
なお、汎用OS・36において、リアルタイム通信部181のタスクには、アプリケーション部701のタスクの優先度よりも高いタスク優先度を割り当てるようにする。つまり、汎用OSスケジューラー17が計算資源をリアルタイム通信部181に対して優先的に与えるため、リアルタイム通信部181は、同時並行的に稼働する他の機能部(例えば、アプリケーション部701)よりもより優先して実行される。
タスク優先度はリアルタイム通信部181に対して、アプリケーション部701よりも優先的に計算資源を割り当てるよう、汎用OSスケジューラー17に指示するための指標である。タスク優先度は一般的に優先順位を示す数値(値の高低でどちらを優先するのかは汎用OSの実装による)であるが、数値に限らず、例えば、汎用OSスケジューラーがより優先的に処理可能なスケジューリングアルゴリズムを指定してもよい。
なお、本実施形態で開示される優先度の設定方法は、これに限らず、他の設定方法であってもよい。
【0036】
リアルタイム通信部181の内部の機能構成は次の通りである。リアルタイム通信部181は、リアルタイム通信部インターフェース182と、リアルタイム通信通知部183と、送信バッファー184と、自己診断部185と、自己診断指標記憶部186とを含んで構成される。なお、リアルタイム通信部インターフェース182は、その内部に、要求バッファー188を含んでいる。ここに列挙した各機能部の機能は、次の通りである。
【0037】
リアルタイム通信部インターフェース182は、リアルタイム通信部181内において、アプリケーション部701からの要求を受け付けたり、その要求に対する応答をアプリケーション部701に返したりする機能を有する。リアルタイム通信部インターフェース182は、受け取った通信要求がデータの送信要求である場合に、要求バッファー188からその送信要求を取り出して送信処理を行う。また、リアルタイム通信部インターフェース182は、自己診断部185から動作状況の通知(不安定動作の通知)を受けた場合には、要求バッファー188から送信要求を取り出す時間間隔を調整する。具体的には、リアルタイム通信部インターフェース182は、不安定動作の通知を受けた場合には、当該通知を受けない場合よりも、要求バッファー188から送信要求を取り出すタイミングを遅くする。一例として、リアルタイム通信部インターフェース182は、送信要求を要求バッファー188から取り出す際に所定時間の待ち(WAIT)を行う。さらに、リアルタイム通信部インターフェース182は、自己診断部185から動作状況の通知を所定時間継続して受けた場合には、通知を所定時間継続して受けない場合よりも要求バッファー188から送信要求を取り出す時間間隔をさらに調整する。一例として、リアルタイム通信部インターフェース182は、要求バッファー188から送信要求を取り出す時間間隔をさらに調整する。具体的には、その通知を所定時間継続して受けた場合には、通知を所定時間継続して受けない場合よりも、上記の待ちの時間をさらに長くする。リアルタイム通信部インターフェース182は、リアルタイム通信API共有ライブラリ193およびリアルタイム通信要求処理共有ライブラリ192を介して、アプリケーション部701との間のやり取りを行う。このようにリアルタイム通信部インターフェース182は、アプリケーション部701からの送信要求を受ける受け口である。そして、自己診断部185からリアルタイム通信部181において不安定動作が生じている旨の通知を受けると、リアルタイム通信部インターフェース182は、アプリケーション部701から届く送信フレームの処理を一時的に待たせる。つまり、リアルタイム通信部インターフェース182は、アプリケーション部701から要求バッファー188に入る送信要求が、送信バッファー184側に過大に流入しないよう制御する。つまり、要求バッファー188が大量に送信要求を受信しても、リアルタイム通信部インターフェース182は、その都度それらの送信要求を処理しない。これにより、リアルタイム通信部181の不安定動作が生じた状況においては、リアルタイム通信部インターフェース182はその不安定さを緩和させる作用を有する。
【0038】
リアルタイム通信通知部183は、リアルタイム通信要求処理共有ライブラリ192に対して通知を行う。
具体的には、リアルタイム通信通知部183は、定周期の時間通知をリアルタイム通信要求処理共有ライブラリ192に対して行う。リアルタイム通信要求処理共有ライブラリ192内のリアルタイム通信送信要求処理ロジックは、時間通知ごとに起床し、フレームを送信する処理がタイムアウトしていないか確認する。フレームの送信処理のタイムアウトは、例えばリアルタイム通信部181が送信先の外部機器からの肯定応答が返送されない等で、リアルタイム通信要求処理共有ライブラリ192に対して受信通知を用いた送信完了通知を行わないまま予め定められた時間が経過したときに発生する事象である。リアルタイム通信通知部183が送信タイムアウトに関する時間通知を行うことにより、リアルタイム通信部インターフェース182に対してフレームの再送(アプリケーション層による再送)を指示できる。
また、リアルタイム通信通知部183は、外部機器から通信処理装置1に向けて送信されたフレームを受信すると、リアルタイム通信要求処理共有ライブラリ192内のリアルタイム通信要求受付ロジックおよびリアルタイム通信受信処理ロジックに受信通知を行う。これにより、リアルタイム通信要求処理共有ライブラリ192内のリアルタイム通信受信処理ロジックは、受信したフレームを取り出すことができる。
【0039】
送信バッファー184は、送信すべきフレームのデータを少なくとも一時的に蓄積するバッファーである。リアルタイム通信部インターフェース182が、送信するフレームのデータをこの送信バッファー184に書き込む。送信バッファー184に書き込まれたフレームは、順次読み出され、外部機器に向けて送信される。なお、送信バッファー184は基本的にFIFO(先入れ先出し)であるが、フレームの優先度等に基づいて処理順序の追い越しが発生してもよい。
【0040】
自己診断部185は、リアルタイム通信部181に関するリアルタイム通信処理や状態の不安定動作を検出する。自己診断部185が不安定動作を検出すると、その旨をリアルタイム通信部インターフェース182に通知する。具体的には、自己診断部185は、リアルタイム通信処理や状態の不安定動作(例えば、CPU使用率等の処理負荷や、応答時間遅れ等)を検知し、不安定動作をしていると認められる場合にはその動作状況(不安定動作)をリアルタイム通信部インターフェース182に対して通知する。具体的には、自己診断部185は、リアルタイム通信部181の処理に関する診断指標(CPU使用率や処理応答時間等の指標値)を検知し、前記診断指標が所定範囲にある場合にはその動作状況を前記リアルタイム通信部インターフェース部に対して通知する。例えば、CPU使用率が所定の閾値を超えている場合や、処理応答時間が所定の閾値を超えている場合に、自己診断部185は、不安定動作が生じていると判断して、リアルタイム通信部インターフェース182に対する通知を行う。自己診断部185は、不安定動作を検出するために、後述する自己診断指標記憶部186を参照する。自己診断部185は、例えば、(1)CPU負荷(CPU使用率)、(2)応答性(応答時間)、をモニタリングすることにより、リアルタイム通信部181の不安定動作を検知する。これらについて次に説明する。
【0041】
(1)CPU負荷: 自己診断部185は、リアルタイム通信部181のCPU使用率の数値を、汎用OS・36から取得する。汎用OS・36は、プログラムがOS内のパフォーマンスデータを取得するためのインターフェースを設けており、そのパフォーマンスデータに、タスクごとのCPU使用率の数値が含まれる。自己診断部185は、リアルタイム通信部181のCPU使用率が予め設定された所定の閾値以上になったときに、その状況を不安定動作として検出する。
なお、自己診断部185は、他の指標に基づいて不安定動作を検出するようにしてもよい。例えば、自己診断部185が、汎用OS・36全体のCPU使用率や、当該汎用OS・36が稼働する仮想ハードウェア15に割てられるCPUコア数等の数値情報を取得してもよい。自己診断部185は、これらの数値を複数組み合わせて判定した結果が所定の閾値(例えば、CPUコアが4個の時はCPU使用率30%、8個のときはCPU使用率15%等)を超えたときに不安定動作が生じたことを検出する。
【0042】
(2)応答性: 自己診断部185は、リアルタイム通信部181の応答性が低下したときに、不安定動作が生じたものとして検出する。具体的には、自己診断部185は、リアルタイム通信部181がフレームの送信を行ったときのリトライ発生回数の情報を取得する。送信のリトライは、リアルタイム通信部181が処理を待たされる場合に発生する。リトライが多発する場合には通信のリアルタイム性が阻害されていると考えることができる。したがって、自己診断部185は、1個のフレームに対するリトライ回数が所定の閾値を超えた場合、あるいは所定時間内におけるトータルの送信リトライ回数が所定の閾値を超えた場合、その状況が不安定動作であると判定する。
【0043】
自己診断部185は、上に例示した指標以外の状況に基づいて、不安定動作を検出するようにしてもよい。なお、自己診断部185が不安定動作を検出する際の各種閾値(前述)は、下記の自己診断指標記憶部186に記憶させておくことができる。また、これらの閾値を、外部から設定可能としてもよい。
【0044】
自己診断指標記憶部186は、自己診断部185が不安定動作を検出するための指標と、その閾値とのペアを、複数組記憶する。例えば、自己診断指標記憶部186は、リアルタイム通信部181のCPU使用率に関する閾値や、送信フレームのリトライ回数に関する閾値や、その他の閾値を記憶する。
【0045】
要求バッファー188は、アプリケーション部701等からの通信要求を、少なくとも一時的に蓄積するバッファーである。リアルタイム通信要求処理共有ライブラリ192から渡される通信要求が、この要求バッファー188に書き込まれる。書き込まれる通信要求は、例えば、フレームの送信要求や受信要求などである。要求バッファー188に書き込まれたフレームは、リアルタイム通信部インターフェース182によって順次読み出され、処理される。なお、要求バッファー188は基本的にFIFO(先入れ先出し)であるが、通信要求の優先度等に基づいて処理順序の追い越しが発生してもよい。
【0046】
図2は、
図1に示した通信処理装置3の機能構成を別の側面から示すブロック図である。
図2における汎用OS・36は、
図1に示した汎用OS・36と同じものである。汎用OS・36は、ユーザー空間38とカーネル空間39とを有している。ユーザー空間38は、アプリケーション部701−1,701−2,・・・と、リアルタイム通信部181とを含む。アプリケーション部701−1,701−2,・・・と、リアルタイム通信部181とは、独立のタスクとしてユーザー空間38内で稼働する。図示するように、リアルタイム通信要求処理共有ライブラリ192の機能とリアルタイム通信API共有ライブラリ193の機能とは、本実施形態では、例えばライブラリ関数として、アプリケーション部701−1,701−2,・・・に組み込まれている。また、カーネル空間39には、前述のリアルタイム通信要求共有メモリー191と、汎用OSスケジューラー37とを含む。
【0047】
PC・31(ハードウェア)は、前述の通り、物理CPU・310と、物理NIC・312と、NICインターフェース313とを含む。
PC・31は、物理NIC・312を介して、制御ネットワーク800に接続される。制御ネットワーク800は、プロセス制御システムを構成する機器間で通信を行うためのネットワークである。制御ネットワーク800には、コントローラー801や、PC・802などといった機器が接続される。PC・31は、例えば、HMIで、制御ネットワーク800を介して、コントローラー801やPC・802との間で通信を行う。また、コントローラー801には、PC・31に対して測定データを送るとともに、PC・31からの操作量が入力される。そして、コントローラー801には、複数のフィールド機器803が接続される。コントローラー801は、フィールド機器803をコントロールすることにより、プラントの制御を行う。フィールド機器803は、例えば、流量計、温度計、湿度計、圧力計などのセンサーや、バルブ、ポンプ、アクチュエーターなどといった機器である。
【0048】
次に、上記構成を有する通信処理装置3がどのように動作し、どのようにその特有の効果が生じるかについて説明する。
【0049】
近年では、CPUの性能の向上により、汎用OS・36でも、最大レイテンシー25ミリ秒程度のリアルタイム性は確保できる。一例として、リアルタイム・プラント・ネットワーク・システムであるVnet/IP(登録商標)を用いる場合、送信等タイミングを決定する時間スロットの周期は100ミリ秒であるため、100ミリ秒以内ならば、遅れを補償する処理を行って、リアルタイム通信を継続することができる。つまり、理論上は、汎用OS上でリアルタイム通信機能を実現することは可能である。しかしながら、現実に適用するシステムにおいて、汎用OS・36上では、リアルタイム通信部181だけでなく、他の機能も並列的に動作する。ここで、他の機能とは、例えば、リアルタイム通信を行わないアプリケーションソフトウェアである。また他には例えば、リアルタイム通信を行うとともに、リアルタイム通信部181以外の通信機能を用いて非リアルタイム通信を行うアプリケーションソフトウェアなどである。
【0050】
こういったアプリケーションソフトウェア等の動作により応答性能が悪くなるのを防ぐため、応答性能を良くしたいタスク(例えば、リアルタイム通信部181のタスク)にはアプリケーションソフトウェアよりも高いタスク優先度を割り当てる手法を取り得る。
【0051】
しかしながら、既存の汎用OSのスケジューラーは、リアルタイムOSのスケジューラーとは違い、優先度の低いタスクにも必要な計算資源をそれなりに与えて並列動作させることができることを特徴とする。そのような汎用OSのスケジューラーは、優先度の低いタスクの動作を完全に止めることのないように、そのようなタスクにも所定量の計算資源を割り当てるためである。つまり、そういった汎用OSを用いて制御システムを構築すると、高優先度のタスクのリアルタイム性が、他の(低優先度の)アプリケーション等の動作により阻害される可能性がある。場合によっては、100ミリ秒のオーダーで高優先度のタスクの処理が停止してしまう可能性もある。
【0052】
汎用OSのスケジューラーは、タスクに対してCPU時間を割り当てる際、優先度の高いタスクに対してより多くのCPU時間を割り当てようとする。しかしながら、優先度の高いタスクがCPU時間を使いすぎた場合、ある種の汎用OSのスケジューラーは、優先度の高いタスクの実行を止め、その分のCPU時間を優先度の低いタスクに与える。つまり、その汎用OSのスケジューラーは、これによって管理下の全タスクの並列動作の確保を図る。スケジューラーが上記のような制御を行う場合、優先度の高いタスクが待たされ、リアルタイム性が阻害される。
【0053】
そこで、本実施形態によるリアルタイム通信部181内の自己診断部185は、リアルタイム通信部181自身の処理負荷をモニタリングする。そして、リアルタイム通信部181の処理負荷がある閾値に達したことを検知すると、自己診断部185は、リアルタイム通信部インターフェース182に対して、フレーム送信の処理の負荷を下げるよう指示する。処理負荷をモニタリングするための診断指標の一例として、自己診断部185は、リアルタイム通信部181のCPU使用率が所定の閾値を超えているか否かを検知する。この閾値は、汎用OS・36に割り当てられたCPUのコア数や、高負荷テストの結果に基づいて、外部から設定できるようにする。リアルタイム通信部インターフェース182は、処理負荷が高くなったことを示す通知を自己診断部185から受けると、リアルタイム通信部181の処理負荷を低くするための制御を行う。具体例として、リアルタイム通信部インターフェース182は、アプリケーション部701側から届くフレームの送信要求を要求バッファー188から取り出す量を抑制する。この量とは、例えば、単位時間当たりの送信フレーム数や、単位時間当たりの送信バイト数などである。例えば、リアルタイム通信部インターフェース182は、要求バッファー188から送信要求を取り出す際に、所定時間(例えば、1ミリ秒以下の範囲)、待機する。これは、リアルタイム通信部181の計算資源使用率(CPU使用率等)を下げる方向に作用する。
【0054】
上述した制御により、優先度の高いタスク(リアルタイム通信部181)の計算資源使用率(CPU使用率等)が所定値以下に抑えられる。これにより、優先度の低いタスク(アプリケーション部701等)がCPU時間を使いすぎると、汎用OSスケジューラー37は、優先度の低いタスクの実行を止め、優先度の高いタスクにCPU時間を優先的に割り当てる。つまり、自己診断部185とリアルタイム通信部インターフェース182とが連携してリアルタイム通信部181の処理負荷を所定量以下に抑制することにより、リアルタイム通信部181には常に必要なCPU時間が確保される。言い換えれば、自己診断部185とリアルタイム通信部インターフェース182とが連携してリアルタイム通信部181の不安定動作を緩和させることにより、リアルタイム通信部181には常に必要な計算時間が確保される。つまり、通信処理装置3のリアルタイム性が維持される。
上記の通り、本実施形態のリアルタイム通信部181を含んだ通信処理装置3では、リアルタイム性が阻害されない。つまり、通信処理装置3では、一度開始した他機器への通信や、自機器の存在を他機器へ通知する診断通信において、通信の停滞が生じない。
【0055】
次に、リアルタイム通信要求処理共有ライブラリ192とリアルタイム通信部181とを、別の機能部として分離する理由を説明する。
リアルタイム通信部181は、複数のアプリケーション部701からの要求に応じた処理を行う。そのため、リアルタイム通信部181への処理負荷の集中を避けることが好ましい。リアルタイム通信要求処理共有ライブラリ192とリアルタイム通信部181とを分離することによって、リアルタイム通信部181の処理負荷を軽くすることが可能となる。リアルタイム通信要求処理共有ライブラリ192の機能をアプリケーション部701に静的にリンクして実行させる場合、リアルタイム通信要求処理共有ライブラリ192の機能の処理負荷を、アプリケーション部701のタスクが負担する。したがって、アプリケーション部701は、リアルタイム通信部181の処理負荷状況を考慮することなく通信要求を行うことができる。
仮に、リアルタイム通信要求処理共有ライブラリ192の機能が、リアルタイム通信部181側のタスクに置かれていると、リアルタイム通信部181の計算資源の消費量(CPU使用率等)がアプリケーション部701の要求に左右される。これは、通信処理装置3のリアルタイム性を阻害の要因になり得る。
【0056】
リアルタイム通信要求処理共有ライブラリ192の機能を、リアルタイム通信部181から独立させた構成とすることにより、次のような状況が生じる。即ち、アプリケーション部701等からの通信要求が多発した際でも、それらの通信要求はリアルタイム通信部インターフェース182の要求バッファー188に蓄積される。したがって、リアルタイム通信部181は、抑制されたペースでしか通信要求の処理を行わない。よって、通信処理装置3のリアルタイム性は維持される。
【0057】
次に、通信処理装置3内の機能の処理手順について説明する。
図3は、リアルタイム通信部181内のリアルタイム通信部インターフェース182の動作手順を示すフローチャートである。以下、このフローチャートに沿って説明する。
【0058】
まず、ステップS11において、リアルタイム通信部インターフェース182は、自己診断部185から不安定動作の通知が直近においてあったか否かを判定する。不安定動作の通知があった場合(ステップS11:YES)にはステップS12に進み、不安定動作の通知がなかった場合(ステップS11:NO)にはステップS15に進む。
【0059】
ステップS12に進んだ場合、同ステップにおいて、リアルタイム通信部インターフェース182は、過去からの所定時間、不安定動作の通知を継続して受けていたか否かを判定する。不安定動作の通知を継続して受けていた場合(ステップS12:YES)はステップS13に進み、継続していなかった場合(ステップS12:NO)にはステップS14に進む。
【0060】
ステップS13に進んだ場合、同ステップにおいて、リアルタイム通信部インターフェース182は、指定時間に所定の時間を加算する。この指定時間とは、ステップS14においてリアルタイム通信部インターフェースが待つ際に指定される時間である。なお、本ステップで加算される時間は正の値である。つまり、本ステップの処理において、リアルタイム通信部インターフェース182は、指定時間を増加させる。
【0061】
ステップS14に進んだ場合(ステップS12またはS13から)、同ステップにおいて、リアルタイム通信部インターフェース182は、指定時間分のWAITを行う。このWAITにより、リアルタイム通信部インターフェース182は、次のステップに移る前に指定時間分、待つ。リアルタイム通信部インターフェース182が本ステップにおいて待つ間、計算資源は、リアルタイム通信部181内の他の処理やアプリケーション部701の処理に割り当てられ、WAITがない状態と比較してリアルタイム通信部181の処理負荷が低減される。リアルタイム通信部インターフェース182が待ち始めてから上記指定時間が経過すると、再びリアルタイム通信部インターフェース182に計算資源が割り当てられ、次のステップの処理に進む。ステップS14の処理の終了後には、ステップS16に進む。
なお、こういった計算資源の割当制御は、本実施形態においては汎用OSスケジューラー17が行う。
【0062】
ステップS15に進んだ場合、同ステップにおいて、リアルタイム通信部インターフェース182は、指定時間を初期値にリセットする。つまり、それまでの処理においてステップS13での指定時間の加算が行われていた場合にも、不安定動作の通知がなくなったことにより、指定時間を一旦、元の初期値に戻す。
なお、ステップS11において「NO」(不安定動作通知なし)と判断されたときに直ちにステップS15における指定時間リセットの処理を行う代わりに、「不安定動作通知なし」の状態が所定時間継続した場合にのみステップS15において指定時間をリセットするようにしてもよい。
ステップS15の処理の終了後には、ステップS16に移る。
【0063】
次に、ステップS16において、リアルタイム通信部インターフェース182は、アプリケーション部701−1や701−2など(アプリ)から要求された送信フレームがあるか否かを判定する。具体的には、リアルタイム通信部インターフェース182は、要求バッファー188を参照することにより、送信フレームの有無を判定する。送信フレームがある場合(ステップS16:YES)、次のステップS17に進む。送信フレームがない場合(ステップS16:NO)、ステップS19に飛ぶ。
【0064】
ステップS17に進んだ場合、同ステップにおいて、リアルタイム通信部インターフェース182は、要求バッファー188から1つの送信フレームを取り出す。ただし、複数の送信フレームをまとめて取り出して送信できる場合には、リアルタイム通信部インターフェース182は、予め定められた所定数以下の送信フレームを要求バッファー188から取り出す。なお、要求バッファー188内の送信フレームは、送信バッファー184への転送が成功した後に適宜削除される。
続いて、ステップS18において、リアルタイム通信部インターフェース182は、ステップS17で取り出した送信フレームを、送信バッファー184に格納する。
なお、送信バッファー184に格納された送信フレームを、リアルタイム通信部181は順次送信する(
図4参照)
【0065】
次に、ステップS19において、リアルタイム通信部インターフェース182は、リアルタイム通信部181の処理を終了すべきか否かを判定する。リアルタイム通信部181の処理を終了するのは、例えば、通信処理装置1内における上位の管理機能から終了を指示された場合や、オペレーター等から終了コマンドが入力された場合や、エラー事象等による割込みを解析した結果として終了すべきと判断される場合などである。リアルタイム通信部181を終了させる場合(ステップS19:YES)には、本フローチャート全体の処理を終了する。リアルタイム通信部181を終了させない場合(ステップS19:NO)には、ステップS11に戻って、上述した処理を繰り返す。
【0066】
なお、ステップS14において待つ時間(指定時間)は、予め定めておいた初期値と、ステップS13において加算される加算値によって定まる。この加算値も、予め定めておくことができる。不安定動作通知が所定時間継続する状況が連続的に続く場合には、ステップS13における指定時間の加算を複数回繰り返してもよい(ステップS19からステップS11に処理が戻ることによる繰り返し)。
また、ステップS13で指定時間の加算を行う場合も含めて、S14において待つ時間(指定時間)の下限や上限を予め定めておいてもよい。上限が定められている場合、ステップS13における加算の結果は、当該上限値より大きくはならない。
また、ステップS14において待つ時間を、不安定動作通知の内容を加味して決定してもよい。ステップS14において待つ時間は、計時による値に限定されず、例えば「不安定動作が解消した」等の、何らかの状態変化が発生するまで待ち続ける動作であってもよい。
【0067】
また、ステップS12において不安定動作の通知が所定時間継続しているか否かを判断するが、その具体的な判断方法の一例は、次の通りである。つまり、ステップS11において不安定動作通知の有無を判定するが、直近の過去m回のステップS11での判断の内、n回以上「YES」(不安定動作通知あり)と判定され、且つ直近の回においても「YES」(不安定動作通知あり)と判定された場合に、「所定時間継続」(ステップS12:YES)と判定される。なお、m,nはそれぞれ予め定められる整数であり、1≦n≦mである。
【0068】
図3に示したフローチャートでは、不安定動作の状況が継続する場合には、その間のステップS11での判断結果は常に「YES」である。その場合、要求バッファー188からの送信要求の取り出しにはステップS14における待ちを伴う。要求バッファー188からの送信要求の取り出しの頻度と要求バッファー188への送信要求の到着の頻度との関係次第では、送信要求が要求バッファー188において待たされる時間はリアルタイム通信要求処理共有ライブラリ192内のリアルタイム通信送信要求処理ロジックがフレーム送信処理をタイムアウトと認識する時間に達する場合もあり得る。こういった場合も含め、リアルタイム通信部インターフェース182は、不安定動作の状況が解消されるまで、送信要求の処理量を抑制する。
【0069】
図4は、リアルタイム通信部181の動作手順を示すフローチャートである。以下、このフローチャートに沿って説明する。
【0070】
ステップS21において、リアルタイム通信部181は、送信バッファー184に送信フレームが書き込まれているか否かを判定する。送信バッファー184に送信フレームがある場合(ステップS21:YES)には、次のステップS22に進む。送信バッファー184に送信フレームがない場合(ステップS21:NO)には、ステップS26に飛ぶ。
【0071】
ステップS22に進んだ場合、リアルタイム通信部181は、送信バッファー184から1つの送信フレームを取り出し、そのフレームを送信する。ただし、複数の送信フレームをまとめて取り出して送信できる場合には、リアルタイム通信部181は、予め定められた所定数以下の送信フレームを送信バッファー184から取り出して、それらのフレームを送信する。
ステップS23において、リアルタイム通信部181は、ステップS22においてフレームを送信した相手(フレームの受信側)からの肯定応答(Ack,acknowledgement)が到着するのを所定時間待つ。
【0072】
ステップS24において、リアルタイム通信部181は、待っている肯定応答が到着したか否かを判定する。肯定応答の到着があった場合(ステップS24:YES)、つまり、そのフレームが相手側で受信されたことが確認された場合、ステップS25に進む。肯定応答の到着がなかった場合(ステップS24:NO)、つまり、送信したフレームに対応する否定応答が到着した場合や、待っている肯定応答がタイムアウトした場合には、ステップS26に飛ぶ(つまり、ステップS25における処理をスキップする)。
ステップS25において、リアルタイム通信部181は、送信が成功したフレーム、つまり肯定応答が得られた送信フレームを、送信バッファー184から消去する。
なお、一定処理回数の間に肯定応答の到着がなかった場合には、リアルタイム通信部181は、送信先が通信できない状況と判断してもよい。この場合、リアルタイム通信部181は、送信バッファーから送信フレームを消去し、送信を失敗させてもよい。
【0073】
ステップS26において、リアルタイム通信部181は、リアルタイム通信部181自身の処理を終了すべきか否かを判定する。リアルタイム通信部181の処理を終了する状況とは、
図3のステップS19において説明した通りである。リアルタイム通信部181を終了させる場合(ステップS26:YES)には、本フローチャート全体の処理を終了する。リアルタイム通信部181を終了させない場合(ステップS26:NO)には、ステップS21に戻って、上述した処理を繰り返す。
【0074】
以上説明したように、本実施形態によれば、次の作用が得られる。
即ち、通信処理装置3では、リアルタイム通信部181の処理負荷に基づいて、リアルタイム通信部181の処理量を調整する。具体的には、例えば、処理すべき要求が流入するリアルタイム通信部181の処理のペースを、相対的に早くしたり遅くしたりするなどといった調整を行う。この調整は、自己診断部185が検出する処理負荷の重さに基づいて行う。具体的には、例えば、リアルタイム通信部181が要求バッファー188から取り出す通信要求の量(あるいは処理すべきデータの量)を調整し、処理にかかるCPU使用時間を増減する。これにより、非リアルタイム処理でもよいアプリケーション部701の処理と、リアルタイム処理であることが求められるリアルタイム通信部181との間で、ロードバランシングが可能になる。上記の作用により、通信処理装置3の処理のリアルタイム性が確保される。
【0075】
また、本実施形態では、リアルタイム通信部181に対する、汎用OSスケジューラー37が行うタスクの調停による、リアルタイム性の阻害を防ぐことができる。つまり、リアルタイム通信部181の処理負荷が高まった(例えばCPU使用率が所定レベルより高くなった)ことに起因してリアルタイム通信部181へのCPU時間の割り当てが下げられる状況を回避することができる。
また、リアルタイム通信要求処理共有ライブラリ192のロジックをアプリケーション部701側のタスクで実行する場合、そのロジックの処理の負荷がリアルタイム通信部181にかからず、通信処理装置3のリアルタイム性の阻害を防げる状態を保つことができる。
また、処理負荷のバランシングを行うことで、リアルタイム通信部181が一度開始した他機器への通信や、自機器の存在を他機器へ通知する診断通信が滞ることを防ぐことができる。
また、リアルタイム通信要求処理共有ライブラリ192やリアルタイム通信部181は汎用OSのカーネル空間のモジュール(デバイスドライバ)ではないので、デバイスドライバで発生するメンテナンス問題あるいは互換性問題を回避できる。
【0076】
[第2実施形態]
次に、本発明の第2実施形態について説明する。なお、前実施形態において既に説明した事項については以下において説明を省略する場合がある。ここでは、本実施形態に特有の事項を中心に説明する。
【0077】
図5は、第2実施形態による通信処理装置の機能構成の一部を示す機能ブロック図である。図示するように、通信処理装置1は、PC上で稼働する仮想ハードウェア15と、仮想ハードウェア15上で稼働するゲストOS・16とを含む。なお、ゲストOS・16は、第1実施形態と同様の汎用OSであってよい。本実施形態の特徴は、仮想化部12を設けることにより、PC・11上で複数の仮想ハードウェア15を稼働させ、各仮想ハードウェア15上で前述のゲストOS・16を稼働させるようにした点である。
【0078】
ゲストOS・16は、ユーザー空間18とカーネル空間19とを有する。
カーネル空間19には、汎用OSスケジューラー17と、リアルタイム通信要求共有メモリー191とが存在する。
汎用OSスケジューラー17は、ユーザー空間18内で稼働する複数のタスクをスケジューリングする。つまり、汎用OSスケジューラー17は、計算資源を、ユーザー空間18内の各タスクに割り当てる。本実施形態においても、ゲストOS・16はリアルタイム制御用のOSではなく、汎用OSスケジューラー17はリアルタイムスケジューラーではない。なお、同図では1つのユーザー空間18のみを示しているが、汎用OSスケジューラー17が複数のユーザー空間18を管理するものであってもよい。
【0079】
ユーザー空間18内には、アプリケーション部701−1,701−2,・・・と、リアルタイム通信部181とが存在する。
アプリケーション部701−1,701−2,・・・には、リアルタイム通信要求処理共有ライブラリ192やリアルタイム通信API共有ライブラリ193が有するライブラリ関数の機能が組み込まれている。
リアルタイム通信部181は、アプリケーション部701−1,701−2,・・・から独立のタスクとして稼働する。
【0080】
図6は、本実施形態により、PCを仮想化し、複数の仮想ハードウェア上でそれぞれゲストOSを稼働させるための機能を中心として示した通信処理装置1全体のブロック図である。図示するように、通信処理装置1は、PC(パーソナルコンピューター)上で稼働する仮想ハードウェア15と、仮想ハードウェア15上で稼働するゲストOS・16とを含む。
【0081】
同図におけるゲストOS・16−1および16−2は、それぞれ、
図5に示したゲストOS・16と同様のものである。ここでは、2個のゲストOSが稼働している状況を示しているが、ゲストOSの個数は任意であり、1個でもよく、3個以上であってもよい。また、仮想ハードウェア15−1および15−2は、それぞれ、
図5に示した仮想ハードウェア15と同様のものである。仮想ハードウェア15−1の上でゲストOS・16−1が稼働し、仮想ハードウェア15−2の上でゲストOS・16−2が稼働する。仮想ハードウェア15が3個以上含まれる場合、同様に、各々の仮想ハードウェア15上でゲストOS・16が稼働可能である。
【0082】
また、
図6に示すように、通信処理装置1は、PC・11を用いて実現される。PC・11は、演算装置や、メモリーや、通信用のインターフェース機能など、通常のコンピューターが有する機能を持つ。PC・11上では、ソフトウェアで実現される機能が、実行可能形式のプログラムとして適切な記憶領域に記憶される。また、それらのプログラムが、適宜、演算装置(下記の物理CPU・110)によって実行される。
【0083】
PC・11は、ハードウェアとして、物理CPU・110と、汎用NIC・112と、NICインターフェース113とを含んで構成される。
【0084】
物理CPU・110は、内部にコア111−1,111−2,111−3,・・・を含む。なお、物理CPU・110に含まれるコアの個数は任意である。各々のコア111は、プログラムに含まれる命令を順次フェッチして、実行する。また、PC・11が複数の物理CPU・110を備える構成としてもよい。
汎用NIC・112は、PC・11上のプログラム等からの通信の要求を受け、実行するものである。汎用NIC・112は、PC・11に接続されているネットワークを介して、外部の機器との間で通信を行う。
NICインターフェース113は、PC・11上のプログラム等と汎用NIC・112との間のインターフェースを提供するものである。
【0085】
また、PC・11は、仮想化部12の機能を備える。仮想化部12は、ハードウェアとソフトウェアとが協調する形で実現される。仮想化部12は、内部に、仮想化部スケジューラー14と、複数の仮想ハードウェア15とを含んでいる。
【0086】
仮想化部スケジューラー14は、物理CPU・110内の複数のコア111のCPU時間を、複数の仮想ハードウェア15内の仮想CPUコア151に適宜割り当てる。
【0087】
仮想ハードウェア15は、仮想化部12の機能によって実現される仮想的なコンピューターハードウェアである。仮想ハードウェア15は、少なくとも、仮想CPUと仮想メモリーとを有する。また、仮想ハードウェア15は、通信を行うためのネットワークインターフェース機能を有する。仮想ハードウェア15におけるこれらの仮想資源は、仮想化部12を通して、実際の物理的なコンピューターハードウェア資源に対応付けられる。
仮想ハードウェア15の内部構成は次の通りである。即ち、例えば、仮想ハードウェア15−1は、仮想CPUコア151−1と、仮想NIC・152−1と、NICインターフェース153−1とを含む。また、仮想ハードウェア15−2は、仮想CPUコア151−2と、仮想NIC・152−2と、NICインターフェース153−2とを含む。仮想ハードウェア15−3(またはそれ以後)が存在する場合、各々の仮想ハードウェアは仮想ハードウェア15−1等と同様の構成を有する。なお、仮想ハードウェア15の内部の機能は、仮想化技術によって実現される機能である。
なお、図面等では仮想ハードウェアおよびその内部の構成要素の符号にサフィックス(1,2等)を付けているが、以下において、単に、仮想ハードウェア15、仮想CPUコア151、仮想NIC・152、NICインターフェース153等と呼ぶ場合がある。
【0088】
仮想CPUコア151−1,151−2等は、それぞれ、仮想化部12によって実現される仮想的なCPUコアである。仮想CPUコア151は、仮想化部12のタスクの一つであり、仮想化部スケジューラー14がそのタスクに対して物理CPUのコアを割り当てることで、仮想CPUコア151に割り当てられたプログラムを動作させ、仮想CPUコアの機能を実現する。仮想ハードウェア15をマルチコアにする場合には、仮想化部12は、複数のコア111を複数の仮想CPUコア151に対応付けて、各々のタスクを仮想CPUコア151上で並列に動作させる。各々の仮想CPUコア151には、専用の物理CPU110のコア111が割り当てられる。つまり、ある仮想CPUコア151に割り当てられるコア111は、他の仮想CPUコア151に割り当てられるコアや、仮想化部12の処理に割り当てられるコア111とは異なる。これにより、複数の仮想ハードウェア15の間で計算資源、特にCPU資源が競合しないため、ゲストOS・16のリアルタイム性を確保しやすくなる。
なお、ユーザー(通信処理装置1の管理者)が、仮想化部12を管理するためのツールを用いて、物理CPU・110内のコア111の仮想CPUコア151への割り当てを設定することができる。本実施形態では、仮想CPUコア151へのコア111の割り当て数を含む仮想ハードウェア15それぞれの仮想資源の構成は、基本的に固定的なものである。ただし、仮想化部12の実装により、仮想ハードウェア15の動作中にも、ツールを用いた設定により、仮想CPUコア151の割り当て数を含む仮想資源の構成を仮想の計算資源を増やす方向に変更できる場合がある。なお、仮想ハードウェア15の動作中に計算資源の減らす方向に仮想資源の構成を変更することは、突然の計算資源の減少がリアルタイム性に悪影響を与えるため、原則としてできない。
【0089】
仮想ハードウェア15が要求する仮想資源よりも物理的なコンピューターハードウェア資源の方が少なく、割り当てるべき計算資源が足りない場合、少なくとも一部の複数の仮想ハードウェアで計算資源を共有させることもできる。これをオーバーコミットと言う。しかし、オーバーコミットを行うと、ある仮想ハードウェア15の処理が高負荷になったときに、その仮想ハードウェア15と計算資源を共有する他の仮想ハードウェア15に計算資源を充分に割り当てられない場合があり得る。このような状況はゲストOS・16のリアルタイム性を阻害する可能性がある。よって、実施に当たってオーバーコミットを行わない。
つまり、本実施形態において、ゲストOS・16(汎用OS)は、仮想ハードウェア15上で稼働するものである。また、複数の仮想ハードウェア15が、物理コアを共有しないよう構成した。言い換えれば、複数の仮想ハードウェアが、仮想ハードウェアに対して個々に割り当てられるCPU資源(中央処理装置資源)を共有しないよう構成した。これにより、各ゲストOS・16での処理にリアルタイム性を確保することができる。
【0090】
仮想NIC・152−1,152−2等は、それぞれ、仮想ハードウェア15−1,15−2等における仮想的なネットワークインターフェースカードである。仮想NIC・152の機能は、仮想化部12によって実現されるものである。つまり、ゲストOS・16側からの仮想NIC・152への通信要求は、PC・11が備える汎用NIC・112に引き継がれる。
また、NICインターフェース153−1,153−2等は、それぞれ、ゲストOS・16−1,16−2側から上記の仮想NIC・152−1,152−2等にアクセスするためのインターフェースである。
【0091】
図6に示す例では、ゲストOS・16−1上で、アプリケーション部701−11および701−12が稼働する。また、ゲストOS・16−2上で、アプリケーション部701−13が稼働する。
アプリケーション部701−11は、例えば、HMI(ヒューマンマシンインターフェエース)である。
アプリケーション部701−12は、例えば、ENG(エンジニアリングサーバー)である。
アプリケーション部701−13は、例えば、コントローラーである。
ゲスト・OS16−1および16−2のそれぞれにおいてリアルタイム通信部181も稼働するが、ここではリアルタイム通信部181の図示を省略している。
【0092】
第1実施形態における場合と同様に、本実施形態においても、PC・11は、汎用NIC・112を介して、制御ネットワーク800に接続される。制御ネットワーク800は、プロセス制御システムを構成する機器間で通信を行うためのネットワークである。制御ネットワーク800には、コントローラー801や、PC・802などといった機器が接続される。PC・11は、例えば、HMIで、制御ネットワーク800を介して、コントローラー801やPC・802との間で通信を行う。また、コントローラー801には、PC・11に対して測定データを送るとともに、PC・11からの操作量が入力される。そして、コントローラー801には、複数のフィールド機器803が接続される。コントローラー801は、フィールド機器803をコントロールすることにより、プラントの制御を行う。フィールド機器803は、例えば、流量計、温度計、湿度計、圧力計などのセンサーや、バルブ、ポンプ、アクチュエーターといった機器である。
【0093】
本実施形態においては、仮想化部12により、1台のPC・11上で複数のゲストOS・16を稼働させている。また、各ゲストOS・16で稼働するリアルタイム通信部181の機能により、第1実施形態と同様に、各ゲストOS・16上で稼働する機能のリアルタイム性を確保している。
【0094】
また、本実施形態においては、リアルタイム通信部181がゲストOS・16上で稼働する構成としているため、仮想化部12がプロプライエタリ・ソフトウェアであり、仮想化部に機能拡張を行えない場合にも、リアルタイム制御通信が可能である。
【0095】
[第3実施形態]
次に、本発明の第3実施形態について説明する。なお、前実施形態までにおいて既に説明した事項については以下において説明を省略する場合がある。ここでは、本実施形態に特有の事項を中心に説明する。
【0096】
第1実施形態および第2実施形態においては、リアルタイム通信要求処理共有ライブラリ192からアクセスするためのリアルタイム通信要求共有メモリー191を設けていた。アプリケーション部701からの通信要求は、一時的にリアルタイム通信要求共有メモリー191内のバッファーに格納されていた。しかしながら、リアルタイム通信要求共有メモリー191は、どのアプリケーション部701からも読み書き可能である。つまり、あるアプリケーション部701が、他のアプリケーション部701の通信要求に干渉する可能性があるという、セキュリティ上の問題が懸念される。ここで言う「干渉」とは、通信要求を無断で読み取ったり、書き換えてしまったりといった事象である。
【0097】
上記の懸念を解消するため、本実施形態では、ユーザー空間18内に、アプリケーション代理部291を設ける。
図7は、本実施形態による通信処理装置2の一部の機能構成を示す機能ブロック図である。
図7に示すゲストOS・16は、第2実施形態と同様に(
図6を参照)、仮想ハードウェア15の上で稼働する。本実施形態による通信処理装置2では、
図7に示すように、ユーザー空間18内において、アプリケーション部701−1,701−2,・・・と、リアルタイム通信API共有ライブラリ193と、アプリケーション代理部291と、リアルタイム通信部181との各機能が稼働する。
これらのうち、アプリケーション部701−1,701−2,・・・と、リアルタイム通信API共有ライブラリ193と、リアルタイム通信部181との各部の機能は、それぞれ、第1実施形態および第2実施形態におけるそれらと同様の機能を有するものである。
【0098】
本実施形態に特有の機能であるアプリケーション代理部291は、アプリケーション部701から独立したタスクとして動作する。そして、アプリケーション代理部291は、アプリケーション部701からの通信要求を受け付け、受け付けた通信要求を当該タスク内の専用の(私的な)記憶部であるリアルタイム通信要求タスク内メモリー293に一旦格納してから、リアルタイム通信要求タスク内メモリー293から取り出した通信要求をリアルタイム通信部181に渡す。アプリケーション代理部291は、内部にリアルタイム通信要求タスク内メモリー293を有し、このリアルタイム通信要求タスク内メモリー293を、第1実施形態および第2実施形態におけるリアルタイム通信要求共有メモリー191の代替手段として使用する。つまり、アプリケーション代理部291は独立したタスクであり、リアルタイム通信要求タスク内メモリー293はその専用のメモリー領域内に設けられる。これにより、他のタスク(例えば、アプリケーション部701)は、リアルタイム通信要求タスク内メモリー293に干渉(読み書き)することができない。したがって、リアルタイム通信要求タスク内メモリー293内のバッファーに蓄えられる通信要求は、アプリケーション代理部291のみによって読み書き可能であり、安全性が確保される。
【0099】
アプリケーション代理部291は、リアルタイム通信要求処理ライブラリ292と、リアルタイム通信要求タスク内メモリー293と、アプリケーション要求処理部294−1,294−2,・・・を含んで構成される。なお、アプリケーション要求処理部294−1,294−2,・・・を単に「アプリケーション要求処理部294」と呼ぶ場合もある。
【0100】
リアルタイム通信要求処理ライブラリ292は、第1実施形態および第2実施形態におけるリアルタイム通信要求処理共有ライブラリ192と同様の機能を有するものである。つまり、リアルタイム通信要求処理ライブラリ292は、アプリケーション部701からのデータ送信やデータ受信の要求を受け取り、それらの通信処理をリアルタイム通信部181に要求する。ただし、本実施形態におけるリアルタイム通信要求処理ライブラリ292は、アプリケーション代理部291のタスクの中で動作する。つまり、リアルタイム通信要求処理ライブラリ292は、第1実施形態や第2実施形態におけるリアルタイム通信要求処理共有ライブラリ192と異なり、複数のアプリケーション部701によって共有されるものではない。また、リアルタイム通信要求処理ライブラリ292は、タスク間共有メモリーではなく、アプリケーション代理部291のタスクの専用領域(私的領域)に設けられたリアルタイム通信要求タスク内メモリー293にアクセスする。つまり、リアルタイム通信要求処理ライブラリ292は、リアルタイム通信要求タスク内メモリー293内のバッファーに要求を書き込んだり、同バッファーから要求を取り出したりする。
【0101】
リアルタイム通信要求タスク内メモリー293は、アプリケーション代理部291のタスクの専用領域に属するメモリーである。前述の通り、リアルタイム通信要求タスク内メモリー293は、通信要求を一時的に格納するためのバッファーを持つ。
【0102】
アプリケーション要求処理部294−1,294−2,・・・は、それぞれ、アプリケーション部701−1,701−2,・・・に対応して設けられる。アプリケーション要求処理部294−1は、アプリケーション部701−1からの送信や受信の要求をハンドリングし、リアルタイム通信要求処理ライブラリ292の機能への橋渡しの役割を果たす。アプリケーション要求処理部294−2以後についても同様である。なお、アプリケーション要求処理部294の個数は任意であり、その個数は、アプリケーション部701の数に対応して変化し得る。
ただし、1つのアプリケーション部701に対して複数のアプリケーション要求処理部294を対応付けるようにしてもよい。その場合、例えば、通信種別毎あるいは通信方向毎に、それぞれアプリケーション要求処理部294を設けることができる。複数のアプリケーション要求処理部294は、タスクに割り当てられた計算資源を用いて、互いに並列に動作する(この並列に動作する実行体を一般的にはスレッドと呼ぶ)。
【0103】
アプリケーション部701とアプリケーション要求処理部294との間や、リアルタイム通信要求処理ライブラリ292とリアルタイム通信部181との間では、プロセス間通信(IPC,Interprocess Communication)により、通信要求やその応答の受け渡しが行われる。
【0104】
なお、
図7に示す形態では、リアルタイム通信部181のリアルタイム通信通知部183からリアルタイム通信要求処理ライブラリ292へ、時間通知と受信通知の2種類の通知が行われる。その変形例として、時間通知に関しては、アプリケーション代理部291自身が、自タスク内でタイマーをセットし、そのタイマーの満了等により時間通知を受けるようにしてもよい。この場合、リアルタイム通信部181のリアルタイム通信通知部183からリアルタイム通信要求処理ライブラリ292へは、受信通知のみが行われ、時間通知は不要である。
【0105】
図8は、本実施形態による通信処理装置の機能構成の一部を示す機能ブロック図である。図示するように、通信処理装置2は、PC上で稼働する仮想ハードウェア15と、仮想ハードウェア15上で稼働するゲストOS・16とを含む。なお、ゲストOS・16は、第1実施形態および第2実施形態と同様の汎用OSであってよい。本実施形態における仮想ハードウェア15の実現方法は、第2実施形態におけるそれと同様である(
図6を参照)ため、ここでは詳細な説明を省略する。
【0106】
ゲストOS・16は、ユーザー空間18とカーネル空間19とを有する。
カーネル空間19には、汎用OSスケジューラー17と、共有メモリー199とが存在する。
汎用OSスケジューラー17は、ユーザー空間18内で稼働する複数のタスクをスケジューリングする。つまり、汎用OSスケジューラー17は、計算資源を、ユーザー空間18内の各タスクに割り当てる。本実施形態においても、ゲストOS・16はリアルタイム制御用のOSではなく、汎用OSスケジューラー17はリアルタイムスケジューラーではない。
共有メモリー199は、タスク間で共有する情報がある場合に適宜用いられる。本実施形態では、なお、アプリケーション代理部291内にリアルタイム通信要求タスク内メモリー293を持つ。よって、アプリケーション部701からの通信要求を一時的に格納するための記憶部をこの共有メモリー199内に持つ必要はない。
【0107】
ユーザー空間18内には、アプリケーション部701−1,701−2,・・・と、アプリケーション代理部291と、リアルタイム通信部181とが存在する。
アプリケーション部701−1,701−2,・・・には、リアルタイム通信API共有ライブラリ193が有するライブラリ関数の機能が組み込まれている。本実施形態では、アプリケーション代理部291がアプリケーション部701−1,701−2,・・・から独立のタスクとして稼働している。つまり、アプリケーション部701−1,701−2,・・・自体は、第2実施形態とは異なり、リアルタイム通信要求処理共有ライブラリ192の機能を含んでいない。
【0108】
なお、本実施形態においては、仮想ハードウェア15上でゲストOS・16(汎用OS)を稼働させ、そのユーザー空間18においてアプリケーション代理部291を設けた。しかしながら、仮想化技術を用いず、PC(ハードウェア)上で直接、汎用OSを稼働させ、そのユーザー空間において、本実施形態と同様にアプリケーション代理部を設けるようにしてもよい。
【0109】
以上説明したように、本実施形態によれば、通信処理装置2が外部の他の装置との間で通信するフレームが共有メモリー上のバッファーに置かれない。その代わりに、アプリケーション代理部291のタスク内のメモリー空間上のバッファー(リアルタイム通信要求タスク内メモリー293内のバッファー)が用いられる。これにより、例えばアプリケーションソフトウェア間における干渉等の悪影響が生じないようにすることができる。つまり、例えば、送受信フレームの改ざんや覗き見等の懸念から、アプリケーションを保護することができる。
【0110】
以上説明したいずれかの実施形態によれば、プロセス制御等を行うための通信処理装置の通信機能を汎用OS上で実現することができる。つまり、専用ハードウェアなしで通信処理装置を実施できるようになる。これにより、専用ハードウェアを必要としないため、仮想PC(仮想ハードウェア15)上でも通信処理装置を実施できるようになる。プロセス制御のための通信ではリアルタイム性が特に重要である。システム内に存在する例えば1つの機器でリアルタイム性が阻害されて、制御通信の送受信が遅延すると、通信相手の機器が反応し、通信の再送を実施する。この再送処理は、再送処理を行う機器にとって本来は行う必要のない余計な処理である。つまり、再送処理が発生すると、システム内の計算資源を浪費することにつながり得る。また、再送処理が多発すると、計算資源や通信路の帯域が浪費されることにより、本来行うべき通信を行えなくなる。これにより、最初にリアルタイム性が阻害された機器だけでなく、他の複数の機器にも連鎖的に影響が広がる可能性がある。
【0111】
このような連鎖的影響がシステム内で出ないようにするために、次の2つの点を満たすように通信処理装置を構成する。
1)リアルタイム通信部181が一度開始した他機器への通信(フレームの送信)は、通信の所定シーケンスが完了するまで滞らないことが必要である。所定シーケンスの完了とは、例えば、送信した相手からの肯定応答(Ack)の受信である。
2)自機器(通信処理装置)の存在を他機器へ通知するための診断通信が滞らないようにする。この診断通信が滞ってしまうと、自機器は、他機器から、少なくとも一時的に不存在であるかのように見える。
【0112】
そして、これらの実施形態では、自己診断部185が不安定動作を検出し、処理負荷増の通知に応じてリアルタイム通信部インターフェース182が要求バッファー188から要求を取り出す時間間隔(ペース)を変える。これにより、リアルタイム通信部181の処理負荷が高くなり過ぎず、処理に必要な計算資源が充分に与えられる。そのため、スケジューラーとして、リアルタイムスケジューラーの機能を持たない汎用OS(例えば、マイクロソフト社のWindows)のスケジューラーを利用することができる。そしてその場合にもリアルタイム性は阻害されない。
なお、リアルタイム通信部181には高い優先度を割り当てる。
通常、汎用OSにおいては、高優先度のタスクに計算資源が集中した場合、低優先度タスクの動作を維持するため、高優先度タスクの計算資源を低優先度タスクに分配する。そのように高優先度タスクの計算資源が供給されなくなると、通信処理装置として、リアルタイム性が維持できなくなる可能性もある。しかしながら、上で説明した各実施形態では、リアルタイム通信部181は、高優先度を割り当てつつ、かつ、計算資源の使用(CPU使用率等)を抑えるロジックを組み込んでいる。したがって、アプリケーション部701等の、リアルタイム通信部181以外の各部が、計算資源を多用しようと試みても、スケジューラーは計算資源の割り当てを抑制する。この動作により、リアルタイム通信部181以外の各部の処理能力は低下するものの、高優先度タスク(リアルタイム通信部181)への計算資源の分配が損なわれることはなく、つまりリアルタイム通信部181の計算資源は維持され、リアルタイム性を維持することが可能となる。
【0113】
また、通信処理装置が仮想化部12を備える場合において、仮想化部12をプロプライエタリ・ソフトウェアで実現する場合でも、リアルタイム性を維持した通信が行える。
また、汎用OSのスケジューラーを利用してシステムを実現可能であり、その場合にもリアルタイム通信部181に充分な計算資源が与えられる。
また、デバイスドライバを用いずにリアルタイム通信部181やリアルタイム通信要求処理共有ライブラリ192等を、実現することが可能である。つまり、システム(ソフトウェア)の開発および保守が容易になる。
また、リアルタイム通信部181に対して、CPUコアの固定的な割り当てを行わずにリアルタイム通信が行うことが可能となる。
また、通信処理装置におけるリアルタイム通信性の阻害を回避できるため、その通信処理装置の影響でシステム内の他の機器における通信リアルタイム性の阻害も回避することが可能となる。
また、専用通信カードが必要であった制御通信(リアルタイム通信)を、汎用通信カードと汎用OS上とで実現することが可能となる。
【0114】
以上、複数の実施形態を説明したが、本発明はさらに次のような変形例でも実施することが可能である。
例えば、
図6に示した構成において、PC・11は、汎用NIC・112とNICインターフェース113との組を1組だけ備えていた。変形例として、PC・11が、汎用NIC・112とNICインターフェース113との組を複数組備えるようにしてもよい。つまり、PC・11が、物理的な(物理層の)ネットワークに接続される通信の系統を複数持つようにしてもよい。このとき、これら複数の通信系統を、PC・11が同時に使用して通信を行うようにしてもよい。また、これら複数の通信系統を、冗長構成と見なして、PC・11が、いずれかの通信系統に障害等が生じた場合に他の通信系統を用いた通信を行うようにしてもよい。なお、ここでは、
図6の構成における汎用NIC・112とNICインターフェース113との組の数について述べたが、
図1や
図2(第1実施形態)におけるPC・31の、物理NIC・312とNICインターフェース313との組の数についても同じことが言える。つまり、物理NIC・312とNICインターフェース313との組の数を、単数としてもよいし複数としてもよい。
【0115】
なお、上述した各実施形態およびその変形例における通信処理装置の機能(またはその一部)をコンピュータープログラムで実現する場合、その機能のプログラムをコンピューター読み取り可能な記録媒体に記録しておく。そして、この記録媒体に記録されたプログラムをコンピューターシステムに読み込ませ、実行させるようにする。なお、ここでいう「コンピューターシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピューター読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM、DVD−ROM、USBメモリー等の可搬媒体、コンピューターシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピューター読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、一時的に、動的にプログラムを保持するもの、その場合のサーバーやクライアントとなるコンピューターシステム内部の揮発性メモリーのように、一定時間プログラムを保持しているものも含んでも良い。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピューターシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
【0116】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。