(57)【要約】【課題】ネットワークを意識することなくアプリケーションプログラムが作成できるようにした仮想分散制御システムを提供すること。【解決手段】アプリケーションプログラムが仮想アドレス空間５０１に対してアドレスすると、仮想アドレスに対応したページテーブル５０３内のＰＴＥ５０３の内容に従って、仮想アドレスを物理アドレスに変換するメモリ管理ユニットを設け、これによりカーネルがネットワークをアクセスする機能が備えられるようにしたものである。【選択図】　図１
2004127083.tif 000002
【特許請求の範囲】
【請求項１】
通信機能を有する入出力機器と制御コントローラからなる入出力制御装置を同一伝送通信路上に接続し、コンピュータで制御する方式の分散制御システムにおいて、
メモリアクセス時、仮想アドレスを物理アドレスに変換するメモリ管理ユニットを使用し、
前記コンピュータ上で、仮想アドレスを用いてアプリケーションプログラムがメモリを読み書きするだけで、前記入出力制御装置内の入出力機器が制御されるように構成したことを特徴とする仮想分散制御システム。
【請求項２】
請求項１に記載の発明において、
前記同一伝送通信路上に接続された入出力制御装置が少なくとも２台で、
前記アプリケーションプログラムは、前記入出力制御装置の台数、位置を意識することなく、前記入出力制御装置内の入出力機器の制御が行なえるように構成されていることを特徴とした仮想分散制御システム。
【請求項３】
請求項１に記載の発明において、
前記入出力制御装置に異常が発生したとき、前記コンピュータ側に当該異常の発生を通知する機能が前記アプリケーションプログラムに備えられていることを特徴とした仮想分散制御システム。
【請求項４】
請求項１に記載の発明において、
前記仮想アドレスが有する仮想アドレス空間内にＩ／Ｏ通信空間を設け、
前記アプリケーションプグラムがＩ／Ｏ通信空間アクセス時にＣＰＵ例外を発生させ、
このＣＰＵ例外の発生に基づいて前記入出力制御装置に対するネットワークパケットの送信を行ない、応答パケットを受信するまでの間は前記アプリケーションプログラムの動作を禁止し、応答パケット受信により前記アプリケーションプログラムの動作を復帰させるように構成したことを特徴とする仮想分散制御システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、伝送路上に分散して接続されている各種制御装置を集中して制御するシステムに係り、特に伝送路としてローカルエリアネットワーク（ＬＡＮ）を用いた分散制御システムに関する。
【０００２】
【従来の技術】
各種製造プラントや鉄道車両、医療用分析装置など、多種多様な制御機器が配置されているシステムでは、その制御形態として、例えば図２に示すようなによる制御システムが使用されている。
【０００３】
ここで、この図２の制御システムでは、マイコンからなる制御コントローラ２０１を用い、これにＩ／Ｏバス（入出力用バス）２０７を介して複数の入出力機器２０２〜２０６が接続されているものである。
【０００４】
そして、この制御システムにおいては、制御コントローラ２０１が全ての入出力機器２０２〜２０６の制御を行うと共に、これらから収集したデータの解析や演算処理も制御コントローラ２０１が全て行うのが一般的であった。
【０００５】
ところで、このような制御コントローラ用マイコンの性能も、近年はかなり向上ているが、しかし、それでもＰＣ（パーソナルコンピュータ）の性能には及ばないし、他方、このような制御コントローラに近年要求されている高い性能を満たすにも至ってはいないので、従来技術のように、制御コントローラで入出力機器の制御とデータ解析、演算の全てを行うのは難しくなってきた。
【０００６】
そこで、処理能力の向上が著しいＰＣ側でネットワークを介して全てを制御するようにした制御システム、すなわち、図３に示すように、ＰＣ３０１と同一の伝送通信路３０８上に入出力制御装置３１０をネットワークで接続した制御システムが提案されている。
【０００７】
そして、この図３のネットワーク制御システムでは、図示してないが、ＰＣ３０１側の伝送通信路３０８上に高速化しなければならない入出力機器を接続してデータ解析や演算を行い、高速化が特に必要ない入出力機器２０２〜２０６に関しては、従来通り、入出力制御装置３１０内の制御コントローラ２０１がもっている従来のＩ／Ｏバス２０７に接続したものである。
【０００８】
【発明が解決しようとする課題】
しかし、この図３の制御システムの場合は、従来からある入出力機器がＰＣ側のＩ／Ｏバスに対応したものになっていないので、全ての入出力機器をそのままＰＣ側Ｉ／Ｏバスに接続するのは困難である。
【０００９】
一方、新規に全ての入出力機器をＰＣ側Ｉ／Ｏバスに対応したものに置き換えるのも、開発パワー、工程、予算の関係から困難である。
【００１０】
このため、従来技術では、ＰＣ側から入出力制御装置内のＩ／Ｏ制御を行う場合、アプリケーションプログラムにネットワークを意識したプログラミングを必要とし、ネットワークを熟知しているプログラマが必要であった。
【００１１】
ここで、従来技術でも、メモリを読み書きするだけで、ネットワーク上の他のＩ／Ｏにアクセスできるものもあるが、しかし、この場合も、周期的なイベントにより特定のメモリの内容を読み書きして他の入出力制御装置に送信するだけであり、従って、この場合は、メモリアクセスから即座に入出力制御装置の入出力機器を制御することができなかった。
【００１２】
本発明の目的は、ネットワークを意識することなくアプリケーションプログラムが作成できるようにした仮想分散制御システムを提供することにある。
【００１３】
【課題を解決するための手段】
上記目的は、通信機能を有する入出力機器と制御コントローラからなる入出力制御装置を同一伝送通信路上に接続し、コンピュータで制御する方式の分散制御システムにおいて、メモリアクセス時、仮想アドレスを物理アドレスに変換するメモリ管理ユニットを使用し、前記コンピュータ上で、仮想アドレスを用いてアプリケーションプログラムがメモリを読み書きするだけで、前記入出力制御装置内の入出力機器が制御されるようにして達成される。
【００１４】
ここで、前記同一伝送通信路上に接続された入出力制御装置が少なくとも２台で、前記アプリケーションプログラムは、前記入出力制御装置の台数、位置を意識することなく、前記入出力制御装置内の入出力機器の制御が行なえるようにしても良い。
【００１５】
同じく、ここで、前記入出力制御装置に異常が発生したとき、前記コンピュータ側に当該異常の発生を通知する機能が前記アプリケーションプログラムに備えられているようにしても良い。
【００１６】
更に、ここで、前記仮想アドレスが有する仮想アドレス空間内にＩ／Ｏ通信空間を設け、前記アプリケーションプグラムがＩ／Ｏ通信空間アクセス時にＣＰＵ例外を発生させ、このＣＰＵ例外の発生に基づいて前記入出力制御装置に対するネットワークパケットの送信を行ない、応答パケットを受信するまでの間は前記アプリケーションプログラムの動作を禁止し、応答パケット受信により前記アプリケーションプログラムの動作を復帰させるようにしても良い。
【００１７】
【発明の実施の形態】
以下、本発明による仮想分散制御システムについて、図示の実施の形態により詳細に説明する。ここで、まず図３は、本発明の一実施形態が適用対象としているネットワークシステムの一例で、ブロック構成上は、上記した従来技術と同じであるが、制御内容が以下の通りに異なっているものである。
【００１８】
まず、この第１の実施形態において、ＰＣ３０１側のプロセス（アプリケーションプログラムのこと）から、入出力制御装置３１０内にある制御コントローラ２０１のＩ／Ｏバス２０７に接続されている入出力機器２０２〜２０６にアクセスする場合について説明する。
【００１９】
このときＰＣ３０１側のプロセスは、ＭＭＵ（メモリ管理ユニット）と呼ぶ機能を用い、仮想アドレスを物理アドレスに変換した上でアクセスするようになっている。そこで、図５により、このＭＭＵについて説明する。
【００２０】
まず、仮想アドレスは、図示のように、仮想アドレス空間５０１として、プロセス毎に独立して存在しており、それぞれのプロセスは相互に干渉することなく独立して動作することができる。
【００２１】
そして、この仮想アドレス空間５０１は、ページ単位５０２に分割された上でカーネルとＭＭＵにより管理されているが、このページ単位はＰＣ３０１のＣＰＵ（セントラル・プロセッシング・ユニット）に依存している。また、このとき物理アドレスも、物理アドレス空間５０５として存在し、これも同様にページ単位に分割されてカーネルとＭＭＵにより管理されている。
【００２２】
このとき、連続している仮想アドレス空間に割り当てる物理アドレスのページは、不連続であっても少しも構わないようになっていて、これにより、必要とされている仮想アドレス空間にのみ、物理アドレスのページを割り当てることができ、この結果、実装されている実メモリ以上の大きさをもっているプログラム群でも、効率よく動作させることができるようになっている。
【００２３】
ここで、このことが、この実施形態で実現されているのは、仮想アドレス空間を物理アドレス空間に変換するためのページテーブル５０３が備えられていて、これらがカーネルとＭＭＵにより管理されているからである。
【００２４】
ここで、このページテーブル５０３は、仮想アドレス空間５０１のページ単位５０２毎にＰＴＥ（ページテーブルエントリ）５０４を持っており、このＰＴＥ５０４内の格納先アドレス５１１に仮想アドレスに対応する物理アドレスが格納されるようになっている。
【００２５】
但し、この仮想空間上の各ページには、物理ページが必ず対応しているわけではなく、存在しているか否かを示すビットがＰＴＥに存在しているようにしてあり、このビットのことをＰビット（Ｐｒｅｓｅｎｔ　Ｂｉｔ）５１０という。
【００２６】
そして、このＰビット５１０がＯＮ（例えばレベル１）の場合にはその仮想アドレス用に物理ページが割り当てられていることを意味し、ＯＦＦ（例えばレベル０）の場合にはその仮想アドレス用に物理ページが割り当てられていないことを意味している。
【００２７】
ここで、システム内に空きメモリ（空き状態の物理メモリ）が少なくなってくると、ＰＣ３０１のカーネル（ｋｅｒｎｅｌ：リアルタイムオペレーティングシステムのメモリ管理やスケジューリング等を行う核の部分）が参照頻度の低い仮想空間に割り当てられている物理メモリの解放処理を行ない、空きメモリを作りだす。
【００２８】
このときの物理ページの解放は、そのページの内容をディスク５０６に一時的に退避しておいてから、物理ページを空き状態にする。ここでディスク５０６に退避した場合においても、ディスク内のアドレスがＰＴＥ５０４内の格納先アドレス５１１に格納されることになる。
【００２９】
そして、以後、このページにアクセスがあったとき、まず空き物理ページを割り当て、ＰＴＥ５０４に格納されている格納先アドレス５１１を確認する。この後、格納先アドレス５１１が示しているディスク内アドレスのページの内容を、割り当てた物理ページにコピーし、ＰＴＥ５０４内の格納アドレス５１１を物理アドレスに書き換えて、通常通り使用することになる。
【００３０】
このときＰＴＥ５０４内の格納先アドレス５１１が物理アドレスを指すのか、ディスク内アドレスを指すのかは、上記したＰビット５１０がＯＮかＯＦＦかによって区別できる。すなわち、Ｐビット５１０がＯＮの場合には、ＰＴＥ内の格納アドレス５１１は物理アドレスを指し、ＯＦＦの場合には、ディスクアドレスを指す。
【００３１】
従って、この実施形態におけるＭＭＵとは、プロセスが仮想アドレス空間５０１にアクセスすると、仮想アドレスに対応するページテーブル５０３内のＰＴＥ５０４の内容に従って仮想アドレスを物理アドレスに変換するものということができる。
【００３２】
次に、この実施形態による仮想アドレスでは、アドレス空間の保護にもページテーブル５０３を利用し、ＰＴＥ５０４内の各ビットを使用している。
【００３３】
まず、ＰＴＥ５０４内のＷビット（Ｒｅａｄ／Ｗｒｉｔｅ　ｂｉｔ）５０９は、これがＯＮの場合は、そのページに対して読み込み／書き込みが可能であるが、ＯＦＦの場合には読み込みだけが可能であることを指す。そしてＯＦＦのとき、このページに書き込みを行った場合には、ページアクセス失敗（以下、ページフォルトと記す）の例外が発生する。
【００３４】
次に、ＰＴＥ５０４内のＵビット（Ｕｓｅｒ／Ｓｕｐｅｒ　ｂｉｔ）５０８は、そのページにアクセスできるのがユーザモードかスーパバイザモードかを指定できる。通常、プロセスが暴走してもカーネルのテキストなどを破壊することがないように、ページ毎にアクセスできる特権を与えていて、プロセス実行中はユーザモードになるが、カーネル実行中はスーパバイザモードとなる。
【００３５】
そして、プロセスは、ＰＴＥ５０４内のＵビット５０８がＯＮのページにアクセスした場合には正常にアクセスできるが、ＯＦＦのページにアクセスした場合には、Ｗビット５０９の場合と同様にページフォルトの例外が発生し、アクセスを禁止して、カーネル空間がユーザに破壊されてしまうのが防止されるようになっている。
【００３６】
一方、スーパバイザモードで実行するカーネル動作中は、このＰＴＥ５０４内のＵビット５０８がＯＮであろうとＯＦＦであろうと、全てのページにアクセスすることができる。
【００３７】
ＰＴＥ５０４内のＤビット（Ｄｉｒｔｙ　ｂｉｔ）５０７は、ページが書き込みにより変更されたかどうかを指し、このＤビット５０７がＯＮの場合は書き込みによりページの内容が変更されたことを意味し、ＯＦＦの場合は、ページの内容が変更されていないことを意味する。
【００３８】
なお、ＰＴＥ５０４内の各ビットは、全てカーネルが管理するものであり、ＣＰＵがこのビットをＯＮ／ＯＦＦすることはない。
【００３９】
図１は、本発明の第１の実施形態におけるＰＣと入出力制御装置の内部構成を示したもので、このときＰＣ側では、各プロセス１０１毎に仮想アドレス空間５０１が割り当てられており、メモリにアクセスする場合には、仮想アドレスを使用してアクセスを行う。
【００４０】
カーネルでは、プロセス生成時にプロセス１０１毎に仮想アドレス空間５０１を割り当てるが、このとき仮想アドレス空間５０１内にＩ／Ｏ通信空間１０３を設ける。この仮想アドレスは決められている。
【００４１】
ここで、このＩ／Ｏ通信空間１０３の先頭アドレスからのオフセットは、入出力制御装置３１０のＩ／Ｏ空間の先頭アドレスからのオフセットに対応しているものとし、このＩ／Ｏ通信空間１０３の大きさは、入出力制御装置３１０内の入出力機器が割り当てられているアドレスのサイズ分に応じて割り当てるものとする。
【００４２】
また、ＰＣ側では、この仮想アドレス空間５０１をページ単位に区切って、ページテーブル５０３で管理しているが、このとき、入出力制御装置側のＩ／Ｏ空間は、特にこれを意識する必要はない。
【００４３】
このことは、入出力機器Ａ２０２〜入出力装置Ｅ２０６をページ単位に区切っておかなくてもよいことを意味している。つまり、１つのページ単位内に複数の入出力機器が割り当てられていてもよく、入出力の割り当てがページ間にまたがっていてもよいことになる。
【００４４】
ここで、カーネルは、仮想アドレス空間５０１のページ単位にページテーブル５０３を作成するが、このときカーネルはＩ／Ｏ空間のページテーブル５０３内にあるＰＴＥ５０４内のＵビット５０８をＯＦＦに設定しておく。
【００４５】
これにより、ユーザモードで動作するプロセス１０１が仮想アドレス空間１０２内のＩ／Ｏ通信空間１０３にアクセスした場合には、ページフォルトの例外が発生することになる。
【００４６】
それ以外でも、ＰＴＥのＰビット５１０をＯＮ、Ｗビット５０９もＯＮに設定しておく。このとき、Ｐビット５１０はＯＮにはするが、それだけで実際に対応する物理ページは割り当てない。
【００４７】
次に、図６は、プロセス１０１が仮想アドレス空間５０１のＩ／Ｏ通信空間１０３にアクセスしてから、入出力制御装置側１０８内部のＩ／Ｏ１０９をアクセスして、制御がプロセス１０１に復帰するまでの処理を説明したフローチャートである。
【００４８】
ここで、いま、プロセス１０１がＩ／Ｏ通信空間１０３に書き込みを行ったとすると（６００）、これにより処理が開始し、図７に示すページング処理７０１が行われる。
【００４９】
ＣＰＵで、このページング処理７０１が開始されると、まずページテーブル内のアクセスしたページに対応するＰＴＥ内のＰビットがＯＮか否かチェックされる（７０２）。
【００５０】
このときＩ／Ｏ通信空間１０３用ＰＴＥは、全てのＰビットがＯＮとなっているため、次のＷビットがＯＦＦで、アクセスは書き込みになっているか否かがチェックされる（７０３）。
【００５１】
Ｉ／Ｏ通信空間１０３用ＰＴＥは全てＷビットがＯＮのため、次のアクセスは書き込みか否かがチェックされるが（７０４）、このときは、Ｉ／Ｏ通信空間１０３への書き込みアクセスのため、ＤビットがＯＮにされる（７０５）。
【００５２】
次に、ＵビットがＯＦＦで、アクセス元がユーザモードか否かがチェックされる（７０６）。このとき、Ｉ／Ｏ通信空間１０３のＰＴＥは全てＵビットがＯＦＦのため、特権モードで動作するカーネル若しくはカーネルスレッド以外のユーザモードで動作するプロセスがアクセスを行うと、アクセスしたＩ／Ｏ通信空間のアドレスがページフォルトレジスタ１０５に格納され（７０７）、ページフォルト例外が発生する（７０９）。
【００５３】
これでページング処理は終了するが、そうすると、次に、図６に示すように、ページフォルト処理８００が動作する。
【００５４】
このページフォルト処理は、ＣＰＵの例外と処理ポインタを対応させるテーブル（以下、ベクタテーブルと記す）に予め登録しておく。これによりページフォルト例外に対応したページフォルト処理８００が動作することになる。
【００５５】
ページフォルト処理８００の詳細な処理について、図８を用いて説明する。ページフォルト処理が開始されると（８０１）、まずページフォルトレジスタ１０５（図１）に格納されているページフォルト発生アドレスを確認して発生アドレスがＩ／Ｏ通信空間内かどうかをチェックする。
【００５６】
そして、Ｉ／Ｏ通信空間内でなければ通常のページフォルト処理８０３に移行する。この場合、通常は発生させたプロセスを切り離して動作禁止の状態にしてしまう。
【００５７】
次に、アクセスが読み込みか書き込みだったかをチェックするため、ページフォルト発生アドレスに対応するページテーブル内ＰＴＥのＤビットをチェックする（８０４）。このとき、書き込みの場合には、ＤビットがＯＮの状態になっている。
【００５８】
次に、ページフォルト発生時のプログラムカウンタ（次にＣＰＵが処理する命令が格納されている場所を示すカウンタ）に記述されている命令を解析する（８０５）。ここで、この命令を解析することにより、ページフォルト発生アドレスに対して書き込みたい値とサイズを得ることができる。
【００５９】
この解析が完了後、プロセスのプログラムカウンタが書き込み命令の次の命令を示すようにプログラムカウンタを更新する（８０６）。この場合、通常は、例外発生のプロセスのプログラムカウンタはプロセス毎に用意さている一時退避領域（以下、スタックと記す）に格納されているため、このスタック内のプログラムカウンタを更新することになる。
【００６０】
次に、プロセスを一時的に動作禁止にするためにプロセスに対して動作禁止の信号を送信する（８０７）。ここで、この信号は、一般的にはシグナルと呼ばれているもので、プロセスの動作を中断させたり復帰させたりするために使用するものであり、保護違反等でプロセスを切り離す場合も、このシグナルが使用される（以下、シグナルと記す）。
【００６１】
次に、入出力制御装置との通信処理を行うため、予め生成してあるカーネルスレッド１０７に対して書き込みのあったＩ／Ｏ通信空間からのオフセットと書き込み値、それに書き込みサイズを引数にしてイベントを発行し、カーネルスレッドを起床さる（８０８）。これでページフォルト処理は終了し（８０９）、次はカーネルスレッド処理９００（図６）に移行する。
【００６２】
カーネルスレッド処理９００の詳細な処理フローチャートを図９を用いて説明する。カーネルスレッド処理が開始されると（９０１）、ページフォルト処理から渡されたパラメータを解析し、Ｉ／Ｏ通信空間１０３へのアクセスが書き込みか読み込みかを判別する（９０２）。
【００６３】
ここでは書き込みのため、ページフォルト処理から渡されたパラメータ内のＩ／Ｏ通信空間１０３からのオフセットと書き込みサイズ、それに書き込み値を用いてパケットを構築する。
【００６４】
このときのパケット構造について、図１０により説明すると、書き込み要求の場合、アクセス種別１００１のＲビット（Ｒｅｑ／Ｒｅｓｐ　ｂｉｔ）１００５をＯＦＦ、Ｗビット１００７はＯＮにし、指定されたアドレス、サイズ、データを１００２〜１００４に設定することにより、書き込みデータパケットを構築する（９０９）。
【００６５】
そして、書き込みデータパケットの構築が完了したら、それを入出力制御装置３１０に対して送信し（９１０）、その後、応答受信を待つのである（９１１）。
【００６６】
次に、図１１により、入出力制御装置３１０側のＩ／Ｏ通信処理１０８の処理フローについて説明する。このとき、Ｉ／Ｏ通信処理１０８（図１）は常にパケット受信待ち状態となっている（１１０１）。
【００６７】
ここで、図１０で説明したパケットを受信すると、まず、書き込みか読み込みかをチェックし（１１０２）、書き込みの場合には、指定されたＩ／Ｏ空間からのオフセットのアドレスに対して指定サイズと指定データを書き込み（１１０６）、その後、応答パケットを構築する（１１０７）。
【００６８】
このときの応答パケットの構築には、受信した要求パケット（図１０）のアクセス種別１００１、アドレス１００２、サイズ１００３を応答パケットにそのままコピーし、アクセス種別１００１のＲビット１００５をＯＮにする。そして、応答パケット構築が完了した後、応答パケットをＰＣ３０１に対して送信する。
【００６９】
図９の応答パケット受信待ち（９１２）において、カーネルスレッド１０７（図１）が応答パケットを受信すると、まず、対応するＰＴＥ内のＤビット５０７（図５）をＯＦＦし（９１２）、次いでプロセス１０１に復帰シグナルを発行して、プロセスを起動できる状態に戻し（９０７）、カーネルスレッド処理を終了する（９０８）。
【００７０】
この後、図６に示すように、プロセス１０１はＩ／Ｏ通信空間アクセスした後の処理を継続し（６０１）、これでＩ／Ｏ通信空間への書き込みは完了したことになる。
【００７１】
次に、プロセス１０１がＩ／Ｏ通信空間１０３に読み込みを行った場合について説明する。図６に示すように、プロセス１０１がＩ／Ｏ通信空間にアクセスすると（６００）、まずページング処理７００（図７）が実行される。
【００７２】
そして、書き込みのときと同様、７０１〜７０３の処理が実行されたあと、次のアクセスは書き込みかどうかがチェックされる（７０４）。ここでは、Ｉ／Ｏ通信空間１０３への読み込みアクセスのため、ＤビットはＯＦＦのままとなる。
【００７３】
次に、これも書き込み同様、ＵビットがＯＦＦで、アクセス元がユーザモードかどうかがチェックされる（７０６）。このときＩ／Ｏ通信空間１０３のＰＴＥは全てＵビットがＯＦＦのため、アクセスしたＩ／Ｏ通信空間１０３のアドレスがページフォルトレジスタ１０５に格納され（７０８）、ページフォルト例外が発生し（７０９）、これでページング処理は終了する（７１０）。
【００７４】
ページング処理７００が終了するとページフォルト処理８００が開始し、書き込み同様、８０１〜８０２の処理が行われた後、アクセスが読み込みか書き込みだったかをチェックするため、ページフォルト発生アドレスに対応するページテーブル内ＰＴＥのＤビットをチェックする（８０４）。この読み込みの場合には、ＤビットがＯＦＦの状態になっている。
【００７５】
次に、ページフォルト発生時のプログラムカウンタに記述してある命令を解析する（８１０）。この命令を解析することによりページフォルト発生アドレスに対して読み込んだデータを格納する場所が判る。
【００７６】
この解析が完了後、プロセスのプログラムカウンタが読み込み命令の次の命令を示すように、プログラムカウンタを更新する（８１１）。通常、例外発生のプロセスのプログラムカウンタはプロセス毎に用意さている一時退避領域（以下スタックと記す）に格納されているため、このスタック内のプログラムカウンタを更新することになる。
【００７７】
以後、書き込みのときと同様、次回に入出力制御装置との通信処理を行うために予め生成してあるカーネルスレッド１０７に対して読み込みのあったＩ／Ｏ通信空間からのオフセット、読み込みサイズ、それに読み込みデータの格納先アドレス（若しくはレジスタ）を引数にしてイベントを発行し（８０７）、カーネルスレッドを起床させた後（８０８）、ページフォルト処理を終了する（８０９）。
【００７８】
こうして処理８０８が実行されると、図９に示すカーネルスレッド処理９００に移行し、カーネルスレッド処理が開始され（９０１）、まず、ページフォルト処理から渡されたパラメータの解析により、Ｉ／Ｏ通信空間１０３へのアクセスが書き込みか読み込みかを判別する（９０２）。
【００７９】
ここでは読み込みのため、処理９０３に進み、ページフォルト処理から渡されたパラメータ内のＩ／Ｏ通信空間１０３からのオフセットと読み込みサイズを用いて、読み込みデータパケットを構築する。
【００８０】
この読み込みデータパケットの構造は、図１０において、アクセス種別１００１のＲビット１００５とＷビット１００７がＯＦＦで、指定されたアドレスとサイズをアクセス種別１００１のアドレス１００２とサイズ１００３に設定したものである。
【００８１】
そして、処理９０３で読み込みデータパケットの構築を完了したら、それを入出力制御装置３０９に対して送信し（９０４）、その後、応答受信を待つのである（９０５）。
【００８２】
次に、Ｉ／Ｏ通信処理１０８について、図１１により説明する。ここで、この処理は常にパケット受信待ち状態となっている（１１０１）。そして、図９の処理９０４又は処理９１０により送信されたパケットを受信すると、まず、書き込みか読み込みかをチェックする（１１０２）。読み込みの場合には、指定されたＩ／Ｏ空間からのオフセットアドレスから、指定サイズのデータを読み込む（１１０３）。
【００８３】
次いで、受信した要求パケットのアクセス種別１００１とアドレス１００２、それにサイズ１００３を応答パケットにそのままコピーし、アクセス種別１００１のＲビット１００５をＯＮにし、Ｉ／Ｏから読み込んだ値をデータ１００４にコピーして、応答パケットを構築し（１１０４）、その後、応答パケットをＰＣ３０１に対して送信するのである（１１０５）。
【００８４】
この結果、図９の応答パケット受信待ち処理９０５で応答パケットが受信されると、カーネルスレッド１０７が応答パケット内に格納されている読み込みデータ１００４を指定アドレス（又はレジスタ）にコピーする（９０６）。
【００８５】
その後、プロセス１０１に復帰シグナルを発行し（９０７）、起動できる状態に戻してカーネルスレッドの処理を終了する（９０８）。この結果、図６に示すように、プロセス１０２はＩ／Ｏ通信空間アクセスした後の処理を継続し（６０１）、これでＩ／Ｏ通信空間からの読み込みは完了したことになる。
【００８６】
次に、本発明の第２の実施形態について説明する。ここで、この第２の実施形態でも、図１と図５は、上記した第１の実施形態と同様であるが、図４は、この第２の実施形態が適用されるＰＣと入出力制御装置の内部構成を示したものである。
【００８７】
ここで、これら図３と図４の比較から明らかなように、図３の第１の実施形態の場合は、ＰＣ１台に対して入出力制御装置が１台の場合であったが、この図４の第２の実施形態では、ＰＣ１台に対して入出力制御装置が複数台接続される場合に本発明を適用したものである。
【００８８】
図４において、この実施形態では、１台のＰＣ３０１に３台の入出力制御装置３１０Ａ、３１０Ｂ、３１０Ｃが接続されている場合について示してある。そこで、ＰＣ３０１側プロセスから各入出力制御装置３１０Ａ〜３１０Ｃ内の制御コントローラ２０１Ａ、２０１Ｂ、２０１ＣのＩ／Ｏバス２０７Ａ、２０７Ｂ、２０７Ｃに接続されている各入出力機器２０２、２０３、２０４、２０５、２０６にアクセスする場合について説明する。
【００８９】
このとき、この第２の実施形態でも、ＰＣ側では、各プロセス１０１毎に仮想アドレス空間１０２が割り当てられており、メモリにアクセスする場合には、仮想アドレスを使用してアクセスを行うようになっている（図１）。
【００９０】
そして、カーネルでは、プロセス生成時にプロセス１０１毎に仮想アドレス空間１０２を割り当てるが、このときに仮想アドレス空間内にＩ／Ｏ通信空間１０３を設けるが、この仮想アドレスも予め決められている。
【００９１】
ここで、この図４の場合、各入出力制御装置３１０Ａ、３１０Ｂ、３１０Ｃについては、図の下側に示してあるように、それらを実際の機器に見立て、各々が筐体４２２、４２８、４３２を備えたものとする。
【００９２】
このとき、これらの筐体には各々制御コントローラが設けてあり、且つ、それらと各入出力機器は、筐体に接続されているマザーボードに接続する構成になっていて、このマザーボードのＩ／Ｏバスを介して制御コントローラと各入出力機器が接続されるようになっているのが通例である。
【００９３】
そこで、まず筐体４２２には制御コントローラボード４１７と入出力機器Ａボード４１８、それに入出力機器Ｂボード４１９が備えられ、次に筐体４２８には制御コントローラボード４２３と入出力機器Ｃボード４２４、それに入出力機器Ｄボード４２５が備えられ、更に筐体４３２には制御コントローラボード４２９と入出力機器Ｃボード４３０、それに入出力機器Ｄボード４３１が備えられている。
【００９４】
ここで、各Ｉ／Ｏバスに接続されている入出力機器ボードには、Ｉ／Ｏバス内でのＩ／Ｏ空間のオフセットを識別するためのスイッチ（以下、ＤＩＰＳＷと記す）４２０、４２１、４２６、４２７、４３１が設けてある。
【００９５】
そして、これらのＤＩＰＳＷの各々値にページ単位を掛けた値が、その入出力制御機器内のＩ／Ｏ空間での入出力機器の先頭アドレスを意味する。つまり、Ｉ／Ｏ空間の先頭アドレス＋ページ単位×ＤＩＰＳＷ値が入出力機器の先頭アドレスとなる。
【００９６】
このため、各ＤＩＰＳＷの設定については、必ず他のボード（他の入出力制御装置内のボードも同様）のＤＩＰＳＷと重複しない数値に設定しなければならない。ここでは、ＤＩＰＳＷ４２０を数値０、ＤＩＰＳＷ４２１は数値１、ＤＩＰＳＷ４２６は数値２、ＤＩＰＳＷ４２７は数値３、それにＤＩＰＳＷ４３１は数値４に設定した場合が、一例として図示されている。
【００９７】
次に、この場合の各入出力制御機器内のＩ／Ｏ空間のメモリマップイメージを図１２に示す。
【００９８】
まず、入出力制御機器ＡのＩ／Ｏメモリマップ１２０７では、Ｉ／Ｏ空間の先頭アドレス１２０４にＤＩＰＳＷの数値が０の入出力機器Ａがマッピングされ、ＤＩＰＳＷの数値が１の入出力機器ＢはＩ／Ｏ空間先頭アドレス＋ページ単位のアドレス空間１２０５にマッピングされる。
【００９９】
次に、入出力制御機器ＢのＩ／Ｏメモリマップ１２１０では、Ｉ／Ｏ空間の先頭アドレスに２ページ単位分をプラスしたアドレス空間１２０８に入出力機器Ｃがマッピングされ、Ｉ／Ｏ空間の先頭アドレスに３ページ単位分をプラスしたアドレス空間１２０９に入出力機器Ｄがマッピングされる。
【０１００】
そして、入出力制御機器ＣのＩ／Ｏメモリマップ１１１２では、Ｉ／Ｏ空間の先頭アドレスに４ページ単位分をプラスしたアドレス空間１２１１に入出力機器Ｅがマッピングされる。
【０１０１】
そこで、以下、この構成において、プロセス１０１がＩ／Ｏ空間の先頭ページ単位にアクセスを行った場合について説明する。
【０１０２】
いまプロセス１０１（図１）がＩ／Ｏ空間の先頭ページ単位をアクセスしたとすると、第１の実施形態のときと同様に、図６のページング処理７００が発生し、その後、ページフォルト処理８００が発生した後、カーネルスレッド処理９００が実行される。
【０１０３】
ここで、この第２の実施形態では、書き込み読み込みパケットをカーネルスレッド処理９００で伝送路に送信する場合に、伝送路に接続されている全ての入出力制御装置でパケットが受信されるように送信し（以下、ブロードキャスト送信と記す）、これにより、図１０に示してあるパケットが全ての入出力制御機器で受信されることになる。
【０１０４】
このとき入出力制御装置内のＩ／Ｏ通信処理１０８により実行される処理フローを図１３に示す。ここで、この図１３の処理でも、Ｉ／Ｏ通信１０８は、図１１で説明した第１の実施形態における処理と同じで、このときも常時、パケット受信待ちになっている（１３０１）。
【０１０５】
そして、いま、図１０に示す要求パケットが受信されたとすると、まずパケット内のアドレスがこの入出力制御装置で有効かどうかを判断する（１３０２）。そして、受信されたパケット内のアドレスに対応する入出力機器が存在しない入出力制御装置の場合には、パケットはここで廃棄される（１２０３）。
【０１０６】
一方、受信したパケット内アドレスに対応する入出力機器が存在する入出力制御装置の場合には、処理１３０４の後、処理１３０５から処理１３０７、又は処理１３０８から処理１３１０の何れかを実行するが、これらの処理は、各々上記第１の実施形態において説明した図１１の処理１１０２〜処理１１０８と同じなので、説明は割愛する。
【０１０７】
ここで、この事例は、Ｉ／Ｏ空間の先頭ページ単位をアクセスした場合のことなので、入出力制御機器３１０Ａ（図４）の入出力機器２０２Ａに対してのみ読み書きの処理が行われ、それ以外の入出力制御装置３２０Ｂ、３１０Ｃでは、Ｉ／Ｏ通信空間の先頭のページに対応する入出力機器が、そのＩ／Ｏ空間に存在しないため、ＰＣからの要求パケットは処理１３０３で廃棄される。
【０１０８】
つまり、この第２の実施形態では、カーネルスレッド処理９００でＩ／Ｏ空間にページ単位でアクセスすることによりパケットがブロードキャスト送信され、受信したパケット内アドレスに対応する入出力機器が存在する入出力制御装置でだけ当該パケットが有効化される点が異なるが、その他の処理は、第１の実施形態と同じである。
【０１０９】
従って、この第２の実施形態によれば、プロセス１０１がＩ／Ｏ空間のページ単位に順次、任意にアクセスすることにより、ＰＣは全ての入出力制御装置内の入出力機器に対して読み書きすることができ、１台のＰＣで複数台の入出力制御装置に対応させることができる。
【０１１０】
次に、本発明の第３の実施形態について説明する。
【０１１１】
上記した実施形態では、プロセス１０１がＩ／Ｏ通信空間１０３にアクセスすると、図６で説明したように、ページング処理７００とページフォルト処理８００、それにカーネルスレッド処理９００が順次実行される。
【０１１２】
そして、このカーネルスレッド処理９００では、図９に示したように、例えば書き込みデータパケットを構築し（９０９）、それが送信される（９１０）。また、Ｉ／Ｏ通信処理１０８では、これに応じて、図１１に示すように、常にパケット受信待ち状態になっている（１１０１）。
【０１１３】
そこで、いま、パケットが受信されたとすると、まず書き込みか読み込みかがチェックされるが（１１０２）、この場合は書き込みなので、次にはデータの書き込みが実施されることになる（１１０６）。
【０１１４】
ここで、このＩ／Ｏアクセス時に、Ｉ／Ｏに故障が発生した場合、或いはＩ／Ｏ未実装アドレスにアクセスした場合、この第３の実施形態では、制御コントローラ内部で例外処理エラー（以下、バスエラーと記す）が発生するようになっている。
【０１１５】
そして、このバスエラーが発生したことを、Ｉ／Ｏ通信処理１０８が書き込み実施後に検出した場合、この第３の実施形態では、図１１の処理１１０７において、図１０に示す応答パケットを構築する際、Ｉ／Ｏ通信処理１０８はアクセス種別のＣビット１００６をＯＮに設定し、応答パケットを送信する（１１０８）ようになっている。
【０１１６】
また、これに応じて、図９のカーネルスレッド処理９００のプロセスにシグナルを発行する処理９０７では、応答パケット内のアクセス種別のＣビット１００６をチェックし、エラーが発生したか否かをチェックするようになっている。
【０１１７】
そして、Ｃビット１００６がＯＮになっていて、エラーが発生したことが検出されたときは、処理９０７でプロセスにエラーが発生したことを知らせるシグナルを発行し、これによりプロセス１０１を動作禁止にし、プロセスの復帰を行わないようにする。
【０１１８】
従って、この第３の実施形態によれば、エラー後にはプロセス１０１が動作しないようにすることができる。
【０１１９】
また、このとき、プロセス１０１でシグナル毎の処理が登録できるようにしておけば、エラーのシグナルを受け取った時点でエラーシグナルに対する処理を動作させることができ、このときの処理でプロセスに対する最適なエラー処理を行うことも可能になる。
【０１２０】
以上、説明したように、上記の実施形態によれば、まず、アプリケーションプログラムは、メモリをアクセスするだけで、同一伝送路上に接続されている入出力制御装置の入出力機器にアクセスすることができる。
【０１２１】
このときＰＣ側で集中的に入出力機器を制御する場合でも、従来からあった入出力機器をそのまま使用することができるので、開発効率が向上する。
【０１２２】
また、上記の実施形態によれば、入出力制御機器が複数、同一伝送路に接続された場合でも、ＰＣ側アプリケーションプログラムは、どの入出力制御機器にどの入出力機器が接続されているかを意識してプログラムする必要がなく、プログラム作成が容易になる。
【０１２３】
更に、上記の実施形態によれば、入出力制御装置内の入出力機器アクセスでエラーが発生した場合には、このことが即座にＰＣ側に通知されるので、直ちに動作プロセスを停止させることができる。
【０１２４】
【発明の効果】
本発明によれば、アプリケーションプログラムがメモリをアクセスするだけで同時に、同一伝送通信路上の入出力制御装置内の入出力機器に対して読み書きすることができる。
【図面の簡単な説明】
【図１】本発明の一実施形態におけるＰＣと入出力制御装置の内部構成を示す概念図である。
【図２】従来技術による入出力制御装置の一例を示すブロック図である。
【図３】本発明が適用対象とする制御システムの一例を示す構成図である。
【図４】本発明が適用対象とする制御システムの他の一例を示す構成図である。
【図５】本発明の一実施形態における仮想アドレス空間の説明図である。
【図６】本発明の一実施形態による全体処理のフローチャートである。
【図７】本発明の一実施形態によるページング処理のフローチャートである。
【図８】本発明の一実施形態によるページフォルト処理のフローチャートである。
【図９】本発明の一実施形態によるカーネルスレッド処理のフローチャートである。
【図１０】本発明の一実施形態におけるパケットのデータ構成図である。
【図１１】本発明の一実施形態による通信処理のフローチャートである。
【図１２】本発明の他の一実施形態における仮想アドレス空間の説明図である。
【図１３】本発明の他の一実施形態による通信処理のフローチャートである。
【符号の説明】
１０１　プロセス（アプリケーションプログラム）
１０２　仮想アドレス空間
１０３　Ｉ／Ｏ通信空間
１０４　ページテーブル
１０５　ページフォルトアドレス
１０６　ページフォルト処理
１０７　カーネルスレッド
１０８　Ｉ／Ｏ通信処理
１０９　Ｉ／Ｏ
２０１、２０１Ａ、２０１Ｂ、２０１Ｃ　制御コントローラ
２０２〜２０６、　入出力機器
２０７、２０７Ａ、２０７Ｂ、２０７Ｃ　Ｉ／Ｏバス（入出力用バス）
３０１　ＰＣ（パーソナルコンピュータ）
３０２　制御コントローラ
３０８　通信伝送路
３１０、３１０Ａ、３１０Ｂ、３１０Ｃ　入出力制御装置
４２２、４２８、４３２　筐体（入出力制御装置イメージ）
４１７、４２３、４２９　制御コントローラボード（Ａ、Ｂ、Ｃ）
４１８、４１９、４２４、４２５、４３０　入出力機器ボード
４２０、４２１、４２６、４２７、４３１　ＤＩＰＳＷ（ディップスイッチ）
５０１　仮想アドレス空間
５０２　ページ単位
５０３　ページテーブル
５０４　ＰＴＥ（ページテーブルエントリ）
５０５　物理アドレス空間
５０６　ディスク（記憶用のディスク）
５０７　Ｄビット（Ｄｉｒｔｙ　Ｂｉｔ）
５０８　Ｕビット（Ｕｓｅｒ／Ｓｕｐｅｒ　ｂｉｔ）
５０９　Ｗビット（Ｒｅａｄ／Ｗｒｉｔｅ　Ｂｉｔ）
５１０　Ｐビット（Ｐｒｅｓｅｎｔ　Ｂｉｔ）
５１１　格納先アドレス
６００　全体フロー
７００　ページング処理
８００　ページフォルト処理
９００　カーネルスレッド処理
１００１　アドレス種別
１００２　アドレス
１００３　サイズ
１００４　データ
１００５　Ｒビット（Ｒｅｑ／Ｒｅｓｐ　Ｂｉｔ）
１００６　Ｃビット（Ｃｏｍｐｌｅｔｅ　Ｂｉｔ）
１００７　Ｗビット（Ｒｅａｄ／Ｗｒｉｔｅ　Ｂｉｔ）
１００１〜１００８　Ｉ／Ｏ通信処理フロー
１２０１　仮想アドレス空間
１２０２　ページテーブル
１２０３　ＰＴＥ
１２０４〜１２０６、１２０８、１２０９、１２１１　入出力機器Ｉ／Ｏメモリマップイメージ
１２０７　入出力制御機器Ａ　Ｉ／Ｏメモリマップ
１２１０　入出力制御機器Ｂ　Ｉ／Ｏメモリマップ
１２１２　入出力制御機器Ｃ　Ｉ／Ｏメモリマップ
１３０１〜１３１０　Ｉ／Ｏ通信処理フロー
【図１】
2004127083.tif 000003
【図２】
2004127083.tif 000004
【図３】
2004127083.tif 000005
【図４】
2004127083.tif 000006
【図５】
2004127083.tif 000007
【図６】
2004127083.tif 000008
【図７】
2004127083.tif 000009
【図８】
2004127083.tif 000010
【図９】
2004127083.tif 000011
【図１０】
2004127083.tif 000012
【図１１】
2004127083.tif 000013
【図１２】
2004127083.tif 000014
【図１３】
2004127083.tif 000015