(57)【特許請求の範囲】
【請求項１】
複数の入出力装置と、
前記複数の入出力装置が接続され第１のオペレーティングシステムを動作させて処理を実行する第１のプロセッサと、
前記複数の入出力装置が接続され第２のオペレーティングシステムを動作させて処理を実行する第２のプロセッサと、
前記複数の入出力装置のそれぞれについて前記第１のオペレーティングシステムと前記第２のオペレーティングシステムの少なくとも一方との対応が格納される構成定義テーブルと、
前記複数の入出力装置のいずれかからアクセスがあると前記構成定義テーブルの内容を参照して前記第１のオペレーティングシステムと前記第２のオペレーティングシステムの少なくとも一方にアクセスする入出力制御装置とを有し、
前記第１のプロセッサで実行される第１のオペレーティングシステムは、前記第１のオペレーティングシステムと前記入出力装置とが対応付けされた第１の入出力データベースを参照し、自オペレーティングシステムが使用する入出力装置の存在を確認し、
前記第２のプロセッサで実行される第２のオペレーティングシステムは、前記第２のオペレーティングシステムと前記入出力装置とが対応付けされた第２の入出力データベースを参照し、自オペレーティングシステムが使用する入出力装置の存在を確認し、
前記第１のオペレーティングシステムは、前記第１の入出力データベースを変更すると前記変更のエントリをバッファに書込むと共に、プロセッサ間通信機能を介して前記第２のプロセッサに割り込みを掛け、
前記第２のプロセッサで実行される前記第２のオペレーティングシステムは、前記第１のオペレーティングシステムからの割り込みに基づいて、前記エントリの変更と判断すると、前記バッファを読み出して前記バッファの変更内容に基づいて前記第２の入出力データベースを変更し、
前記第１のオペレーティングシステムは、前記第２の入出力データベースが変更された後に前記バッファで記憶された変更内容を前記構成定義テーブルに反映させることを特徴とする計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の計算機間において、入出力装置を排他的または共有して利用可能とする計算機システムに関する。
【背景技術】
【０００２】
計算機は多種多様なハードウェアから構成される。一方、アプリケーションソフトウェアは経済性や技術の再利用性の観点から、できる限り共通化したものが望まれる。そこで共通のアプリケーションソフトウェアを多種の計算機ハードウェアで実行するために、これらハードウェアの差異を吸収し機能の抽象化をするオペレーティングシステム（ＯＳ）と呼ばれるソフトウェアが計算機では用いられる。
【０００３】
〔特許文献１〕には、シングルプロセッサに複数のオペレーティングシステムを実装した技術が開示されている。
【０００４】
また〔特許文献２〕は、ＯＳを再起動している期間でも、無停止モジュールは停止することなく割込み処理を継続実行可能であり、無停止モジュールに係わるハードウェア資源と再初期化処理を無停止モジュール管理データ領域に登録し、カーネル再起動時に該ハードウェアに対する再初期化処理を実行することが開示されている。
【０００５】
一方、入出力装置を複数ＯＳ間で共有して利用する場合は、例えば〔非特許文献２〕に論じられているように、入出力装置の共有を実現する方法がある。ここで述べられている技術は、同一プロセッサで動作する異種ＯＳ間で入出力装置を共有する技術である。共有される入出力装置から発生した割込をＤＡＬと呼ばれるソフトウェア階層が捕捉し、動的割込テーブルと呼ばれるテーブルを参照し、最終的に割込を処理するＯＳを決定するというものである。
【０００６】
また、〔特許文献３〕には、これは第１のＯＳに共有する入出力装置のドライバを実装し、第２のＯＳから第１のＯＳに入出力装置に対する処理を依頼し、共有処理を実現する技術が開示されている。
【０００７】
また、〔特許文献４〕には、インストレーション用媒体を計算機システムに接続し、デバイスドライバをインストールする方法が開示されている。
【０００８】
【特許文献３】特開平１１−８５５４７号公報
【特許文献４】特開平１１−２４９４３号公報
【特許文献５】特開平９−３１９５６２号公報
【特許文献６】特開平５−１００８２８号公報
【非特許文献１】情報処理学会第５９回全国大会予稿集４Ｂ−０３『組込み向けデュアル  ＯＳ実行システムＤＡＲＭＡの開発』
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら複数のＯＳを用いて入出力装置を排他的あるいは共有して利用するためには、以下に挙げるような問題点を解決しなければならない。
【００１０】
まず第１に、製造業者が独自に構築した計算機に市場に流通する汎用（プラグアンドプレイと呼ばれる技術を搭載した）ＯＳを搭載した場合、製造業者が意図するような計算機システムの構成をとる必要がある。例えば計算機システム内の入出力装置の内、入出力装置Ａは第１のＯＳ専有、入出力装置Ｂは第２のＯＳ専有、入出力装置Ｃは第１と第２のＯＳ共有、という細かな設定を可能にしなければならない。
【００１１】
第２に、複数のＯＳを各々異なるプロセッサで稼動させる計算機システムにおいて入出力装置を共有する必要がある。
【００１２】
第３に、複数ＯＳのうち任意のＯＳをメンテナンスするために再起動しなければならない。
【００１３】
第４に複数のＯＳ間で入出力装置のデバイスドライバを共有する必要がある。
【００１４】
第５に入出力装置を制御するＯＳをＯＳ間で変更する必要がある。
【００１５】
しかしながら、前述した公知の文献には、この点について開示されていない。
【００１６】
本発明の目的の一つは、複数のオペレーティングシステムの間で入出力装置を柔軟に利用できる環境を提供することにある。
【課題を解決するための手段】
【００１７】
この目的を達成する本発明の一つの見方をすれば、それぞれの計算機で実行されるオペレーティングシステムは、オペレーティングシステムと入出力装置とが対応付けされたテーブルを参照し、自オペレーティングシステムが使用する入出力装置の存在を確認するようにすることである。
【発明の効果】
【００１８】
本発明によれば、市場に流通する汎用ＯＳを活用しつつ複数のＯＳを実装する計算機システムにおいて、入出力装置を制御するＯＳを柔軟に設定し、例えば入出力装置個別に制御するＯＳを排他的あるいは共有して設定することが可能となる。さらに入出力装置を制御するオペレーティングシステムを「無し」とすることで、当該入出力装置を一時的に無効にすることが可能である。また当該オペレーティングシステムに無関係な入出力装置に対しても安全にアクセスできるため、計算機システム内の全入出力装置を検索し構成制御するといった、プラグアンドプレイ・オペレーティングシステムを採用することが可能となる。
【００１９】
また本発明によれば、入出力装置を共有する複数のＯＳを実装した計算機システムにおいて、一方のＯＳの稼動状況に関わらず、もう一方のＯＳは共有する入出力装置を継続して使用することが可能となる。すなわち本発明の目的である、一方のＯＳの不具合は入出力装置を共有するもう一方のＯＳの稼動状況に影響を与えないようにすることが可能となる。
【００２０】
また本発明により、通信装置をはじめとする入出力装置を、別筐体の計算機装置間で共有することが可能となる。例えば、携帯電話で通話しながら、携帯電話に取り付けられた無線装置を介して、同じく無線装置を取り付けられたゲーム装置にデータを転送するといった使い方が可能となる。この際、計算機装置が認証しない計算機装置からの入出力装置アクセスを拒絶することも本発明により実現できる。
【００２１】
さらに本発明によれば、同種の複数のＯＳを実装する計算機システムにおいて、ＯＳ間で入出力装置のデバイスドライバを共有することが可能となる。
【００２２】
さらに本発明によれば、入出力装置を複数のＯＳ間で排他的に制御する計算機システムにおいて、入出力装置を制御あるいは管理するＯＳを容易に切り換えることが可能となる。このため、一方のオペレーティングシステムの負荷が高まった場合、もう一方のオペレーティングシステムにある入出力装置の処理を移行する際に、ユーザの作業量を低減することができる。
【００２３】
また本発明によれば、これら複数の入出力装置を制御するオペレーティングシステムを設定するために、ＧＵＩ画面を用いて容易に設定することが可能となる。入出力装置によっては、特定のオペレーティングシステムによってのみ制御されるものも有り、こういった入出力装置に対してもユーザが迷わないように、プルダウンリストを用いて取りうるオペレーティングシステムの組をＧＵＩ画面で設定することも可能となる。
【発明を実施するための最良の形態】
【００２４】
以下、本発明の第１の実施例を図１により説明する。
【００２５】
本発明による計算機システムは、プロセッサＡ１０，プロセッサＢ２０，入出力制御装置３０，メモリ１００，１２０，１４０と、各種入出力装置から成る。
【００２６】
各種入出力装置として、操作員が使用するキーボード４０，マウス４１，表示装置７０などがあり、外部の装置と入出力処理を行う通信装置７１や機能拡張するための拡張スロット７２−０〜ｍ、オペレーティングシステム等を格納する不揮発性記憶４２がある。また各種入出力装置７０，７１，７２−０〜ｍは複数の信号線からなる拡張バス６０を介して入出力制御装置３０と接続する。以下ではこれら各種入出力装置を一括して入出力装置と呼ぶことにする。入出力装置は、拡張バスに含まれる割込信号を介して入出力制御装置に割込を集める。これらの入出力装置のうち、いずれかまたは全てがシステム構成に応じて省略されることもあり、さらに多様な入出力装置が接続されることもある。
【００２７】
これ以降の実施例では入出力制御装置３０に二つのプロセッサが接続されている図を用いるが、実装上必ずしもこのような形態を取る必要はない。例えばプロセッサと入出力制御装置，メモリをひとつの計算機構成単位（モジュール）とし、複数のモジュールが拡張バス６０を共有して接続する、いわゆる疎結合型マルチプロセッサ構成においても、これ以降の発明を適用することが可能である。なおモジュールはそれぞれを拡張バス６０とは別の基板としても良く、全てあるいはいくつかのモジュールは拡張バス６０と同一の基板としてもよい。
【００２８】
プロセッサ１０，２０はそれぞれ、複数の信号線からなるプロセッサバス８０，８２と割込信号線８１，８３を介して入出力制御装置３０と接続する。メモリ１００，１２０，１４０は複数の信号線からなるメモリバス５０を介して入出力制御装置３０と接続する。
【００２９】
プロセッサ１０，２０はそれぞれオペレーティングシステムを動作させるための処理装置である。メモリ１００，１２０は、オペレーティングシステム１０１，１２１、入出力装置の情報取得要求を受けるデバイス情報取得機能１０２，１２２、入出力装置への情報設定要求を受けるデバイス情報設定機能１０３，１２３、構成定義テーブル１４１を参照する構成定義参照機能１０４，１２４、入出力装置を制御するデバイスドライバ１０５−０〜ｎ，１２５−０〜ｎ、それぞれのオペレーティングシステム上で動作するプログラムタスク１０６−０〜ｉ，１２６−０〜ｉを保持する。これらのプログラムはそれぞれプロセッサ１０，２０によって読み出されて実行される。メモリ１４０は、それぞれのプロセッサ１０，２０が読み取り，書込みが可能なメモリである。このメモリ１４０には、各種入出力装置がいずれのオペレーティングシステムによって制御されるかが記述された構成定義テーブル１４１が保持されている。入出力装置の動作完了や変化は、割込信号線８１，８３を介してプロセッサ１０，２０へ通知される。
【００３０】
なお入出力装置への情報取得要求や情報設定要求とは、ここでは特に入出力装置自身の動作設定を読み取ったり書き込む事を意味する。例えば表示装置７０の本来の目的は画面に画像や文字を表示することであるため、通常時は、表示装置７０のデバイスドライバは表示したい画像や文字に関する情報を表示装置７０が認識するバッファ等に設定する必要がある。その一方で表示装置７０自身は拡張バス６０に接続されており、拡張バス６０で表示装置７０を認識するためには表示装置７０に対して各種資源（バスアドレス，割込，表示装置７０を認識するコード，製造者名，リビジョン等）を設定あるいは取得する必要がある。これら通常動作以外に必要となる各種資源の設定に、入出力装置への情報取得要求や情報設定要求が必要となる。
【００３１】
構成定義テーブル１４１は、入出力装置のエントリ毎にいずれのオペレーティングシステムで処理されるべきかが記述されている。構成定義テーブル１４１は複数のオペレーティングシステム間で共有されるテーブルであり、複数のオペレーティングシステムから参照可能なメモリ（領域）に格納されている。
【００３２】
なお構成定義テーブル１４１は一旦設定したら頻繁に更新は行われず、また電源の投入、切断の前後で設定を保持する必要が有る。そのため構成定義テーブル１４１は不揮発性記憶装置を用いて保持するのが好適である。
【００３３】
しかしながらメモリ１４０は、必ずしも不揮発性メモリとする必要はない。例えば構成定義テーブル１４１を不揮発性記憶装置４２内の構成定義テーブル保存領域４４に保持して、計算機システムの立上げ時にシステム立上げ処理を行うプログラムが、不揮発性記憶装置４２から構成定義テーブル保存領域４４の内容をメモリ１４０に転送して構成定義テーブル１４１として運用する。
【００３４】
ここでシステム立上げ処理を行うプログラムとは、オペレーティングシステムを起動する前に計算機システムで必要な処理を実行するプログラムであり、例えば不揮発性記憶装置の初期化やメモリの初期設定を行う。ここでシステム立上げ処理を行うプログラムは、計算機システム内の最低限一つのプロセッサが実行すれば良いが、それぞれのプロセッサが整合を取りながらプログラムを実行しても良い。システム立上げ処理を行うプログラムは、不揮発性記憶装置４２に格納しておき、それぞれのプロセッサが電源投入直後に不揮発性記憶装置４２の当該領域を参照して実行する。
【００３５】
通信装置７１は有線あるいは無線の中間媒体を介して、外部の計算機や装置とデータの受信あるいは送信を行う。拡張スロット７２−０〜ｍは、計算機システムの機能を拡張するために使用されるものである。例えば外部の状態を観測するセンサ，スイッチ，画像入力カメラを接続するインターフェースを拡張したり、外部の装置を制御するためのリレーや通信装置を拡張するのに用いる。
【００３６】
なお本実施例では、メモリ１００，１２０，１４０と別々のメモリを用いた例で説明しているが、これらのメモリのうち、任意の組み合わせで物理的に同一メモリ上に保持されるようにしても良い。またプロセッサがメモリを直接接続する機能を有する場合は、入出力制御装置３０によらずに直接メモリ１００，１２０，１４０をプロセッサ１０，２０に接続することも可能である。この場合メモリ１４０はプロセッサ間で共有する必要があるため、メモリ１４０として例えばデュアルポートメモリを採用し、メモリが持つ二つのメモリインターフェースをそれぞれのプロセッサバスに接続して共有を実現する。またこの場合の入出力制御装置３０は、これらメモリを接続しないが各種入出力装置をプロセッサに提供したり、割込み制御をするために必要である。また一般には割込信号線８１，８３はプロセッサバス８０，８２の一部である。
【００３７】
本実施例では、計算機システム内に２つのオペレーティングシステム１０１，１２１が存在する場合について、それぞれのオペレーティングシステムが入出力装置を排他的または共有して動作する方法について説明する。なお本発明による計算機システムにおいて、オペレーティングシステムおよびプロセッサの個数は２つに限定されるものではなく、必要とする機能に応じてそれぞれ増減する。いずれの場合も本発明を適用することは可能である。
【００３８】
オペレーティングシステム１０１，１２１はそれぞれプロセッサ１０，２０で実行される。以下ではオペレーティングシステム１０１の動作について説明するが、これらの説明はオペレーティングシステム１２１においても同様である。
【００３９】
オペレーティングシステム１０１は、割り当てられたメモリおよびプロセッサを用いて、タスク１０６−０〜ｎを実行する。これらのタスク１０６−０〜ｉが入出力装置を使用する場合に、直接入出力装置を制御することは入出力装置の割り当てや、処理プログラムの再利用の観点から有効ではない。そのため一般的にはデバイスドライバが入出力装置の処理を担当し、これらタスクはデバイスドライバに入出力装置の処理を依頼する。
【００４０】
デバイスドライバがタスク１０６−０〜ｉから受ける入出力装置への処理依頼は、入出力装置から情報を取得する場合と入出力装置に情報を設定する場合に分類される。そこでデバイスドライバ１０５−０〜ｉはこれらの動作に応じて、デバイス情報取得機能１０２またはデバイス情報設定機能１０３に処理を依頼する。デバイス情報取得機能１０２またはデバイス情報設定機能１０３は、受け取った入出力装置に対する要求を処理するに当たり、該当する入出力装置が当該オペレーティングシステムで処理を実行するべき入出力装置であるか否かを検査する。検査するためにデバイス情報取得機能１０２またはデバイス情報設定機能１０３は、入出力装置に関する資源情報を構成定義参照機能１０４に問い合わせる。構成定義参照機能１０４は、構成定義テーブル１４１を参照して当該オペレーティングシステムが担当か否か検索して応答を、問い合わせがあったデバイス情報取得機能１０２またはデバイス情報設定機能１０３へ返す。
【００４１】
その結果、当該オペレーティングシステム１０１が処理を担当する入出力装置である場合には、デバイス情報取得機能１０２またはデバイス情報設定機能１０３は、デバイスドライバから要求された処理を実行し、デバイスドライバに所望の要求を返す。一方、当該オペレーティングシステム１０１が処理を担当する入出力装置でない場合には、情報取得機能１０２またはデバイス情報設定機能１０３は当該入出力装置があたかも存在していないかのように振る舞い、デバイスドライバに該当デバイスが存在していない旨を通知する。
【００４２】
一般に、入出力装置のドライバロードを行う時に入出力装置の存在確認が必要であり、ドライバロード後の通常動作時には装置の存在を確認する必要はない。ドライバをロードするのは、計算機システム立上げ時またユーザからの要求が有った時である。そこでドライバのロード時にのみ構成定義参照機能１０４が参照され、通常動作時は構成定義参照機能１０４が参照されないようにするのが、性能の観点より好適である。従来では、ドライバのロード時等に使用する「入出力装置を構成制御する際に使用する関数」アクセス手順と、通常時入出力装置を利用するアクセス手順は異なる。そこで構成定義参照機能１０４を呼び出すよう実装するのは、「入出力装置を構成制御する際に使用する関数」が適当である。本実施例では「入出力装置を構成制御する際に使用する関数」として、デバイス情報取得機能１０２またはデバイス情報設定機能１０３を例として述べる。
【００４３】
ここで構成定義テーブル１４１の内容について、各入出力装置の担当を唯一のオペレーティングシステムとなるように設定することにより、オペレーティングシステム間で排他的に当該入出力装置を使用できる。また構成制御テーブル１４１について、各入出力装置の担当を複数設定することにより、オペレーティングシステム間で共有して使用できる。
【００４４】
一方、入出力装置からの割込みについて、各オペレーティングシステム間で入出力装置を排他的に使用するためには、各入出力装置から通知される割込みを適切なオペレーティングシステムに報告しなければならない。
【００４５】
そこで、入出力制御装置３０は割込みを振り分ける割込振分機能３１を実装する。割込振分機能３１は、各入出力装置からの割込みをそれぞれの入出力装置を担当するオペレーティングシステムに報告する。オペレーティングシステムは自身が担当する入出力装置からの割込みのみを受け、当該入出力装置を担当するデバイスドライバを呼び出し、入出力装置を制御することが可能となる。なお割込振分機能３１は必ずしも入出力制御装置３０上に実装する必要はなく、入出力制御装置３０と独立して存在してもよい。
【００４６】
図２に割込振分機能３１の構成を示す。割込振分機能３１は、各入出力装置から報告される割込を適切なオペレーティングシステムに報告するための機構である。
【００４７】
各入出力装置からの割込は割込要因レジスタ２００に保持される。割込プロセッサマスクレジスタ２０１，２０２は、それぞれプロセッサ１０，２０に報告すべき割込要因に対応したマスクが設定される。マスクビットに“１”が設定されると、対応した割込要因がプロセッサに報告される。
【００４８】
入出力装置から割込みが報告された時の動作について説明する。
【００４９】
入出力装置から割込が報告されると、割込要因レジスタ２００上の要因ビットの内、当該入出力装置に対応する一つのビットが“１”にセットされる。そして要因ビットは割込プロセッサマスクレジスタ２０１，２０２の対応するビットと論理積が取られる（２０４，２０５）。最終的に、全ての割込要因の論理和が取られ（２０６，２０７）１本の割込信号線８１，８３となり、それぞれプロセッサ１０，２０に報告される。
【００５０】
ここで割込プロセッサマスクレジスタ２０１，２０２に設定する値は、構成定義テーブル１４１において設定される、入出力装置とオペレーティングシステムとの対応に合わせた値を用いる。例えば、表示装置７０がプロセッサＡ１０におけるオペレーティングシステム１０１で制御されるのであれば、割込プロセッサマスクレジスタ２０１（プロセッサＡ用）の対応するマスクビットを“１”に設定し、割込プロセッサマスクレジスタ２０２（プロセッサＢ用）の対応するマスクビットを“０”に設定する。
【００５１】
但し、当該入出力装置が共有設定されている場合は注意が必要である。この場合、両方のオペレーティングシステムに割込があがるよう設定して問題ない場合も有る。しかし後述する通信装置７１を共有する場合などは、一般には一方のオペレーティングシステムに割込があがるように設定しておく方がハードウェア資源の管理の観点から実装が容易となる。そのため、割込プロセッサマスクビットの設定に関して、後述するＯＳ判定フラグを用いて、一方のオペレーティングシステムに実装されるドライバのみが構成制御を行い、一方のオペレーティングシステムにのみ割込をあげるよう設定する必要がある。
【００５２】
以上のようにすることにより、各オペレーティングシステムから制御できる入出力装置と、割込が報告される入出力装置が一致し、デバイスドライバにおける一貫性が保たれることになる。
【００５３】
図３に割込振分機能３１の別の構成を示す。図３では割込信号線８１，８３が複数の信号線により構成され、それら信号線で例えば数値レベルが符号化される場合の割込振分機能３１について説明する。
【００５４】
図３（ａ）は割込振分機能３１の構成を示すものであり、割込要因レジスタ２００，割込レベルレジスタ２１０，割込エンコーダ２２０から成る。
【００５５】
図３（ｂ）に割込レベルレジスタ２１０の構成を示す。割込レベルレジスタ２１０は、割込要因と１対１に対応して用意するレジスタであり、割込報告レベル２１１と割込処理をするプロセッサを示すプロセッサフラグ２１２から成る。ここでは、割込報告レベル２１１は複数ビットから成る符号化されたレベルを示す。また割込報告レベルは大きな値ほど割込優先度が高く、値０は割込が無いことを意味するものとする。プロセッサフラグ２１２に関して、当該割込を処理するプロセッサを表現するためにいくつか方法が考えられるが、例えばプロセッサフラグ２１２で持つビット毎に、処理するプロセッサを意味するよう表現する。すなわち、ビット０が１にセットされていればプロセッサＡ１０，ビット１が１にセットされていればプロセッサＢ２０が処理することを意味する。この時、１０進数で値１の場合はプロセッサＡ１０が処理し、値２の場合はプロセッサＢ２０，値３はプロセッサＡ１０とプロセッサＢ２０が処理することを意味する。
【００５６】
図３（ｃ）に割込エンコーダ２２０の構成を示す。割込エンコーダ２２０は、プロセッサＡ１０に対する割込レベル出力部２２１と、プロセッサＢ２０に対する割込レベル出力部２２２，プライオリティエンコーダ２２５から成る。プロセッサＢ２０に対する割込レベル出力部２２２は、割込レベル出力部２２１における定数２１３（プロセッサＡを示す）がプロセッサＢを示す定数となっている以外は、割込レベル出力部２２１と同じである。
【００５７】
割込レベル出力部２２１において、各割込要因毎に、プロセッサフラグ２１２がプロセッサＡ１０を示しているか比較器２１４にて検査する。プロセッサＡ１０を意味するビットがセットされている場合、比較器２１４は“１”を出力する。そして、割込要因レジスタ２００からの要因ビットと論理積２１５が取られる。すなわちプロセッサＡに対応する入出力装置からの割込が発生した場合には、論理積２１５の出力は“１”となる。割込報告レベル２１１は、論理積２１５が“１”を出力される場合にそのままプライオリティエンコーダ２２５に入力される。論理積２１５が“０”を出力している場合には該当する割込要因からは割込報告レベル＝０がプライオリティエンコーダ２２５に入力される。
【００５８】
プライオリティエンコーダ２２５では、入力される全ての割込要因のうち、最も割込報告レベルが高いものを選択し、割込信号線８１に出力する。
【００５９】
以上よりそれぞれの入出力装置から報告される割込について、制御する対象の入出力装置からの割込のうち、最も割込報告レベルの高いものが各プロセッサに報告されることになる。
【００６０】
図４に本発明による構成定義テーブル１４１の構成を示す。
【００６１】
図４（ａ）は構成定義テーブル１４１の概念を示すテーブル例である。構成定義テーブル１４１は入出力装置名１４２とオペレーティングシステム・エントリ１４３から構成される。構成定義テーブル１４１を参照することにより、入出力装置に対応するオペレーティングシステムを決定することができる。例えば、マウスを制御するオペレーティングシステムはＯＳ−Ａであり、拡張スロット０を制御するオペレーティングシステムはＯＳ−Ｂ、キーボードは制御するオペレーティングシステムが無く、通信装置はＯＳ−ＡとＯＳ−Ｂで共有されることが分かる。
【００６２】
図４（ｂ）は、実際に実装される構成定義テーブル１４１の構成を示すテーブル例である。計算機で図４（ａ）のようなテーブルを直接実装する（例えば“キーボード”という文字列を扱う）のは効率と使い勝手の面で適さない。そこで入出力装置名に相当する情報を位置情報，オペレーティングシステムを示す名前には数値で表現するのが適当である。
【００６３】
実際の計算機システムにおいてデバイスドライバは、入出力装置を特定するためにオペレーティングシステムで一意に定まる位置情報を使用する。例えば、ＰＣＩ(Peripheral Component Interconnect) バスにおいては、バス番号，デバイス番号，機能番号によって入出力装置を特定する。バス番号はシステム内のバス毎に一意に振られる番号であり、デバイス番号は同一バス内で入出力装置毎に一意に振られる番号，機能番号は同一入出力装置内で機能毎に一意に振られる番号である。機能番号に関して例を挙げると、ＬＡＮ（Local Area Network）に接続する機能と、電話線に接続するモデム機能が同一入出力装置内に存在する場合、一般にはこれらの機能毎に独立して、動作を設定するためのレジスタ空間が確保される。この場合、バス番号，デバイス番号までは同一で、機能番号のみが異なるよう入出力装置が構成される。そこでレジスタ空間を識別するために機能番号でこれらの機能を識別し、構成制御や通常の処理を行う。
【００６４】
また処理するオペレーティングシステムを表現するに当たり、図３（ｂ）で説明したように、ビット毎に処理するオペレーティングシステムを意味するよう表現する。すなわち、ビット０が１にセットされていればオペレーティングシステム１０１、ビット１が１にセットされていればオペレーティングシステム１２１が処理することを意味する。この時、１０進数で値１の場合はオペレーティングシステム１０１が処理し、値２の場合はオペレーティングシステム１２１、値３はオペレーティングシステム１０１とオペレーティングシステム１２１が処理することを意味する。また値０はいずれのオペレーティングシステムも処理を行わないことを意味し、例えば計算機システムの検査等の目的で、当該入出力装置を処理しないようにすることが必要な場合に本機能を使うことができる。
【００６５】
本実施例における構成定義テーブル１４１は、バス番号１４４，デバイス番号１４５，機能番号１４６、さらにオペレーティングシステム毎に一意に振られたＯＳ番号を示すＯＳエントリ１４３から構成される。図４（ｂ）では、入出力制御装置３０はバス番号＝０，デバイス番号＝０，機能番号＝０の入出力装置であるとする。オペレーティングシステムは入出力装置自身をこれらの位置情報から特定し、動作条件を設定することが可能である。入出力制御装置３０に接続されるキーボード４０，マウス４１は入出力制御装置３０に接続される異なる機能であるとして、別の機能番号を振る。独立な機能番号により、これらの装置を識別することが可能である。
【００６６】
図４（ｃ）にバス種別検索テーブル１４７の構成例を示す。図４（ｂ）では構成定義テーブル１４１として一つのテーブルを示したが、バスの種別が複数有る場合には構成定義テーブル１４１をバスの種別毎に設け、これら複数の構成定義テーブル１４１を検索するためのバス種別検索テーブル１４７を用意する。バス種別検索テーブル１４７はバス種別１４８，構成定義テーブルインデックス１４９から成る。構成定義テーブルインデックス１４９は、構成定義テーブル１４１が複数存在する場合にこれらのテーブルが格納されるメモリの先頭アドレスを示す。
【００６７】
なお複数のバス種別を示すエントリを構成定義テーブル１４１に追加して、単一の構成定義テーブルとしても良い。
【００６８】
複数のバス種別の例として、ＰＣＭＣＩＡ／ＪＥＩＤＡで規定されるＰＣカードバスが計算機システムで用意される場合、図４（ｂ）で示した構成定義テーブル１４１と同様なテーブルをＰＣカードバスに対しても用意し、バス種別テーブル１４７にＰＣカードのエントリを追加する。このような構成とすることにより、ＰＣカードスロット毎に処理を行うオペレーティングシステムを設定することが可能となる。なお他のバス種においても、当該バスにおける入出力装置を一意に決定する位置情報を用いることにより、任意のバス種別において、入出力装置を制御するオペレーティングシステムを設定することができる。この場合、前述した位置情報の個数や内容が増減することがある。
【００６９】
なお構成定義テーブル１４１は複数のオペレーティングシステムが動作中に参照されるテーブルであるため、テーブルの更新を行う際には構成定義テーブル１４１を参照する全てのオペレーティングシステムが停止あるいは参照できないようにする必要がある。例えば構成定義テーブル１４１のエントリを更新するためには、全てのオペレーティングシステムが起動する前に更新するのが適当である。オペレーティングシステム稼働中でも、構成定義テーブル１４１を保持する不揮発性記憶装置４２の構成定義テーブル保存領域４４を更新し、次回のオペレーティングシステム再起動時に構成定義テーブルの内容が更新されるようにしても良い。すなわち、構成定義テーブル１４１を更新するためには、操作者が当該テーブルを一部変更あるいは全体更新し、テーブルのデータを構成定義テーブル保存領域４４に格納し、計算機システムの電源を切断、再度投入する。その後いずれか一つのプロセッサにおいて実行されるシステム立上げプログラムが、先ほど変更した構成定義テーブル保存領域４４よりテーブルのデータを取得しメモリ１４０の構成定義テーブル１４１を復元する。
【００７０】
図５に構成定義参照機能１０４の処理フローを示す。
【００７１】
構成定義参照機能１０４は、デバイス情報取得機能１０２とデバイス情報設定機能１０３から要求される入出力装置が存在するか判定する。すなわち、デバイス情報取得機能１０２とデバイス情報設定機能１０３からは、入出力装置を特定するバス種別，バス番号，デバイス番号，機能番号を伴い、当該オペレーティングシステム１０１で処理すべき入出力装置であるか確認を求められる。
【００７２】
構成定義参照機能１０４は最初に、デバイス情報取得機能１０２またはデバイス情報設定機能１０３から受け取った、バス種別を元にバス種別検索テーブル１４７を参照し、これから参照しようとする構成定義テーブル１４１、または構成定義テーブル上の領域を特定する（処理３００）。引き続きバス番号１４４，デバイス番号１４５，機能番号１４６を元に、該当するエントリを構成定義テーブル１４１から検索する（処理３０１）。ここで該当するエントリが無い場合、「該当入出力装置無し」と要求元に応答し終了する（処理３０５）。該当するエントリがある場合、引き続きエントリに対応するＯＳエントリ１４３を参照し、ＯＳエントリに含まれる値が、構成定義参照機能を呼び出したデバイス情報取得機能１０２またはデバイス情報設定機能１０３のオペレーティングシステムを含むか検査する（処理３０３）。例えば、オペレーティングシステム１０１からの呼出で、ＯＳエントリ１４３のビット０が“１”にセットされていれば、オペレーティングシステム１０１は当該入出力装置の処理をするエントリに含まれると認められる。処理３０３でＯＳエントリに含まれない場合は、「該当入出力装置無し」と要求元に応答し終了する（処理３０５）。また処理３０３で含まれる場合、「該当入出力装置存在」と要求元に応答し、終了する（処理３０４）。
【００７３】
なお図５では構成定義参照機能１０４の処理フローという、ソフトウェア的処理手法を説明した。しかし、構成定義参照機能１０４は必ずしもソフトウェア的手法による必要はなく、例えばハードウェアで実装することも可能である。
【００７４】
図６（ａ）に構成定義参照機能１０４をハードウェアで実装する場合における、構成定義テーブル１４１の別の構成例を示す。ここでは図４（ｂ）におけるバス番号１４４，デバイス番号１４５，機能番号１４６の値を１６進数で表現し、連結した値をアドレス１６０とし、ＯＳエントリ１４３をアドレス１６０に格納する値１６１とする。例えばマウス４１は、バス番号＝０，デバイス番号＝０，機能番号＝２であるので、アドレス１６０は０ｘ００２となり、アドレス０ｘ００２に格納される値１６１は０ｘ０１となる。
【００７５】
図６（ｂ）は構成定義参照機能１０４の他の実施例である。構成定義参照機能１０４は、バス種別レジスタ１６２，バス番号レジスタ１６３，デバイス番号１６４，機能番号レジスタ１６５，テーブルインデックス１６６，オフセットレジスタ１６７，ＯＳエントリレジスタ１６８から成る。
【００７６】
以下に、構成定義参照機能１０４を使用するフローを説明する。
【００７７】
デバイス情報取得機能１０２またはデバイス情報設定機能１０３は、構成定義参照機能１０４を利用する際に、検査したい入出力装置に対応するバス種別，バス番号，デバイス番号，機能番号をそれぞれバス種別レジスタ１６２，バス番号レジスタ１６３，デバイス番号１６４，機能番号レジスタ１６５に格納する。構成定義参照機能１０４は、格納されたバス種別レジスタ１６２の値を元にバス種別検索テーブル１４７を検索し、指定されたバス種別に対応する値（構成定義テーブルの先頭アドレス）を取得する。取得した値はテーブルインデックス１６６に格納される。またバス番号レジスタ１６３，デバイス番号１６４，機能番号レジスタ１６５に格納された値は、連結してオフセットレジスタ１６７に格納される。その後テーブルインデックス１６６とオフセットレジスタ１６７は加算され、図６（ａ）に示される構成定義参照機能１０４のアドレスを参照し、格納される値１６８を取得する。構成定義参照機能１０４を使用するデバイス情報取得機能１０２またはデバイス情報設定機能１０３は、一定時間後ＯＳエントリレジスタ１６８を参照し、当初の入出力装置に対応するオペレーティングシステムを取得する。
【００７８】
以上より、ハードウェアで構成定義参照機能１０４を実現することが可能となる。
【００７９】
図６（ｃ）にハードウェアで実装された構成定義参照機能１０４の実装例を示す。ハードウェアで実装された構成定義参照機能を使うことにより、図１における構成定義参照機能１０４はもはやメモリ１００，メモリ１２０に存在するのではなく、例えば入出力制御装置３０に含むことで、いずれのオペレーティングシステムから利用することが可能となる。
【００８０】
図７にデバイス情報取得機能１０２の処理フローを示す。
【００８１】
デバイス情報取得機能１０２は、デバイスドライバ１０５−０〜ｎから入出力装置に対するデータ読み取り要求を受ける。この時デバイス情報取得機能１０２は、バス種別，バス番号，デバイス番号，機能番号，読み取る入出力装置のアドレス，読み取るデータサイズ，読み取ったデータを格納するバッファのアドレスなどをデバイスドライバ１０５−０〜ｎから受け取る。
【００８２】
デバイス情報取得機能１０２は最初に構成定義参照機能１０４に対して、バス種別，バス番号，デバイス番号，機能番号を渡し、該当する入出力装置が存在するか確認要求を発行する（処理３２０）。構成定義参照機能１０４より返される応答により、当該入出力装置が存在しないと判明した場合、異常終了の応答を要求元のデバイスドライバに返し終了する（処理３２４）。当該入出力装置が存在する場合、要求された入出力装置のアドレスから指定されたサイズだけデータを読み取り指定されたバッファにデータを転送する（処理３２２）。その後要求元のデバイスドライバに正常終了の応答を返し終了する（処理３２３）。
【００８３】
図８にデバイス情報設定機能１０３の処理フローを示す。
【００８４】
デバイス情報設定機能１０３は、デバイスドライバ１０５−０〜ｎから入出力装置に対するデータ書き込み要求を受ける。この時デバイス情報設定機能１０３は、バス種別，バス番号，デバイス番号，機能番号，書き込む入出力装置のアドレス，書き込むデータサイズ，書込むべきデータを格納するバッファのアドレスなどをデバイスドライバ１０５−０〜ｎから受け取る。
【００８５】
デバイス情報設定機能１０３は最初に構成定義参照機能１０４に対して、バス種別，バス番号，デバイス番号，機能番号を渡し、該当する入出力装置が存在するか確認要求を発行する（処理３４０）。構成定義参照機能１０４より返される応答により、当該入出力装置が存在しないと判明した場合、異常終了の応答を要求元のデバイスドライバに返し終了する（処理３４４）。当該入出力装置が存在する場合、要求された入出力装置のアドレスへ指定されたバッファから指定されたサイズだけデータを転送する（処理３４２）。その後要求元のデバイスドライバに正常終了の応答を返し終了する（処理３４３）。
【００８６】
図９にオペレーティングシステム１０１の構成に関し、デバイスドライバ組込み機能１５０のブロック図を示す。
【００８７】
図９（ａ）はデバイスドライバ組込み機能１５０の一例のブロック図である。デバイスドライバ組込み機能１５０は、ドライバロード機能１０８と、入出力装置列挙機能１０９，入出力装置データベース１１０から成る。ドライバロード機能１０８は、指示されたドライバを所定の不揮発性記憶より読み出し、メモリ１００上に展開し、当該ドライバで定められた機能を呼び出し、オペレーティングシステムで管理されるドライバの一覧に当該ドライバのエントリを追加する機能を有する。入出力装置データベース１１０は、入出力装置の種別毎に用意されるデータベースであり、入出力装置と対応するドライバの格納場所やドライバ起動時のパラメータが記載されている。入出力装置データベース１１０はオペレーティングシステムが呼び出す必要があるデバイスドライバに関するものであり、オペレーティングシステムが計算機システムに導入される際にあらかじめ含まれる。
【００８８】
図１０に入出力装置列挙機能１０９の処理フローを示す。最初にバス種別，バス番号，デバイス番号，機能番号を初期化する（処理３６０）。次にバス種別，バス番号，デバイス番号，機能番号をデバイス情報取得機能１０２に指示し、結果を受け取る（処理３６１）。デバイス情報取得機能１０２の応答から、該当する入出力装置が当該オペレーティングシステム１０１の管理下にあるか判定する（処理３６２）。当該入出力装置が存在しない旨通知された場合、バス種別，バス番号，デバイス番号，機能番号について、次の入出力装置を指示するよう変更し処理３６１に戻る（処理３６８）。ここで次の入出力装置を指示するためには、例えばデバイス番号を１つ増加させたり、デバイス番号が規定の数値に達した場合にはデバイス番号初期化、バス番号を１つ増加させる。このようにして計算機システム中の全ての入出力装置を走査する。処理３６２より、該当する入出力装置が存在すると判明した場合には、入出力装置に対応するキーを作成し、入出力装置データベース１１０を検索し（処理３６３）、該当エントリが存在するか判定する（処理３６４）。該当エントリが存在しなかった場合、前回計算機システム起動時以降に入出力装置が追加されたことを意味するため、新たにドライバを計算機システムに導入する手順（後述）を実行する（処理３６７）。該当エントリが存在した場合、当該エントリより入出力装置に対応したデバイスドライバをオペレーティングシステム１０１に組み込むよう、ドライバロード機能１０８に指示する（処理３６５）。そして、最後まで入出力装置を走査しきったか判定する（処理３６６）。まだ全ての入出力装置を走査していない場合は、処理３６８を実行し、処理３６１を繰り返す。全ての入出力装置を走査した場合、入出力装置列挙機能１０９は終了する。
【００８９】
入出力装置列挙機能１０９と入出力装置データベース１１０により、計算機システムに存在する入出力装置をすべて検索し、前回の起動時以降入出力装置の構成に変更が有った場合には、自動的に対応するドライバをオペレーティングシステムに組み込むことが可能となる。
【００９０】
また計算機システムの稼働中に活線挿抜技術を用いて入出力装置が追加される場合、例えばＰＣカードが追加される場合、入出力装置列挙機能１０９は、やはりデバイスドライバ組込み機能１５０を用いることにより対応するドライバをロードすることが可能である。すなわち、ＰＣカード等が新たに計算機システムに追加されると、プロセッサに対し割込が発生する。ここで割込みは、前述した割込振り分け機能３１により処理を担当するプロセッサに対して報告される。その後割込を受けたプロセッサはオペレーティングシステムの機能からデバイスドライバ組込み機能１５０を条件付きで呼び出す。具体的には、指定されたバス種別，バス番号，デバイス番号，機能番号を伴いデバイスドライバ組込み機能１５０を呼び出す。その後デバイスドライバ組込み機能１５０は図１０のフローの一部を処理し、対応するドライバを組み込むことが可能となる。
【００９１】
以上が入出力装置の自動検出とドライバの自動読み込みを実現するデバイスドライバ組込み機能１５０の構成に関する説明であるが、入出力装置の自動検出とドライバ自動読み込みを行わないデバイスドライバ組込み機能１５０もある。
【００９２】
図９（ｂ）はデバイスドライバ組込み機能１５０の他の例のブロック図である。デバイスドライバ組込み機能１５０の他の例は、ドライバロード機能１０８と、入出力装置参照機能１１１，入出力装置リスト１１２から成る。入出力装置リスト１１２は、当該オペレーティングシステムで処理を行う全入出力装置のリストであり、入出力装置と対応するドライバの格納場所やドライバ起動時のパラメータが記載されている。
【００９３】
図１１に入出力装置参照機能１１１の処理フローを示す。最初に入出力装置リスト１１２から入出力装置エントリを読み出す（処理３８０）。エントリに記載された入出力装置に対応するバス種別，バス番号，デバイス番号，機能番号を元にデバイス情報取得情報１０２に指示し、結果を受け取る（処理３８１）。デバイス情報取得機能１０２の応答から、該当する入出力装置が当該オペレーティングシステム１０１の管理下にあるか判定する（処理３８２）。当該入出力装置が存在しない旨通知された場合、入出力装置リスト１１２から次の入出力装置エントリを読み出す（処理３８５）。該当する入出力装置が存在すると判明した場合には、入出力装置に対応するデバイスドライバをオペレーティングシステム１０１に組み込むよう、ドライバロード機能１０８に指示する（処理３８３）。そして、入出力装置リスト１１２から全ての入出力装置を取得しきったか判定する（処理３８４）。まだ取得していない入出力装置がある場合は、処理３８５を実行し、処理３８１を繰り返す。全ての入出力装置を走査した場合、入出力装置参照機能１１１は終了する。
【００９４】
以上の構成と方法により、入出力装置を複数のオペレーティングシステムで排他的または共有して利用することが可能となる。
【００９５】
なお本発明では入出力装置を排他的あるいは共有して使用する際に、一方のオペレーティングシステムの動作が他方のオペレーティングシステムの動作に影響を与えていない。そのため本発明によると、一方のオペレーティングシステムを稼働中に、もう一方のオペレーティングシステムを停止したり、再起動することが可能となる。その際に稼働中のオペレーティングシステムは引き続いて動作を継続することが可能である。
【００９６】
本実施例では、オペレーティングシステム１０１，１２１はそれぞれプロセッサ１０，２０で実行される場合を説明したが、一つのプロセッサで二つのオペレーティングシステムを実行し、本発明を適用することも可能である。この場合には、入出力制御装置３０は割込みを振り分ける機能を実装する必要が無くなり、全ての割込みは単一のプロセッサに報告される。
【００９７】
ここで一つのプロセッサで二つ以上のオペレーティングシステムを実行する技術について簡単に説明する。一般にオペレーティングシステムを実行するために必要なハードウェア資源としてプロセッサ（レジスタ，プログラムカウンタ，ＴＬＢ（Translation Lookaside Buffer）等）と割込がある。そこで複数のオペレーティングシステムを切り換えて実行するためには、これらの資源をそれぞれのオペレーティングシステムで独立に制御できるよう見せることが必要であり、そのために複数のオペレーティングシステムとは独立なオペレーティングシステム切換機能（プログラム）を用意する。オペレーティングシステム切換機能は、特定の要因（一定時間経過を示す割込等）をきっかけとして起動され、それまで実行していた第１のオペレーティングシステムが利用していた上記のハードウェア資源をメモリの第１の特定領域に待避し、これから切り換える第２のオペレーティングシステムが使用するハードウェア資源をメモリの第２の特定領域より復元し、第２のオペレーティングシステムを実行する。
【００９８】
本実施例ではオペレーティングシステムの個数が２つの場合について説明したが、オペレーティングシステムの個数に制限されるものではない。例えば１つのオペレーティングシステムのみを実装した場合でも、構成定義テーブル１４１において任意の入出力装置をオペレーティングシステムの制御対象から外すことにより、該当する入出力装置の制御を行わないようすることが可能となる。これは計算機システムの検査やデバッグ作業の際に有効である。
【００９９】
本発明による第２の実施例を図１２を用いて説明する。
【０１００】
図１２は、複数のオペレーティングシステム間で同一種の入出力装置に対するドライバを共有するための計算機システムの構成を示したものである。図１と同一番号の要素に付いては、本発明の第１の実施例で説明したものと同一である。図１２にて新たに加わった構成要素として、入出力制御装置３０におけるＯＳ判別フラグレジスタ３２と、不揮発性記憶４２における共通ドライバオブジェクト４３，メモリ１００とメモリ１２０における共通ドライバ１０７と共通ドライバ１２７である。
【０１０１】
以下では同一の共通ドライバオブジェクトを複数のオペレーティングシステム間で共有するための方法について解説する。なお以下の説明ではオペレーティングシステム１０１における共通ドライバ１０７についてのみ動作の説明をするが、同じ動作はオペレーティングシステム１２１における共通ドライバ１２７でも当てはまる。また共通ドライバ１０７，共通ドライバオブジェクト４３は、図中一つだけ示すが、必要な入出力装置に応じて複数の共通ドライバオブジェクトを用意するとよい。
【０１０２】
オペレーティングシステム１０１は自身が立ち上がる際に、自身が管理するハードウェア資源（プロセッサ，メモリ等）や入出力装置を初期化する。入出力装置を初期化する際に、一般には入出力装置に対応するデバイスドライバによって初期化処理を実行する。そのためオペレーティングシステム１０１は、不揮発性記憶４２からデバイスドライバに相当する共通ドライバオブジェクト４３を読み出し、オブジェクトに含まれる命令コードや静的データ，変数領域などを初期化し、メモリ１００上に配置するといったロード処理を行う。ロードされた共通ドライバオブジェクトは共通ドライバ１０７としてメモリ１００上で存在する。その後オペレーティングシステム１０１より共通ドライバ１０７は呼び出され、所望の処理を行う。
【０１０３】
共通ドライバ１０７は、自身がいずれのオペレーティングシステム、すなわちプロセッサから実行されているか判別する必要がある場合には、ＯＳ判別フラグレジスタ３２を参照すると良い。ＯＳ判別フラグレジスタ３２は、プロセッサＡ１０とプロセッサＢ２０の双方から読み出されるレジスタである。読み出される値は読み出し側に応じて変化する。例えばプロセッサＡ１０より読み出した場合は０ｘ５５，プロセッサＢ２０より読み出した場合は０ｘＡＡと読み出せる。
【０１０４】
ここで共通ドライバオブジェクト４３は、オペレーティングシステム１０１と１２１の双方より読み出されるように、双方のオペレーティングシステムで共通に認識できる格納方式により不揮発性記憶４２に格納される。例えば、ＦＡＴ（File Allocation Table）格納方式により格納する。ここで、ＦＡＴ格納方式とはパーソナルコンピュータのフロッピー（登録商標）ディスクやハードディスクにおいてファイルを格納するために広く用いられている格納方式である。具体的な仕様についてはＪＩＳ規格Ｘ０６０５−１９９０『情報交換用フレキシブルディスクカートリッジのボリューム及びファイル構成』またはＩＳＯ／ＩＥＣ規格９２９３−１９９４『Information technology -- Volume and file structure of disk cartridges for information interchange』に開示されている。操作者はＦＡＴ格納方式で初期化された不揮発性記憶４２の特定ディレクトリ（例えばcommonディレクトリ）の直下に共通ドライバオブジェクト４３を格納しておき、各オペレーティングシステムは起動時にcommonディレクトリに格納されているドライバを必要に応じて読み込むよう設定することにより、ドライバを共通化することが可能となる。
【０１０５】
なお共通ドライバオブジェクト４３を複数のオペレーティングシステムで排他的にロードしても、同時にロードしても良い。入出力装置が排他的に利用される場合、一般的には対応する共通ドライバオブジェクト４３は排他的にロードされるが、例えば計算機システム内の入出力装置に同一種のものが二つ存在し、一方をオペレーティングシステム１０１、もう一方をオペレーティングシステム１２１で利用する場合には、同一の共通ドライバオブジェクト４３はそれぞれのオペレーティングシステムでロードされる。
【０１０６】
その際、共通ドライバの処理として、自身がどちらのオペレーティングシステムから実行されているかによって処理内容を変更することがある。
【０１０７】
図１３にＯＳ判別フラグレジスタ３２を含む入出力制御装置３０の構成を示す。
【０１０８】
ＯＳ判別フラグレジスタ３２はプロセッサＡ１０に応答する値を示すプロセッサＡ定数２４９と、プロセッサＢ２０に応答する値を示すプロセッサＢ定数２５０、これらの値を切り換えるセレクタ２４８から成る。セレクタ２４８は、選択入力信号２５１の値が“１”となる場合プロセッサＡ定数２４９を出力し、選択入力信号２５１の値が“０”となる場合プロセッサＢ定数２５０を出力する。
【０１０９】
入出力制御装置３０はプロセッサＡアドレス信号２４０，プロセッサＡデータ出力信号２４１，プロセッサＡアドレスデコーダ２４４，プロセッサＡデータセレクタ２４５，プロセッサＢアドレス信号２４２，プロセッサＢデータ出力信号２４３，プロセッサＢアドレスデコーダ２４６，プロセッサＢデータセレクタ２４７から成る。なお本ブロック図では特にデータ信号の出力部分について模式的に抽出したものであり、一般的な入出力制御装置ではデータは入力と出力がマルチプレクスされた入出力信号線にてプロセッサと通信する。
【０１１０】
プロセッサＡアドレスデコーダ２４４は、入力されるプロセッサＡアドレス信号２４０から入出力装置内部の資源を選択する信号を出力するためのものである。ここでは特にＯＳ判別フラグレジスタ３２を選択する選択入力信号２５１を“１”に出力し、出力データセレクト信号２５３を出力する。プロセッサＡデータセレクタ２４５は入力される選択入力信号２５３を元に、プロセッサＡデータ出力信号２４１に、ＯＳ判別フラグレジスタ３２からの出力信号を選択して出力する。
【０１１１】
プロセッサＢアドレスデコーダ２４６とプロセッサＢデータセレクタ２４７も、それぞれプロセッサＡアドレスデコーダ２４４とプロセッサＡデータセレクタ２４５と同等の機能を有する。ただしプロセッサＢアドレスデコーダ２４６はＯＳ判別フラグレジスタ３２に対する選択入力信号を出力しない。
【０１１２】
以上の構成により、例えばプロセッサＡ１０よりＯＳ判別フラグレジスタ３２を参照すると定数２４９で示される値０×５５が得られ、プロセッサＢ２０より参照すると定数２５０で示される値０×ＡＡが得られる。なおここで定数２４９，２５０の値自身には特に意味はなく、任意の値が設定可能である。ここで必要なのは、同一プログラムをそれぞれのプロセッサ１０，２０で実行しなおかつプロセッサ毎に動作を切り換える必要がある場合に、本レジスタを用いて当該プログラムが現在どちらのプロセッサで実行されているかを知る手段を提供することにある。
【０１１３】
本実施例における割込振分機能３１の利用方法について以下に説明する。いずれのオペレーティングシステムで共通ドライバオブジェクト４３が処理されるかは一般に操作者が設定するものであり、対応する入出力装置からの割込をどちらのオペレーティングシステムに報告するか、すなわち割込振分機能３１にどのように設定するかは、共通ドライバオブジェクト４３が実行される際に設定するのが適当である。そこで共通ドライバオブジェクト４３の初期化処理中では、自身がいずれのプロセッサで実行されているかＯＳ判別フラグレジスタ３２を用いて判定し、自身が実行されているプロセッサに割込が通知されるように割込振分機能３１を設定することが望ましい。
【０１１４】
以上の構成により、共通ドライバオブジェクト４３を用いて、それぞれのオペレーティングシステムで共通に利用することが可能となる。またＯＳ判別フラグレジスタ３２を参照することにより、それぞれのプロセッサに固有の処理を行うことが可能となる。
【０１１５】
ここで本発明によると、オペレーティングシステム間である入出力装置を共有して使用する際に、ドライバを共有することも可能である。一般にデバイスの初期化処理は単一のオペレーティングシステムより行うことが望ましい。そこで当該入出力装置を構成制御するために、ドライバがどちらのオペレーティングシステムで実行されているかを判定し、一方のオペレーティングシステムのみ構成制御するよう処理すればよい。
【０１１６】
本発明による第３の実施例を、図１４を用いて説明する。
【０１１７】
図１４は、複数のオペレーティングシステムにおいて、入出力装置の制御担当を変更するための構成を示す。機能分散のマルチプロセッサを構成する計算機システムにおいて、システムの最適化をするために、それぞれのプロセッサ間で入出力装置の制御権を変更する場合がある。その際、従来ではオペレーティングシステムの再構築が必要であった。本発明では、入出力装置の制御権を簡便に変更するための構成について説明する。
【０１１８】
本発明にて新たに加えた要素は、ＤＢバッファ２６０，プロセッサ間で同期を取るためのプロセッサ間通信機能２６１，プロセッサＡ通信割込２６２，プロセッサＢ通信割込２６３である。ＤＢバッファ２６０は、オペレーティングシステム１０１とオペレーティングシステム１２１の間でデータを受け渡しするためのものであり、それぞれのオペレーティングシステムより読み書き可能なメモリに存在し、本発明ではメモリ１４０に存在する。
【０１１９】
図１５にプロセッサ間通信の構成を示す。プロセッサ間で同期をとるためには、一方より他方のプロセッサになんらかの通知を送信し、もう一方より通知を受信したことを送信元に返答する機能が必要である。
【０１２０】
図１５（ａ）にプロセッサ間通信機能２６１の１実装例を示す。ここではプロセッサの持つポート出力と割込を用いる方法を示す。すなわち、通知を発行したいプロセッサは、自身が備えるポート出力を駆動する。発行側のポート出力は、もう一方のプロセッサの割込に接続されている。ここではプロセッサＡポート出力２８０をプロセッサＢ割込み入力２８３に接続し、プロセッサＢポート出力２８２をプロセッサＡ割込み入力２８１に接続する。例えばプロセッサＡ１０からプロセッサＢ２０にイベントを通知する場合には、プロセッサＡ１０がプロセッサＡポート出力２８０を駆動し、プロセッサＢ割込み入力２８３に通知する。プロセッサＢは通知を認識すると、直ちにプロセッサＢポート出力２８２を駆動し、プロセッサＡ割込み入力２８１に通知してプロセッサＡ１０からの通知を認識したことを通知する。
【０１２１】
図１５（ｂ）にプロセッサ間通信機能２６１の他の実装例を示す。図１５（ａ）の構成ではプロセッサ間通信の要因までを通知することができない。本実装例は、プロセッサ通信の要因を示すレジスタを設けたことを特徴とする。プロセッサ間通信機能２６１は、Ａバスインターフェース２８６，プロセッサＡ割込マルチプレクサ２８７，プロセッサＡ割込要因２９２，Ｂバスインターフェース２８８，プロセッサＢ割込マルチプレクサ２８９，プロセッサＢ割込設定２９１，プロセッサＢ割込要因２９３から成る。Ａバスインターフェース２８６とＢバスインターフェース２８８は、それぞれのプロセッサバスからプロセッサ間通信機能２６１内部のレジスタ等にアクセスするためのインターフェースである。プロセッサＡ割込マルチプレクサ２８７とプロセッサＢ割込マルチプレクサ２８９は、複数ある割り込み要因（プロセッサＡ割込設定２９０またはプロセッサＢ割込設定２９１を含む）から、それぞれの割込み信号線に適した信号にエンコードして出力する。ここで割込信号線８１と割込信号線８３は、複数の要因を通知するために複数の信号線から構成すると良い。プロセッサＡ割込要因２９２とプロセッサＢ割込要因２９３は、プロセッサ間通信で通知する割込みの要因を示す。またここではこれらの機能を入出力制御装置３０に含めたが、必ずしも入出力制御装置３０である必要はなく、個別プロセッサ間通信用ハードウェアとして別に実装しても良い。
【０１２２】
以下に、プロセッサＡ１０からプロセッサＢ２０にイベントを通知する例について説明する。プロセッサＡ１０は、まず初めにプロセッサＢ２０に通知する要因を、プロセッサＢ割込要因２９３に設定する。引き続きプロセッサＡ１０は、プロセッサＢ割込設定２９１に所定のコードを書き入れる。するとプロセッサＢ割込マルチプレクサ２８９で割込みがエンコードされ、プロセッサＢ２０に割込みとして通知される。割込みを受けたプロセッサＢ２０は、割込みの要因を調べるためにプロセッサＢ割込設定２９１，プロセッサＢ割込要因２９３の順に検査し、プロセッサＡ１０からの割り込みであることと、割込みの要因がなんであるかを知る。その後割込みをクリアするために、プロセッサＢ割込設定２９１をクリアし、プロセッサ間通信を終了する。必要が有ればプロセッサＢ２０は、プロセッサ間通信機能２６１を用いてプロセッサＡ１０に通知しても良い。
【０１２３】
再び図１４について、例としてオペレーティングシステム１０１で処理を行っていた入出力装置の制御権をオペレーティングシステム１２１に渡す場合について説明する。入出力装置の制御権は操作者の指示により変更される。入出力装置の制御権を変更するためには、以下の作業が必要である。なお構成制御情報とはオペレーティングシステムが入出力装置を初期化する際に必要な情報のことであり、具体的にはメモリ、割込等のハードウェア資源の割り当て情報を意味する。
（イ）オペレーティングシステム間で入出力装置に対応するデバイスドライバを移動する。
（ロ）入出力装置に対応する構成制御情報をオペレーティングシステム間で移動する。
（ハ）オペレーティングシステム間で認識する入出力装置の構成を変更する。
【０１２４】
ここで上記（イ）の対応策として、それぞれのオペレーティングシステムに予め組み込んでおいたり、実際にデバイスドライバのオブジェクトをそれぞれのオペレーティングシステムが認識する不揮発性記憶装置間で移動しても、さらには本発明の第２の実施例で示した共通ドライバオブジェクトを使用しても良い。
【０１２５】
上記（ロ）に関して、それぞれのオペレーティングシステムは構成制御情報である入出力装置データベース１１０，１３０を変更する必要がある。以下に構成制御情報を変更する手順を説明する。オペレーティングシステム１０１は入出力装置データベースより、当該入出力装置に関するデータベースのエントリを抽出しＤＢバッファ２６０に書き出す。オペレーティングシステム１０１は、ＤＢバッファ２６０にデータベースエントリを書き出したことをオペレーティングシステム１２１にプロセッサ間通信機能２６１を介して通知する。通知を受けたオペレーティングシステム１２１は、ＤＢバッファ２６０を参照し、自オペレーティングシステムが管理する入出力装置データベース１３０を更新する。更新した後、オペレーティングシステム１２１は、オペレーティングシステム１０１にプロセッサ間通信機能２６１により、更新が終了した旨を通知する。更新終了通知を受けたオペレーティングシステム１０１は、自オペレーティングシステムが管理する入出力装置データベース１１０から当該入出力装置に関するエントリを削除する。
【０１２６】
もしもオペレーティングシステム１２１が何らかの理由により正常にエントリを更新できない場合には、オペレーティングシステム１０１は、異常終了した旨をオペレーティングシステム１２１より通知されるか、または通知が一定時間内に終了しないことを自ら検出して、当該入出力装置のエントリを削除しない。なお通知が一定時間内に終了しないことを検出するには、プロセッサあるいはプロセッサ外部の入出力装置に実装されるタイマ機能を用いると良い。
【０１２７】
ここでオペレーティングシステム１０１における入出力装置データベースのエントリの内容に関して、オペレーティングシステム１２１の構成と異なる場合がある。例えば入出力装置の出力する割込のレベルがオペレーティングシステム間で異なることがある。そのような場合、オペレーティングシステム１２１は入出力装置データベース１３０を更新する際、該当するデータベースエントリの内容を変更する。変更の際には、ユーザの介入による値変更の指示や、予め保持する入出力装置の初期設定情報等を元にオペレーティングシステム１２１は変更する。
【０１２８】
万が一オペレーティングシステム１２１が入出力装置データベース１３０を更新した後に、何らかの理由により変更終了を通知できなかった場合には、両方のオペレーティングシステムが管理する入出力装置データベース中に同一入出力装置に関するエントリが存在することになる。最悪の場合でも、構成定義テーブル１４１の参照により、一方のエントリは意味の無いエントリ（存在しないはずの入出力装置に対するアクセス）として無視されるが、信頼性の面で不必要なエントリを残すのは問題がある。そこで確実に入出力データベースを更新するために、既存のデータベース更新技術、例えば２フェーズ・コミット方式を採用するとよい。
【０１２９】
２フェーズ・コミット方式とは、まず更新に関連するデータベースを管理するサーバに対してトランザクションを完了（コミット）可能な状態に有るかどうか問い合わせ（フェーズ１）、いずれもレディ状態に有ることを確認すると、全てのデータベースサーバに対してコミットするよう通知する（フェーズ２）。ここでは入出力装置データベース１１０，１３０それぞれにデータベースサーバを設けて、入出力装置移動元にあるオペレーティングシステムがそれぞれのデータベースサーバにエントリの削除と追加を通知する。最終的にいずれも問題ない場合には、入出力装置移動元にあるオペレーティングシステムがコミットをそれぞれのデータベースサーバに通知して、実際のデータベースに反映するよう指示することにより、両方のデータベースが一気に更新される。この際、それぞれのデータベースサーバでは記録を取りながら処理を進めるため、万が一途中で不測の事態におちいっても復旧することが可能である。
【０１３０】
以上により、安全に入出力エントリを移動することが可能となる。
【０１３１】
上記（ハ）に関し、オペレーティングシステム間で認識する入出力装置の構成を変更するためには、構成定義テーブル１４１の変更が必要である。構成定義テーブル１４１を変更するには、図４の説明に述べた通り、オペレーティングシステムからの参照が無い状態でテーブルの内容を変更する必要がある。変更する手順は次の通りとなる。入出力装置の制御を手放すオペレーティングシステム（ここでの例はオペレーティングシステム１０１）は、上記（ロ）の処理が正常に終了した時点で、構成定義テーブル１４１を別のメモリ領域にコピーし、構成定義テーブルの当該入出力装置のＯＳエントリ１４３を“１”（オペレーティングシステム１０１を示す）から“２”（オペレーティングシステム１２１を示す）に変更する。オペレーティングシステム１０１は、変更した構成定義テーブルを不揮発性記憶装置４２の構成定義テーブル保存領域４４に書き込む。その後計算機システムを再立上げすると、計算機立上げ処理プログラムが構成定義テーブル保存領域４４よりメモリ１４０に構成定義テーブル１４１を復元する。
【０１３２】
以上のような構成と方法をとることにより、オペレーティングシステム間で入出力装置の制御権を移し替えることが可能となる。
【０１３３】
本発明による第４の実施例を、図１６を用いて説明する。
【０１３４】
図１６は、入出力装置を複数のオペレーティングシステムにて共有するための構成を示し、特に入出力装置として通信装置７１を共有するための構成を示す。図１，図１２，図１４と同一番号の要素に付いては、本発明のこれまでの実施例で説明したものと同一である。図１６にて新たに加わった構成要素として、メモリ１００における通信共用ドライバ１０５−Ａと、代理サーバ１０５−Ｐ，メモリ１２０における通信共用ドライバ１２５−Ｂ，通信バッファ２６４がある。以下に通信装置７１を二つのオペレーティングシステム１０１，１２１が共有して利用する方法を説明する。
【０１３５】
通信装置７１は、通信路を介して他の計算機装置やネットワーク装置と接続している。通信装置７１が接続する通信路として有線または無線の伝送媒体が有る。またこれらの媒体上ではプロトコルと呼ばれる通信規約に基づき、通信装置間でデータの交換が行われる。現在インターネットで主に使用されるプロトコルとして、ＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）やＵＤＰ／ＩＰ（User Datagram Protocol/Internet Protocol）が挙げられる。ＴＣＰやＵＤＰも、ＩＰもＯＳＩ（Open Systems Interconnection）参照プロトコルで定められる階層モデルにおいて、それぞれトランスポート層とネットワーク層に対応するプロトコルである。ＩＰとは、他の通信ノードとの接続を実行するアドレスの割り振りや通信ノードに至るまでのルーティングを規定するプロトコルである。またＴＣＰとは、各種通信サービス（ＴＥＬＮＥＴやＦＴＰ（File Transfer Protocol），ＨＴＴＰ（Hyper Text Transfer Protocol）等）の信頼性を支えるもので、コネクション管理，チェックサム，応答確認等を規定するプロトコルである。ＵＤＰもＴＣＰ同様通信サービスの信頼性を支えるプロトコルである。ＴＣＰが通信装置間でコネクションを張るのに対し、ＵＤＰはコネクションレス型通信であり、ＴＣＰより簡略化されている。本実施例では、通信装置７１がＴＣＰ／ＩＰにて通信する例を元に説明する。
【０１３６】
図１７にＴＣＰにて定められるデータパケットのフォーマットを示す。ＴＣＰのパケットは、送信元ポート番号５００，送信先ポート番号５０１，その他のＴＣＰヘッダ５０２，データ５０３から成る。ここではＴＣＰヘッダの詳細な説明は省くが、その他のＴＣＰヘッダ５０２は、送信用シーケンス番号，応答確認番号，ヘッダ長，コードビット，ウィンドウ，チェックサム，緊急ポインタから構成される。一般に、ＴＣＰより上位のネットワークアプリケーションは、ポート番号を元に、データ送受信の宛先アプリケーションを指定する。例えば『良く知られたポート番号』として、ＴＥＬＮＥＴアプリケーションならば２３，ＦＴＰアプリケーションならば２０と２１等がある。
【０１３７】
以下では、図１６について複数のオペレーティングシステム間で通信装置を共用する方法について説明する。なお本実施例では割込振分機能３１について、通信装置７１から上げられる割込はオペレーティングシステム１０１にあがるよう予め設定する。
【０１３８】
通信装置７１を共用するに当たり、通信装置７１からドライバが受けるデータの種別として、一般に次の３種がある。
（ａ）データ受信
（ｂ）受信データのステータス報告
（ｃ）送信データのステータス報告
またドライバから通信装置７１に渡すデータとして次の１種がある。
（ｄ）データ送信
以下では、通信装置７１とこれらデータを授受する方法について説明する。
【０１３９】
まず受信処理に関して以下に説明する。通信装置７１は、通信路よりデータを受信すると受信データと受信ステータスをメモリ上に転送し、データ受信した旨を割込にてオペレーティングシステム１０１に通知する。割込を受けたオペレーティングシステム１０１は割込みの要因が通信装置７１に有ることを検出し、受信したデータの処理を通信共用ドライバ１０５−Ａに依頼する。通信共用ドライバ１０５−Ａは、受信したデータパケットのＴＣＰヘッダ中の送信先ポート番号５０１を解析する。そして通信共用ドライバ１０５−Ａは、受信したデータの送信先ポート番号５０１に対応した上位アプリケーションに通知する。ここで受信したデータの宛先が代理サーバ１０５−Ｐであった場合、データを受け取った代理サーバ１０５−Ｐは通信バッファ２６４に受信データを格納し、プロセッサ間通信２６１を用いて、オペレーティングシステム１２１にデータ受信した旨を通知する。割込を受信したオペレーティングシステム１２１は割込要因がデータ受信であることを検出すると、通信共用ドライバ１２５−Ｂに代理サーバ１０５−Ｐからのデータの処理を依頼する。通信共用ドライバ１２５−Ｂは、必要に応じて上位のアプリケーションに通知し処理を完了する。また通信共用ドライバ１０５−Ａが受信したデータの宛先が、他の上位アプリケーション（例えばＴＥＬＮＥＴ等）であった場合は、通信共用ドライバ１０５−Ａは対応する上位アプリケーションにデータを通知し処理を完了する。
【０１４０】
次に送信処理に関して以下に説明する。送信すべきデータを通信共用ドライバ１０５−Ａが上位のアプリケーションより受け取ると、通信共用ドライバ１０５−Ａは、受け取ったデータを元に送信データと送信ステータス（送信に関する情報が設定されている）をメモリ上に準備する。送信を開始する方法として、通信共用ドライバ１０５−Ａが通信装置７１に何らかの方法（通信装置７１のレジスタ経由）にて送信準備が出来た旨を通知するか、あるいは通信装置７１が一定周期で送信ステータスを検査し送信データの準備が出来たことを自分で判定する、という方法がある。いずれの場合でも、通信装置７１は送信データと送信ステータスを元にデータを通信路に送信し、送信の成否や通信路の状態等を送信ステータスとして通信共用ドライバ１０５−Ａに応答し、処理を完了する。一方オペレーティングシステム１２１において、上位アプリケーションが送信すべきデータを通信共用ドライバ１２５−Ｂに渡すと、通信共用ドライバ１２５−Ｂは次の処理を行う。通信共用ドライバ１２５−Ｂは上位アプリケーションより受けたデータをそのまま通信バッファ２６４に格納して、プロセッサ間通信機能２６１で代理サーバ１０５−Ｐに通知する。代理サーバ１０５−Ｐは通信共用ドライバ１０５−Ａに通信バッファ２６４のデータを渡し処理を完了する。
【０１４１】
ここで通信装置７１からの受信データと受信ステータスの転送先、あるいは通信装置７１への送信データと送信ステータスの格納先として、メモリ１００でもメモリ１４０でも可能だが、他方のオペレーティングシステム１２１との間でデータの授受を考えると、双方のオペレーティングシステムよりアクセス可能なメモリ１４０に置くことが好適である。
【０１４２】
本発明では、例えばＴＣＰ／ＩＰに接続する通信装置７１を用いる場合、送信先ポート番号５０１により受信したデータパケットの行き先オペレーティングシステムを決定することを特徴とする。またさらにポート番号までを同一とし、さらにその上位のアプリケーションにて規定される送信先番号等を規定し、それらを元に受信したデータパケットの行き先オペレーティングシステムを決定することを特徴とする。
【０１４３】
なお本発明は通信装置を例に説明を行ったが、同様の手法により他の入出力装置の共有を実現することが可能である。すなわち各種デバイスドライバの上位アプリケーションとして代理サーバ１０５−Ｐに相当するアプリケーションを実装し、その代理サーバとメモリ１４０を経由してもう一方のオペレーティングシステムより入出力装置を制御するものである。
【０１４４】
通信装置を共有することにより当該計算機システムを利用するユーザは、通信に必要なハードウェア資源（ケーブルやネットワークアドレス等）を削減できる上に、設定作業は半減し、効率よく通信することが容易となる通信費も削減できる。
【０１４５】
本発明による第５の実施例を図１８を用いて説明する。
【０１４６】
図１８は、複数のオペレーティングシステムが物理的に別の装置に分離している場合に入出力装置を共有するための構成例を示し、特に入出力装置として通信装置７１を共有するための構成を示す。図１，図１２，図１４，図１６と同一番号の要素に付いては、本発明のこれまでの実施例で説明したものと同一である。図１８にて新たに加わった構成要素として、連携通信装置７３−Ａ，Ｂ，プロトコル変換機能７４，連携伝送路７６，デバイス情報遠隔取得機能１２７，デバイス情報遠隔設定機能１２８，遠隔装置リスト１２９，連携通信ドライバ４００，４２０，遠隔計算機リスト４１０がある。オペレーティングシステム１０１と１２１はそれぞれ別の計算機装置２と計算機装置３に分離している。
【０１４７】
連携通信装置７３−Ａ，Ｂは、連携伝送路７６を介してお互いに接続し、また他の計算機装置とも接続する。連携伝送路７６として有線または無線の伝送媒体が有る。
【０１４８】
プロトコル変換機能７４は、連携通信装置７３−Ａ，Ｂに実装してもよいが、一般的には連携通信装置７３−Ａ，Ｂのデバイスドライバとしてそれぞれ連携通信ドライバ４００，４２０上に実装する。プロトコル変換機能７４の機能は次の通りである。第１の機能は、デバイス情報遠隔取得機能１２７またはデバイス情報遠隔設定機能１２８からの要求を受け構成定義要求メッセージに変換する。第２の機能は、構成定義要求メッセージを連携伝送路７６から受けると、デバイス情報取得機能１０２またはデバイス情報設定機能１０３に要求を発行しメッセージ発行元に応答を返す。第３の機能は、通信共用ドライバ１０５−Ａ，１２５−Ｂの間でデータを相互に交換する、である。
【０１４９】
なお計算機装置２が認める以外の計算機装置が、計算機装置２に共有関係を求めてくることは望ましくないので、共有可能な入出力装置を有する計算機装置２は自身が認める計算機のリストを用意する必要がある。本発明では遠隔計算機リスト４１０をオペレーティングシステム１０１が管理する。計算機装置２は自身が有する入出力装置の共有を認める計算機を本リストに記載し、本リストに記載されない計算機からの要求を拒絶する。
【０１５０】
複数のオペレーティングシステムで入出力装置を共有するためには、次の２点を解決する必要がある。
（ｉ）双方のオペレーティングシステムで立上げ時に当該入出力装置を共有することを認識する
（ii）運用中、いずれのオペレーティングシステムに通知するデータであるかを認識し、配送する
以下に例として通信装置７１を二つのオペレーティングシステム１０１，１２１すなわち計算機装置２と計算機装置３で共有して利用する方法を説明する。なおここでは入出力装置の共有について説明するが、本発明によればこれら計算機装置間で、入出力装置を排他的に利用することは実施例１と同様の手順をとることにより可能である。
【０１５１】
計算機装置３は立ち上がる際、またはユーザからの指示の際に、自計算機装置が利用可能な入出力装置を認識する必要がある。図１８では計算機装置３において構成定義参照機能１２４や構成定義テーブル１４１を省略しているが、必要が有れば実装し、計算機装置３内部の構成制御を第１の実施例と同様に行ってもよい。本実施例では図９（ｂ）で示したような入出力装置リスト１１２を実装し、計算機システムの構成制御を行うものとする。
【０１５２】
図１９に遠隔装置の認識に関する処理フローを示す。
【０１５３】
図２０に計算機装置２における入出力装置確認処理の処理フローを示す。
【０１５４】
オペレーティングシステム１２１は、立上げ時あるいはユーザからの指示が有った時点で、入出力装置リスト１１２に列挙される入出力装置を構成制御するのと同様に、遠隔装置リスト１２９に列挙される入出力装置を構成制御する。以下では図１９と図２０に基づき説明を行う。
【０１５５】
オペレーティングシステム１２１は、遠隔装置リスト１２９に記述される入出力装置の情報を取得するために、必要な情報と共にデバイス情報遠隔取得機能１２７を呼び出す（処理６００）。デバイス情報遠隔取得機能１２７は、デバイス情報取得要求を連携通信ドライバ４２０を介して、連携通信機能７３−Ｂに渡す（処理６１０）。連携通信ドライバ４２０では、プロトコル変換機能７４を用いて要求を構成定義要求メッセージに変換し（処理６２０）、連携伝送路７６を介して連携通信装置７３−Ａに通知する（処理６２１）。
【０１５６】
通知を受けた連携通信装置７３−Ａのデバイスドライバである連携通信ドライバ４００は、受信したデータより計算機装置３からの構成定義要求メッセージであることを認識し（処理６３０）、遠隔計算機リスト４１０に要求元である計算機装置３が含まれるか確認する（処理６３１）。もしも遠隔計算機リスト４１０に計算機装置３が含まれない場合、連携通信ドライバ４００は該当する入出力装置が無い旨を通知し、処理を終了する（処理６３６）。もしも遠隔計算機リスト４１０に計算機装置３が含まれる場合、連携通信ドライバ４００はデバイス情報取得機能１０２に要求を発行し、結果を得る（処理６３２）。そこでＯＳエントリが不一致であった場合、連携通信ドライバ４００は処理６３６を実行し、処理を終了する。ＯＳエントリが一致した場合、連携通信ドライバ４００は計算機装置２と計算機装置３の間で認証関係に有るとして、入出力装置へのアクセスを許可するキーコードを生成する（処理６３４）。以降、当該入出力装置へ計算機装置３がアクセスをする場合、本キーコードをアクセス要求メッセージに添付あるいはキーコードを用いたメッセージの暗号化を行い、計算機装置２にアクセスする。連携通信ドライバ４００は本キーコードを保存し、以降の計算機装置３からのアクセスに対して認証を行う。さて連携通信ドライバ４００は、処理６３３の応答結果を生成し（処理６３５）、要求元である連携通信機能７３−Ｂに対してメッセージに変換して返送する（処理６３７）。この時キーコードを合わせて送る。
【０１５７】
応答を待っている連携通信機能７３−Ｂは（処理６２２）、受信した結果を元に、認証されたかどうか判定し（処理６２３）、もし認証されたならキーコードを保存する（処理６２４）。その後連携通信ドライバ４００は、プロトコル変換機能７４によりメッセージをデバイス情報遠隔取得機能１２７に対する応答に変換し応答する（処理６２５）。
【０１５８】
デバイス情報遠隔取得機能１２７は、認証されたか判定する（処理６１１）。認証された場合、さらに入出力装置があるのか否か判定する（処理６１２）。もし当該入出力装置があれば「入出力装置有り」と応答を返し（処理６１３）、なければ「入出力装置無し」と要求元オペレーティングシステムに応答を返す（処理６１４）。
【０１５９】
その後オペレーティングシステム１２１は、遠隔装置認識の結果、該当する入出力装置が存在しているか判定する（処理６０２）。さらに当該入出力装置が計算機装置３によって排他的に利用されるものであれば（処理６０３）、当該入出力装置に対して、構成制御を実行する（処理６０４）。そして全ての遠隔装置リスト１２９中の入出力装置の検査が終わると、オペレーティングシステム１２１は処理を終了する（処理６０５）。
【０１６０】
ここで計算機装置３は通信装置７１が利用（計算機装置２と共有）可能であるとする。ここで例えば計算機装置３が排他的に利用する入出力装置が計算機装置２にある場合には、さらにデバイス情報遠隔設定機能１２９を用いて構成制御を行えばよい。この場合でも動作はデバイス情報遠隔取得機能１２８と同様である。
【０１６１】
計算機装置３から計算機装置２における入出力装置を利用するためには、直接当該入出力装置を制御するのは困難であるため、代理のデバイスドライバや代理のサーバを予め起動しておく必要がある。起動する代理デバイスドライバまたは代理サーバは、計算機装置３からの要求に応じて動的に起動してもよいが、性能的な観点から予めオペレーティングシステムで当該ドライバやサーバを立上げておくのが良い。
【０１６２】
以下に計算機装置３から通信装置７１を利用する方法について説明する。まず通信装置７１からの受信データを計算機装置３のアプリケーションに転送する場合を説明する。通信装置７１がデータを受信した後、通信共用ドライバ１０５−Ａが代理サーバ１０５−Ｐに通知をする所までは第４の実施例と同様である。データを受け取った代理サーバ１０５−Ｐは、連携通信ドライバ４００に受信したデータを渡す。連携通信ドライバ４００は渡されたデータを、通信処理に必要な処理を施した後に連携伝送路７６を介して連携通信装置７３−Ｂに送信する。連携通信装置７３−Ｂはデータの受信を割込にてオペレーティングシステム１２１に通知する。オペレーティングシステム１２１は割込要因を解析し、連携通信装置７３−Ｂからのデータ受信であると判定し、連携通信ドライバ４２０に処理を依頼する。連携通信ドライバは、受信したデータより最終的な宛先のアプリケーション（例えばＨＴＴＰ）を判定し、データを渡して処理を終了する。
【０１６３】
次に計算機装置３から通信装置７１へデータを送信する場合を説明する。送信すべきデータを連携通信ドライバ４２０が上位のアプリケーションより受け取ると、連携通信ドライバ４２０は受けたデータに必要な通信処理を施した後に連携伝送路７６を介して連携通信装置７３−Ａに送信する。連携通信装置７３−Ａはデータを通信バッファ２６４に格納し、データの受信を割込にてオペレーティングシステム１０１に通知する。その後処理を渡された連携通信ドライバ４００はデータの送信要求であることを代理サーバ１０５−Ｐに通知する。代理サーバ１０５−Ｐは通信共用ドライバ１０５−Ａに通信バッファ２６４のデータを渡し処理を完了する。
【０１６４】
本発明によれば、計算機装置３は共有する入出力装置（本実施例では通信装置７１）の立上げ時に必ずしも用意されていなくても良い。そのため計算機装置３は、計算機装置２が立ち上がった後に動的に連携通信装置７３−Ａ，Ｂを介して接続し、共有して入出力装置を利用することが可能である。また計算機装置３は計算機装置２が稼働中に動的に離脱しても、計算機装置２の動作に影響を与えない。計算機装置３は、離脱した後に再び接続する場合、計算機装置２の通信装置７１を共有するよう例えばユーザからの指示を受け、共有関係を再確立することが可能となる。すなわち本発明によれば計算機装置３は、連携通信装置７３−Ａ，Ｂを介して動的に接続あるいは離脱する場合でも、計算機装置２と入出力装置を共有して利用することが可能である。
【０１６５】
また本発明は、計算機装置立上げ時あるいはユーザの指示がある時に共有する入出力装置が利用できるか構成定義テーブルを参照し、通常の運用時には構成定義テーブルを参照しないため、通常の運用時に高速に共有入出力装置を利用できることを特徴とする。
【０１６６】
図２１に遠隔装置リスト１２９の構成例を示す。
【０１６７】
遠隔装置リスト１２９は、計算機識別ＩＤ４４１，バス番号４４２，デバイス番号４４３，機能番号４４４，ＯＳエントリ４４５から成る。計算機識別ＩＤ４４１は、連携通信装置７３−Ａ，Ｂが接続する連携伝送路７６において唯一決定するＩＤ番号が列挙されている。本実施例では、計算機装置２のみの入出力装置を指定しているため、同一の計算機識別ＩＤとなっている。計算機識別ＩＤ４４１として、例えばＩＰアドレスやＭＡＣ（Media Access Control）アドレス等の、当該計算機装置環境で唯一となるＩＤを採用するとよい。その他のバス番号４４２，デバイス番号４４３，機能番号４４４，ＯＳエントリ４４５は、それぞれ図４（ｂ）におけるバス番号１４４，デバイス番号１４５，機能番号１４６，ＯＳエントリ１４７と同様である。なお遠隔装置リスト１２９は、基本的に計算機装置３が計算機装置２に対して共有あるいは排他的に利用する入出力装置に関する記述を示すので、一般的にはオペレーティングシステム１０１のみが使用するエントリは含まない。
【０１６８】
計算機識別ＩＤ４４１を用いることにより、連携通信装置７３−Ｂは共有する入出力装置を有する計算機装置を計算機装置ＩＤ４４１にて指定することにより、連携伝送路７６に複数の計算機装置が接続されていても、唯一の計算機装置を指定することができる。
【０１６９】
遠隔装置リスト１２９を用いることにより、連携通信ドライバ４２０は、計算機装置ＩＤ４４１により計算機装置を特定し、バス番号４４２，デバイス番号４４３，機能番号４４４により当該計算機装置内の入出力装置を特定できる。
【０１７０】
これまで説明した第１から第５の実施例において、構成定義テーブル１４１の構成についてより簡便にするために、次のようにしてもこれまでの目的を達成することが出来る。すなわち、各ＯＳ毎に記憶領域を定め、それぞれの記憶領域におけるアドレスまたはビット位置と入出力装置を一意に関連付け、それぞれのアドレスまたはビット位置に設定されている値によって入出力装置の担当ＯＳを決定する。アドレスと入出力装置を関連付ける例をとれば、例えば、オフセットアドレス＝０の場合には表示装置７０の担当ＯＳを表し、オフセットアドレス＝１の時は入出力制御装置３０の担当ＯＳ、オフセットアドレス＝２の場合にはキーボード４０の担当ＯＳを表すこととする。それぞれのオフセットアドレスには、当該記憶領域に関連付けられたＯＳが当該入出力装置を担当すべきか否かを示す値がデータとして保持されている。例えば、表示装置７０はオペレーティングシステム１０１が担当するならば、オペレーティングシステム１０１用の記憶領域のオフセットアドレス＝０には値１、オペレーティングシステム１２１用の記憶領域のオフセットアドレス＝０には値０が設定される。ここで、値１は当該ＯＳが担当する、値０は当該ＯＳが担当しないことを意味する。そして共有する装置に関しては、格納する値に特定の値（例えば前述の値に１２８を加えた値とする）で表現すればよい。構成定義参照機能１０４，１２４は、上位のデバイスドライバから要求される入出力装置とオフセットアドレスの関係をあらかじめ（例えば変換テーブルにより）把握しておく機能が必要である。構成定義参照機能１０４，１２４は、それぞれのＯＳと関連する記憶領域を参照することにより、自身が担当する入出力装置を特定することが可能となる。以上の構成をとることにより、構成定義テーブル１４１は必ずしもメモリ１４０、すなわち共有メモリに存在する必要がなくなり、例えばそれぞれのオペレーティングシステムからのみ参照できるメモリ１００，１２０に、それぞれのオペレーティングシステム用の記憶領域を配置することが可能となる。
【０１７１】
本発明による第６の実施例を図２２を用いて説明する。
【０１７２】
図２２は、構成定義テーブル１４１を構築するためのプログラムを示す。図４（ｂ）に示すような構成定義テーブル１４１を用意するために、直接テーブルを記述するのは管理や使い勝手の面から望ましくない。そこで、図２２（ａ）に示すようなＧＵＩ（Graphical User Interface）による、構成定義構築ツール５００を用意する。ユーザは構成定義構築ツール５００を用いて入出力装置の制御をいずれのオペレーティングシステムで行うか指示する。
【０１７３】
構成定義構築ツール５００は、決定ボタン５０１，取消ボタン５０２，全入出力装置リスト５１０，ＯＳ−Ａ制御リスト５１１，共有制御リスト５１２，ＯＳ−Ｂ制御リスト５１３と、入出力装置を表わすアイコンから成る。構成定義構築ツール５００は構成定義テーブル１４１を格納する計算機で実行してもよいが、他の計算機システムで実行して対象となる計算機に転送しても良い。
【０１７４】
図２２（ａ）は構成定義構築ツール５００の初期画面である。決定ボタン５０１が押されると、現在の構成定義構築ツール５００に設定されている内容で結果を構築情報ファイル５１５として出力し、構成定義構築ツール５００は終了する。取消ボタン５０２が押されると、現在の構成定義構築ツール５００に設定されている内容を取り消して、構成定義構築ツール５００は終了する。構成定義構築ツール５００は起動する際に、現在の構築情報ファイル５１４を取り込んで、その状態を構成定義構築ツール５００の画面に反映する。
【０１７５】
以下にユーザが構成定義構築ツール５００を用いて、入出力装置の制御をいずれのオペレーティングシステムで行うか指示する方法について説明する。
【０１７６】
ユーザは、入出力装置の処理を行うのがいずれのオペレーティングシステムまたは共有とするかを設定するために、入出力装置に対応するアイコンを選択し、対象となるリスト５１１，５１２，５１３のいずれかにアイコンをドラッグ・アンド・ドロップする。アイコンが置かれるリストに対応して、オペレーティングシステム１０１，オペレーティングシステム１２１、または共有となる。図２２（ｂ）に示すように設定が終了すると、ユーザは決定ボタン５０１を押す。その結果、構成定義構築ツール５００は現在の設定情報を構築情報ファイル５１５として出力する。また現在の設定情報を破棄したい場合、ユーザは取消ボタン５０２を押し、構成定義構築ツール５００を終了する。
【０１７７】
図２２（ｃ）は構築情報初期設定ファイル５４０の内容例である。構築情報初期設定ファイル５４０は入出力装置名５２０，装置ＩＤ５２１，バス種別５２２，バス番号５２３，デバイス番号５２４，機能番号５２５，ＯＳ固定フラグ５２６，共有フラグ５２７から構成される構造体の配列である。このほかにも、入出力装置に対応するアイコンのビットマップファイル名等も必要に応じて追加する。入出力装置名５２０は、アイコンと合わせて表示される入出力装置の名前である。装置ＩＤ５２１は、ＧＵＩ画面のアイコンに対応した一意の番号である。バス種別５２２，バス番号５２３，デバイス番号５２４，機能番号５２５は、図４（ｂ），（ｃ）で説明したバス種別１４８，バス番号１４４，デバイス番号１４５，機能番号１４６と同様である。ＯＳ固定フラグ５２６は、当該入出力装置を処理可能なオペレーティングシステムを表わしたものである。本実施例では、０ｘ０１はオペレーティングシステム１０１を、０ｘ０２がオペレーティングシステム１２１を表わし、これらの論理和である０ｘ０３が両方のオペレーティングシステムを表わす。すなわち図２２（ｃ）では“表示装置”のみがオペレーティングシステム１０１でしか処理可能であり、“拡張スロット０”がオペレーティングシステム１２１でしか処理可能であり、他の入出力装置はどちらのオペレーティングシステムでも処理可能であることを意味する。共有フラグ５２７は、当該入出力装置が共有して制御することが可能であるかを示すフラグである。０ｘ０１の値を持つ入出力装置が共有可能であり、０ｘ００の値を持つ入出力装置は共有不可能であることを表わす。本実施例では通信装置のみが共有可能であることを表わしている。なお、共有不可能のフラグを持つ入出力装置は、共有制御リスト５１２にドロップすることは出来ないよう制御される。
【０１７８】
次に装置ＩＤ５２１を用いて、構成定義構築ツール５００から構築情報ファイル５１５を作成する手順を示す。ユーザがアイコンをＧＵＩ画面の中のあるリストから引き抜くと、各リストを管理する配列から当該入出力装置に対応する装置ＩＤ５２１が削除される。その後アイコンが別のリストに置かれると、当該リストを管理する配列に当該入出力装置の装置ＩＤ５２１が追加される。そしてユーザが決定ボタン５０１を押すと、ＯＳ−Ａ制御リスト５１１，共有制御リスト５１２，ＯＳ−Ｂ制御リスト５１３をそれぞれ管理する配列に含まれる装置ＩＤ５２１が決定される。その後それぞれの装置ＩＤ５２１と対応するバス種別５２２，バス番号５２３，デバイス番号５２４，機能番号５２５に加え、それぞれを制御するオペレーティングシステムを意味するフラグが生成され、構築情報ファイル５１５として出力する。構築情報ファイル５１５は、対象となる計算機システムに転送される際に、構成定義テーブル１４１で定められる書式に従い変換され、構成定義テーブル１４１または不揮発記憶装置４２上の構成定義テーブル保存領域４４に格納される。
【０１７９】
以上より、構築情報初期設定ファイル５４０に基づき、構成定義構築ツール５００はＧＵＩ画面上でアイコンの移動を制御したり、構築情報ファイル５１５を出力することが可能となる。
【０１８０】
図２３に構成定義構築ツールの他の実施例を示す。
【０１８１】
図２３は他の構成定義構築ツール５５０のＧＵＩ画面の構成を示す。それぞれの入出力装置は、いずれかのオペレーティングシステムに固定的にしか使用できないものもあり、また共有可能な入出力装置も制限される場合がある。その場合、図２２（ａ）にて示されるユーザインターフェースでは、入出力装置が持つ制限が直感的に分かりづらい点がある。その問題点を解決するために、構成定義構築ツール５５０では、入出力装置毎に取りうるオペレーティングシステムの組を予めプルダウンメニュー形式で提供することを特徴とする。
【０１８２】
構成定義構築ツール５５０は、入出力装置名５５１とＯＳ選択プルダウンリスト５５２から成る。入出力装置名５５１毎に、取りうるオペレーティングシステムの組はＯＳ選択プルダウンリスト５５２に記載されている。例えば図２２（ｃ）の初期設定によると、通信装置はオペレーティングシステム１０１，１２１あるいは共有のいずれも取りうるので、ＯＳ選択プルダウンリスト５５２には全てが記載されている。そこでユーザはいずれの構成を選択することが可能である。一方、拡張スロット０はオペレーティングシステム１２１（ＯＳ−Ｂ）のみが制御可能となっているため、ＯＳ選択プルダウンリスト５５２は選択の余地がなく、“未使用”または“ＯＳ−Ｂのみ”の項目だけが選択可能となる。その他のボタンやボタンを押した後の動作は、図２２の場合と同様である。
【０１８３】
本発明によれば、市場に流通する汎用ＯＳを活用しつつ複数のＯＳを実装する計算機システムにおいて、入出力装置を制御するＯＳを柔軟に設定し、例えば入出力装置個別に制御するＯＳを排他的あるいは共有して設定することが可能となる。さらに入出力装置を制御するオペレーティングシステムを「無し」とすることで、当該入出力装置を一時的に無効にすることが可能である。また当該オペレーティングシステムに無関係な入出力装置に対しても安全にアクセスできるため、計算機システム内の全入出力装置を検索し構成制御するといった、プラグアンドプレイ・オペレーティングシステムを採用することが可能となる。
【０１８４】
また本発明によれば、入出力装置を共有する複数のＯＳを実装した計算機システムにおいて、一方のＯＳの稼動状況に関わらず、もう一方のＯＳは共有する入出力装置を継続して使用することが可能となる。すなわち本発明の目的である、一方のＯＳの不具合は入出力装置を共有するもう一方のＯＳの稼動状況に影響を与えないようにすることが可能となる。
【０１８５】
また本発明により、通信装置をはじめとする入出力装置を、別筐体の計算機装置間で共有することが可能となる。例えば、携帯電話で通話しながら、携帯電話に取り付けられた無線装置を介して、同じく無線装置を取り付けられたゲーム装置にデータを転送するといった使い方が可能となる。この際、計算機装置が認証しない計算機装置からの入出力装置アクセスを拒絶することも本発明により実現できる。
【０１８６】
さらに本発明によれば、同種の複数のＯＳを実装する計算機システムにおいて、ＯＳ間で入出力装置のデバイスドライバを共有することが可能となる。
【０１８７】
さらに本発明によれば、入出力装置を複数のＯＳ間で排他的に制御する計算機システムにおいて、入出力装置を制御あるいは管理するＯＳを容易に切り換えることが可能となる。このため、一方のオペレーティングシステムの負荷が高まった場合、もう一方のオペレーティングシステムにある入出力装置の処理を移行する際に、ユーザの作業量を低減することができる。
【０１８８】
また本発明によれば、これら複数の入出力装置を制御するオペレーティングシステムを設定するために、ＧＵＩ画面を用いて容易に設定することが可能となる。入出力装置によっては、特定のオペレーティングシステムによってのみ制御されるものも有り、こういった入出力装置に対してもユーザが迷わないように、プルダウンリストを用いて取りうるオペレーティングシステムの組をＧＵＩ画面で設定することも可能となる。
【産業上の利用可能性】
【０１８９】
本発明は、複数の計算機を用いた制御装置，複数のオペレーティングシステムを動作させる計算機などに適用することが可能となる。
【図面の簡単な説明】
【０１９０】
【図１】本発明の第１の実施例である計算機システムを示す図である。
【図２】割込振分機能の一実施例である。
【図３】割込振分機能の他の実施例である。
【図４】構成定義テーブルの構成例である。
【図５】構成定義参照機能の処理フローである。
【図６】構成定義参照機能の一実装例である。
【図７】デバイス情報取得機能の処理フローである。
【図８】デバイス情報設定機能の処理フローである。
【図９】デバイスドライバ組込み機能のブロック図である。
【図１０】入出力装置列挙機能の処理フローである。
【図１１】入出力装置参照機能の処理フローである。
【図１２】本発明の第２の実施例である計算機システムを示す図である。
【図１３】ＯＳ判別フラグの構成例である。
【図１４】本発明の第３の実施例である計算機システムを示す図である。
【図１５】プロセッサ間通信機能の構成例である。
【図１６】本発明の第４の実施例である計算機システムを示す図である。
【図１７】ＴＣＰパケットの構成を示す図である。
【図１８】本発明の第５の実施例である計算機システムを示す図である。
【図１９】計算機装置３における遠隔装置認識の処理フローである。
【図２０】計算機装置２における遠隔装置認識の処理フローである。
【図２１】遠隔装置リストの構成例である。
【図２２】本発明の第５の実施例である構成定義構築ツールを示す図である。
【図２３】構成定義構築ツールの他の実施例を示す図である。
【符号の説明】
【０１９１】
１０…プロセッサＡ
２０…プロセッサＢ
３０…入出力制御装置
１００，１２０，１４０…メモリ
４０…キーボード
４１…マウス
７０…表示装置
【図１】
0004637140.tif 000002
【図２】
0004637140.tif 000003
【図３】
0004637140.tif 000004
【図４】
0004637140.tif 000005
【図５】
0004637140.tif 000006
【図６】
0004637140.tif 000007
【図７】
0004637140.tif 000008
【図８】
0004637140.tif 000009
【図９】
0004637140.tif 000010
【図１０】
0004637140.tif 000011
【図１１】
0004637140.tif 000012
【図１２】
0004637140.tif 000013
【図１３】
0004637140.tif 000014
【図１４】
0004637140.tif 000015
【図１５】
0004637140.tif 000016
【図１６】
0004637140.tif 000017
【図１７】
0004637140.tif 000018
【図１８】
0004637140.tif 000019
【図１９】
0004637140.tif 000020
【図２０】
0004637140.tif 000021
【図２１】
0004637140.tif 000022
【図２２】
0004637140.tif 000023
【図２３】
0004637140.tif 000024