(57)【要約】【課題】プロセッサが仮想化サポート機能を有するか否かによらず、安全性を向上させる。【解決手段】プロセッサと、ＨＶ保護領域にアクセス可能なハイパーバイザを記憶する保護メモリと、保護メモリとプロセッサとを接続した第１通信路と、第１通信路を介して、ハイパーバイザの起動時に実行されるエントリ部に含まれる複数の命令のうち、最初の命令のアドレスへのフェッチを検出するフェッチ検出部と、第１通信路を介して、エントリ部の最後の命令の実行を検出する命令検出部と、フェッチを検出してから、最後の命令の実行を検出するまで所定の時間が経過したか否かを判断する時間判断部と、所定の時間が経過していないと判断した場合、最後の命令の実行結果から、プロセッサの割り込みを禁止しているか否かを判断する実行判断部と、禁止していると判断した場合に、プロセッサにＨＶ保護領域のアクセスを開放する第１及び第２ＨＶ領域保護回路と、を備える。【選択図】        図１
2008250387.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、
第１のアクセス範囲へ前記プロセッサをアクセスさせる特権ソフトウェアを記憶する第１の記憶部と、
前記第１のアクセス範囲よりも狭い第２のアクセス範囲へ前記プロセッサをアクセスさせるソフトウェアを記憶する第２の記憶部と、
前記第１の記憶部と前記プロセッサとを接続し、前記特権ソフトウェアを前記プロセッサで実行するために必要なデータの通信を行う通信路と、
前記プロセッサが前記通信路を介して、前記特権ソフトウェアに含まれる命令であって当該特権ソフトウェアを起動させる際に実行される複数の命令のうち、最初の命令が格納された格納アドレスへのフェッチを検出するフェッチ検出手段と、
前記プロセッサが前記通信路を介して、前記プロセッサにより前記複数の命令のうちの特定の命令が実行されたことを検出する検出手段と、
前記プロセッサが前記ソフトウェアを実行しているときに前記フェッチ検出手段により前記格納アドレスへのフェッチを検出してから、前記検出手段が前記特定の命令が実行されたことを検出するまでに、所定の時間が経過したか否かを判断する時間判断手段と、
前記所定の時間が経過していないと判断した場合に、前記プロセッサが前記特定の命令を実行した結果から、前記プロセッサへの割り込みを禁止しているか否かを判断する判断手段と、
前記実行判断手段が前記プロセッサへの割り込みを禁止していると判断した場合に、前記プロセッサに対して前記第１のアクセス範囲のアクセスを開放する制御手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記プロセッサは、複数単位で命令のフェッチを行い、
前記フェッチ検出手段は、前記格納アドレスとして、前記最初の命令を含む複数単位で命令の先頭アドレスのフェッチを検出すること、
を特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第１の記憶部は、前記複数の命令のうち最初の命令を、前記プロセッサがフェッチする複数単位の命令の最後尾に配置すること、
を特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記プロセッサは、実行する前に予め命令のフェッチを行うプリフェッチ機能を有し、
前記記憶部は、前記プロセッサが書き込み禁止状態であることを確認する命令を実行しているタイミングで前記プロセッサのフェッチ対象が存在する数で、前記複数の命令を構成すること、
を特徴とする請求項１に記載の情報処理装置。
【請求項５】
プロセッサと、
第１のアクセス範囲へ前記プロセッサをアクセスさせる特権ソフトウェアを記憶する第１の記憶部と、
前記第１のアクセス範囲よりも狭い第２のアクセス範囲へ前記プロセッサをアクセスさせるソフトウェアを記憶する第２の記憶部と、
前記第１の記憶部と前記プロセッサとを接続し、前記特権ソフトウェアを前記プロセッサで実行するために必要なデータの通信を行う通信路と、
前記プロセッサが前記通信路を介して、前記特権ソフトウェアに含まれる命令であって当該特権ソフトウェアを起動させる際に実行される複数の命令のうち、最初の命令が格納された第１格納アドレスへのフェッチを検出する第１フェッチ検出手段と、
前記プロセッサが前記通信路を介して、前記第１の記憶部に記憶される前記特権ソフトウェアに含まれる前記複数の命令のうち特定の命令が格納された第２格納アドレスへのフェッチを検出する第２フェッチ検出手段と、
前記プロセッサが前記ソフトウェアを実行しているときに前記第１フェッチ検出手段により前記第１格納アドレスへのフェッチを検出してから、前記第２フェッチ検出手段により前記第２格納アドレスへのフェッチを検出するまでに、所定の時間が経過したか否かを判断する時間判断手段と、
前記所定の時間が経過していないと判断した場合に、前記プロセッサに対して前記第１のアクセス範囲のアクセスを開放する制御手段と、
を備えることを特徴とする情報処理装置。
【請求項６】
プロセッサと、
第１のアクセス範囲へ前記プロセッサをアクセスさせる特権ソフトウェアを記憶する第１の記憶部と、
前記第１のアクセス範囲よりも狭い第２のアクセス範囲へ前記プロセッサをアクセスさせるソフトウェアを記憶する第２の記憶部と、
前記第１の記憶部と前記プロセッサとを接続し、前記特権ソフトウェアを前記プロセッサで実行するために必要なデータの通信を行う通信路と、
前記プロセッサが前記通信路を介して、前記特権ソフトウェアに含まれる命令であって当該特権ソフトウェアを起動させる際に実行される複数の命令へのフェッチを検出するフェッチ検出手段と、
前記プロセッサが前記ソフトウェアを実行しているときに、検出したフェッチ先のアドレスから、前記複数の命令を構成する各命令が格納された格納アドレスへのフェッチが、命令順に行われているか否かを判断するフェッチ判断手段と、
前記複数の命令のフェッチが命令順に行われたと判断した場合に、前記プロセッサにより前記複数の命令うちの特定の命令が実行されたことを検出する検出手段と、
検出した前記複数の命令の実行結果から、前記プロセッサへの割り込み禁止されているか否かを判断する判断手段と、
割り込み禁止されていると判断した場合に、前記プロセッサに対して前記第１のアクセス範囲のアクセスを開放する制御手段と、
を備えることを特徴とする情報処理装置。
【請求項７】
プロセッサと、
第１のアクセス範囲へ前記プロセッサをアクセスさせる特権ソフトウェアを記憶する第１の記憶部と、
前記第１のアクセス範囲よりも狭い第２のアクセス範囲へ前記プロセッサをアクセスさせるソフトウェアを記憶する第２の記憶部と、
前記第１の記憶部と前記プロセッサとを接続し、前記特権ソフトウェアを前記プロセッサで実行するために必要なデータの通信を行う通信路と、
前記プロセッサが前記通信路を介して、前記特権ソフトウェアに含まれる命令であって当該特権ソフトウェアを起動させる際に実行される複数の命令へのフェッチを検出するフェッチ検出手段と、
前記プロセッサが前記ソフトウェアを実行しているときに、検出したフェッチ先のアドレスから、前記複数の命令を構成する各命令が格納された格納アドレスへのフェッチが行われているか否かを判断するフェッチ判断手段と、
前記複数の命令のフェッチが命令順に行われたと判断した場合に、前記プロセッサに対して前記第１のアクセス範囲のアクセスを開放する制御手段と、
を備えることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数のソフトウェアが搭載されている情報処理装置に関するものである。
【背景技術】
【０００２】
従来から、データベースシステムやミッションクリティカルな処理を実行するサーバマシンにおいては、その処理の重要性や内部で保持するデータの機密度などの要因から、信頼性やセキュリティが重要視されていた。しかし近年では、これら汎用計算機等に限らず、組込み機器等の様々な装置において信頼性やセキュリティを確保することが重要となっている。 
【０００３】
組込み機器では、一つの機器内で複数の機能を同時に実行したり、新しい機能をダウンロードして機能を追加するなど、機能の複雑化が進んでいる。このような複数の機能を実行可能な機器の開発または運用では、単機能の機器と比較すると、新たな問題が発生している。 
【０００４】
例えば、ある機能に不具合が含まれていた場合、それがごく一部の機能であったとしても機器全体が停止するという障害が発生するケースがある。また、ダウンロードして、機器に対して追加した機能が悪意のある不正なプログラムである場合、秘密を保持すべき情報、またはプログラムが外部に漏洩したり、破壊や改竄されるケースがある。このように、組み込み機器等においても信頼性及びセキュリティが問題となっている。 
【０００５】
上記の問題を解決するには、各機能を実現するプログラムに割り当てられたリソースへのアクセスを制御する必要がある。例えば、あるプログラムに割り当てたリソースへの他のプログラムや機能からのアクセスを禁止したり、複数の機能やプログラムから共有されるリソースへのアクセスを排他制御して管理する方法等が挙げられる。さらに、アクセス制御機構や制御情報自体も自由に操作できないように保護する必要がある。 
【０００６】
これらの保護を実現し、複数の機能を隔離して信頼性やセキュリティを高める手段として、計算機の仮想化技術が提案されている。この仮想化技術の実装には様々な形態が存在する。仮想化技術の例としては、ハードウェアとＯＳ（Operating  System）の間に仮想化層を設けて、当該仮想化層上に複数のＯＳ（ゲストＯＳ）を動作させる形態がある。この仮想化層は、一般にハイパーバイザ層と呼ばれている。このハイパーバイザ層は、メモリやデバイス及び割込み等のリソースを管理し、個々のゲストＯＳに対して割り当てたリソースで構成される仮想計算機を提供する。これにより複数のゲストＯＳが互いに干渉せず隔離された状態での実行が実現できる。このハイパーバイザ層の機能をソフトウェアで実現する場合、当該ソフトウェアはハイパーバイザと呼ばれている。 
【０００７】
汎用計算機に使用されるプロセッサでは、プロセッサ自体に仮想化をサポートするハードウェア機構が用意されている。例としては、非特許文献１に示したＩｎｔｅｌ（登録商標）社が提唱する技術が存在する。この技術を実装したプロセッサでは、実行中のプログラムの権限を示す特権モードを多数用意し、特定の命令の実行時に、より上位の特権モードへ移行するように設定することが可能となる。これにより、ゲストＯＳから共有リソースへのアクセスをハードウェアで監視し、アクセス時により上位の特権モードを付与したソフトウェアでそのアクセス内容をチェックすることが可能になる。 
【０００８】
他の例としては、Ａｄｖａｎｃｅｄ Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ社が提唱する技術（Ｐａｃｉｆｉｃａ）がある。当該技術（Ｐａｃｉｆｉｃａ）を実装したプロセッサでは、割込みをインターセプトする機構と、ソフトウェアから仮想割込みを発生させる機能とが用意されている。これにより、ハイパーバイザで割込みを一旦インターセプトした上で、その割込みを必要とするゲストＯＳへの割込み配送を管理することができる。また、ゲストＯＳによるアドレス変換テーブルへのアクセスを監視する機構が用意される。これにより、ゲストＯＳが自由にアドレス変換テーブルを書き換えて、他のゲストＯＳに割り当てられたメモリ領域をアクセスすることを防ぐことができる。 
【０００９】
【非特許文献１】“Intel(R) Virtualization Technology Specification for the IA-32 Intel(R) Architecture"、[online]、[平成１７年５月３１日検索]、インターネット<URL: ftp://download.intel.com/technology/computing/vptech/C97063-002.pdf>
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、汎用計算機に使用されるような高機能なプロセッサと異なり、組込用に用いられる一般的なプロセッサには仮想化をサポートする機構が実装されていない。通常これらプロセッサでは、特権モードが少ないため、当該プロセッサで複数のゲストＯＳを実行した場合、各ゲストＯＳが最上位の特権モードで動作する。したがって、任意のゲストＯＳが、他のゲストＯＳに割り当てられたメモリ領域やデバイスを不正に参照・変更可能という問題がある。また、当該プロセッサでは、割込みの管理する割込みベクタテーブルを保護する機構がないため、ハイパーバイザが確実に割込みのインターセプトおよび配送を行えるという保証がないという問題がある。 
【００１１】
本発明は、上記に鑑みてなされたものであって、プロセッサが仮想化サポート機能を有するか否かにかかわらず、安全性を向上させる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するために、本発明にかかる情報処理装置は、プロセッサと、第１のアクセス範囲へ前記プロセッサをアクセスさせる特権ソフトウェアを記憶する第１の記憶部と、前記第１のアクセス範囲よりも狭い第２のアクセス範囲へ前記プロセッサをアクセスさせるソフトウェアを記憶する第２の記憶部と、前記第１の記憶部と前記プロセッサとを接続し、前記特権ソフトウェアを前記プロセッサで実行するために必要なデータの通信を行う通信路と、前記プロセッサが前記通信路を介して、前記特権ソフトウェアに含まれる命令であって当該特権ソフトウェアを起動させる際に実行される複数の命令のうち、最初の命令が格納された格納アドレスへのフェッチを検出するフェッチ検出手段と、前記プロセッサが前記通信路を介して、前記プロセッサにより前記複数の命令のうちの特定の命令が実行されたことを検出する検出手段と、前記プロセッサが前記ソフトウェアを実行しているときに前記フェッチ検出手段により前記格納アドレスへのフェッチを検出してから、前記検出手段が前記特定の命令が実行されたことを検出するまでに、所定の時間が経過したか否かを判断する時間判断手段と、前記所定の時間が経過していないと判断した場合に、前記プロセッサが前記特定の命令を実行した結果から、前記プロセッサへの割り込みを禁止しているか否かを判断する判断手段と、前記実行判断手段が前記プロセッサへの割り込みを禁止していると判断した場合に、前記プロセッサに対して前記第１のアクセス範囲のアクセスを開放する制御手段と、を備えることを特徴とする。
【００１３】
また、本発明にかかる情報処理装置は、プロセッサと、第１のアクセス範囲へ前記プロセッサをアクセスさせる特権ソフトウェアを記憶する第１の記憶部と、前記第１のアクセス範囲よりも狭い第２のアクセス範囲へ前記プロセッサをアクセスさせるソフトウェアを記憶する第２の記憶部と、前記第１の記憶部と前記プロセッサとを接続し、前記特権ソフトウェアを前記プロセッサで実行するために必要なデータの通信を行う通信路と、前記プロセッサが前記通信路を介して、前記特権ソフトウェアに含まれる命令であって当該特権ソフトウェアを起動させる際に実行される複数の命令のうち、最初の命令が格納された第１格納アドレスへのフェッチを検出する第１フェッチ検出手段と、前記プロセッサが前記通信路を介して、前記第１の記憶部に記憶される前記特権ソフトウェアに含まれる前記複数の命令のうち特定の命令が格納された第２格納アドレスへのフェッチを検出する第２フェッチ検出手段と、前記プロセッサが前記ソフトウェアを実行しているときに前記第１フェッチ検出手段により前記第１格納アドレスへのフェッチを検出してから、前記第２フェッチ検出手段により前記第２格納アドレスへのフェッチを検出するまでに、所定の時間が経過したか否かを判断する時間判断手段と、前記所定の時間が経過していないと判断した場合に、前記プロセッサに対して前記第１のアクセス範囲のアクセスを開放する制御手段と、を備えることを特徴とする。
【００１４】
また、本発明にかかる情報処理装置は、プロセッサと、第１のアクセス範囲へ前記プロセッサをアクセスさせる特権ソフトウェアを記憶する第１の記憶部と、前記第１のアクセス範囲よりも狭い第２のアクセス範囲へ前記プロセッサをアクセスさせるソフトウェアを記憶する第２の記憶部と、前記第１の記憶部と前記プロセッサとを接続し、前記特権ソフトウェアを前記プロセッサで実行するために必要なデータの通信を行う通信路と、前記プロセッサが前記通信路を介して、前記特権ソフトウェアに含まれる命令であって当該特権ソフトウェアを起動させる際に実行される複数の命令へのフェッチを検出するフェッチ検出手段と、前記プロセッサが前記ソフトウェアを実行しているときに、検出したフェッチ先のアドレスから、前記複数の命令を構成する各命令が格納された格納アドレスへのフェッチが、命令順に行われているか否かを判断するフェッチ判断手段と、前記複数の命令のフェッチが命令順に行われたと判断した場合に、前記プロセッサにより前記複数の命令うちの特定の命令が実行されたことを検出する検出手段と、検出した前記複数の命令の実行結果から、前記プロセッサへの割り込み禁止されているか否かを判断する判断手段と、割り込み禁止されていると判断した場合に、前記プロセッサに対して前記第１のアクセス範囲のアクセスを開放する制御手段と、を備えることを特徴とする。
【００１５】
また、本発明にかかる情報処理装置は、プロセッサと、第１のアクセス範囲へ前記プロセッサをアクセスさせる特権ソフトウェアを記憶する第１の記憶部と、前記第１のアクセス範囲よりも狭い第２のアクセス範囲へ前記プロセッサをアクセスさせるソフトウェアを記憶する第２の記憶部と、前記第１の記憶部と前記プロセッサとを接続し、前記特権ソフトウェアを前記プロセッサで実行するために必要なデータの通信を行う通信路と、前記プロセッサが前記通信路を介して、前記特権ソフトウェアに含まれる命令であって当該特権ソフトウェアを起動させる際に実行される複数の命令へのフェッチを検出するフェッチ検出手段と、前記プロセッサが前記ソフトウェアを実行しているときに、検出したフェッチ先のアドレスから、前記複数の命令を構成する各命令が格納された格納アドレスへのフェッチが行われているか否かを判断するフェッチ判断手段と、前記複数の命令のフェッチが命令順に行われたと判断した場合に、前記プロセッサに対して前記第１のアクセス範囲のアクセスを開放する制御手段と、を備えることを特徴とする。
【発明の効果】
【００１６】
本発明によれば、エントリコードが複数命令で構成される特権ソフトウェアを実行する際に、他のソフトウェアによる不正な割り込みを防止して、安全性を向上させるという効果を奏する。
【発明を実施するための最良の形態】
【００１７】
以下に添付図面を参照して、この発明にかかる情報処理装置の最良な実施の形態を詳細に説明する。また、後述する実施の形態においては、情報処理装置をシステムＬＳＩに適用した例について説明する。なお、情報処理装置は、システムＬＳＩに限らず、どのような装置に適用しても良い。
【００１８】
（第１の実施の形態）
図１に示すように、システムＬＳＩ１００は、メモリ１５０と、デバイス１６０とを接続している。また、システムＬＳＩ１００は、プロセッサ１０１と、動作モード管理回路１０２と、メモリアクセス制御部１０３と、第１ＨＶ（Ｈｙｐｅｒ  Ｖｉｓｅｒ）領域保護回路１０４と、デバイスアクセス制御部１０５と、第２ＨＶ領域保護回路１０６と、保護メモリ１０７とを備える。
【００１９】
メモリ１５０は、第１メモリ領域１５４と、第２メモリ領域１５５と、第３メモリ領域１５６と、第２のゲストＯＳ格納領域１５２と、第３のゲストＯＳ格納領域１５３とを備えている。そして、第１メモリ領域１５４は、第１のゲストＯＳ格納領域１５１を保持している。
【００２０】
また、第１のゲストＯＳ格納領域１５１には第１のゲストＯＳのバイナリコードが、第２のゲストＯＳ格納領域１５２には第２のゲストＯＳのバイナリコードが、第３のゲストＯＳ格納領域１５３には第３のゲストＯＳのバイナリコードが格納されている。また、第１メモリ領域１５４、第２メモリ領域１５５及び第３メモリ領域１５６は、メモリアクセス制御部１０３により読み込み及び書き込みが制限される記憶領域とする。また、ゲストＯＳを格納する領域は、第１のゲストＯＳ格納領域１５１のように、読み込み及び書き込みが制限される記憶領域内に確保されていても良い。
【００２１】
デバイス１６０は、システムＬＳＩ１００に接続され、システムＬＳＩ１００に含まれるプロセッサ１０１により制御が行われるデバイスとする。また、デバイス１６０は、後述するデバイスアクセス制御部１０５によりアクセスが制限される。また、デバイス１６０は、システムＬＳＩ１００の内部に備えるものでも、システムＬＳＩ１００の外部に備えるものでもよい。なお、システムＬＳＩ１００に接続されるデバイスの数について特に制限を設けるものではない。
【００２２】
また、デバイス１６０の例としては、メモリモジュール、ハードディスクドライブ等の大容量外部記憶装置、ネットワークインターフェース等の外部通信装置、キーボードやマウスなど利用者が入力に用いる入力装置、さらにはディスプレイ等の外部出力装置が考えられるが、これらに限るものではない。
【００２３】
そして、本実施の形態にかかるシステムＬＳＩ１００の内部では、第１〜第６通信路が配接されている。これら通信路は、プロセッサ１０１とメモリ／デバイス等の間でデータを伝える媒体である。少なくとも、アクセス先のアドレスと読み書きされるデータが通信路を介して伝送される。また、通信路はどのような形態でも良く、本実施の形態ではバスを用いることとする。このバスの例としては、アドレスのビット幅分のアドレスバス、データのビット幅分のデータバス、読み出し／書き込みを示す信号線から構成されることが考えられる。また、別の実施例としては、シリアルバスのように、アドレスやデータ等の区別なく少数の信号線で構成して、その信号線上に所定のプロトコルでプロセッサからのアクセス要求とメモリからの応答とを伝送してもよい。
【００２４】
本実施の形態にかかるシステムＬＳＩ１００では、プロセッサ１０１上で特権ソフトウェアが動作している場合に、当該システムＬＳＩ１００が管理している最上位の動作モードで動作するように設定を行っている。そして、当該最上位の動作モードに限りＨＶ保護領域に対する所定のアクセスを開放している。
【００２５】
また、特権ソフトウェアとは、システムＬＳＩ１００で動作するソフトウェアのうち真に信頼できるソフトウェアをいう。特権ソフトウェアの信頼性を保証する機構は、どのような手法で実現しても良い。本実施の形態では、読み込み及び書き込みが制限されている保護メモリ１０７に格納することで信頼性を保証している。また、本実施の形態は、特権ソフトとしてハイパーバイザを用いた例とする。当該ハイパーバイザでは、後述するＨＶ保護領域に含まれるアクセス先全てがアクセスさせる範囲となる。そして、当該ハイパーバイザのバイナリコードを「ＨＶコード」と呼ぶ。また、上記の最上位の動作モードを、「ＨＶモード」と呼ぶ。
【００２６】
ＨＶコード格納領域１１２は、ＨＶコードを格納している。また、当該ＨＶコード格納領域１１２に格納されたＨＶコードは、ゲストＯＳ等のソフトウェアから修正されてはならない。なお、ＨＶコード格納領域１１２の詳細については後述する。
【００２７】
図２に示すようにＨＶコードは、エントリ部に命令１“move SR to R0”２０１と、命令２“store R0 to CheckAdr”２０２とをエントリコードとして保持し、脱出コードに“return”２０３を保持する。このエントリ部では、ＨＶコードの実行時に他プログラムにより割り込みが行われないように、プロセッサ１０１が割り込み禁止であるか確認を行う処理を実行する。また、エントリ部は、プロセッサ１０１がハイパーバイザを起動する際に実行する、ＨＶコード内に格納されている複数の命令とする。そして、割り込み禁止であることが確認された場合には、プロセッサ１０１のＨＶコード実行時には、安全であることが保証される。
【００２８】
図２に示すように、ＨＶコードのエントリ部は、ムーブ命令とストア命令とで構成されている。そして、これら各命令はプロセッサ１０１が提供する機械語の１命令に相当する。命令１に含まれている‘ＳＲ’は、プロセッサ１０１の状態を表す値が格納されているレジスタ（ステータスレジスタ）を示す。この‘ＳＲ’の値には、プロセッサ１０１が現在割込み禁止状態かどうかを示す情報が含まれている。そして、‘ＲＯ’は、汎用レジスタとする。
【００２９】
また、このように本実施の形態でエントリ部が複数命令したのは、本実施の形態にかかる後述するプロセッサ１０１では、命令セットにＳＲの内容をメモリに書込む命令が存在せず、ＳＲの内容は汎用レジスタ（Ｒ０）との間に限り転送が可能なためである。
【００３０】
そこで、本実施の形態にかかるエントリ部は、命令１において、プロセッサ１０１の状態を示す値が格納されたレジスタ‘ＳＲ’の内容を、汎用レジスタ‘Ｒ０’に転送している。さらに命令２において、汎用レジスタ‘Ｒ０’の内容をＣｈｅｃｋＡｄｒに書込んでいる。この２個の命令で、プロセッサ１０１が割り込み禁止であることがチェックできる。
【００３１】
この命令に含まれる‘ＣｈｅｃｋＡｄｒ’は‘ＳＲ’の値を書き込むアドレスとする。‘ＣｈｅｃｋＡｄｒ’は、プロセッサ１０１が制御するメモリやデバイスのアドレスとは異なる、実際には存在しないアドレスを選択することが望ましい。この場合、後述するプロセッサ１０１が通信路に対して、存在しないアドレス‘ＣｈｅｃｋＡｄｒ’へのアクセス要求を伝送するが、当該通信路を介して接続されるメモリやデバイスは、伝送されたアクセス要求に応答して実際に読み書きを行うことがない。
【００３２】
また、‘ＣｈｅｃｋＡｄｒ’に実際に存在するアドレスを選択する場合であっても、ハイパーバイザ及びゲストＯＳを含む全てのプログラムが使用しないアドレスを選択する必要がある。仮に‘ＣｈｅｃｋＡｄｒ’で示されたアドレスにデバイスが存在する場合、当該命令によってデータ書き込み処理が行われることになる。この結果、デバイスの誤動作を引き起こす可能性がある。このため、実際に使用されているアドレスを選択しないように留意する必要がある。
【００３３】
また、本実施の形態とは異なるが、ＨＶコードのエントリ部が２個以上の命令で構成されていても良い。図３に示すように、ＨＶコードのエントリ部がｎ個で構成されている場合等も考えられる。図３で示した例では、汎用レジスタの値をメモリに書き込む際に、別のベースレジスタを使用してアドレスを指定する必要がある場合である。この例では、命令１で、状態レジスタＳＲの内容を汎用レジスタＲ０に転送し、命令２以降で、Ｒ１の値をＣｈｅｃｋＡｄｒに設定し、最後の命令ｎでＲ１をベースレジスタに使用して、汎用レジスタＲ０の内容をＣｈｅｃｋＡｄｒに書込みを行っている。そして、これらの命令の後にプロセッサが割込み禁止状態であることをチェックするものとする。このようなｎ個で構成されている場合も途中で他のコードに割り込まれる可能性がある。
【００３４】
つまり、ＨＶコードのエントリ部が複数命令で構成されている場合にセキュリティをどのように保持するのか課題となる。
【００３５】
次に、従来から存在する組み込み機器において、単にハイパーバイザが動作している時に最上位の動作モードとなるように設計をしたために、ハイパーバイザ以外に不正ユーザコードが最上位の動作モードで実行されてしまう例について説明する。
【００３６】
図４に示すように、左側の不正ユーザコードが不正な処理を行うソフトウェアコードであり、右側のバイナリコードがハイパーバイザのバイナリコード（以下、ＨＶコードという）である。まず、不正な処理を行うソフトウェアでは、“enable interrupt”により割込み許可に設定する。その後、不正ユーザコードは、エントリ部の命令１にジャンプする。命令１の実行後に何らかの割込みを発生させ、不正ユーザコードの割込みハンドラで‘Ｒ０’に偽のＳＲの値を読み込ませる。その後、エントリ部の命令２に復帰する。これと同時に、動作モードが最上位の動作モードに変更される。
【００３７】
また、１回の命令フェッチで同時に読み出される命令の範囲（以下、命令フェッチ単位と呼ぶ）は、プロセッサに依存して様々である。この命令フェッチ単位は、１回の命令フェッチによって同時に読み出される命令数と、命令フェッチ単位の先頭のアドレス境界で規定される。例えば、組込み用のＰｏｗｅｒＰＣ（登録商標）４０５プロセッサでは、命令長は３２ビットであるが、オンチップバスに接続されたメモリから命令をフェッチする場合には、１回の命令フェッチで６４ビット境界（＝２命令境界）に配置された２命令が同時に読み出される。
【００３８】
この組込み用のＰｏｗｅｒＰＣ（登録商標）４０５プロセッサの例では、命令フェッチ単位に含まれる命令のうち１番目の命令（すなわち６４ビット境界に配置された命令）から順に実行する場合、命令フェッチ要求で指定されるアドレスは命令フェッチ単位の先頭アドレスとなり、その命令フェッチ単位に含まれる２命令が同時に読み出される。１番目の命令の実行時には２番目の命令はバッファに記憶され、２番目の命令の実行時にはその命令に対する命令フェッチは発生しない。
【００３９】
また、本実施の形態では、命令フェッチ単位を、１命令毎の例とする。しかしながら、以下の説明の「命令」を「命令フェッチ単位」と置き換えることにより、命令フェッチ単位が複数命令の場合にも適用可能である。
【００４０】
そして、プロセッサ１０１では、ハイパーバイザのエントリ部の命令が終了した後、ハイパーバイザの他の命令を実行する。そして、ハイパーバイザ実行時に、実際には割り込みが禁止されていないため、不正ユーザコードはハイパーバイザに対して割り込むことができる。
【００４１】
なお、図４に示した例では、エントリ部の命令については命令順に行われている場合を示している。つまり、フェッチ検出部１２１が、仮にハイパーバイザのエントリ部の最初から最後までの命令を命令順にフェッチしたことを確認しても、本実施の形態に示したシステムＬＳＩ１００では第１通信経路を介した命令フェッチを確認できない。このため、例えば第６通信経路を介して他のユーザコードの命令フェッチが行われたとしても動作モード管理回路１０２は、当該他のユーザコードの命令フェッチを検出できない。そこで、本実施の形態では、エントリ部の処理に要する時間を計測して割り込みが行われたか否か判断することとしている。
【００４２】
仮に、汎用計算機に使用されるプロセッサのように割込みベクタテーブルや割込み処理ルーチンを完全に保護できる場合には、このような割込み処理ルーチンへのジャンプが行われても、再びＨＶコードに戻るように記述しておけば問題ない。しかしながら、組込み向け機器に用いられるプロセッサでは、割込みベクタテーブルや割込み処理ルーチンを完全にハイパーバイザの保護下に置くことができない。このため、割込み発生時に不正ユーザコードを、動作モードが最上位の動作モードで実行されてしまう可能性がある。
【００４３】
そこで、本実施の形態では、後述する動作モード管理回路１０２と、第１ＨＶ領域保護回路１０４と、第２ＨＶ領域保護回路１０６とが、不正ユーザコードによる最上位動作モードで動作することを禁止するように制御を行う。
【００４４】
図１に戻り、プロセッサ１０１は、第１のゲストＯＳ等のＯＳ及びハイパーバイザなどのソフトウェアに従って処理又は演算等を行う。また、本実施の形態にかかるプロセッサ１０１は、仮想化を支援する機能を内蔵していないプロセッサとするが、実用上は仮想化を支援する機能を内蔵しているプロセッサであってもよいことはいうまでもない。
【００４５】
また、プロセッサ１０１は、メモリ（メモリ１５０及び保護メモリ１０７）から命令を順次読み出し、読み出した命令を実行する。また、プロセッサ１０１は、読み出した命令に応じて、各通信路に接続されたメモリやデバイスに対してデータの読み出し／書き込みを行う。
【００４６】
ところで、一般的なプロセッサでは、より上位の特権モードに移行するときは、システムコール命令に代表される特定の命令の実行によって行われる。このシステムコール命令の実行後、特権モードへの移行とともに、例外が発生してＯＳのカーネルコードへジャンプし、割込み禁止状態として、安全性を確保している。本実施形態にかかるプロセッサは、動作モードが少なく、アプリケーションに割り当てるユーザモードとＯＳに割り当てる特権モードの２個程度しか動作モードがないものとする。この場合、ハイパーバイザの動作に割り当てる動作モードがなく、ＯＳとハイパーバイザの動作を区別できない。
【００４７】
そこで、本実施の形態では、プロセッサ１０１自体が持つ動作モードよりも上位のアクセス権限を有する動作モードであるＨＶモードを導入している。このため、プロセッサ１０１の外部に配置されたハードウェアでＨＶモードに切り替えることになる。この場合、プロセッサ１０１上で動作するソフトウェアの指示によるＨＶコードへのジャンプや割込み禁止状態への移行等は、プロセッサ内部の動作のため、外部に配置されたハードウェアからは制御できない。
【００４８】
そこで、本実施の形態にかかるシステムＬＳＩ１００では、ＨＶコードへのジャンプや割込み禁止状態への移行はプロセッサ１０１上で動作するソフトウェア（例えば第１のゲストＯＳ等）に任せ、プロセッサ１０１の外部のハードウェアで、適切にＨＶコードへジャンプしているか及び適切に割込み禁止状態になっているかチェックする。次に、このようなチェックを行う動作モード管理回路１０２について説明する。
【００４９】
動作モード管理回路１０２は、フェッチ検出部１２１と、フェッチ判断部１２２と、時間計測部１２３と、命令検出部１２４と、時間判断部１２５と、実行判断部１２６と、モード切替部１２７とを備え、プロセッサ１０１と第２ＨＶ領域保護回路１０６とを接続する第１通信路に流れるデータを監視して、必要に応じて動作モードの切替を行う。
【００５０】
また、動作モード管理回路１０２は、動作モードとして少なくともＨＶモードと通常モードの２個の状態を保持する状態遷移回路とする。動作モード管理回路１０２は、第１通信路に流れる信号を監視して、所定の条件が満たされた場合にＨＶモード／通常モードの状態遷移を起こす。また、動作モード管理回路１０２は、ＨＶモード／通常モードの状態に応じて、モード情報信号を第１ＨＶ領域保護回路１０４及び第２ＨＶ領域保護回路１０６に出力する。これにより、第１ＨＶ領域保護回路１０４及び第２ＨＶ領域保護回路１０６は、動作モードに応じたアクセス制御を行うことができる。なお、動作モード管理回路１０２の動作に関する詳細については後述する。
【００５１】
また、ＨＶモードに遷移できる条件について説明する。上述から動作モード管理回路１０２が動作モードをＨＶモードに切り替えるために必要な処理は、ＨＶコードのエントリ部に適切に実行を移す処理（つまりエントリ部の命令が適切に実行されたことを保証する必要がある）、及び割込み禁止にする処理（つまり割込み禁止状態であることを保証する必要がある）とする。そして動作モード管理回路１０２は、これら２つの処理の実行を保証した上で、動作モードをＨＶモードに設定する処理を行うことができる。つまり、これら３つの処理が不可分に行われることが必要となる。なお、処理が不可分に行われるとは、これらの処理の間に別の処理が行われることがないことを意味する。また、当然ながら、ＨＶコードは、ゲストＯＳ等の他のソフトウェアから修正できないように保護される必要がある。
【００５２】
また、本実施の形態にかかるＨＶコードのエントリ部が適切に実行された場合、プロセッサ１０１の状態が割り込み禁止であるか否かが確認できる。このため、エントリ部が上述したように不正ユーザコードに割り込まれず、適切に実行されたか否かがポイントとなる。そこで、本実施の形態にかかる動作モード管理回路１０２では、エントリ部の実行時間を測定することにより、２命令以上のエントリ部を不可分に実行したことを保証することとする。
【００５３】
動作モード管理回路１０２が、２命令以上のエントリ部が不可分に実行されたか否かに基づいて、動作モードをＨＶモードにするか否かが決定される。これにより、動作モード管理回路１０２がＨＶモードに切り替えたときには、割り込み不可能な状態でＨＶコードのみ実行されていることが保証される。
【００５４】
そして、本実施の形態にかかる動作モード管理回路１０２は、上述した割り込みの偽装を防ぐために、エントリ部の実行時間を測定することで、２命令以上のエントリ部を不可分に実行したことを保証する。なお、詳細な処理手順については後述する。
【００５５】
ところで、ＨＶコードに実行を移す処理、及び割込み禁止にする処理は、プロセッサ１０１上で動作するソフトウェアで行われる。そして、動作モード管理回路１０２がこれらの処理の実行要求又は実行結果の検出を行う。この検出チェック方法として、本実施の形態にかかる動作モード管理回路１０２は、プロセッサ１０１と保護メモリ１０７とを接続する第１通信路で送受信されるアクセス要求の種類や、アドレス、データを監視する。次に、動作モード管理回路１０２の各構成について説明する。
【００５６】
フェッチ検出部１２１は、プロセッサ１０１と第２ＨＶ領域保護回路１０６とを接続する第１通信路を介して、命令フェッチの検出を行う。そして、フェッチ検出部１２１は、システムＬＳＩ起動時の初期化終了した後、又はゲストＯＳ等のソフトウェアがプロセッサ１０１上で実行されている時に、ＨＶコード格納領域１１２に格納されたＨＶコードのエントリ部の命令フェッチを検出することになる。
【００５７】
フェッチ判断部１２２は、フェッチ検出部１２１が検出した命令フェッチが、後述する保護メモリ１０７のＨＶコード格納領域１１２に格納されたＨＶコードのエントリ部の最初の命令（例えば図２に示した命令１）のアドレスであるか否かを判断する。なお、詳細な判断手法については後述する。
【００５８】
また、フェッチ判断部１２２は、フェッチ検出部１２１が検出した命令フェッチが、後述する保護メモリ１０７のＨＶコード格納領域１１２に格納されたＨＶコードの脱出部に含まれている脱出命令のアドレス（例えば図２に示した“return”２０３のアドレス）であるか否かを判断する。
【００５９】
時間計測部１２３は、フェッチ判断部１２２がＨＶコードのエントリ部の最初の命令（例えば図２に示した命令１）に対するフェッチが行われたと判断した場合、時間の計測を開始する。また、時間計測部１２３が計測する時間は、システムＬＳＩ１００内で使用される何らかのクロック信号をカウントすることで得られる時間とする。また、プロセッサ１０１における命令実行時間を計測することが目的であるので、時間計測として用いるクロック信号はプロセッサ１０１の動作進行の基準となるクロック信号であることが望ましい。
【００６０】
命令検出部１２４は、プロセッサ１０１がＨＶコードのエントリ部の最後の命令（例えば図２に示した命令２）の実行を検出する。本実施の形態にかかる命令検出部１２４では、プロセッサ１０１からのデータ書き込み要求の検出を行う。なお、命令検出部１２４は、図２に示したようにエントリ部の命令が２個の場合には命令２の検出を行うが、エントリ部がｎ個の命令で構成されている場合にはｎ番目の命令の検出を行うことになる。なお、本実施の形態とは異なるが、命令検出部１２４が、実行を検出する命令は、最後の命令に制限するものではなく、割り込みが禁止されていることが確認できる特定の命令であればよいものとする。
【００６１】
時間判断部１２５は、時間計測部１２３が時間の計測を開始してから所定の時間が経過したか否かを判断する。この所定の時間は、エントリ部の全ての命令を行うために要する時間に基づいて定められる。これにより、時間判断部１２５が所定の時間が経過したと判断したときに、命令検出部１２４が命令を検出できないのであれば、他のソフトウェアにより割り込みが行われたと判断できる。
【００６２】
実行判断部１２６は、命令検出部１２４が検出した命令の実行結果から、割り込み禁止となっているか否か判断する。本実施の形態にかかる実行判断部１２６は、プロセッサ１０１からのアドレスＣｈｅｃｋＡｄｒに対する書き込み要求で指定された値が、割り込み禁止を表す値であるか否か判断する。これにより、プロセッサ１０１が割り込み禁止状態であるか否か判断できる。
【００６３】
モード切替部１２７は、実行判断部１２６の判断結果に従って、動作モードの切替を行う。例えば、モード切替部１２７は、実行判断部１２６が割り込み禁止であると判断した場合、モード切替部１２７は、割り込み禁止状態でハイパーバイザがプロセッサ１０１上で動作するとみなして、動作モードをＨＶモードに切り替える。
【００６４】
そして、後述するＨＶ保護領域においては、後述する第１ＨＶ領域保護回路１０４及び第２ＨＶ領域保護回路１０６が、当該動作モードに基づいて、メモリ１５０、保護メモリ１０７上のアドレス、又はデバイス１６０においてアクセス範囲を変更する処理を行う。なお、アクセス範囲とは、プロセッサ１０１にアクセスが開放されたアクセス先の範囲を示すものとする。
【００６５】
これにより、割り込み不可能な状態でＨＶコードが実行された時に限り、ＨＶ保護領域に含まれる全てのアクセス先にアクセスが開放される。そして、通常モードの場合には、第１のゲストＯＳ等はＨＶ保護領域に含まれる全てのアクセス先（範囲）よりも狭い範囲のアクセス範囲に対してアクセスが開放される。
【００６６】
また、フェッチ判断部１２２が脱出命令のアドレスだと判断した場合、モード切替部１２７は、第１のゲストＯＳ等のソフトウェアがプロセッサ１０１上で動作するとみなして、動作モードを通常モードに切り替える。なお、詳細な切り替え条件等については後述する。
【００６７】
本実施の形態では、システムＬＳＩ１００内部において、プロセッサ１０１上で動作するソフトウェアに応じてアクセスさせる範囲の変更等が行われる領域を、ＨＶ（ハイパーバイザ）保護領域とする。図１に示すようにＨＶ保護領域には、メモリアクセス制御部１０３と、デバイスアクセス制御部１０５と、保護メモリ１０７と、第１ＨＶ(ハイパーバイザ)領域保護回路１０４と、第２ＨＶ領域保護回路１０６とを含むものとする。
【００６８】
このＨＶ保護領域に格納された構成（メモリ又は回路）は、プロセッサ１０１からのアクセス（読出し／書込み）に対して所定の制限が設けられている。これにより、ＨＶ保護領域に格納されたメモリやデバイスの制御情報、ゲストＯＳの管理情報等が、ＨＶコードのみがアクセス又は書き込み可能となり、ゲストＯＳ等による不正な処理から保護することができる。
【００６９】
なお、本実施の形態では、ＨＶ保護領域に上述した構成を含むものとするが、このような構成に制限するものではない。変形例として、システムＬＳＩのＨＶ保護領域に、ＨＶ領域保護回路とメモリアクセス制御部のみ含むものでも良いし、ＨＶ領域保護回路とデバイスアクセス制御部のみ含むものでも良いし、ＨＶ領域保護回路と保護メモリのみ含むものでも良いし、これらの２つ以上の組み合わせでも良い。なお、他の組み合わせの詳細な例については後述する。
【００７０】
保護メモリ１０７は、ＨＶコード格納領域１１２を格納する。また、保護メモリ１０７は、通常モードの場合は書き込み禁止とする。
【００７１】
本実施の形態では、ＨＶコード格納領域１１２が、ＨＶ保護領域内に備えた保護メモリ１０７内に設けられている。そして、ＨＶコード格納領域１１２は、後述する第２ＨＶ領域保護回路１０６により、動作モードがＨＶモード以外の時には書込みが禁止されている。これにより、ゲストＯＳからＨＶコードに対する修正を抑止することができる。なお、本実施の形態では、ＨＶコード格納領域１１２をＨＶ保護領域内部に設けたが、ＨＶ保護領域内部に制限するものではなく、ゲストＯＳからの修正を抑止できるのであればどこに設けても良く、例えばメモリ１５０内に設けても良い（ただし、メモリ１５０内に設けた場合、動作モード管理回路１０２は通信路６に接続する必要がある）。
【００７２】
本実施の形態では、後述する第２ＨＶ領域保護回路１０６により保護されることとするが、他の実施例としてはプロセッサ１０１から書換え不可能なＲＯＭ（read  only  memory）上にＨＶコード格納領域１１２を設けても良い。
【００７３】
さらに、第２ＨＶ領域保護回路１０６は、ＨＶコード格納領域１１２に対する書込みを禁止するだけではなく、ＨＶコードのエントリ部を除いたＨＶコード本体のアドレスへの操作を全て禁止するように制御を行ってもよい。第２ＨＶ領域保護回路１０６がこのように制御を行うことで、通常モードにおいてＨＶコード本体の読み出しを抑止することも可能となる。これにより、ＨＶコードの処理内容をゲストＯＳから隠蔽することができ、安全性をいっそう向上させることもできる。
【００７４】
次に、ＨＶコード格納領域１１２に格納されたハイパーバイザと、第１のゲストＯＳ格納領域１５１に格納された第１のゲストＯＳと、第２のゲストＯＳ格納領域１５２に格納された第２のゲストＯＳと、第３のゲストＯＳ格納領域１５３に格納された第３のゲストＯＳと、について説明する。
【００７５】
図５に示すように、本実施の形態にかかるシステムＬＳＩ１００では、ハードウェア上にソフトウェアの最下層としてハイパーバイザ５０４が配置されている。さらに、そのハイパーバイザ５０４の上に第１のゲストＯＳ５０１と、第２のゲストＯＳ５０２と、第３のゲストＯＳ５０３とが配置された構成となっている。なお、図５では説明を容易にするために、ハードウェアの構成としてメモリ１５０内部の第１メモリ領域１５４と、第２メモリ領域１５５と、第３メモリ領域１５６と、ＨＶ保護領域１１１のメモリアクセス制御部１０３及びデバイスアクセス制御部１０５内に格納された制御情報とを示したが、これら以外の構成に対しても、同様の制御が行われるものとする。
【００７６】
そして、ハイパーバイザは、これらゲストＯＳの切り替え機能を提供する。システムＬＳＩ１００では、ゲストＯＳの切替え時に、任意のゲストＯＳからハイパーバイザに処理を戻してから、現在のゲストＯＳの状態の保存、及び次のゲストＯＳの状態の復帰を行う。
【００７７】
また、ゲストＯＳからハイパーバイザに処理が移ったときに、動作モードがＨＶモードとなる。この時、ハイパーバイザは、メモリアクセス制御部１０３及びデバイスアクセス制御部１０５が制御を行うときに参照する制御情報を更新することができる。そこで、ハイパーバイザは、次のゲストＯＳに対して割り当てられたメモリ及びデバイスのみアクセスできるように制御情報を更新する。このように、ＨＶモードで動作しているハイパーバイザは、ＨＶ保護領域に含まれる全てのハードウェア（アクセス先）にアクセスすることができる。
【００７８】
そして、ハイパーバイザから次のゲストＯＳに処理が移った段階で、動作モードが通常モードになる。この通常モードでは、制御情報に対して更新を行うことができない。これにより、後述するメモリアクセス制御部１０３は、更新された制御情報に従って、第１のゲストＯＳ５０１に対して第１メモリ領域１５４のみアクセスを開放し、第２メモリ領域１５５及び第３メモリ領域１５６に対してアクセスを禁止することができる。これにより、本実施の形態にかかるシステムＬＳＩ１００では、不正なゲストＯＳが、他のゲストＯＳに割り当てられたメモリやデバイスにアクセスすることを抑止することができる。本実施の形態にかかるシステムＬＳＩ１００のソフトウェア構成では、このように複数のゲストＯＳを互いに隔離して動作させることとする。
【００７９】
図１に戻り、第２ＨＶ領域保護回路１０６は、保護メモリ１０７とプロセッサ１０１との間に配置され、保護メモリ１０７を保護するための処理を行う。本実施の形態では、プロセッサ１０１と第２ＨＶ領域保護回路１０６とを第１通信路で接続し、第２ＨＶ領域保護回路１０６と保護メモリ１０７とを第３通信路で接続する。そして、第２ＨＶ領域保護回路１０６は、動作モード管理回路１０２から動作モードを示すモード情報信号が入力される。
【００８０】
第２ＨＶ領域保護回路１０６は、第２制御部１３２を備え、第１通信路を介してプロセッサ１０１からのアクセス要求を受け付ける。そして、第２ＨＶ領域保護回路１０６は、動作モード管理回路１０２から入力されたモード情報信号がＨＶモードを示す値の場合、受け付けたアクセス要求を保護メモリ１０７に、第３通信路を介して出力する。
【００８１】
そして、第２制御部１３２は、動作モードがＨＶモードである旨の入力された場合に、保護メモリ１０７に対してアクセス要求を許可する制御を行う。また動作モードが通常モードである旨の入力がされた場合に、保護メモリ１０７に対してアクセス要求を禁止する制御を行う。
【００８２】
これにより、第２ＨＶ領域保護回路１０６は、入力されたモード情報信号がＨＶモード以外を示す値の場合、受け付けたアクセス要求を保護メモリ１０７に出力することを抑止される。この保護メモリ１０７に対するアクセスに対する制限の例としては、保護メモリ１０７のアドレスの一部に対してアクセスを禁止する例や、書き込みのみ禁止する例等がある。また、これらの制限を組み合わせてもよい。このような制限は、保護メモリ１０７の一部のみ通常モード時のアクセスを制限する場合や、一部の操作を禁止する（書込みのみ禁止等）場合に有効である。
【００８３】
また、第２ＨＶ領域保護回路１０６は、ＨＶコードの隠蔽を行う場合には、ＨＶコード格納領域１１２のうちＨＶコードのエントリ部に対応するアドレスのみ常に読み出し可能にしておく。そして、ＨＶコードの本体に対応するアドレスは、ＨＶモードの時のみ読み出し可能にする。また、ＨＶコード実行時に動作モードをＨＶモードに変更する手順については後述する。このような処理を行うことで、安全性をさらに向上させることができる。
【００８４】
また、本実施の形態では、保護メモリ１０７と第２ＨＶ領域保護回路１０６とが別構成となる例について説明したが、これらの機能を１つの構成としてシステムＬＳＩ１００に配置しても良い。
【００８５】
第１ＨＶ領域保護回路１０４は、第１制御部１３１を備え、第１通信路を介してプロセッサ１０１からのアクセス要求を受け付ける。そして、第１ＨＶ領域保護回路１０４は、メモリアクセス制御部１０３及びデバイスアクセス制御部１０５とを第２通信路で接続する。また、第１ＨＶ領域保護回路１０４は、動作モード管理回路１０２からモード情報信号が入力される。
【００８６】
そして、メモリアクセス制御部１０３とメモリ１５０とを第４通信路で接続し、デバイス１６０とデバイスアクセス制御部１０５とを第５通信路で接続する。
【００８７】
メモリアクセス制御部１０３は、メモリ１５０に対するアクセスを制御する。また、本実施の形態にかかるシステムＬＳＩ１００では、プロセッサ１０１とメモリアクセス制御部１０３を接続する通信路として第６通信路を備え、プロセッサ１０１からメモリアクセス制御部１０３の制御情報にアクセスするための通信路として第１通信路及び第２通信路を用意した。これにより、メモリ１５０へのアクセス要求は、第６通信路を介して出力される。また、デバイスアクセス制御部１０５についても同様の通信路を備えることにした。
【００８８】
また、メモリアクセス制御部１０３は、プロセッサ１０１から第１通信路及び第１ＨＶ領域保護回路１０４を介して、制御情報の所定のアドレスに対するアクセス（少なくとも書込み、あるいは書込み／読出しの両方）を受け付ける。本実施の形態にかかるメモリアクセス制御部１０３では、保護対象となるのはこの制御情報とする。
【００８９】
メモリアクセス制御部１０３は、プロセッサ１０１から第６通信路を介して伝送されたメモリ１５０へのアクセス要求を、第４通信路を介してメモリ１５０に伝送する。このとき、メモリアクセス制御部１０３は、予め設定された制御情報に従い、メモリ１５０に伝送するアクセス要求に制限を加える。
【００９０】
また、メモリアクセス制御部１０３に設定される制御情報には様々な形態で実現できる。例えば、＜開始アドレス，終了アドレス＞の組を複数設定する。メモリへのアクセス要求のアドレスが、それらの組が表すアドレスの範囲内であれば、第４通信路へアクセス要求を伝える。そして、このようなアドレスの組をＨＶモードの場合に限り、編集することを可能とする。
【００９１】
メモリアクセス制御部１０３は、第１ＨＶ領域保護回路１０４にＨＶモードを示すモード情報信号が入力されている場合に、制御情報の書込み／読出しに割り当てられたアドレスに対するアクセスを受け付ける。そして、メモリアクセス制御部１０３は、第１ＨＶ領域保護回路１０４にＨＶモード以外のモードを示すモード情報信号が入力されている場合に、制御情報の書込み／読出しに割り当てられたアドレスに対するアクセスを受け付けない。
【００９２】
また、本実施の形態では、プロセッサ１０１とメモリアクセス制御部１０３を接続する経路として、第６通信路と、プロセッサ１０１から第１通信路、第１ＨＶ領域保護回路１０４及び第２通信路を経由する通信路との２つの経路を備えている。しかしながら、本実施の形態は、このような複数の経路を備えているものに制限するものではなく、例えばプロセッサ１０１から第１通信路、第１ＨＶ領域保護回路１０４及び第２通信路を経由する通信路のみとしてもよい。
【００９３】
メモリアクセス制御部１０３は、このようにＨＶモードに限り制御情報の書き込み／読み出しが行われることで、ゲストＯＳを動作を切り替える際に、ハイパーバイザが当該にメモリアクセス制御部１０３の制御情報を切り替え先のゲストＯＳに適した設定を行うことで、次に動作するゲストＯＳのデータのみアクセス可能にすることができる。
【００９４】
そして、第１制御部１３１は、動作モードがＨＶモードである旨の入力された場合に、メモリアクセス制御部１０３及びデバイスアクセス制御部１０５が有する制御情報に対するアクセスを開放する制御を行う。また動作モードが通常モードである旨の入力がされた場合に、メモリアクセス制御部１０３及びデバイスアクセス制御部１０５が有する制御情報に対するアクセスを禁止する制御を行う。
【００９５】
そして、通信路をこのような構成としたことで、第１ＨＶ領域保護回路１０４は、メモリアクセス制御部１０３及びデバイスアクセス制御部１０５の制御情報の書込み／読出し以外のアクセス要求に対する処理を行わなくてよい。
【００９６】
また、第１ＨＶ領域保護回路１０４は、プロセッサ１０１からメモリアクセス制御部１０３の制御情報の書込み／読出しに割り当てられたアドレスへのアクセス要求を受け付けた時、動作モード管理回路１０２から入力されるモード情報信号がＨＶモードを表す値の場合、当該アクセス要求を、第２通信路を介してメモリアクセス制御部１０３に出力する。また、第１ＨＶ領域保護回路１０４は、動作モード管理回路１０２から入力されるモード情報信号がＨＶモード以外を表す値の場合、当該アクセス要求を、メモリアクセス制御部１０３に出力するのを抑止する。
【００９７】
なお、本実施の形態では、メモリアクセス制御部１０３の制御情報に対するアクセス要求を第１通信路及び第２通信路を介してデータの送受信を行い、制御情報以外のメモリアクセス制御部１０３に対するアクセス要求を第６通信路を介してデータの送受信を行うこととした。しかしながら、本実施の形態とは異なるが、これら別々となっている通信路を、第１ＨＶ領域保護回路１０４を介した１つの通信路で構成しても良い。この場合、メモリ１５０に対するアクセス要求も第１ＨＶ領域保護回路１０４を介してアクセス要求が行われることになる。また、第１ＨＶ領域保護回路１０４は、メモリアクセス制御部１０３の制御情報に対する書き込み／読み込みは上述したような制御を行うが、これら以外のアクセス要求（例えば、メモリ１５０に対するアクセス要求）については全てメモリアクセス制御部１０３に出力する。
【００９８】
デバイスアクセス制御部１０５は、デバイス１６０に対するアクセスを制御する。また、デバイスアクセス制御部１０５は、上記のメモリアクセス制御部１０３と同様に第１ＨＶ領域保護回路１０４を介して、デバイスアクセス制御部１０５が有する制御情報に対するアクセス要求を受け付ける。なお、デバイスアクセス制御部１０５で行われる処理は、メモリアクセス制御部１０３と同様なので説明を省略する。
【００９９】
また、デバイスアクセス制御部１０５に設定される制御情報には様々な形態で実現できる。例えば、＜開始アドレス，終了アドレス＞の組を複数設定する。デバイスへのアクセス要求のアドレスが、それらの組が表すアドレスの範囲内であれば、第５通信路へアクセス要求を伝える。そして、このようなアドレスの組をＨＶモードの場合に限り、編集することを可能とする。
【０１００】
また制御情報の別の形態としては、複数のデバイスを接続されている場合、各デバイスに対応する＜開始アドレス，終了アドレス＞の組をあらかじめ設定しておき、さらに、当該アドレスに対してアクセスを開放するか否かを１ビットのビットマスクとして設定してもよい。この形態では、デバイスへのアクセス要求のアドレスが、ビットマスクが‘１’に対応するデバイスに割り当てられたアドレスの範囲内であれば、アクセス要求を出力する。
【０１０１】
本実施の形態では、例えばゲストＯＳを切り替える際に、ハイパーバイザがデバイスアクセス制御部１０５の制御情報の書き換えを行うことで、動作するゲストＯＳに割り当てられたデバイスにのみアクセスを開放することが可能となる。
【０１０２】
次に動作モード管理回路１０２の処理について説明する。動作モード管理回路１０２が行う動作は、大きく分けると以下の２つの動作になる。
【０１０３】
まず第１の動作として、動作モード管理回路１０２は、動作モードが通常モードの時、ＨＶモードエントリのチェックを行い、所定の条件が満たされた時点で動作モードをＨＶモードに遷移させる。第２の動作として、動作モード管理回路１０２は、動作モードがＨＶモードの時、ＨＶモード脱出のチェックを行い、所定の条件が満たされた時点で動作モードを通常モードへ遷移させる。
【０１０４】
図６に示すように、まず、動作モード管理回路１０２は、システムＬＳＩ１００全体の起動時に初期化を行う（ステップＳ６１１）。ここでは動作モードを通常モードにする。
【０１０５】
その後、動作モード管理回路１０２のフェッチ検出部１２１等が、第１通信路を監視して、ＨＶコードのエントリ部が適切に行われたことを確認する（ステップＳ６１２）。また、ステップＳ６１２の処理は、所定時間毎にエントリ部が適切に行われたと判断されるまで繰り返し行われる。なお、詳細な処理手順については後述する。
【０１０６】
次に、モード切替部１２７が、動作モードをＨＶモードに切り替える処理を行う（ステップＳ６１３）。そして、動作モード管理回路１０２は、動作モードがＨＶモードであることを示すモード情報信号を、第１ＨＶ領域保護回路１０４及び第２ＨＶ領域保護回路１０６に対して出力する（ステップＳ６１４）。なお、本フローチャートでは説明を容易にするため、このタイミングでモード情報信号を出力しているが、実際には、動作モード管理回路１０２は所定間隔毎に常にモード情報信号を出力している。なお、動作モード管理回路１０２が、モード情報信号を常に信号線に出力していてもよい。いずれにしても、動作モード管理回路１０２が、モード変更のタイミングを第１ＨＶ領域保護回路１０４及び第２ＨＶ領域保護回路１０６に伝えることが可能である。以上までが、上記第１の動作となる。
【０１０７】
そして、第１ＨＶ領域保護回路１０４は、動作モード管理回路１０２からモード情報信号の入力を受け付け、動作モードがＨＶモードに変更されたことを認識する（ステップＳ６０１）。これにより、第１制御部１３１は、メモリアクセス制御部１０３及びデバイスアクセス制御部１０５が有する制御情報に対するアクセスを開放する制御を行う（ステップＳ６０２）。
【０１０８】
同様に、第２ＨＶ領域保護回路１０６は、動作モード管理回路１０２からモード情報信号の入力を受け付けた場合、動作モードがＨＶモードに変更されたことを認識する（ステップＳ６２１）。これにより、第２制御部１３２は、保護メモリ１０７に対するアクセスを開放する制御を行う（ステップＳ６２２）。
【０１０９】
その後、動作モード管理回路１０２のフェッチ検出部１２１が、第１通信路を監視して、ＨＶコードの脱出部が適切に行われたことを確認する（ステップＳ６１５）。なお、ステップＳ６１５の処理は、所定時間毎に脱出部が適切に行われたと判断されるまで繰り返し行われる。なお、詳細な処理手順については後述する。
【０１１０】
次に、モード切替部１２７が、動作モードを通常モードに切り替える処理を行う（ステップＳ６１６）。つまり、プロセッサ１０１上では、ステップＳ６１６の処理において他のソフトウェアのために通常モードに切り替えられ、ゲストＯＳ等の他のソフトウェアが実行されることになる。
【０１１１】
このため、動作モード管理回路１０２は、動作モードが通常モードであることを示すモード情報信号を、第１ＨＶ領域保護回路１０４及び第２ＨＶ領域保護回路１０６に対して出力する（ステップＳ６１７）。以上までが、上記第２の動作となる。その後、他のソフトウェアが実行されているときに、再び動作モード管理回路１０２のフェッチ検出部１２１等が、第１通信路を監視して、ＨＶコードのエントリ部が適切に行われたか否かを確認することになる（ステップＳ６１２）。
【０１１２】
また、第１ＨＶ領域保護回路１０４は、動作モード管理回路１０２からモード情報信号の入力を受け付けた場合、動作モードが通常モードに変更されたことを認識する（ステップＳ６０３）。これにより、第１制御部１３１は、直ちにメモリアクセス制御部１０３及びデバイスアクセス制御部１０５が有する制御情報に対するアクセスを禁止する制御を行う（ステップＳ６０４）。
【０１１３】
同様に、第２ＨＶ領域保護回路１０６は、動作モード管理回路１０２からモード情報信号の入力を受け付けた場合、動作モードが通常モードに変更されたことを認識する（ステップＳ６２３）。これにより、第２制御部１３２は、直ちに保護メモリ１０７に対するアクセスを禁止する制御を行う（ステップＳ６２４）。
【０１１４】
本実施の形態では、上述した処理を行うことで、動作モードに従って、ＨＶ保護領域に格納された構成を適切に保護することができる。
【０１１５】
次に、図６のステップＳ６１２で示したＨＶコードのエントリ部が適切に実行されたことの確認手順について説明する。ＨＶコードのエントリ部のチェック手法は、ＨＶコードのエントリ部の内容とシステムＬＳＩの構成との組合せに応じて複数の形態が存在する。本実施の形態では複数存在する形態のうち一形態について説明する。なお、他の形態については、後述する実施形態で説明する。
【０１１６】
本実施の形態にかかるＨＶコードのエントリ部が適切に実行されたことを確認する手法としては、所定時間内にエントリ部が実行されたか否かを判断する手法とする。また、ＨＶコードのエントリ部が実行された際に、プロセッサ１０１が割込み禁止であることを確認している。そこで、本実施の形態では、所定時間内にエントリ部が実行され、且つエントリ部の実行で割り込み禁止であることが確認できた場合に、ＨＶモードに切り替えることとする。
【０１１７】
そして、ＨＶコードのエントリ部が実行される時、プロセッサ１０１から第１通信路に以下の順序で信号が伝送される。
【０１１８】
まず、プロセッサ１０１から、ＨＶコード格納領域１１２内のアドレス‘ＨＶＥｎｔｒｙ’の命令１のアドレスに対して、命令フェッチの要求を伝送する。そして、ＨＶコード格納領域１１２から命令１が伝送される。その後、プロセッサ１０１から命令２のアドレスに対して命令フェッチの要求が伝送される。そして、ＨＶコード格納領域１１２から命令２が伝送される。なお、エントリ部にｎ個命令がある場合、この命令フェッチ要求及び命令の伝送がｎ回繰り返されることになる。
【０１１９】
本実施の形態にかかる動作モード管理回路１０２は、命令１のアドレスに対する命令フェッチの要求を検出してから、命令２が実行されるまでの実行時間を計測し、当該実行時間が不正ユーザコードに割り込まれることなく連続して実行された場合の時間と等しい（または小さい）か否かを確認する。そして、動作モード管理回路１０２は、実行時間が等しい（または小さい）場合に、ＨＶコードのエントリ部が不可分に実行されたことを保証する。さらに、命令２の実行内容を確認することで、割込み禁止状態であることを保証する。これらが保証されたことで、動作モード管理回路１０２が動作モードをＨＶモードに遷移させる条件が満たされたことになる。
【０１２０】
図７に示すように、まず、フェッチ検出部１２１は、第１通信路を監視して、プロセッサ１０１から伝送されてくる命令フェッチの要求を検出したか否か判断する（ステップＳ７０１）。なお、当該処理は検出するまで繰り返される。
【０１２１】
次に、フェッチ判断部１２２は、フェッチ検出部１２１が命令フェッチの要求を検出した場合（ステップＳ７０１：Ｙｅｓ）、当該命令フェッチの要求で指定されたアドレスがエントリ部の命令１のアドレスであるか否か判断する（ステップＳ７０２）。そして、フェッチ判断部１２２が、異なると判断した場合（ステップＳ７０２：Ｎｏ）、再びフェッチ検出部１２１による命令フェッチの検出を行う（ステップＳ７０１）。
【０１２２】
そして、フェッチ検出部１２１は、アドレスが命令１と一致すると判断した場合（ステップＳ７０２：Ｙｅｓ）、時間計測部１２３が時間の計測を開始する（ステップＳ７０３）。
【０１２３】
次に、時間判断部１２５が、時間の計測を開始してから所定時間Ｔを経過したか否か判断する（ステップＳ７０４）。なお、所定時間Ｔは、命令１のフェッチを検出してから命令２が実行されるまでに要するものとして予め設定された時間とする。
【０１２４】
また、時間判断部１２５により所定時間Ｔを経過したと判断された場合（ステップＳ７０４：Ｎｏ）、時間計測部１２３は時間計測を終了し（ステップＳ７０９）、再びフェッチ検出部１２１による命令フェッチの検出を行う（ステップＳ７０１）。
【０１２５】
そして、時間判断部１２５により所定時間Ｔを経過していないと判断された場合（ステップＳ７０４：Ｙｅｓ）、命令検出部１２４は、第１通信路を監視して、プロセッサ１０１からのデータ書き込み要求を検出したか否かを判断する（ステップＳ７０５）。検出していないと判断した場合（ステップＳ７０５：Ｎｏ）、時間判断部１２５が所定時間Ｔを経過したか否かの判断から処理を開始する（ステップＳ７０４）。
【０１２６】
なお、所定時間Ｔは、エントリコードが先頭から連続して実行された際の実行時間であることが望ましい。このエントリコード実行時間は、プロセッサ１０１内部の動作をシミュレートして計算する、又は実際にプロセッサ上でエントリコードを実行させてプロセッサ１０１の出力信号を計測する等により、あらかじめ調べておく必要がある。ただし、エントリコードの実行時間にある程度の揺れが存在する場合、実行時間の最大値を所定時間Ｔとして用いる。
【０１２７】
次に、命令検出部１２４がデータ書込みの要求を検出した場合（ステップＳ７０５：Ｙｅｓ）、時間計測部１２３が時間計測を終了する（ステップＳ７０６）。そして、命令検出部１２４が当該データ書き込み要求で指定されたアドレスが‘ＣｈｅｃｋＡｄｒ’と一致するか否か判断する（ステップＳ７０７）。そして、命令検出部１２４が、異なると判断した場合（ステップＳ７０７：Ｎｏ）、再びフェッチ検出部１２１による命令フェッチの検出を行う（ステップＳ７０１）。
【０１２８】
そして、命令検出部１２４は、アドレスが‘ＣｈｅｃｋＡｄｒ’と一致すると判断した場合（ステップＳ７０７：Ｙｅｓ）、実行判断部１２６が書込み要求で指定されたデータと割込み禁止を表す‘ＳＲ’の値が一致するか否か判断する（ステップＳ７０８）。そして、実行判断部１２６が、異なると判断した場合（ステップＳ７０８：Ｎｏ）、再びフェッチ検出部１２１による命令フェッチの検出を行う（ステップＳ７０１）。
【０１２９】
次に、実行判断部１２６は、書込みデータと割込み禁止を表す‘ＳＲ’の値が一致すると判断した場合（ステップＳ７０７：Ｙｅｓ）、ＨＶコードのエントリ部が適切に実行されたことを確認できたものとする。そして、図６に示したステップＳ６１３以降の処理が行われることになる。
【０１３０】
なお、‘ＳＲ’が割込み禁止／許可のみを表す場合には、単純に書込みデータ全体を比較すれば良い。しかし、一般にはプロセッサ状態を表すレジスタは、割込み状態、アドレス変換モード、特権モードなどの異なる種類の状態をビット単位で表す場合が多い。このような場合、割込み状態に対応するビットのみを比較すれば良い。
【０１３１】
次に、図６のステップＳ６１５で示したＨＶモード脱出の検出手順について説明する。ハイパーバイザによる処理が終了したことを検出することで、動作モードをＨＶモードから切り替えられる。後述する例は、ＨＶモード脱出のチェックの第一の形態として、ＨＶモードで動作すべき処理が終了したことが保証される命令（以降、ＨＶモード脱出命令と呼ぶ）が実行されたことが保証されたときに動作モードを通常モードに切り替えさせる例である。
【０１３２】
ＨＶモードで動作すべき処理が終了したことが保証される命令はＨＶコードに依存する。このため、当該命令は、ＨＶコードに応じて様々な形態が存在する。例えば、図２で示したＨＶコードでは、符号２０３で示されるＨＶコードの最後の命令‘ｒｅｔｕｒｎ’が呼び出された場合、ＨＶコードによる処理が終了する。つまり、プロセッサ１０１が最後の命令２０３を呼び出して、実行されるソフトウェアをゲストＯＳに切り替える場合、これ以降の処理はＨＶモードで動作させる必要がない。そこで、図２に示すＨＶコードでは、当該最後の命令２０３を、ＨＶモード脱出命令として用いる。なお、本実施の形態は、ＨＶモード脱出命令をＨＶコードの最後の命令に制限するものではない。つまり、ＨＶモードで動作すべき処理が終了したことが保証される命令であれば、ＨＶコードの最後の命令より前の命令でも良い。
【０１３３】
そして、図２に示すＨＶモード脱出命令（最後の命令２０３）が実行される時、まず第１にプロセッサ１０１は、保護メモリ１０７のＨＶモード脱出命令が格納されているアドレス（以下、“ＨＶＥｘｉｔ”とする）に対して、命令フェッチの要求を伝送する。次に、保護メモリ１０７からＨＶコード格納領域１１２に格納されたデータ（“ＨＶＥｘｉｔ”に格納されている命令）をプロセッサ１０１に対して伝送する。
【０１３４】
そして、本実施の形態では、動作モード管理回路１０２は、ＨＶモード脱出命令が格納されているアドレスに対するフェッチを検出した場合に、ＨＶモードで動作すべき処理が終了したことを保証されたと判断し、動作モードを通常モードに切り替える。
【０１３５】
図８に示すように、まず、フェッチ検出部１２１は、第１通信路を監視して、プロセッサ１０１から伝送されてくる命令フェッチの要求を検出する（ステップＳ８０１）。
【０１３６】
次に、フェッチ検出部１２１は、命令フェッチの要求を検出した場合、フェッチ判断部１２２は、当該命令フェッチの要求で指定されたアドレスが脱出命令のアドレス（図２の符号２０３）と一致するか否か判断する（ステップＳ８０２）。そして、フェッチ判断部１２２が、異なると判断した場合（ステップＳ８０２：Ｎｏ）、再び命令フェッチの検出を行う（ステップＳ８０１）。
【０１３７】
次に、フェッチ検出部１２１は、当該命令フェッチの要求で指定されたアドレスが脱出命令のアドレス（図２符号２０３）と一致すると判断した場合（ステップＳ８０２：Ｙｅｓ）、ＨＶモード脱出チェックが完了したものとする。そして、図６に示したステップＳ６１６以降の処理が行われることになる。
【０１３８】
上述した実施の形態では、システムＬＳＩ１００のＨＶコード格納領域９１１を保護メモリ１０７内に設け、各ゲストＯＳの格納領域をメモリ１５０内に設けた。しかしながら、同一メモリ内にＨＶコード格納領域と各ゲストＯＳの格納領域とを設けても良い。この場合、ＨＶコード格納領域は、メモリアクセス制御部等によりアクセスが制限されることになる。
【０１３９】
なお、ＨＶ保護領域の制限手法として、本実施の形態以外の制限手法を用いても良い。例えば、ＨＶモード以外の動作モードの場合は、ＨＶ保護領域に格納された全てのメモリ及びデバイスの全てのアドレスに対して、全ての操作（読出し／書込み）を禁止してもよい。他の例としては、ＨＶ保護領域に格納されたうちアドレスの一部に対してのみアクセスや書き込みを禁止しても良い。また、これらの制限を組み合わせても良い。
【０１４０】
なお、通信路を流れるデータにおいて、命令フェッチとデータ読出しを区別する信号が存在しない場合、通信路と別経路でプロセッサ１０１が出力する命令フェッチを示す信号を動作モード管理回路に入力する必要がある。これにより、命令フェッチとデータ読み出しを区別することができる。
【０１４１】
本実施の形態にかかるシステムＬＳＩ１００を用いることで、プロセッサの仮想化サポート機能に依存することなく、ＨＶコードの実行時にのみアクセス可能となる保護領域を確保することができる。この保護領域にメモリやデバイスのアクセス制御情報、ゲストＯＳの管理情報、ＨＶコード本体といった情報を格納することにより、ゲストＯＳから不正にこれらの情報を読出し／書込みすることを抑止することができる。このように、確実にゲストＯＳ間の隔離を実現することで、安全性を向上させることができる。
【０１４２】
また、本実施の形態にかかるシステムＬＳＩ１００では、ＨＶコードのエントリ部が複数命令で構成されているが、当該エントリ部の実行時に時間を計測することで、エントリ部の複数命令が不可分に行われていることを保証するので、当該エントリ部の実行時に他のコードによる割り込みを防止することができる。これにより、安全性を向上させることができる。
【０１４３】
（第２の実施の形態）
第１の実施の形態にかかるシステムＬＳＩ１００では、ＨＶコード格納領域１１２に格納されたＨＶコードのエントリ部が、割り込み禁止であることを確認するための複数命令で構成された例について説明した。しかしながら、ＨＶコードのエントリ部をこのような命令に制限するものではない。そこで、第２の実施の形態では、システムＬＳＩのＨＶコード格納領域に、割り込み禁止するための複数命令で構成された例について説明する。
【０１４４】
図９は、第２の実施の形態に係るシステムＬＳＩ９００の構成を示すブロック図である。上述した第１の実施の形態に係るシステムＬＳＩ１００とは、動作モード管理回路１０２と処理が異なる動作モード管理回路９０１を備え、ＨＶコード格納領域１１２とは格納しているバイナリコードが異なるＨＶコード格納領域９１１を保護メモリ１０７が備えている点のみ異なる。なお、本実施の形態のシステムＬＳＩ９００の構成で、第１の実施の形態のシステムＬＳＩ１００と共通な構成については説明を省略する。
【０１４５】
まず、ＨＶコード格納領域９１１は、ＨＶコードを格納している。図１０に示すようにＨＶコードは、エントリ部に命令１“load  R0,=割り込み禁止”１００１と、命令２“move  R0  to  SR”１００２とを保持し、脱出コードは図２と同様に“return”１００３を保持する。このエントリ部では、プロセッサ１０１の状態を保持する“ＳＲ”に割り込み禁止であることを示す値を設定する。つまり、第１の実施の形態にかかるシステムＬＳＩ１００のようにアドレス“ＣｈｅｃｋＡｄｒ”に対して書き込まれたデータをチェックする必要がない。つまり、本実施の形態にかかるシステムＬＳＩ９００は命令フェッチの確認を行うだけで、割り込み禁止を保証できる実施の形態である。
【０１４６】
また、本実施の形態とは異なるが、ＨＶコードのエントリ部が２個以上の命令で構成されていても良い。図１１に示すように、ＨＶコードのエントリ部がｎ個で構成されている場合等も考えられる。図１１で示した例では、状態レジスタ‘ＳＲ’の３ビット目が‘１’の場合が書き込み禁止である例とする。このためにｎ個の命令を行うことで、ＳＲの３ビット目を‘１’を設定している。このようなｎ個で構成されている場合も途中で他のコードに割り込まれる可能性がある。
【０１４７】
また、このように本実施の形態でエントリ部が複数命令したのは、第１の実施の形態と同様に、プロセッサ１０１が有する命令セットの制限のためである。
【０１４８】
動作モード管理回路９０１は、第１の実施の形態にかかる動作モード管理回路１０２とは、フェッチ判断部１２２と処理が異なるフェッチ判断部９２１を備え、時間判断部１２５と処理が異なる時間判断部９２２を備え、命令検出部１２４と実行判断部１２６とを削除された点で異なる。
【０１４９】
フェッチ判断部９２１は、フェッチ検出部１２１が備える機能の他に、後述する保護メモリ１０７のＨＶコード格納領域９１１に格納されたＨＶコードのエントリ部の最後の命令のアドレス（図１０に示す命令２）であるか否かを判断する。なお、詳細な判断手法については後述する。
【０１５０】
時間判断部９２２は、時間計測部１２３が時間の計測を開始してから所定の時間が経過したか否かを判断する。この所定の時間は、エントリ部の全ての命令をフェッチするまでに要する時間に基づいて定められる。これにより、時間判断部９２２が所定の時間が経過したと判断したときに、フェッチ判断部９２１がエントリ部の最後の命令を検出したと判断できなかった場合、他のソフトウェアにより割り込みが行われたと判断できる。
【０１５１】
また、システムＬＳＩ９００の処理は、システムＬＳＩ１００の処理と異なる点として、動作モード管理回路９１１のフェッチ検出部１２１等が、第１通信路を監視して、ＨＶコードのエントリ部が適切に行われたことを確認する処理手順が異なる。そこで、エントリ部が適切に行われたことを確認する処理手順について説明する。
【０１５２】
図１２に示すように、まず、フェッチ検出部１２１は、第１通信路を監視して、プロセッサ１０１から伝送されてくる命令フェッチの要求を検出したか否か判断する（ステップＳ１２０１）。なお、当該処理は検出するまで繰り返される。
【０１５３】
次に、フェッチ判断部１２２は、フェッチ検出部１２１が命令フェッチの要求を検出した場合（ステップＳ１２０１：Ｙｅｓ）、当該命令フェッチの要求で指定されたアドレスがエントリ部の命令１のアドレスであるか否か判断する（ステップＳ１２０２）。そして、フェッチ判断部１２２が、異なると判断した場合（ステップＳ１２０２：Ｎｏ）、再びフェッチ検出部１２１による命令フェッチの検出を行う（ステップＳ１２０１）。
【０１５４】
そして、フェッチ判断部１２２は、アドレスが命令１と一致すると判断した場合（ステップＳ１２０２：Ｙｅｓ）、時間計測部１２３が時間の計測を開始する（ステップＳ１２０３）。
【０１５５】
次に、時間判断部９２２が、時間の計測を開始してから所定時間Ｔを経過したか否か判断する（ステップＳ１２０４）。なお、所定時間Ｔは、命令１のフェッチを検出してから命令２をフェッチするまでに要するものとして予め設定された時間とする。
【０１５６】
また、時間判断部９２２により所定時間Ｔを経過したと判断された場合（ステップＳ１２０４：Ｎｏ）、時間計測部１２３は時間計測を終了し（ステップＳ１２０８）、再びフェッチ検出部１２１による命令フェッチの検出を行う（ステップＳ１２０１）。
【０１５７】
そして、時間判断部９２２により所定時間Ｔを経過していないと判断された場合（ステップＳ１２０４：Ｙｅｓ）、フェッチ検出部１２１は、第１通信路を監視して、プロセッサ１０１から伝送されてくる命令フェッチの要求を検出したか否か判断する（ステップＳ１２０５）。
【０１５８】
そして、フェッチ検出部１２１が命令フェッチを検出しなかった場合（ステップＳ１２０５：Ｎｏ）、時間判断部９２２が所定時間Ｔを経過したか否かの判断から処理を開始する（ステップＳ１２０４）。
【０１５９】
そして、フェッチ検出部１２１が命令フェッチを検出した場合（ステップＳ１２０５：Ｙｅｓ）、フェッチ判断部９２１はフェッチアドレスが命令２のアドレスであるか否か判断する（ステップＳ１２０６）。そして、フェッチアドレスが命令２のアドレスではないと判断した場合（ステップＳ１２０６：Ｎｏ）、時間判断部９２２が所定時間Ｔを経過したか否かの判断から処理を開始する（ステップＳ１２０４）。
【０１６０】
次に、フェッチ判断部９２１はフェッチアドレスが命令２のアドレスであると判断した場合（ステップＳ１２０６：Ｙｅｓ）、時間計測部１２３が時間計測を終了する（ステップＳ１２０７）。そして、図６に示したステップＳ６１３以降の処理が行われることになる。
【０１６１】
つまり、本実施の形態では、命令２のアドレスがフェッチされた以上、命令２により書き込み禁止状態にされる。これにより、プロセッサ１０１が書き込み禁止状態になることが保証される。つまり、第１の実施の形態のように実行結果を確認することなく、エントリ部の複数命令が不可分に行われていることを保証するので、安全性を確保することができる。
【０１６２】
（第３の実施の形態）
第１及び第２の実施の形態にかかるシステムＬＳＩでは、時間を計測することで他のプログラムによる割り込みを防止する例について説明した。しかしながら、割り込み防止手法を時間計測に制限するものではない。そこで、第３の実施の形態では、ＨＶコードのエントリ部の命令フェッチが命令順に行われていることを検出することで、割り込み禁止を防止する形態とする。
【０１６３】
図１３は、第３の実施の形態に係るシステムＬＳＩ１３００の構成を示すブロック図である。上述した第１の実施の形態に係るシステムＬＳＩ１００とは、動作モード管理回路１０２と処理が異なる動作モード管理回路１３０１と、第１ＨＶ領域保護回路１０４と処理が異なる第１ＨＶ領域保護回路１３０２とを備え、第２ＨＶ領域保護回路１０６が削除され、第１、２及び６通信路の接続先が変更されている点のみ異なる。なお、本実施の形態のシステムＬＳＩ１３００の構成で、第１の実施の形態のシステムＬＳＩ１００と共通な構成については説明を省略する。
【０１６４】
また、本実施の形態で利用されるＨＶコードは、第１の実施の形態で示したＨＶコードと同様として説明を省略する。そして、このようなＨＶコードに対してエントリコードを２命令以上で実装する場合、その処理中に任意のユーザコードを実行されて、割込み禁止状態を偽装されるおそれがある。
【０１６５】
図１４は、図２に示したエントリコードにおいて、割込み禁止状態が偽装される処理を示した説明図である。図１４に示す例では、エントリコードのエントリ部の途中から不正ユーザコードが進入して、プロセッサ１０１の状態を割込み禁止状態と偽装している。詳細には、不正ユーザコードは“enable  interrupt”命令を実行することで、プロセッサ１０１の割込みを許可する。その後、不正ユーザコードは、“load  R0,  偽SR値”命令を実行することで、汎用レジスタ“Ｒ０”に偽のＳＲの値を読み込ませる。その後、エントリコードの命令２にジャンプする。そして、プロセッサ１０１は、命令２を実行する際、実際には割込み許可状態であるにもかかわらず、割込み禁止を表す偽ＳＲ値をＣｈｅｃｋＡｄｒに書き込むことになる。これにより、動作モード管理部がＣｈｅｃｋＡｄｒの値を参照すると割り込み禁止状態と判断できるので、割込み許可状態でハイパーバイザが実行され、動作モードがＨＶモードに切り替えられることになる。ここで不正ユーザコードにより割込みが行われると、ＨＶモードのまま不正ユーザコードの割込みハンドラにジャンプしてしまう。
【０１６６】
また、図１４で示した例では、ＨＶコードのエントリ部を全て行わなくてよいので、不正ユーザコードで割り込まれたとしても、エントリ部の実行時間が短くなる場合が存在する。このため、第１の実施の形態で示した手法は用いることは難しい。
【０１６７】
そこで、本実施の形態にかかる動作モード管理回路１３０１では、エントリ部の命令が命令順にフェッチされていることを確認して、割り込み禁止状態になっていることを保証することとしている。つまり、本実施の形態にかかる動作モード管理回路１３０１は、第１通信路を監視しているので、プロセッサ１０１から保護メモリ１０７へのフェッチ要求のみならず、メモリ１５０へのフェッチ要求も監視することができる。つまり、フェッチ要求が、エントリ部に対して命令順に行われていれば、ハイパーバイザコード以外のコードに対してフェッチ要求が行われていないことになる。したがって、動作モード管理回路１３０１は、他のコードによる割り込みが行われていないことを保証できる。
【０１６８】
図１３に戻り、動作モード管理回路１３０１は、第１の実施の形態にかかる動作モード管理回路１０２とは、フェッチ検出部１２１と処理が異なるフェッチ検出部１３１１を備え、フェッチ判断部１２２と処理が異なるフェッチ判断部１３１２を備え、時間計測部１２３と時間判断部１２５とを削除された点で異なる。
【０１６９】
フェッチ検出部１３１１は、プロセッサ１０１とメモリアクセス制御部１０３と、デバイスアクセス制御部１０５と、保護メモリ１０７とを接続する第６通信路を介して、命令フェッチの検出を行う。
【０１７０】
フェッチ判断部１３１２は、フェッチ検出部１２１が検出した命令フェッチが、保護メモリ１０７のＨＶコード格納領域１１２に格納されたＨＶコードのエントリ部を構成する各命令のアドレスであるか否かを判断する。また、フェッチ判断部１３１２は、命令フェッチがエントリ部の命令順にフェッチを行っているか否かも判断する。
【０１７１】
第１ＨＶ領域保護回路１３０２は、第１制御部１３２１を備え、第１通信路を介してプロセッサ１０１からのアクセス要求を受け付ける。そして、第１ＨＶ領域保護回路１３０２は、メモリアクセス制御部１０３、デバイスアクセス制御部１０５及び保護メモリ１０７を第２通信路で接続する。また、第１ＨＶ領域保護回路１３０２は、動作モード管理回路１３０１からモード情報信号が入力される。
【０１７２】
第１制御部１３２１は、動作モードがＨＶモードである旨の入力された場合に、メモリアクセス制御部１０３及びデバイスアクセス制御部１０５が有する制御情報、並びに保護メモリ１０７に対するアクセスを開放する制御を行う。また動作モードが通常モードである旨の入力がされた場合に、メモリアクセス制御部１０３及びデバイスアクセス制御部１０５が有する制御情報、並びに保護メモリ１０７に対するアクセスを禁止する制御を行う。
【０１７３】
また、システムＬＳＩ１３００の処理は、システムＬＳＩ１００の処理と異なる点として、動作モード管理回路１３０１のフェッチ検出部１３１１等が、第６通信路を監視して、ＨＶコードのエントリ部が適切に行われたことを確認する処理手順が異なる。そこで、エントリ部が適切に行われたことを確認する処理手順について説明する。
【０１７４】
図１５に示すように、まず、動作モード管理回路１３０１は、エントリチェックをするため、変数ｉに初期値として‘１’を設定する（ステップＳ１５０１）。次に、フェッチ検出部１３１１は、第６通信路を監視して、プロセッサ１０１から伝送されてくる命令フェッチの要求を検出したか否か判断する（ステップＳ１５０２）。なお、当該処理は検出するまで繰り返される。
【０１７５】
次に、フェッチ判断部１３１２は、フェッチ検出部１３１１が命令フェッチの要求を検出した場合（ステップＳ１５０２：Ｙｅｓ）、当該命令フェッチの要求で指定されたアドレスがエントリ部のｉ番目の命令（最初はｉ＝‘１’）のアドレスであるか否か判断する（ステップＳ１５０３）。そして、フェッチ判断部１３１２が、異なると判断した場合（ステップＳ１５０３：Ｎｏ）、再び動作モード管理回路１３０１は、変数ｉに初期値として‘１’を設定する処理から開始する（ステップＳ１５０１）。
【０１７６】
そして、フェッチ判断部１３１２は、アドレスが命令ｉのアドレスと一致すると判断した場合（ステップＳ１５０３：Ｙｅｓ）、動作モード管理回路１３０１は、変数ｉに‘１’を追加する（ステップＳ１５０４）。そして、動作モード管理回路１３０１は、変数ｉが‘２’より大きいか否か判断する（ステップＳ１５０５）。つまり、ＨＶコードのエントリ部に含まれている命令の数だけ、上述した処理を繰り返す。
【０１７７】
なお、ステップＳ１５０５では、本実施の形態にかかるＨＶコードのエントリ部が２命令で構成されているため、変数ｉが‘２’より大きいか否か判断している。つまり、エントリ部がｎ命令で構成されている場合、変数ｉがｎより大きいか否か判断すればよい。
【０１７８】
動作モード管理回路１３０１は変数ｉが‘２’以下と判断した場合（ステップＳ１５０５：Ｎｏ）、フェッチ検出部１３１１がプロセッサ１０１から伝送されてくる命令フェッチの要求を検出したか否か判断を再び行う（ステップＳ１５０２）。
【０１７９】
そして、動作モード管理回路１３０１は変数ｉが‘２’より大きいと判断した場合（ステップＳ１５０５：Ｙｅｓ）、命令検出部１２４は、第６通信路を監視して、プロセッサ１０１からのデータ書き込み要求を検出したか否かを判断する（ステップＳ１５０６）。検出していないと判断した場合（ステップＳ１５０６：Ｎｏ）、書き込み要求を検出するまで処理を繰り返す。
【０１８０】
次に、命令検出部１２４がデータ書込みの要求を検出した場合（ステップＳ１５０６：Ｙｅｓ）、当該データ書き込み要求で指定されたアドレスが‘ＣｈｅｃｋＡｄｒ’と一致するか否か判断する（ステップＳ１５０７）。そして、命令検出部１２４が、異なると判断した場合（ステップＳ１５０７：Ｎｏ）、再び動作モード管理回路１３０１は、変数ｉに初期値として‘１’を設定する処理から開始する（ステップＳ１５０１）。
【０１８１】
そして、命令検出部１２４は、アドレスが‘ＣｈｅｃｋＡｄｒ’と一致すると判断した場合（ステップＳ１５０７：Ｙｅｓ）、実行判断部１２６が書込み要求で指定されたデータと割込み禁止を表す‘ＳＲ’の値が一致するか否か判断する（ステップＳ１５０８）。そして、実行判断部１２６が、異なると判断した場合（ステップＳ１５０８：Ｎｏ）、再び動作モード管理回路１３０１は、変数ｉに初期値として‘１’を設定する処理から開始する（ステップＳ１５０１）。
【０１８２】
次に、実行判断部１２６は、書込みデータと割込み禁止を表す‘ＳＲ’の値が一致すると判断した場合（ステップＳ１５０８：Ｙｅｓ）、ＨＶコードのエントリ部が適切に実行されたことを確認できたものとする。そして、図６に示したステップＳ６１３以降の処理が行われることになる。
【０１８３】
本実施の形態にかかるシステムＬＳＩ１３００では、ＨＶコードのエントリ部の命令が順にフェッチされていることを確認することで、他のコードによる割り込みが行われていないことを確認できる。これにより、安全性を確保することができる。
【０１８４】
（第３の実施の形態の変形例）
第３の実施の形態では、命令フェッチの確認をループ処理（ステップＳ１５０２〜Ｓ１５０５）で行うこととしたが、命令数が少ない場合には上述した命令フェッチの確認のループ処理を展開しても良い。そこで、第３の実施の形態の変形例ではループ処理を展開した例について説明する。
【０１８５】
実際にエントリコードをチェックするハードウェア回路を設計する際、エントリコードの命令数が少ない場合は、ループを展開した方が実装が簡潔になる。
【０１８６】
第３の実施の形態の図１５に示した処理手順の命令フェッチの確認のループを、２回の命令フェッチの確認で展開した処理手順が図１６である。図１６のフローチャートでは、図１５と比較して、変数ｉの演算を行うハードウェアの実装は不要であり、単純な状態遷移回路として設計可能となる。
【０１８７】
図１６に示すように、フェッチ検出部１３１１は、第６通信路を監視して、プロセッサ１０１から伝送されてくる命令フェッチの要求を検出したか否か判断する（ステップＳ１６０１）。なお、当該処理は検出するまで繰り返される。
【０１８８】
次に、フェッチ判断部１３１２は、フェッチ検出部１３１１が命令フェッチの要求を検出した場合（ステップＳ１６０１：Ｙｅｓ）、当該命令フェッチの要求で指定されたアドレスがエントリ部の命令１のアドレスであるか否か判断する（ステップＳ１６０２）。そして、フェッチ判断部１３１２が、異なると判断した場合（ステップＳ１６０２：Ｎｏ）、再びフェッチ検出部１３１１による命令フェッチの要求を検出したか否か判断する処理を行う（ステップＳ１６０１）。
【０１８９】
そして、フェッチ判断部１３１２は、アドレスが命令１のアドレスと一致すると判断した場合（ステップＳ１６０２：Ｙｅｓ）、フェッチ検出部１３１１が、第６通信路を監視して、プロセッサ１０１から伝送されてくる命令フェッチの要求を検出したか否か判断する（ステップＳ１６０３）。なお、当該処理は検出するまで繰り返される。
【０１９０】
次に、フェッチ判断部１３１２は、フェッチ検出部１３１１が命令フェッチの要求を検出した場合（ステップＳ１６０３：Ｙｅｓ）、当該命令フェッチの要求で指定されたアドレスがエントリ部の命令２のアドレスであるか否か判断する（ステップＳ１６０４）。そして、フェッチ判断部１３１２が、異なると判断した場合（ステップＳ１６０４：Ｎｏ）、再びフェッチ検出部１３１１による命令フェッチの要求を検出したか否か判断する処理を行う（ステップＳ１６０１）。
【０１９１】
そして、フェッチ判断部１３１２は、アドレスが命令２のアドレスと一致すると判断した場合（ステップＳ１６０４：Ｙｅｓ）、命令検出部１２４は、第６通信路を監視して、プロセッサ１０１からのデータ書き込み要求を検出したか否かを判断する（ステップＳ１６０５）。検出していないと判断した場合（ステップＳ１６０５：Ｎｏ）、書き込み要求を検出するまで処理を繰り返す。
【０１９２】
次に、命令検出部１２４がデータ書込みの要求を検出した場合（ステップＳ１６０５：Ｙｅｓ）、当該データ書き込み要求で指定されたアドレスが‘ＣｈｅｃｋＡｄｒ’と一致するか否か判断する（ステップＳ１６０６）。そして、命令検出部１２４が、異なると判断した場合（ステップＳ１６０６：Ｎｏ）、再びフェッチ検出部１３１１による命令フェッチの要求を検出したか否か判断する処理を行う（ステップＳ１６０１）。
【０１９３】
そして、命令検出部１２４は、アドレスが‘ＣｈｅｃｋＡｄｒ’と一致すると判断した場合（ステップＳ１６０６：Ｙｅｓ）、実行判断部１２６が書込み要求で指定されたデータと割込み禁止を表す‘ＳＲ’の値が一致するか否か判断する（ステップＳ１６０７）。そして、実行判断部１２６が、異なると判断した場合（ステップＳ１６０７：Ｎｏ）、再びフェッチ検出部１３１１による命令フェッチの要求を検出したか否か判断する処理を行う（ステップＳ１６０１）。
【０１９４】
次に、実行判断部１２６は、書込みデータと割込み禁止を表す‘ＳＲ’の値が一致すると判断した場合（ステップＳ１６０７：Ｙｅｓ）、ＨＶコードのエントリ部が適切に実行されたことを確認できたものとして終了する。そして、図６に示したステップＳ６１３以降の処理が行われることになる。
【０１９５】
上述した処理手順で行うことでハードウェア回路を簡潔することができる。なお、後述する実施の形態において、命令フェッチの確認をループ処理している場合も、上述したようにループ処理を展開しても良い。
【０１９６】
（第４の実施の形態）
第４の実施の形態では、第３の実施の形態と同様にＨＶコードのエントリ部の命令フェッチが命令順に行われていることを確認する。そして、第４の実施の形態は、第３の実施の形態と異なる点としてはＨＶコードのエントリ部の処理が割り込み禁止するための複数命令で構成された例とする。
【０１９７】
図１７は、第４の実施の形態に係るシステムＬＳＩ１７００の構成を示すブロック図である上述した第３の実施の形態に係るシステムＬＳＩ１３００とは、動作モード管理回路１３０１と処理が異なる動作モード管理回路１７０１を備える点のみ異なる。なお、本実施の形態のシステムＬＳＩ１７００の構成で、第３の実施の形態のシステムＬＳＩ１３００と共通な構成については説明を省略する。
【０１９８】
また、本実施の形態で利用されるＨＶコードは、第２の実施の形態で示したＨＶコードと同様として説明を省略する。そして、このようなＨＶコードに対してエントリコードを２命令以上で実装する場合、その処理中に任意のユーザコードを実行されて、割込み禁止状態を偽装されるおそれがある。
【０１９９】
動作モード管理回路１７０１は、第３の実施の形態にかかる動作モード管理回路１３０１とは、命令検出部１２４と実行判断部１２６とを削除された点で異なる。
【０２００】
システムＬＳＩ１７００の処理は、システムＬＳＩ１３００の処理と異なる点として、動作モード管理回路１７０１のフェッチ検出部１３１１等が、第６通信路を監視して、ＨＶコードのエントリ部が適切に行われたことを確認する処理手順が異なる。そこで、エントリ部が適切に行われたことを確認する処理手順について説明する。
【０２０１】
図１８のステップＳ１８０１〜Ｓ１８０５までの処理は、図１５のステップＳ１５０１〜Ｓ１８０５までの処理と同様として説明を省略する。そして、ステップＳ１８０５まで処理が行われた場合に終了する。つまり、図１８で示した処理手順は、図１５のステップＳ１８０５以降に行われるデータの書き込み検出及び割り込み禁止状態であるか否かの確認する処理が不要となる。
【０２０２】
つまり、本実施の形態では、命令１、２の順にアドレスがフェッチされた以上、プロセッサ１０１がこれら命令を実行することで、プロセッサ１０１は書き込み禁止状態となる。これにより、プロセッサ１０１が書き込み禁止状態になることが保証される。また、エントリ部の複数命令が不可分に行われていることを保証できる。これにより、安全性を確保することができる。
【０２０３】
（第５の実施の形態）
第５の実施の形態では、第１の実施の形態で示した時間計測による割り込み防止と、第３の実施の形態で示したＨＶコードのエントリ部の命令フェッチが順に行われていることを検出する例とする。また、本実施の形態にかかるＨＶコードは、割り込み禁止状態であることを確認するエントリ部を有する図３で示したコードとする。
【０２０４】
図１９は、第５の実施の形態に係るシステムＬＳＩ１９００の構成を示すブロック図である。上述した第１の実施の形態に係るシステムＬＳＩ１００とは、動作モード管理回路１０２と処理が異なる動作モード管理回路１９０１を備え、ＨＶコード格納領域１１２と格納しているＨＶコードが異なるＨＶコード格納領域１９０２を備えている点のみ異なる。また、なお、本実施の形態のシステムＬＳＩ１９００の構成で、第１の実施の形態のシステムＬＳＩ１００と共通な構成については説明を省略する。
【０２０５】
ＨＶコード格納領域１９０２は、図３に示したＨＶコードを格納している。図３に示すように、ＨＶコードのエントリ部は、ｎ個の命令で構成され、プロセッサ１０１が割り込み禁止状態であるか否かを確認している。
【０２０６】
本実施の形態にかかるシステムＬＳＩ１９００において、複数の割り込み防止を組み合わせたのは、エントリコードの命令数が大きい場合、例えば第１の実施の形態で示したようなエントリ部の実行時間を測定するだけでは、割込み禁止の状態を偽装される可能性がある。
【０２０７】
図２０に示すＨＶコードのエントリ部では、ｎ個の命令を実行することで、ＳＲが保持する値を、アドレス“ＣｈｅｃｋＡｄｒ”に書き込んでいる。
【０２０８】
これに対して、不正ユーザコードは、まず、汎用レジスタＲ２に偽のＳＲの値を書き込み、Ｒ３にＣｈｅｃｋＡｄｒの即値を読み込み、割込みを許可した後、エントリコードの命令１にジャンプする。そして、この命令１の実行後に何らかの割込みを発生させ、不正ユーザコードの割込みハンドラにジャンプし、Ｒ２の値をＲ３をベースレジスタとして“ＣｈｅｃｋＡｄｒ”に書き込んでいる。
【０２０９】
つまり、この不正ユーザコードは、ＨＶコードのエントリ部の呼出し前に汎用レジスタに予め不正な値を設定した上で、１）命令１の実行、２）割込み発生、３）偽ＳＲの値をＣｈｅｃｋＡｄｒへ書込みという３個の処理によって、割り込み禁止状態の偽装を実現している。これら３個の処理の実行時間は、ＨＶコードのエントリ部のｎ個の命令の実行時間より小さいため、時間の計測のみでは不正な割り込みを検出することができない。
【０２１０】
さらに第５の実施形態にかかるシステムＬＳＩ１９００は、第３の実施形態にかかるシステムＬＳＩ１３００とは通信路の構成が異なるので、全ての命令フェッチを検出することができない。つまり、システムＬＳＩ１９００では、ＨＶコードのエントリ部が命令順にフェッチされるときに、不正ユーザコードの命令もフェッチしている可能性がある。
【０２１１】
そこで、第５の実施の形態にかかるシステムＬＳＩ１９００の動作モード管理回路１９０１では、第１の実施の形態で示した時間計測と、第３の実施の形態で示したＨＶコードのエントリ部の命令フェッチが順に行われていることの検出とを行うこととした。
【０２１２】
図１９に戻り、動作モード管理回路１９０１は、第１の実施の形態にかかる動作モード管理回路１０２とは、フェッチ検出部１２１と処理が異なるフェッチ検出部１３１１を備え、フェッチ判断部１２２と処理が異なるフェッチ判断部１３１２を備えた点で異なる。フェッチ検出部１３１１及びフェッチ判断部１３１２は、第３の実施の形態で示したので説明を省略する。
【０２１３】
また、システムＬＳＩ１９００の処理は、システムＬＳＩ１００の処理と異なる点として、動作モード管理回路１９０１のフェッチ検出部１３１１等が、第１通信路を監視して、ＨＶコードのエントリ部が適切に行われたことを確認する処理手順が異なる。そこで、エントリ部が適切に行われたことを確認する処理手順について説明する。
【０２１４】
図２１に示すように、まず、フェッチ検出部１３１１は、第１通信路を監視して、プロセッサ１０１から伝送されてくる命令フェッチの要求を検出したか否か判断する（ステップＳ２１０１）。なお、当該処理は検出するまで繰り返される。
【０２１５】
次に、フェッチ判断部１３１２は、フェッチ検出部１３１１が命令フェッチの要求を検出した場合（ステップＳ２１０１：Ｙｅｓ）、当該命令フェッチの要求で指定されたアドレスがエントリ部の命令１のアドレスであるか否か判断する（ステップＳ２１０２）。そして、フェッチ判断部１３１２が、異なると判断した場合（ステップＳ２１０２：Ｎｏ）、再びフェッチ検出部１３１１による命令フェッチの検出を行う（ステップＳ２１０１）。
【０２１６】
そして、フェッチ検出部１３１１は、アドレスが命令１と一致すると判断した場合（ステップＳ２１０２：Ｙｅｓ）、時間計測部１２３が時間の計測を開始する（ステップＳ２１０３）。
【０２１７】
次に、動作モード管理回路１９０１は、エントリチェックをするため、変数ｉに初期値として‘２’を設定する（ステップＳ２１０４）。
【０２１８】
次に、時間判断部１２５が、時間の計測を開始してから所定時間Ｔを経過したか否か判断する（ステップＳ２１０５）。なお、所定時間Ｔは、命令１のフェッチを検出してから命令ｎが実行されるまでに要するものとして予め設定された時間とする。
【０２１９】
また、時間判断部１２５により所定時間Ｔを経過したと判断された場合（ステップＳ２１０５：Ｎｏ）、時間計測部１２３は時間計測を終了し（ステップＳ２１１０）、再びフェッチ検出部１３１１による命令フェッチの検出を行う（ステップＳ２１０１）。
【０２２０】
そして、時間判断部１２５により所定時間Ｔを経過していないと判断された場合（ステップＳ２１０５：Ｙｅｓ）、次に、フェッチ検出部１３１１は、第１通信路を監視して、プロセッサ１０１から伝送されてくる命令フェッチの要求を検出したか否か判断する（ステップＳ２１０６）。なお、当該処理は検出するまで繰り返される。
【０２２１】
次に、フェッチ判断部１３１２は、フェッチ検出部１３１１が命令フェッチの要求を検出した場合（ステップＳ２１０６：Ｙｅｓ）、当該命令フェッチの要求で指定されたアドレスがエントリ部のｉ番目の命令のアドレスであるか否か判断する（ステップＳ２１０７）。そして、フェッチ判断部１３１２が、異なると判断した場合（ステップＳ２１０７：Ｎｏ）、再びフェッチ検出部１３１１による命令フェッチの検出を行う（ステップＳ２１０１）。
【０２２２】
そして、フェッチ判断部１３１２は、アドレスが命令ｉのアドレスと一致すると判断した場合（ステップＳ２１０７：Ｙｅｓ）、動作モード管理回路１９０１は、変数ｉに‘１’を追加する（ステップＳ２１０８）。そして、動作モード管理回路１９０１は、変数ｉがｎより大きいか否か判断する（ステップＳ２１０９）。つまり、ＨＶコードのエントリ部に含まれている命令の数ｎだけ、上述した処理を繰り返す。
【０２２３】
動作モード管理回路１９０１は変数ｉがｎ以下と判断した場合（ステップＳ２１０９：Ｎｏ）、時間判断部１２５が、時間の計測を開始してから所定時間Ｔを経過したか否か判断する処理から再び行う（ステップＳ２１０５）。
【０２２４】
次に、動作モード管理回路１９０１は変数ｉがｎより大きいと判断した場合（ステップＳ２１０９：Ｙｅｓ）、時間判断部１２５が、時間の計測を開始してから所定時間Ｔを経過したか否か判断する（ステップＳ２１１１）。
【０２２５】
そして、時間判断部１２５により所定時間Ｔを経過したと判断された場合（ステップＳ２１１１：Ｎｏ）、時間計測部１２３は時間計測を終了し（ステップＳ２１１０）、再びフェッチ検出部１３１１による命令フェッチの検出を行う（ステップＳ２１０１）。
【０２２６】
また、時間判断部１２５により所定時間Ｔを経過していないと判断された場合（ステップＳ２１１１：Ｙｅｓ）、命令検出部１２４は、第１通信路を監視して、プロセッサ１０１からのデータ書き込み要求を検出したか否かを判断する（ステップＳ２１１２）。検出していないと判断した場合（ステップＳ２１１２：Ｎｏ）、時間判断部１２５が所定時間Ｔを経過したか否かの判断から処理を開始する（ステップＳ２１１１）。
【０２２７】
次に、命令検出部１２４がデータ書込みの要求を検出した場合（ステップＳ２１１２：Ｙｅｓ）、時間計測部１２３が時間計測を終了する（ステップＳ２１１３）。そして、命令検出部１２４が当該データ書き込み要求で指定されたアドレスが‘ＣｈｅｃｋＡｄｒ’と一致するか否か判断する（ステップＳ２１１４）。そして、命令検出部１２４が、異なると判断した場合（ステップＳ２１１４：Ｎｏ）、再びフェッチ検出部１２１による命令フェッチの検出を行う（ステップＳ２１０１）。
【０２２８】
そして、命令検出部１２４は、アドレスが‘ＣｈｅｃｋＡｄｒ’と一致すると判断した場合（ステップＳ２１１４：Ｙｅｓ）、実行判断部１２６が書込み要求で指定されたデータと割込み禁止を表す‘ＳＲ’の値が一致するか否か判断する（ステップＳ２１１５）。そして、実行判断部１２６が、異なると判断した場合（ステップＳ２１１５：Ｎｏ）、再びフェッチ検出部１２１による命令フェッチの検出を行う（ステップＳ２１０１）。
【０２２９】
次に、実行判断部１２６は、書込みデータと割込み禁止を表す‘ＳＲ’の値が一致すると判断した場合（ステップＳ２１１５：Ｙｅｓ）、ＨＶコードのエントリ部が適切に実行されたことを確認できたものとする。そして、図６に示したステップＳ６１３以降の処理が行われることになる。
【０２３０】
上述した実施の形態のシステムＬＳＩ１９００によれば、時間計測による割り込み防止と、第３の実施の形態で示したＨＶコードのエントリ部の命令フェッチが順に行われていることを検出する処理とを組み合わせることとした。これにより、ＨＶコードのエントリ部の命令が多い場合に、短時間で処理が行われたために時間計測のみでは検出できないという不正な割り込みを検出することができる。これにより、安全性が向上する。
【０２３１】
（第６の実施の形態）
第６の実施の形態では、第１の実施の形態で示した時間計測による割り込み防止と、第３の実施の形態で示したＨＶコードのエントリ部の命令フェッチが順に行われていることを検出する例とする。また、本実施の形態にかかるＨＶコードは、割り込み禁止状態を設定するエントリ部を有する図１１で示したコードとする。
【０２３２】
図２２は、第６の実施の形態に係るシステムＬＳＩ２２００の構成を示すブロック図である上述した第２の実施の形態に係るシステムＬＳＩ９００とは、動作モード管理回路９０１と処理が異なる動作モード管理回路２２０１を備え、ＨＶコード格納領域９１１と格納しているＨＶコードが異なるＨＶコード格納領域２２０２を備えている点が異なる。なお、本実施の形態のシステムＬＳＩ２２００の構成で、第２の実施の形態のシステムＬＳＩ９００と共通な構成については説明を省略する。
【０２３３】
ＨＶコード格納領域２２０２は、図１１に示したＨＶコードを格納している。図１１に示すように、ＨＶコードのエントリ部は、ｎ個の命令で構成され、プロセッサ１０１が割り込み禁止状態に設定している。
【０２３４】
動作モード管理回路２２０１は、第２の実施の形態にかかる動作モード管理回路９０１とは、フェッチ検出部１２１と処理が異なるフェッチ検出部１３１１を備え、フェッチ判断部９２１と処理が異なるフェッチ判断部１３１２を備えた点で異なる。なお、フェッチ検出部１３１１及びフェッチ判断部１３１２は、第３の実施の形態で示したので説明を省略する。
【０２３５】
図２３のステップＳ２３０１〜Ｓ２３１０までの処理は、図２１のステップＳ２１０１〜Ｓ２１１０までの処理と同様として説明を省略する。そして、ステップＳ２３０９で変数ｉがエントリ部の命令数ｎより大きくなった場合に（ステップＳ２３０９：Ｙｅｓ）、すべての命令のフェッチを検出したとして、時間計測部１２３が時間計測を終了して（ステップＳ２３１１）、処理を終了する。つまり、図２３で示した処理手順は、図２１のステップＳ２１１１以降に行われるデータの書き込み検出及び割り込み禁止状態であるか否かの確認する処理が不要となる。
【０２３６】
つまり、本実施の形態では、ｎ個の命令が命令順にアドレスがフェッチされた以上、プロセッサ１０１がこれら命令を実行することで、プロセッサ１０１は書き込み禁止状態となる。これにより、プロセッサ１０１が書き込み禁止状態になることが保証される。また、エントリ部の複数命令が不可分に行われていることを保証できる。これにより、安全性を確保することができる。
【０２３７】
上述した実施の形態のシステムＬＳＩ２２００によれば、時間計測による割り込み防止と、第３の実施の形態で示したＨＶコードのエントリ部の命令フェッチが順に行われていることを検出する処理とを組み合わせることとした。これにより、ＨＶコードのエントリ部の命令が多い場合に、短時間で処理が行われたために時間計測のみでは検出できないという不正な割り込みを検出することができる。これにより、安全性が向上する。
【０２３８】
（変形例）
また、上述した各実施の形態に限定されるものではなく、以下に例示するような種々の変形が可能である。
【０２３９】
（変形例１）
上述した第１〜６の実施の形態では、プロセッサ１０１の命令フェッチ単位が１命令毎の場合について説明した。しかしながら、上述した実施の形態は、命令フェッチ単位を１命令毎に制限するものではない。そこで、本変形例では２命令毎の例について説明する。
【０２４０】
本変形例にかかるシステムＬＳＩでは、プロセッサが２命令毎に命令フェッチを行う。そして、命令フェッチの際にプロセッサが割り込み禁止状態であるか否かの確認手法は、上述した実施の形態と同様とする。
【０２４１】
そして、命令フェッチ単位が複数命令の場合、ＨＶコードのエントリ部における命令の配置によっては割込み禁止状態を偽装される可能性がある。そこで、ＨＶコードのエントリ部で割り込み禁止状態が偽装される命令の配置について説明する。
【０２４２】
図２４に示した例では、ＨＶコードのエントリ部が２命令の場合とする。そして、プロセッサの命令フェッチ単位の２命令毎とする。そして、エントリ部の命令１が命令フェッチ単位のアドレス境界に配置された場合、一回の命令フェッチでエントリ部の２命令が同時に読み出される。
【０２４３】
そのため、第３、第４の実施の形態で示したような命令フェッチの確認を行った場合、命令フェッチの確認を１度しか行わない。この場合、次に示すような割込み禁止状態の偽装が考えられる。
【０２４４】
図２４に示すように、不正ユーザコードは、まずＲ０に偽のＳＲの値を読み込んだあと、割込みを許可する。その後、エントリ部の命令２にジャンプする。この時、命令フェッチは２命令単位で発生するため、命令１のアドレスに対して命令フェッチが発生する。そのため、動作モード管理回路が、正しくＨＶコードのエントリ部が呼び出されたと判断することになる。にもかかわらず、エントリ部の命令２は、割込み許可状態であるにもかかわらず、割込み禁止を表す偽ＳＲ値を、アドレス“ＣｈｅｃｋＡｄｒ”に書き込むことになる。
【０２４５】
これによりＨＶコードが割込み許可のまま実行される。そして、不正ユーザコードにより割込みが発生すると、動作モードがＨＶモードの状態で、不正ユーザコードの割込みハンドラにジャンプしてしまう。
【０２４６】
そこで本変形例におけるシステムＬＳＩのＨＶコード格納領域に以下に示すＨＶコードを格納することとした。
【０２４７】
つまり、ＨＶコードをＨＶコード格納領域に格納する際、上述した偽装を防ぐために、本来のエントリ部の先頭命令を、最初の命令フェッチ単位の最後に配置することとした。
【０２４８】
図２５に示したＨＶコードでは、エントリ部に命令１、命令３を２命令境界に配置した。これにより、プロセッサからのフェッチ要求では、命令１と命令２、命令３と命令４がそれぞれ同時にフェッチされる。
【０２４９】
そして、上述した偽装を防ぐために、本来のエントリ部の最初の命令であるｍｏｖｅ命令は、最初の命令フェッチ単位の最後、つまり２命令目に配置される。そして、エントリ部の２番目の命令であるｓｔｏｒｅ命令は、２番目の命令フェッチ単位の最初、つまり３命令目に配置される。これにより、不正ユーザコードが、上述した偽装を行おうとした場合、命令フェッチ単位１のフェッチ要求がなされず、命令フェッチ単位２がフェッチ要求なされることになり、動作モード管理回路は異常なフェッチ要求が行われたと判断することができる。
【０２５０】
また、命令フェッチ単位の命令数が複数命令の場合にも、上述した実施の形態で説明した処理は、ほぼそのまま適用可能である。
【０２５１】
そして、上述した実施の形態において、命令（例えばｎ個の命令）を命令フェッチ単位（例えばｎ個の命令フェッチ単位）に置き換え、変数ｉがエントリ部における何番目の命令としていたのを何番目の命令フェッチ単位に置き換え、命令のアドレスを命令フェッチ単位の先頭アドレスと置き換えることで、命令フェッチ単位の命令数が複数命令に対応できる。
【０２５２】
（変形例２）
上述した第１〜６の実施の形態では、プロセッサ１０１がプリフェッチ機能を有しない場合について説明した。しかしながら、上述した実施の形態は、プロセッサにプリフェッチ機能を有していない場合に制限するものではない。そこで、本変形例ではプリフェッチ機能を有する場合について説明する。
【０２５３】
システムＬＳＩの備えられたプロセッサが命令のプリフェッチ機能を持つ場合、ある命令の実行中に、それ以降の命令の命令フェッチが行われる。そのため、ある命令に対する命令フェッチを検出したとしても、その命令が必ず実行されるとは限らない。
【０２５４】
図２に示したＨＶコードのエントリ部では、命令２でＳＲの値をＣｈｅｃｋＡｄｒに書き込むことにより、割込み禁止状態であることを保証している。しかしながら、プロセッサが命令のプリフェッチ機能を持つ場合には、命令１の実行中に既に命令２がプリフェッチされてしまう。
【０２５５】
このような場合に対応するために、エントリ部の割込み禁止を保証する最終の命令（以下、保証命令と呼ぶ）までが正しく実行された時に、プリフェッチにより命令フェッチ要求が行われる命令の範囲をあらかじめ調べておき、エントリ部の命令フェッチの確認を行う際には、それらのプリフェッチ範囲も含めて命令フェッチを確認すればよい。
【０２５６】
図２６に示すように、命令２以降は、フェッチが行われた後、少し時間が経過してから実行が行われる。そして、エントリ部が２命令を実行する必要がある場合、２番目の命令が実行されている時に行われる命令フェッチも確認すればよい。図２６に示した例では、命令４の命令フェッチを確認することで、命令２の命令の実行が保証される。
【０２５７】
そこで、上述した実施の形態で行った処理を、プリフェッチ機能付のプロセッサに対応させるには、ＨＶコードのエントリ部に含まれている保証命令までの命令に加え、上記のプリフェッチ範囲の命令もエントリ部に含める必要がある。
【０２５８】
まず、命令フェッチ単位の命令数＝１の場合にプリフェッチ機能に対応する方法について説明する。図２７に示すＨＶコードは、図３に示したＨＶコードと同様に、本来は２命令で割込み禁止状態をチェックするエントリ部を有する。
【０２５９】
図２７に示した例では、本来のエントリ部である命令１、命令２のフェッチ要求が行われた後、命令２が実行されることでアドレス‘ＣｈｅｃｋＡｄｒ’に書き込みが行われるまでに、以降の命令ｎまでがプリフェッチされる。なお、命令ｎの数は、プロセッサの性能に依存する。そこで、図２７に示した例では、命令ｎまでｎｏｐ命令（何もしない命令９を配置することとした。
【０２６０】
なお、本変形例では、プリフェッチされる範囲に、説明のためにｎｏｐ命令（何もしない命令）を配置してあるが、ＨＶの処理コード本体を配置してもよい。
【０２６１】
つまり、本変形例において第１、第３又は第５の実施の形態で示した処理を適用する場合は、プリフェッチされる命令ｎは、命令１の実行時には未だプリフェッチされず、命令２の実行開始から‘ＣｈｅｃｋＡｄｒ’へのデータ書込みまでにプリフェッチされる命令であることが望ましい。
【０２６２】
なお、本変形例のＨＶコードと異なるが、第２、第４又は第６の実施の形態で示した処理に適用する場合は、命令２の実行中にプリフェッチされる命令であることが望ましい。
【０２６３】
このように、プリフェッチ範囲までを含めてＨＶコードのエントリ部に命令を備えることで、上述した実施の形態で示した処理手順を、プリフェッチ機能を有するプロセッサを備えるシステムＬＳＩに適用できる。
【０２６４】
同様に、命令フェッチ単位の命令数が複数の場合についても、プリフェッチ機能を持つプロセッサに対応することができる。
【０２６５】
図２８に示すＨＶコードは、図２５と同様に、命令フェッチ単位が２命令毎に対応するエントリ部を有している。図２８に示す例では、本来のエントリコードである命令２、命令３のフェッチ要求が行われ、命令３が実行されることでアドレス‘ＣｈｅｃｋＡｄｒ’への書き込みが行われるまで、命令５および命令６がプリフェッチされる例である。
【０２６６】
上述したように、プリフェッチされる範囲までを含めてエントリ部を構成することで、上述した実施の形態で示した処理手順を、プリフェチ機能を有するプロセッサを備えたシステムＬＳＩに適用できる。
【図面の簡単な説明】
【０２６７】
【図１】第１の実施の形態にかかるシステムＬＳＩの構成を示すブロック図である。
【図２】第１の実施の形態にかかるシステムＬＳＩが有するＨＶコードのバイナリコードの例を示した図である。
【図３】他の実施の形態にかかるシステムＬＳＩが有するＨＶコードのバイナリコードの例を示した図である。
【図４】従来のシステムＬＳＩ上で、ハイパーバイザの複数の命令で構成されるエントリ部の実行途中に、不正な処理を行うソフトウェアコードに実行が移る第１の例を示した図である。
【図５】第１の実施の形態にかかるシステムＬＳＩのソフトウェア構成の例を示した図である。
【図６】第１の実施の形態にかかるシステムＬＳＩにおいて、ＨＶコードの実行の有無に応じて動作モードを切り替えて、ＨＶ保護領域に対するアクセスを制御する処理手順を示したフローチャートである。
【図７】第１の実施の形態にかかるシステムＬＳＩにおいて、動作モード管理回路においてＨＶコードのエントリ部が適切に実行されたことを確認する処理手順を示すフローチャートである。
【図８】第１の実施の形態にかかるシステムＬＳＩにおいて、動作モード管理回路のＨＶモード脱出の検出手順を示すフローチャートである。
【図９】第２の実施の形態にかかるシステムＬＳＩの構成を示すブロック図である。
【図１０】第２の実施の形態にかかるシステムＬＳＩが有するＨＶコードのバイナリコードの例を示した図である。
【図１１】他の実施の形態にかかるシステムＬＳＩが有するＨＶコードのバイナリコードの例を示した図である。
【図１２】第２の実施の形態にかかるシステムＬＳＩにおいて、動作モード管理回路においてＨＶコードのエントリ部が適切に実行されたことを確認する処理手順を示すフローチャートである。
【図１３】第３の実施の形態にかかるシステムＬＳＩの構成を示すブロック図である。
【図１４】従来のシステムＬＳＩ上で、ハイパーバイザの複数の命令で構成されるエントリ部の実行途中に、不正な処理を行うソフトウェアコードに実行が移る第２の例を示した図である。
【図１５】第３の実施の形態にかかるシステムＬＳＩにおいて、動作モード管理回路においてＨＶコードのエントリ部が適切に実行されたことを確認する処理手順を示すフローチャートである。
【図１６】第３の実施の形態の変形例にかかるシステムＬＳＩにおいて、動作モード管理回路においてＨＶコードのエントリ部が適切に実行されたことを確認する処理手順を示すフローチャートである。
【図１７】第４の実施の形態にかかるシステムＬＳＩの構成を示すブロック図である。
【図１８】第４の実施の形態にかかるシステムＬＳＩにおいて、動作モード管理回路においてＨＶコードのエントリ部が適切に実行されたことを確認する処理手順を示すフローチャートである。
【図１９】第５の実施の形態にかかるシステムＬＳＩの構成を示すブロック図である。
【図２０】従来のシステムＬＳＩ上で、ハイパーバイザの複数の命令で構成されるエントリ部の実行途中に、不正な処理を行うソフトウェアコードに実行が移る第３の例を示した図である。
【図２１】第５の実施の形態にかかるシステムＬＳＩにおいて、動作モード管理回路においてＨＶコードのエントリ部が適切に実行されたことを確認する処理手順を示すフローチャートである。
【図２２】第６の実施の形態にかかるシステムＬＳＩの構成を示すブロック図である。
【図２３】第６の実施の形態にかかるシステムＬＳＩにおいて、動作モード管理回路においてＨＶコードのエントリ部が適切に実行されたことを確認する処理手順を示すフローチャートである。
【図２４】複数の命令を同時にフェッチするプロセッサを有する従来のシステムＬＳＩ上で、ハイパーバイザの複数の命令で構成されるエントリ部の実行途中に、不正な処理を行うソフトウェアコードに実行が移る例を示した図である。
【図２５】命令フェッチ単位が２命令毎の場合に、図２に示したエントリ部の各命令を偽装防止できるように配置したＨＶコードの例を示した図である。
【図２６】プロセッサがプリフェッチ機能を有する場合において、命令のフェッチと実行の時間関係を示した説明図である。
【図２７】プリフェッチ機能付きのプロセッサからのフェッチ要求が行われた場合でも割り込み禁止状態であることが保証できるＨＶコードの例を示した図である。
【図２８】プリフェッチ機能付きのプロセッサからの２命令のフェッチ要求が行われた場合でも割り込み禁止状態であることが保証できるＨＶコードの例を示した図である。
【符号の説明】
【０２６８】
１００、９００、１３００、１７００、１９００、２２００  システムＬＳＩ
１０１  プロセッサ
１０２、９０１、１３０１、１７０１、１９０１、２２０１  動作モード管理回路
１０３  メモリアクセス制御部
１０４、１３０２  第１ＨＶ領域保護回路
１０５  デバイスアクセス制御部
１０６  第２ＨＶ領域保護回路
１０７  保護メモリ
１１２、９１１、１９０２、２２０２  ＨＶコード格納領域
１２１、１３１１  フェッチ検出部
１２２、９２１、１３１２  フェッチ判断部
１２３  時間計測部
１２４  命令検出部
１２５、９２２  時間判断部
１２６  実行判断部
１２７  モード切替部
１３１、１３２１  第１制御部
１３２  第２制御部
１５０  メモリ
１５１  第１のゲストＯＳ格納領域
１５２  第２のゲストＯＳ格納領域
１５３  第３のゲストＯＳ格納領域
１５４  第１メモリ領域
１５５  第２メモリ領域
１５６  第３メモリ領域
１６０  デバイス
【図１】
2008250387.tif 000003
【図２】
2008250387.tif 000004
【図３】
2008250387.tif 000005
【図４】
2008250387.tif 000006
【図５】
2008250387.tif 000007
【図６】
2008250387.tif 000008
【図７】
2008250387.tif 000009
【図８】
2008250387.tif 000010
【図９】
2008250387.tif 000011
【図１０】
2008250387.tif 000012
【図１１】
2008250387.tif 000013
【図１２】
2008250387.tif 000014
【図１３】
2008250387.tif 000015
【図１４】
2008250387.tif 000016
【図１５】
2008250387.tif 000017
【図１６】
2008250387.tif 000018
【図１７】
2008250387.tif 000019
【図１８】
2008250387.tif 000020
【図１９】
2008250387.tif 000021
【図２０】
2008250387.tif 000022
【図２１】
2008250387.tif 000023
【図２２】
2008250387.tif 000024
【図２３】
2008250387.tif 000025
【図２４】
2008250387.tif 000026
【図２５】
2008250387.tif 000027
【図２６】
2008250387.tif 000028
【図２７】
2008250387.tif 000029
【図２８】
2008250387.tif 000030