(57)【要約】【課題】従来の半導体装置は、プログラムの動作に起因して処理能力が低下する。【解決手段】複数の仮想マシンが動作する半導体装置において、複数の仮想マシンの命令により呼び出される第１の特権プログラムと、複数の仮想マシン及び第１の特権プログラムの命令により呼び出される第２の特権プログラムと、命令コードの実行の順序を制御するパイプライン制御部１５と、を備え、パイプライン制御部１５は複数の仮想マシン各々に対し、第１の特権プログラムの呼び出し権限を示す第１フラグと、第２の特権プログラムの呼び出し権限を示す第２フラグを格納したレジスタを備え、パイプライン制御部１５は、前記命令コードのデコード結果と、第１フラグ及び第２フラグの値に基づいて、実行ユニットに演算する命令の処理指示を行う。【選択図】図１
2015228261.tif 000002
【特許請求の範囲】
【請求項１】
複数の仮想マシンが動作する半導体装置において、
前記複数の仮想マシンの命令により呼び出される第１の特権プログラムと、
前記複数の仮想マシン及び前記第１の特権プログラムの命令により呼び出される第２の特権プログラムと、
命令コードの実行の順序を制御するパイプライン制御部と、を備え、
前記パイプライン制御部は前記複数の仮想マシン各々に対し、前記第１の特権プログラムの呼び出し権限を示す第１フラグと、前記第２の特権プログラムの呼び出し権限を示す第２フラグを格納したレジスタを備え、
前記パイプライン制御部は、前記命令コードのデコード結果と、前記第１フラグ及び前記第２フラグの値に基づいて、実行ユニットに演算する命令の処理指示を行う
半導体装置。
【請求項２】
前記パイプライン制御部は、前記第２の特権プログラムを呼び出す前記命令を発行した前記仮想マシンに対応する前記第２フラグが実行権限なしを示す場合には、前記第２の特権プログラムに関する前記命令コードを発行した前記仮想マシンに実行権例外が発生したと判断して、前記第２の特権プログラムに関する前記命令コードを発行した前記仮想マシンに例外処理を行うように指示を行う
請求項１に記載の半導体装置。
【請求項３】
前記パイプライン制御部は、前記第２の特権プログラムを呼び出す前記命令を発行した前記仮想マシンに対応する前記第２フラグが実行権限ありを示し、
前記第１フラグが実行権限ありを示す場合には、動作権限を前記第１の特権プログラムに移行し前記第１の特権プログラムを実行する
請求項１に記載の半導体装置。
【請求項４】
前記パイプライン制御部は、前記第２の特権プログラムを呼び出す前記命令を発行した前記仮想マシンに対応する前記第２フラグが実行権限ありを示し、
前記第１フラグが実行権限なしを示す場合には、前記第２の特権プログラムに関する前記命令を発行した前記仮想マシンに実行権例外が発生したと判断して、前記第２の特権プログラムに関する前記命令コードを発行した前記仮想マシンに例外処理を行うように指示を行う請求項１に記載の半導体装置。
【請求項５】
前記半導体装置は、
前記第２の特権プログラムを実行することで、前記第２の特権プログラムを呼び出した呼び出し元プログラムの指示した要求の正当性を判断し、
前記パイプライン制御部は、
前記呼び出し元プログラムの指示した要求が正当なものである場合に動作権限を前記第１の特権プログラムに移行し前記第１の特権プログラムを実行する
請求項１に記載の半導体装置。
【請求項６】
前記レジスタは、第３フラグを更に有し、前記第３フラグは、前記仮想マシン毎に仮想マシンの動作を有効とするか無効とするかを示すフラグである
請求項１に記載の半導体装置。
【請求項７】
前記レジスタは、第４フラグを更に有し、
前記第４フラグは、仮想マシンにハイパーバイザプログラムのみに操作可能なリソースへのアクセスを許可するか否かを示すフラグである
請求項６に記載の半導体装置。
【請求項８】
前記パイプライン制御部は、更に前記第３フラグ及び前記第４フラグの状態に基づいて実行ユニットに演算する命令の処理指示を行う
請求項７に記載の半導体装置。
【請求項９】
前記第１の特権プログラムの起動時には、前記仮想マシン以外の他の仮想マシンを止め、前記第１の特権プログラムを呼び出す前記命令を発行した前記仮想マシンか実行ユニットを占有してプログラムを実行する
請求項１に記載の半導体装置。
【請求項１０】
前記前記第１の特権プログラムの起動時には、
前記第２の特権プログラムによる処理によって、前記第２の特権プログラムに関する前記命令を発行する前記仮想マシン以外の他の仮想マシンの動作を監視し、
前記パイプライン制御部は、
前記他の仮想マシンの動作を停止可能な状態まで前記第１の特権プログラムに関する前記命令に基づく処理を前記実行ユニットに指示することを待つ
請求項９に記載の半導体装置。
【請求項１１】
前記レジスタは、前記第１の特権プログラム及び第２の特権プログラムのみが書き換え可能なレジスタである
請求項１に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体装置に関し、例えばパイプライン処理により複数のプログラムを並列的に実行可能な半導体装置に関する。
【背景技術】
【０００２】
近年、半導体装置では、複数のプログラムを単一のプロセッサで並列的に実行するマルチスレッドプロセッサが多く提案されている。このようなマルチスレッドプロセッサでは、それぞれが独立した命令流を生成する複数のスレッドを有する。一方、仮想化と呼ばれる１つのハードウェアを複数のハードウェアに見せる技術がある。この仮想化技術は、ＶＭＭ（Virtual Machine Monitor：仮想マシンモニタ）或いはハイパーバイザと呼ばれる管理ソフトウェアがＯＳ（Operating System）とハードウェア（プロセッサやＩＯ）との間に入ることによって実現される。図２０に仮想化技術を適用したシステムの階層構造を示す。図２０に示すように、仮想化技術を適用したシステムは、ハードウェアとゲストＯＳとの間にハイパーバイザプログラムが介在する構成となる。マルチスレッドプロセッサにて仮想マシンを動作させる場合、スレッドを論理的に定義される複数の仮想マシンのいずれかに割り当てる。そして、マルチスレッドプロセッサでは、ハードウェアスレッド上で仮想マシンを実行することにより、仮想マシンの並列実行を実現する。図２１に仮想マシンとスレッドとの対応関係を示す図を示す。図２１に示す例では、仮想マシンＶＭ０〜ＶＭ２にそれぞれ２つのスレッドが割り当てられる。
【０００３】
また、プロセッサ上で実行するプログラムには、アクセスする資源の重要度に応じて特権レベルが設定される。また、ソフトウェアの品質は、開発管理、プログラミング、検証などの複数の要因にて決定される。そして、プロセッサ上で実行するプログラムのうち高い信頼性レベルが要求されるプログラムは、その動作がより詳細に把握できるように厳格な管理の下に開発される。つまり、プログラムの信頼性レベルは、どのような開発工程を経て開発されたものかによって決められる。そして、例えば、高い信頼性レベルのプログラムに対しては高い特権レベルが必要なリソースへのアクセスを許可し、低い信頼性レベルのプログラムに対しては高い特権レベルが必要なリソースへのアクセスを不許可とする等の制御が行われる。
【０００４】
しかし、このようなプロセッサにおいても、低い特権レベルが設定されるユーザーアプリケーション又はゲストＯＳからの求めに応じて、アクセスに高い特権レベルを要するリソースへの処理を行う必要がある。このような場合、プロセッサは、ユーザーアプリケーション又はゲストＯＳからの求めに応じてハイパーバイザプログラムを起動して、ハイパーバイザプログラムによって、求められた処理を行う。そのため、ユーザーアプリケーション又はゲストＯＳからアクセスに高い特権レベルが要求されるリソースへのアクセスが要求された場合、プログラムの切り換えに時間を要し、プロセッサの処理能力が低下する問題がある。
【０００５】
そこで、このようなプログラムの切り換えに要する時間を削減する技術が特許文献１に開示されている。特許文献１では、プロセッサ上にゲストＯＳのための特権レジスタを有する。そして、高い信頼性が要求されるリソースへのアクセスが生じた場合に、ゲストＯＳの処理のみで要求をみたすことができる場合にはハイパーバイザプログラムを起動することなく処理を完了する。これにより、特許文献１では、ハイパーバイザプログラムが起動する頻度を低減することができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００５−５６０１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、マルチスレッドプロセッサにて動作する複数の仮想マシンでは、該当の複数の仮想マシンが並列に動作し得るため、高い特権レベルが設定されるハイパーバイザプログラムによるアクセスが生じた場合、全ての仮想マシンの動作を一旦中断しなければならない。そのため、ハイパーバイザプログラムによる処理が必要なアクセスが頻発した場合には、仮想マシン間の干渉が頻発し他の仮想マシンの動作が阻害される問題がある。なお、特許文献１は、シングルスレッド動作のプロセッサに関するものであり、複数の仮想マシンが並列に動作することは起こりえず仮想マシン間の干渉の問題は解決できない。
【課題を解決するための手段】
【０００８】
一実施の形態によれば、半導体装置は、複数の仮想マシンが動作する半導体装置であって、前記複数の仮想マシンの命令により呼び出される第１の特権プログラムと、前記複数の仮想マシン及び前記第１の特権プログラムの命令により呼び出される第２の特権プログラムと、命令コードの実行の順序を制御するパイプライン制御部と、を備え、前記パイプライン制御部は前記複数の仮想マシン各々に対し、前記第１の特権プログラムの呼び出し権限を示す第１フラグと、前記第２の特権プログラムの呼び出し権限を示す第２フラグを格納したレジスタを備え、前記パイプライン制御部は、前記命令コードのデコード結果と、前記第１フラグ及び前記第２フラグの値に基づいて、実行ユニットに演算する命令の処理指示を行う。
【０００９】
一実施の形態にかかる半導体装置によれば、レジスタを参照して、１つの仮想マシン上で動作する第１の特権プログラムを呼び出したプログラムが第１の特権プログラムの実行権限を有するか否かを確認する。そして、半導体装置は、当該仮想マシンに第１の特権プログラムを実行する権限がある場合にのみ、第２の特権プログラムを実行する。これにより、半導体装置は、第２の特権プログラムが頻繁に呼び出されることを防止することができ、仮想マシン間の干渉により他の仮想マシンの処理能力が低下することを防止することができる。
【発明の効果】
【００１０】
一実施の形態にかかる半導体装置によれば、一の仮想マシンの動作により他の仮想マシンの処理能力が低下することを防止することができる。
【図面の簡単な説明】
【００１１】
【図１】実施の形態１にかかる半導体装置のブロック図である。
【図２】実施の形態１にかかるパイプライン制御部のブロック図である。
【図３】実施の形態１にかかる仮想マシン制御回路のブロック図である。
【図４】実施の形態１にかかる半導体装置の仮想マシン設定レジスタ群の概略図である。
【図５】実施の形態１にかかる仮想マシン設定レジスタの実例である。
【図６】実施の形態１にかかる仮想マシン設定レジスタの実例である。
【図７】実施の形態１にかかる仮想マシン制御回路の動作を示すタイミングチャートである。
【図８】実施の形態１にかかるスレッドスケジューラのブロック図である。
【図９】実施の形態１にかかるスレッドスケジューラの動作を示すフローチャートである。
【図１０】実施の形態１にかかる半導体装置において実行が許可される命令と、許可された命令を実行した場合のソフトウェア階層上の状態遷移と、の一例を示す図である。
【図１１】実施の形態１にかかる半導体装置でＨＶＴＲＡＰ命令を実行し場合のパイプライン制御部の動作を示すフローチャートである。
【図１２】実施の形態１にかかる半導体装置においてＨＶＣＡＬＬ命令によるハイパーバイザスタブプログラムの起動処理する場合の手順を示すフローチャートである。
【図１３】実施の形態１にかかる半導体装置におけるハイパーバイザスタブプログラムの動作を示すフローチャートである。
【図１４】実施の形態１にかかる半導体装置の動作を示すシーケンス図である。
【図１５】実施の形態１にかかる半導体装置において不正なハイパーバイザプログラムの呼び出しがあった場合の動作を示すシーケンス図である。
【図１６】実施の形態１にかかる半導体装置において不正なハイパーバイザスタブプログラムの呼び出しがあった場合の動作を示すシーケンス図である。
【図１７】実施の形態１にかかる半導体装置において実行権限が与えられていない仮想マシンにおいてハイパーバイザスタブプログラム又はハイパーバイザプログラムの呼び出しがあった場合の動作を示すシーケンス図である。
【図１８】実施の形態１にかかるパイプライン制御部を有していないプロセッサの動作を示すシーケンス図である。
【図１９】実施の形態２にかかる半導体装置の仮想マシン設定レジスタ群の概略図である。
【図２０】仮想化技術を適用した半導体装置において実現されるソフトウェア階層の一例を示す図である。
【図２１】仮想化技術を適用した半導体装置におけるスレッドと仮想マシンの対応関係を示す図である。
【発明を実施するための形態】
【００１２】
実施の形態１
以下、図面を参照して実施の形態について説明する。まず、実施の形態にかかる半導体装置では、仮想マシンによる情報処理を行うが、一般的に、仮想マシンはソフトウェアの機能の一部として実装される。しかし、実施の形態にかかる半導体装置では、仮想マシンによるプログラムの実行をハードウェアの一機能として実装するものである。このように、ハードウェアの一機能として実現された仮想マシンによってプログラムを実行するものをハードウェアマルチスレッドプロセッサと称す。また、以下で説明する実施の形態では、ハードウェアマルチスレッドプロセッサを半導体装置の一例として説明する。しかし、実施の形態は、ハードウェアマルチスレッドプロセッサに限らず、複数のスレッドを並列的に実行可能なプロセッサであれば適用可能である。
【００１３】
実施の形態１にかかる半導体装置１のブロック図を図１に示す。図１に示すように、半導体装置１は、プロセッサエレメントＰＥ、データメモリ、バスＢＵＳを有する。そして、半導体装置１では、プロセッサエレメントＰＥと、データメモリを含む周辺装置がバスＢＵＳを介して相互に接続される。なお、図１では、周辺装置としてデータメモリを示したが、半導体装置は、当然、図示していないタイマ等の他の周辺装置を有する。
【００１４】
プロセッサエレメントＰＥは、プログラムカウンタ１０、セレクタ１１、命令メモリ１２、命令バッファ１３、命令デコーダ１４、パイプライン制御部１５、実行ユニット１６を有する。
【００１５】
プログラムカウンタ１０は、スレッドプログラムカウンタ１０ａ〜１０ｄを有する。スレッドプログラムカウンタ１０ａ〜１０ｄは、それぞれ、命令バッファ１３に命令メモリ１２からフェッチする命令コードの格納場所を示すプログラムカウンタ値を生成する。実施の形態１にかかる半導体装置１は、４つのハードウェアスレッドを備えているため、図１では、プログラムカウンタ１０に４つのスレッドプログラムカウンタを示した。なお、スレッドプログラムカウンタ１０ａ〜１０ｄは、命令フェッチ制御信号ＩＦＣに応じてプログラムカウンタ値を増加又は変更する。
【００１６】
セレクタ１１は、スレッドプログラムカウンタ１０ａ〜１０ｄのいずれか１つが生成するプログラムカウンタ値を命令フェッチ制御信号ＩＦＣに応じて選択して命令メモリ１２に出力する。命令メモリ１２は、セレクタ１１が出力したプログラムカウンタ値に対応する領域に格納された命令コードを命令バッファ１３に出力する。
【００１７】
命令バッファ１３は、半導体装置１で実行されるスレッドに対応して４つの命令バッファ１３ａ〜１３ｄを有する。そして、命令バッファ１３は、命令デコード制御信号ＩＤＣに応じて命令バッファ１３ａ〜１３ｄのいずれか１つに命令メモリ１２が出力した命令コードを格納する。また、命令バッファ１３は、格納されている命令コードの状況を示す情報を含むパイプラインステータス信号ＰＳＴ１を出力する。なお、命令バッファ１３ａ〜１３ｄは、いずれのＦＩＦＯ（First In First Out）型のメモリである。
【００１８】
半導体装置１では、プログラムカウンタ１０、セレクタ１１及び命令バッファ１３を用いて４つの独立した命令流を生成する。このように、独立した命令流を生成する回路構成を以下ではハードウェアスレッドと称す。そして、半導体装置１では、複数のハードウェアスレッドを論理的に仮想マシンに割り当てることで複数の仮想マシンを定義する。つまり、実施の形態１にかかる半導体装置１において定義される複数の仮想マシンは、それぞれがプログラムに対応した命令流に属する命令コードを発行する。
【００１９】
命令デコーダ１４は、命令コードをデコードして命令情報を生成する。より具体的には。命令デコーダ１４は、スレッド選択信号ＴＳＥＬに応じて命令バッファ１３ａ〜１３ｄのいずれか１つから命令コードを読み出し、読み出した命令コードをデコードして命令情報を生成し、デコード結果ＤＲとして当該命令情報を出力する。
【００２０】
パイプライン制御部１５は、パイプライン処理において処理する命令コードの順序を制御する。より具体的には、パイプライン制御部１５は、デコード結果ＤＲに基づき実行ユニット１６に具体的な演算指示を行う（例えば、実行ユニット制御信号ＥＵＣを出力する）。また、パイプライン制御部１５は、命令バッファ１３から出力されるパイプラインステータス信号ＰＳＴ１、実行ユニット１６から出力されるパイプラインステータス信号ＰＳＴ２と、命令実行情報ＥＸＲとに応じてスレッド選択信号ＴＳＥＬ、命令デコード制御信号ＩＤＣ、及び、命令フェッチ制御信号ＩＦＣを生成する。ここで、パイプラインステータス信号は、パイプラインにおいて処理されている命令の実行状況を示すものであって、キャッシュミスヒットの発生の有無、例外処理の発生の有無、分岐条件を満たしたか否か等の情報を含む。
【００２１】
また、パイプライン制御部１５は、１つの仮想マシン上で実行される第１の特権プログラム（例えば、ハイパーバイザスタブプログラム）を実行する権限の有無を仮想マシン毎に定義するレジスタを有する。そして、パイプライン制御部１５は、レジスタを参照して、ハイパーバイザスタブプログラムに関する命令コードを発行した仮想マシンにハイパーバイザスタブプログラムの実行権限がある場合には、ハイパーバイザスタブプログラムの動作に基づき、ハイパーバイザプログラムに関する命令コードに基づく処理を実行ユニット１６に指示する。なお、ハイパーバイザスタブプログラムは、１つの仮想マシンに割り当てられた実行時間内で実行されるものであり、ハイパーバイザプログラムは、第２のプログラムは、実行ユニット１６の実行時間を占有して実行されるものである。
【００２２】
一方、パイプライン制御部１５は、ハイパーバイザスタブプログラムに関する命令コードを発行した仮想マシンに第１の特権プログラムの実行権限がない場合には、ハイパーバイザスタブプログラムに関する命令コードを発行した仮想マシンに実行権例外が発生したと判断する。そして、パイプライン制御部１５は、ハイパーバイザスタブプログラムに関する命令コードを発行した仮想マシンに例外処理を行うように指示を行う。具体的には、パイプライン制御部１５は、命令デコード制御信号ＩＤＣ、命令フェッチ制御信号ＩＦＣ等の信号を出力することによりゲストＯＳ（Operating System）の処理として例外処理の実行指示を行う。なお、ゲストＯＳについての詳細は、後述する。
【００２３】
また、実施の形態１にかかるパイプライン制御部１５のレジスタは、仮想マシン毎にハイパーバイザプログラムの実行権限の有無を定義する値を含む。そして、パイプライン制御部１５は、レジスタを参照して、ハイパーバイザプログラムに関する命令コードを発行した仮想マシンにハイパーバイザプログラムの実行権限がある場合には、ハイパーバイザプログラムの動作を継続するように命令コードに基づく処理を実行ユニットに指示する。
【００２４】
一方、パイプライン制御部１５は、ハイパーバイザプログラムに関する命令コードを発行した仮想マシンにスーパーバイザプログラムの実行権限がない場合には、ハイパーバイザプログラムに関する命令コードを発行した仮想マシンに実行権例外が発生したと判断する。そして、パイプライン制御部１５は、ハイパーバイザプログラムに関する命令コードを発行した仮想マシンに例外処理を行うように指示を行う。具体的には、パイプライン制御部１５は、命令デコード制御信号ＩＤＣ、命令フェッチ制御信号ＩＦＣ等の信号を出力することによりゲストＯＳの処理として例外処理の実行指示を行う。
【００２５】
このパイプライン制御部１５のさらに詳細な説明は後述する。
【００２６】
実行ユニット１６は、パイプライン処理により命令情報に基づく演算を行う。図１に示す例では、実行ユニット１６は、レジスタファイル１６１、演算ユニット１６２、システム制御命令実行部１６３、ロードストアユニット１６４を有する。
【００２７】
レジスタファイル１６１は、演算ユニット１６２で行われる演算で用いられるデータが格納される。このレジスタファイル１６１は、ハードウェアスレッド毎に独立したデータ格納領域を有する。なお、レジスタファイル１６１は、レジスタ制御信号ＲＦＣに基づきデータの書き込み場所及び読み出し場所が指定される。
【００２８】
演算ユニット１６２は、パイプライン制御部１５が出力する実行ユニット制御信号ＥＵＣに基づき演算を実行する。演算ユニット１６２では、演算として加算・減算・乗算・除算等の演算を行う。また、演算ユニット１６２は、ライトバック信号ＷＢにより演算結果をレジスタファイル１６１に書き込む。また、演算ユニット１６２は、命令の実行状態を示すパイプラインステータス信号ＰＳＴ２を出力する。
【００２９】
システム制御命令実行部１６３は、実行ユニット制御信号ＥＵＣがシステム制御命令に関する実行指示であった場合に、当該指示に基づく処理を行う。例えば、システム制御命令実行部１６３は、例えば、特権レベルのプログラムの呼び出し命令であるＨＶＴＲＡＰ命令や、ＨＶＣＡＬＬ命令等の命令に関する処理を行う。また、システム制御命令実行部１６３は、処理結果を命令実行情報ＥＸＲとして出力する。この命令実行情報ＥＸＲは、実行した命令がどのような処理内容であったかを示す信号であって、例えば、処理した命令を発行した仮想マシンを示す仮想マシン識別子、ＨＶＴＲＡＰ命令を実行したことを示すＨＶＴＲＡＰ命令信号、ＨＶＣＡＬＬ命令を実行したことを示すＨＶＣＡＬＬ命令信号、ＨＶＣＡＬＬ命令によって呼び出されたハイパーバイザスタブプログラムの実行状態を示すＨＶスタブ実行状態信号が含まれる。また、システム制御命令実行部１６３は、命令の実行状態を示すパイプラインステータス信号ＰＳＴ２を出力する。なお、ＨＶＴＲＡＰ命令は、ハイパーバイザプログラムを呼び出すための命令であって、ＨＶＣＡＬＬ命令は、ハイパーバイザスタブプログラムの呼び出すための命令である。
【００３０】
ロードストアユニット１６４は、実行ユニット制御信号ＥＵＣに基づき、データメモリ等の他のメモリからのデータの読み出し処理（例えば、ロード処理）、及び、レジスタファイルに格納されているデータをデータメモリ等の他のメモリへの書き込み処理（例えば、ストア処理）を行う。また、ロードストアユニット１６４は、命令の実行状態を示すパイプラインステータス信号ＰＳＴ２を出力する。
【００３１】
実施の形態１にかかる半導体装置１は、ユーザープログラム（例えば、ユーザーアプリケーション）或いはゲストＯＳにより指示されたアクセスをハイパーバイザプログラムによってエミュレーションする場合に、ハイパーバイザスタブプログラムを介してハイパーバイザプログラムを起動する。
【００３２】
実施の形態１にかかる半導体装置１は、ハイパーバイザスタブプログラムを実行することで、ハイパーバイザスタブプログラムを呼び出した呼び出し元プログラムの正当性を判断する。そして、パイプライン制御部１５は、呼び出し元プログラムの指示した要求が正当なものである場合にハイパーバイザスタブプログラムの動作に基づきハイパーバイザプログラムに関する命令コードに基づく処理を実行ユニット１６に指示する。
【００３３】
また、実施の形態１にかかる半導体装置１は、ハイパーバイザスタブプログラムの動作によって他の仮想マシン（例えば、ハイパーバイザスタブプログラムに関する命令コードを発行する仮想マシン以外の仮想マシン）の動作を監視する。そして、パイプライン制御部１５は、他の仮想マシンの動作を停止可能な状態までハイパーバイザプログラムに関する命令コードに基づく処理を実行ユニット１６に指示することを待つ。
【００３４】
続いて、パイプライン制御部１５の詳細について説明する。パイプライン制御部１５のブロック図を図２に示す。図２に示すように、パイプライン制御部１５は、仮想マシン制御回路２０、スレッドスケジューラ２１、パイプライン制御信号生成回路２２を有する。
【００３５】
仮想マシン制御回路２０は、プロセッサエレメントＰＥ上で定義された仮想マシンの動作状態を制御する。より具体的には、仮想マシン制御回路２０は、複数の仮想マシンのいずれかにおいてＨＶＣＡＬＬ命令又はＨＶＴＲＡＰ命令の実行が開始されたか否かを示す信号Ｓ１〜Ｓ５を出力する。また、仮想マシン制御回路２０は、プロセッサエレメントＰＥが、複数の仮想マシンにより並列的にプログラムを実行する仮想マシンモードであるか、実行ユニット１６の実行時間を占有するようにプログラムを実行するネイティブモードであるかを示す信号Ｓ６を出力する。仮想マシン制御回路２０の詳細は、後述する。なお、以下では、信号Ｓ１を仮想マシン識別子、信号Ｓ２をＨＶＣＡＬＬ実行通知信号、信号Ｓ３をＨＶＴＲＡＰ実行通知信号、信号Ｓ４をＨＶＣＡＬＬ実行権例外信号、信号Ｓ５をＨＶＴＲＡＰ実行権例外信号、信号Ｓ６を実マシン動作信号と称す。
【００３６】
スレッドスケジューラ２１は、複数あるハードウェアスレッドの中から実行ユニット１６に投入する命令をスケジューリングする。より具体的には、スレッドスケジューラ２１は、実マシン動作信号Ｓ６、内部に予め設定されたスケジュール及びパイプラインステータス信号ＰＳＴ（パイプラインステータス信号ＰＳＴ１、ＰＳＴ２を含む信号）に基づき次に実行ユニット１６に命令コードを発行するハードウェアスレッドを決定する。そして、スレッドスケジューラ２１は、決定したハードウェアスレッドを示すスレッド選択信号ＴＳＥＬを出力する。
【００３７】
パイプライン制御信号生成回路２２は、スレッド選択信号ＴＳＥＬ、パイプラインステータス信号ＰＳＴ、仮想マシン識別子Ｓ１、ＨＶＣＡＬＬ実行通知信号Ｓ２、ＨＶＴＲＡＰ実行通知信号Ｓ３、ＨＶＣＡＬＬ実行権例外信号Ｓ４、ＨＶＴＲＡＰ実行権例外信号Ｓ５及びデコード結果ＤＲ等の信号に基づきパイプラインの制御を行う。パイプライン制御信号生成回路２２は、パイプラインの制御を行うに当たり、命令フェッチ制御信号ＩＦＣ、命令デコード制御信号ＩＤＣ、レジスタ制御信号ＲＦＣ、実行ユニット制御信号ＥＵＣを生成する。命令フェッチ制御信号ＩＦＣは、次に命令コードをフェッチするハードウェアスレッドを指定する信号である。命令デコード制御信号ＩＤＣは、次にパイプラインに投入する命令コードを指定する信号である。レジスタ制御信号ＲＦＣは、実行ユニット１６が演算を行う場合に用いる値が格納されているレジスタファイルの位置及び演算後の値を書き込むレジスタファイルの位置を示す信号である。実行ユニット制御信号ＥＵＣは、実行ユニット１６でどのような処理を行うかを示す信号である。
【００３８】
続いて、仮想マシン制御回路２０の詳細について説明する。仮想マシン制御回路２０の詳細なブロック図を図３に示す。図３に示すように、仮想マシン制御回路２０は、仮想マシン制御レジスタ群３０、セレクタ３１、ＯＲ回路３２、３４、ＡＮＤ回路３３、３５、ＥｘＯＲ回路３６、３７、仮想マシン動作信号生成回路３８を有する。
【００３９】
仮想マシン制御レジスタ群３０は、仮想マシンごとに第１の特権プログラム（例えば、ハイパーバイザスタブプログラム）及び第２の特権プログラム（例えば、ハイパーバイザプログラム）を実行する権限を定義するレジスタ（以下、仮想マシン制御レジスタと称す）を複数有する。また、仮想マシン制御レジスタは、仮想マシン毎に仮想マシンの動作を有効とするか無効とするかを示す仮想マシン有効フラグと、仮想マシンにハイパーバイザプログラムのみに操作可能なリソースへのアクセスを許可するか否かを示すＨＶ特権フラグと、を含む。この仮想マシン制御レジスタ群３０の詳細については、後述する。
【００４０】
セレクタ３１は、複数の仮想マシン制御レジスタのいずれか１つを仮想マシン識別子に応じて選択し、選択した仮想マシン制御レジスタに格納された値を出力する。なお、仮想マシン識別子は、命令実行情報ＥＸＲに含まれる信号である。
【００４１】
ＯＲ回路３２は、仮想マシン制御レジスタに含まれるＨＶＣＡＬＬ許可フラグＨＶＣＥとＨＶ特権フラグＨＶＰとの論理和演算結果を出力する。ＡＮＤ回路３３は、ＯＲ回路３２の出力とＨＶＣＡＬＬ命令信号との論理積演算結果を出力する。そして、ＡＮＤ回路３３の出力がＨＶＣＡＬＬ実行通知信号Ｓ２となる。ここで、ＨＶＣＡＬＬ実行通知信号Ｓ２は、ＨＶＣＡＬＬ許可フラグＨＶＣＥがイネーブル状態（例えば、１）であるときにＨＶＣＡＬＬ命令信号が実行通知状態（例えば、１）となったときに実行状態（例えば、１）を示す。一方、ＨＶＣＡＬＬ実行通知信号Ｓ２は、ＨＶ特権フラグＨＶＰがディスイネーブル状態（例えば、０）であり、ＨＶＣＡＬＬ許可フラグＨＶＣＥがディスイネーブル状態（例えば、０）であるときにＨＶＣＡＬＬ命令信号が実行通知状態（例えば、１）となっても未実行状態（例えば、０）を示す。
【００４２】
ＯＲ回路３４は、仮想マシン制御レジスタに含まれるＨＶＴＲＡＰ許可フラグＨＶＴＥとＨＶ特権フラグＨＶＰとＨＶスタブ実行状態信号との論理和演算結果を出力する。ＡＮＤ回路３５は、ＯＲ回路３４の出力とＨＶＴＲＡＰ命令信号との論理積演算結果を出力する。そして、ＡＮＤ回路３５の出力がＨＶＴＲＡＰ実行通知信号Ｓ３となる。ここで、ＨＶＴＲＡＰ実行通知信号Ｓ３は、ＨＶＴＲＡＰ許可フラグＨＶＴＥがイネーブル状態（例えば、１）であるときにＨＶＴＲＡＰ命令信号が実行通知状態（例えば、１）となったときに実行状態（例えば、１）を示す。
【００４３】
一方、ＨＶＴＲＡＰ実行通知信号Ｓ３は、ＨＶ特権フラグＨＶＰがディスイネーブル状態であり、かつ、ＨＶＴＲＡＰ許可フラグＨＶＴＥがディスイネーブル状態（例えば、０）であり、さらにＨＶスタブ実行状態信号が未実行状態（例えば、０）であるときにＨＶＴＲＡＰ命令信号が実行通知状態（例えば、１）となっても未実行状態（例えば、０）を示す。
【００４４】
さらに、ＨＶＴＲＡＰ実行通知信号Ｓ３は、ＨＶ特権フラグＨＶＰがディスイネーブル状態（例えば、０）であり、かつ、ＨＶＴＲＡＰ許可フラグＨＶＴＥがディスイネーブル状態（例えば、０）であるときにＨＶＴＲＡＰ命令信号が未実行通知状態（例えば、０）であっても、ＨＶスタブ実行状態信号が実行状態（例えば、１）であれば、実行状態（例えば、１）を示す。つまり、ＨＶＴＲＡＰ実行通知信号Ｓ３は、ゲストＯＳによりＨＶＴＲＡＰ命令が発行された場合と、ゲストＯＳによりＨＶＣＡＬＬ命令が発行されたことに伴いハイパーバイザスタブプログラムが実行された結果としてＨＶＴＲＡＰ命令が実行された場合に実行状態となる。
【００４５】
ＥｘＯＲ回路３６は、ＨＶＣＡＬＬ実行信号とＨＶＣＡＬＬ実行通知信号Ｓ２との排他的論理和演算結果をＨＶＣＡＬＬ実行権例外信号Ｓ４として出力する。つまり、ＨＶＣＡＬＬ実行権例外信号Ｓ４は、ＨＶＣＡＬＬ命令の実行権限がない仮想マシンがＨＶＣＡＬＬ命令を実行した場合にイネーブル状態（例えば、１）となる。ＥｘＯＲ回路３７は、ＨＶＴＲＡＰ実行信号とＨＶＴＲＡＰ実行通知信号Ｓ３との排他的論理和演算結果をＨＶＴＲＡＰ実行権例外信号Ｓ５として出力する。つまり、ＨＶＴＲＡＰ実行権例外信号Ｓ４は、ＨＶＴＲＡＰ命令の実行権限がない仮想マシンがＨＶＴＲＡＰ命令を実行した場合にイネーブル状態（例えば、１）となる。
【００４６】
仮想マシン動作信号生成回路３８は、ＨＶＴＲＡＰ実行通知信号Ｓ３及び仮想マシン制御レジスタ群３０に含まれる仮想マシン制御レジスタ中のシングルスレッド動作ビットＭＴに基づき実マシン動作信号Ｓ６を生成する。なお、シングルスレッド動作ビットＭＴについての詳細は後述する。
【００４７】
ここで、実マシン動作信号Ｓ６は、仮想マシンが無効状態であって、いずれか１つのハードウェアスレッドにより実行ユニット１６の実行時間が占有される状態であるときにイネーブル状態（例えば、１）になる信号である。例えば、実施の形態１にかかる半導体装置１では、ハイパーバイザプログラムを実行する際に実マシン動作信号Ｓ６がイネーブル状態となる。
【００４８】
続いて、仮想マシン制御レジスタ群３０について詳細に説明する。仮想マシン制御レジスタ群３０に含まれる仮想マシン制御レジスタの概略図を図４に示す。図４に示すように、仮想マシン制御レジスタ群３０には、定義する仮想マシンの数に応じた仮想マシン制御レジスタが設けられる。図４に示す例では、１つの仮想マシンに対応して２つのレジスタが用いられる。そして、仮想マシン制御レジスタは、それぞれ仮想マシン有効フラグＥＮ、ＨＶ特権フラグＨＶＰ、ＨＶＴＲＡＰ許可フラグＨＶＴＥ、ＨＶＣＡＬＬ許可フラグＶＨＣＥを有する。これらのフラグは、値が１である場合に当該フラグが有効な状態を示し、値が０である場合に当該フラグが無効な状態を示す。
【００４９】
また、実施の形態１にかかる半導体装置１では、図４に示した仮想マシン制御レジスタは、他の設定を格納するレジスタの一部として実装される。そこで、仮想マシン制御レジスタの実例について説明する。図５に仮想マシン制御レジスタの設定値のうち仮想マシン有効フラグＥＮが格納されるレジスタの概略図を示す。
【００５０】
図５に示すレジスタは、３２ビットのデータ領域を有する。そして、図５に示すレジスタでは、３１ビット目のフィールドに仮想マシン有効フラグＥＮが格納される。また、この仮想マシン有効フラグＥＮは、プロセッサがＨＶ特権（例えば、ハイパーバイザ特権）を有し、かつ、仮想マシンに関する情報群（例えば、仮想マシンコンテキストＶＣ）に対して処理を行うモードにおいて書き込みと読み込みが許可される。また、この仮想マシン有効フラグＥＮは、プロセッサがＨＶ特権（例えば、ハイパーバイザ特権）を有し、かつ、仮想マシンコンテキストＶＣに対して処理を行うモード以外のモードで動作する場合には読み込みのみが許可される。さらに、仮想マシン有効フラグＥＮは、プロセッサの全体動作に関する情報群（例えば、ネイティブコンテキスト）においては、初期値が１であり、仮想マシンコンテキストでは初期値が０である。
【００５１】
また、図５に示すレジスタには、３０ビット目のフィールドにマルチスレッド動作ビットＭＴが格納される。このマルチスレッド動作ビットＭＴは、プロセッサがＨＶ特権（例えば、ハイパーバイザ特権）を有しているか否かに関わらず書き込みと読み込みが許可される。また、マルチスレッド動作ビットＭＴは、プロセッサが仮想マシンモードからネイティブモードに移行するときに１から０に書き換えられ、ネイティブモードから仮想マシンモードに移行するときに０から１に書き換えられる。また、このマルチスレッド動作ビットＭＴの書き換えはプロセッサ上で動作するプログラムの動作に基づき行われる。なお、図５に示したレジスタでは、他の設定値を含むが、仮想マシン制御回路２０の動作には直接影響を及ぼすものではないため、ここでは説明を省略する。
【００５２】
また、図６に仮想マシン制御レジスタの設定値のうちＨＶ特権フラグＨＶＰ、ＨＶＣＡＬＬ許可フラグＨＶＣＥ、ＨＶＴＲＡＰ許可フラグＨＶＴＥを含むレジスタの概略図を示す。図６に示すレジスタは、３２ビットのデータ領域を有する。そして、図６に示すレジスタは、２ビット目のフィールドにＨＶ特権フラグＨＶＰが格納され、１ビット目のフィールドにＨＶＣＡＬＬ許可フラグＨＶＣＥが格納され、０ビット目のフィールドにＨＶＴＲＡＰ許可フラグＨＶＴＥが格納される。また、これらフラグは、プロセッサがハイパーバイザ特権を有し、かつ、仮想マシンコンテキストＶＣに対して処理を行うモードにおいて書き込みと読み込みが許可される。また、これらフラグは、プロセッサがハイパーバイザ特権を有し、かつ、仮想マシンコンテキストＶＣに対して処理を行うモード以外のモードで動作する場合には読み込みのみが許可される。さらに、これらフラグは、プロセッサの全体動作に関する情報群（例えば、ネイティブコンテキスト）においては、初期値が１であり、仮想マシンコンテキストでは初期値が０である。なお、図６に示したレジスタでは、他の設定値を含むが、仮想マシン制御回路２０の動作には直接影響を及ぼすものではないため、ここでは説明を省略する。
【００５３】
図５、図６に示したように、仮想マシン制御レジスタの値の書き換えは、ハイパーバイザ特権のプログラムのみが行えるようにすることで、設定値の信頼性を向上させることができる。
【００５４】
ここで、実施の形態１にかかる仮想マシン制御回路２０の動作についてより詳細に説明する。図７に実施の形態１にかかる仮想マシン制御回路２０の動作を示すタイミングチャートを示す。まず、図７に示す例では、ＨＶ特権フラグＨＶＰがディスイネーブル状態であって、ＨＶＣＡＬＬ許可フラグＨＶＣＥがイネーブル状態であって、ＨＶＴＲＡＰ許可フラグＨＶＴＥがディスイネーブル状態である仮想マシン制御レジスタ（つまり、図４に示した仮想マシンＶＭ０に対応した仮想マシン制御レジスタ）に基づきプロセッサを動作させたときのものである。
【００５５】
図７に示す例では、タイミングＴ１においてＨＶＣＡＬＬ命令信号が実行通知状態となる。そして、ＨＶＣＡＬＬ命令信号が実行通知状態となったことに応じて、仮想マシン制御回路２０は、ＨＶＣＡＬＬ実行通知信号Ｓ２を実行状態とする。また、タイミングＴ１において実行されたＨＶＣＡＬＬ命令に応じて、タイミングＴ２以降でハイパーバイザスタブプログラムが実行される。そのため、タイミングＴ２において、ＨＶスタブ実行状態信号が実行状態となる。
【００５６】
そして、タイミングＴ３において、ハイパーバイザスタブプログラムにおいてＨＶＴＲＡＰ命令が実行される。そのため、タイミングＴ３においてＨＶＴＲＡＰ命令信号が実行通知状態となる。このとき、図７に示す例では、タイミングＴ３においてＨＶスタブ実行状態信号が実行通知状態のままとなっている。そのため、ＨＶＴＲＡＰ許可フラグＨＶＴＥの値に関わらず、タイミングＴ３においてＨＶＴＲＡＰ命令信号が実行通知状態となったことに応じてＨＶＴＲＡＰ実行通知信号Ｓ３を実行状態とする。
【００５７】
そして、ＨＶＴＲＡＰ命令が実行されたことに応じて、タイミングＴ４において、ハイパーバイザプログラムは、マルチスレッド動作ビットＭＴを１から０に書き換える。これにより、マルチスレッド動作ビットＭＴが１に書き換えられるまでプロセッサはネイティブモードで動作する。また、タイミングＴ３〜Ｔ４において、ＨＶＴＲＡＰ実行通知信号Ｓ３が実行状態となったことに応じて仮想マシン制御回路２０は、タイミングＴ４において実マシン動作信号Ｓ６をイネーブル状態とする。
【００５８】
そして、タイミングＴ４で起動したハイパーバイザプログラムは、タイミングＴ５において、マルチスレッド動作ビットＭＴを１に書き換えて動作を完了させる。また、仮想マシン動作信号生成回路３８は、マルチスレッド動作ビットＭＴが１から０に書き換えられたことに応じて実マシン動作信号Ｓ６をディスイネーブル状態とする。その後、タイミングＴ６において、ハイパーバイザスタブプログラムの動作の完了に応じてＨＶスタブ実行状態信号を未実行通知状態とする。
【００５９】
続いて、スレッドスケジューラ２１の詳細について説明する。スレッドスケジューラ２１の詳細なブロック図を図８に示す。図８に示すように、スレッドスケジューラ２１は、動作スレッド選択回路４０、仮想マシン・スレッド対応表４１、スケジュールヒント４２を有する。
【００６０】
仮想マシン・スレッド対応表４１は、例えばプロセッサエレメントＰＥの内部のメモリ、或いは、レジスタに格納されるものである。仮想マシン・スレッド対応表４１は、仮想マシンとハードウェアスレッドとの対応を示す表である。
【００６１】
スケジュールヒント４２は、例えばプロセッサエレメントＰＥの内部のメモリ、或いは、レジスタに格納されるものである。スケジュールヒント４２は、実行ユニット１６で実行する命令コードを生成するハードウェアスレッドの順序、優先的に処理すべきハードウェアスレッド等を定義する情報である。つまり、実施の形態１にかかる半導体装置１では、このスケジュールヒント４２と、仮想マシン・スレッド対応表４１に記載された対応関係に基づき仮想マシンが実行するハードウェアスレッドが定義される。このスケジュールヒント４２については、例えば、本願の出願人による特願２００８−２５２２３２に実施の形態の一例が記載されている。
【００６２】
動作スレッド選択回路４０は、実マシン動作信号Ｓ６、パイプラインステータス信号ＰＳＴ１、ＰＳＴ２、仮想マシン・スレッド対応表４１、及び、スケジュールヒント４２に基づき次に命令コードを発行するハードウェアスレッドを示すスレッド選択信号ＴＳＥＬを生成する。より具体的な動作スレッド選択回路４０の動作を示すフローチャートを図９に示す。
【００６３】
図９に示すように、動作スレッド選択回路４０は、実マシン動作信号Ｓ６を参照して、プロセッサエレメントＰＥが仮想マシンモードで動作中か、ネイティブマシンモードで動作中かを判断する（ステップＳＴ１）。そして、ステップＳＴ１において、プロセッサエレメントＰＥがネイティブモードで動作していると判断された場合、動作スレッド選択回路４０は、仮想マシン・スレッド対応表４１を参照し、実行すべきハードウェアスレッドを選択する（ステップＳＴ２）。
【００６４】
一方、ステップＳＴ１において、プロセッサエレメントＰＥが仮想マシンモードで動作していると判断された場合、動作スレッド選択回路４０は、スケジュールヒント４２があるか否かを判断する（ステップＳＴ３）。そして、ステップＳＴ３において、スケジュールヒント４２があると判断された場合、動作スレッド選択回路４０は、スケジュールヒント４２と仮想マシン・スレッド対応表４１とを参照して、実行するハードウェアスレッドを選択する（ステップＳＴ４）。
【００６５】
一方、ステップＳＴ３において、スケジュールヒント４２がないと判断された場合、動作スレッド選択回路４０は、パイプラインステータス信号ＰＳＴに基づき実行効率の最も良いハードウェアスレッドを選択する（ステップＳＴ５）。
【００６６】
続いて、実施の形態１にかかる半導体装置１の動作について説明する。以下の説明では、特に、実施の形態１にかかる半導体装置１の特徴の１つであるハイパーバイザスタブプログラムの呼び出しについて説明する。
【００６７】
まず、仮想マシン制御レジスタが図４に示す設定を有する場合に、実施の形態１にかかる半導体装置において実行が許可される命令と、許可された命令を実行した場合のソフトウェア階層上の状態遷移の一例を示す図を図１０に示す。図１０に示すように、半導体装置１は、１つの仮想マシン上で動作するユーザープログラムと、ユーザープログラムを管理するスーパーバイザプログラム（例えば、ゲストＯＳ）と、１つの仮想マシン上で動作し、スーパーバイザプログラムからの呼び出しに応じて動作するハイパーバイザスタブプログラムと、複数のスーパーバイザプログラムを管理するハイパーバイザプログラムと、を実行する。ここで、実施の形態１にかかる半導体装置１では、ハイパーバイザスタブプログラムが第１の特権プログラムに相当するものであって、ハイパーバイザプログラムが第２の特権プログラムに相当するものである。
【００６８】
また、半導体装置１では、ハイパーバイザプログラムをネイティブモードで実行し、ハイパーバイザスタブプログラム、ゲストＯＳ、アプリケーションプログラムを仮想マシンモードで実行する。さらに、半導体装置１は、アプリケーションプログラムを実行する場合にはユーザーモードで動作し、ゲストＯＳを実行する場合にはスーパーバイザ特権レベルで動作し、ハイパーバイザスタブプログラム及びスーパーバイザプログラムを実行する場合にはハイパーバイザ特権レベルで動作する。なお、動作モードは、ユーザーモード、スーパーバイザ特権レベル、ハイパーバイザ特権レベルの順で高い信頼性が確保される。
【００６９】
そして、図４に示すレジスタの設定例では、半導体装置１は、３つの仮想マシンＶＭ０〜ＶＭ２を用いて処理を行う。そのため、図１０に示すように、半導体装置１は、仮想マシンモードでは仮想マシンＶＭ０〜ＶＭ２がそれぞれ独立した処理を行う。
【００７０】
また、実施の形態１にかかる半導体装置１では、アプリケーションプログラムからハイパーバイザ特権が必要なリソースに対するアクセスが生じた場合、ＨＶＴＲＡＰ命令或いはＨＶＣＡＬＬ命令を実行することでハイパーバイザプログラムを呼び出す。このとき、半導体装置１では、アプリケーションプログラムからのアクセス要求に基づきゲストＯＳがＨＶＴＲＡＰ命令又はＨＶＣＡＬＬ命令を発行する。
【００７１】
図４に示したレジスタの設定例に従って動作する半導体装置１では、仮想マシンの信頼性に応じてハイパーバイザプログラムの呼び出し方法を設定することができる。例えば、図１０に示す例では、ＨＶＴＲＡＰ命令の許可フラグＨＶＴＥ及びＨＶＣＡＬＬ命令の許可フラグＨＶＣＥが有効に設定される仮想マシンＶＭ１が最も高い信頼性となる。そして、許可フラグの設定に基づき、仮想マシンＶＭ１のゲストＯＳに対しては、ＨＶＣＡＬＬ命令とＨＶＴＲＡＰ命令との実行が許可される。そして、仮想マシンＶＭ１のゲストＯＳは、ＨＶＴＲＡＰ命令を実行してハイパーバイザスタブプログラムを呼び出すことなく、ＨＶＴＲＡＰ命令によってハイパーバイザプログラムを直接呼び出すことが可能である。また、仮想マシンＶＭ１のゲストＯＳについては、ＨＶＣＡＬＬ命令によってハイパーバイザスタブプログラムを呼び出し、このハイパーバイザスタブプログラムからハイパーバイザプログラムの呼び出すことも許可される。
【００７２】
一方、仮想マシンＶＭ０は、ＨＶＴＲＡＰ命令の許可フラグＨＶＴＥが無効に設定され、ＨＶＣＡＬＬ命令の許可フラグＨＶＣＥが有効に設定されるため、仮想マシンＶＭ１よりも信頼性が低い。つまり、許可フラグの設定に基づき、仮想マシンＶＭ０のゲストＯＳは、ＨＶＴＲＡＰ命令によって直接ハイパーバイザプログラムを呼び出すことは許可されていない。そのため、仮想マシンＶＭ０のゲストＯＳがハイパーバイザプログラムを呼び出す際にはＨＶＣＡＬＬ命令を実行してハイパーバイザスタブプログラムを呼び出し、当該ハイパーバイザスタブプログラムからハイパーバイザプログラムを呼び出す必要がある。また、仮想マシンＶＭ２は、ＨＶＴＲＡＰ命令の許可フラグＨＶＴＥ及びＨＶＣＡＬＬ命令の許可フラグＨＶＣＥが無効に設定されるため、仮想マシンＶＭ０よりも信頼性が低い。つまり、許可フラグの設定に基づき、仮想マシンＶＭ２のゲストＯＳに対しては、ＨＶＴＲＡＰ命令及びＨＶＣＡＬＬ命令の実行権限が与えられていない。そのため、仮想マシンＶＭ２のゲストＯＳは、ハイパーバイザプログラムと、ハイパーバイザスタブプログラムとのいずれも呼び出すことができない。
【００７３】
つまり、実施の形態１にかかる半導体装置１は、複数の仮想マシンにより並列的にプログラムを実行する仮想マシンモードと、実行ユニットの実行時間を占有してプログラムを実行するネイティブモードとを切り替えながら処理を進める。そして、半導体装置１は、仮想マシンモードにおいて、半導体装置内のハードウェア資源（例えば、レジスタ、メモリ、周辺回路等）のうち特定のハードウェア資源に対するアクセスが制限されるユーザー特権レベルのユーザープログラムと、ユーザープログラムを管理するスーパーバイザプログラム（例えば、ゲストＯＳ）と、ゲストＯＳからの呼び出しに応じて動作し、特定のハードウェア資源を含むハードウェア資源に対するアクセスが許可されるハイパーバイザ特権レベルのハイパーバイザスタブプログラムと、を実行する。また、半導体装置１においては、ゲストＯＳに、ハイパーバイザスタブプログラムを呼び出す第１の命令コード（例えば、ＨＶＣＡＬＬ命令）の実行権限の有無が設定され、ハイパーバイザスタブプログラムは、ＨＶＣＡＬＬ命令の実行が許可されたゲストＯＳからの呼び出しに応じて起動する。そして、半導体装置１は、第２の命令コード（例えば、ＨＶＴＲＡＰ命令）を実行することでハイパーバイザプログラムを呼び出し、ネイティブモードに切り替わる。一方、半導体装置１は、ＨＶＣＡＬＬ命令の実行が不許可に設定されたゲストＯＳがＨＶＣＡＬＬ命令を実行した場合、ハイパーバイザスタブプログラムを呼び出さずに、ゲストＯＳ内で例外処理を行う。
【００７４】
また、半導体装置１は、ゲストＯＳには、ＨＶＴＲＡＰ命令の実行権限の有無が設定される。そして、半導体装置１は、ＨＶＴＲＡＰ命令の実行が許可されたゲストＯＳからの呼び出しに応じてハイパーバイザプログラムを起動する。また、半導体装置１は、ＨＶＴＲＡＰ命令の実行が不許可に設定されたゲストＯＳが、ＨＶＴＲＡＰ命令を実行した場合、ハイパーバイザプログラムを呼び出さずに、ゲストＯＳ内で例外処理を行う。
【００７５】
続いて、実施の形態１にかかる半導体装置１において、ハイパーバイザプログラムを直接呼び出すＨＶＴＲＡＰ命令が実行された場合の動作について説明する。図１１に、実施の形態１にかかる半導体装置１においてＨＶＴＲＡＰ命令が実行された場合の半導体装置１の動作を示すフローチャートを示す。
【００７６】
図１１に示すように、実施の形態１にかかる半導体装置１では、ゲストＯＳによって、ＨＶＴＲＡＰ命令が実行された場合、実行ユニット１６が出力する命令実行情報ＥＸＲに基づきパイプライン制御部１５がＨＶＴＲＡＰ命令の実行が開始されたことを検出する（ステップＳＴ１０）。
【００７７】
ステップＳＴ１１では、パイプライン制御部１５の仮想マシン制御回路２０は、ＨＶＴＲＡＰ命令を実行した仮想マシンの番号を示す仮想マシン識別子を元に対応する仮想マシン制御レジスタを参照する。そして、仮想マシン制御回路２０は、ＨＶＴＲＡＰ命令を実行した仮想マシンにＨＶＴＲＡＰ命令の実行権限があるか否かを判断する（ステップＳＴ１２）。このステップＳＴ１２において、仮想マシンにＨＶＴＲＡＰ命令の実行権限がないと判断された場合、実行権例外が発生したと認識して、仮想マシンのゲストＯＳ内の処理としてエラー処理を行う（ステップＳＴ１３）。
【００７８】
一方、ステップＳＴ１２において、仮想マシンにＨＶＴＲＡＰ命令の実行権限があると判断された場合、半導体装置１は全ての仮想マシンを停止して動作権限をハイパーバイザ特権レベルに移行する（ステップＳＴ１４）。より具体的には、このステップＳＴ１４では、仮想マシン制御回路２０は、実マシン動作信号Ｓ６をイネーブル状態とする。そして、スレッドスケジューラ２１では、実マシン動作信号Ｓ６がイネーブル状態となったことに応じて実行すべきハードウェアスレッドを仮想マシン・スレッド対応表４１から選択する。また、パイプライン制御信号生成回路２２では、ＨＶＴＲＡＰ実行通知信号Ｓ３に応じて、ハイパーバイザプログラムを実行するための命令フェッチ制御信号ＩＦＣ、命令デコード制御信号ＩＤＣ、レジスタ制御信号ＲＦＣ、実行ユニット制御信号ＥＵＣを生成する。そして、ステップＳＴ１４の処理が完了することで、実施の形態１にかかる半導体装置１においてハイパーバイザプログラムが実行される（ステップＳＴ１５）。
【００７９】
続いて、実施の形態１にかかる半導体装置１において、ハイパーバイザスタブプログラムを呼び出すＨＶＣＡＬＬ命令が実行された場合の動作について説明する。図１２に、実施の形態１にかかる半導体装置１においてＨＶＣＡＬＬ命令によるハイパーバイザスタブプログラムの起動処理する場合の手順を示すフローチャートを示す。
【００８０】
図１２に示すように、実施の形態１にかかる半導体装置１では、ゲストＯＳによって、ＨＶＣＡＬＬ命令が実行された場合、実行ユニット１６が出力する命令実行情報ＥＸＲに基づきパイプライン制御部１５がＨＶＣＡＬＬ命令の実行が開始されたことを検出する（ステップＳＴ２０）。
【００８１】
続いて、ステップＳＴ２１では、パイプライン制御部１５の仮想マシン制御回路２０は、ＨＶＣＡＬＬ命令を実行した仮想マシンの番号を示す仮想マシン識別子を元に対応する仮想マシン制御レジスタを参照する。そして、仮想マシン制御回路２０は、ＨＶＣＡＬＬ命令を実行した仮想マシンにＨＶＣＡＬＬ命令の実行権限があるか否かを判断する（ステップＳＴ２２）。このステップＳＴ２２において、仮想マシンにＨＶＣＡＬＬ命令の実行権限がないと判断された場合、実行権例外が発生したと認識して、仮想マシン内部でエラー処理を行う（ステップＳＴ２３）。
【００８２】
一方、ステップＳＴ２２において、仮想マシンにＨＶＣＡＬＬ命令の実行権限があると判断された場合、半導体装置１はＨＶＣＡＬＬ命令を実行した仮想マシンに一時的にハイパーバイザ特権を付与する。そして、半導体装置１は、ＨＶＣＡＬＬ命令を実行したマシンにおいてハイパーバイザスタブプログラムを実行しながら、他の仮想マシンの動作を継続する。その後、半導体装置１は、ハイパーバイザスタブプログラムにおいて準備された命令コードにジャンプする（ステップＳＴ２４）。より具体的には、このステップＳＴ２４では、仮想マシン制御回路２０は、実マシン動作信号Ｓ６をディスイネーブル状態で維持する。そして、スレッドスケジューラ２１では、ディスイネーブル状態の実マシン動作信号Ｓ６に応じて、実行するハードウェアスレッドを仮想マシン・スレッド対応表４１又はスケジュールヒント４２に基づき選択する。また、パイプライン制御信号生成回路２２では、ＨＶＣＡＬＬ実行通知信号Ｓ２に応じて、ハイパーバイザスタブプログラムを実行するための命令フェッチ制御信号ＩＦＣ、命令デコード制御信号ＩＤＣ、レジスタ制御信号ＲＦＣ、実行ユニット制御信号ＥＵＣを生成する。
【００８３】
そして、ステップＳＴ２４においてハイパーバイザスタブプログラムにおいて準備された命令コードにジャンプすることで、半導体装置１は、ハイパーバイザプログラムの起動処理を完了する。
【００８４】
ここで、図１２に示すように、半導体装置１は、ＨＶＣＡＬＬ命令を実行することでハイパーバイザスタブプログラムを起動する。そして、半導体装置１は、ハイパーバイザスタブプログラムによりハイパーバイザプログラムを呼び出す。また、このハイパーバイザスタブプログラムでは、呼び出し元の要求の妥当性の確認、他の仮想マシンの動作の監視等の処理を行う。そこで、ハイパーバイザスタブプログラムに基づく半導体装置１の動作について詳細に説明する。図１３に実施の形態１にかかる半導体装置におけるハイパーバイザスタブプログラムの動作を示すフローチャートを示す。
【００８５】
図１３に示すように、ハイパーバイザスタブプログラムを実行する半導体装置１は、まず、呼び出し元の指示した要求が適切か否かを判断する（ステップＳＴ３１）。より具体的には、このステップＳＴ３１では、アプリケーションプログラムがゲストＯＳ等のスーパーバイザ特権レベルのプログラムを介することなく直接ＨＶＣＡＬＬ命令を発行した場合には呼び出し元の指示した要求が不正なものであると判断する。
【００８６】
そして、ステップＳＴ３１において、呼び出し元の指示した要求が不正なものであると判断された場合は、ハイパーバイザスタブプログラムは、返り値にエラー番号を設定し、復帰命令を発行し、処理をユーザーアプリケーションに復帰させる（ステップＳＴ３８）。また、ステップＳＴ３１において、呼び出し元の指示した要求が適正なものであると判断された場合は、ハイパーバイザスタブプログラムは、要求された処理が他の仮想マシンを停止させずに処理できるものであるかを判断する（ステップＳＴ３２）。例えば、要求が、ＨＶＣＡＬＬ命令を発行した仮想マシンにのみ影響する設定変更である場合は、他の仮想マシンを停止させずに処理を完了することができる。
【００８７】
そして、ステップＳＴ３２において、要求された処理が他の仮想マシンを停止させずに処理できると判断された場合には、仮想マシンモード内にてハイパーバイザスタブプログラムによるサービスを提供する（ステップＳＴ３３）。そして、ステップＳＴ３３の処理の後に、処理に応じた返り値を設定し、復帰命令を発行し、処理をユーザーアプリケーションに復帰させる（ステップＳＴ３８）。また、ステップＳＴ３２において、要求された処理が他の仮想マシンを停止させずに処理できないと判断された場合には、半導体装置１をネイティブモードに遷移可能か否かを判断する（ステップＳＴ３４）。例えば、他の仮想マシンにおいて行われている処理がリアルタイム性を要するクリティカルタスクに関するものである場合は、他の仮想マシンの処理は停止することができない。
【００８８】
そして、ステップＳＴ３４においてネイティブモードに遷移可能と判断された時点で、半導体装置１は、処理をステップＳＴ３５に進める。ステップＳＴ３５では、ハイパーバイザスタブプログラムがＨＶＴＲＡＰ命令を発行し、ＨＶＴＲＡＰ命令によって半導体装置１をネイティブモードに遷移させる。これにより、半導体装置１は、ネイティブモードにてハイパーバイザプログラムによるサービスを提供する（ステップＳＴ３６）。なお、半導体装置１では、ステップＳＴ３６の処理はハイパーバイザプログラムによる処理に含まれており、ステップＳＴ３６の処理が実行される間もハイパーバイザスタブプログラムは実行中である。また、半導体装置１では、ハイパーバイザスタブプログラムが発行するＨＶＴＲＡＰ命令については、仮想マシンに対応するＨＶＴＲＡＰ許可フラグが無効であっても正常な処理であるとして処理される。
【００８９】
そして、ステップＳＴ３６の処理が完了した時点で、半導体装置１は、動作モードをネイティブモードから仮想マシンモードに復帰させ、ハイパーバイザスタブプログラムを実行する（ステップＳＴ３７）。その後、ハイパーバイザスタブプログラムを実行する半導体装置１は、処理に応じた帰り値を設定し、復帰命令を発行し、処理をユーザーアプリケーションに復帰させる（ステップＳＴ３８）。
【００９０】
続いて、シーケンス図（図１４〜図１８）を用いて実施の形態１にかかる半導体装置１の動作を別の観点から説明する。まず、図１４に実施の形態１にかかる半導体装置１の動作を示すシーケンス図を示す。図１４に示す例は、半導体装置１において正常な処理に基づきハイパーバイザプログラムが呼び出されたときのものである。なお、図１４〜図１７では、図４に示した仮想マシン制御レジスタの設定に従って仮想マシンの実行権限が設定された半導体装置１についてのものである。また、図１８のシーケンス図は、いずれの仮想マシンもハイパーバイザスタブプログラムを介さずにハイパーバイザプログラムを起動する半導体装置の動作を示すものであって、実施の形態１にかかる半導体装置１の比較例を示すものである。
【００９１】
図１４の上部に示すように、半導体装置１では、仮想マシンＶＭ０がＨＶＣＡＬＬ命令を実行した場合、このＨＶＣＡＬＬ命令に応じて、仮想マシンモードにおいて仮想マシンＶＭ０がハイパーバイザスタブプログラムを実行する。そして、ハイパーバイザスタブプログラムがＨＶＴＲＡＰ命令を実行することで、半導体装置１は、動作モードをネイティブモードに遷移させ、ハイパーバイザプログラムを実行する。このとき、図１４に示すように、ハイパーバイザスタブプログラムは、ハイパーバイザプログラムを実行中においてもバックグラウンドで動作を継続する。そして、ハイパーバイザプログラムの処理の完了に応じて、半導体装置１は、動作モードを仮想モードに復帰させ、処理をハイパーバイザスタブプログラムに復帰させる。その後、半導体装置１は、ハイパーバイザスタブプログラムによって復帰命令を実行することで、半導体装置１は、動作モードを仮想マシンモードで動作するユーザーアプリケーションに復帰させる。
【００９２】
また、図１４の下部に示すように、半導体装置１では、仮想マシンＶＭ１に対してはＨＶＴＲＡＰ命令の実行が許可されている。そのため、半導体装置１では、仮想マシンＶＭ１においてＨＶＴＲＡＰ命令が実行された場合、当該ＨＶＴＲＡＰ命令に応じて、動作モードを仮想マシンモードからネイティブモードに遷移させ、直接ハイパーバイザプログラムを実行する。そして、ハイパーバイザプログラムの処理の完了に応じて、半導体装置１は、動作モードを仮想モードに復帰させ、処理をユーザープログラムに復帰させる。
【００９３】
次いで、図１５に、実施の形態１にかかる半導体装置において不正なハイパーバイザプログラムの呼び出しがあった場合の動作を示すシーケンス図を示す。図１５に示すように、半導体装置１では、仮想マシンＶＭ０にＨＶＴＲＡＰ命令の実行権限を与えていない。そのため、仮想マシンＶＭ０においてＨＶＴＲＡＰ命令が実行された場合、当該ＨＶＴＲＡＰ命令に関する処理は、ゲストＯＳの処理期間中にパイプライン制御部１５の仮想マシン制御回路２０においてＨＶＴＲＡＰ実行権例外信号Ｓ５がイネーブル状態となる。そして、ＨＶＴＲＡＰ実行権例外信号Ｓ５がイネーブル状態となったことに応じてパイプライン制御信号生成回路２２が実行ユニット１６に復帰命令を実行するように命令フェッチ制御信号ＩＦＣ、命令デコード制御信号ＩＤＣ、レジスタ制御信号ＲＦＣ、及び、実行ユニット制御信号ＥＵＣを生成する。そして、仮想マシンＶＭ０において復帰命令が実行されることで、仮想マシンＶＭ０の実行権限がユーザーモードに復帰する。このとき、半導体装置１では、仮想マシンモードで実行されるゲストＯＳの処理期間中に例外処理が行われるため、仮想マシンＶＭ０におけるＨＶＴＲＡＰ命令の実行にかかわらず他の仮想マシンの動作は継続される。
【００９４】
また、仮想マシンＶＭ０においてＨＶＣＡＬＬ命令が実行された場合であっても、ハイパーバイザスタブプログラムの処理において呼び出し元の要求が不正であった場合は、ハイパーバイザスタブプログラムにおいてエラー処理（又は、例外処理）が行われる。そこで、不正なハイパーバイザスタブプログラムの呼び出しが発生した場合の半導体装置１の動作を示すシーケンス図を図１６に示す。図１６に示すように、半導体装置１では、ＨＶＣＡＬＬ命令が実行された場合であっても、呼び出し元の要求が不正なものであった場合には動作モードをネイティブモードに遷移させることなく動作権限をユーザーモードに復帰させることができる。
【００９５】
続いて、ＨＶＣＡＬＬ命令の実行権限とＨＶＴＲＡＰ命令の実行権限のいずれも与えられていない仮想マシンＶＭ２において、ＨＶＣＡＬＬ命令又はＨＶＴＲＡＰ命令が実行された場合の半導体装置１の動作を示すシーケンス図を図１７に示す。仮想マシンＶＭ２に対しては、ＨＶＴＲＡＰ命令の実行権限とＨＶＣＡＬＬ命令の実行権限のいずれも与えられていない。そのため、半導体装置１では、仮想マシンＶＭ２においてＨＶＴＲＡＰ命令又はＨＶＣＡＬＬ命令が実行された場合には、ゲストＯＳの処理期間中に例外処理がなさる。より具体的には、仮想マシンＶＭ２では、ＨＶＴＲＡＰ命令又はＨＶＣＡＬＬ命令が実行されたことに伴い、パイプライン制御部１５の仮想マシン制御回路２０においてＨＶＣＡＬＬ実行権例外信号Ｓ４又はＨＶＴＲＡＰ実行権例外信号Ｓ５がイネーブル状態となる。そして、ＨＶＣＡＬＬ実行権例外信号Ｓ４又はＨＶＴＲＡＰ実行権例外信号Ｓ５がイネーブル状態となったことに応じてパイプライン制御信号生成回路２２が実行ユニット１６に復帰命令を実行するように命令フェッチ制御信号ＩＦＣ、命令デコード制御信号ＩＤＣ、レジスタ制御信号ＲＦＣ、及び、実行ユニット制御信号ＥＵＣを生成する。そして、仮想マシンＶＭ２において復帰命令が実行されることで、仮想マシンＶＭ２は仮想マシンモードを維持したまま処理をユーザーアプリケーションに復帰させる。
【００９６】
続いて、図１８に示した比較例について説明する。図１８に示す比較例では、半導体装置は、ＨＶＴＲＡＰ命令の実行権の管理及びハイパーバイザスタブプログラムを介したハイパーバイザプログラムの起動を行わない。そのため、比較例にかかる半導体装置では、仮想マシンＶＭ０〜ＶＭ２のいずれもがＨＶＴＲＡＰ命令を実行してハイパーバイザプログラムを呼び出すことができる。図１８に示す例では、仮想マシンＶＭ０がＨＶＴＲＡＰ命令を実行する。
【００９７】
そのため、図１８に示すように、比較例にかかる半導体装置では、アプリケーションが何らかの不具合によって仮想マシンＶＭ０がＨＶＴＡＲＰ命令を頻繁に実行するような動作を行った場合、当該ＨＶＴＲＡＰ命令によってネイティブモードに遷移することを防止することができない。また、このような頻繁なネイティブモードへの遷移が生じると、他の仮想マシンの処理がその都度停止され、半導体装置の処理能力が低下する問題がある。
【００９８】
上記説明より、実施の形態１にかかる半導体装置１では、パイプライン制御部１５が１つの仮想マシン上で実行される第１の特権プログラム（例えば、ハイパーバイザスタブプログラム）を実行する権限の有無を仮想マシン毎に定義する仮想マシン制御レジスタを有する。そして、パイプライン制御部１５は、仮想マシン制御レジスタを参照して、ハイパーバイザスタブプログラムに関する命令コード（例えば、ＨＶＣＡＬＬ命令）を発行した仮想マシンにハイパーバイザスタブプログラムの実行権限がある場合には、ハイパーバイザスタブプログラムの動作に基づき、ハードウェア資源を利用して動作する第２の特権プログラム（例えば、ハイパーバイザプログラム）に関する命令コードに基づく処理を実行ユニット１６に指示する。
【００９９】
これにより、実施の形態１にかかる半導体装置１は、ハイパーバイザプログラムがアプリケーションプログラムにより頻繁に呼び出される不具合が生じた場合においてもハイパーバイザスタブプログラムの動作によってハイパーバイザプログラムが直接呼び出されることを防止することができる。そして、このような動作により、実施の形態１にかかる半導体装置１ではネイティブモードへの遷移が頻繁に生じることを防止することができる。また、半導体装置１では、ネイティブモードへの遷移が頻繁に生じることにより仮想マシン間の干渉が生じる頻度を低減し、ソフトウェアの不具合による処理能力の低下を防止することができる。
【０１００】
また、実施の形態１にかかる半導体装置１では、仮想マシン内でハイパーバイザ特権を有するハイパーバイザスタブプログラムを実行することができる。そのため、このハイパーバイザスタブプログラムを実行する仮想マシン内で完結するハイパーバイザ特権が必要な動作が生じた場合には他の仮想マシンの動作を停止させることなくハイパーバイザ特権が必要な処理を完了させることができる。これにより、実施の形態１にかかる半導体装置１は、仮想マシンの動作が停止する頻度を少なくし、半導体装置全体の性能を向上させることができる。
【０１０１】
また、実施の形態１にかかる半導体装置１では、ハイパーバイザプログラムを呼び出すＨＶＴＲＡＰ命令と、ハイパーバイザスタブプログラムを呼び出すＨＶＣＡＬＬ命令との実行権限を仮想マシン毎に設定する。これにより、信頼性の低いアプリケーションを実行する仮想マシンに対してはハイパーバイザスタブプログラム及びハイパーバイザプログラムを呼び出すことを防止することができる。また、信頼性の高いアプリケーションを実行する仮想マシンに対してのみＨＶＴＲＡＰ命令の実行権限を与えることができる。このように、仮想マシン毎にＨＶＣＡＬＬ命令及びＨＶＣＡＬＬ命令の実行権限を設定することで信頼性の低いアプリケーションに対しては信頼性を向上させ、信頼性の高いアプリケーションに対してはハイパーバイザプログラムの呼び出しにかかるオーバーヘッドを削減することができる。
【０１０２】
また、半導体装置１では、仮想マシン制御レジスタのうちＨＶＣＡＬＬ命令の許可フラグＨＶＣＥ、ＨＶＴＲＡＰ命令の許可フラグＨＶＴＥ、ＨＶ特権フラグＨＶＰ、仮想マシン有効フラグＥＮの書き換えをハイパーバイザ特権レベルで動作するプログラムにのみ許可する。これにより、ユーザーモード等の信頼性の低い動作モードで動作するプログラムによりこれらの設定値が破壊されることを防止することができる。
【０１０３】
実施の形態２
実施の形態２では、ハイパーバイザ特権レベルよりも信頼性の低い実行権限レベルのプログラムに対してもハイパーバイザ特権レベルの動作を許可する実施例について説明する。そこで、実施の形態２にかかる半導体装置の仮想マシン制御レジスタの例を図１９に示す。
【０１０４】
図１９に示す例では、仮想マシンＶＭ１に対応する仮想マシン制御レジスタのＨＶ特権フラグが１（例えば、有効）に設定される。このＨＶ特権フラグが１である場合、図３の仮想マシン制御回路２０のＯＲ回路３２、３４の出力は、常に１になる。そのため、仮想マシンＶＭ１に対しては、ＨＶＴＲＡＰ許可フラグＨＶＴＥ及びＨＶＣＡＬＬ許可フラグＨＶＣＥが有効か無効かに関わらずＨＶＴＲＡＰ命令及びＨＶＣＡＬＬ命令の実行権限が与えられる。
【０１０５】
また、このＨＶ特権フラグＨＶＰが有効である場合、実施の形態２にかかる半導体装置は、ＨＶ特権フラグＨＶＰを参照して、例えば、スーパーバイザ特権レベルで動作するゲストＯＳにハイパーバイザ特権レベルのプログラムに対してのみアクセスが許可されるリソースへのアクセスを許可する。なお、実施の形態２にかかる半導体装置では、パイプライン制御信号生成回路２２がＨＶ特権フラグＨＶＰを参照することでゲストＯＳにおいてハイパーバイザ特権レベルのリソースに対するアクセスが生じた場合に例外処理することなく処理を継続する。
【０１０６】
このように、ゲストＯＳに対してハイパーバイザ特権を与えることで、実施の形態２にかかる半導体装置では、ＨＶＴＲＡＰ命令又はＨＶＣＡＬＬ命令を実行することなくハイパーバイザ特権レベルのプログラムのみが操作可能なリソースにアクセスを行うことができる。また、このようにスーパーバイザ特権レベルのプログラムにハイパーバイザ特権レベルを与えることでソフトウェアの切り替えが生じないため、半導体装置の処理能力を向上させることができる。
【０１０７】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、スレッドスケジューラ２１において、どのような手順でスレッドを選択するかについては、半導体装置１の仕様に応じて適宜選択しうる事項である。また、上記実施の形態では、実行ユニット１６が１つのシングルコアＣＰＵについて説明を行ったが、実行ユニットを含む演算回路を複数有するマルチコアＣＰＵにおいても本発明の技術を適用することができる。
【符号の説明】
【０１０８】
１  半導体装置
１０  プログラムカウンタ
１０ａ〜１０ｄ  スレッドプログラムカウンタ
１１  セレクタ
１２  命令メモリ
１３  命令バッファ
１３ａ〜１３ｄ  命令バッファ
１４  命令デコーダ
１５  パイプライン制御部
１６  実行ユニット
１６１  レジスタファイル
１６２  演算ユニット
１６３  システム制御命令実行部
１６４  ロードストアユニット
２０  仮想マシン制御回路
２１  スレッドスケジューラ
２２  パイプライン制御信号生成回路
３０  仮想マシン制御レジスタ群
３１  セレクタ
３２、３４  ＯＲ回路
３３、３５  ＡＮＤ回路
３６、３７  ＥｘＯＲ回路
３８  仮想マシン動作信号生成回路
４０  動作スレッド選択回路
４１  仮想マシン・スレッド対応表
４２  スケジュールヒント
Ｓ１  仮想マシン識別子
Ｓ２  ＨＶＣＡＬＬ実行通知信号
Ｓ３  ＨＶＴＲＡＰ実行通知信号
Ｓ４  ＨＶＣＡＬＬ実行権例外信号
Ｓ５  ＨＶＴＲＡＰ実行権例外信号
Ｓ６  実マシン動作信号
【図１】
2015228261.tif 000003
【図２】
2015228261.tif 000004
【図３】
2015228261.tif 000005
【図４】
2015228261.tif 000006
【図５】
2015228261.tif 000007
【図６】
2015228261.tif 000008
【図７】
2015228261.tif 000009
【図８】
2015228261.tif 000010
【図９】
2015228261.tif 000011
【図１０】
2015228261.tif 000012
【図１１】
2015228261.tif 000013
【図１２】
2015228261.tif 000014
【図１３】
2015228261.tif 000015
【図１４】
2015228261.tif 000016
【図１５】
2015228261.tif 000017
【図１６】
2015228261.tif 000018
【図１７】
2015228261.tif 000019
【図１８】
2015228261.tif 000020
【図１９】
2015228261.tif 000021
【図２０】
2015228261.tif 000022
【図２１】
2015228261.tif 000023