特開2015-228261(P2015-228261A)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ルネサスエレクトロニクス株式会社の特許一覧
<>
  • 特開2015228261-半導体装置 図000003
  • 特開2015228261-半導体装置 図000004
  • 特開2015228261-半導体装置 図000005
  • 特開2015228261-半導体装置 図000006
  • 特開2015228261-半導体装置 図000007
  • 特開2015228261-半導体装置 図000008
  • 特開2015228261-半導体装置 図000009
  • 特開2015228261-半導体装置 図000010
  • 特開2015228261-半導体装置 図000011
  • 特開2015228261-半導体装置 図000012
  • 特開2015228261-半導体装置 図000013
  • 特開2015228261-半導体装置 図000014
  • 特開2015228261-半導体装置 図000015
  • 特開2015228261-半導体装置 図000016
  • 特開2015228261-半導体装置 図000017
  • 特開2015228261-半導体装置 図000018
  • 特開2015228261-半導体装置 図000019
  • 特開2015228261-半導体装置 図000020
  • 特開2015228261-半導体装置 図000021
  • 特開2015228261-半導体装置 図000022
  • 特開2015228261-半導体装置 図000023
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】特開2015-228261(P2015-228261A)
(43)【公開日】2015年12月17日
(54)【発明の名称】半導体装置
(51)【国際特許分類】
   G06F 9/48 20060101AFI20151120BHJP
   G06F 9/46 20060101ALI20151120BHJP
【FI】
   G06F9/46 452H
   G06F9/46 350
   G06F9/46 310H
