(57)【要約】【課題】一台のコンピュータで同時に動作する複数のオペレーティングシステムのうちの一つのオペレーティングシステムを起動する際、起動するオペレーティングシステムの改造を不要とし、開発期間の短縮および開発コストの低減を図ること。【解決手段】他のオペレーティングシステムの初期化処理を実行する前にＣＰＵの走行モードをトレースモードに設定し、各命令を実行するごとにデバッグ例外を発生させ、デバッグ例外処理部２２０が次の命令が特定の命令群の先頭の命令であるか否かを調べ、次の命令が特定の命令群の先頭の命令である場合には、その特定の命令群を実行する代わりに代替処理をおこなう構成とする。【選択図】      図２
2004287618.tif 000002
【特許請求の範囲】
【請求項１】
一台のコンピュータで同時に動作する複数のオペレーティングシステムのうちの一つのオペレーティングシステムの起動を制御するオペレーティングシステム起動制御方法であって、
起動されるオペレーティングシステムの処理として次に実行される命令が特定の命令群に属する命令であるか否かの判定をおこなう命令群判定工程と、
前記命令群判定工程が特定の命令群に属する命令であると判定をおこなった場合に、該特定の命令群に対して代替処理をおこなう代替処理工程と、
を含んだことを特徴とするオペレーティングシステム起動制御方法。
【請求項２】
前記命令群判定工程は、コンピュータを構成する中央演算装置のトレースモードにおいて各命令が実行される際に発生する割込みの処理の中で前記判定をおこなうことを特徴とする請求項１に記載のオペレーティングシステム起動制御方法。
【請求項３】
前記命令群判定工程は、起動されるオペレーティングシステムの命令のアドレスに設定したブレークポイントにおいて発生する割込みの処理の中で前記判定をおこなうことを特徴とする請求項１に記載のオペレーティングシステム起動制御方法。
【請求項４】
前記割込みの処理を終了する際に、中央演算装置をトレースモードに設定することを特徴とする請求項３に記載のオペレーティングシステム起動制御方法。
【請求項５】
前記命令群判定工程は、割込みが発生した際に中央演算装置がスタックに積んだ次命令アドレスを用いて次に実行される命令を取り出し、該取り出した命令に対して前記判定をおこなうことを特徴とする請求項１〜４のいずれか一つに記載のオペレーティングシステム起動制御方法。
【請求項６】
前記命令群判定工程は、前記特定の命令群が連続している場合に、該連続する特定の命令群の最後の命令に続く命令のアドレスに中央演算装置がスタックに積んだ次命令アドレスを書き換えることを特徴とする請求項２〜５のいずれか一つに記載のオペレーティングシステム起動制御方法。
【請求項７】
前記命令群判定工程は、前記特定の命令群の最初のいくつかの命令または最後のいくつかの命令を用いて前記判定をおこなうことを特徴とする請求項１〜６のいずれか一つに記載のオペレーティングシステム起動制御方法。
【請求項８】
前記代替処理工程は、いくつかの特定の命令群に対しては代替処理をおこなうことなくスキップすることを特徴とする請求項１〜７のいずれか一つに記載のオペレーティングシステム起動制御方法。
【請求項９】
前記次に実行される命令がメモリマップ取得をおこなう命令群の最初の命令または最初のいくつかの命令である場合に、前記命令群判定工程は、該次に実行される命令を前記特定の命令群に属する命令であると判定をおこない、前記代替処理工程は、メモリマップ情報を書き換える処理を含む代替処理をおこなうことを特徴とする請求項７に記載のオペレーティングシステム起動制御方法。
【請求項１０】
前記次に実行される命令がメモリマップ取得をおこなう命令群の途中の命令あるいは最後の命令あるいは最後のいくつかの命令である場合に、前記命令群判定工程は、前記特定の命令群が実行されたと判定し、前記代替処理工程は、メモリマップ情報を書き換える処理を含む代替処理をおこなうことを特徴とする請求項７に記載のオペレーティングシステム起動制御方法。
【請求項１１】
請求項１〜１０のいずれか一つに記載されたオペレーティングシステム起動制御方法をコンピュータに実行させるプログラム。
【請求項１２】
一台のコンピュータで同時に動作する複数のオペレーティングシステムのうちの一つのオペレーティングシステムの起動を制御するオペレーティングシステム起動制御装置であって、
起動されるオペレーティングシステムの処理として次に実行される命令が特定の命令群に属する命令であるか否かの判定をおこなう命令群判定手段と、
前記命令群判定手段が特定の命令群に属する命令であると判定をおこなった場合に、該特定の命令群に対して代替処理をおこなう代替処理手段と、
を備えたことを特徴とするオペレーティングシステム起動制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、一台のコンピュータで同時に動作する複数のオペレーティングシステムのうちの一つのオペレーティングシステムの起動を制御するオペレーティングシステム起動制御方法およびその方法をコンピュータに実行させるプログラム、ならびにオペレーティングシステム起動制御装置に関し、特に、起動されるオペレーティングシステムの改造を不要とし、もって開発期間の短縮および開発コストの低減を図ることができるオペレーティングシステム起動制御方法およびその方法をコンピュータに実行させるプログラム、ならびにオペレーティングシステム起動制御装置に関する。
【０００２】
【従来の技術】
通常のコンピュータでは、一つのオペレーティングシステムがプロセッサ、メモリ、二次記憶装置などのコンピュータ資源を管理し、コンピュータが効率良く動作できるように資源スケジュールを実施している。しかし、オペレーティングシステムには、バッチ処理に優れているもの、ＴＳＳ（Ｔｉｍｅ  Ｓｈａｒｉｎｇ  Ｓｙｓｔｅｍ）に優れているもの、ＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）に優れているものなど様々な種類があることから、各ＯＳの特徴を活かして複数のＯＳを同時に利用したいという要求がある。
【０００３】
たとえば、大型計算機においては、実際の業務に伴うオンライン処理を実行するオペレーティングシステムと、開発用のオペレーティングシステムとを一台のコンピュータで動作させたいという要求がある。あるいは、ＧＵＩの整っているオペレーティングシステムと、実時間性に優れているオペレーティングシステムとを同時に稼動させたいという要求もある。
【０００４】
しかしながら、個々のオペレーティングシステムは、単独でコンピュータ資源の管理を実施することを前提として設計されていることから、複数のオペレーティングシステムを共存させるためには、個々のオペレーティングシステムに対して何らかの改造が必要となる。
【０００５】
特に、あるオペレーティングシステムを起動した後で他のオペレーティングシステムを起動するためには、先に起動したオペレーティングシステムの走行環境を破壊することなく他のオペレーティングシステムを起動する必要がある。したがって、他のオペレーティングシステムを物理メモリへロードする場合に、先に起動したオペレーティングシステムがロードされている物理メモリ領域が上書きされることや、コンピュータに接続された入出力装置の初期化が繰り返しおこなわれることなどを防ぐ必要がある。
【０００６】
そこで、先に起動したオペレーティングシステムの走行環境を破壊することなく他のオペレーティングシステムを起動する技術が開発されている（たとえば、特許文献１、２および３参照。）。
【０００７】
また、先に起動したオペレーティングシステムの走行環境を破壊しないように他のオペレーティングシステムを起動する場合に利用可能な技術として、プログラムの内容を変更する技術が開発されている（たとえば、特許文献４〜７参照。）。
【０００８】
【特許文献１】
特開平１１−１４９３８５号公報
【特許文献２】
特開２００１−２１６１７２号公報
【特許文献３】
特開平０８−２１２０８９号公報
【特許文献４】
特開２０００−１８１７２５号公報
【特許文献５】
特開２０００−３０５７６８号公報
【特許文献６】
特開平１１−６５８５４号公報
【特許文献７】
特開平６−３３２７５１号公報
【０００９】
【発明が解決しようとする課題】
しかしながら、かかる従来技術では、後から起動するオペレーティングシステムを改造する必要があるか、あるいは、改造する必要がない場合にも、特別なハードウェアが必要であるなどの問題がある。
【００１０】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、起動されるオペレーティングシステムの改造を不要とし、もって開発期間の短縮および開発コストの低減を図ることができるオペレーティングシステム起動制御方法およびその方法をコンピュータに実行させるプログラム、ならびにオペレーティングシステム起動制御装置を提供することを目的とする。
【００１１】
【課題を解決するための手段】
上述した課題を解決し、目的を達成するため、請求項１の発明に係るオペレーティングシステムは、一台のコンピュータで同時に動作する複数のオペレーティングシステムのうちの一つのオペレーティングシステムの起動を制御するオペレーティングシステム起動制御方法であって、起動されるオペレーティングシステムの処理として次に実行される命令が特定の命令群に属する命令であるか否かの判定をおこなう命令群判定工程と、前記命令群判定工程が特定の命令群に属する命令であると判定をおこなった場合に、該特定の命令群に対して代替処理をおこなう代替処理工程と、を含んだことを特徴とする。
【００１２】
この請求項１の発明によれば、起動されるオペレーティングシステムの処理として次に実行される命令が特定の命令群に属する命令であるか否かの判定をおこない、特定の命令群に属する命令であると判定をおこなった場合に、特定の命令群に対して代替処理をおこなう代替処理工程おこなうこととしたので、起動されるオペレーティングシステムの改造を不要とし、もって開発期間の短縮および開発コストの低減を図ることができる。
【００１３】
また、請求項２の発明に係るオペレーティングシステム起動制御方法は、請求項１の発明において、前記命令群判定工程は、コンピュータを構成する中央演算装置のトレースモードにおいて各命令が実行される際に発生する割込みの処理の中で前記判定をおこなうことを特徴とする。
【００１４】
この請求項２の発明によれば、コンピュータを構成する中央演算装置のトレースモードにおいて各命令が実行される際に発生する割込みの処理の中で判定をおこなうこととしたので、起動されるオペレーティングシステムの処理から自動的に制御を受け取って代替処理をおこなうことができる。
【００１５】
また、請求項３の発明に係るオペレーティングシステム起動制御方法は、請求項１の発明において、前記命令群判定工程は、起動されるオペレーティングシステムの命令アドレスに設定したブレークポイントにおいて発生する割込みの処理の中で前記判定をおこなうことを特徴とする。
【００１６】
この請求項３の発明によれば、起動されるオペレーティングシステムの命令アドレスに設定したブレークポイントにおいて発生する割込みの処理の中で判定をおこなうこととしたので、起動されるオペレーティングシステムの処理から自動的に制御を受け取って代替処理をおこなうことができる。
【００１７】
また、請求項４の発明に係るオペレーティングシステム起動制御方法は、請求項３の発明において、前記割込みの処理を終了する際に、中央演算装置をトレースモードに設定することを特徴とする。
【００１８】
この請求項４の発明によれば、割込みの処理を終了する際に、中央演算装置をトレースモードに設定することとしたので、起動されるオペレーティングシステムの処理として引き続き実行される命令毎に割込みを発生させ、判定をおこなうことができる。
【００１９】
また、請求項５の発明に係るオペレーティングシステム起動制御方法は、請求項１〜４のいずれか一つに記載の発明において、前記命令群判定工程は、割込みが発生した際に中央演算装置がスタックに積んだ次命令アドレスを用いて次に実行される命令を取り出し、該取り出した命令に対して前記判定をおこなうことを特徴とする。
【００２０】
この請求項５の発明によれば、割込みが発生した際に中央演算装置がスタックに積んだ次命令アドレスを用いて次に実行される命令を取り出し、取り出した命令に対して判定をおこなうこととしたので、次に実行される命令の判定をおこなうことができる。
【００２１】
また、請求項６の発明に係るオペレーティングシステム起動制御方法は、請求項２〜５のいずれか一つに記載の発明において、前記命令群判定工程は、前記特定の命令群が連続している場合に、該連続する特定の命令群の最後の命令に続く命令のアドレスに中央演算装置がスタックに積んだ次命令アドレスを書き換えることを特徴とする。
【００２２】
この請求項６の発明によれば、特定の命令群が連続している場合に、連続する特定の命令群の最後の命令に続く命令のアドレスに中央演算装置がスタックに積んだ次命令アドレスを書き換えることとしたので、特定の命令群が連続している場合にも代替処理をおこなうことができる。
【００２３】
また、請求項７の発明に係るオペレーティングシステム起動制御方法は、請求項１〜６のいずれか一つに記載の発明において、前記命令群判定工程は、前記特定の命令群の最初のいくつかの命令または最後のいくつかの命令を用いて前記判定をおこなうことを特徴とする。
【００２４】
この請求項７の発明によれば、特定の命令群の最初のいくつかの命令または最後のいくつかの命令を用いて判定をおこなうこととしたので、特定の命令群であるか否かを効率良く判定することができる。
【００２５】
また、請求項８の発明に係るオペレーティングシステム起動制御方法は、請求項１〜７のいずれか一つに記載の発明において、前記代替処理工程は、いくつかの特定の命令群に対しては代替処理をおこなうことなくスキップすることを特徴とする。
【００２６】
この請求項８の発明によれば、いくつかの特定の命令群に対しては代替処理をおこなうことなくスキップすることとしたので、実行不要な命令群をスキップすることができる。
【００２７】
また、請求項９の発明に係るオペレーティングシステム起動制御方法は、請求項７の発明において、前記次に実行される命令がメモリマップ取得をおこなう命令群の最初の命令または最初のいくつかの命令である場合に、前記命令群判定工程は、該次に実行される命令を前記特定の命令群に属する命令であると判定をおこない、前記代替処理工程は、メモリマップ情報を書き換える処理を含む代替処理をおこなうことを特徴とする。
【００２８】
この請求項９の発明によれば、次に実行される命令がメモリマップ取得をおこなう命令群の最初の命令または最初のいくつかの命令である場合に、次に実行される命令を特定の命令群に属する命令であると判定をおこない、メモリマップ情報を書き換える処理を含む代替処理をおこなうこととしたので、起動されるオペレーティングシステムが使用できる物理メモリ領域を制限することができる。
【００２９】
また、請求項１０の発明に係るオペレーティングシステム起動制御方法は、請求項７の発明において、前記次に実行される命令がメモリマップ取得をおこなう命令群の途中の命令あるいは最後の命令あるいは最後のいくつかの命令である場合に、前記命令群判定工程は、前記特定の命令群が実行されたと判定し、前記代替処理工程は、メモリマップ情報を書き換える処理を含む代替処理をおこなうことを特徴とする。
【００３０】
この請求項１０の発明によれば、次に実行される命令がメモリマップ取得をおこなう命令群の途中の命令あるいは最後の命令あるいは最後のいくつかの命令である場合に、特定の命令群が実行されたと判定し、メモリマップ情報を書き換える処理を含む代替処理をおこなうこととしたので、起動されるオペレーティングシステムが使用できる物理メモリ領域を制限することができる。
【００３１】
また、請求項１１の発明に係るプログラムは、上記発明のいずれか一つに記載されたオペレーティングシステム起動方法をコンピュータに実行させるプログラムであり、そのプログラムがコンピュータ読み取り可能となり、これによって、上記の発明のいずれか一つの動作をコンピュータによって実行することができる。
【００３２】
また、請求項１２の発明に係るオペレーティングシステム起動制御装置は、一台のコンピュータで同時に動作する複数のオペレーティングシステムのうちの一つのオペレーティングシステムの起動を制御するオペレーティングシステム起動制御装置であって、起動されるオペレーティングシステムの処理として次に実行される命令が特定の命令群に属する命令であるか否かの判定をおこなう命令群判定手段と、前記命令群判定手段が特定の命令群に属する命令であると判定をおこなった場合に、該特定の命令群に対して代替処理をおこなう代替処理手段と、を備えたことを特徴とする。
【００３３】
この請求項１２の発明によれば、起動されるオペレーティングシステムの処理として次に実行される命令が特定の命令群に属する命令であるか否かの判定をおこない、特定の命令群に属する命令であると判定をおこなった場合に、特定の命令群に対して代替処理をおこなうこととしたので、起動されるオペレーティングシステムの改造を不要とし、もって開発期間の短縮および開発コストの低減を図ることができる。
【００３４】
【発明の実施の形態】
以下に添付図面を参照して、この発明に係るオペレーティングシステム起動制御方法、およびその方法をコンピュータに実行させるプログラム、ならびにオペレーティングシステム起動制御装置の好適な実施の形態を詳細に説明する。なお、本実施の形態では、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ：中央演算装置）に米国Ｉｎｔｅｌ社  ＩＡ−３２アーキテクチャ、Ｐｅｎｔｉｕｍ（Ｒ）を使用する場合について説明する。
【００３５】
まず、本実施の形態に係るオペレーティングシステ起動制御方法による命令群代替処理の概念について説明する。図１は、本実施の形態に係るオペレーティングシステム起動制御方法による命令群代替処理の概念を説明するための説明図である。
【００３６】
同図は、オペレーティングシステムＯＳ−Ａを物理メモリの高アドレス領域にロードして起動後、ＯＳ−Ａの制御のもとに他のオペレーティングシステムＯＳ−Ｂを物理メモリの低アドレス領域にロードして起動する状態を示している。なお、ＯＳ−Ａは、通常ＯＳ−Ｂと同じ低アドレス領域にロードされるが、ここでは、ＯＳ−Ａを改造することによって、ＯＳ−Ａを物理メモリの高アドレス領域にロードして起動している。ここでは、ＯＳ−Ａを物理メモリの高アドレス領域にＯＳ−Ｂを低アドレス領域にロードすることで説明するが、この高低が逆でもよい。
【００３７】
同図に示した状態で、ＯＳ−Ａは、ＯＳ−Ｂが初期化処理を実行する前に、ＣＰＵの走行モードをトレースモード（ＩＡ−３２アーキテクチャでは、デバッグモードと呼ぶ。さらに詳しく言うと、１命令実行毎にデバッグ例外が発生するモードを、シングル・ステップ・モードと呼ぶ。）に設定する。なお、トレースモードの設定は、フラグレジスタ（ＥＦＬＡＧＳ）の所定のビットをセットすることによっておこなう。
【００３８】
すると、ＯＳ−Ｂの初期化処理において、一つの命令を実行するごとにデバッグ例外（ｉｎｔ  ０ｘ０１）が発生し、割込みディスクリプタテーブルレジスタ（ＩＤＴＲ）で指定されるＯＳ−Ａの割込みディスクリプタテーブルに登録されているデバッグ例外処理が起動される。
【００３９】
そして、起動されたデバッグ例外処理の中で、前記デバッグ例外発生時にＣＰＵがスタックに積んだセグメントレジスタ（ＣＳ）およびインストラクションポインタ（ＥＩＰ）の組み合わせで指定される次命令を読み出し、読み出した命令がＯＳ−Ａの走行環境を破壊するような命令群の先頭の命令であるか否かを調べる。
【００４０】
その結果、読み出した命令がＯＳ−Ａの走行環境を破壊するような命令群の先頭の命令である場合には、その命令群に対してＯＳ−Ａの走行環境を破壊しないように代替処理をおこなう。あるいは、いくつかの命令群に対しては代替処理が必要ない場合もあり、そのような場合には、読み出した命令以下の命令群の実行をスキップする。
【００４１】
このように、本実施の形態では、ＯＳ−Ｂの初期化処理をトレースモードで実行することによって各命令を実行するごとにデバッグ例外を発生させ、デバッグ例外処理内で次に実行する命令を調べる。そして、次に実行する命令がＯＳ−Ａの走行環境を破壊するような命令群の先頭の命令である場合には、その命令群を代替処理に置き換えることによって、ＯＳ−Ｂがどのようなオペレーティングシステムであっても、ＯＳ−Ａの走行環境を破壊することなくＯＳ−Ｂを起動することができる。
【００４２】
次に、本実施の形態に係るオペレーティングシステムの構成について説明する。図２は、本実施の形態に係るオペレーティングシステムの構成を示す機能構成図である。同図に示すように、このオペレーティングシステム２００は、割込み振分処理部２１０と、デバッグ例外処理部２２０と、割込みディスクリプタテーブル２３０と、スタック２４０とを有する。
【００４３】
割込み振分処理部２１０は、ＣＰＵに割込みが発生した場合に、割込みディスクリプタテーブル２３０を用いて、割込み要因に対応した割込み処理をおこなう処理部に制御を渡す処理部である。
【００４４】
デバッグ例外処理部２２０は、デバッグ例外の割込みを処理する処理部であり、ＣＰＵをトレースモードで走行すると、各命令を実行するたびにデバッグ例外が発生し、割込み振分処理部２１０によって起動される。このデバッグ例外処理部２２０は、次に実行される命令を先読みし、先読みした命令が特定の命令群の先頭の命令であるか否かを調べ、特定の命令群の先頭の命令である場合には、その命令群の代替処理をおこなう。
【００４５】
このように、このデバッグ例外処理部２２０が次に実行される命令を調べ、次に実行される命令が特定の命令群の先頭の命令である場合に代替処理をおこなうことによって、オペレーティングシステム２００の走行環境を破壊する命令群の実行を防ぐことができる。
【００４６】
割込みディスクリプタテーブル２３０は、割込み番号とその割込みを処理する処理ルーチンのアドレスを対応させて記憶したテーブルであり、割込み番号の若い順に、テーブル内のエントリが作られている。この割込みディスクリプタテーブル２３０のアドレスはＣＰＵ内の割込みディスクリプタテーブルレジスタ（ＩＤＴＲ）に格納されている。
【００４７】
スタック２４０は、割込み発生時のオペレーティングシステム２００の走行状態を保存するためにレジスタなどの値を一時的に保存する記憶部である。このスタック２４０に積まれるレジスタには、ＣＰＵによって自動的に値が積まれるレジスタとデバッグ例外処理部２２０によって値が積まれるレジスタとがある。
【００４８】
図３は、割込み発生時にＣＰＵによって自動的にスタック２４０に値が積まれるレジスタおよびデバッグ例外処理部２２０によってスタック２４０に値が積まれるレジスタなどを示す図である。
【００４９】
同図に示すように、割込みが発生すると、ＣＰＵは、セグメントレジスタ（ＳＳ）、スタックポインタ（ＥＳＰ）、フラグレジスタ（ＥＦＬＡＧＳ）、セグメントレジスタ（ＣＳ）およびインストラクションポインタ（ＥＩＰ）の値をスタック２４０に積む。
【００５０】
ここで、スタック２４０に格納されたセグメントレジスタ（ＣＳ）とインストラクションポインタ（ＥＩＰ）は、ＣＰＵが次に実行する命令を格納したメモリのアドレスを指す値であり、これらの値から、デバッグ例外処理部２２０は、ＣＰＵが次に実行する命令を先読みすることができる。
【００５１】
また、デバッグ例外処理部２２０は、セグメントレジスタ（ＤＳ）、汎用レジスタ（ＥＡＸ〜ＥＤＸ、ＥＤＩ、ＥＳＩ）、ベースポインタ（ＥＢＰ）の値やデバッグ例外処理本体関数（ｄｏ＿ｄｅｂｕｇ）の引数などをスタック２４０に積む。
【００５２】
次に、図２に示したデバッグ例外処理部２２０の処理手順について説明する。図４は、図２に示したデバッグ例外処理部２２０の処理手順を示すフローチャートである。
【００５３】
同図に示すように、このデバッグ例外処理部２２０は、割込み振分処理部２１０によって起動されると、割込みを禁止し（ステップＳ４０１）、走行状態を保存するために必要なレジスタのうちＣＰＵが保存していないレジスタや引数などをスタック２４０に積む（ステップＳ４０２）。
【００５４】
そして、ＣＰＵがスタック２４０に格納したセグメントレジスタ（ＣＳ）の値とインストラクションポインタ（ＥＩＰ）の値を取り出す（ステップＳ４０３）。ここで、これらのセグメントレジスタ（ＣＳ）の値とインストラクションポインタ（ＥＩＰ）の値の取り出しは、スタック２４０に対してＰＯＰ命令を実行しておこなうが、ＰＯＰ命令と同じ回数分、かつＰＯＰ命令で取り出した順番と逆の順番でＰＵＳＨ命令を実行することで、ステップＳ４０３実行前の状態に、スタック２４０を戻すことができる。
【００５５】
そして、スタック２４０から取り出したセグメントレジスタ（ＣＳ）の値およびインストラクションポインタ（ＥＩＰ）の値を用いてＣＰＵが次に実行する命令を取得し（ステップＳ４０４）、取得した命令が特定の命令群の先頭の命令であるか否かを調べる（ステップＳ４０５）。
【００５６】
ここで、先頭の命令だけでは特定の命令群の先頭であるか否かが判定できない場合には、順次、次の命令を調べることによって特定の命令群であるか否かを判定する。すなわち、このデバッグ例外処理部２２０は、代替処理が必要な特定の命令群を保持し、ＣＰＵが実行しようとする命令群とのマッチングをとることによって特定の命令群であるか否かの判定をおこなう。
【００５７】
そして、特定の命令群である場合には、その特定の命令群に対応する代替処理をおこなう（ステップＳ４０６）。ここで、代替処理としては、おこなうべき処理が何もない場合もある。そして、代替処理した特定の命令群をスキップし（ステップＳ４０７）、ステップＳ４０４に戻って次の命令を取得し、取得した命令が新たな特定の命令群の始まりであるか否かを調べる。
【００５８】
一方、取得した命令が特定の命令群の先頭の命令でない場合には、スタックに積んだレジスタの値を元に戻すなどの復帰処理をおこない（ステップＳ４０９）、割込み禁止を解除する（ステップＳ４１０）。
【００５９】
また、いくつかの特定の命令群の処理後、特定の命令群の先頭でない命令を取得した場合には、代替処理をおこなった命令群をＣＰＵにスキップさせるために、スタック２４０に格納されたセグメントレジスタ（ＣＳ）の値とインストラクションポインタ（ＥＩＰ）の値を次にＣＰＵに実行させたい命令のアドレスに書き換え（ステップＳ４０８）、その後で復帰処理をおこなう（ステップＳ４０９）。
【００６０】
このように、ＣＰＵの走行モードをトレースモードに設定し、各命令を実行するごとにデバッグ例外を発生させることによって、次にＣＰＵによって実行される命令が特定の命令群の先頭の命令である場合に、デバッグ例外処理部２２０がその特定の命令群に対して代替処理をおこなうことができる。
【００６１】
したがって、他のオペレーティングシステムの初期化処理をトレースモードで実行することによって、初期化処理中の特定の命令群を代替処理することができ、起動済のオペレーティングシステムの走行環境を破壊することなく他のオペレーティングシステムを起動することができる。
【００６２】
次に、代替処理の一例として、特定の命令群がメモリマップの取得をおこなう命令群である場合の代替処理について説明する。また、メモリマップとは、物理メモリ領域のどの部分がオペレーティングシステムで使用可能であるかを示す情報であり、オペレーティングシステムの初期化処理でおこなわれ、このメモリマップの情報に基づいて、オペレーティングシステムのメモリ管理機能が構成される。図５に、メモリマップのデータ構造の一例を示す。
【００６３】
同図に示すように、メモリマップは、複数のエントリから構成され、各エントリは物理メモリの部分領域を示している。また、各エントリは、ベースアドレスの低３２ビットを示す４バイト、ベースアドレスの高３２ビットを示す４バイト、領域の大きさの低３２ビットを示す４バイト、領域の大きさの高３２ビットを示す４バイトおよびオペレーティングシステムがその領域を使用可能か否かを示すメモリタイプの４バイトの計２０バイトの大きさを有する。
【００６４】
ここで、メモリタイプが「１」である場合には、オペレーティングシステムはその領域を使用することができ、メモリタイプが「１」以外である場合には、オペレーティングシステムはその領域を使用することができない。
【００６５】
たとえば、あるエントリのベースアドレスの低３２ビットが「０ｘ００１０００００」であり、ベースアドレスの高３２ビットが「０ｘ００００００００」であり、領域の大きさの低３２ビットが「０ｘ０５ｆ０００００」であり、領域の大きさの高３２ビットが「０ｘ００００００００」であり、メモリタイプが「０ｘ１」である場合には、先頭アドレスが「０ｘ１０００００」から「０ｘ５ｆ０００００」分の物理メモリ領域をオペレーティングシステムが使用することができる。
【００６６】
また、オペレーティングシステムが使用できない領域としては、ＡＣＰＩ（Ａｄｖａｎｃｅｄ  Ｃｏｎｆｉｇｕｒａｔｉｏｎ  ａｎｄ  Ｐｏｗｅｒ  Ｉｎｔｅｒｆａｃｅ：電源管理の仕様）が使用する領域などがあり、たとえばメモリタイプの値は「４」である。
【００６７】
オペレーティングシステムは、初期化処理時に、このメモリマップに基づいて物理メモリをどのように利用するか、オペレーティングシステムのメモリ管理機能部で構成するため、このオペレーティングシステムの初期化処理内でメモリマップを書き換えることによって、オペレーティングシステムが使用する物理メモリ領域を制限することができる。
【００６８】
たとえば、図１において、ＯＳ−Ａが既に起動している状態でＯＳ−Ｂの初期化をおこなう場合、ＯＳ−Ｂが使用可能な物理メモリ情報を得るために、ＯＳ−Ｂの初期化処理の中でＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）からメモリマップ取得をおこなうが、ここで得られるメモリマップは、実装している物理メモリ全体を見てＢＩＯＳがオペレーティングシステムに使用可能か否かの物理メモリ情報であり、つまり、ＯＳ−Ａの使用している物理メモリ領域もＯＳ−Ｂが使用可能な物理メモリ領域であると示す内容の物理メモリ情報である。したがって、このままではＯＳ−ＡがＯＳ−Ｂの使用している物理メモリを破壊してしまうので、ＯＳ−Ａの使用している物理メモリ領域はＯＳ−Ｂが使用不可能な領域であるとする物理メモリ情報を、ＯＳ−Ｂに認識させる必要がある。すなわち、ＯＳ−ＢがＢＩＯＳから取得したメモリマップを、ＯＳ−Ａが使用している物理メモリ領域を使用不可能な領域とする内容を書き加える必要がある。
【００６９】
図６は、ＯＳ−Ｂの初期化処理として実行されるメモリマップ取得命令群に対してデバッグ例外処理部２２０がおこなう代替処理の処理手順を示すフローチャートである。なお、この代替処理の処理手順は、図４に示したステップＳ４０５の代替処理がメモリマップ取得命令群に対しておこなう処理である。
【００７０】
同図に示すように、デバッグ例外処理部２２０は、ＢＩＯＳに対して、メモリマップ情報取得を依頼する（ステップＳ６０１）。すると、ＢＩＯＳがメモリマップを物理メモリ上に出力する（ステップＳ６０２）。
【００７１】
そして、デバッグ例外処理部２２０が、ＢＩＯＳが物理メモリ上に出力したメモリマップを書き換える（ステップＳ６０３）。このようにして、デバッグ例外処理部２２０は、ＯＳ−Ａが使用している物理メモリ領域をＯＳ−Ｂが使用できないようにすることができる。
【００７２】
このように、デバッグ例外処理部２２０が、ＯＳ−Ｂの初期化処理として実行されるメモリマップ取得命令群に対してＢＩＯＳが出力したメモリマップを書き換えることによって、ＯＳ−Ｂが使用できる物理メモリ領域を制限することができる。
【００７３】
また、ここでは、メモリマップ取得命令群に対してデバッグ例外処理部２２０が代替処理をおこなうこととしたが、メモリマップ取得命令群の一部をそのまま実行し、デバッグ例外処理部２２０が実行を引き継いで代替処理をおこなうこともできる。あるいは、メモリマップ取得命令群の全部をそのまま実行し、実行直後にデバッグ例外処理部２２０がメモリマップを書き換えることもできる。
【００７４】
次に、本実施の形態に係るオペレーティングシステム２００を実行するコンピュータについて説明する。図７は、本実施の形態に係るオペレーティングシステム２００を実行するコンピュータを示す図である。
【００７５】
同図に示すように、このコンピュータ７００は、オペレーティングシステム２００などのプログラムを実行するＣＰＵ７１０と、キーボードやマウスなどの入力装置７２０と、各種データを記憶するＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）７３０と、実行するプログラムや演算の一時結果などを記憶する物理メモリ（ＲＡＭ：Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）７４０と、記録媒体８００からプログラムを読み取る読取装置７５０と、ディスプレイやプリンタなどの出力装置７６０と、装置各部を接続するバス７７０とから構成される。
【００７６】
また、ＣＰＵ７１０は、読取装置７５０を経由して記録媒体８００に記録されているオペレーティングシステム２００などのプログラムを物理メモリ７４０に読み込んで実行する。なお、記録媒体８００としては、光ディスク、フレキシブルディスク、ハードディスクなどが挙げられる。
【００７７】
上述してきたように、本実施の形態では、ＯＳ−Ｂの初期化処理を実行する前にＣＰＵの走行モードをトレースモードに設定し、各命令を実行するごとにデバッグ例外を発生させ、デバッグ例外処理部２２０が次の命令が特定の命令群の先頭の命令であるか否かを調べ、次の命令が特定の命令群の先頭の命令である場合には、その特定の命令群を実行する代わりに代替処理をおこなうこととしたので、ＯＳ−Ａの走行環境を破壊することなくＯＳ−Ｂを起動することができる。
【００７８】
なお、本実施の形態では、特定の命令群の先頭の命令およびそれに続く命令を用いて代替処理が必要な命令群であるか否かを判定する場合について説明したが、本発明はこれに限定されるものではなく、特定の命令群の最後の命令を用いて代替処理が必要な命令群であるか否かを判定する場合にも、同様に適用することができる。
【００７９】
また、本実施の形態では、特定の命令群に対して代替処理または飛び越し処理をおこなう場合について説明したが、本発明はこれに限定されるものではなく、特定の命令に対しても代替処理または飛び越し処理をおこなう場合にも、同様に適用することができる。たとえば、ＬＡＮカードの初期化命令（Ｒｅｓｅｔ命令など）は、２回以上おこなわせたくない命令であり、飛び越し処理が必要な命令である。
【００８０】
また、本実施の形態では、ＣＰＵにＰｅｎｔｉｕｍ（Ｒ）を用いる場合について説明したが、本発明はこれに限定されるものではなく、他のＣＰＵを用いる特場合にも、同様に適用することができる。
【００８１】
また、本実施の形態では、ＯＳ−Ｂの初期化処理を実行する前に、１命令を実行するごとにデバッグ例外を発生するトレースモード（シングル・ステップ・モード）に設定する場合について説明したが、本発明はこれに限定されるものではなく、たとえばＯＳ−Ｂの初期化処理中の所定の場所にブレークポイントを設定し、設定したブレークポイントでデバッグ例外を発生させる種類のトレースモードにおいて、前記設定したブレークポイントで発生したデバッグ例外によってデバッグ例外処理部２２０を起動する場合にも、同様に適用することができる。
【００８２】
また、ブレークポイントでデバッグ例外を発生させてデバッグ例外処理部２２０を起動し、デバッグ例外処理部２２０の処理終了直後に、１命令を実行するごとにデバッグ例外を発生するトレースモード（シングル・ステップ・モード）に設定することもできる。
【００８３】
【発明の効果】
以上説明したように、請求項１の発明によれば、起動されるオペレーティングシステムの処理として次に実行される命令が特定の命令群に属する命令であるか否かの判定をおこない、特定の命令群に属する命令であると判定をおこなった場合に、特定の命令群に対して代替処理をおこなう代替処理工程おこなうこととしたので、起動されるオペレーティングシステムの改造を不要とし、もって開発期間の短縮および開発コストの低減を図ることができるという効果を奏する。
【００８４】
また、請求項２の発明によれば、コンピュータを構成する中央演算装置のトレースモードにおいて各命令が実行される際に発生する割込みの処理の中で判定をおこなうこととしたので、起動されるオペレーティングシステムの処理から自動的に制御を受け取って代替処理をおこなうことができるという効果を奏する。
【００８５】
また、請求項３の発明によれば、起動されるオペレーティングシステムの命令アドレスに設定したブレークポイントにおいて発生する割込みの処理の中で判定をおこなうこととしたので、起動されるオペレーティングシステムの処理から自動的に制御を受け取って代替処理をおこなうことができるという効果を奏する。
【００８６】
また、請求項４の発明によれば、割込みの処理を終了する際に、中央演算装置をトレースモードに設定することとしたので、起動されるオペレーティングシステムの処理として引き続き実行される命令毎に割込みを発生させ、判定をおこなうことができるという効果を奏する。
【００８７】
また、請求項５の発明によれば、割込みが発生した際に中央演算装置がスタックに積んだ次命令アドレスを用いて次に実行される命令を取り出し、取り出した命令に対して判定をおこなうこととしたので、次に実行される命令の判定をおこなうことができるという効果を奏する。
【００８８】
また、請求項６の発明によれば、特定の命令群が連続している場合に、連続する特定の命令群の最後の命令に続く命令のアドレスに中央演算装置がスタックに積んだ次命令アドレスを書き換えることとしたので、特定の命令群が連続している場合にも代替処理をおこなうことができるという効果を奏する。
【００８９】
また、請求項７の発明によれば、特定の命令群の最初のいくつかの命令または最後のいくつかの命令を用いて判定をおこなうこととしたので、特定の命令群であるか否かを効率良く判定することができるという効果を奏する。
【００９０】
また、請求項８の発明によれば、いくつかの特定の命令群に対しては代替処理をおこなうことなくスキップすることとしたので、実行不要な命令群をスキップすることができるという効果を奏する。
【００９１】
また、請求項９の発明によれば、次に実行される命令がメモリマップ取得をおこなう命令群の最初の命令または最初のいくつかの命令である場合に、次に実行される命令を特定の命令群に属する命令であると判定をおこない、メモリマップ情報を書き換える処理を含む代替処理をおこなうこととしたので、起動されるオペレーティングシステムが使用できる物理メモリ領域を制限することができるという効果を奏する。
【００９２】
また、請求項１０の発明によれば、次に実行される命令がメモリマップ取得をおこなう命令群の途中の命令あるいは最後の命令あるいは最後のいくつかの命令である場合に、特定の命令群が実行されたと判定し、メモリマップ情報を書き換える処理を含む代替処理をおこなうこととしたので、起動されるオペレーティングシステムが使用できる物理メモリ領域を制限することができるという効果を奏する。
【００９３】
また、請求項１１の発明によれば、上記発明のいずれか一つに記載されたオペレーティングシステム起動方法をコンピュータに実行させるようにしたので、そのプログラムがコンピュータ読み取り可能となり、これによって、上記の発明のいずれか一つの動作をコンピュータによって実行することができるという効果を奏する。
【００９４】
また、請求項１２の発明によれば、起動されるオペレーティングシステムの処理として次に実行される命令が特定の命令群に属する命令であるか否かの判定をおこない、特定の命令群に属する命令であると判定をおこなった場合に、特定の命令群に対して代替処理をおこなうこととしたので、起動されるオペレーティングシステムの改造を不要とし、もって開発期間の短縮および開発コストの低減を図ることができるという効果を奏する。
【図面の簡単な説明】
【図１】本実施の形態に係るオペレーティングシステム起動制御方法による命令群代替処理の概念を説明するための説明図である。
【図２】本実施の形態に係るオペレーティングシステムの構成を示す機能構成図である。
【図３】割込み発生時にＣＰＵによって自動的にスタックに値が積まれるレジスタおよびデバッグ例外処理部によってスタックに値が積まれるレジスタなどを示す図である。
【図４】図２に示したデバッグ例外処理部の処理手順を示すフローチャートである。
【図５】メモリマップのデータ構造の一例を示す図である。
【図６】ＯＳ−Ｂの初期化処理として実行されるメモリマップ取得命令群に対してデバッグ例外処理部がおこなう代替処理の処理手順を示すフローチャートである。
【図７】本実施の形態に係るオペレーティングシステムを実行するコンピュータを示す図である。
【符号の説明】
２００  オペレーティングシステム
２１０  割込み振分処理部
２２０  デバッグ例外処理部
２３０  割込みディスクリプタテーブル
２４０  スタック
７００  コンピュータ
７１０  ＣＰＵ
７２０  入力装置
７３０  ＲＯＭ
７４０  ＲＡＭ
７５０  読取装置
７６０  出力装置
７７０  バス
８００  記録媒体
【図１】
2004287618.tif 000003
【図２】
2004287618.tif 000004
【図３】
2004287618.tif 000005
【図４】
2004287618.tif 000006
【図５】
2004287618.tif 000007
【図６】
2004287618.tif 000008
【図７】
2004287618.tif 000009