(57)【要約】複数の異なるオペレーティングシステムを同じコンピュータ上で同時に実行できるようにする方法であって、比較的高いプライオリティを有するように第１のオペレーティングシステム（Ｃ５のようなリアルタイムオペレーティングシステム）を選択するステップと、比較的低いプライオリティを有するように少なくとも１つの二次のオペレーティングシステム（Ｌｉｎｕｘのような汎用オペレーティングシステム）を選択するステップと、所定の条件のもとで前記オペレーティングシステム間をスイッチするように構成された共通プログラム（ナノカーネルと同様のハードウェアリソースディスパッチャー）を用意するステップと、前記第１および第２のオペレーティングシステムを前記共通プログラムで制御するのを許すように前記第１および第２のオペレーティングシステムに変更を与えるステップと、を備えた方法。
2006522971.tif 000002
【特許請求の範囲】
【請求項１】
複数の異なるオペレーティングシステムを同じコンピュータ上で同時に実行できるようにする方法であって、
比較的高いプライオリティを有するように第１のオペレーティングシステムを選択するステップと、
比較的低いプライオリティを有するように少なくとも１つの第２のオペレーティングシステムを選択するステップと、
所定の条件のもとで前記オペレーティングシステム間をスイッチするように構成された共通プログラムを用意するステップと、
前記第１および第２のオペレーティングシステムを前記共通プログラムで制御するのを許すように前記第１および第２のオペレーティングシステムに変更を与えるステップと、
を備える方法。
【請求項２】
前記第１のオペレーティングシステムは、リアルタイムオペレーティングシステムである、請求項１に記載の方法。
【請求項３】
前記第２のオペレーティングシステムは、非リアルタイムの汎用オペレーティングシステムである、請求項１に記載の方法。
【請求項４】
前記第２のオペレーティングシステムは、Ｌｉｎｕｘ或いはそのバージョンまたは変形である、請求項１に記載の方法。
【請求項５】
前記共通プログラムは、前記オペレーティングシステム間をスイッチするのに必要なプロセッサ状態をセーブし、且つセーブされたバージョンから復帰するように構成される、請求項１に記載の方法。
【請求項６】
前記第２のオペレーティングシステムに対するプロセッサ例外を前記共通プログラムによりバーチャル形態で取り扱う、請求項１に記載の方法。
【請求項７】
前記共通プログラムは、あるプロセッサ例外をインターセプトし、且つ前記第１のオペレーティングシステムの例外取り扱いルーチンをコールしてそれらにサービスするように構成される、請求項１に記載の方法。
【請求項８】
前記第２のオペレーティングシステムに対するプロセッサ例外をバーチャル例外として通知する、請求項７に記載の方法。
【請求項９】
前記共通プログラムは、保留となっている前記バーチャル例外に対応する前記第２のオペレーティングシステムの例外取り扱いルーチンをコールするように構成される、請求項８に記載の方法。
【請求項１０】
前記オペレーティングシステムの各々に、各々が排他的に動作できる別々のメモリスペースを設けるステップを更に備える、請求項１に記載の方法。
【請求項１１】
前記オペレーティングシステムの各々に、各々が排他的にアクセスできる前記コンピュータの第１の入力および／または出力装置を設けるステップを更に備える、請求項１に記載の方法。
【請求項１２】
各々のオペレーティングシステムは、実質的に非変更のネーティブルーチンを使用して前記第１の入力および／または出力装置にアクセスする、請求項１１に記載の方法。
【請求項１３】
前記オペレーティングシステムの各々に、各々が共有アクセスできる前記コンピュータの第２入力および／または出力装置へのアクセスを与えるステップを更に備える、請求項１に記載の方法。
【請求項１４】
全てのオペレーティングシステムは、前記第１のオペレーティングシステムのルーチンを使用して前記第２の入力／または出力装置にアクセスする、請求項１３に記載の方法。
【請求項１５】
前記第１または前記共通のプログラムのオペレーションに割り込まずに、前記第２のオペレーティングシステムを再スタートするための再スタートルーチンを用意するステップを更に備える、請求項１に記載の方法。
【請求項１６】
前記共通プログラムは、前記第２のオペレーティングシステムのオペレーションを制御するためのトラップコールメカニズム、および／または前記第２のオペレーティングシステムにおける状態変化を前記第１のオペレーティングシステムに通知するための事象メカニズムを与える、請求項１５に記載の方法。
【請求項１７】
前記共通プログラムは、前記第２のオペレーティングシステムのカーネルのシステムイメージのコピーを記憶し、更に、このようなセーブされたコピーから前記第２のオペレーティングシステムのカーネルを回復するように構成される、請求項１５に記載の方法。
【請求項１８】
前記第１および第２のオペレーティングシステムは、前記第１のオペレーティングシステムが前記第２のオペレーティングシステムの継続オペレーションをモニタリングできるようにして、前記第２のオペレーティングシステムのクラッシュの検出を許すための協働ルーチンを有する、請求項１５に記載の方法。
【請求項１９】
デバッグルーチンを用意するステップを更に備え、前記オペレーティングシステムのオペレーションにおいて規定条件が生じたときにマシン状態変数の状態を出力するように前記共通プログラムが構成される、請求項１に記載の方法。
【請求項２０】
前記オペレーティングシステムおよび共通プログラムを単一コード製品へと結合するステップを更に備える、請求項１に記載の方法。
【請求項２１】
前記オペレーティングシステムおよび共通プログラムをコンピュータ製品の永続的メモリに埋め込むステップを更に備える、請求項１に記載の方法。
【請求項２２】
前記共通プログラムは、前記第１と第２のオペレーティングシステム間での通信を許すオペレーティングシステム間通信メカニズム、および／またはそれらにおいて実行されるアプリケーションを与えるように構成される、請求項１に記載の方法。
【請求項２３】
前記共通プログラムは、通信バスブリッジに対応するバーチャル入力および／または出力装置を定義し、前記オペレーティングシステムが通信バスによって通信できるかのようにする、請求項２２に記載の方法。
【請求項２４】
前記オペレーティングシステムを変更するステップは、前記バーチャルバスブリッジ装置をマネージするドライバルーチンを追加することを含む、請求項２３に記載の方法。
【請求項２５】
請求項１に記載のステップを実行するためのコードを備えた開発キットコンピュータプログラム製品。
【請求項２６】
請求項２０に記載の結合されたコードを備えたコンピュータプログラム製品。
【請求項２７】
ＣＰＵ、メモリ装置および入力／出力装置を備え、請求項２４に記載の埋め込まれたプログラムを永続的メモリに記憶した埋め込まれたコンピュータシステム。
【請求項２８】
ＣＰＵ、メモリ装置および出力／入力装置を備えていて、コンピュータコードを実行するコンピュータシステムであって、
比較的高いプライオリティを有する第１のオペレーティングシステムと、
比較的低いプライオリティを有する第２のオペレーティングシステムと、
所定の条件のもとで前記オペレーティングシステム間をスイッチすることにより前記オペレーティングシステムを同時に実行するように構成された共通プログラムと、
を備えるコンピュータシステム。
【請求項２９】
請求項１から２４のいずれかに記載の方法を使用して、前記第１および第２のオペレーティングシステムを同時に実行するように構成される、請求項２８に記載のコンピュータシステム。
【請求項３０】
前記オペレーティングシステムの各々には、前記共通プログラムへ制御を引き渡すアイドルルーチンが設けられる、請求項１に記載の方法。
【請求項３１】
前記アイドルルーチンは、プロセッサホルト命令に置き換わる、請求項３０に記載の方法。
【請求項３２】
実行中オペレーティングシステムを実行する間にプロセッサ例外が発生したときに、
（ａ）前記共通プログラムは、前記第１のオペレーティングシステムの例外取り扱いルーチンをコールしてそれらにサービスするように構成され、
（ｂ）前記例外が所定の第２のオペレーティングシステムに対して意図されたものである場合に、バーチャル例外が生成され、
（ｃ）前記プロセッサ例外が前記第１のオペレーティングシステムによりサービスされた後に、前記共通プログラムは、前記実行中オペレーティングシステムの実行に復帰するように構成され、
（ｄ）前記共通プログラムが、次いで、前記所定の第２のオペレーティングシステムへスイッチするときに、保留中である前記バーチャル例外を前記所定の第２のオペレーティングシステムへ通知し、そして前記バーチャル例外に対応する前記所定の第２のオペレーティングシステムの例外取り扱いルーチンをコールしてそれにサービスする、
請求項１に記載の方法。
【請求項３３】
前記第２のオペレーティングシステムは、それが割り込みをマスクするのを防止するように変更される、請求項１に記載の方法。
【請求項３４】
全てのハードウェア割り込みは、最初、前記第１のオペレーティングシステムによって取り扱われ、第２のオペレーティングシステムに対して意図されたものは、その第２のオペレーティングシステムが前記共通プログラムによって次にスケジュールされるまでバーチャル化されて遅延され、そしてそのときにその第２のオペレーティングシステムによりサービスされる、請求項１に記載の方法。
【請求項３５】
前記共通プログラムは、前記または各々の二次オペレーティングシステムが、前記二次オペレーティングシステムにおいてハードウェア割り込みマスクコードに置き換わるためのバーチャル例外をマスクして、その二次システムを一次システムにより完全に先取りさせるための手段をなすように構成される、請求項８に記載の方法。
【請求項３６】
前記第２のバーチャル例外はマスクされない、請求項９に記載の方法。
【発明の詳細な説明】
【発明の詳細な説明】
【０００１】
本発明は、オペレーティングシステムに係る。より詳細には、本発明は、複数のオペレーティングシステムを同時に実行するためのシステム、方法およびコンピュータプログラムに係る。
【０００２】
あるコンピュータプログラムについては、プログラムのステップが規定の時間周期内にまたは規定の時間に実行されることが重要である。このようなプログラムは、例えば、移動電話を動作したり、或いは構内交換機（ＰＢＸ）またはセルラーベースステーションを動作したりするための制御プログラムである。通常、このプログラムは、外部事象または状態の変化に、一貫したやり方で、或いは事象後のある時間にまたはある時間内に応答しなければならない。これは、「リアルタイム」で動作すると称する。
【０００３】
しかしながら、他の多数のプログラムについては、プログラムを実行するに要する時間が重要でない。これは、スプレッドシートプログラム、ワードプロセッシングプログラム、ペイロールパッケージ、および一般的な報告または分析プログラムを含むほとんどの一般的コンピュータプログラムについて言えることである。他方、このようなプログラムによりとられる厳密な時間は重要でないが、ほとんどの場合、ユーザは、可能な限り迅速な実行を好む。
【０００４】
アプリケーションプログラムは、それらがオペレーティングシステムを介して実行されるところのコンピュータと対話する。オペレーティングシステムのアプリケーションプログラムインターフェイス（ＡＰＩ）を使用することにより、アプリケーションプログラムをポータブル形態で書き込むことができ、従って、異なるコンピュータにおいて異なるハードウェアリソースでそれを実行することができる。更に、ＬｉｎｕｘまたはＷｉｎｄｏｗｓのような通常のオペレーティングシステムは、マルチタスク動作を果たし、換言すれば、多数のプログラムを同時に動作することを許す。これを行うために、それらは、スケジューリングを果たし、換言すれば、異なるプログラム間でコンピュータのリソースの使用を分担し、スケジューリングアルゴリズムに基づいて各々に時間を割り当てる。この種のオペレーティングシステムは、非常に広範囲に使用されているが、一般的に、リアルタイムアプリケーションを実行するための構成はなく、それ故、多くの制御または通信タスクには適していない。
【０００５】
それ故、このようなタスクに対してリアルタイムオペレーティングシステムが開発されており、その一例は、ＣｈｏｒｕｓＯＳ（Ｃｈｏｒｕｓとしても知られている）およびその派生物である。Ｃｈｏｒｕｓは、オープンソースソフトウェアとして次から入手できる。
http://www.experimentalstuff.com/Technologies/ChorusOS/index.html、および
http://www.jalna.com/におけるＪａｌｕｎａ
【０００６】
これは、次から入手できる「ChorusOS Features and Architecture overview」、フランコイス・アーマンド、サン・テクニカル・レポート、２００１年８月、２２２ｐ、に掲載されている。
http://www.jaluna.com/developer/papers/COSDESPERF.pdf
【０００７】
また、これらオペレーティングシステムは、他の形式のプログラムを実行するのにも使用できる。しかしながら、ユーザは、当然ながら、ＷｉｎｄｏｗｓまたはＬｉｎｕｘのような汎用のオペレーティングシステムに対して書かれた膨大な数の「レガシー」プログラムを実行でき、しかも、リアルタイムオペレーティングシステムで実行するためにそれらを書き直す必要がないことを希望する。
【０００８】
ユーザがいずれか一方または他方のオペレーティングシステムを実行するのを許す「デュアルブート」システムを提供することはできるが、リアルタイムプログラムを実行するのと同時に「レガシー」プログラムも実行できることが望ましいケースが多数ある。例えば、テレコミュニケーションネットワークインフラストラクチャー装置、第三世代移動電話および他の進歩型電話、並びに進歩型電子ゲーム装置は、リアルタイムアプリケーション（例えば、ゲームプレイグラフィック）および非リアルタイムアプリケーション（ゲームダウンロード）の両方を必要とすることがある。
【０００９】
米国特許第５，９０３，７５２号および米国特許第５，７２１，９２２号では、非リアルタイムオペレーティングシステム（Ｗｉｎｄｏｗｓのような）の割り込み取り扱い環境にリアルタイムマルチタスクカーネルを設けることにより非リアルタイムオペレーティングシステムにリアルタイム環境を合体する試みがなされている。
【００１０】
広く利用されている１つの解決策は、「エミュレーション」である。通常、リアルタイムオペレーティングシステムのもとで実行するようにエミュレータプログラムが書かれ、これは、汎用オペレーティングシステムに対して書かれたプログラムの各命令を解釈し、そしてリアルタイムオペレーティングシステムのもとでそれに対応する一連の命令を実行する。しかしながら、１つの命令が常に多数の命令と置き換えられるので、エミュレーションはコンピュータに厳しい負荷をかけ、その結果、低速性能となる。バーチャルマシン（例えば、Ｊａｖａ（登録商標）バーチャルマシン）を設けることをベースとする解決策からも同様の問題が生じる。バーチャルマシンの実施は、例えば、ＥＰ１０５９５８２号、米国特許第５，４９９，３７９号、および米国特許第４，７６４，８６４号に見られる。
【００１１】
更に別の同様の技術が、米国特許第５，９９５，７４５号（ヨダイケン氏）に説明されている。ヨダイケン氏は、マルチタスクリアルタイムオペレーティングシステムがそのタスクの１つとして汎用オペレーティングシステムを実行し、リアルタイムタスクを実行するために必要に応じてそれを先取りするようなシステムを説明している。
【００１２】
別の解決策は、例えば、ＥＰ０３６０１３５号、および論文「Merging real-time processing and UNIX V」、（ゴッシュ）、エレクトロニックス、１９９０年９月、ｐ６２に説明されたように、リアルタイムオペレーティングシステムを汎用オペレーティングシステムのモジュールとして実行することである。このケースでは、汎用オペレーティングシステムに関連したものはリアルタイムオペレーティングシステムを先取りしてはならないという意図で、ハードウェの割り込みが選択的にマスクされる。
【００１３】
別の解決策は、次のもののホワイトペーパーに説明されたＡＤＥＯＳ（オペレーティングシステムのための適応ドメイン環境）である。
http://opersys.com/fpt/pub/Adeos/adeos.pdf
【００１４】
ＡＤＥＯＳは、とりわけ、複数のオペレーティングシステムを実行するように意図されたナノカーネルを与えるが、Ｌｉｎｕｘでしか実施されないと思われる。ＡＤＥＯＳの１つの提案された使用は、ＡＤＥＯＳがＲＴＡＩ（Ｌｉｎｕｘのためのリアルタイムアプリケーションインターフェイス）へ割り込みを分配するのを許すことであり、これについては、次を参照されたい。
http://www.aero.polimi.it/~rtai/applications/
【００１５】
ＥＰ１０５４３３２号は、「スイッチングユニット」（これは完全に理解するに充分なほど詳細に説明されていない）がリアルタイムおよび汎用オペレーティングシステムを実行するようなシステムを説明している。ハードウェア割り込みは、共通の割り込みハンドラーにより取り扱われ、ある実施形態では、それらは、リアルタイムオペレーティングシステムにより取り扱われ、該オペレーティングシステムは、次いで、より低いプライオリティレベルでソフトウェア割り込みを発生し、これは、二次オペレーティングシステムのルーチンで取り扱われる。
【００１６】
本発明の目的は、複数のオペレーティングシステムが異なる目的で設計されているときでもそれらオペレーティングシステムを同時に実行するための改良されたシステム、方法およびコンピュータプログラムを提供することである。より詳細には、本発明は、１つのオペレーティングシステム（例えば、リアルタイムオペレーティングシステム）を障害なく実行し、且つ他のオペレーティングシステム（例えば、汎用オペレーティングシステム）を、コンピュータの残りのリソースを使用してできるだけ良好に実行するのを許すことに向けられる。
【００１７】
従って、１つの態様において、本発明は、複数のオペレーティングシステムを若干変更して、それらの間をスケジュールする共通プログラムを設けたシステムであって、１つのオペレーティングシステム（「一次」または「クリティカル(critical)な」オペレーティングシステム）が、別のオペレーティングシステム（「二次」または非クリティカル(non-critical)なオペレーティングシステム）より優先されるシステムを提供する。本発明は、ハードウェアをクリティカルなオペレーティングシステムに優先的に割り当て、クリティカルなオペレーティングシステムのアクセスを妨げることになる１つまたは複数の二次オペレーティングシステムのアクセスを拒絶するのが好ましい。本発明は、二次オペレーティングシステムによりアクセスが要求された場合でも、クリティカルなオペレーティングシステムのドライバを使用して、共有リソースにアクセスするのが好ましい。しかしながら、米国特許第５，９９５，７４５号のように、クリティカルなオペレーティングシステムが二次オペレーティングシステムを「実行する」ことは決してなく、各システムは、それと一緒に実行される他のシステムを無視し、クリティカルなオペレーティングシステムのドライバへのアクセスを仲介する共通プログラム（従来技術のナノカーネルに対応する）と通信するだけである。
【００１８】
二次オペレーティングシステムは、それらが割り込みをマスクできないように変更され、また、それらの割り込みサービスルーチンは、割り込みが生じたことを指示するメッセージに応答させるように変更されるのが好ましい。共通プログラムは、一次オペレーティングシステムの割り込みサービスルーチンに全てのハードウェア例外を通すことによりそれらを取り扱い、二次オペレーティングシステムの１つに対してハードウェア割り込みが意図された場合には、割り込みメッセージまたは通知が発生される。二次オペレーティングシステムが共通プログラムによりスケジュールされる次のときに、メッセージまたは通知がそこに通され、共通プログラムは、その割り込みサービスルーチンをコールして割り込みにサービスする。
【００１９】
従って、二次オペレーティングシステムは、割り込みが生じたときにどのようにしても一次オペレーティングシステム（または、一般に、より重要性の高い二次オペレーティングシステム）を先取りできない。というのは、全てが最初に一次オペレーティングシステムにより取り扱われ、且つ一次オペレーティングシステムが実行を終了した後に行先となる二次オペレーティングシステムであってスケジュールされている二次オペレーティングシステムにしかそれが通知されないからである。
【００２０】
従って、このような割り込みの取り扱いは、一次オペレーティングシステムにクリティカルなタスクが生じなくなるまで遅延される。しかしながら、それらが最終的にアクションされると、二次オペレーティングシステムのルーチンは、実質的に不変の形態で動作し、二次オペレーティングシステムにより期待される振舞いとなる（遅延を除いて）。
【００２１】
他の態様、実施形態および好ましい特徴、並びにそれに対応する効果は、以下の説明、特許請求の範囲および添付図面から明らかとなろう。
【００２２】
以下、添付図面を参照して、本発明の実施形態を一例として説明する。
【００２３】
［はじめに］
［システムハードウェア］
システムを適用できるコンピュータシステム１００は、中央処理ユニット（ＣＰＵ）１０２、例えば、インテル・コーポレーションから入手できるＰｅｎｔｉｕｍ４（登録商標）のＣＰＵ、またはモートローラから入手できるＰｏｗｅｒＰＣのＣＰＵを備え（この実施形態はその両方において実施されている）、これは、システムバス１０４（制御、データおよびアドレスバスを含む）を経て、リードオンリメモリ（ＲＯＭ）チップ１０６と、ランダムアクセスメモリ（ＲＡＭ）チップの１つ以上のバンク（１０８）と、ディスクコントローラ装置１１０（例えば、フロッピーディスクドライブ、ハードディスクドライブ、および付加的な取り外し可能な媒体ドライブ、例えばＤＶＤドライブに接続されたＩＤＥまたはＳＣＳＩコントローラ）と、１つ以上の入力／出力ポート（１１２）（例えば、１つ以上のＵＳＢポートコントローラ、および／またはパラレルポートコントローラで、プリンタ等に接続されるもの）と、外部または内部の周辺装置にバス接続される拡張バス１１４（例えば、ＰＣＩバス）と、他のシステムチップ１１６（例えば、グラフィックおよびサウンド装置）とに接続される。この形式のコンピュータは、例えば、パーソナルコンピュータ（ＰＣ）およびワークステーションである。しかしながら、他のコンピュータ装置、例えば、メインフレーム、制御システムに埋め込まれたマイクロコンピュータ、およびＰＤＡへの本発明の適用（この場合、指示された装置のあるもの、例えば、ディスクドライブコントローラが存在しなくてもよい）も、ここに開示される。
【００２４】
［ソフトウェアのマネージメント］
図２ａを参照すれば、使用中に、図１のコンピュータ１００は、オペレーティングシステムカーネル２０２（これは、図１に示す他の装置へＣＰＵがアクセスするのを許す出力ルーチンを与える）と、オペレーティングシステムユーザインターフェイスまたはプレゼンテーションレイヤー２０４（Ｘ  Ｗｉｎｄｏｗｓのような）と、ミドルウェアレイヤー２０６（ネットワークソフトウェアおよびプロトコル、例えば、ＴＣＰ／ＩＰスタックを与える）と、オペレーティングシステムカーネル２０２を形成するＡＰＩルーチンへコールすることにより実行されるアプリケーション２０８ａ、２０８ｂと、を備えた常駐プログラムを実行する。
【００２５】
オペレーティングシステムカーネルは、多数のタスク、特に、次のものを有する。
−  スケジューリング（即ち、ＣＰＵおよびそれに関連したリソースを実行中の異なるアプリケーション間で共有する）；
−  メモリマネージメント（即ち、各タスクにメモリを割り当て、また、必要な場合は、ディスクドライブにアドオンされたメモリからデータおよびプログラムをスワップする）；
−  ファイルシステムを設ける；
−  装置へのアクセスを与える（通常、ドライバを経て）；
−  割り込みの取り扱い；
−  アプリケーションがシステムリソースおよびユーザと対話できるようにするアプリケーションプログラミングインターフェイスを与える。
【００２６】
カーネルは、Ｕｎｉｘについては、いわゆる「モノリシックカーネル」でよく、この場合、装置ドライバはカーネル自体の一部分を形成する。或いはまた、Ｃｈｏｒｕｓについては、「マイクロカーネル」でよく、この場合、装置ドライバはカーネルとは個別である。
【００２７】
従って、使用中に、コンピュータ１００がスタートされると、ＲＯＭ１０６に記憶されたブートストラッププログラムがディスクコントローラ１１０にアクセスして、オペレーティングシステムのファイル取り扱い部分をディスクの永久記憶部からＲＡＭ１０８へ読み取り、次いで、オペレーティングシステムの残り部分をＲＡＭ１０８のエリアへロードする。次いで、オペレーティングシステムは、ディスクドライブからディスクコントローラ１１０を経てアプリケーションを読み取り、その各々に対してＲＡＭ１０８にスペースを割り当て、その割り当てられたメモリスペースに各アプリケーションを記憶する。
【００２８】
アプリケーションのオペレーション中に、オペレーティングシステムのスケジューラ部分は、ＣＰＵの使用を異なるアプリケーション間で分割し、スケジューリングポリシーに基づいてプロセッサにおいて時間を各々分担するのを許す。また、これは、頻繁に使用されないアプリケーションまたはデータを「スワップアウト」する（即ち、それらをＲＡＭ１０８から除去してスペースを解放し、それらをディスクに記憶する）ことにより、メモリリソースの使用のマネージメントも行う。
【００２９】
最終的に、アプリケーションプログラミングインターフェイス（ＡＰＩ）を作り上げるルーチンがアプリケーションからコールされて、入力および出力のような機能を実行すると共に、オペレーティングシステムの割り込み取り扱いルーチンが割り込みおよび事象に応答する。
【００３０】
［好ましい実施形態の原理の概要］
好ましい実施形態においては、コンピュータ１００に使用されるべき各オペレーティングシステム２０１、２０２が若干書き直されると共に、新たな低レベルプログラム４００（ここでは「ハードウェアリソースディスパッチャー」と称され、時々は「ナノカーネル」として知られているが、オペレーティングシステムのカーネルではない）が生成される。ハードウェアリソースディスパッチャー４００は、プロセッサと対話するので、ＣＰＵ１０２の特定形式に対して特有のものである。また、変更されたオペレーティングシステムのバージョン２０１、２０２は、以下で明らかとなる理由で、ハードウェア特有のものである。
【００３１】
ハードウェアリソースディスパッチャー４００は、それ自身、オペレーティングシステムではない。これは、アプリケーションプログラムとは全く対話せず、機能的に非常に限定されている。また、バーチャルマシンまたはエミュレータでもなく、即ちほとんどの処理をオペレーティングシステム自体に託すとしても、プロセッサにおいてそれらのネーティブコードを実行するよう協働するためにオペレーティングシステムの変更を必要とする。これは、次の基本的機能を遂行する。
−  複数のオペレーティングシステムの各々をロードしてスタートする；
−  メモリおよび他のシステムリソースをオペレーティングシステム各々に割り当てる；
−  異なるオペレーティングシステムのオペレーションをスケジュールする（即ち、ＣＰＵの時間をそれらの間で分割し、それらの間での切り換えをマネージする）；
−  オペレーティングシステムにより共有される必要のあるシステム装置へ間接的にアクセスする「バーチャル化装置」メソッドを設ける（装置を「バーチャル化」する）；
−  オペレーティングシステム間に通信リンクを設け、異なるオペレーティングシステムで実行されるアプリケーションが互いに通信するのを許す。
【００３２】
オペレーティングシステムは、実施形態により等しく取り扱われない。むしろ、オペレーティングシステムの１つが「クリティカル」なオペレーティングシステム（これはリアルタイムオペレーティングシステムとなる）として選択され、そして他の各々のオペレーティングシステムが「非クリティカル」なまたは「二次」のオペレーティングシステム（これは、Ｌｉｎｕｘのような各々の汎用オペレーティングシステムとなる）として取り扱われる。
【００３３】
ハードウェアリソースディスパッチャーが指定されるときには、使用可能なシステムリソース（即ち、装置およびメモリ）をリストするデータ構造体（例えば、テーブル）が設けられ、できるだけ多数のシステム装置を、１つまたは他のオペレーティングシステムに静的に排他的に割り当てられるようにする。
【００３４】
例えば、汎用オペレーティングシステム２０２にはパラレルプリンタポートが静的に割り当てられてもよく、これは、プリンタ出力を発生するのに必要なアプリケーションをしばしば実行する。他方、リアルタイムオペレーティングシステム２０１には、通信のために、ＩＳＤＮデジタルラインアダプタポートが永久的に割り当てられてもよい。可能な場合に装置をこのように静的に割り当てることは、各オペレーティングシステムが、ハードウェアリソースディスパッチャーをコールする必要なく、その既存のドライバを使用して、静的に割り当てられた装置にアクセスできることを意味する。従って、このような装置をアクセスする際に実行速度にロスはない（バーチャルマシンまたはエミュレータとして働く場合にそのようになる）。
【００３５】
共有されねばならないシステム装置の場合には、ハードウェアリソースディスパッチャーは、非クリティカルなオペレーティングシステムにより装置の使用をバーチャル化し、クリティカルなオペレーティングシステムと共に供給されるドライバを使用してアクセスを実行する。同様に、割り込みを取り扱うために、割り込みがクリティカルなオペレーティングシステムの割り込み取り扱いルーチンへ通され、これらルーチンは、割り込みを取り扱う（クリティカルなオペレーティングシステムとしてそれが意図された場合）か、或いはハードウェアリソースディスパッチャーを通してそれを返送し、非クリティカルなオペレーティングシステムへ転送する（それが行先であった場合）。
【００３６】
ブート時に、ハードウェアリソースディスパッチャーが最初にロードされ、次いで、これが、オペレーティングシステムの各々を所定のシーケンスでロードし、即ち、クリティカルなオペレーティングシステムで始めて、各々の二次オペレーティングシステムを次々に、というように続く。クリティカルなオペレーティングシステムは、それが必要とするリソースがテーブルから割り当てられると共に、動作のための固定のメモリスペースをそこに有する。次いで、各々の二次オペレーティングシステムに、それが必要とするリソースおよびメモリスペースが、残りの使用可能なリソースから割り当てられる。
【００３７】
従って、この実施形態によれば、オペレーティングシステムにより使用されるリソースは、物理的にできるだけ大きく分離されるが、これは、各々にそれ自身のメモリスペースを割り当て、更に、オペレーティングシステムに対して排他的に装置の静的な割り当てを与え、即ち共有が重要である装置だけが共有されるようにすることで行われる。
【００３８】
オペレーション中に、ハードウェアリソースディスパッチャーのスケジューラは、クリティカルなオペレーティングシステムがそのタスクを完了するまで動作するのを許し、次いで、次の割り込みまたは事象が発生するまで制御権を各々の非クリティカルなオペレーティングシステムに順次に引き渡す。
【００３９】
従って、この実施形態は、クリティカルなオペレーティングシステムのオペレーションが仮想的に不変であるようなマルチオペレーティングシステム環境を許す（このオペレーティングシステムがそのオリジナルドライバを使用し、割り込みおよび事象取り扱いに最初にアクセスできるからである）。二次オペレーティングシステムは、残りのプロセッサ時間内に効率的に動作することができる。というのは、ほとんどの場合に、それらオペレーティングシステムは、それら自身のネーティブなドライバを使用し、多くのシステム装置に排他的にアクセスできるからである。最終的に、ハードウェアリソースディスパッチャーそれ自体は、限定された機能しか取り扱わないので、小さなプログラムでよく、従って、システムリソースが保存される。
【００４０】
また、好ましい実施形態は、生成および維持が経済的である。というのは、特定のコンピュータ１００に対して既に適応された標準的な商業的オペレーティングシステムに対して限定された変更しか伴わないからである。更に、オペレーティングシステムに対する変更は、割り込みの取り扱いや初期化時のコンフィギュレーションのようなアーキテクチャー特有のファイル取り扱い事項に限定され、これらは、特定形式のコンピュータ１００とのインターフェイス上のもので、残りのオペレーティングシステムほど頻繁に変更するおそれがないので、同じオペレーティングシステムの新規なバージョンをマルチオペレーティングシステム形態で作用するよう適応させる上で行うべき作業がほとんどまたは全くない。
【００４１】
［好ましい実施形態の詳細な説明］
この実施形態では、コンピュータ１００は、インテル３８６ファミリープロセッサ（例えば、ペンティウムプロセッサ）、およびモートローラＰｏｗｅｒＰＣ７５０（縮小命令セットコンピュータ即ち「ＲＩＳＣ」）コンピュータであった（ステップ３０２）。クリティカルなオペレーティングシステム２０１は、Ｃ５オペレーティングシステム（Ｊａｌｕｎａ−１のリアルタイムマイクロカーネル、ＣｈｏｒｕｓＯＳシステムの第五世代のオープンソースバージョン、オープンソースとして使用できるもので、http://www.jalina.comから自由にダウンロードされる）であった。
【００４２】
ステップ３０６において、ＣｈｏｒｕｓＯＳオペレーティングシステムカーネル２０１は、マルチオペレーティングシステムモードで動作するように変更され、これは、新たなプラットホームへの移植と同様に処理される（即ち、ＣＰＵは同じであるがシステム装置が異なる新たなコンピュータでの実行を許すように新たなボードサポートパッケージを書き込む）。ブーティングおよび初期化シーケンスは、リアルタイムオペレーティングシステムが、それ自体でスタートするのではなく、その割り当てられたメモリスペースにおいて、ハードウェアリソースディスパッチャーによりスタートされるのを許すように変更される。初期化シーケンスのハードウェアプロービング段階は、クリティカルなオペレーティングシステムが、他の二次システムに指定されたハードウェアリソースにアクセスするのを防止するように変更される。これは、ハードウェアリソースディスパッチャーから静的なハードウェア割り当てテーブルを読み取り、それに対して使用可能な装置を検出する。
【００４３】
状態を検出して、その応答においてあるアクションを要求するために、トラップコール２０１２がクリティカルなオペレーティングシステムに追加される。トラップコールとは、ここでは、プロセッサが現在コンテクスト（例えば、レジスタの状態）をセーブし、新たなコンテクストをロードするようにさせるコールを意味する。従って、バーチャルメモリアドレッシングが使用される場合には、アドレスポインタが変更される。
【００４４】
例えば、リアルタイムオペレーティングシステム２０１がエンドポイントに到達すると（そしてプロセッサリソースの要求を止めると）、制御をハードウェアリソースディスパッチャーに戻して、「アイドル」トラップコールを発行し、二次オペレーティングシステムをスタートすることができる。多くのプロセッサは、「ホルト」命令を有する。ある場合には、スーパーバイザーレベルコード（例えば、アプリケーションではなく、オペレーティングシステム）だけが、このような「ホルト」命令を含むことができる。この実施形態では、「ホルト」命令を除去し、それに代わって「アイドル」ルーチン（例えば、実行スレッド）を設けて、これがコールされたときに「アイドル」トラップコールを発行するように、全てのオペレーティングシステムが書き直される。
【００４５】
ボードサポートパッケージのあるドライバは、二次オペレーティングシステムに対して共有装置をバーチャル化する上でハードウェアリソースディスパッチャーの助けとなるように、特に適応される。
【００４６】
付加的な「バーチャル」ドライバ２０１４が追加され、これは、オペレーティングシステムに対して、見掛け上、入力／出力（Ｉ／Ｏ）バスへのアクセスを与え、バスにデータを書き込むのを許す。実際に、バーチャルバスドライバ２０１４は、メモリを通信媒体として使用し、即ちあるプライベートメモリ（入力データ用）をエクスポートすると共に、他のシステムによりエクスポートされたメモリ（出力データ用）をインポートする。このように、オペレーティングシステム２０１（またはこのオペレーティングシステムで実行されるアプリケーション）は、別のオペレーティングシステム（またはそこで実行されるアプリケーション）へ、それらが真のＩ／Ｏバスで接続された個別のマシンにおいて実行される２つのオペレーティングシステムであるかのように、データを通過させることができる。
【００４７】
二次オペレーティングシステム２０２は、カーネルバージョン２．４．１８（を有するＬｉｎｕｘとして選択されている（ステップ３０８）。
【００４８】
ステップ３１０において、二次オペレーティングシステムカーネル２０２は、新たなハードウェアアーキテクチャーとして取り扱われるマルチオペレーティングシステム環境において機能することが許されるように変更される。ステップ３０６と同様に、ブートおよび初期化シーケンスは、二次オペレーティングシステムをハードウェアリソースディスパッチャーによりスタートすることが許されると共に、それが、ハードウェアリソースディスパッチャーテーブルに示されたように他のシステムに指定されたハードウェアリソースにアクセスすることが防止されるように変更される。ステップ３０６と同様に、トラップコール２０２２が追加されて、制御がハードウェアリソースディスパッチャーに引き渡される。
【００４９】
共有システム装置のネーティブドライバは、ハードウェアリソースディスパッチャーによりバーチャル化された装置を取り扱う新たなドライバ２０２８に置き換えられる（割り込みコントローラ、Ｉ／Ｏバスブリッジ、システムタイマーおよびリアルタイムクロック）。これらのドライバは、コンピュータ１００の各装置で幾つかの動作を遂行するためにハードウェアリソースディスパッチャーのバーチャル装置ハンドラー４１６へのコールを実行する。ハードウェアリソースディスパッチャーのこのような各バーチャル装置ハンドラー４１６は、システム装置と直接的に対話するように構成されたクリティカルなオペレーティングシステムにおける「ピア」ドライバルーチンと対にされる。従って、バーチャル装置ハンドラーへのコールは、そのバーチャル化された装置に対してクリティカルなシステムにおけるピアドライバへ中継され、真の装置アクセスを行う。ステップ３０６と同様に、バーチャルＩ／Ｏバスに対する読み取りおよび書き込みドライバ２０２４が設けられ、オペレーティングシステム間通信が許される。
【００５０】
二次オペレーティングシステムの割り込みサービスルーチンは、バーチャル割り込みサービスルーチン２０２６を与えるように変更され、これらルーチンの各々は、各バーチャル割り込み（ハードウェアリソースディスパッチャーの割り込みハンドラールーチン４１２により発生されるコールの形態）に応答し、真の割り込みまたは事象には応答しない。また、二次オペレーティングシステムのルーチン（割り込みサービスルーチンを含む）は、ハードウェア割り込みのマスキングを除去するようにも変更される（少なくともクリティカルなオペレーション以外の全てにおいて）。それ故、このようにして、二次オペレーティングシステム２０２、・・・は、クリティカルなオペレーティングシステム２０１により先取りすることができ、換言すれば、バーチャル割り込みに応答する二次オペレーティングシステムは、それ自体、クリティカルなオペレーティングシステム２０１に対する真の割り込みにより割り込まれ得る。これは、通常、次のものを含む。
−  事象（プロセッサレベルの割り込み）のマスキング／アンマスキング；
−  事象マスク状態のセーブ／回復；
−  割り込みソースの識別（割り込みコントローラ装置）；
−  ソースレベルの割り込みのマスキング／アンマスキング（割り込みコントローラ装置）。
【００５１】
共有ハードウェア装置（Ｉ／Ｏバスブリッジ、システムコンソール、システムタイマーおよびリアルタイムクロック）にアクセスするために新たなバーチャル装置ドライバ２０２８が追加される。これらドライバは、コンピュータ１００の各装置へデータを書き込んだりまたはそこからデータを読み取ったりするために、ハードウェアリソースディスパッチャーのバーチャル装置ハンドラー４１６へのコールを実行する。
【００５２】
これを行うために、Ｌｉｎｕｘカーネル２０７は、この実施形態において、新たなバーチャルハードウェアリソースディスパッチャーアーキテクチャーサブツリー（Ｉ−３８６およびＰｏｗｅｒＰＣ変形としてのｎｋ−ｉ３８６およびｎｋ−ｐｐｃ）を少数の変更されたファイルと共に追加することにより変更される。不変のファイルは、それらの既存の形態で再使用される。オリジナルのサブツリーは、保持されるが、使用されない。
【００５３】
ステップ３１２において、ハードウェアリソースディスパッチャー４００が書き込まれる。ハードウェアリソースディスパッチャーは、次の機能（図４に示す）のためのルーチンを与えるコードを備えている。
−  それ自身をブーティングし且つ初期化する（４０２）；
−  ハードウェアリソース（ポートのような装置）のリストと、どのオペレーティングシステムに各リソースが独特に指定されるか指示する割り当てエントリーとを記憶するテーブルを記憶する（４０３）；
−  ハードウェアリソースディスパッチャー割り当てテーブルを完成させるクリティカルなオペレーティングシステムをブーティングし且つ初期化する（４０４）：
−  二次オペレーティングシステムをブーティングし且つ初期化する（４０６）：
−  オペレーティングシステム間をスイッチする（４０８）；
−  オペレーティングシステム間をスケジューリングする（４１０）；
−  割り込みを取り扱う（リアルタイムオペレーティングシステムの割り込みサービスルーチンを使用し、必要に応じて、データを二次オペレーティングシステムのバーチャル割り込みサービスルーチンへ供給する）（４１２）；
−  各オペレーティングシステムからのトラップコールを取り扱う（４１４）；
−  二次オペレーティングシステムから共有装置へのアクセスを取り扱う（４１６）；
−  バーチャルＩ／Ｏバスにおけるオペレーティングシステム間通信を取り扱う（４１８）。
【００５４】
更に別の実施形態（以下に述べる）では、システムデバッグフレームワークを提供することもできる。
【００５５】
［オペレーティングシステムスイッチャー４０８］
あるオペレーティングシステムから別のオペレーティングシステムへスイッチするために、オペレーティングシステムスイッチャー４０８は、現在実行中のオペレーティングシステムの「コンテクスト」、即ちレジスタ値のような１組の状態変数の現在値をセーブし、別のオペレーティングシステムの記憶されたコンテクストを回復し、更に、その別のオペレーティングシステムをコールして、それが停止されたところで実行を再開するように構成される。従って、プロセッサが、メモリのセグメント、およびバーチャルまたは間接的アドレッシング技術を使用する場合には、現在メモリスペースを指すポインタを記憶するレジスタまたはデータ構造体がスワップされる。例えば、オペレーティングシステムは、各々、メモリスペースに対するポインタ値を含むコンテクストにより定義された異なるメモリスペースで動作する。
【００５６】
より詳細には、スイッチャーは、次のことを行う。
−  現在実行中のオペレーティングシステムがアイドル状態になったときに、現在実行中のオペレーティングシステムから次にスケジューリングされたオペレーティングシステムへの明確なスイッチ（例えば、トラップコール）；および
−  ハードウェアの割り込みが生じるときに二次オペレーティングシステムからクリティカルなオペレーティングシステムへの暗示的なスイッチ。
【００５７】
これらスイッチは、以下に述べるように、トラップコールにおいて生じてもよいし、或いは真の割り込みまたはバーチャル割り込みにおいて生じてもよい。
【００５８】
［スケジューラ４１０］
スケジューラ４１０は、既存の別のオペレーティングシステムの後に、どの二次オペレーティングシステム（２つ以上存在する場合）に次にスイッチすべきか選択することにより、使用可能な処理時間の若干を各オペレーティングシステムに割り当てる。この実施形態では、各々が固定プライオリティスケジューリングに基づいて選択される。また、ここでは、時分割、またはプロセッサ時間の保証された最小割合に基づいて指定することを許す他の実施形態も意図される。しかしながら、各々のケースにおいて、クリティカルなオペレーティングシステムは、アイドル状態のときだけ先取りされる。
【００５９】
更に別の実施形態では、クリティカルなオペレーティングシステムは、これをいつ先取りできるかスケジューラ４１０に明確に通知し、全ての二次オペレーティングシステムのどれかが、クリティカルなシステムで依然実行中であるタスクよりプライオリティの高いタスクを遂行すべく、ＣＰＵにアクセスすることが許されるようにする。従って、一実施例では、クリティカルなオペレーティングシステムの割り込みサービスルーチンを先取りすることができず、クリティカルなオペレーティングシステムは、常に、外部事象またはリアルタイムクロックからのタイミング信号に応答し、リアルタイムオペレーションを維持することができる。
【００６０】
［バーチャル化されたプロセッサ例外の取り扱い］
ハードウェアリソースディスパッチャーは、プロセッサ例外（例えば、ＣＰＵ割り込みまたはコプロセッサ割り込み）を次のように取り扱うメカニズムを与えるように構成される。
−  第１に、クリティカルなオペレーティングシステムを経てプロセッサ例外をインターセプトし；
−  第２に、対応するバーチャル例外を１つ以上の二次オペレーティングシステムへポストし、そのデータを記憶し、そしてスケジューラがその二次オペレーティングシステムを次にコールするときに、その二次オペレーティングシステムにおける対応するバーチャル割り込みサービスルーチン２０２６をコールし；
−  第３に、二次オペレーティングシステム内からの保留中のバーチャル例外をマスクまたはアンマスクする。
【００６１】
バーチャル化された例外は、通常、２つの異なる目的で使用される。
−  第１に、ハードウェア装置割り込み（これらは非同期のプロセッサ例外として配送される）を二次オペレーティングシステムへ転送し；
−  第２に、オペレーティングシステム間のクロス割り込み、即ち１つのシステムにより別の割り込みに対して発生された割り込み（これらは同期例外として配送される）、を実施する。
【００６２】
［トラップコールハンドラー４１４］
トラップコールハンドラーのオペレーションは、以下の説明から明らかとなろう。その主たる目的は、第１のオペレーティングシステムがホルトになった（従って、ＣＰＵリソースを必要としない）ときに、スケジューラおよびスイッチャーが別のオペレーティングシステムへ切り換るのを許すことである。付加的な役割は、以下の実施形態に関連して説明するようにデバッグに使用するためにシステムコンソールのようなハードウェアリソースディスパッチャーサービスを呼び出すことである。
【００６３】
［バーチャル化された装置４１６］
上述したように、各々の共有装置（例えば、割り込みコントローラ、バスブリッジ、システムタイマー、リアルタイムクロック）に対して、各々のオペレーティングシステムは、その装置に対する１組のピアレベルドライバを形成する装置ドライバを与える。リアルタイムオペレーティングシステムは、装置に実際にアクセスするのに使用されるドライバを与え、一方、他のオペレーティングシステムは、バーチャル装置ドライバを与える。
【００６４】
ハードウェアリソースディスパッチャーの共有装置ハンドラー４１６は、その装置の全てのピア装置ドライバによりアクセスするために、各装置に対して記憶されたデータ構造体を与える。装置がアクセスされるべきであるかまたはアクセスされたときには、装置ドライバが、アクセスの詳細と共にその対応するデータ構造体に記憶されたデータを更新する。ピアドライバは、クロス割り込み（上述した）を使用して、事象を信号し、データ構造体がちょうど更新されたことを他のピアドライバに通知する。
【００６５】
割り込みコントローラ装置にアクセスするためのドライバは、上述したバーチャル化された例外メカニズムを使用して、ハードウェア割り込みを次のように取り扱う。
−  クリティカルなオペレーティングシステムの装置ドライバは、ワードウェア割り込みを取り扱い、それらを、バーチャル化された例外として二次ピアドライバへ転送する。
−  二次オペレーティングシステムは、上述したバーチャル化された例外のマスキングおよびアンマスキングルーチンを使用することにより割り込みをイネーブルおよびディスエイブルする。
【００６６】
Ｉ／Ｏバスおよびそれらのブリッジは、それらに接続された装置が全て同じオペレーティングシステムに割り当てられるのでない場合に共有されるだけでよい。従って、装置を割り当てるときには、可能な限り、同じＩ／Ｏバスに接続された装置が同じオペレーティングシステムに割り当てられる。共有が必要な場合には、リソース割り当てテーブル４０４は、どのオペレーティングシステムがどのリソースを有するか指示するためにバス上のリソース（アドレススペース、割り込みラインおよびＩ／Ｏポート）の割り当てを指示する記述子データを記憶する。
【００６７】
［実施形態の具現化］
最終的に、ステップ３１４において、ハードウェアリソースディスパッチャーおよびオペレーティングシステムに対するコードが、コンピュータ１００と共に供給するための分配可能な２進コンピュータプログラム製品としてコンパイルされる。
【００６８】
本発明の態様に基づいて供給できる製品は、ユーザが、使用されるべき異なるオペレーティングシステムを選択でき、各オペレーティングシステムに対して異なるアプリケーションを構築および選択でき、アプリケーションおよびオペレーティングシステムを配送可能な製品へ埋め込むことができ、且つオペレーティングシステムのブーティングおよびアプリケーションの実行可能なバイナリーのランチャーを設けることができるようにするコンピュータプログラムを備えた開発環境製品である。これは、www.jaluna.com.から入手できるＣ５開発環境をベースとし且つそれに類似したものである。
【００６９】
［ブーティングおよび初期化中の実施形態のオペレーション］
図５を参照すれば、この実施形態によるブートおよび初期化プロセスは、次のように遂行される。
【００７０】
ＲＯＭ１０６に記憶されたブートストラッププログラム（トランポリン）４０２２は、最初に電力が供給されるときに実行され、これは、プログラム４０２４をスタートして、ハードウェアリソースディスパッチャープログラム４００の残り部分をメモリにインストールしそしてそれをスタートし、システムイメージコンフィギュレーションを記述するデータ構造体（以下に述べる）をアーギュメントとして通過させる。
【００７１】
ハードウェアリソースディスパッチャーは、システムコンソールとして使用できるシリアルラインを初期化する。これは、次いで、クリティカルなオペレーティングシステムでスタートして、各オペレーティングシステムに順次にメモリスペース（オペレーティングシステム環境）を割り当てる。それ故、ハードウェアリソースディスパッチャーは、第２レベルのシステムカーネルブートローダーとして働く。
【００７２】
各オペレーティングシステムカーネルは、次いで、それ自身の初期化段階を経て進み、リソース割り当てテーブル４０４に残っているものの中でそのオペレーティングシステムに対して排他的となるべきリソースを選択し、そしてその初期サービスおよびアプリケーションをスタートさせる。
【００７３】
図６は、システムイメージを形成するメモリアドレス割り当ての一例を示す。ハードウェアリソースディスパッチャーおよびオペレーティングシステムがコンパイルされるときにメモリ内の位置が割り当てられる。メモリ内のこれら位置のセットは、図６に示すシステムイメージを定義する。システムイメージは、ハードウェアリソースディスパッチャーが置かれる第１のメモリバンク６０２と、リアルタイムオペレーティングシステムが置かれる第２のメモリバンク６０４と、二次オペレーティングシステムが置かれる第３のメモリバンク６０６と、この実施形態では、二次オペレーティングシステム（Ｌｉｎｕｘ）のルートファイルシステムを含むＲＡＭディスクが置かれる第４のメモリバンク６０８とを備えている。
【００７４】
このシステムイメージは、永続的記憶装置（例えば、移動電話またはＰＢＸのような典型的なリアルタイム装置のためのリードオンリメモリ）に記憶される。残りのメモリバンクは、各オペレーティングシステムにその環境として割り当てられてその中でオペレーティングシステムがアプリケーションをロードして実行できるようにして使用される。
【００７５】
［オペレーティングシステムコンテクストに対するメモリの割り当て］
ブートされている間に、各オペレーティングシステムは、それ自身のコンフィギュレーションにより要求される全サイズを満足するためにメモリの相補的断片を割り当てる。オペレーティングシステムに割り当てられると、メモリのバンクは、オペレーティングシステム自身の物理的メモリマネージメント機構を使用してマネージされる。他の全てのメモリは、オペレーティングシステムにより無視される。
【００７６】
［バーチャルメモリ割り当て］
各オペレーティングシステムは、オペレーティングシステムが互いに干渉することがなく、また、ハードウェアリソースディスパッチャーとも干渉することがないよう確保するために、個別のバーチャルメモリスペースが割り当てられる。各オペレーティングシステムのユーザアドレススペース（即ち範囲）およびスーパーバイザーアドレススペース（即ち範囲）は、各々、オーバーラップするアドレスを有する異なるバーチャルメモリスペースを区別できるようにする異なるメモリマネージメントユニット（ＭＭＵ）コンテクスト識別子（ＩＤ）が割り当てられる。このＭＭＵコンテクストＩＤは、各オペレーティングシステムに、それがコンパイルされるときに、指定される（図３のステップ３１４）。
【００７７】
この解決策は、ハードウェアリソースディスパッチャーが異なるオペレーティングシステム間をスイッチするときに、付加的な時間をかけてトランスレーションキャッシュ（ＴＬＢ）をフラッシュする必要性を回避する。むしろ、異なるオペレーティングシステム間をスイッチすることは、現在機能しているオペレーティングシステムのＭＭＵコンテクストＩＤを記憶し、そしてスイッチされる２つのオペレーティングシステムの既に記憶されたＭＭＵコンテクストＩＤを呼び戻すことにより行われる。
【００７８】
［入力／出力装置の割り当て］
上述したように、割り当てテーブル４０４は、どの装置が各オペレーティングシステムに独特に割り当てられるか指示する。更に、テーブル４０４は、どの入力／出力リソース（直接メモリアクセス（ＤＭＡ）装置、入力／出力ポート、割り込み、等々）がこのような装置に排他的に割り当てられるか指示し、従って、競合せずにこれらリソースの直接的な使用を許す。通常、多数の装置が重複されており、従って、潜在的な競合をこのようにして実質的に減少することができる。
【００７９】
オペレーティングシステムのコンフィギュレーション機構に基づいて分布がなされる（例えば、Ｃ５の場合には、装置が装置ツリーで指定される）。それらは、ブート時にブートの順序でオペレーティングシステムに割り当てられ、従って、クリティカルなオペレーティングシステムがテーブル４０４において使用可能な装置を最初に選択し、二次オペレーティングシステムが、残されたものの割り当てを順次に受け入れる。各オペレーティングシステムは、それが初期化するときに、これら装置の存在を検出し、そしてハードウェアリソースディスパッチャーからの対話なしに、それらに対してネーティブなドライバを使用する。
【００８０】
［二次オペレーティングシステムの「ホット」リブート］
ここに示す実施形態によれば、他のオペレーティングシステムが実行を続けている間に二次オペレーティングシステムをリブートすることができる（例えば、クラッシュのために）。システムリソースの分離により、二次オペレーティングシステムのクラッシュは、クリティカルなオペレーティングシステム（または他の二次オペレーティングシステム）の進行中オペレーションを妨げず、その二次オペレーティングシステムをリブートしても同様である。
【００８１】
この実施形態において、ハードウェアリソースディスパッチャーへのシステム「ストップ」および「スタート」トラップコールは、クリティカルなオペレーティングシステム内から二次オペレーティングシステムを遮断および再スタートする上で助けとなる。更に、ハードウェアリソースディスパッチャーは、オリジナルシステムイメージのコピーを、ブート時に、ハードウェアリソースディスパッチャー割り当てメモリ内の永続的メモリにセーブする。例えば、この実施形態におけるホット再スタートは、次のようにマネージされる。
【００８２】
最初にブートアップするときに、ハードウェアリソースディスパッチャーは、二次オペレーティングシステムメモリイメージのコピーをセーブする。
【００８３】
クリティカルなオペレーティングシステムは、二次オペレーティングシステムの機能を周期的にモニタリングするためのソフトウェアウオッチドッグドライバルーチンを含む（例えば、二次オペレーティングシステムにおいて実行されるピアドライバによりトリガーされる事象に対して時間切れおよび待機をセットして、それらの継続オペレーションをチェックすることにより）。
【００８４】
クリティカルなオペレーティングシステムは、二次オペレーティングシステムがフェイルまたはストップしたことを検出すると、ハードウェアリソースディスパッチャーへの「ストップ」トラップコール（二次オペレーティングシステムの）を、次いで、「スタート」トラップコールをトリガーする。
【００８５】
ハードウェアリソースディスパッチャーは、次いで、二次オペレーティングシステムイメージのセーブされたコピーを回復し、それをメモリからリブートして再スタートさせる。ある実施形態のテストの際に、Ｌｉｎｕｘ二次オペレーティングシステムは、ロック状態から数秒以内にリブートできることが分かった。他の観点では、ホット再スタートは、例えば、次のものに記載されたように、Ｃｈｏｒｕｓオペレーティングシステムで得られるものが確立される。
【００８６】
「FastError Recovery in CHORUS/OS. The Hot-Restart Technology」、
アブロシモフ、Ｆ．ハーマン、Ｊ．Ｃ．ハグリー氏等、コーラス・システムズ・インク、テクニカルレポート、１９９６年８月、１４ｐ、次から入手可：
http://www.jaluna.com/developer/papers/CSI-TR-96-34.pdf
【００８７】
［ランタイムオペレーション］
インストールおよびブート後のこの実施形態のオペレーションを以下に詳細に説明する。
【００８８】
ブートされ初期化されると、リアルタイムオペレーティングシステムは、１つ以上のアプリケーション２０７（例えば、ＵＤＰ／ＩＰスタック、ＵＤＰ／ＩＰは、ユニバーサルデータグラムプロトコル／インターネットプロトコルを意味する）を実行し、また、二次オペレーティングシステムは、多数のアプリケーション２０８ａ、２０８ｂ（例えば、ワードプロセッサおよびスプレッドシート）を実行する。リアルタイムオペレーティングシステムマイクロカーネル２０１および二次オペレーティングシステムカーネル２０２は、次のものを含むハードウェアリソースディスパッチャーインターフェイスを経て、ハードウェアリソースディスパッチャーと通信する。
−  オペレーティングシステムコンテクストを表わすデータ構造体（即ち、オペレーティングシステムへスイッチするためにセーブおよび再記憶される必要のある状態変数のセット）、およびハードウェア貯蔵部；
−  オペレーティングシステム環境において実行される機能のセット；および
−  ハードウェアリソースディスパッチャー環境において実行されるトラップコールルーチンのセット。
【００８９】
いずれのオペレーティングシステムもプロセッサ時間を要求しない（例えば、両方が「待機」状態に達している）場合には、ハードウェアリソースディスパッチャー４００は、クリティカルなオペレーティングシステムのアイドルスレッドへスイッチし、そこで、割り込みまたは事象を待機する。従って、割り込みは、クリティカルなオペレーティングシステムに最初にスイッチする必要なく、クリティカルなオペレーティングシステムのサービスルーチンにより直ちに処理することができる。
【００９０】
ある点において、割り込みまたは事象が発生する。例えば、パケットがデータポートに受け取られ、ＵＤＰ／ＩＰスタックを実行するリアルタイムオペレーティングシステムにより処理することが許された割り込みを生じさせることがある。或いはまた、ユーザがキーボードまたはマウスを操作して、ワードプロセスアプリケーション２０８と対話するために二次オペレーティングシステム２０２のＧＵＩを動作する割り込みを生じさせることもある。或いはまた、システムクロックが、所定時間の経過を指示したり、アプリケーションが再実行を開始しなければならないことまたはオペレーティングシステムの機能を実行しなければならないことを指示したりすることもある。
【００９１】
次いで、クリティカルなオペレーティングシステムのサービスルーチンが、以下に述べるように、割り込みにサービスする。
【００９２】
［割り込みおよび事象の取り扱い］
まだクリティカルなオペレーティングシステムにいない場合には、ハードウェアリソースディスパッチャー割り込みハンドラー４１２がオペレーティングシステムスイッチャー４０８をコールして、クリティカルなオペレーティングシステムへスイッチし、次いで、割り込みハンドラールーチン４１２は、クリティカルなオペレーティングシステム２０１における割り込みサービスルーチン（ＩＳＲ）をコールする。割り込みがクリティカルなオペレーティングシステムに対して意図された場合には、それがクリティカルなオペレーティングシステムに独特に指定された装置からのものであるために、或いはそれが共有装置からのもので且つある所定値を有するために、クリティカルなオペレーティングシステムＩＳＲは、割り込みを取り扱うのに必要なアクションをとる。さもなければ、制御がハードウェアリソースディスパッチャーに戻される。
【００９３】
［クリティカルなオペレーティングシステムから二次オペレーティングシステムへのスイッチ］
図７を参照すれば、この例では、システムは、クリティカルなオペレーティングシステム２０１で実行されるアプリケーション２０７ａのスレッド７０２を実行している。
【００９４】
割り込みが生じた場合には、クリティカルなオペレーティングシステムの割り込みサービスルーチン７０４が割り込みサービスを実行する。それが終了すると、クリティカルなオペレーティングシステム２０１のスケジューラにより実行されるスレッド７０２および他のものに制御が戻される。全てのスレッドの処理が完了すると、クリティカルなオペレーティングシステムは、実行を終了し、その「アイドル」スレッドをスケジュールする。従って、クリティカルなオペレーティングシステムの「アイドル」トラップルーチンは、ハードウェアリソースディスパッチャー４００へ「アイドル」トラップコールを発生する。ハードウェアリソースディスパッチャーは、次いで、次のことを行うルーチンを実行する。
−  割り込みハンドラー４１２が、現在、幾つかの記憶されたバーチャル割り込みを有する場合には、それらが割り込みハンドラー４１２により二次オペレーティングシステムへ転送される。
−  ハードウェアリソースディスパッチャーのオペレーティングシステムスケジューラ４１０は、実行すべき二次オペレーティングシステム２０２を選択する。ＯＳスイッチャー４０８は、次いで、現在コンテクスト（通常、プロセッサＭＭＵおよび状態レジスタ、命令およびスタックポインタ）をクリティカルなＯＳのコンテクスト記憶エリア７０６にセーブする。これは、次いで、二次オペレーティングシステム２０２に対して記憶された実行コンテクスト７０８を検索し、それらを当該レジスタに書き込む。
−  当該二次ＯＳに対してバーチャル割り込みが存在する場合には、割り込みハンドラー４１２が二次オペレーティングシステム内の当該割り込みサービスルーチン７１０をコールし、これは、割り込みにサービスし、その完了時に、二次オペレーティングシステムが停止されたところのそのスレッド７１２の実行に復帰する。
【００９５】
割り込みハンドラー４１２が、現在、保留中の割り込みを有していない場合には、ハードウェアリソースディスパッチャーのオペレーティングスイッチャー４０８は、再記憶されたオペレーティングシステムコンテクスト内の記憶されたプログラムカウンタ値を使用して、二次オペレーティングシステムが、それが停止されたところ、このケースでは、スレッド７１２で、実行を再開するようにさせる。
【００９６】
従って、クリティカルなオペレーティングシステム２０１がある機能を遂行した（それ自身のアプリケーションまたはサービス、或いは別のオペレーティングシステムに対して意図された割り込みにサービスした）後に、ハードウェアリソースディスパッチャーは、スケジューラ４１０により決定された次の二次オペレーティングシステム２０２へ制御を戻す。
【００９７】
［割り込み時の二次オペレーティングシステムからクリティカルなオペレーティングシステムへのスイッチ］
図８を参照して、二次オペレーティングシステムからクリティカルなオペレーティングシステムへ移行するプロセスについて以下に説明する。このケースでは、システムは、クリティカルなオペレーティングシステム２０２で実行されるアプリケーション２０８ａのスレッド７１２を実行している。
【００９８】
ハードウェア割り込みが生じると、ハードウェアリソースディスパッチャーは、ＯＳスイッチャーをスタートさせ、二次オペレーティングシステムコンテクストをコンテクスト記憶エリア７０８にセーブする。これは、次いで、一次オペレーティングシステム２０１へスイッチして、コンテクスト記憶エリア７０６から状態変数の値を回復すると共に、一次オペレーティングシステム２０１の割り込みサービスルーチン７０４をコールする。割り込みにサービスした後、一次オペレーティングシステム２０１のスケジューラは、ＩＳＲ７０４から、以前に実行されていたスレッド７０４（または実行されるべきスレッド）へ制御を戻すことができる。
【００９９】
ＩＳＲおよび全てのスレッドが処理されると、一次オペレーティングシステム２０１は、制御をハードウェアリソースディスパッチャーへ戻し、これは、図７を参照して上述したように、一次オペレーティングシステム２０１からスイッチし（状態変数をコンテクスト記憶装置７０６にセーブする）、そして選択された二次オペレーティングシステム２０１へスイッチする（コンテクスト記憶装置７０８から状態変数を検索する）。
【０１００】
［オペレーティングシステム間通信−バーチャルバス４１８］
バーチャルバスルーチンは、各々のオペレーティングシステムにおけるバーチャルバスドライバと協働する。これは、ｃＰＣＩバックプレーンに差し込まれるコンパクトＰＣＩ（ｃＰＣＩ）ボードと同様に、オペレーティングシステムを接続する物理的バスをエミュレートする。各オペレーティングシステムには、このバーチャルバス上のバーチャルバスブリッジ装置に対するドライバルーチンが設けられ、オペレーティングシステムおよびそれらのアプリケーションが希望のプロトコルにより生データ転送から全ＩＰプロトコルスタックへ通信するのを許す。
【０１０１】
ハードウェアリソースディスパッチャーのバーチャルバスは、既に上述した共有メモリおよびシステムクロス割り込みの原理をベースとする。詳細には、バーチャルバスルーチン４１８は、バーチャルバスブリッジ共有装置を定義するＣ５ｂｕｓｃｏｍＤＤＩ：ｓｙｓｃｏｍをエミュレートし、バーチャルバスにわたってメモリをエクスポート（共有）し且つ他のオペレーティングシステムへクロス割り込みをトリガーすることを許す。
【０１０２】
各二次オペレーティングシステムにおける各バーチャルバスドライバは、始動時に、ハードウェアリソースディスパッチャーのハードウェア貯蔵部にこのようなバーチャルバスブリッジを生成する。これを行うことにより、そのプライベートメモリの領域をエクスポート（共有）し、且つそのホスティングシステム内に割り込みを引き起こす方法を与える。
【０１０３】
従って、第１のオペレーティングシステムのバーチャルバスドライバは、次のことにより第２のオペレーティングシステムへデータを送信する。
−  第２のオペレーティングシステムのピアバーチャルバスドライバによりエクスポートされたメモリへ書き込み、次いで、
−  第２のオペレーティングシステムのピアバスドライバにデータが得られることを通知するためにクロス割り込みをトリガーする。
【０１０４】
逆の（到来する）方向において、バーチャルバスドライバは、到来するデータがそれ自身のエクスポートされたメモリ領域に記憶されたことを指示するクロス割り込みを受け取ったときにそのデータを上流へ伝播させる（意図されたアプリケーションまたはルーチンにより使用するために）。
【０１０５】
図９の（ａ）を参照すれば、アプリケーション２０８ａは、同じオペレーティングシステム２０２で実行される別のアプリケーション２０８ｂと通信すべきもので、このオペレーティングシステムを介してそれを行うことができる。１つのオペレーティングシステム２０１で実行されるアプリケーション２０７ｂは、異なるオペレーティングシステム２０２で実行される別のアプリケーション２０８ｂと通信すべきもので、そのオペレーティングシステムのＡＰＩを使用してバーチャルバスにデータを書き込むことによりそれを行い、このオペレーティングシステムは、バーチャルバスドライバルーチンを使用して、データを他方のオペレーティングシステム２０２へ通過させ、更に、このオペレーティングシステム２０２は、そのバーチャルバスドライバからアプリケーション２０８ｂへデータを伝播させる。
【０１０６】
図９の（ｂ）を参照すれば、この構成体を、第１および第２のオペレーティングシステムが異なるコンピュータ１００、１０１で実行されるものへと移行するのに必要な変更は、僅かであり、即ち、オペレーティングシステムが、バーチャルバスドライバではなく、真のバス１０３のためのドライバを使用するように、オペレーティングシステムにより使用されるドライバを変更するだけでよい。それ故、システムは、それが動作するハードウェアとは更に独立したものとされる。
【０１０７】
ハードウェアリソースディスパッチャーのバーチャルバスにわたる通信は、アプリケーションに対して使用できるが、オペレーティングシステムのカーネルにより内部で使用することもでき、従って、それらは、多数のオペレーティングシステム間に分散されたサービスの実施において協働することができる。この種の「スマート」な分散サービスは、システムホット再スタート（上述した）に使用されるソフトウェアウオッチドッグ、または分散型ネットワークプロトコルスタックを含む。
【０１０８】
ＥＰ１０５４３３２号特許は、共通の通信メモリへのアクセスを同期させるためにセマフォロックを使用している。このようなロックは、ＲＴおよびＧＰオペレーティングシステム間に特別な依存性を導入する。ここに示す実施形態では、これは、ロックレス通信プロトコルを使用して回避される。
【０１０９】
［デバッグ］
好ましい実施形態では、ハードウェアリソースディスパッチャーは、それがデバッグエージェントとして働く第２の動作モードを有する。
【０１１０】
この実施形態によれば、第２のモードにおいて、ハードウェアリソースディスパッチャーは、シリアル通信ラインを経て、別のマシン（「ホスト」マシン）で実行されるデバッグソフトウェアツールと通信することができる。
【０１１１】
このようなデバッグツールは、ハードウェアリソースディスパッチャーを遠隔制御するための高レベルグラフィックユーザインターフェイス（ＧＵＩ）を与える。ハードウェアリソースディスパッチャーのバーチャル化された例外メカニズムは、定義された例外をインターセプトするのに使用される。ユーザは、次いで、ハードウェアリソースディスパッチャーがプロセッサ例外の場合にどのように振舞うかを構成および制御できると共に、マシンおよびシステム状態を表示して、コードまたは他のシステムエラー或いは問題を診断することができる。
【０１１２】
ユーザは、１つ以上のこのようなプロセッサ例外を、オペレーティングシステムからハードウェアリソースディスパッチャーへのトラップコールに対する基礎として選択することができる。選択された例外に基づいて、実行中に各々の例外が生じたときに、オペレーティングシステムがストップされ、ハードウェアリソースディスパッチャーへのトラップコールを実行し、これは、次いで、現在コンテクストをセーブして、ホストのデバッグツールとの対話を可能にする。次いで、ユーザは、状態変数（例えば、スタックポインタ、プログラムおよびアドレスカウンタ）の現在状態、および／または選択されたメモリブロックのコンテンツを表示させることができる。ユーザは、所与の形式の例外が、デバッグされるべき特定のオペレーティングシステムにトラップされねばならないこと、或いはそれらが発生したときにそれらがオペレーティングシステムにトラップされねばならないことのいずれかを指定できる。それに応答して、１つのみのまたは全てのオペレーティングシステムにおいてトラップコールが実施される。また、ユーザは、所与の形式の例外が、実行の再スタート時にシステムへ通常に転送されるべきであるか、または単に無視されるべきであるかも指定できる。
【０１１３】
ハードウェアリソースディスパッチャーは、それ自身の環境において実行するので、オペレーティングシステムを、そのシステム内から実行する以上に顕著にデバッグすることができる。重要なことに、デバッグエージェントとして働くハードウェアリソースディスパッチャーと、デバッグされているシステムとの間にコードは共有されない。これは、例えば、例外ベクトルまたは割り込みサービスルーチンのようなカーネル低レベルコードのデバッグを許す。
【０１１４】
この実施形態による全（ホスト／ターゲット）デバッグアーキテクチャーの幾つかの他の態様は、Ｊａｌｕｎａにより出版され、次から入手できる文書「C5 1.0 Debugging Guide」に掲載されたＣｈｏｒｕｓおよびＣ５デバッグシステムのためのものと同様である。
http://www.jaluna.com/doc/c5/html/DebugGuide/bookl.html
【０１１５】
［安全性アーキテクチャー］
上述した実施形態は、安全性アーキテクチャーに対する確固とした基礎を与える。これは、ユーザが通常不確実なアプリケーションを実行する二次オペレーティングシステムが指定のシステムリソースから絶縁され、且つハードウェアリソースディスパッチャー（および一次オペレーティングシステムのドライバ）を通してしかそれらにアクセスできないためである。従って、一次オペレーティングシステムにおいてセキュリティアプリケーションを実行することができ、これらアプリケーションは、例えば、暗号化／暗号解読を遂行し、即ち暗号化されたファイルへのアクセスを許し、パスワードおよび他のアクセス情報をマネージし、記憶しおよび供給し、更に、版権資料のアクセスおよび複写をマネージしおよびログする。二次オペレーティングシステムで実行されるアプリケーションは、そのオペレーティングシステムに割り当てられていないシステムリソースにアクセスすることができず、また、オペレーティングシステムが異なるメモリコンテクストにおいて実行される（即ち、異なるスペースへの異なるアドレッシングポインタを使用する）場合には、二次オペレーティングシステムで実行されるアプリケーションは、一次システムで実行されるアプリケーションを妨げて、そのオペレーションのセキュリティを弱めるように使用することができない。
【０１１６】
［その他の態様および実施形態］
以上のことから、前記実施形態は例示に過ぎず、他の多数の実施形態も考えられることが明らかであろう。上述したオペレーティングシステム、プラットホームおよびプログラミング技術は、全て、自由に変更できる。当業者に明らかな他の修正、置き換えおよび変更が、特許請求の範囲に包含されるかどうかに関わらず、本発明の範囲内で考えられる。疑義を回避するために、ここに開示するいずれかおよび全ての新規な要旨およびその組合せに対して保護が求められる。
【図面の簡単な説明】
【０１１７】
【図１】本発明を実施できるコンピュータシステムのエレメントを示すブロック図である。
【図２ａ】従来技術によるソフトウェアの配列を示す図である。
【図２ｂ】本発明によるソフトウェアの配列を示す対応する図である。
【図３】図１のコンピュータに対して図２ｂのソフトウェアを生成する段階を示すフローチャートである。
【図４】図２ｂの一部分を形成するハードウェアリソースディスパッチャーのコンポーネントを示す図である。
【図５】ブートおよび初期化シーケンスに使用されるプログラムを示す図である。
【図６】ブートまたは初期化プロセスに使用されるシステムメモリイメージを示す図である。
【図７】一次オペレーティングシステムから二次オペレーティングシステムへの移行を示す図である。
【図８】二次オペレーティングシステムから一次オペレーティングシステムへの移行を示す図である。
【図９】（ａ）は、本発明により異なるオペレーティングシステムで実行されるアプリケーション間の通信を示す図であり、（ｂ）は、本発明により異なるコンピュータの異なるオペレーティングシステムで実行されるアプリケーション間の通信を示す図である。
【符号の説明】
【０１１８】
１００・・・コンピュータシステム、１０２・・・中央処理ユニット（ＣＰＵ）、１０４・・・システムバス、１０６・・・リードオンリメモリ（ＲＯＭ）チップ、１９８・・・ランダムアクセスメモリ（ＲＡＭ）チップ、１１０・・・ディスクコントローラ装置、１１２・・・入力／出力ポート、１１４・・・拡張バス、１１６・・・他のシステムチップ、２０１、２０２・・・オペレーティングシステム、２０４・・・オペレーティングシステムユーザインターフェイスまたはプレゼンテーションレイヤー、２０６・・・ミドルウェアレイヤー、２０７・・・Ｌｉｎｕｘカーネル、２０８ａ、２０８ｂ・・・アプリケーション、４００・・・ハードウェアリソースディスパッチャー、４０８・・・オペレーティングシステムスイッチャー、４１０・・・スケジューラ、４１２・・・割り込みハンドラールーチン、４１４・・・トラップコールハンドラー、４１６・・・バーチャル装置ハンドラー、６０２・・・第１メモリバンク、６０４・・・第２メモリバンク、６０６・・・第３メモリバンク、６０８・・・第４メモリバンク
【図１】
2006522971.tif 000003
【図２ａ】
2006522971.tif 000004
【図２ｂ】
2006522971.tif 000005
【図３】
2006522971.tif 000006
【図４】
2006522971.tif 000007
【図５】
2006522971.tif 000008
【図６】
2006522971.tif 000009
【図７】
2006522971.tif 000010
【図８】
2006522971.tif 000011
【図９】
2006522971.tif 000012
【国際調査報告】
2006522971.tif 000013
2006522971.tif 000014
2006522971.tif 000015
2006522971.tif 000016
2006522971.tif 000017