【審査請求】有
【請求項の数】11
【出願形態】OL
【全頁数】26
(21)【出願番号】特願2015-182956(P2015-182956)
(22)【出願日】2015年9月16日
(62)【分割の表示】特願2012-82324(P2012-82324)の分割
【原出願日】2012年3月30日
(71)【出願人】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】100103894
【弁理士】
【氏名又は名称】家入 健
(72)【発明者】
【氏名】安達 浩次
(72)【発明者】
【氏名】鈴木 均
(57)【要約】
【課題】従来の半導体装置は、プログラムの動作に起因して処理能力が低下する。
【解決手段】複数の仮想マシンが動作する半導体装置において、複数の仮想マシンの命令により呼び出される第1の特権プログラムと、複数の仮想マシン及び第1の特権プログラムの命令により呼び出される第2の特権プログラムと、命令コードの実行の順序を制御するパイプライン制御部15と、を備え、パイプライン制御部15は複数の仮想マシン各々に対し、第1の特権プログラムの呼び出し権限を示す第1フラグと、第2の特権プログラムの呼び出し権限を示す第2フラグを格納したレジスタを備え、パイプライン制御部15は、前記命令コードのデコード結果と、第1フラグ及び第2フラグの値に基づいて、実行ユニットに演算する命令の処理指示を行う。
【選択図】図1
【特許請求の範囲】
【請求項1】
複数の仮想マシンが動作する半導体装置において、
前記複数の仮想マシンの命令により呼び出される第1の特権プログラムと、
前記複数の仮想マシン及び前記第1の特権プログラムの命令により呼び出される第2の特権プログラムと、
命令コードの実行の順序を制御するパイプライン制御部と、を備え、
前記パイプライン制御部は前記複数の仮想マシン各々に対し、前記第1の特権プログラムの呼び出し権限を示す第1フラグと、前記第2の特権プログラムの呼び出し権限を示す第2フラグを格納したレジスタを備え、
前記パイプライン制御部は、前記命令コードのデコード結果と、前記第1フラグ及び前記第2フラグの値に基づいて、実行ユニットに演算する命令の処理指示を行う
半導体装置。
【請求項2】
前記パイプライン制御部は、前記第2の特権プログラムを呼び出す前記命令を発行した前記仮想マシンに対応する前記第2フラグが実行権限なしを示す場合には、前記第2の特権プログラムに関する前記命令コードを発行した前記仮想マシンに実行権例外が発生したと判断して、前記第2の特権プログラムに関する前記命令コードを発行した前記仮想マシンに例外処理を行うように指示を行う
請求項1に記載の半導体装置。
【請求項3】
前記パイプライン制御部は、前記第2の特権プログラムを呼び出す前記命令を発行した前記仮想マシンに対応する前記第2フラグが実行権限ありを示し、
前記第1フラグが実行権限ありを示す場合には、動作権限を前記第1の特権プログラムに移行し前記第1の特権プログラムを実行する
請求項1に記載の半導体装置。
【請求項4】
前記パイプライン制御部は、前記第2の特権プログラムを呼び出す前記命令を発行した前記仮想マシンに対応する前記第2フラグが実行権限ありを示し、
前記第1フラグが実行権限なしを示す場合には、前記第2の特権プログラムに関する前記命令を発行した前記仮想マシンに実行権例外が発生したと判断して、前記第2の特権プログラムに関する前記命令コードを発行した前記仮想マシンに例外処理を行うように指示を行う請求項1に記載の半導体装置。
【請求項5】
前記半導体装置は、
前記第2の特権プログラムを実行することで、前記第2の特権プログラムを呼び出した呼び出し元プログラムの指示した要求の正当性を判断し、
前記パイプライン制御部は、
前記呼び出し元プログラムの指示した要求が正当なものである場合に動作権限を前記第1の特権プログラムに移行し前記第1の特権プログラムを実行する
請求項1に記載の半導体装置。
【請求項6】
前記レジスタは、第3フラグを更に有し、前記第3フラグは、前記仮想マシン毎に仮想マシンの動作を有効とするか無効とするかを示すフラグである
請求項1に記載の半導体装置。
【請求項7】
前記レジスタは、第4フラグを更に有し、
前記第4フラグは、仮想マシンにハイパーバイザプログラムのみに操作可能なリソースへのアクセスを許可するか否かを示すフラグである
請求項6に記載の半導体装置。
【請求項8】
前記パイプライン制御部は、更に前記第3フラグ及び前記第4フラグの状態に基づいて実行ユニットに演算する命令の処理指示を行う
請求項7に記載の半導体装置。
【請求項9】
前記第1の特権プログラムの起動時には、前記仮想マシン以外の他の仮想マシンを止め、前記第1の特権プログラムを呼び出す前記命令を発行した前記仮想マシンか実行ユニットを占有してプログラムを実行する
請求項1に記載の半導体装置。
【請求項10】
前記前記第1の特権プログラムの起動時には、
前記第2の特権プログラムによる処理によって、前記第2の特権プログラムに関する前記命令を発行する前記仮想マシン以外の他の仮想マシンの動作を監視し、
前記パイプライン制御部は、
前記他の仮想マシンの動作を停止可能な状態まで前記第1の特権プログラムに関する前記命令に基づく処理を前記実行ユニットに指示することを待つ
請求項9に記載の半導体装置。
【請求項11】
前記レジスタは、前記第1の特権プログラム及び第2の特権プログラムのみが書き換え可能なレジスタである
請求項1に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は半導体装置に関し、例えばパイプライン処理により複数のプログラムを並列的に実行可能な半導体装置に関する。
【背景技術】
【0002】
近年、半導体装置では、複数のプログラムを単一のプロセッサで並列的に実行するマルチスレッドプロセッサが多く提案されている。このようなマルチスレッドプロセッサでは、それぞれが独立した命令流を生成する複数のスレッドを有する。一方、仮想化と呼ばれる1つのハードウェアを複数のハードウェアに見せる技術がある。この仮想化技術は、VMM(Virtual Machine Monitor:仮想マシンモニタ)或いはハイパーバイザと呼ばれる管理ソフトウェアがOS(Operating System)とハードウェア(プロセッサやIO)との間に入ることによって実現される。図20に仮想化技術を適用したシステムの階層構造を示す。図20に示すように、仮想化技術を適用したシステムは、ハードウェアとゲストOSとの間にハイパーバイザプログラムが介在する構成となる。マルチスレッドプロセッサにて仮想マシンを動作させる場合、スレッドを論理的に定義される複数の仮想マシンのいずれかに割り当てる。そして、マルチスレッドプロセッサでは、ハードウェアスレッド上で仮想マシンを実行することにより、仮想マシンの並列実行を実現する。図21に仮想マシンとスレッドとの対応関係を示す図を示す。図21に示す例では、仮想マシンVM0〜VM2にそれぞれ2つのスレッドが割り当てられる。
【0003】
また、プロセッサ上で実行するプログラムには、アクセスする資源の重要度に応じて特権レベルが設定される。また、ソフトウェアの品質は、開発管理、プログラミング、検証などの複数の要因にて決定される。そして、プロセッサ上で実行するプログラムのうち高い信頼性レベルが要求されるプログラムは、その動作がより詳細に把握できるように厳格な管理の下に開発される。つまり、プログラムの信頼性レベルは、どのような開発工程を経て開発されたものかによって決められる。そして、例えば、高い信頼性レベルのプログラムに対しては高い特権レベルが必要なリソースへのアクセスを許可し、低い信頼性レベルのプログラムに対しては高い特権レベルが必要なリソースへのアクセスを不許可とする等の制御が行われる。
【0004】
しかし、このようなプロセッサにおいても、低い特権レベルが設定されるユーザーアプリケーション又はゲストOSからの求めに応じて、アクセスに高い特権レベルを要するリソースへの処理を行う必要がある。このような場合、プロセッサは、ユーザーアプリケーション又はゲストOSからの求めに応じてハイパーバイザプログラムを起動して、ハイパーバイザプログラムによって、求められた処理を行う。そのため、ユーザーアプリケーション又はゲストOSからアクセスに高い特権レベルが要求されるリソースへのアクセスが要求された場合、プログラムの切り換えに時間を要し、プロセッサの処理能力が低下する問題がある。
【0005】
そこで、このようなプログラムの切り換えに要する時間を削減する技術が特許文献1に開示されている。特許文献1では、プロセッサ上にゲストOSのための特権レジスタを有する。そして、高い信頼性が要求されるリソースへのアクセスが生じた場合に、ゲストOSの処理のみで要求をみたすことができる場合にはハイパーバイザプログラムを起動することなく処理を完了する。これにより、特許文献1では、ハイパーバイザプログラムが起動する頻度を低減することができる。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2005−56017号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、マルチスレッドプロセッサにて動作する複数の仮想マシンでは、該当の複数の仮想マシンが並列に動作し得るため、高い特権レベルが設定されるハイパーバイザプログラムによるアクセスが生じた場合、全ての仮想マシンの動作を一旦中断しなければならない。そのため、ハイパーバイザプログラムによる処理が必要なアクセスが頻発した場合には、仮想マシン間の干渉が頻発し他の仮想マシンの動作が阻害される問題がある。なお、特許文献1は、シングルスレッド動作のプロセッサに関するものであり、複数の仮想マシンが並列に動作することは起こりえず仮想マシン間の干渉の問題は解決できない。
【課題を解決するための手段】
【0008】
一実施の形態によれば、半導体装置は、複数の仮想マシンが動作する半導体装置であって、前記複数の仮想マシンの命令により呼び出される第1の特権プログラムと、前記複数の仮想マシン及び前記第1の特権プログラムの命令により呼び出される第2の特権プログラムと、命令コードの実行の順序を制御するパイプライン制御部と、を備え、前記パイプライン制御部は前記複数の仮想マシン各々に対し、前記第1の特権プログラムの呼び出し権限を示す第1フラグと、前記第2の特権プログラムの呼び出し権限を示す第2フラグを格納したレジスタを備え、前記パイプライン制御部は、前記命令コードのデコード結果と、前記第1フラグ及び前記第2フラグの値に基づいて、実行ユニットに演算する命令の処理指示を行う。
【0009】
一実施の形態にかかる半導体装置によれば、レジスタを参照して、1つの仮想マシン上で動作する第1の特権プログラムを呼び出したプログラムが第1の特権プログラムの実行権限を有するか否かを確認する。そして、半導体装置は、当該仮想マシンに第1の特権プログラムを実行する権限がある場合にのみ、第2の特権プログラムを実行する。これにより、半導体装置は、第2の特権プログラムが頻繁に呼び出されることを防止することができ、仮想マシン間の干渉により他の仮想マシンの処理能力が低下することを防止することができる。
【発明の効果】
【0010】
一実施の形態にかかる半導体装置によれば、一の仮想マシンの動作により他の仮想マシンの処理能力が低下することを防止することができる。
【図面の簡単な説明】
【0011】
図1】実施の形態1にかかる半導体装置のブロック図である。
図2】実施の形態1にかかるパイプライン制御部のブロック図である。
図3】実施の形態1にかかる仮想マシン制御回路のブロック図である。
図4】実施の形態1にかかる半導体装置の仮想マシン設定レジスタ群の概略図である。
図5】実施の形態1にかかる仮想マシン設定レジスタの実例である。
図6】実施の形態1にかかる仮想マシン設定レジスタの実例である。
図7】実施の形態1にかかる仮想マシン制御回路の動作を示すタイミングチャートである。
図8】実施の形態1にかかるスレッドスケジューラのブロック図である。
図9】実施の形態1にかかるスレッドスケジューラの動作を示すフローチャートである。
図10】実施の形態1にかかる半導体装置において実行が許可される命令と、許可された命令を実行した場合のソフトウェア階層上の状態遷移と、の一例を示す図である。
図11】実施の形態1にかかる半導体装置でHVTRAP命令を実行し場合のパイプライン制御部の動作を示すフローチャートである。
図12】実施の形態1にかかる半導体装置においてHVCALL命令によるハイパーバイザスタブプログラムの起動処理する場合の手順を示すフローチャートである。
図13】実施の形態1にかかる半導体装置におけるハイパーバイザスタブプログラムの動作を示すフローチャートである。
図14】実施の形態1にかかる半導体装置の動作を示すシーケンス図である。
図15】実施の形態1にかかる半導体装置において不正なハイパーバイザプログラムの呼び出しがあった場合の動作を示すシーケンス図である。
図16】実施の形態1にかかる半導体装置において不正なハイパーバイザスタブプログラムの呼び出しがあった場合の動作を示すシーケンス図である。
図17】実施の形態1にかかる半導体装置において実行権限が与えられていない仮想マシンにおいてハイパーバイザスタブプログラム又はハイパーバイザプログラムの呼び出しがあった場合の動作を示すシーケンス図である。
図18】実施の形態1にかかるパイプライン制御部を有していないプロセッサの動作を示すシーケンス図である。
図19】実施の形態2にかかる半導体装置の仮想マシン設定レジスタ群の概略図である。
図20】仮想化技術を適用した半導体装置において実現されるソフトウェア階層の一例を示す図である。
図21】仮想化技術を適用した半導体装置におけるスレッドと仮想マシンの対応関係を示す図である。
【発明を実施するための形態】
【0012】
実施の形態1
以下、図面を参照して実施の形態について説明する。まず、実施の形態にかかる半導体装置では、仮想マシンによる情報処理を行うが、一般的に、仮想マシンはソフトウェアの機能の一部として実装される。しかし、実施の形態にかかる半導体装置では、仮想マシンによるプログラムの実行をハードウェアの一機能として実装するものである。このように、ハードウェアの一機能として実現された仮想マシンによってプログラムを実行するものをハードウェアマルチスレッドプロセッサと称す。また、以下で説明する実施の形態では、ハードウェアマルチスレッドプロセッサを半導体装置の一例として説明する。しかし、実施の形態は、ハードウェアマルチスレッドプロセッサに限らず、複数のスレッドを並列的に実行可能なプロセッサであれば適用可能である。
【0013】
実施の形態1にかかる半導体装置1のブロック図を図1に示す。図1に示すように、半導体装置1は、プロセッサエレメントPE、データメモリ、バスBUSを有する。そして、半導体装置1では、プロセッサエレメントPEと、データメモリを含む周辺装置がバスBUSを介して相互に接続される。なお、図1では、周辺装置としてデータメモリを示したが、半導体装置は、当然、図示していないタイマ等の他の周辺装置を有する。
【0014】
プロセッサエレメントPEは、プログラムカウンタ10、セレクタ11、命令メモリ12、命令バッファ13、命令デコーダ14、パイプライン制御部15、実行ユニット16を有する。
【0015】
プログラムカウンタ10は、スレッドプログラムカウンタ10a〜10dを有する。スレッドプログラムカウンタ10a〜10dは、それぞれ、命令バッファ13に命令メモリ12からフェッチする命令コードの格納場所を示すプログラムカウンタ値を生成する。実施の形態1にかかる半導体装置1は、4つのハードウェアスレッドを備えているため、図1では、プログラムカウンタ10に4つのスレッドプログラムカウンタを示した。なお、スレッドプログラムカウンタ10a〜10dは、命令フェッチ制御信号IFCに応じてプログラムカウンタ値を増加又は変更する。
【0016】
セレクタ11は、スレッドプログラムカウンタ10a〜10dのいずれか1つが生成するプログラムカウンタ値を命令フェッチ制御信号IFCに応じて選択して命令メモリ12に出力する。命令メモリ12は、セレクタ11が出力したプログラムカウンタ値に対応する領域に格納された命令コードを命令バッファ13に出力する。
【0017】
命令バッファ13は、半導体装置1で実行されるスレッドに対応して4つの命令バッファ13a〜13dを有する。そして、命令バッファ13は、命令デコード制御信号IDCに応じて命令バッファ13a〜13dのいずれか1つに命令メモリ12が出力した命令コードを格納する。また、命令バッファ13は、格納されている命令コードの状況を示す情報を含むパイプラインステータス信号PST1を出力する。なお、命令バッファ13a〜13dは、いずれのFIFO(First In First Out)型のメモリである。
【0018】
半導体装置1では、プログラムカウンタ10、セレクタ11及び命令バッファ13を用いて4つの独立した命令流を生成する。このように、独立した命令流を生成する回路構成を以下ではハードウェアスレッドと称す。そして、半導体装置1では、複数のハードウェアスレッドを論理的に仮想マシンに割り当てることで複数の仮想マシンを定義する。つまり、実施の形態1にかかる半導体装置1において定義される複数の仮想マシンは、それぞれがプログラムに対応した命令流に属する命令コードを発行する。
【0019】
命令デコーダ14は、命令コードをデコードして命令情報を生成する。より具体的には。命令デコーダ14は、スレッド選択信号TSELに応じて命令バッファ13a〜13dのいずれか1つから命令コードを読み出し、読み出した命令コードをデコードして命令情報を生成し、デコード結果DRとして当該命令情報を出力する。
【0020】
パイプライン制御部15は、パイプライン処理において処理する命令コードの順序を制御する。より具体的には、パイプライン制御部15は、デコード結果DRに基づき実行ユニット16に具体的な演算指示を行う(例えば、実行ユニット制御信号EUCを出力する)。また、パイプライン制御部15は、命令バッファ13から出力されるパイプラインステータス信号PST1、実行ユニット16から出力されるパイプラインステータス信号PST2と、命令実行情報EXRとに応じてスレッド選択信号TSEL、命令デコード制御信号IDC、及び、命令フェッチ制御信号IFCを生成する。ここで、パイプラインステータス信号は、パイプラインにおいて処理されている命令の実行状況を示すものであって、キャッシュミスヒットの発生の有無、例外処理の発生の有無、分岐条件を満たしたか否か等の情報を含む。
【0021】
また、パイプライン制御部15は、1つの仮想マシン上で実行される第1の特権プログラム(例えば、ハイパーバイザスタブプログラム)を実行する権限の有無を仮想マシン毎に定義するレジスタを有する。そして、パイプライン制御部15は、レジスタを参照して、ハイパーバイザスタブプログラムに関する命令コードを発行した仮想マシンにハイパーバイザスタブプログラムの実行権限がある場合には、ハイパーバイザスタブプログラムの動作に基づき、ハイパーバイザプログラムに関する命令コードに基づく処理を実行ユニット16に指示する。なお、ハイパーバイザスタブプログラムは、1つの仮想マシンに割り当てられた実行時間内で実行されるものであり、ハイパーバイザプログラムは、第2のプログラムは、実行ユニット16の実行時間を占有して実行されるものである。
【0022】
一方、パイプライン制御部15は、ハイパーバイザスタブプログラムに関する命令コードを発行した仮想マシンに第1の特権プログラムの実行権限がない場合には、ハイパーバイザスタブプログラムに関する命令コードを発行した仮想マシンに実行権例外が発生したと判断する。そして、パイプライン制御部15は、ハイパーバイザスタブプログラムに関する命令コードを発行した仮想マシンに例外処理を行うように指示を行う。具体的には、パイプライン制御部15は、命令デコード制御信号IDC、命令フェッチ制御信号IFC等の信号を出力することによりゲストOS(Operating System)の処理として例外処理の実行指示を行う。なお、ゲストOSについての詳細は、後述する。
【0023】
また、実施の形態1にかかるパイプライン制御部15のレジスタは、仮想マシン毎にハイパーバイザプログラムの実行権限の有無を定義する値を含む。そして、パイプライン制御部15は、レジスタを参照して、ハイパーバイザプログラムに関する命令コードを発行した仮想マシンにハイパーバイザプログラムの実行権限がある場合には、ハイパーバイザプログラムの動作を継続するように命令コードに基づく処理を実行ユニットに指示する。
【0024】
一方、パイプライン制御部15は、ハイパーバイザプログラムに関する命令コードを発行した仮想マシンにスーパーバイザプログラムの実行権限がない場合には、ハイパーバイザプログラムに関する命令コードを発行した仮想マシンに実行権例外が発生したと判断する。そして、パイプライン制御部15は、ハイパーバイザプログラムに関する命令コードを発行した仮想マシンに例外処理を行うように指示を行う。具体的には、パイプライン制御部15は、命令デコード制御信号IDC、命令フェッチ制御信号IFC等の信号を出力することによりゲストOSの処理として例外処理の実行指示を行う。
【0025】
このパイプライン制御部15のさらに詳細な説明は後述する。
【0026】
実行ユニット16は、パイプライン処理により命令情報に基づく演算を行う。図1に示す例では、実行ユニット16は、レジスタファイル161、演算ユニット162、システム制御命令実行部163、ロードストアユニット164を有する。
【0027】
レジスタファイル161は、演算ユニット162で行われる演算で用いられるデータが格納される。このレジスタファイル161は、ハードウェアスレッド毎に独立したデータ格納領域を有する。なお、レジスタファイル161は、レジスタ制御信号RFCに基づきデータの書き込み場所及び読み出し場所が指定される。
【0028】
演算ユニット162は、パイプライン制御部15が出力する実行ユニット制御信号EUCに基づき演算を実行する。演算ユニット162では、演算として加算・減算・乗算・除算等の演算を行う。また、演算ユニット162は、ライトバック信号WBにより演算結果をレジスタファイル161に書き込む。また、演算ユニット162は、命令の実行状態を示すパイプラインステータス信号PST2を出力する。
【0029】
システム制御命令実行部163は、実行ユニット制御信号EUCがシステム制御命令に関する実行指示であった場合に、当該指示に基づく処理を行う。例えば、システム制御命令実行部163は、例えば、特権レベルのプログラムの呼び出し命令であるHVTRAP命令や、HVCALL命令等の命令に関する処理を行う。また、システム制御命令実行部163は、処理結果を命令実行情報EXRとして出力する。この命令実行情報EXRは、実行した命令がどのような処理内容であったかを示す信号であって、例えば、処理した命令を発行した仮想マシンを示す仮想マシン識別子、HVTRAP命令を実行したことを示すHVTRAP命令信号、HVCALL命令を実行したことを示すHVCALL命令信号、HVCALL命令によって呼び出されたハイパーバイザスタブプログラムの実行状態を示すHVスタブ実行状態信号が含まれる。また、システム制御命令実行部163は、命令の実行状態を示すパイプラインステータス信号PST2を出力する。なお、HVTRAP命令は、ハイパーバイザプログラムを呼び出すための命令であって、HVCALL命令は、ハイパーバイザスタブプログラムの呼び出すための命令である。
【0030】
ロードストアユニット164は、実行ユニット制御信号EUCに基づき、データメモリ等の他のメモリからのデータの読み出し処理(例えば、ロード処理)、及び、レジスタファイルに格納されているデータをデータメモリ等の他のメモリへの書き込み処理(例えば、ストア処理)を行う。また、ロードストアユニット164は、命令の実行状態を示すパイプラインステータス信号PST2を出力する。
【0031】
実施の形態1にかかる半導体装置1は、ユーザープログラム(例えば、ユーザーアプリケーション)或いはゲストOSにより指示されたアクセスをハイパーバイザプログラムによってエミュレーションする場合に、ハイパーバイザスタブプログラムを介してハイパーバイザプログラムを起動する。
【0032】
実施の形態1にかかる半導体装置1は、ハイパーバイザスタブプログラムを実行することで、ハイパーバイザスタブプログラムを呼び出した呼び出し元プログラムの正当性を判断する。そして、パイプライン制御部15は、呼び出し元プログラムの指示した要求が正当なものである場合にハイパーバイザスタブプログラムの動作に基づきハイパーバイザプログラムに関する命令コードに基づく処理を実行ユニット16に指示する。
【0033】
また、実施の形態1にかかる半導体装置1は、ハイパーバイザスタブプログラムの動作によって他の仮想マシン(例えば、ハイパーバイザスタブプログラムに関する命令コードを発行する仮想マシン以外の仮想マシン)の動作を監視する。そして、パイプライン制御部15は、他の仮想マシンの動作を停止可能な状態までハイパーバイザプログラムに関する命令コードに基づく処理を実行ユニット16に指示することを待つ。
【0034】
続いて、パイプライン制御部15の詳細について説明する。パイプライン制御部15のブロック図を図2に示す。図2に示すように、パイプライン制御部15は、仮想マシン制御回路20、スレッドスケジューラ21、パイプライン制御信号生成回路22を有する。
【0035】
仮想マシン制御回路20は、プロセッサエレメントPE上で定義された仮想マシンの動作状態を制御する。より具体的には、仮想マシン制御回路20は、複数の仮想マシンのいずれかにおいてHVCALL命令又はHVTRAP命令の実行が開始されたか否かを示す信号S1〜S5を出力する。また、仮想マシン制御回路20は、プロセッサエレメントPEが、複数の仮想マシンにより並列的にプログラムを実行する仮想マシンモードであるか、実行ユニット16の実行時間を占有するようにプログラムを実行するネイティブモードであるかを示す信号S6を出力する。仮想マシン制御回路20の詳細は、後述する。なお、以下では、信号S1を仮想マシン識別子、信号S2をHVCALL実行通知信号、信号S3をHVTRAP実行通知信号、信号S4をHVCALL実行権例外信号、信号S5をHVTRAP実行権例外信号、信号S6を実マシン動作信号と称す。
【0036】
スレッドスケジューラ21は、複数あるハードウェアスレッドの中から実行ユニット16に投入する命令をスケジューリングする。より具体的には、スレッドスケジューラ21は、実マシン動作信号S6、内部に予め設定されたスケジュール及びパイプラインステータス信号PST(パイプラインステータス信号PST1、PST2を含む信号)に基づき次に実行ユニット16に命令コードを発行するハードウェアスレッドを決定する。そして、スレッドスケジューラ21は、決定したハードウェアスレッドを示すスレッド選択信号TSELを出力する。
【0037】
パイプライン制御信号生成回路22は、スレッド選択信号TSEL、パイプラインステータス信号PST、仮想マシン識別子S1、HVCALL実行通知信号S2、HVTRAP実行通知信号S3、HVCALL実行権例外信号S4、HVTRAP実行権例外信号S5及びデコード結果DR等の信号に基づきパイプラインの制御を行う。パイプライン制御信号生成回路22は、パイプラインの制御を行うに当たり、命令フェッチ制御信号IFC、命令デコード制御信号IDC、レジスタ制御信号RFC、実行ユニット制御信号EUCを生成する。命令フェッチ制御信号IFCは、次に命令コードをフェッチするハードウェアスレッドを指定する信号である。命令デコード制御信号IDCは、次にパイプラインに投入する命令コードを指定する信号である。レジスタ制御信号RFCは、実行ユニット16が演算を行う場合に用いる値が格納されているレジスタファイルの位置及び演算後の値を書き込むレジスタファイルの位置を示す信号である。実行ユニット制御信号EUCは、実行ユニット16でどのような処理を行うかを示す信号である。
【0038】
続いて、仮想マシン制御回路20の詳細について説明する。仮想マシン制御回路20の詳細なブロック図を図3に示す。図3に示すように、仮想マシン制御回路20は、仮想マシン制御レジスタ群30、セレクタ31、OR回路32、34、AND回路33、35、ExOR回路36、37、仮想マシン動作信号生成回路38を有する。
【0039】
仮想マシン制御レジスタ群30は、仮想マシンごとに第1の特権プログラム(例えば、ハイパーバイザスタブプログラム)及び第2の特権プログラム(例えば、ハイパーバイザプログラム)を実行する権限を定義するレジスタ(以下、仮想マシン制御レジスタと称す)を複数有する。また、仮想マシン制御レジスタは、仮想マシン毎に仮想マシンの動作を有効とするか無効とするかを示す仮想マシン有効フラグと、仮想マシンにハイパーバイザプログラムのみに操作可能なリソースへのアクセスを許可するか否かを示すHV特権フラグと、を含む。この仮想マシン制御レジスタ群30の詳細については、後述する。
【0040】
セレクタ31は、複数の仮想マシン制御レジスタのいずれか1つを仮想マシン識別子に応じて選択し、選択した仮想マシン制御レジスタに格納された値を出力する。なお、仮想マシン識別子は、命令実行情報EXRに含まれる信号である。
【0041】
OR回路32は、仮想マシン制御レジスタに含まれるHVCALL許可フラグHVCEとHV特権フラグHVPとの論理和演算結果を出力する。AND回路33は、OR回路32の出力とHVCALL命令信号との論理積演算結果を出力する。そして、AND回路33の出力がHVCALL実行通知信号S2となる。ここで、HVCALL実行通知信号S2は、HVCALL許可フラグHVCEがイネーブル状態(例えば、1)であるときにHVCALL命令信号が実行通知状態(例えば、1)となったときに実行状態(例えば、1)を示す。一方、HVCALL実行通知信号S2は、HV特権フラグHVPがディスイネーブル状態(例えば、0)であり、HVCALL許可フラグHVCEがディスイネーブル状態(例えば、0)であるときにHVCALL命令信号が実行通知状態(例えば、1)となっても未実行状態(例えば、0)を示す。
【0042】
OR回路34は、仮想マシン制御レジスタに含まれるHVTRAP許可フラグHVTEとHV特権フラグHVPとHVスタブ実行状態信号との論理和演算結果を出力する。AND回路35は、OR回路34の出力とHVTRAP命令信号との論理積演算結果を出力する。そして、AND回路35の出力がHVTRAP実行通知信号S3となる。ここで、HVTRAP実行通知信号S3は、HVTRAP許可フラグHVTEがイネーブル状態(例えば、1)であるときにHVTRAP命令信号が実行通知状態(例えば、1)となったときに実行状態(例えば、1)を示す。
【0043】
一方、HVTRAP実行通知信号S3は、HV特権フラグHVPがディスイネーブル状態であり、かつ、HVTRAP許可フラグHVTEがディスイネーブル状態(例えば、0)であり、さらにHVスタブ実行状態信号が未実行状態(例えば、0)であるときにHVTRAP命令信号が実行通知状態(例えば、1)となっても未実行状態(例えば、0)を示す。
【0044】
さらに、HVTRAP実行通知信号S3は、HV特権フラグHVPがディスイネーブル状態(例えば、0)であり、かつ、HVTRAP許可フラグHVTEがディスイネーブル状態(例えば、0)であるときにHVTRAP命令信号が未実行通知状態(例えば、0)であっても、HVスタブ実行状態信号が実行状態(例えば、1)であれば、実行状態(例えば、1)を示す。つまり、HVTRAP実行通知信号S3は、ゲストOSによりHVTRAP命令が発行された場合と、ゲストOSによりHVCALL命令が発行されたことに伴いハイパーバイザスタブプログラムが実行された結果としてHVTRAP命令が実行された場合に実行状態となる。
【0045】
ExOR回路36は、HVCALL実行信号とHVCALL実行通知信号S2との排他的論理和演算結果をHVCALL実行権例外信号S4として出力する。つまり、HVCALL実行権例外信号S4は、HVCALL命令の実行権限がない仮想マシンがHVCALL命令を実行した場合にイネーブル状態(例えば、1)となる。ExOR回路37は、HVTRAP実行信号とHVTRAP実行通知信号S3との排他的論理和演算結果をHVTRAP実行権例外信号S5として出力する。つまり、HVTRAP実行権例外信号S4は、HVTRAP命令の実行権限がない仮想マシンがHVTRAP命令を実行した場合にイネーブル状態(例えば、1)となる。
【0046】
仮想マシン動作信号生成回路38は、HVTRAP実行通知信号S3及び仮想マシン制御レジスタ群30に含まれる仮想マシン制御レジスタ中のシングルスレッド動作ビットMTに基づき実マシン動作信号S6を生成する。なお、シングルスレッド動作ビットMTについての詳細は後述する。
【0047】
ここで、実マシン動作信号S6は、仮想マシンが無効状態であって、いずれか1つのハードウェアスレッドにより実行ユニット16の実行時間が占有される状態であるときにイネーブル状態(例えば、1)になる信号である。例えば、実施の形態1にかかる半導体装置1では、ハイパーバイザプログラムを実行する際に実マシン動作信号S6がイネーブル状態となる。
【0048】
続いて、仮想マシン制御レジスタ群30について詳細に説明する。仮想マシン制御レジスタ群30に含まれる仮想マシン制御レジスタの概略図を図4に示す。図4に示すように、仮想マシン制御レジスタ群30には、定義する仮想マシンの数に応じた仮想マシン制御レジスタが設けられる。図4に示す例では、1つの仮想マシンに対応して2つのレジスタが用いられる。そして、仮想マシン制御レジスタは、それぞれ仮想マシン有効フラグEN、HV特権フラグHVP、HVTRAP許可フラグHVTE、HVCALL許可フラグVHCEを有する。これらのフラグは、値が1である場合に当該フラグが有効な状態を示し、値が0である場合に当該フラグが無効な状態を示す。
【0049】
また、実施の形態1にかかる半導体装置1では、図4に示した仮想マシン制御レジスタは、他の設定を格納するレジスタの一部として実装される。そこで、仮想マシン制御レジスタの実例について説明する。図5に仮想マシン制御レジスタの設定値のうち仮想マシン有効フラグENが格納されるレジスタの概略図を示す。
【0050】
図5に示すレジスタは、32ビットのデータ領域を有する。そして、図5に示すレジスタでは、31ビット目のフィールドに仮想マシン有効フラグENが格納される。また、この仮想マシン有効フラグENは、プロセッサがHV特権(例えば、ハイパーバイザ特権)を有し、かつ、仮想マシンに関する情報群(例えば、仮想マシンコンテキストVC)に対して処理を行うモードにおいて書き込みと読み込みが許可される。また、この仮想マシン有効フラグENは、プロセッサがHV特権(例えば、ハイパーバイザ特権)を有し、かつ、仮想マシンコンテキストVCに対して処理を行うモード以外のモードで動作する場合には読み込みのみが許可される。さらに、仮想マシン有効フラグENは、プロセッサの全体動作に関する情報群(例えば、ネイティブコンテキスト)においては、初期値が1であり、仮想マシンコンテキストでは初期値が0である。
【0051】
また、図5に示すレジスタには、30ビット目のフィールドにマルチスレッド動作ビットMTが格納される。このマルチスレッド動作ビットMTは、プロセッサがHV特権(例えば、ハイパーバイザ特権)を有しているか否かに関わらず書き込みと読み込みが許可される。また、マルチスレッド動作ビットMTは、プロセッサが仮想マシンモードからネイティブモードに移行するときに1から0に書き換えられ、ネイティブモードから仮想マシンモードに移行するときに0から1に書き換えられる。また、このマルチスレッド動作ビットMTの書き換えはプロセッサ上で動作するプログラムの動作に基づき行われる。なお、図5に示したレジスタでは、他の設定値を含むが、仮想マシン制御回路20の動作には直接影響を及ぼすものではないため、ここでは説明を省略する。
【0052】
また、図6に仮想マシン制御レジスタの設定値のうちHV特権フラグHVP、HVCALL許可フラグHVCE、HVTRAP許可フラグHVTEを含むレジスタの概略図を示す。図6に示すレジスタは、32ビットのデータ領域を有する。そして、図6に示すレジスタは、2ビット目のフィールドにHV特権フラグHVPが格納され、1ビット目のフィールドにHVCALL許可フラグHVCEが格納され、0ビット目のフィールドにHVTRAP許可フラグHVTEが格納される。また、これらフラグは、プロセッサがハイパーバイザ特権を有し、かつ、仮想マシンコンテキストVCに対して処理を行うモードにおいて書き込みと読み込みが許可される。また、これらフラグは、プロセッサがハイパーバイザ特権を有し、かつ、仮想マシンコンテキストVCに対して処理を行うモード以外のモードで動作する場合には読み込みのみが許可される。さらに、これらフラグは、プロセッサの全体動作に関する情報群(例えば、ネイティブコンテキスト)においては、初期値が1であり、仮想マシンコンテキストでは初期値が0である。なお、図6に示したレジスタでは、他の設定値を含むが、仮想マシン制御回路20の動作には直接影響を及ぼすものではないため、ここでは説明を省略する。
【0053】
図5図6に示したように、仮想マシン制御レジスタの値の書き換えは、ハイパーバイザ特権のプログラムのみが行えるようにすることで、設定値の信頼性を向上させることができる。
【0054】
ここで、実施の形態1にかかる仮想マシン制御回路20の動作についてより詳細に説明する。図7に実施の形態1にかかる仮想マシン制御回路20の動作を示すタイミングチャートを示す。まず、図7に示す例では、HV特権フラグHVPがディスイネーブル状態であって、HVCALL許可フラグHVCEがイネーブル状態であって、HVTRAP許可フラグHVTEがディスイネーブル状態である仮想マシン制御レジスタ(つまり、図4に示した仮想マシンVM0に対応した仮想マシン制御レジスタ)に基づきプロセッサを動作させたときのものである。
【0055】
図7に示す例では、タイミングT1においてHVCALL命令信号が実行通知状態となる。そして、HVCALL命令信号が実行通知状態となったことに応じて、仮想マシン制御回路20は、HVCALL実行通知信号S2を実行状態とする。また、タイミングT1において実行されたHVCALL命令に応じて、タイミングT2以降でハイパーバイザスタブプログラムが実行される。そのため、タイミングT2において、HVスタブ実行状態信号が実行状態となる。
【0056】
そして、タイミングT3において、ハイパーバイザスタブプログラムにおいてHVTRAP命令が実行される。そのため、タイミングT3においてHVTRAP命令信号が実行通知状態となる。このとき、図7に示す例では、タイミングT3においてHVスタブ実行状態信号が実行通知状態のままとなっている。そのため、HVTRAP許可フラグHVTEの値に関わらず、タイミングT3においてHVTRAP命令信号が実行通知状態となったことに応じてHVTRAP実行通知信号S3を実行状態とする。
【0057】
そして、HVTRAP命令が実行されたことに応じて、タイミングT4において、ハイパーバイザプログラムは、マルチスレッド動作ビットMTを1から0に書き換える。これにより、マルチスレッド動作ビットMTが1に書き換えられるまでプロセッサはネイティブモードで動作する。また、タイミングT3〜T4において、HVTRAP実行通知信号S3が実行状態となったことに応じて仮想マシン制御回路20は、タイミングT4において実マシン動作信号S6をイネーブル状態とする。
【0058】
そして、タイミングT4で起動したハイパーバイザプログラムは、タイミングT5において、マルチスレッド動作ビットMTを1に書き換えて動作を完了させる。また、仮想マシン動作信号生成回路38は、マルチスレッド動作ビットMTが1から0に書き換えられたことに応じて実マシン動作信号S6をディスイネーブル状態とする。その後、タイミングT6において、ハイパーバイザスタブプログラムの動作の完了に応じてHVスタブ実行状態信号を未実行通知状態とする。
【0059】
続いて、スレッドスケジューラ21の詳細について説明する。スレッドスケジューラ21の詳細なブロック図を図8に示す。図8に示すように、スレッドスケジューラ21は、動作スレッド選択回路40、仮想マシン・スレッド対応表41、スケジュールヒント42を有する。
【0060】
仮想マシン・スレッド対応表41は、例えばプロセッサエレメントPEの内部のメモリ、或いは、レジスタに格納されるものである。仮想マシン・スレッド対応表41は、仮想マシンとハードウェアスレッドとの対応を示す表である。
【0061】
スケジュールヒント42は、例えばプロセッサエレメントPEの内部のメモリ、或いは、レジスタに格納されるものである。スケジュールヒント42は、実行ユニット16で実行する命令コードを生成するハードウェアスレッドの順序、優先的に処理すべきハードウェアスレッド等を定義する情報である。つまり、実施の形態1にかかる半導体装置1では、このスケジュールヒント42と、仮想マシン・スレッド対応表41に記載された対応関係に基づき仮想マシンが実行するハードウェアスレッドが定義される。このスケジュールヒント42については、例えば、本願の出願人による特願2008−252232に実施の形態の一例が記載されている。
【0062】
動作スレッド選択回路40は、実マシン動作信号S6、パイプラインステータス信号PST1、PST2、仮想マシン・スレッド対応表41、及び、スケジュールヒント42に基づき次に命令コードを発行するハードウェアスレッドを示すスレッド選択信号TSELを生成する。より具体的な動作スレッド選択回路40の動作を示すフローチャートを図9に示す。
【0063】
図9に示すように、動作スレッド選択回路40は、実マシン動作信号S6を参照して、プロセッサエレメントPEが仮想マシンモードで動作中か、ネイティブマシンモードで動作中かを判断する(ステップST1)。そして、ステップST1において、プロセッサエレメントPEがネイティブモードで動作していると判断された場合、動作スレッド選択回路40は、仮想マシン・スレッド対応表41を参照し、実行すべきハードウェアスレッドを選択する(ステップST2)。
【0064】
一方、ステップST1において、プロセッサエレメントPEが仮想マシンモードで動作していると判断された場合、動作スレッド選択回路40は、スケジュールヒント42があるか否かを判断する(ステップST3)。そして、ステップST3において、スケジュールヒント42があると判断された場合、動作スレッド選択回路40は、スケジュールヒント42と仮想マシン・スレッド対応表41とを参照して、実行するハードウェアスレッドを選択する(ステップST4)。
【0065】
一方、ステップST3において、スケジュールヒント42がないと判断された場合、動作スレッド選択回路40は、パイプラインステータス信号PSTに基づき実行効率の最も良いハードウェアスレッドを選択する(ステップST5)。
【0066】
続いて、実施の形態1にかかる半導体装置1の動作について説明する。以下の説明では、特に、実施の形態1にかかる半導体装置1の特徴の1つであるハイパーバイザスタブプログラムの呼び出しについて説明する。
【0067】
まず、仮想マシン制御レジスタが図4に示す設定を有する場合に、実施の形態1にかかる半導体装置において実行が許可される命令と、許可された命令を実行した場合のソフトウェア階層上の状態遷移の一例を示す図を図10に示す。図10に示すように、半導体装置1は、1つの仮想マシン上で動作するユーザープログラムと、ユーザープログラムを管理するスーパーバイザプログラム(例えば、ゲストOS)と、1つの仮想マシン上で動作し、スーパーバイザプログラムからの呼び出しに応じて動作するハイパーバイザスタブプログラムと、複数のスーパーバイザプログラムを管理するハイパーバイザプログラムと、を実行する。ここで、実施の形態1にかかる半導体装置1では、ハイパーバイザスタブプログラムが第1の特権プログラムに相当するものであって、ハイパーバイザプログラムが第2の特権プログラムに相当するものである。
【0068】
また、半導体装置1では、ハイパーバイザプログラムをネイティブモードで実行し、ハイパーバイザスタブプログラム、ゲストOS、アプリケーションプログラムを仮想マシンモードで実行する。さらに、半導体装置1は、アプリケーションプログラムを実行する場合にはユーザーモードで動作し、ゲストOSを実行する場合にはスーパーバイザ特権レベルで動作し、ハイパーバイザスタブプログラム及びスーパーバイザプログラムを実行する場合にはハイパーバイザ特権レベルで動作する。なお、動作モードは、ユーザーモード、スーパーバイザ特権レベル、ハイパーバイザ特権レベルの順で高い信頼性が確保される。
【0069】
そして、図4に示すレジスタの設定例では、半導体装置1は、3つの仮想マシンVM0〜VM2を用いて処理を行う。そのため、図10に示すように、半導体装置1は、仮想マシンモードでは仮想マシンVM0〜VM2がそれぞれ独立した処理を行う。
【0070】
また、実施の形態1にかかる半導体装置1では、アプリケーションプログラムからハイパーバイザ特権が必要なリソースに対するアクセスが生じた場合、HVTRAP命令或いはHVCALL命令を実行することでハイパーバイザプログラムを呼び出す。このとき、半導体装置1では、アプリケーションプログラムからのアクセス要求に基づきゲストOSがHVTRAP命令又はHVCALL命令を発行する。
【0071】
図4に示したレジスタの設定例に従って動作する半導体装置1では、仮想マシンの信頼性に応じてハイパーバイザプログラムの呼び出し方法を設定することができる。例えば、図10に示す例では、HVTRAP命令の許可フラグHVTE及びHVCALL命令の許可フラグHVCEが有効に設定される仮想マシンVM1が最も高い信頼性となる。そして、許可フラグの設定に基づき、仮想マシンVM1のゲストOSに対しては、HVCALL命令とHVTRAP命令との実行が許可される。そして、仮想マシンVM1のゲストOSは、HVTRAP命令を実行してハイパーバイザスタブプログラムを呼び出すことなく、HVTRAP命令によってハイパーバイザプログラムを直接呼び出すことが可能である。また、仮想マシンVM1のゲストOSについては、HVCALL命令によってハイパーバイザスタブプログラムを呼び出し、このハイパーバイザスタブプログラムからハイパーバイザプログラムの呼び出すことも許可される。
【0072】
一方、仮想マシンVM0は、HVTRAP命令の許可フラグHVTEが無効に設定され、HVCALL命令の許可フラグHVCEが有効に設定されるため、仮想マシンVM1よりも信頼性が低い。つまり、許可フラグの設定に基づき、仮想マシンVM0のゲストOSは、HVTRAP命令によって直接ハイパーバイザプログラムを呼び出すことは許可されていない。そのため、仮想マシンVM0のゲストOSがハイパーバイザプログラムを呼び出す際にはHVCALL命令を実行してハイパーバイザスタブプログラムを呼び出し、当該ハイパーバイザスタブプログラムからハイパーバイザプログラムを呼び出す必要がある。また、仮想マシンVM2は、HVTRAP命令の許可フラグHVTE及びHVCALL命令の許可フラグHVCEが無効に設定されるため、仮想マシンVM0よりも信頼性が低い。つまり、許可フラグの設定に基づき、仮想マシンVM2のゲストOSに対しては、HVTRAP命令及びHVCALL命令の実行権限が与えられていない。そのため、仮想マシンVM2のゲストOSは、ハイパーバイザプログラムと、ハイパーバイザスタブプログラムとのいずれも呼び出すことができない。
【0073】
つまり、実施の形態1にかかる半導体装置1は、複数の仮想マシンにより並列的にプログラムを実行する仮想マシンモードと、実行ユニットの実行時間を占有してプログラムを実行するネイティブモードとを切り替えながら処理を進める。そして、半導体装置1は、仮想マシンモードにおいて、半導体装置内のハードウェア資源(例えば、レジスタ、メモリ、周辺回路等)のうち特定のハードウェア資源に対するアクセスが制限されるユーザー特権レベルのユーザープログラムと、ユーザープログラムを管理するスーパーバイザプログラム(例えば、ゲストOS)と、ゲストOSからの呼び出しに応じて動作し、特定のハードウェア資源を含むハードウェア資源に対するアクセスが許可されるハイパーバイザ特権レベルのハイパーバイザスタブプログラムと、を実行する。また、半導体装置1においては、ゲストOSに、ハイパーバイザスタブプログラムを呼び出す第1の命令コード(例えば、HVCALL命令)の実行権限の有無が設定され、ハイパーバイザスタブプログラムは、HVCALL命令の実行が許可されたゲストOSからの呼び出しに応じて起動する。そして、半導体装置1は、第2の命令コード(例えば、HVTRAP命令)を実行することでハイパーバイザプログラムを呼び出し、ネイティブモードに切り替わる。一方、半導体装置1は、HVCALL命令の実行が不許可に設定されたゲストOSがHVCALL命令を実行した場合、ハイパーバイザスタブプログラムを呼び出さずに、ゲストOS内で例外処理を行う。
【0074】
また、半導体装置1は、ゲストOSには、HVTRAP命令の実行権限の有無が設定される。そして、半導体装置1は、HVTRAP命令の実行が許可されたゲストOSからの呼び出しに応じてハイパーバイザプログラムを起動する。また、半導体装置1は、HVTRAP命令の実行が不許可に設定されたゲストOSが、HVTRAP命令を実行した場合、ハイパーバイザプログラムを呼び出さずに、ゲストOS内で例外処理を行う。
【0075】
続いて、実施の形態1にかかる半導体装置1において、ハイパーバイザプログラムを直接呼び出すHVTRAP命令が実行された場合の動作について説明する。図11に、実施の形態1にかかる半導体装置1においてHVTRAP命令が実行された場合の半導体装置1の動作を示すフローチャートを示す。
【0076】
図11に示すように、実施の形態1にかかる半導体装置1では、ゲストOSによって、HVTRAP命令が実行された場合、実行ユニット16が出力する命令実行情報EXRに基づきパイプライン制御部15がHVTRAP命令の実行が開始されたことを検出する(ステップST10)。
【0077】
ステップST11では、パイプライン制御部15の仮想マシン制御回路20は、HVTRAP命令を実行した仮想マシンの番号を示す仮想マシン識別子を元に対応する仮想マシン制御レジスタを参照する。そして、仮想マシン制御回路20は、HVTRAP命令を実行した仮想マシンにHVTRAP命令の実行権限があるか否かを判断する(ステップST12)。このステップST12において、仮想マシンにHVTRAP命令の実行権限がないと判断された場合、実行権例外が発生したと認識して、仮想マシンのゲストOS内の処理としてエラー処理を行う(ステップST13)。
【0078】
一方、ステップST12において、仮想マシンにHVTRAP命令の実行権限があると判断された場合、半導体装置1は全ての仮想マシンを停止して動作権限をハイパーバイザ特権レベルに移行する(ステップST14)。より具体的には、このステップST14では、仮想マシン制御回路20は、実マシン動作信号S6をイネーブル状態とする。そして、スレッドスケジューラ21では、実マシン動作信号S6がイネーブル状態となったことに応じて実行すべきハードウェアスレッドを仮想マシン・スレッド対応表41から選択する。また、パイプライン制御信号生成回路22では、HVTRAP実行通知信号S3に応じて、ハイパーバイザプログラムを実行するための命令フェッチ制御信号IFC、命令デコード制御信号IDC、レジスタ制御信号RFC、実行ユニット制御信号EUCを生成する。そして、ステップST14の処理が完了することで、実施の形態1にかかる半導体装置1においてハイパーバイザプログラムが実行される(ステップST15)。
【0079】
続いて、実施の形態1にかかる半導体装置1において、ハイパーバイザスタブプログラムを呼び出すHVCALL命令が実行された場合の動作について説明する。図12に、実施の形態1にかかる半導体装置1においてHVCALL命令によるハイパーバイザスタブプログラムの起動処理する場合の手順を示すフローチャートを示す。
【0080】
図12に示すように、実施の形態1にかかる半導体装置1では、ゲストOSによって、HVCALL命令が実行された場合、実行ユニット16が出力する命令実行情報EXRに基づきパイプライン制御部15がHVCALL命令の実行が開始されたことを検出する(ステップST20)。
【0081】
続いて、ステップST21では、パイプライン制御部15の仮想マシン制御回路20は、HVCALL命令を実行した仮想マシンの番号を示す仮想マシン識別子を元に対応する仮想マシン制御レジスタを参照する。そして、仮想マシン制御回路20は、HVCALL命令を実行した仮想マシンにHVCALL命令の実行権限があるか否かを判断する(ステップST22)。このステップST22において、仮想マシンにHVCALL命令の実行権限がないと判断された場合、実行権例外が発生したと認識して、仮想マシン内部でエラー処理を行う(ステップST23)。
【0082】
一方、ステップST22において、仮想マシンにHVCALL命令の実行権限があると判断された場合、半導体装置1はHVCALL命令を実行した仮想マシンに一時的にハイパーバイザ特権を付与する。そして、半導体装置1は、HVCALL命令を実行したマシンにおいてハイパーバイザスタブプログラムを実行しながら、他の仮想マシンの動作を継続する。その後、半導体装置1は、ハイパーバイザスタブプログラムにおいて準備された命令コードにジャンプする(ステップST24)。より具体的には、このステップST24では、仮想マシン制御回路20は、実マシン動作信号S6をディスイネーブル状態で維持する。そして、スレッドスケジューラ21では、ディスイネーブル状態の実マシン動作信号S6に応じて、実行するハードウェアスレッドを仮想マシン・スレッド対応表41又はスケジュールヒント42に基づき選択する。また、パイプライン制御信号生成回路22では、HVCALL実行通知信号S2に応じて、ハイパーバイザスタブプログラムを実行するための命令フェッチ制御信号IFC、命令デコード制御信号IDC、レジスタ制御信号RFC、実行ユニット制御信号EUCを生成する。
【0083】
そして、ステップST24においてハイパーバイザスタブプログラムにおいて準備された命令コードにジャンプすることで、半導体装置1は、ハイパーバイザプログラムの起動処理を完了する。
【0084】
ここで、図12に示すように、半導体装置1は、HVCALL命令を実行することでハイパーバイザスタブプログラムを起動する。そして、半導体装置1は、ハイパーバイザスタブプログラムによりハイパーバイザプログラムを呼び出す。また、このハイパーバイザスタブプログラムでは、呼び出し元の要求の妥当性の確認、他の仮想マシンの動作の監視等の処理を行う。そこで、ハイパーバイザスタブプログラムに基づく半導体装置1の動作について詳細に説明する。図13に実施の形態1にかかる半導体装置におけるハイパーバイザスタブプログラムの動作を示すフローチャートを示す。
【0085】
図13に示すように、ハイパーバイザスタブプログラムを実行する半導体装置1は、まず、呼び出し元の指示した要求が適切か否かを判断する(ステップST31)。より具体的には、このステップST31では、アプリケーションプログラムがゲストOS等のスーパーバイザ特権レベルのプログラムを介することなく直接HVCALL命令を発行した場合には呼び出し元の指示した要求が不正なものであると判断する。
【0086】
そして、ステップST31において、呼び出し元の指示した要求が不正なものであると判断された場合は、ハイパーバイザスタブプログラムは、返り値にエラー番号を設定し、復帰命令を発行し、処理をユーザーアプリケーションに復帰させる(ステップST38)。また、ステップST31において、呼び出し元の指示した要求が適正なものであると判断された場合は、ハイパーバイザスタブプログラムは、要求された処理が他の仮想マシンを停止させずに処理できるものであるかを判断する(ステップST32)。例えば、要求が、HVCALL命令を発行した仮想マシンにのみ影響する設定変更である場合は、他の仮想マシンを停止させずに処理を完了することができる。
【0087】
そして、ステップST32において、要求された処理が他の仮想マシンを停止させずに処理できると判断された場合には、仮想マシンモード内にてハイパーバイザスタブプログラムによるサービスを提供する(ステップST33)。そして、ステップST33の処理の後に、処理に応じた返り値を設定し、復帰命令を発行し、処理をユーザーアプリケーションに復帰させる(ステップST38)。また、ステップST32において、要求された処理が他の仮想マシンを停止させずに処理できないと判断された場合には、半導体装置1をネイティブモードに遷移可能か否かを判断する(ステップST34)。例えば、他の仮想マシンにおいて行われている処理がリアルタイム性を要するクリティカルタスクに関するものである場合は、他の仮想マシンの処理は停止することができない。
【0088】
そして、ステップST34においてネイティブモードに遷移可能と判断された時点で、半導体装置1は、処理をステップST35に進める。ステップST35では、ハイパーバイザスタブプログラムがHVTRAP命令を発行し、HVTRAP命令によって半導体装置1をネイティブモードに遷移させる。これにより、半導体装置1は、ネイティブモードにてハイパーバイザプログラムによるサービスを提供する(ステップST36)。なお、半導体装置1では、ステップST36の処理はハイパーバイザプログラムによる処理に含まれており、ステップST36の処理が実行される間もハイパーバイザスタブプログラムは実行中である。また、半導体装置1では、ハイパーバイザスタブプログラムが発行するHVTRAP命令については、仮想マシンに対応するHVTRAP許可フラグが無効であっても正常な処理であるとして処理される。
【0089】
そして、ステップST36の処理が完了した時点で、半導体装置1は、動作モードをネイティブモードから仮想マシンモードに復帰させ、ハイパーバイザスタブプログラムを実行する(ステップST37)。その後、ハイパーバイザスタブプログラムを実行する半導体装置1は、処理に応じた帰り値を設定し、復帰命令を発行し、処理をユーザーアプリケーションに復帰させる(ステップST38)。
【0090】
続いて、シーケンス図(図14図18)を用いて実施の形態1にかかる半導体装置1の動作を別の観点から説明する。まず、図14に実施の形態1にかかる半導体装置1の動作を示すシーケンス図を示す。図14に示す例は、半導体装置1において正常な処理に基づきハイパーバイザプログラムが呼び出されたときのものである。なお、図14図17では、図4に示した仮想マシン制御レジスタの設定に従って仮想マシンの実行権限が設定された半導体装置1についてのものである。また、図18のシーケンス図は、いずれの仮想マシンもハイパーバイザスタブプログラムを介さずにハイパーバイザプログラムを起動する半導体装置の動作を示すものであって、実施の形態1にかかる半導体装置1の比較例を示すものである。
【0091】
図14の上部に示すように、半導体装置1では、仮想マシンVM0がHVCALL命令を実行した場合、このHVCALL命令に応じて、仮想マシンモードにおいて仮想マシンVM0がハイパーバイザスタブプログラムを実行する。そして、ハイパーバイザスタブプログラムがHVTRAP命令を実行することで、半導体装置1は、動作モードをネイティブモードに遷移させ、ハイパーバイザプログラムを実行する。このとき、図14に示すように、ハイパーバイザスタブプログラムは、ハイパーバイザプログラムを実行中においてもバックグラウンドで動作を継続する。そして、ハイパーバイザプログラムの処理の完了に応じて、半導体装置1は、動作モードを仮想モードに復帰させ、処理をハイパーバイザスタブプログラムに復帰させる。その後、半導体装置1は、ハイパーバイザスタブプログラムによって復帰命令を実行することで、半導体装置1は、動作モードを仮想マシンモードで動作するユーザーアプリケーションに復帰させる。
【0092】
また、図14の下部に示すように、半導体装置1では、仮想マシンVM1に対してはHVTRAP命令の実行が許可されている。そのため、半導体装置1では、仮想マシンVM1においてHVTRAP命令が実行された場合、当該HVTRAP命令に応じて、動作モードを仮想マシンモードからネイティブモードに遷移させ、直接ハイパーバイザプログラムを実行する。そして、ハイパーバイザプログラムの処理の完了に応じて、半導体装置1は、動作モードを仮想モードに復帰させ、処理をユーザープログラムに復帰させる。
【0093】
次いで、図15に、実施の形態1にかかる半導体装置において不正なハイパーバイザプログラムの呼び出しがあった場合の動作を示すシーケンス図を示す。図15に示すように、半導体装置1では、仮想マシンVM0にHVTRAP命令の実行権限を与えていない。そのため、仮想マシンVM0においてHVTRAP命令が実行された場合、当該HVTRAP命令に関する処理は、ゲストOSの処理期間中にパイプライン制御部15の仮想マシン制御回路20においてHVTRAP実行権例外信号S5がイネーブル状態となる。そして、HVTRAP実行権例外信号S5がイネーブル状態となったことに応じてパイプライン制御信号生成回路22が実行ユニット16に復帰命令を実行するように命令フェッチ制御信号IFC、命令デコード制御信号IDC、レジスタ制御信号RFC、及び、実行ユニット制御信号EUCを生成する。そして、仮想マシンVM0において復帰命令が実行されることで、仮想マシンVM0の実行権限がユーザーモードに復帰する。このとき、半導体装置1では、仮想マシンモードで実行されるゲストOSの処理期間中に例外処理が行われるため、仮想マシンVM0におけるHVTRAP命令の実行にかかわらず他の仮想マシンの動作は継続される。
【0094】
また、仮想マシンVM0においてHVCALL命令が実行された場合であっても、ハイパーバイザスタブプログラムの処理において呼び出し元の要求が不正であった場合は、ハイパーバイザスタブプログラムにおいてエラー処理(又は、例外処理)が行われる。そこで、不正なハイパーバイザスタブプログラムの呼び出しが発生した場合の半導体装置1の動作を示すシーケンス図を図16に示す。図16に示すように、半導体装置1では、HVCALL命令が実行された場合であっても、呼び出し元の要求が不正なものであった場合には動作モードをネイティブモードに遷移させることなく動作権限をユーザーモードに復帰させることができる。
【0095】
続いて、HVCALL命令の実行権限とHVTRAP命令の実行権限のいずれも与えられていない仮想マシンVM2において、HVCALL命令又はHVTRAP命令が実行された場合の半導体装置1の動作を示すシーケンス図を図17に示す。仮想マシンVM2に対しては、HVTRAP命令の実行権限とHVCALL命令の実行権限のいずれも与えられていない。そのため、半導体装置1では、仮想マシンVM2においてHVTRAP命令又はHVCALL命令が実行された場合には、ゲストOSの処理期間中に例外処理がなさる。より具体的には、仮想マシンVM2では、HVTRAP命令又はHVCALL命令が実行されたことに伴い、パイプライン制御部15の仮想マシン制御回路20においてHVCALL実行権例外信号S4又はHVTRAP実行権例外信号S5がイネーブル状態となる。そして、HVCALL実行権例外信号S4又はHVTRAP実行権例外信号S5がイネーブル状態となったことに応じてパイプライン制御信号生成回路22が実行ユニット16に復帰命令を実行するように命令フェッチ制御信号IFC、命令デコード制御信号IDC、レジスタ制御信号RFC、及び、実行ユニット制御信号EUCを生成する。そして、仮想マシンVM2において復帰命令が実行されることで、仮想マシンVM2は仮想マシンモードを維持したまま処理をユーザーアプリケーションに復帰させる。
【0096】
続いて、図18に示した比較例について説明する。図18に示す比較例では、半導体装置は、HVTRAP命令の実行権の管理及びハイパーバイザスタブプログラムを介したハイパーバイザプログラムの起動を行わない。そのため、比較例にかかる半導体装置では、仮想マシンVM0〜VM2のいずれもがHVTRAP命令を実行してハイパーバイザプログラムを呼び出すことができる。図18に示す例では、仮想マシンVM0がHVTRAP命令を実行する。
【0097】
そのため、図18に示すように、比較例にかかる半導体装置では、アプリケーションが何らかの不具合によって仮想マシンVM0がHVTARP命令を頻繁に実行するような動作を行った場合、当該HVTRAP命令によってネイティブモードに遷移することを防止することができない。また、このような頻繁なネイティブモードへの遷移が生じると、他の仮想マシンの処理がその都度停止され、半導体装置の処理能力が低下する問題がある。
【0098】
上記説明より、実施の形態1にかかる半導体装置1では、パイプライン制御部15が1つの仮想マシン上で実行される第1の特権プログラム(例えば、ハイパーバイザスタブプログラム)を実行する権限の有無を仮想マシン毎に定義する仮想マシン制御レジスタを有する。そして、パイプライン制御部15は、仮想マシン制御レジスタを参照して、ハイパーバイザスタブプログラムに関する命令コード(例えば、HVCALL命令)を発行した仮想マシンにハイパーバイザスタブプログラムの実行権限がある場合には、ハイパーバイザスタブプログラムの動作に基づき、ハードウェア資源を利用して動作する第2の特権プログラム(例えば、ハイパーバイザプログラム)に関する命令コードに基づく処理を実行ユニット16に指示する。
【0099】
これにより、実施の形態1にかかる半導体装置1は、ハイパーバイザプログラムがアプリケーションプログラムにより頻繁に呼び出される不具合が生じた場合においてもハイパーバイザスタブプログラムの動作によってハイパーバイザプログラムが直接呼び出されることを防止することができる。そして、このような動作により、実施の形態1にかかる半導体装置1ではネイティブモードへの遷移が頻繁に生じることを防止することができる。また、半導体装置1では、ネイティブモードへの遷移が頻繁に生じることにより仮想マシン間の干渉が生じる頻度を低減し、ソフトウェアの不具合による処理能力の低下を防止することができる。
【0100】
また、実施の形態1にかかる半導体装置1では、仮想マシン内でハイパーバイザ特権を有するハイパーバイザスタブプログラムを実行することができる。そのため、このハイパーバイザスタブプログラムを実行する仮想マシン内で完結するハイパーバイザ特権が必要な動作が生じた場合には他の仮想マシンの動作を停止させることなくハイパーバイザ特権が必要な処理を完了させることができる。これにより、実施の形態1にかかる半導体装置1は、仮想マシンの動作が停止する頻度を少なくし、半導体装置全体の性能を向上させることができる。
【0101】
また、実施の形態1にかかる半導体装置1では、ハイパーバイザプログラムを呼び出すHVTRAP命令と、ハイパーバイザスタブプログラムを呼び出すHVCALL命令との実行権限を仮想マシン毎に設定する。これにより、信頼性の低いアプリケーションを実行する仮想マシンに対してはハイパーバイザスタブプログラム及びハイパーバイザプログラムを呼び出すことを防止することができる。また、信頼性の高いアプリケーションを実行する仮想マシンに対してのみHVTRAP命令の実行権限を与えることができる。このように、仮想マシン毎にHVCALL命令及びHVCALL命令の実行権限を設定することで信頼性の低いアプリケーションに対しては信頼性を向上させ、信頼性の高いアプリケーションに対してはハイパーバイザプログラムの呼び出しにかかるオーバーヘッドを削減することができる。
【0102】
また、半導体装置1では、仮想マシン制御レジスタのうちHVCALL命令の許可フラグHVCE、HVTRAP命令の許可フラグHVTE、HV特権フラグHVP、仮想マシン有効フラグENの書き換えをハイパーバイザ特権レベルで動作するプログラムにのみ許可する。これにより、ユーザーモード等の信頼性の低い動作モードで動作するプログラムによりこれらの設定値が破壊されることを防止することができる。
【0103】
実施の形態2
実施の形態2では、ハイパーバイザ特権レベルよりも信頼性の低い実行権限レベルのプログラムに対してもハイパーバイザ特権レベルの動作を許可する実施例について説明する。そこで、実施の形態2にかかる半導体装置の仮想マシン制御レジスタの例を図19に示す。
【0104】
図19に示す例では、仮想マシンVM1に対応する仮想マシン制御レジスタのHV特権フラグが1(例えば、有効)に設定される。このHV特権フラグが1である場合、図3の仮想マシン制御回路20のOR回路32、34の出力は、常に1になる。そのため、仮想マシンVM1に対しては、HVTRAP許可フラグHVTE及びHVCALL許可フラグHVCEが有効か無効かに関わらずHVTRAP命令及びHVCALL命令の実行権限が与えられる。
【0105】
また、このHV特権フラグHVPが有効である場合、実施の形態2にかかる半導体装置は、HV特権フラグHVPを参照して、例えば、スーパーバイザ特権レベルで動作するゲストOSにハイパーバイザ特権レベルのプログラムに対してのみアクセスが許可されるリソースへのアクセスを許可する。なお、実施の形態2にかかる半導体装置では、パイプライン制御信号生成回路22がHV特権フラグHVPを参照することでゲストOSにおいてハイパーバイザ特権レベルのリソースに対するアクセスが生じた場合に例外処理することなく処理を継続する。
【0106】
このように、ゲストOSに対してハイパーバイザ特権を与えることで、実施の形態2にかかる半導体装置では、HVTRAP命令又はHVCALL命令を実行することなくハイパーバイザ特権レベルのプログラムのみが操作可能なリソースにアクセスを行うことができる。また、このようにスーパーバイザ特権レベルのプログラムにハイパーバイザ特権レベルを与えることでソフトウェアの切り替えが生じないため、半導体装置の処理能力を向上させることができる。
【0107】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、スレッドスケジューラ21において、どのような手順でスレッドを選択するかについては、半導体装置1の仕様に応じて適宜選択しうる事項である。また、上記実施の形態では、実行ユニット16が1つのシングルコアCPUについて説明を行ったが、実行ユニットを含む演算回路を複数有するマルチコアCPUにおいても本発明の技術を適用することができる。
【符号の説明】
【0108】
1 半導体装置
10 プログラムカウンタ
10a〜10d スレッドプログラムカウンタ
11 セレクタ
12 命令メモリ
13 命令バッファ
13a〜13d 命令バッファ
14 命令デコーダ
15 パイプライン制御部
16 実行ユニット
161 レジスタファイル
162 演算ユニット
163 システム制御命令実行部
164 ロードストアユニット
20 仮想マシン制御回路
21 スレッドスケジューラ
22 パイプライン制御信号生成回路
30 仮想マシン制御レジスタ群
31 セレクタ
32、34 OR回路
33、35 AND回路
36、37 ExOR回路
38 仮想マシン動作信号生成回路
40 動作スレッド選択回路
41 仮想マシン・スレッド対応表
42 スケジュールヒント
S1 仮想マシン識別子
S2 HVCALL実行通知信号
S3 HVTRAP実行通知信号
S4 HVCALL実行権例外信号
S5 HVTRAP実行権例外信号
S6 実マシン動作信号
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21