(57)【要約】【課題】計算機中に論理的な区画を設け、各区画に独立してゲストＯＳを稼動させる論理分割方式において、ＯＳ種別によらずユーザレベルでの実行の際に特権命令例外を発生させない特権命令のエミュレーション漏れを防ぐ。【解決手段】命令読み込み時のキャッシュミスに伴う命令リード要求に対する応答データをチップセット１３０によりデコードするか、あるいは命令パターンレジスタ５０６と比較することにより、ユーザレベルでの命令実行の際に特権命令例外を発生させない特権命令を検出し、ユーザレベルでの命令実行により特権命令例外を生じる特権命令、あるいはエミュレーションルーチンへの分岐命令に置き換えることにより、ホストでのエミュレーションを可能とする。【選択図】  図１
2005056019.tif 000002
【特許請求の範囲】
【請求項１】
主記憶装置と、該主記憶装置の記憶内容の一部を保持するキャッシュメモリを備えたＣＰＵと、該ＣＰＵと前記主記憶装置を接続し当該主記憶装置から読み出した命令のデコードを行う機能を備えたチップセットとをハードウェア資源とし、前記ハードウェア資源はファームウェアによって、独立したオペレーティングシステムで動作する複数の論理的な区画に分割され、該区画は命令の実行に際して実行すべき命令が前記キャッシュメモリに存在しない場合は前記チップセットを介して前記主記憶装置から命令を読み出し、前記チップセットは読み出した命令のデコードを行い、該命令が特権命令であり例外を発生しないと判断した場合は、該命令を例外を発生させる命令に置き換えて前記区画に送信することを特徴とする情報処理装置。
【請求項２】
前記区画において特権命令例外が発生した場合は、該命令のエミュレーションを前記ファームウェアが行うことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記チップセットは、前記主記憶装置から読み出した命令が特権命令であり例外を発生しないと判断した場合は、該命令のエミュレーションを行うルーチンへの分岐命令と置き換えて前記区画に送信することを特徴とする請求項１記載の情報処理装置。
【請求項４】
主記憶装置と、該主記憶装置の記憶内容の一部を保持するキャッシュメモリを備えたＣＰＵと、該ＣＰＵと前記主記憶装置を接続し、特権命令例外を起こさない可能性のある特権命令を保持する第１のレジスタと、変換後の命令を保持する第２のレジスタとを備えるチップセットとをハードウェア資源とし、前記ハードウェア資源はファームウェアによって、独立したオペレーティングシステムで動作する複数の論理的な区画に分割され、該区画は命令の実行に際して実行すべき命令が前記キャッシュメモリに存在しない場合は前記チップセットを介して前記主記憶装置から命令を読み出し、前記チップセットは読み出した命令を前記第１のレジスタに保持されている命令と比較し、一致する場合は前記第２のレジスタに保持されている命令に置き換えて前記区画に送信することを特徴とする情報処理装置。
【請求項５】
前記区画において特権命令例外が発生した場合は、該命令のエミュレーションを前記ファームウェアが行うことを特徴とする請求項４記載の情報処理装置。
【請求項６】
前記第２のレジスタは、変換後の命令として特権例外を起こす特権命令を保持することを特徴とする請求項４記載の情報処理装置。
【請求項７】
前記第２のレジスタは、変換後の命令として前記第１のレジスタに保持された特権命令のエミュレーションを行うルーチンへの分岐命令を保持することを特徴とする請求項４記載の情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、計算機に複数の論理的な区画を生成する技術に関係し、各論理区画において独立に稼動するオペレーティングシステムを正常に稼動させるための技術に関係する。
【０００２】
【従来の技術】
近年の計算機性能の向上により、従来複数のサーバに分散していた処理を一つのサーバに集約しコストを削減する動きが多く見られる。このような集約に際して有効となる手段が、一つのサーバ上で複数のオペレーティングシステムを稼動させる区画方式である。区画方式は、従来のサーバを一つの区画に対応させることによって、サーバ移行をスムーズに行うことを可能とすることができる。
【０００３】
上記のニーズに対し、従来の計算機では、計算機中に区画を物理的に設ける物理分割方式によって、複数のオペレーティングシステムを稼動させていた。物理分割方式では、ＣＰＵ性能やメモリ容量等の計算機資源を物理的なＣＰＵやメモリ毎にしか割当できない。ＣＰＵやメモリの高性能化・大容量化が急速に進展する状況においては、物理区画に従来の１つのサーバを割当てると性能・容量的に余剰を生じるため無駄が多かった。
【０００４】
そこで、物理的なＣＰＵやメモリを仮想化し、計算機中に任意の数の論理的な区画を生成する論理分割方式が注目を集めている。論理分割方式はハイパバイザと呼ばれるファームウェアによって実現される。論理分割方式において稼動するオペレーティングシステムをゲストと呼び、ハイパバイザをホストと呼ぶ。各ゲストは、ユーザレベルで実行され、ホストのみが特権命令の実行を担当する。各ゲストはオペレーティングシステムであるため、通常は特権命令の実行も行うが、プロセッサの実行モードがユーザレベルであるため特権命令例外を発生させ、該例外をホストがトラップすることによって、各ゲストに応じた特権命令のエミュレーションを実施する。このエミュレーションのためにホスト側では、特権命令が使用するレジスタ等をホスト側のデータ領域に設定し、特権命令を実行した論理区画毎に正しくエミュレーションデータをアクセスするようにしている。
【０００５】
しかし、論理分割方式のゲストによる特権命令実行時のホストによるトラップにおいて、一部の特権命令はユーザレベルで実行可能なケースがあるため、全ての特権命令をトラップできないという問題がある。この問題は、ホスト側で管理しているデータと物理的にＣＰＵ中に存在するレジスタの値が不一致を生じるため、このような特権命令を実行した後では正しくゲストを稼動させられない。
【０００６】
この問題に対し、特許文献１においては、実行プログラム中に処理装置が実行機能を提供しない非実装命令が含まれていても実行可能な命令に展開しながらキャッシュロードする手法が提案されている。
【０００７】
【特許文献１】
特開平５−７３３０１号公報（第２頁、図１）
【０００８】
【発明が解決しようとする課題】
上記従来技術では、プロセッサが実行機能を提供しない非実装命令を実行可能な命令に展開する手法であり、本発明が対象とする論理分割方式における特権命令はプロセッサに実装されている命令であるため上記従来技術では機能しないという問題がある。また、プロセッサに実装されていない命令が、実装されている命令の１命令に相当しない場合、複数の命令でエミュレーションする必要があり、命令列の配置場所（アドレス）がずれるという問題がある。
【０００９】
本発明の目的は、上記の従来の問題を踏まえて、プロセッサに実装されている命令であり、ユーザレベルで実行される場合に特権命令例外を発生させない特権命令に関して、ホスト側に制御を移すことである。
【００１０】
【課題を解決するための手段】
上記目的を達成するために本発明の教法処理装置では、プロセッサの命令キャッシュミス時に生じる命令読み込みを契機として、主記憶上の命令データを読み出し、プロセッサの命令キャッシュへと格納される。ＣＰＵと主記憶を接続するチップセットにおいて、前記の命令キャッシュ格納の際に、命令データをデコードあるいはチップセット内に設置されるレジスタとの比較を行い、該命令データ中にユーザレベルで実行され、かつ、特権命令例外を起こさない特権命令を、ユーザレベルの実行で特権命令例外を起こす特権命令に置き換える。これにより、プロセッサが命令キャッシュ中の前記の置き換えた特権命令実行時に例外が発生し、制御がゲストからホストに移行させることが可能となる。
【００１１】
なお、上記の特権命令の置き換えについては、ユーザレベル実行で特権命令例外に置き換えるのではなく、ホストが管理する主記憶領域に配置されるエミュレータへの分岐命令に置き換えてもよい。
【００１２】
【発明の実施の形態】
以下では、図面を用いて本発明の実施例を示す。
【００１３】
〈実施例１〉（特権命令の置き換え）
図１に本発明で想定する計算機システムの典型的な構成例を示す。図１ではＣＰＵ‐チップセットインタフェース１２０に接続されるＣＰＵを１０１，１０２の２つとしているが、１以上のＣＰＵ数であれば幾つでも構わない。
【００１４】
また、図１ではチップセット１３０が１つの構成を示している。図１の構成をノードと呼び、複数のノードから構成される計算機システムであっても良い。チップセット１３０は図１に示すとおりＣＰＵ１０１，１０２と主記憶装置１４０およびＩＯデバイスインタフェース１５０を接続する機能を持ち、ＣＰＵ‐チップセットインタフェース１２０、あるいはＩＯデバイスインタフェース１５０を介して主記憶装置１４０に対するアクセス要求を受付、該要求に含まれるアドレスとアクセス種別に応じて主記憶装置１４０の読み出し、あるいは書き込みを行う。なお、本実施例ではＩＯデバイスインタフェース１５０に接続される起動ディスクやＢＩＯＳ（Ｂａｓｉｃ  Ｉ／Ｏ  Ｓｙｓｔｅｍ）等のＩＯデバイスは本発明に影響しないため、図１には明記していない。
【００１５】
図１中のＣＰＵ１０１，１０２は、１１１，１１２に示すようにそれぞれのＣＰＵ毎にキャッシュメモリを備えており、ＣＰＵ１０１，１０２での命令実行に際してデータ、あるいは命令自体がキャッシュメモリ１１１，１１２に存在しない場合、キャッシュミスとしてチップセット１３０へ主記憶読み出し要求を行う。主記憶読み出し要求には、ＣＰＵ１０１，１０２で必要とされるアドレスと、データ読み出しか命令読み出しのいずれの種類かを示すフィールドが用意されている。
【００１６】
図２は、本発明の一実施例による論理分割方式を示したものである。ハードウェア２００は図１で示される計算機システムを表している。ファームウェア２０１は、ハードウェア２００上で動作するプログラムであって、ハードウェア２００を仮想化し論理的な区画に分割されたハードウェアとして、ゲストＯＳ２１１，２１２に見せかける。なお、図２のゲストＯＳ２１１，２１２は２つの例を示しているが、ゲストＯＳ数は幾つであっても構わない。
【００１７】
ゲストＯＳとは、通常のＷｉｎｄｏｗｓ（登録商標）やＬｉｎｕｘやＨＰＵＸ等のＯＳそのものを指す。ここで、通常使用時のＯＳはハードウェア資源全ての管理を行うが、本実施例ではファームウェアにより提供される論理的に区画分割された仮想的なハードウェアの管理を行うため、通常ＯＳと区別するためにゲストＯＳと呼んでいる。また、通常ＯＳは特権モードで動作するが、論理分割方式ではユーザモードでゲストＯＳを走行させる。
【００１８】
図２中のファームウェア２０１は、特権モードで実行されるものであって、ファームウェア２０１が使用するハードウェア中の主記憶装置１４０の一部にシャドウデータ２２０を保持している。シャドウデータとは、ゲストＯＳ２１１，２１２が使用するデータのことである。ゲストＯＳ２１１，２１２は同一のＣＰＵを時分割で利用するため、ゲストＯＳ２１１，２１２を切り替える際に、切り替え前のＣＰＵ内部のレジスタ群の値をコンテクストとしてシャドウ領域に保存し、切り替え後のゲストＯＳ２１１，２１２のコンテクストをＣＰＵにセットし、実行を再開する。
【００１９】
さらに、ゲストＯＳ２１１，２１２による特権命令実行時には、該特権命令が使用するレジスタとしてＣＰＵ内部の物理的なレジスタではなく、シャドウデータ２２０に用意されるデータを用いる。ゲストＯＳ２１１，２１２は前述の通りユーザモードで実行される。このため、ゲストＯＳ２１１，２１２中の特権命令が実行されると特権命令例外によってファームウェア２０１に制御が移行し、この制御の移行によってシャドウデータ２２０を用いて該特権命令のエミュレーションが実施される。
【００２０】
しかし、ゲストＯＳ２１１，２１２中の特権命令の中には、ユーザレベルで実行しても特権命令例外を起こさない命令が存在するため、上記のシャドウデータ２２０とＣＰＵ内の物理的な資源との間で不一致が生じ、エミュレーションが正しく行われない場合がある。
【００２１】
本実施例では、上記のシャドウデータ２２０とＣＰＵ内のレジスタの値との不一致を避け、正しくエミュレーションを実行できるようにする。このため、本実施例ではチップセット１３０に図３に示すような機構を設けている。
【００２２】
図３では図１に示したＣＰＵ‐チップセットインタフェース１２０をより詳細にアドレスインタフェース１２１とデータインタフェース１２２に分離し、以降の説明を行う。アドレスインタフェース１２１はＣＰＵ１０１，１０２におけるキャッシュミス等による主記憶読み出し時に、該キャッシュミスのアドレスをチップセット１３０に伝達するのに使用し、データインタフェース１２２はＣＰＵ１０１，１０２からのライトデータをチップセット１３０が受け取る、あるいはキャッシュミスによる主記憶読み出し時のデータをＣＰＵ１０１，１０２に伝達するのに使用される。
【００２３】
チップセット１３０はアドレスインタフェース１２１を介して、命令リード時のキャッシュミスに伴う主記憶読み出し要求（以下、命令リード要求）をＣＰＵインタフェース部３１０が受信する。ＣＰＵインタフェース部３１０において、該命令リード要求のデコードを実施し、命令リード要求の宛先が主記憶である場合、メモリインタフェース部３２０へ転送する。メモリインタフェース部３２０では、受け付けた命令リード要求のアドレスを基にデコードを行い、アクセスする対象のメモリアドレスを算出し、該メモリアドレスによって主記憶からの読み出しを行う。
【００２４】
主記憶はチップセット１３０からの読み出し要求とアドレスに基づいてメモリからの読み出しを実施し、データをチップセット１３０に応答する。チップセット１３０では、命令リード要求に対する応答データのデコードを命令デコード機構３３０で実施する。
【００２５】
命令デコード機構３３０は、命令リードによって主記憶から読み出されたデータを、ＣＰＵ１０１，１０２が解釈し実行する命令としてデコードを行い、ユーザレベルで実行しても特権例外を発生させない特権命令を含むか否かの判定を行う。前記判定に基づいてメモリインタフェース部３２０では、ユーザレベル実行時に例外を発生させない特権命令があれば、該命令をユーザレベルで実行した場合特権命令例外を発生させる命令に置き換える。
【００２６】
例えばＣＰＵとしてＩｎｔｅｌ社のＩＰＦ（Ｉｔａｎｉｕｍ  Ｐｒｏｃｅｓｓｏｒ  Ｆａｍｉｌｙ）を用いた場合では、上記のユーザレベルで実行しても特権例外を発生させない特権命令としては次に示す命令が挙げられる。ＩＰＦにおいてユーザレベルで特権命令例外を起こさない命令として挙げられるのは（１）  ｃｏｖｅｒ命令、（２）  ｅｐｃ命令、（３）ｐｒｏｂｅ命令、（４）  ＰＭＤレジスタへのアクセス等である。
【００２７】
図４に命令デコード機構３３０の処理手順を示す。主記憶への読み出し要求が命令リード要求の場合（ステップ４００）、上記の命令が主記憶から読み出したデータに含まれているか判断し（ステップ４０１）、含まれている場合にはｂｒｅａｋ命令等のユーザレベル実行時に例外を発生させる特権命令に置き換えて、ＣＰＵインタフェース部３１０に転送する（ステップ４０２）。ステップ４００において、読み出し要求が命令読み出しでない場合は、読み出したデータをそのままＣＰＵインタフェース部３１０に転送する（ステップ４０３）。
【００２８】
これによって、全ての特権命令のエミュレーションをファームウェア（ホスト）で実施可能となるため、如何なるＯＳでもゲストＯＳとしてサポートが可能となる。
【００２９】
〈実施例２〉（エミュレータへの分岐）
本実施例は実施例１の変形例であり、図３の命令デコード機構３３０を次のように変更した実施の形態例を示す。
【００３０】
実施例１では、命令デコード機構３３０は、チップセット１３０に接続されるＣＰＵ毎の実装方法によってユーザレベルでの実行の際に特権例外を起こさない特権命令の動作が変更される、また逆に従来のＣＰＵではユーザレベルでの実行で特権例外を起こしていた特権命令が次世代ＣＰＵでは特権例外を起こさない可能性がある。
【００３１】
実施例１で示した命令デコード機構３３０は、主記憶から読み出した命令データをデコード回路でデコードして判定を実施するため、上記の状況に対して対処するためにはデコード回路を変更する必要がある。そこで本実施例では、実施例１のデコード回路によるデコードの代わりに、置き換えるべき命令パターンを保持すためのレジスタとの比較により特権命令例外を起こす命令か否かを判定する手段を示す。なお、該レジスタはプログラムによって内容を変更可能とすることによって、ＣＰＵの仕様変更時にも対処可能となる。
【００３２】
図５に本実施例による命令デコード機構を示す。本実施例の命令デコード機構には、特権命令例外を起こさない可能性のある命令パターンを保持する複数の命令パターンレジスタ５０６と、該命令パターンと一致する命令を置き換える値を保持する置き換え命令パターンレジスタ５０５を保持している。図５では主記憶から読み出した命令データ５０１を６４Ｂとし、命令は１６Ｂ境界毎に配置されているとする。また、１６Ｂ中に３つの命令が格納されている命令形式５０２であることを示している。
【００３３】
読み出した命令データ５０１は命令パターンレジスタ５０６に保持されている個々の命令と比較され、一致する場合のみ、置き換え命令パターンレジスタ５０５に保持されている命令との置き換えを実施する。また命令形式５０２の命令中にあるテンプレートも命令置き換えに伴い再計算を行う。このようにして命令データ５０１の他の１６Ｂも命令置き換え判定を実施し、ＣＰＵインタフェース部５０４へのデータを生成し、ＣＰＵインタフェース部５０４へ転送する。ＣＰＵインタフェース部５０４ではデータをＣＰＵへと応答する。
【００３４】
なお、本実施例の変形例として、置き換え命令パターンの保持方法について以下の２通りの変形例が考えられる。
（１）  置き換え命令パターンが固定的でレジスタ不要な変形例
例えば、命令パターンレジスタに一致するデータである場合には、該データについてｂｒｅａｋ命令を示すデータと置き換える等である。
（２）  命令パターンレジスタ毎に夫々異なるデータパターンに置き換える変形例命令パターンレジスタ毎に、どのようなデータパターンに置き換えるかを各レジスタに記録する等である。
【００３５】
次に命令パターンレジスタを使った比較方法について説明する。実施例１と同様にＣＰＵから発せられる命令読み出し時のキャッシュミスに基づく命令読み出し要求時に、主記憶から読み出した命令データを、前記の命令パターンレジスタ５０６と比較される。この際、命令データは一定のブロック単位で読み出されるため、命令境界毎に一定長のデータと命令パターンレジスタ５０６の値の比較を行う。
例えば、実施例１と同様にＩｎｔｅｌ社のＩＰＦでは上記のブロックは６４Ｂであり、命令境界は１６Ｂに当たる（図５中の５０１と５０２参照）。また、一定長のデータは前記１６Ｂ内の先頭５ｂｉｔを除いた４１ｂｉｔに当たる（図５中の５０２参照）。
【００３６】
また、前述の命令パターンレジスタ５０６との比較については、命令パターンレジスタ５０６の全ての値と比較は行わない。これは、命令パターンレジスタ５０６のオペランド部分のみや、オペコード部分が特定のパターンのみを扱うことに起因している。したがって、図６に示すように命令パターンレジスタ５０６中で１を有するｂｉｔのみを比較対象とし、０を有するｂｉｔは比較対象としない。
【００３７】
〈実施例３〉
本実施例は実施例１の変形例であり、図３の命令デコード機構３３０とメモリインタフェース部３２０での命令置き換えの内容を以下のようにした実施の形態例を示す。
【００３８】
実施例１では、ユーザモードでの実行時に特権命令例外を起こさない特権命令を、ユーザモード実行時に特権命令例外を起こす特権命令へと置き換えることで、ファームウェアで該例外をトラップしエミュレーションを行うようにしていた。本実施例では、これをファームウェア中のエミュレーションルーチンへの分岐命令に置き換えるようにする。上記のエミュレーションルーチンへの分岐に関する分岐先アドレスは、エミュレーション対象となる命令種別に応じて予めきめられたアドレスを使用する。
【００３９】
なお、本実施例のようにゲストＯＳの命令コード中の特権命令を分岐命令に置き換えた場合、一般にエミュレーションルーチンでは、単一の特権命令の機能を複数の命令で実現するため、該特権命令が使用するレジスタより多くのレジスタを作業用に用いなければならない。ゲストＯＳの実行において、該置き換え対象の特権命令に至るまでの命令実行の過程で未使用レジスタがなければ、上記のエミュレーションルーチンを実現することができない。したがって、本実施例の適用対象は、特権レジスタの値を汎用レジスタに移動する命令のみとする。この限定により、移動先の汎用レジスタを作業用レジスタとして使用可能となる。
【００４０】
本実施例のように特権命令例外を起こさずに、分岐命令によってエミュレーションルーチンの実行をおこなうことによって、プロセッサのモード変更や、命令同期の処理、割り込みハンドラでのステータス退避・回復処理が不要になるためエミュレーションの高速化が可能となる。
【００４１】
〈実施例４〉
本実施例は実施例２の変形例であり、実施例２における命令デコード機構とメモリインタフェース部での命令置き換えの内容を以下のようにした実施の形態例を示す。
【００４２】
実施例２では、ユーザモードでの実行時に特権命令例外を起こさない特権命令を、ユーザモード実行時に特権命令例外を起こす特権命令へと置き換えることで、ファームウェアで該例外をトラップしエミュレーションを行うようにしていた。本実施例では、これをファームウェア中のエミュレーションルーチンへの分岐命令に置き換えるようにする。
【００４３】
図７に本実施例における、命令パターンレジスタを示す。置き換える対象の命令パターン７０１に加えて、該パターンと一致する場合に分岐するエミュレーションルーチンのアドレス７０２を保持している。
【００４４】
命令デコード機構で、該命令パターンレジスタとの比較の結果一致するデータを持つ命令は、該レジスタ中のエミュレーションルーチンのアドレスへの分岐命令と置き換えることにより、前述の命令置き換えを実現する。
【００４５】
なお、適用対象となる特権命令は作業用レジスタの関係から、実施例３と同様に特権レジスタから汎用レジスタへの移動命令のみを対象とする。効果についても実施例３と同様である。
【００４６】
【発明の効果】
ユーザモードでの実行時に特権命令例外を起こさない特権命令を、ユーザモードでの実行時に特権命令例外を起こす特権命令、または、エミュレーションルーチンへの分岐命令と置き換えて特権命令エミュレーションを行うことによって、計算機内に論理的な区画を持ちそれぞれの区画で独立してゲストＯＳを走行させることを可能とする。
【図面の簡単な説明】
【図１】本発明で想定する計算機システムの構成例を示す図である。
【図２】本発明の一実施例による論理分割方式の概要を説明する図である。
【図３】本発明の一実施例によるチップセットの内部構成を示す図である。
【図４】本発明の一実施例による命令デコード機構の処理を示すフローチャートである。
【図５】本発明の他の実施例による命令デコード機構の構成図である。
【図６】本発明の他の実施例による命令パターンレジスタの比較対象を示す図である。
【図７】本発明の他の実施例による命令パターンレジスタの構成を示す図である。
【符号の説明】
１０１，１０２…ＣＰＵ
１１１，１１２…キャッシュメモリ
１２０…ＣＰＵ‐チップセットインタフェース
１２１…アドレスインタフェース
１２２…データインタフェース
１３０…チップセット
１４０…主記憶装置
１５０…ＩＯデバイスインタフェース
２００…ハードウェア
２０１…ファームウェア
２１１，２１２…ゲストＯＳ
３１０…ＣＰＵインタフェース部
３２０…メモリインタフェース部
３３０…命令デコード機構
５０１…主記憶から読み出したデータ
５０２…ＩＰＦでの命令形式
５０３…置き換え判定後の命令
５０４…ＣＰＵインタフェース部へのデータ
５０５…置き換え命令パターンレジスタ
５０６…命令パターンレジスタ
５０７…テンプレート再計算回路
７０１…命令パターン
７０２…分岐先アドレス。
【図１】
2005056019.tif 000003
【図２】
2005056019.tif 000004
【図３】
2005056019.tif 000005
【図４】
2005056019.tif 000006
【図５】
2005056019.tif 000007
【図６】
2005056019.tif 000008
【図７】
2005056019.tif 000009