(57)【特許請求の範囲】
【請求項１】
第１ワールドと第２ワールドとで異なるメモリマップを用いてメインメモリにアクセスするプロセッサがドライバモジュールを実行することにより動作するドライバ装置であって、
前記プロセッサは、ブート後において、第１ワールドで、第１ＯＳモジュールを実行することにより第１オペレーティングシステムとして動作し、
前記ドライバ装置は、前記第１オペレーティングシステムの管理の下で動作し、
前記ドライバ装置は、
メモリ管理ユニットにより管理されている第１ワールドのメモリマップをコピーして、第２ワールドのメモリマップとしてメモリ管理ユニットに設定する第１メモリマップ設定部と、
割込制御ユニットにより管理されている第１ワールドの割込先アドレスをコピーして、第２ワールドの割込先アドレスとしてメモリ管理ユニットに設定する第１割込設定部と、
を備えるドライバ装置。
【請求項２】
前記プロセッサをバーチャルマシンであるモニタとして動作させるためのプログラムであるモニタモジュール、および、前記プロセッサを第２オペレーティングシステムとして動作させるためのプログラムである第２ＯＳモジュールを、前記メインメモリの空領域にロードするモジュールロード部
をさらに備える請求項１に記載のドライバ装置。
【請求項３】
前記モニタモジュールおよび前記第２ＯＳモジュールを実行するためのメモリマップを、第１ワールドのメモリマップとして前記メモリ管理ユニットに設定する第２メモリマップ設定部
をさらに備える請求項２に記載のドライバ装置。
【請求項４】
前記第２オペレーティングシステムの割込ハンドラのアドレスを、第１ワールドの割込先アドレスとして前記割込制御ユニットに設定する第２割込設定部
をさらに備える請求項２または３に記載のドライバ装置。
【請求項５】
前記モニタモジュールおよび前記第２ＯＳモジュールを実行するためのメモリマップを生成するメモリマップ生成部と、
第１ワールドのメモリマップが前記メモリ管理ユニットに設定された後に、前記プロセッサを第１ワールドから第２ワールドに切り替え、前記プロセッサを第２ワールドで前記第１オペレーティングシステムとして動作させる移行制御部と、
をさらに備え、
前記メモリマップ生成部は、前記第１オペレーティングシステムおよび前記第２オペレーティングシステムの両者の管理の下で、前記ドライバ装置が動作可能なメモリマップを生成する
請求項２から４の何れか１項に記載のドライバ装置。
【請求項６】
前記プロセッサは、前記モニタとして動作する場合、ハードウェアデバイスに対して無制限でアクセスできるモニタモードに設定され、オペレーティングシステムとして動作する場合、ハードウェアデバイスに対する一部のアクセスが制限されたＯＳモードに設定される
請求項５に記載のドライバ装置。
【請求項７】
前記プロセッサは、ブート後において、第１ワールドの前記ＯＳモードに設定され、
前記移行制御部は、前記メモリ管理ユニットに対する第２ワールドのメモリマップの設定に先だって、前記プロセッサを前記モニタモードに変更し、
前記移行制御部は、前記メモリ管理ユニットに対する第１ワールドのメモリマップの設定の後に、前記プロセッサを第２ワールドの前記ＯＳモードに変更する
請求項６に記載のドライバ装置。
【請求項８】
前記移行制御部は、
前記メモリ管理ユニットに対する第２ワールドのメモリマップの設定に先だって、割込ポートへの入力を無効化し、
前記プロセッサを第２ワールドの前記ＯＳモードに変更した後に、無効化した前記割込ポートの入力を復帰させる
請求項７に記載のドライバ装置。
【請求項９】
前記モニタの割込ハンドラのアドレスを、前記モニタの割込先アドレスとして前記割込制御ユニットに設定するモニタ割込設定部
をさらに備える請求項２から５の何れか１項に記載のドライバ装置。
【請求項１０】
第１ワールドが割込先に設定されている割込ポートにおける割込先を第２ワールドに変更し、前記第２オペレーティングシステムへの割り込みに使用される割込ポートにおける割込先を第１ワールドに設定する割込ポート設定部
をさらに備える請求項２から９の何れか１項に記載のドライバ装置。
【請求項１１】
バンクレジスタに記憶されている第１ワールドのレジスタ値をコピーして、第２ワールドのレジスタ値として前記バンクレジスタに設定する第１レジスタ設定部と、
前記モニタモジュールおよび前記第２ＯＳモジュールを実行するための前記バンクレジスタのレジスタ値を、第１ワールドのレジスタ値として前記バンクレジスタに設定する第２レジスタ設定部と、
をさらに備える請求項２から１０の何れか１項に記載のドライバ装置。
【請求項１２】
前記プロセッサが前記第２ワールドで動作している場合に前記メインメモリにおける指定された領域への書き込みを禁止するメモリ保護ユニットに対して、前記モニタモジュールおよび前記第２ＯＳモジュールがロードされた領域を書き込み禁止領域として設定する保護設定部
をさらに備える請求項２から１１の何れか１項に記載のドライバ装置。
【請求項１３】
前記モニタモジュールおよび前記第２ＯＳモジュールのロードに先だって、予め定められた基準に従って、ロードを実行するか否かを判定し、ロードを実行しないと判定した場合、前記モジュールロード部によるロードを禁止するロード判定部
をさらに備える請求項２から１２の何れか１項に記載のドライバ装置。
【請求項１４】
前記モニタモジュールおよび前記第２ＯＳモジュールのロードの指示を受けた場合、前記モニタモジュールおよび前記第２ＯＳモジュールが改ざんされていないかを検証する検証部をさらに備え、
前記ロード判定部は、前記検証部により改ざんされていないと検証された場合、ロードを実行すると判定する
請求項１３に記載のドライバ装置。
【請求項１５】
前記プロセッサが第２ワールドに設定されている場合に、前記モニタモジュールおよび前記第２ＯＳモジュールのアンロードの指示を受け付け、予め定められた基準に従ってアンロードを実行するか否かを判定するアンロード判定部と、
前記アンロード判定部がアンロードをすると判定した場合、前記プロセッサを第２ワールドから第１ワールドに変更する移行制御部と、
をさらに備え、
前記第１メモリマップ設定部は、前記メモリ管理ユニットにより管理されている第２ワールドのメモリマップをコピーして、第１ワールドのメモリマップとして前記メモリ管理ユニットに設定し、
前記第１割込設定部は、前記割込制御ユニットにより管理されている第２ワールドの割込先アドレスをコピーして、第１ワールドの割込先アドレスとして前記割込制御ユニットに設定する
請求項２に記載のドライバ装置。
【請求項１６】
暗号化された前記モニタモジュールおよび暗号化された前記第２ＯＳモジュールを復号する復号部をさらに備え、
前記モジュールロード部は、前記復号部により復号された前記モニタモジュールおよび前記第２ＯＳモジュールを前記メインメモリにロードする
請求項２から１５の何れか１項に記載のドライバ装置。
【請求項１７】
前記モニタモジュールまたは前記第２ＯＳモジュールが正常にロードされているかを検証するロード検証部と、
前記モニタモジュールまたは前記第２ＯＳモジュールが正常にロードされていない場合に、予め定められた処理を実行する対処部と、
をさらに備える請求項２から１６の何れか１項に記載のドライバ装置。
【請求項１８】
第１ワールドと第２ワールドとで異なるメモリマップを用いてメインメモリにアクセスするプロセッサがドライバモジュールを実行することにより動作するドライバ装置であって、
前記プロセッサは、ブート後において、第２ワールドで、第１ＯＳモジュールを実行することにより第１オペレーティングシステムとして動作し、
前記ドライバ装置は、前記第１オペレーティングシステムの管理の下で動作し、
前記ドライバ装置は、
前記プロセッサにおける１つのコアから他のコアのそれぞれに対して割り込みを入力して、複数のコアの間で処理を一致させる同期部と、
メモリ管理ユニットにより管理されている第２ワールドのメモリマップをコピーして、メモリ管理ユニットにおける、バーチャルマシンであるモニタの管理の下においてオペレーティングシステムを第２ワールドで動作させるための保存領域に設定する第１メモリマップ設定部と、
前記プロセッサを前記モニタとして動作させるためのプログラムであるモニタモジュールおよび前記プロセッサを第２オペレーティングシステムとして動作させるためのプログラムである第２ＯＳモジュールを実行するためのメモリマップを、第１ワールドのメモリマップとして前記メモリ管理ユニットに設定する第２メモリマップ設定部と、
を備えるドライバ装置。
【請求項１９】
前記モニタモジュールおよび前記第２ＯＳモジュールを、前記メインメモリの空領域にロードするモジュールロード部
をさらに備える請求項１８に記載のドライバ装置。
【請求項２０】
前記プロセッサを、請求項１から１９の何れか１項に記載のドライバ装置として機能させるためのプログラム。
【請求項２１】
メインメモリと、
第１ＯＳモジュールおよびドライバモジュールを格納するストレージと、
第１ワールドと第２ワールドとで異なるメモリマップを用いてメインメモリにアクセスするプロセッサと、
前記メインメモリへのアクセスを管理するメモリ管理ユニットと、
割込入力を制御する割り込み制御ユニットと、
前記プロセッサが前記ドライバモジュールを実行することにより動作する、請求項１〜１９の何れか１項に記載のドライバ装置と、
を備える情報処理システム。
【請求項２２】
第１ワールドと第２ワールドとで異なるメモリマップを用いてメインメモリにアクセスするプロセッサがドライバモジュールを実行することにより動作するドライバ装置で実行される方法であって、
前記プロセッサは、ブート後において、第１ワールドで、第１ＯＳモジュールを実行することにより第１オペレーティングシステムとして動作し、
前記ドライバ装置は、前記第１オペレーティングシステムの管理の下で動作し、
第１メモリマップ設定部が、メモリ管理ユニットにより管理されている第１ワールドのメモリマップをコピーして、第２ワールドのメモリマップとしてメモリ管理ユニットに設定し、
第１割込設定部が、割込制御ユニットにより管理されている第１ワールドの割込先アドレスをコピーして、第２ワールドの割込先アドレスとしてメモリ管理ユニットに設定し、
方法。
【請求項２３】
さらに、モジュールロード部が、前記プロセッサをバーチャルマシンであるモニタとして動作させるためのプログラムであるモニタモジュール、および、前記プロセッサを第２オペレーティングシステムとして動作させるためのプログラムである第２ＯＳモジュールを、前記メインメモリの空領域にロードする
請求項２２に記載の方法。
【請求項２４】
さらに、第２メモリマップ設定部が、前記モニタモジュールおよび前記第２ＯＳモジュールを実行するためのメモリマップを、第１ワールドのメモリマップとして前記メモリ管理ユニットに設定する
請求項２３に記載の方法。
【請求項２５】
さらに、第２割込設定部が、前記第２オペレーティングシステムの割込ハンドラのアドレスを、第１ワールドの割込先アドレスとして前記割込制御ユニットに設定する
請求項２３または２４に記載の方法。
【請求項２６】
第１ワールドと第２ワールドとで異なるメモリマップを用いてメインメモリにアクセスするプロセッサがドライバモジュールを実行することにより動作するドライバ装置で実行される方法であって、
前記プロセッサは、ブート後において、第１ワールドで、第１ＯＳモジュールを実行することにより第１オペレーティングシステムとして動作し、
前記ドライバ装置は、前記第１オペレーティングシステムの管理の下で動作し、
同期部が、前記プロセッサにおける１つのコアから他のコアのそれぞれに対して割り込みを入力して、複数のコアの間で処理を一致させ、
第１メモリマップ設定部が、メモリ管理ユニットにより管理されている第１ワールドのメモリマップをコピーして、第２ワールドのメモリマップとしてメモリ管理ユニットに設定し、
第２メモリマップ設定部が、前記プロセッサをバーチャルマシンであるモニタとして動作させるためのプログラムであるモニタモジュールおよび前記プロセッサを第２オペレーティングシステムとして動作させるためのプログラムである第２ＯＳモジュールを実行するためのメモリマップを、第１ワールドのメモリマップとして前記メモリ管理ユニットに設定する
方法。
【請求項２７】
さらに、モジュールロード部が、前記モニタモジュール、および、前記第２ＯＳモジュールを、前記メインメモリの空領域にロードする
請求項２６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ドライバ装置、情報処理システム、プログラムおよび方法に関する。
【背景技術】
【０００２】
近年、単一の情報処理装置で複数のオペレーティングシステムを並行して動作させるための仮想化技術が知られている。複数のオペレーティングシステムを並行して動作させるためのバーチャルマシンは、モニタ（またはハイパーバイザ）等と呼ばれる。モニタには、プロセッサ上で直接動作するタイプ（タイプ１）と、オペレーティングシステム上のアプリケーションとして動作するタイプ（タイプ２）とが知られている。
【０００３】
タイプ１のモニタは、通常、オペレーティングシステムが動作する前に起動する。このため、従来、タイプ１のモニタを更新したり、タイプ１のモニタの機能を一時的に無効にしたりすることは困難であった。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−２４１１７２号公報
【特許文献２】特開２００５−３２７２７９号公報
【特許文献３】特開２００６−０４２２８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、第１オペレーティングシステムをプロセッサ上で直接動作させ、その後に、プロセッサ上でモニタを直接動作させるとともに、モニタ上で第１オペレーティングシステムおよび第２オペレーティングシステムを動作させた状態に移行することにある。
【課題を解決するための手段】
【０００６】
実施形態に係るドライバ装置は、第１ワールドと第２ワールドとで異なるメモリマップを用いてメインメモリにアクセスするプロセッサがドライバモジュールを実行することにより動作する。前記プロセッサは、ブート後において、第１ワールドで、第１ＯＳモジュールを実行することにより第１オペレーティングシステムとして動作する。前記ドライバ装置は、前記第１オペレーティングシステムの管理の下で動作する。前記ドライバ装置は、第１メモリマップ設定部と、第１割込設定部と、を備える。前記第１メモリマップ設定部は、メモリ管理ユニットにより管理されている第１ワールドのメモリマップをコピーして、第２ワールドのメモリマップとしてメモリ管理ユニットに設定する。前記第１割込設定部は、割込制御ユニットにより管理されている第１ワールドの割込先アドレスをコピーして、第２ワールドの割込先アドレスとしてメモリ管理ユニットに設定する。
【図面の簡単な説明】
【０００７】
【図１】第１実施形態に係る情報処理システムのハードウェア構成図。
【図２】プロセッサのモードおよびワールドの関係を示す図。
【図３】ブート後におけるプロセッサの機能構成を示す図。
【図４】デバイスドライバの実行後のプロセッサの機能構成を示す図。
【図５】第１実施形態に係るデバイスドライバ５２の機能構成を示す図。
【図６】メモリマップの第１例を示す図。
【図７】メモリマップの第２例を示す図。
【図８】割込先アドレスが設定されたテーブルを示す図。
【図９】割込が有効であるか無効であるかが設定されたテーブルを示す図。
【図１０】割込ポート毎の割込先が設定されたテーブルを示す図。
【図１１】情報処理システムのブート後の処理フロー図。
【図１２】メインメモリにロードされるプログラムの遷移を示す図。
【図１３】第１実施形態に係るデバイスドライバの処理フロー図。
【図１４】図１３のステップＳ３１の処理の詳細なフロー図。
【図１５】第２実施形態に係るデバイスドライバの機能構成を示す図。
【図１６】第２実施形態に係るデバイスドライバの処理フロー図。
【図１７】メインメモリにおける書き込みが禁止される領域を示す図。
【図１８】第３実施形態に係るデバイスドライバの機能構成を示す図。
【図１９】第３実施形態に係るデバイスドライバの処理フロー図。
【図２０】第４実施形態に係るデバイスドライバの機能構成を示す図。
【図２１】第４実施形態に係るデバイスドライバの処理フロー図。
【図２２】第５実施形態に係るデバイスドライバの機能構成を示す図。
【図２３】第５実施形態に係るデバイスドライバの処理フロー図。
【図２４】第６実施形態に係るプロセッサの機能構成を示す図。
【図２５】第６実施形態に係る情報処理システムの処理フロー図。
【図２６】第７実施形態に係るデバイスドライバの機能構成を示す図。
【図２７】第７実施形態に係るデバイスドライバの処理フロー図。
【発明を実施するための形態】
【０００８】
以下、実施形態に係る情報処理システムについて詳細に説明する。実施形態に係る情報処理システムは、第１オペレーティングシステムをプロセッサ上で直接動作させる。その後、情報処理システムは、バーチャルマシンであるモニタをプロセッサ上で直接動作させるとともに、モニタ上で第１オペレーティングシステムおよび第２オペレーティングシステムを動作させた状態に移行することを目的とする。なお、以下、複数の実施形態を説明するが、略同一の機能の構成要素には図面中に同一の符号を付けて重複した説明を省略する。
【０００９】
（第１実施形態）
図１は、第１実施形態に係る情報処理システム１０のハードウェア構成図である。情報処理システム１０は、情報処理装置２０と、ストレージ２２と、メインメモリ２４と、ブートＲＯＭ２６とを備える。情報処理装置２０、ストレージ２２、メインメモリ２４およびブートＲＯＭ２６は互いにバスにより接続される。
【００１０】
情報処理装置２０は、プロセッサ３０等を含むハードウェア装置であり、演算処理および制御処理を実行する。情報処理装置２０は、例えば１つの半導体チップで実現されたＳｏＣである。
【００１１】
ストレージ２２は、フラッシュメモリまたはハードディスク等の不揮発性の記憶装置である。ストレージ２２は、情報処理装置２０により実行されるプログラム（モジュール）を格納する。本実施形態においては、ストレージ２２は、汎用ＯＳモジュールおよびドライバモジュールを格納する。汎用ＯＳモジュールおよびドライバモジュールについては詳細を後述する。
【００１２】
メインメモリ２４は、プログラムモジュールおよびデータを記憶する記憶装置である。メインメモリ２４は、例えば、ＳＤＲＡＭ（Synchronous  Dynamic  Random  Access  Memory）等であってよい。また、メインメモリ２４は、ＭＲＡＭ（Magnetoresistive  Random  Access  Memory）のような不揮発性の記憶装置であってもよい。メインメモリ２４は、情報処理装置２０に含まれるプロセッサ３０の作業領域となる。
【００１３】
ブートＲＯＭ２６は、情報処理装置２０に含まれるプロセッサ３０が、ブート後（電源投入後）において実行するブートプログラムを記憶する。情報処理装置２０に含まれるプロセッサ３０は、ブートプログラムを実行することにより、ストレージ２２に格納されている汎用ＯＳモジュールをメインメモリ２４にロードして、汎用ＯＳモジュールを実行する。
【００１４】
情報処理装置２０は、プロセッサ３０と、ワールド制御ユニット３２と、バンクレジスタ３４と、メモリ管理ユニット３６と、割込制御ユニット３８とを有する。
【００１５】
プロセッサ３０は、ＣＰＵ（Central  Processing  Unit）、各種のレジスタおよび１次キャッシュ等を含み、メインメモリ２４に記憶されたプログラム（モジュール）を実行する。プロセッサ３０は、メインメモリ２４を作業領域として用いる。プロセッサ３０は、ＣＰＵコア等とも呼ばれる場合もある。
【００１６】
本実施形態において、プロセッサ３０は、レジスタの設定に応じて、セキュアワールド（第１ワールド）またはノンセキュアワールド（第２ワールド）の何れかの状態で動作する。また、本実施形態において、プロセッサ３０は、レジスタの設定に応じて、モニタモード、ＯＳモードまたはユーザモードの何れかのモードで動作する。ワールドおよびモードについては詳細を後述する。
【００１７】
ワールド制御ユニット３２は、プロセッサ３０に含まれるレジスタの値を変更して、プロセッサ３０の状態をセキュアワールドまたはノンセキュアワールドの何れかに設定する。また、ワールド制御ユニット３２は、プロセッサ３０に含まれるレジスタの値を変更して、プロセッサ３０のモードを、モニタモード、ＯＳモードまたはユーザモードの何れかに設定する。
【００１８】
バンクレジスタ３４は、ワールド毎にレジスタ値を記憶できるレジスタである。すなわち、バンクレジスタ３４には、セキュアワールドおよびノンセキュアワールドのそれぞれについてレジスタ値が設定される。プロセッサ３０は、セキュアワールドとノンセキュアワールドとで同一のレジスタに対するアクセス命令を実行した場合でも、物理的に異なる格納位置にアクセスする。セキュアワールドとノンセキュアワールドで別々のオペレーティングシステムを動作させる場合には、プロセッサ３０は、通常のレジスタに対しては、ワールド遷移の際にレジスタ値の待避、復帰をする。しかし、プロセッサ３０は、バンクレジスタ３４に対しては、セキュアワールドとノンセキュアワールドとでデータの物理的な格納場所が異なるので、ワールド遷移時にレジスタ値の待避、復帰をしなくてよい。これにより、プロセッサ３０は、ワールド遷移を高速化することができる。
【００１９】
メモリ管理ユニット３６（ＭＭＵ）は、プロセッサ３０からのメインメモリ２４に対するアクセス要求を処理する。メモリ管理ユニット３６は、プロセッサ３０からのメインメモリ２４に対するアクセス要求を処理するためのメモリマップを管理する。メモリマップは、一例として、メインメモリ２４における物理アドレスと、プロセッサ３０から要求される仮想アドレスとの対応関係を示す情報である。メモリ管理ユニット３６は、プロセッサ３０からメインメモリ２４に対してアクセス要求があると、メモリマップに基づき仮想アドレスを物理アドレスに変換する。メモリ管理ユニット３６は、セキュアワールドおよびノンセキュアワールドのそれぞれについてメモリマップを管理する。
【００２０】
割込制御ユニット３８は、情報処理装置２０の割込ポートに対する割込入力に対する制御を実行する。割込制御ユニット３８は、割込ポートに割込入力が有った場合、プロセッサ３０をメインメモリ２４における予め設定された割込先アドレスにアクセスさせて、割込ハンドラを起動させる。割込制御ユニット３８は、それぞれの割込ポートについて割込先アドレスが設定される。
【００２１】
図２は、プロセッサ３０により実現される機能、および、プロセッサ３０のモードおよびワールドの関係を示す図である。
【００２２】
プロセッサ３０は、モニタモジュール（プログラムコード）をメインメモリ２４にロードして実行することにより、モニタとして動作する。モニタは、オペレーティングシステムに対して、コンピュータシステムを仮想化して提供するバーチャルマシンである。モニタは、複数のオペレーティングシステムを切り替えて動作させることができる。本実施形態において、モニタは、プロセッサ３０上で直接動作するタイプ（タイプ１）である。
【００２３】
プロセッサ３０は、ＯＳモジュール（プログラムコード）をメインメモリ２４にロードして実行することにより、オペレーティングシステムとして動作する。オペレーティングシステムは、コンピュータシステムの基本機能であり、コンピュータシステムに備えられるハードウェアデバイス（またはバーチャルマシンに備えられる仮想化したデバイス）を制御したり、タスクを管理したりする。また、オペレーティングシステムは、アプリケーションを管理して、アプリケーションによるハードウェアデバイスに対するアクセスを仲介する。
【００２４】
本実施形態においては、プロセッサ３０は、汎用ＯＳモジュール（第１ＯＳモジュール）をメインメモリ２４にロードして実行することにより、汎用オペレーティングシステム（第１オペレーティングシステム）として動作する。汎用オペレーティングシステムは、例えば、Ｌｉｎｕｘ（登録商標）またはＷｉｎｄｏｗｓ（登録商標）等である。第１オペレーティングシステムは、汎用に限らず、特殊な分野で使用される専用のオペレーティングシステムであってもよい。
【００２５】
また、プロセッサ３０は、セキュアＯＳモジュール（第２ＯＳモジュール）をメインメモリ２４にロードして実行することにより、セキュアオペレーティングシステム（第２オペレーティングシステム）として動作する。セキュアオペレーティングシステムは、例えば、汎用オペレーティングシステムに存在するセキュリティの脆弱性を補完するための機能を有する。セキュアオペレーティングシステムは、例えば、汎用オペレーティングシステムよりも機能が限定されている。なお、第２オペレーティングシステムは、このような目的に限らず、一般的なオペレーティングシステムであってもよい。
【００２６】
なお、オペレーティングシステムは、プロセッサ３０がモニタとして動作している状態において、モニタの管理下で動作する。
【００２７】
プロセッサ３０は、アプリケーションプログラムをメインメモリ２４にロードして実行することにより、アプリケーションとして動作する。アプリケーションは、オペレーティングシステムの管理下で動作し、情報処理サービスまたはデバイスの制御処理等を実行する。
【００２８】
プロセッサ３０は、モニタモード、ＯＳモードまたはユーザモードの何れかのモードに設定される。モニタモードは、プロセッサ３０がモニタとして動作する場合に設定されるモードである。モニタモードにおいて、プロセッサ３０は、ハードウェアデバイス（ハードウェアリソース）に対して無制限でアクセスが可能であり、ハードウェアデバイスの設定等を変更することができる。
【００２９】
ＯＳモードは、プロセッサ３０がオペレーティングシステムとして動作する場合に設定される。ＯＳモードにおいて、プロセッサ３０は、モニタモードと比較してリソースに対するアクセスが制限される場合がある。
【００３０】
ユーザモードは、プロセッサ３０がアプリケーションとして動作する場合に設定される。ユーザモードにおいて、プロセッサ３０は、ＯＳモードと比較してリソースに対するアクセスが制限される。
【００３１】
また、プロセッサ３０は、セキュアワールドまたはノンセキュアワールドに状態が切り替えられる。プロセッサ３０は、セキュアワールドとノンセキュアワールドとで異なるメモリマップを用いてメインメモリ２４にアクセスする。これにより、プロセッサ３０は、セキュアワールドとノンセキュアワールドとで、動作するオペレーティングシステムおよびアプリケーションを切り替えることができる。
【００３２】
プロセッサ３０は、モードおよびワールドがそれぞれ独立に設定される。ただし、モニタモードに設定されている場合には、プロセッサ３０は、セキュアワールドまたはノンセキュアワールドの設定に関わらず、モニタをセキュアワールドで動作させる。
【００３３】
また、プロセッサ３０は、セキュアワールドで動作するモニタ、オペレーティングシステムおよびアプリケーションが利用するメモリ領域を、ノンセキュアワールドで動作するオペレーティングシステムおよびアプリケーションからアクセスを禁止することができる。これにより、プロセッサ３０は、例えば、通常の処理と、セキュリティを担保する処理とでアクセスするメモリ領域を分離することができる。従って、プロセッサ３０は、ノンセキュアワールドで動作するオペレーティングシステムに脆弱性が存在し、悪意のあるプログラムが実行されてしまった場合であっても、セキュアワールドで動作するモニタおよびオペレーティングシステムを保護することができる。
【００３４】
なお、モニタを動かすモードのことをｒｏｏｔモード、ＯＳやＯＳ上のアプリケーションを動作させるモードのことをｎｏｎ−ｒｏｏｔモードと呼ぶ場合もある。この場合にはセキュアオペレーティングシステムおよび汎用オペレーティングシステムともにｎｏｎ−ｒｏｏｔモードで動作する。
【００３５】
このようなプロセッサ３０は、例えば、ＴｒｕｓｔＺｏｎｅ（登録商標）と呼ばれる機能を有するＡＲＭ（登録商標）プロセッサ、または、ＶＴと呼ばれる仮想化支援機構を有するＩｎｔｅｌ（登録商標）プロセッサ等により実現することができる。なお、プロセッサ３０は、これら以外のプロセッサにより実現することもできる。
【００３６】
図３は、ブート後におけるプロセッサ３０の機能構成を示す図である。プロセッサ３０は、ブート直後において、セキュアワールドおよびＯＳモードに設定される。プロセッサ３０は、ブート直後においてブートＲＯＭ２６にアクセスしてブートプログラムを実行する。
【００３７】
これにより、プロセッサ３０は、ストレージ２２に格納された汎用ＯＳモジュールをメインメモリ２４にロードすることができる。そして、プロセッサ３０は、汎用ＯＳモジュールを実行して、セキュアワールドで汎用オペレーティングシステム５０として動作する。このとき、ＶＴの場合には汎用オペレーティングシステム５０は、ｎｏｎ−ｒｏｏｔモードで動作している。
【００３８】
汎用オペレーティングシステム５０は、ドライバロード部５４を有する。汎用オペレーティングシステム５０は、予め定められたイベントが発生すると、ドライバロード部５４を実行する。予め定められたイベントは、例えば、所定のタイマーイベントまたはユーザから指示入力等である。
【００３９】
ドライバロード部５４は、ストレージ２２に格納されたドライバモジュールをメインメモリ２４にロードする。プロセッサ３０は、ドライバモジュールがメインメモリ２４にロードされると、ドライバモジュールを実行する。
【００４０】
プロセッサ３０は、ドライバモジュールを実行することにより、デバイスドライバ５２（ドライバ装置）として動作する。このとき、デバイスドライバ５２は、汎用オペレーティングシステム５０の管理下で、汎用オペレーティングシステム５０の機能の一部として動作する。
【００４１】
デバイスドライバ５２は、情報処理システム１０が備えるハードウェアリソースに対してアクセスが可能である。汎用オペレーティングシステム５０の管理下で動作し、ハードウェアリソースに対してアクセスが可能であれば、ドライバに限らず、他のプログラムにより実行される機能であってもよい。
【００４２】
図４は、デバイスドライバ５２の実行後のプロセッサ３０の機能構成を示す図である。デバイスドライバ５２は、例えば自動的に実行を開始する。デバイスドライバ５２は、所定のイベントが発生した場合に実行を開始してもよい。
【００４３】
デバイスドライバ５２は、実行を完了すると、モニタ５６をプロセッサ３０上で直接動作させ、さらに、モニタ５６上で汎用オペレーティングシステム５０およびセキュアオペレーティングシステム５８を動作させることができる。このとき、モニタ５６は、セキュアワールドで動作する。また、セキュアオペレーティングシステム５８は、セキュアワールドで動作する。また、汎用オペレーティングシステム５０は、ノンセキュアワールドで動作する。
【００４４】
このようにデバイスドライバ５２は、汎用オペレーティングシステム５０をプロセッサ３０上で直接動作させた状態から、プロセッサ３０上でモニタ５６を直接動作させる状態に移行させることができる。さらに、デバイスドライバ５２は、モニタ５６上で新たなセキュアオペレーティングシステム５８および汎用オペレーティングシステム５０を動作させた状態に移行させることができる。以下、デバイスドライバ５２についてさらに詳細に説明する。
【００４５】
図５は、第１実施形態に係るデバイスドライバ５２の機能構成を、ドライバロード部５４および情報処理システム１０のハードウェアとともに示す図である。デバイスドライバ５２は、モジュール格納部７１と、モジュールロード部７２と、移行部７３とを有する。
【００４６】
モジュール格納部７１は、モニタモジュールおよびセキュアＯＳモジュールを格納する。モニタモジュールは、プロセッサ３０をバーチャルマシンであるモニタとして動作させるためのプログラムである。セキュアＯＳモジュールは、プロセッサ３０をセキュアオペレーティングシステムとして動作させるためのプログラムである。
【００４７】
モジュールロード部７２は、ドライバロード部５４に呼び出される。モジュールロード部７２は、モジュール格納部７１に格納されているモニタモジュールおよびセキュアＯＳモジュールを、メインメモリ２４の空領域にロードする。メインメモリ２４は、既に、汎用ＯＳモジュールおよびドライバモジュールがロードされている。モジュールロード部７２は、汎用ＯＳモジュールおよびドライバモジュールがロードされていない領域に、モニタモジュールおよびセキュアＯＳモジュールをロードする。ロードが完了すると、モジュールロード部７２は、移行部７３を呼び出す。
【００４８】
移行部７３は、メモリマップ生成部７４と、メモリマップ設定部７５と、割込設定部７６と、レジスタ設定部７７と、移行制御部７８とを含む。
【００４９】
メモリマップ生成部７４は、移行制御部７８から、モニタモジュールおよびセキュアＯＳモジュールがロードされたメインメモリ２４上のアドレスを示す情報を取得する。メモリマップ生成部７４は、プロセッサ３０がモニタモジュールおよびセキュアＯＳモジュールを実行するためのメモリマップを生成する。
【００５０】
メモリマップは、例えば、物理アドレスと仮想アドレスとの対応関係を示したページテーブル等であってよい。メモリマップは、モニタモジュールおよびセキュアＯＳモジュールをプロセッサ３０によりアクセスさせることが可能な情報であれば、ページテーブルに限らず他の情報であってもよい。
【００５１】
ここで、メモリマップ生成部７４は、モニタモジュールおよびセキュアＯＳモジュールを実行するメモリマップを生成する際に、汎用オペレーティングシステムおよびセキュアオペレーティングシステムの両者の管理の下で、デバイスドライバ５２が動作可能なメモリマップを生成する。より詳しくは、メモリマップ生成部７４は、汎用オペレーティングシステムおよびセキュアオペレーティングシステムの両者の管理の下で、移行部７３（メモリマップ生成部７４、メモリマップ設定部７５、割込設定部７６、レジスタ設定部７７および移行制御部７８）が動作可能なメモリマップを生成する。
【００５２】
例えば、メモリマップ生成部７４は、モニタモジュールが異なる物理アドレスにロードされても、モニタモジュールの仮想アドレスが一定となるようにメモリマップを生成する。また、同様に、メモリマップ生成部７４は、セキュアＯＳモジュールが異なる物理アドレスにロードされても、セキュアＯＳモジュールの仮想アドレスが一定となるようにメモリマップを生成する。
【００５３】
より具体的には、図６に示すように、モニタモジュールが物理アドレス０ｘ１０００００００からロードされ、セキュアＯＳモジュールが物理アドレス０ｘ２０００００００からロードされた場合、メモリマップ生成部７４は、モニタモジュールの先頭の仮想アドレスを０ｘ１０００００００に設定し、セキュアＯＳモジュールの先頭の仮想アドレスを０ｘ２０００００００に設定する。
【００５４】
また、例えば図７に示すように、モニタモジュールが物理アドレス０ｘＦ０００００００からロードされ、セキュアＯＳモジュールが物理アドレス０ｘ１０００００００からロードされた場合、メモリマップ生成部７４は、モニタモジュールの先頭の仮想アドレスを０ｘ１０００００００に設定し、セキュアＯＳモジュールの先頭の仮想アドレスを０ｘ２０００００００に設定する。これにより、プロセッサ３０は、メインメモリ２４の物理アドレスに関わらず、常に一定の仮想アドレスでモニタおよびセキュアオペレーティングシステムを動作させることができる。
【００５５】
さらに、メモリマップ生成部７４は、移行部７３（メモリマップ生成部７４、メモリマップ設定部７５、割込設定部７６、レジスタ設定部７７および移行制御部７８）を実行するためのモジュールが配置されたメモリ領域について、汎用オペレーティングシステムを動作させるためのメモリマップ上、および、セキュアオペレーティングシステムを動作させるためのメモリマップ上の何れにおいても、同一の仮想アドレスでアクセスできるようにする。これにより、移行部７３は、ワールドが切り替えられて動作するオペレーティングシステムが変更しても、動作を継続することができる。
【００５６】
メモリマップ設定部７５は、メモリ管理ユニット３６に対して、セキュアワールドのメモリマップおよびノンセキュアワールドのメモリマップを設定する。メモリマップ設定部７５は、第１メモリマップ設定部８１と、第２メモリマップ設定部８２とを含む。
【００５７】
第１メモリマップ設定部８１は、メモリ管理ユニット３６により管理されているセキュアワールドのメモリマップをコピーして、ノンセキュアワールドのメモリマップとしてメモリ管理ユニット３６に設定する。ブート後において、プロセッサ３０は、セキュアワールドに設定され、汎用オペレーティングシステムとして動作している。従って、メモリ管理ユニット３６は、プロセッサ３０が汎用ＯＳモジュールを実行するためのメモリマップを管理している。従って、第１メモリマップ設定部８１は、メモリ管理ユニット３６により管理されているセキュアワールドのメモリマップをコピーして、ノンセキュアワールドのメモリマップとしてメモリ管理ユニット３６に設定することにより、ノンセキュアワールドに設定が変更された場合、プロセッサ３０を汎用オペレーティングシステムとして動作させることができる。
【００５８】
第２メモリマップ設定部８２は、メモリマップ生成部７４から、モニタモジュールおよびセキュアＯＳモジュールを実行するためのメモリマップを受け取る。第２メモリマップ設定部８２は、モニタモジュールおよびセキュアＯＳモジュールを実行するためのメモリマップを、セキュアワールドのメモリマップとしてメモリ管理ユニット３６に設定する。これにより、第２メモリマップ設定部８２は、セキュアワールドにおいて、プロセッサ３０をモニタおよびセキュアオペレーティングシステムとして動作させることができる。
【００５９】
なお、メモリマップ設定部７５は、セキュアワールドのメモリマップにアクセスする場合には、ワールド制御ユニット３２を呼び出してプロセッサ３０をセキュアワールドに変更する。また、メモリマップ設定部７５は、ノンセキュアワールドのメモリマップにアクセスする場合には、ワールド制御ユニット３２を呼び出してプロセッサ３０をノンセキュアワールドに変更する。
【００６０】
割込設定部７６は、割込制御ユニット３８に対して、割込入力に関する値を設定する。割込設定部７６は、モニタ割込設定部８６と、第１割込設定部８７と、第２割込設定部８８と、割込ポート設定部８９とを含む。
【００６１】
モニタ割込設定部８６は、モニタの割込ハンドラのアドレス（すなわち、モニタへの割込入力が有った場合におけるジャンプ先となるメインメモリ２４のアドレス）を、モニタの割込先アドレスとして割込制御ユニット３８に設定する。モニタ割込設定部８６は、モニタモジュールのメインメモリ２４上のアドレスを取得し、モニタの割込ハンドラのアドレスを算出する。モニタ割込設定部８６は、移行制御部７８からモニタの割込ハンドラのアドレスを直接取得してもよい。そして、モニタ割込設定部８６は、算出または取得したアドレスを割込制御ユニット３８に設定する。例えば、図８に示すように、モニタ割込設定部８６は、モニタの割込先アドレスとして、０ｘ１０００００００を設定することができる。
【００６２】
さらに、モニタ割込設定部８６は、モニタへの割込入力を有効とするか無効とするかを割込制御ユニット３８に設定する。例えば、モニタ割込設定部８６は、図９に示すように、モニタへの割込入力を有効に設定することができる。
【００６３】
第１割込設定部８７は、割込制御ユニット３８により管理されているセキュアワールドの割込先アドレスをコピーして、ノンセキュアワールドの割込先アドレスとしてメモリ管理ユニット３６に設定する。ブート後において、プロセッサ３０は、セキュアワールドに設定され、汎用オペレーティングシステムとして動作している。従って、割込制御ユニット３８のセキュアワールドの割込先アドレスには、汎用オペレーティングシステムの割込ハンドラのアドレス（すなわち、汎用オペレーティングシステムへの割込入力が有った場合におけるジャンプ先となるメインメモリ２４のアドレス）が設定されている。従って、第１割込設定部８７は、割込制御ユニット３８により管理されているセキュアワールドの割込先アドレスをコピーして、ノンセキュアワールドの割込先アドレスとしてメモリ管理ユニット３６に設定することにより、ノンセキュアワールドの割込先アドレスを汎用オペレーティングシステムの割込ハンドラのアドレスに設定することができる。例えば、図８に示すように、第１割込設定部８７は、ノンセキュアワールドへの割込先アドレスとして、０ｘ５０００００００を設定することができる。
【００６４】
さらに、第１割込設定部８７は、割込制御ユニット３８により管理されているセキュアワールドのへの割込入力の有効／無効の設定値をコピーして、ノンセキュアワールドへの割込入力の有効／無効の設定値としてメモリ管理ユニット３６に設定する。例えば、第１割込設定部８７は、図９に示すように、ノンセキュアワールドへの割込入力を有効に設定することができる。
【００６５】
第２割込設定部８８は、セキュアオペレーティングシステムの割込ハンドラのアドレス（すなわち、セキュアオペレーティングシステムへの割込入力が有った場合におけるジャンプ先となるメインメモリ２４のアドレス）を、セキュアワールドの割込先アドレスとして割込制御ユニット３８に設定する。第２割込設定部８８は、セキュアＯＳモジュールがロードされたメインメモリ２４上のアドレスを取得し、セキュアオペレーティングシステムの割込ハンドラのアドレスを算出する。第２割込設定部８８は、移行制御部７８からセキュアオペレーティングシステムの割込ハンドラのアドレスを直接取得してもよい。そして、第２割込設定部８８は、算出または取得したアドレスを割込制御ユニット３８に設定する。例えば、図８に示すように、第２割込設定部８８は、セキュアワールドへの割込先アドレスとして、０ｘ２０００００００を設定することができる。
【００６６】
さらに、第２割込設定部８８は、セキュアワールドへの割込入力を有効とするか無効とするかを割込制御ユニット３８に設定する。例えば、第２割込設定部８８は、図９に示すように、セキュアワールドへの割込入力を無効に設定することができる。
【００６７】
割込ポート設定部８９は、それぞれのポートの割込先のワールドを設定する。この場合において、割込ポート設定部８９は、セキュアワールドが割込先に設定されている割込ポートにおける割込先を、ノンセキュアワールドに変更する。ブート後において、プロセッサ３０は、セキュアワールドに設定され、汎用オペレーティングシステムとして動作している。従って、ブート後において、汎用オペレーティングシステムへの割り込みに使用される割込ポートにおける割込先は、セキュアワールドに設定されている。従って、割込ポート設定部８９は、セキュアワールドが割込先に設定されている割込ポートにおける割込先をノンセキュアワールドに変更することにより、汎用オペレーティングシステムへの割り込みに使用される割込ポートにおける割込先をノンセキュアワールドに設定することができる。
【００６８】
そして、割込ポート設定部８９は、セキュアオペレーティングシステムへの割り込みに使用される割込ポートにおける割込先をセキュアワールドに設定する。これにより、割込ポート設定部８９は、図１０に示すように、それぞれの割込ポートに入力が有った場合、何れのワールドに割り込むかを設定することができる。
【００６９】
なお、割込設定部７６は、セキュアワールドの割り込みに関する設定をする場合には、ワールド制御ユニット３２を呼び出してプロセッサ３０をセキュアワールドに変更する。また、割込設定部７６は、ノンセキュアワールドの割り込みに関する設定をする場合には、ワールド制御ユニット３２を呼び出してプロセッサ３０をノンセキュアワールドに変更する。
【００７０】
割込制御ユニット３８は、割込設定部７６により割り込み設定がされると、設定に従って割込制御をすることができる。具体的には、割込制御ユニット３８は、ある割込ポートに入力が有った場合、図１０に示すテーブルを参照して、セキュアワールドに割り込むか、ノンセキュアワールドに割り込むかを判断する。続いて、割込制御ユニット３８は、対象のワールドに対する割り込みが有効か無効かを図９に示すテーブルを参照して判断する。この場合において、割込制御ユニット３８は、対象のワールドがセキュアワールドであって、プロセッサ３０がモニタモードに設定されている場合には、モニタに対する割り込みが有効か無効かを判断し、モニタモード以外に設定されている場合には、セキュアワールドに対する割り込みが有効か否かを判断する。続いて、割込制御ユニット３８は、割り込みが有効であることを条件として、対応する割込先アドレスを図８に示すテーブルから取得する。そして、割込制御ユニット３８は、取得した割込アドレスをプロセッサ３０に与えて、割込ハンドラのアドレスに実行をジャンプさせる。
【００７１】
レジスタ設定部７７は、バンクレジスタ３４に対して、セキュアワールドにおけるレジスタ値およびノンセキュアワールドにおけるレジスタ値を設定する。レジスタ設定部７７は、第１レジスタ設定部９１と、第２レジスタ設定部９２とを含む。
【００７２】
第１レジスタ設定部９１は、バンクレジスタ３４により記憶されているセキュアワールドのレジスタ値をコピーして、ノンセキュアワールドのレジスタ値としてバンクレジスタ３４に設定する。ブート後において、プロセッサ３０は、セキュアワールドに設定され、汎用オペレーティングシステムとして動作している。従って、セキュアワールドでのバンクレジスタ３４には、プロセッサ３０が汎用ＯＳモジュールを実行するためのレジスタ値を記憶している。従って、第１レジスタ設定部９１は、バンクレジスタ３４により記憶されているセキュアワールドのレジスタ値をコピーして、ノンセキュアワールドのレジスタ値としてバンクレジスタ３４に設定することにより、ノンセキュアワールドに設定が変更された場合、プロセッサ３０を汎用オペレーティングシステムとして動作させることができる。
【００７３】
第２レジスタ設定部９２は、モニタモジュールおよびセキュアＯＳモジュールを実行するためのレジスタ値を、セキュアワールドのレジスタ値としてバンクレジスタ３４に設定する。これにより、第２レジスタ設定部９２は、セキュアワールドにおいて、プロセッサ３０をモニタおよびセキュアオペレーティングシステムとして動作させることができる。
【００７４】
なお、レジスタ設定部７７は、セキュアワールドのレジスタ値にアクセスする場合には、ワールド制御ユニット３２を呼び出してプロセッサ３０をセキュアワールドに変更する。また、レジスタ設定部７７は、ノンセキュアワールドのレジスタ値にアクセスする場合には、ワールド制御ユニット３２を呼び出してプロセッサ３０をノンセキュアワールドに変更する。また、レジスタ設定部７７は、複数のレジスタ値を１個ずつワールドの切り替えをしながらコピーおよび設定を繰り返してもよいし、複数のレジスタ値の全てを一括してコピーおよび設定をしてもよい。
【００７５】
移行制御部７８は、モジュールロード部７２に呼び出される。移行制御部７８は、モジュールロード部７２から、モニタモジュールおよびセキュアＯＳモジュールがロードされたメインメモリ２４上のアドレスを示す情報を取得する。
【００７６】
移行制御部７８は、予め定められた移行処理の順序に従って、メモリマップ生成部７４、メモリマップ設定部７５、割込設定部７６およびレジスタ設定部７７を呼び出して処理を実行させ、所定のタイミングにおいてワールドおよびモードの設定等を実行する。具体的には、移行制御部７８は、次の順序で処理を実行する。
【００７７】
まず、移行制御部７８は、メモリマップ生成部７４を呼び出して、メモリマップを生成させる。続いて、移行制御部７８は、メモリ管理ユニット３６に対するノンセキュアワールドのメモリマップの設定に先だって、割込制御ユニット３８を呼び出して、割込ポートへの入力を無効化する。
【００７８】
続いて、移行制御部７８は、メモリ管理ユニット３６に対するノンセキュアワールドのメモリマップの設定に先だって、ワールド制御ユニット３２を呼び出して、プロセッサ３０をモニタモードに変更する。続いて、移行制御部７８は、第１メモリマップ設定部８１を呼び出して、セキュアワールドのメモリマップをコピーしてノンセキュアワールドに設定する。
【００７９】
続いて、移行制御部７８は、モニタ割込設定部８６を呼び出して、モニタへの割込入力に関する値を設定する。続いて、移行制御部７８は、第１割込設定部８７を呼び出して、セキュアワールドへの割込入力に関する値をコピーして、ノンセキュアワールドに設定する。続いて、移行制御部７８は、第２割込設定部８８を呼び出して、セキュアワールドへの割込入力に関する値を設定する。続いて、移行制御部７８は、割込ポート設定部８９を呼び出して、それぞれのポートの割込先のワールドを設定する。
【００８０】
続いて、移行制御部７８は、第１レジスタ設定部９１を呼び出して、セキュアワールドのレジスタ値をコピーしてノンセキュアワールドに設定する。続いて、移行制御部７８は、第２レジスタ設定部９２を呼び出して、モニタモジュールおよびセキュアＯＳモジュールを実行するためのレジスタ値を、セキュアワールドに設定する。
【００８１】
続いて、移行制御部７８は、第２メモリマップ設定部８２を呼び出して、モニタモジュールおよびセキュアＯＳモジュールを実行するためのメモリマップをセキュアワールドに設定する。
【００８２】
続いて、移行制御部７８は、メモリ管理ユニット３６に対するセキュアワールドのメモリマップの設定の後に、ワールド制御ユニット３２を呼び出して、プロセッサ３０をノンセキュアワールドのＯＳモードに変更する。続いて、移行制御部７８は、プロセッサ３０をノンセキュアワールドのＯＳモードに変更した後に、割込制御ユニット３８を呼び出して、無効化した割込ポートへの入力を復帰させる。最後に、移行制御部７８は、処理を汎用オペレーティングシステムに戻す。
【００８３】
図１１は、情報処理システム１０のブート後の処理フローを示す図である。図１２は、メインメモリ２４にロードされるプログラムの遷移を示す図である。情報処理システム１０は、電源投入されると、図１１に示すフローに従って処理を実行する。
【００８４】
まず、情報処理システム１０は、電源投入後において、汎用ＯＳモジュールをメインメモリ２４にロードする（Ｓ１１）。この結果、メインメモリ２４には、例えば、図１２のＡに示すように汎用ＯＳモジュールが書き込まれる。また、プロセッサ３０は、セキュアワールドのＯＳモードに設定される。これにより、プロセッサ３０は、セキュアワールドのＯＳモードで、汎用ＯＳモジュールを実行して、汎用オペレーティングシステムとして動作する。なおＶＴの場合、汎用オペレーティングシステムは、ｎｏｎ−ｒｏｏｔモードで動作する。
【００８５】
続いて、プロセッサ３０は、ドライバモジュールをメインメモリ２４にロードする（Ｓ１２）。この結果、メインメモリ２４には、例えば、図１２のＢに示すように、汎用ＯＳモジュールとともにドライバモジュールが書き込まれる。
【００８６】
続いて、プロセッサ３０は、ドライバモジュールを実行して、デバイスドライバ５２として動作する（Ｓ１３）。デバイスドライバ５２は、モニタモジュールおよびセキュアＯＳモジュールをメインメモリ２４にロードするとともに、各種の設定処理を実行する。
【００８７】
この結果、メインメモリ２４には、図１２のＣに示すように、汎用ＯＳモジュールおよびドライバモジュールが書き込まれた後の空領域に、モニタモジュールおよびセキュアＯＳモジュールが書き込まれる。これにより、プロセッサ３０は、セキュアワールドで、モニタまたはセキュアオペレーティングシステムとして動作することができる。なお、モニタは、プロセッサ３０上で直接動作する。またＶＴの場合、セキュアオペレーティングシステムは、ｎｏｎ−ｒｏｏｔモードで、モニタ上で動作する。
【００８８】
また、デバイスドライバ５２は、処理の最後に、処理を汎用オペレーティングシステムに戻す。これにより、プロセッサ３０は、ノンセキュアワールドのＯＳモードで、汎用ＯＳモジュールを実行して、汎用オペレーティングシステムとして動作する。なお、汎用オペレーティングシステムはＶＴの場合、ｎｏｎ−ｒｏｏｔモードで動作する。
【００８９】
図１３は、第１実施形態に係るデバイスドライバ５２の処理フローを示す図である。図１４は、図１３のステップＳ３１の処理の詳細なフローを示す図である。デバイスドライバ５２は、ドライバロード部５４に呼び出されると、図１３に示すフローに従って処理を実行する。
【００９０】
まず、ステップＳ２１において、モジュールロード部７２は、メインメモリ２４に、モニタモジュールおよびセキュアＯＳモジュールを記憶させるためのメモリ領域を確保する。モジュールロード部７２は、例えば、汎用ＯＳモジュールおよびドライバモジュールが使用していない領域を動的に確保する。また、モジュールロード部７２は、汎用ＯＳモジュールおよびドライバモジュールのロードに先だってメモリ領域を確保しておき、汎用ＯＳモジュールおよびドライバモジュールのロードにおいて予め確保したメモリ領域を使用しないようにしてもよい。
【００９１】
続いて、ステップＳ２２において、モジュールロード部７２は、確保したメモリ領域に、モニタモジュールおよびセキュアＯＳモジュールをロードする。モジュールロード部７２は、ロードが完了すると、モニタモジュールおよびセキュアＯＳモジュールがロードされたアドレスを示す情報を移行制御部７８に渡す。
【００９２】
続いて、ステップＳ２３において、移行制御部７８は、メモリマップ生成部７４を呼び出す。メモリマップ生成部７４は、モニタモジュールおよびセキュアＯＳモジュールがロードされたアドレスに基づき、プロセッサ３０がモニタモジュールおよびセキュアＯＳモジュールを実行するためのメモリマップを生成する。
【００９３】
続いて、ステップＳ２４において、移行制御部７８は、割込制御ユニット３８を呼び出す。割込制御ユニット３８は、全ての割込ポートへの入力を無効化する。これにより、移行制御部７８は、以後の処理中において、割込処理をさせなくすることができる。
【００９４】
続いて、ステップＳ２５において、移行制御部７８は、ワールド制御ユニット３２を呼び出す。ワールド制御ユニット３２は、プロセッサ３０をモニタモードに変更する。これにより、移行制御部７８は、以後の処理においてノンセキュアワールドに変更しても、プロセッサ３０にセキュアワールドのメモリマップに基づきメインメモリ２４へのアクセスを継続させることができる。
【００９５】
続いて、ステップＳ２６において、移行制御部７８は、第１メモリマップ設定部８１を呼び出す。第１メモリマップ設定部８１は、メモリ管理ユニット３６により管理されているセキュアワールドのメモリマップをコピーして、ノンセキュアワールドのメモリマップとしてメモリ管理ユニット３６に設定する。
【００９６】
ブート後において、メモリ管理ユニット３６は、プロセッサ３０が汎用ＯＳモジュールを実行するためのメモリマップを管理している。従って、第１メモリマップ設定部８１は、セキュアワールドのメモリマップをコピーしてノンセキュアワールドに設定することにより、ノンセキュアワールドに設定が変更された場合、プロセッサ３０を汎用オペレーティングシステムとして動作させることができる。
【００９７】
なお、ステップＳ２６においては、第１メモリマップ設定部８１は、具体的には次のように処理を実行する。まず、第１メモリマップ設定部８１は、セキュアワールドに設定されている状態で、メモリ管理ユニット３６にアクセスしてメモリマップをコピーする。続いて、第１メモリマップ設定部８１は、ワールド制御ユニット３２を呼び出してノンセキュアワールドに変更してから、コピーしたメモリマップをメモリ管理ユニット３６に設定する。そして、第１メモリマップ設定部８１は、メモリマップを設定した後、再度、ワールド制御ユニット３２を呼び出してセキュアワールドに変更する。これにより、第１メモリマップ設定部８１は、セキュアワールドのメモリマップをコピーして、ノンセキュアワールドに設定することができる。
【００９８】
続いて、ステップＳ２７において、移行制御部７８は、モニタ割込設定部８６を呼び出す。モニタ割込設定部８６は、メモリ管理ユニット３６に対してモニタへの割り込み対する設定を行う。より具体的には、モニタ割込設定部８６は、モニタの割込ハンドラのアドレスを、モニタの割込先アドレスとして割込制御ユニット３８に設定する。さらに、モニタ割込設定部８６は、モニタへの割込入力を有効とするか無効とするかをメモリ管理ユニット３６に対して設定する。
【００９９】
続いて、ステップＳ２８において、移行制御部７８は、第１割込設定部８７を呼び出す。第１割込設定部８７は、割込制御ユニット３８により管理されているセキュアワールドの割込入力に関する値をコピーして、ノンセキュアワールドの割込入力に関する値としてメモリ管理ユニット３６に設定する。より具体的には、第１割込設定部８７は、割込制御ユニット３８により管理されているセキュアワールドの割込先アドレスをコピーして、ノンセキュアワールドの割込先アドレスとしてメモリ管理ユニット３６に設定する。さらに、第１割込設定部８７は、割込制御ユニット３８により管理されているセキュアワールドのへの割込入力の有効／無効の設定値をコピーして、ノンセキュアワールドへの割込入力の有効／無効の設定値としてメモリ管理ユニット３６に設定する。
【０１００】
なお、ステップＳ２８において、第１割込設定部８７は、具体的には次のように処理を実行する。まず、第１割込設定部８７は、セキュアワールドに設定されている状態で、割込制御ユニット３８にアクセスして割込入力に関する値をコピーする。続いて、第１割込設定部８７は、ワールド制御ユニット３２を呼び出してノンセキュアワールドに変更してから、コピーした割込入力に関する値を割込制御ユニット３８に設定する。そして、第１割込設定部８７は、割込入力に関する値を設定した後、再度、ワールド制御ユニット３２を呼び出してセキュアワールドに変更する。これにより、第１割込設定部８７は、セキュアワールドの割込入力に関する値をコピーして、ノンセキュアワールドに設定することができる。
【０１０１】
続いて、ステップＳ２９において、移行制御部７８は、第２割込設定部８８を呼び出す。第２割込設定部８８は、メモリ管理ユニット３６に対してセキュアワールドへの割り込み対する設定を行う。より具体的には、第２割込設定部８８は、セキュアオペレーティングシステムの割込ハンドラのアドレスを、セキュアワールドの割込先アドレスとして割込制御ユニット３８に設定する。さらに、第２割込設定部８８は、セキュアワールドへの割込入力を有効とするか無効とするかを割込制御ユニット３８に設定する。
【０１０２】
続いて、ステップＳ３０において、移行制御部７８は、割込ポート設定部８９を呼び出す。割込ポート設定部８９は、それぞれのポートの割込先のワールドを設定する。この場合において、割込ポート設定部８９は、セキュアワールドが割込先に設定されている割込ポートにおける割込先を、ノンセキュアワールドに変更する。割込ポート設定部８９は、セキュアオペレーティングシステムへの割り込みに使用される割込ポートにおける割込先をセキュアワールドに設定する。
【０１０３】
続いて、ステップＳ３１において、移行制御部７８は、第１レジスタ設定部９１を呼び出す。第１レジスタ設定部９１は、バンクレジスタ３４により記憶されているセキュアワールドのレジスタ値をコピーして、ノンセキュアワールドのレジスタ値としてバンクレジスタ３４に設定する。
【０１０４】
なお、ステップＳ３１において、第１レジスタ設定部９１は、具体的には次のように処理を実行する。まず、第１レジスタ設定部９１は、セキュアワールドに設定されている状態で、バンクレジスタ３４にアクセスしてレジスタ値をコピーする。続いて、第１レジスタ設定部９１は、ワールド制御ユニット３２を呼び出してノンセキュアワールドに変更してから、コピーしたレジスタ値をバンクレジスタ３４に設定する。そして、第１レジスタ設定部９１は、レジスタ値を設定した後、再度、ワールド制御ユニット３２を呼び出してセキュアワールドに変更する。これにより、第１レジスタ設定部９１は、セキュアワールドのレジスタ値をコピーして、ノンセキュアワールドに設定することができる。
【０１０５】
また、第１レジスタ設定部９１は、複数のレジスタ値の全てを一括してコピーおよび設定をしてもよい。また、複数のレジスタ値を１個ずつワールドの切り替えをしながらコピーおよび設定を繰り返してもよい。この場合、第１レジスタ設定部９１は、図１４に示すように、処理を実行する。すなわち、第１レジスタ設定部９１は、まず、未設定のレジスタが存在するか否かを判断する（Ｓ３１−１）。未設定のレジスタが存在する場合（Ｓ３１−１のＹｅｓ）、第１レジスタ設定部９１は、そのレジスタのレジスタ値を取得し（Ｓ３１−２）、ノンセキュアワールドに変更し（Ｓ３１−３）、レジスタ値を設定し（Ｓ３１−４）、セキュアワールドに変更する（Ｓ３１−５）。そして、未設定のレジスタが存在しなくなると（Ｓ３１−１のＮｏ）、処理を戻す。
【０１０６】
続いて、ステップＳ３２において、移行制御部７８は、第２レジスタ設定部９２を呼び出す。第２レジスタ設定部９２は、モニタモジュールおよびセキュアＯＳモジュールを実行するためのレジスタ値を、セキュアワールドのレジスタ値としてバンクレジスタ３４に設定する。
【０１０７】
続いて、ステップＳ３３において、移行制御部７８は、第２メモリマップ設定部８２を呼び出す。第２メモリマップ設定部８２は、モニタモジュールおよびセキュアＯＳモジュールを実行するためのメモリマップを、セキュアワールドのメモリマップとしてメモリ管理ユニット３６に設定する。これにより、第２メモリマップ設定部８２は、セキュアワールドにおいて、プロセッサ３０をモニタおよびセキュアオペレーティングシステムとして動作させることができる。
【０１０８】
続いて、ステップＳ３４において、移行制御部７８は、ワールド制御ユニット３２を呼び出す。ワールド制御ユニット３２は、プロセッサ３０をノンセキュアワールドのＯＳモードに変更する。これにより、移行制御部７８は、以後の処理においてノンセキュアワールドにおいて、プロセッサ３０をデバイスドライバ５２として動作させることができる。
【０１０９】
続いて、ステップＳ３５において、移行制御部７８は、割込制御ユニット３８を呼び出す。割込制御ユニット３８は、無効化した割込ポートへの入力を復帰させる。これにより、移行制御部７８は、以後の処理において、通常の設定に従って、割込入力を有効にすることができる。
【０１１０】
そして、ステップＳ３６において、移行制御部７８は、処理をドライバロード部５４に返す。これにより、移行制御部７８は、処理を汎用オペレーティングシステムに戻すことができる。
【０１１１】
以上のように、デバイスドライバ５２は、セキュアワールドで動作していた汎用オペレーティングシステムのメモリマップ、バンクレジスタ３４のレジスタ値、割込入力に関する設定値を、ノンセキュアワールドに移行することができる。これにより、汎用オペレーティングシステムは、ノンセキュアワールドで動作することができる。さらに、デバイスドライバ５２は、セキュアワールドのメモリマップ、バンクレジスタ３４のレジスタ値、割込入力に関する設定値を新たに設定することができる。これにより、モニタおよびセキュアオペレーティングシステムは、セキュアワールドで動作することができる。
【０１１２】
タイプ１のモニタ（ハイパーバイザ）をオペレーティングシステムの起動後に動作させるためには、オペレーティングシステムを動作させるワールド（ＶＴ機能プロセッサではＶＭＸｍｏｄｅ、ＴｒｕｓｔＺｏｎｅ搭載プロセッサではワールド）を移行させなければならない。その際、ワールドの移行の「直前」と「直後」とでオペレーティングシステムから見た設定が同一になるよう辻褄を合わせる必要がある。具体的には、同一のバンクメモリへのアクセス命令でもワールドが変わると物理的に別個のバンクメモリにアクセスされるといった問題、割込ポートにされた入力は、元のワールドに入力されてしまうといった問題等が生じる。従って、このような設定を、ワールドの移行の「直前」と「直後」とで正しく変更しなければならない。
【０１１３】
さらに、これらの設定は、ワールドの移行の「移行中」においても正しく動作する必要もある。例えば、汎用オペレーティングシステムをセキュアワールドからノンセキュアワールドに移行し、且つ、セキュアワールドで新しいセキュアオペレーティングシステムを動作させる場合、移行中において、プロセッサ３０は、汎用オペレーティングシステムとセキュアオペレーティングシステムの両方のメモリマップで正しく動作しなければならない。また、さらに、設定すべき項目は、複数個存在するため、移行中において正しく動作するために、設定を切換える項目の順序も重要となる。
【０１１４】
第１実施形態に係る情報処理システム１０によれば、このような問題を解決することができる。これにより、第１実施形態に係る情報処理システム１０によれば、汎用オペレーティングシステムをプロセッサ３０上で直接動作させ、その後に、プロセッサ３０上でモニタを直接動作させるとともに、モニタ上で新たなセキュアオペレーティングシステムおよび汎用オペレーティングシステムを動作させることができる。
【０１１５】
（第２実施形態）
図１５は、第２実施形態に係るデバイスドライバ１１０の機能構成を、ドライバロード部５４および情報処理システム１０のハードウェアとともに示す図である。第２実施形態に係る情報処理システム１０は、メモリ保護ユニット１１１をさらに備える。メモリ保護ユニット１１１は、プロセッサ３０がノンセキュアワールドで動作している場合にメインメモリ２４における指定された領域への書き込みを禁止する。
【０１１６】
第２実施形態に係るデバイスドライバ１１０は、図５に示した第１実施形態に係るデバイスドライバ５２が有する構成要素に加えて、保護設定部１１２をさらに有する。モジュールロード部７２は、モニタモジュールおよびセキュアＯＳモジュールをメインメモリ２４にロードした後に、保護設定部１１２を呼び出す。保護設定部１１２は、メモリ保護ユニット１１１に対して、モニタモジュールおよびセキュアＯＳモジュールがロードされた領域を書き込み禁止領域として設定する。これにより、メモリ保護ユニット１１１は、プロセッサ３０がノンセキュアワールドで動作している場合に、モニタモジュールおよびセキュアＯＳモジュールが書き込まれた領域への書き込みを禁止することができる。
【０１１７】
図１６は、第２実施形態に係るデバイスドライバ１１０の処理フローを示す図である。第２実施形態に係るデバイスドライバ１１０は、図１３に示したステップＳ２２の処理の後に、ステップＳ５１の処理を実行する。ステップＳ５１において、保護設定部１１２は、モジュールロード部７２から、モニタモジュールおよびセキュアＯＳモジュールが書き込まれたアドレスを示す情報を受け取る。そして、保護設定部１１２は、モニタモジュールおよびセキュアＯＳモジュールが書き込まれた領域を、ノンセキュアワールドにおける書き込み禁止領域として設定する。デバイスドライバ１１０は、ステップＳ５１の処理を終えると、以降、図１３のステップＳ２３以下と同一の処理を実行する。
【０１１８】
図１７は、メインメモリ２４における書き込みが禁止される領域を示す図である。メモリ保護ユニット１１１は、図１７に示すように、プロセッサ３０がノンセキュアワールドで動作している場合に、モニタモジュールおよびセキュアＯＳモジュールが書き込まれた領域への書き込みを禁止する。このような第２実施形態に係る情報処理システム１０によれば、例えば汎用オペレーティングシステムに脆弱性が存在した場合であっても、攻撃者によりモニタおよびセキュアオペレーティングシステムを改ざんさせないようにすることができる。
【０１１９】
（第３実施形態）
図１８は、第３実施形態に係るデバイスドライバ１２０の機能構成を、ドライバロード部５４および情報処理システム１０のハードウェアとともに示す図である。第３実施形態に係るデバイスドライバ１２０は、図１５に示した第２実施形態に係るデバイスドライバ１１０が有する構成要素に加えて、ロード判定部１２１をさらに有する。
【０１２０】
ロード判定部１２１は、ドライバロード部５４に呼び出される。ロード判定部１２１は、モニタモジュールおよびセキュアＯＳモジュールのロードに先だって、予め定められた基準に従って、ロードを実行するか否かを判定する。ロードすると判定した場合、ロード判定部１２１は、モジュールロード部７２を呼び出して、ロードを実行させる。ロードしないと判定した場合、ドライバロード部５４にエラーを通知して、モジュールロード部７２によるロードを禁止する。
【０１２１】
図１９は、第３実施形態に係るデバイスドライバ１２０のロード時における処理フローを示す図である。第３実施形態に係るデバイスドライバ１２０は、まず、ステップＳ６１を実行する。ステップＳ６１において、ロード判定部１２１は、モニタモジュールおよびセキュアＯＳモジュールをロードするか否かを判定する。ロードしないと判定した場合、ステップＳ６２において、ロード判定部１２１は、ドライバロード部５４にエラー通知を返して、本フローを終了する。ロードすると判定した場合、ロード判定部１２１は、図１６のステップＳ２１に処理を進める。
【０１２２】
ロード判定部１２１は、例えば、モニタまたはセキュアオペレーティングシステムが前回異常終了した場合、ロードをしないと判定する。また、ロード判定部１２１は、ネットワークを介して所定のサーバに問い合わせをし、問い合わせ結果に基づきロードをするかしないかを判定してもよい。また、ロード判定部１２１は、例えば、ハードウェアの耐タンパ性を有するモジュール（Trusted  Platform  Module）と連携して汎用ＯＳモジュールを検証し、その検証結果に基づきロードをするか否かを判定してもよい。
【０１２３】
このような第３実施形態に係る情報処理システム１０によれば、攻撃者により悪意にロードの指示をされた場合、または、モニタモジュールまたはセキュアが破壊してしまった場合等の異常な動作時において、ロードを禁止することができる。
【０１２４】
（第４実施形態）
図２０は、第４実施形態に係るデバイスドライバ１３０の機能構成を、ドライバロード部５４および情報処理システム１０のハードウェアとともに示す図である。第４実施形態に係るデバイスドライバ１３０は、図１８に示した第３実施形態に係るデバイスドライバ１２０が有する構成要素に加えて、アンロード判定部１３１をさらに有する。
【０１２５】
アンロード判定部１３１は、ドライバロード部５４から呼び出される。アンロード判定部１３１は、プロセッサ３０がノンセキュアワールドに設定されている場合に、モニタモジュールおよびセキュアＯＳモジュールのアンロードの指示を受け付ける。
【０１２６】
アンロード判定部１３１は、ドライバロード部５４からアンロードの指示を受けると、予め定められた基準に従って、アンロードを実行するか否かを判定する。アンロードすると判定した場合、アンロード判定部１３１は、移行部７３を呼び出して、モニタモジュールおよびセキュアＯＳモジュールのアンロードを実行させる。アンロードしないと判定した場合、ドライバロード部５４にエラーを通知してアンロードを禁止する。
【０１２７】
移行部７３は、アンロード判定部１３１から呼び出された場合、予め定められたアンロード処理を実行する。そして、移行部７３は、アンロード処理を完了すると、処理をドライバロード部５４に戻す。
【０１２８】
図２１は、第４実施形態に係るデバイスドライバ１３０のアンロード時における処理フローを示す図である。第４実施形態に係るデバイスドライバ１３０は、ノンセキュアワールドにおいて、ドライバロード部５４から呼び出されて、アンロードの指示を受けると、図２１に示す処理を実行する。
【０１２９】
まず、ステップＳ７１において、アンロード判定部１３１は、モニタモジュールおよびセキュアＯＳモジュールをアンロードするか否かを判定する。アンロード判定部１３１は、例えば、汎用オペレーティングシステムに異常が無いか、すなわち、サイバー攻撃の痕跡が無いか、マルウェアが侵入していなか等を判断し、異常が無い場合にアンロードをすると判定してもよい。また、アンロード判定部１３１は、ネットワークを介して所定のサーバに問い合わせをし、問い合わせ結果に基づきアンロードをするかしないかを判定してもよい。また、アンロード判定部１３１は、アンロードを指示したプログラムが正規品であることを条件として、アンロードすると判定してもよい。これにより、アンロード判定部１３１は、攻撃者により悪意にアンロードの指示をされた場合等の異常時において、アンロードを禁止することができる。
【０１３０】
アンロードしないと判定した場合、ステップＳ７２において、アンロード判定部１３１は、ドライバロード部５４にエラー通知を返して、本フローを終了する。アンロードすると判定した場合、アンロード判定部１３１は、処理をステップＳ７３に進めて、移行制御部７８を呼び出す。
【０１３１】
ステップＳ７３において、移行制御部７８は、ワールド制御ユニット３２を呼び出す。ワールド制御ユニット３２は、プロセッサ３０をノンセキュアワールドからセキュアワールドに変更する。
【０１３２】
続いて、ステップＳ７４において、移行制御部７８は、割込制御ユニット３８を呼び出す。割込制御ユニット３８は、全ての割込ポートへの入力を無効化する。
【０１３３】
続いて、ステップＳ７５において、移行制御部７８は、ワールド制御ユニット３２を呼び出す。ワールド制御ユニット３２は、プロセッサ３０をモニタモードに変更する。
【０１３４】
続いて、ステップＳ７６において、移行制御部７８は、第１メモリマップ設定部８１を呼び出す。第１メモリマップ設定部８１は、メモリ管理ユニット３６により管理されているノンセキュアワールドのメモリマップをコピーして、セキュアワールドのメモリマップとしてメモリ管理ユニット３６に設定する。これにより、第１メモリマップ設定部８１は、セキュアワールドに設定が変更された場合、プロセッサ３０を汎用オペレーティングシステムとして動作させることができる。
【０１３５】
続いて、ステップＳ７７において、移行制御部７８は、第１レジスタ設定部９１を呼び出す。第１レジスタ設定部９１は、バンクレジスタ３４により記憶されているノンセキュアワールドのレジスタ値をコピーして、セキュアワールドのレジスタ値としてバンクレジスタ３４に設定する。
【０１３６】
続いて、ステップＳ７８において、移行制御部７８は、割込ポート設定部８９を呼び出す。割込ポート設定部８９は、それぞれのポートの割り込み先のワールドを設定する。この場合において、割込ポート設定部８９は、ノンセキュアワールドが割込先に設定されている割込ポートにおける割込先を、セキュアワールドに変更する。割込ポート設定部８９は、セキュアオペレーティングシステムへの割り込みに使用される割込ポートにおける割込先を、初期値に設定する。
【０１３７】
続いて、ステップＳ７９において、移行制御部７８は、第１割込設定部８７を呼び出す。第１割込設定部８７は、割込制御ユニット３８により管理されているノンセキュアワールドの割込入力に関する値をコピーして、セキュアワールドの割込入力に関する値としてメモリ管理ユニット３６に設定する。より具体的には、第１割込設定部８７は、割込制御ユニット３８により管理されているノンセキュアワールドの割込先アドレスをコピーして、セキュアワールドの割込先アドレスとしてメモリ管理ユニット３６に設定する。さらに、第１割込設定部８７は、割込制御ユニット３８により管理されているノンセキュアワールドのへの割込入力の有効／無効の設定値をコピーして、セキュアワールドへの割込入力の有効／無効の設定値としてメモリ管理ユニット３６に設定する。
【０１３８】
続いて、ステップＳ８０において、移行制御部７８は、ワールド制御ユニット３２を呼び出す。ワールド制御ユニット３２は、プロセッサ３０をセキュアワールドのＯＳモードに変更する。続いて、ステップＳ８１において、移行制御部７８は、割込制御ユニット３８を呼び出す。割込制御ユニット３８は、無効化した割込ポートへの入力を復帰させる。
【０１３９】
そして、ステップＳ８２において、移行制御部７８は、処理をドライバロード部５４に返す。これにより、移行制御部７８は、処理を汎用オペレーティングシステムに戻すことができる。なお、移行制御部７８は、セキュアワールドにおけるメモリマップ、割込設定およびバンクレジスタ３４のレジスタ値を初期値に戻す処理を実行させてもよい。また、移行制御部７８は、メモリ保護ユニット１１１の保護設定を初期値に戻す処理も実行させてもよい。
【０１４０】
このような第４実施形態に係る情報処理システム１０は、再起動をさせずに、モニタモジュールおよびセキュアＯＳモジュールをアンロードすることができる。これにより、情報処理システム１０によれば、モニタモジュールおよびセキュアＯＳモジュールを更新し、再度、ロードすることができる。従って、情報処理システム１０によれば、可用性の高いアプリケーションに利用された場合であっても、モニタモジュールおよびセキュアＯＳモジュールを更新することができる。
【０１４１】
（第５実施形態）
図２２は、第５実施形態に係るデバイスドライバ１４０の機能構成を、ドライバロード部５４および情報処理システム１０のハードウェアとともに示す図である。第５実施形態に係るデバイスドライバ１４０は、図１８に示した第３実施形態に係るデバイスドライバ１２０が有する構成要素に加えて、検証部１４１と、復号部１４２とをさらに有する。なお、デバイスドライバ１４０は、図２０に示す第４実施形態に係るデバイスドライバ１３０が有する構成要素に加えて、検証部１４１と、復号部１４２とをさらに有する構成であってもよい。
【０１４２】
第５実施形態において、モジュール格納部７１は、暗号化されたモニタモジュールおよび暗号化されたセキュアＯＳモジュールを格納する。さらに、モジュール格納部７１は、暗号化されたモニタモジュールおよび暗号化されたセキュアＯＳモジュールに、デジタル署名が付加されている。暗号化方法は、どのような方法であってもよく、例えば、ＡＥＳ（Advanced  Encryption  Standard）等の共通鍵暗号方式であってよい。また、デジタル署名の方法は、ＳＨＡ（Secure  Hash  Algorithm）等のハッシュ値の計算方式とＲＳＡ暗号等の公開鍵暗号方式を組み合わせた方法であってよい。
【０１４３】
検証部１４１は、モニタモジュールおよびセキュアＯＳモジュールのロードの指示を受けた場合、モジュール格納部７１に格納されたモニタモジュールおよびセキュアＯＳモジュールが改ざんされていないかを検証する。ロード判定部１２１は、検証部１４１により改ざんされていないと判定された場合、モジュールロード部７２を呼び出す。
【０１４４】
復号部１４２は、暗号化されたモニタモジュールおよび暗号化されたセキュアＯＳモジュールを、内部で管理する暗号化鍵を用いて復号する。モジュールロード部７２は、復号部１４２により復号されたモニタモジュールおよびセキュアＯＳモジュールをメインメモリ２４にロードする。
【０１４５】
図２３は、第５実施形態に係るデバイスドライバ１４０のロード時における処理フローを示す図である。第５実施形態に係るデバイスドライバ１４０は、ドライバロード部５４から呼び出されて、ロードの指示を受けると、図２３に示す処理を実行する。
【０１４６】
まず、ステップＳ１０１において、検証部１４１は、モニタモジュールおよびセキュアＯＳモジュールのデジタル署名を検証する。例えば、検証部１４１は、公開鍵を有し、公開鍵によりデジタル署名を検証する。続いて、ステップＳ１０２において、検証部１４１は、検証が成功したか失敗したかを判断する。検証が失敗した場合（ステップＳ１０２のＮｏ）、検証部１４１は、処理をステップＳ１０５に進める。
【０１４７】
検証が成功した場合（Ｓ１０２のＹｅｓ）、ステップＳ１０３において、検証部１４１は、モニタモジュールおよびセキュアＯＳモジュールのそれぞれの全体のハッシュ値を算出する。続いて、ステップＳ１０４において、検証部１４１は、モニタモジュールおよびセキュアＯＳモジュールの全体のハッシュ値と、デジタル署名に含まれるハッシュ値と比較する。検証部１４１は、ハッシュ値同士が一致する場合、モニタモジュールおよびセキュアＯＳモジュールが改ざんされていないと判定する。モニタモジュールまたはセキュアＯＳモジュールが改ざんされていると判断する場合（Ｓ１０４のＮｏ）、検証部１４１は、処理をステップＳ１０５に進める。
【０１４８】
ステップＳ１０５において、ロード判定部１２１は、ドライバロード部５４にエラー通知を返して、本フローを終了する。モニタモジュールおよびセキュアＯＳモジュールが改ざんされていないと判断する場合（Ｓ１０４のＹｅｓ）、検証部１４１は、処理をステップＳ１０６に進める。
【０１４９】
ステップＳ１０６において、モジュールロード部７２は、メインメモリ２４に、モニタモジュールおよびセキュアＯＳモジュールをロードするためのメモリ領域を確保する。続いて、ステップＳ１０７において、復号部１４２は、暗号化されたモニタモジュールおよび暗号化されたセキュアＯＳモジュールを、内部で管理する暗号化鍵を用いて復号する。そして、モジュールロード部７２は、復号部１４２により復号されたモニタモジュールおよびセキュアＯＳモジュールをメインメモリ２４にロードする。
【０１５０】
続いて、ステップＳ１０８において、保護設定部１１２は、モジュールロード部７２から、モニタモジュールおよびセキュアＯＳモジュールが書き込まれたアドレスを示す情報を受け取る。続いて、保護設定部１１２は、モニタモジュールおよびセキュアＯＳモジュールが書き込まれた領域を、ノンセキュアワールドにおける書き込み禁止領域として設定する。そして、デバイスドライバ１４０は、ステップＳ１０８の処理を終えると、以降、図１６のステップＳ２３以下と同一の処理を実行する。
【０１５１】
このような第５実施形態に係る情報処理システム１０は、デバイスドライバ１４０に格納されているモニタモジュールおよびセキュアＯＳモジュールを暗号化して改ざんを困難とし、もし改ざんされてしまった場合にもロードしない。これにより、本実施形態に係る情報処理システム１０によれば、モニタモジュールおよびセキュアＯＳモジュールをより強力に保護することができる。
【０１５２】
なお、情報処理システム１０は、暗号化およびデジタル署名に用いる鍵を難読化したり、ドライバモジュール自体を難読化したりして、ドライバモジュールをさらに強力に保護してもよい。また、情報処理システム１０は、プロセッサ３０に、暗号化したプログラムまたはデジタル署名を付加したプログラムを実行可能なＣＰＵを適用してもよい。このようにしても、情報処理システム１０は、ドライバモジュールをさらに強力に保護することができる。
【０１５３】
（第６実施形態）
図２４は、第６実施形態に係るプロセッサ３０の機能構成を、情報処理システム１０のハードウェアとともに示す図である。第６実施形態に係る情報処理システム１０は、通知ユニット１５１をさらに備える。
【０１５４】
また、プロセッサ３０は、モニタ５６上で確認モジュールを実行することにより確認部１５２として動作する。確認部１５２は、汎用オペレーティングシステム５０およびセキュアオペレーティングシステム５８と並行してモニタ５６上で動作する。
【０１５５】
通知ユニット１５１は、確認部１５２を呼び出す。通知ユニット１５１は、例えば周期タイマーであって定期的に確認部１５２を呼び出してもよいし、情報処理システム１０が起動した後の所定のタイミングで１回だけ確認部１５２を呼び出してもよい。また、通知ユニット１５１は、時間に関するイベント以外にも、特定のイベント発生時において確認部１５２を呼び出してもよい。
【０１５６】
確認部１５２は、ロード検証部１５３と、対処部１５４とを含む。ロード検証部１５３は、モニタモジュールおよびセキュアＯＳモジュールが正常にロードされているか否かを検証する。
【０１５７】
ロード検証部１５３は、メインメモリ２４におけるモニタモジュールおよびセキュアＯＳモジュールがロードされた領域を読み出して、ハッシュ値を算出する。ロード検証部１５３は、算出されたハッシュ値と、予め記憶しているハッシュ値とが一致するか否かを判別して、モニタモジュールおよびセキュアＯＳモジュールが正常にロードされているか否かを検証する。また、ロード検証部１５３は、ワールド制御ユニット３２、バンクレジスタ３４、メモリ管理ユニット３６および割込制御ユニット３８に設定されている値が適切か否かを確認してもよい。ロード検証部１５３は、モニタモジュールおよびセキュアＯＳモジュールが正常にロードされていないと判断した場合、対処部１５４を呼び出す。
【０１５８】
対処部１５４は、モニタモジュールまたはセキュアＯＳモジュールが正常にロードされていないと判断された場合において、予め定められた対処処理を実行する。例えば、対処部１５４は、異常状態であることをサーバ等に通知する。また、対処部１５４は、情報処理システム１０を再起動する。また、対処部１５４は、ファームェアアップデートプログラムが存在する場合には、強制的にファームウェアのアップデートプログラムを実行する。また、対処部１５４は、情報処理システム１０を最低限の機能を持った縮退動作状態に移行させる。また、対処部１５４は、情報処理システム１０を待機系の動作状態に切り替える。また、対処部１５４は、異常ログの記録を実行する。また、対処部１５４は、情報処理システム１０を停止させる。
【０１５９】
また、確認部１５２は、ロード検証部１５３が正常状態であると判断した場合に、正常状態である旨をサーバ等に通知する状態通知部をさらに有してもよい。また、この状態通知部は、ロード検証部１５３が異常状態であると判断した場合に、異常状態である旨をサーバに通知してもよい。
【０１６０】
図２５は、第６実施形態に係る情報処理システム１０の状態の確認時の処理フローを示す図である。情報処理システム１０は、図２５に示すフローを実行する。
【０１６１】
まず、通知ユニット１５１は、予め定められたイベントが発生したか否かを検知する。予め定められたイベントが発生した場合、ステップＳ１１１において、通知ユニット１５１は、確認部１５２を呼び出す。
【０１６２】
続いて、ステップＳ１１２において、確認部１５２のロード検証部１５３は、モニタモジュールおよびセキュアＯＳモジュールがメインメモリ２４に正常にロードされているか否かを検証する。続いて、ステップＳ１１３において、ロード検証部１５３は、正常にロードされているか否かを判定する。ロード検証部１５３は、正常にロードされていると判断する場合（Ｓ１１３のＹｅｓ）、本フローを終了する。ロード検証部１５３は、正常にロードされていないと判断する場合（Ｓ１１３のＮｏ）、対処部１５４を呼び出して、処理をステップＳ１１４に進める。
【０１６３】
ステップＳ１１４において、対処部１５４は、予め定められた対処処理を実行する。対処部１５４は、対処処理を完了すると、本フローを終了する。
【０１６４】
このような第６実施形態に係る情報処理システム１０によれば、メインメモリ２４にロードされたモニタモジュールおよびセキュアＯＳモジュールが改ざんされてしまった場合であっても、確実に対処をすることができる。
【０１６５】
（第７実施形態）
図２６は、第７実施形態に係るデバイスドライバ１６０の機能構成を、ドライバロード部５４および情報処理システム１０のハードウェアとともに示す図である。第７実施形態に係るデバイスドライバ１６０は、図５に示した第１実施形態に係るデバイスドライバ５２が有する構成要素から、割込設定部７６を除き、同期部１６１をさらに有する構成となっている。なお、デバイスドライバ１６０は、割込設定部７６を有してもよい。
【０１６６】
第７実施形態に係るプロセッサ３０は、複数のＣＰＵコアを有するマルチコアプロセッサである。同期部１６１は、複数のＣＰＵコアの間で処理の同期を取る。具体的には、同期部１６１は、指定された処理位置まで到達したＣＰＵコアの実行を停止させる。そして、同期部１６１は、全てのＣＰＵコアが指定された処理位置に到達すると、全てのＣＰＵコアの処理を再開させる。
【０１６７】
また、第７実施形態に係るプロセッサ３０は、例えば、ＶＴと呼ばれる仮想化支援機構を有するプロセッサである。第７実施形態に係るプロセッサ３０は、ブート後において、ノンセキュアワールドで汎用オペレーティングシステム５０として動作する。
【０１６８】
図２７は、第７実施形態に係るデバイスドライバ１６０の処理フローを示す図である。なお、第７実施形態に係るデバイスドライバ１６０は、図１３に示した処理フローと略同一の処理を実行するので、図１３で説明した処理と同様の処理には同一のステップ番号を付けて相違点を中心に説明する。
【０１６９】
デバイスドライバ１６０は、ドライバロード部５４に呼び出されると、図２７に示すフローに従って処理を実行する。まず、ステップＳ２１において、何れかのＣＰＵコアにより実行されるモジュールロード部７２は、メインメモリ２４にメモリ領域を確保する。続いて、ステップＳ２２において、モジュールロード部７２は、確保した領域に、モニタモジュールおよびセキュアＯＳモジュールをロードする。モジュールロード部７２は、ロードが完了すると、移行制御部７８を呼び出す。ここで、移行制御部７８は、何れかのＣＰＵコアにより実行される。
【０１７０】
続いて、ステップＳ１２１において、何れかのＣＰＵコアにより実行される移行制御部７８は、同期部１６１を呼び出してコア間を同期させる。より具体的には、同期部１６１は、他の全てのＣＰＵコアに対して割り込みを発生させて、それぞれのＣＰＵコアに移行部７３を実行させる。そして、それぞれのＣＰＵコアは、互いに独立にステップＳ１２３からＳ１３１までの処理を実行する。なお、移行部７３が割込設定部７６を有する構成の場合には、図１３に示したステップＳ２７〜Ｓ３０の処理を実行する。
【０１７１】
まず、ステップＳ１２３において、移行制御部７８は、メモリマップ生成部７４を呼び出す。メモリマップ生成部７４は、プロセッサ３０がモニタモジュールおよびセキュアＯＳモジュールを実行するためのメモリマップを生成する。
【０１７２】
続いて、ステップＳ１２４において、移行制御部７８は、割込制御ユニット３８を呼び出す。割込制御ユニット３８は、全ての割込ポートへの入力を無効化する。
【０１７３】
続いて、ステップＳ１２５において、移行制御部７８は、ワールド制御ユニット３２を呼び出す。ワールド制御ユニット３２は、プロセッサ３０をモニタモードに変更する。
【０１７４】
続いて、ステップＳ１２６において、移行制御部７８は、第１メモリマップ設定部８１を呼び出す。第１メモリマップ設定部８１は、メモリ管理ユニット３６により管理されているノンセキュアワールドのメモリマップをコピーして、メモリ管理ユニット３６における、モニタの管理の下においてオペレーティングシステムをセキュアワールドで動作させるための保存領域に設定する。
【０１７５】
ブート後において、メモリ管理ユニット３６は、プロセッサ３０が汎用ＯＳモジュールを実行するためのメモリマップを管理している。従って、第１メモリマップ設定部８１は、ノンセキュアワールドのメモリマップをコピーすることにより、汎用ＯＳモジュールを実行するためのメモリマップをコピーすることができる。そして、第１メモリマップ設定部８１は、コピーしたメモリマップを、モニタの管理の下においてオペレーティングシステムをセキュアワールドで動作させるための保存領域に設定することにより、プロセッサ３０をｒｏｏｔモードで動作させることができる。
【０１７６】
続いて、ステップＳ１２７において、移行制御部７８は、第１レジスタ設定部９１を呼び出す。第１レジスタ設定部９１は、バンクレジスタ３４により記憶されているノンセキュアワールドのレジスタ値をコピーして、バンクレジスタ３４における、モニタの管理の下においてオペレーティングシステムをセキュアワールドで動作させるための保存領域に設定する。これにより、第１レジスタ設定部９１は、プロセッサ３０をｒｏｏｔモードで動作させることができる。
【０１７７】
続いて、ステップＳ１２８において、移行制御部７８は、第２レジスタ設定部９２を呼び出す。第２レジスタ設定部９２は、モニタモジュールおよびセキュアＯＳモジュールを実行するためのレジスタ値を、セキュアワールドのレジスタ値としてバンクレジスタ３４に設定する。
【０１７８】
続いて、ステップＳ１２９において、移行制御部７８は、第２メモリマップ設定部８２を呼び出す。第２メモリマップ設定部８２は、モニタモジュールおよびセキュアＯＳモジュールを実行するためのメモリマップを、セキュアワールドのメモリマップとしてメモリ管理ユニット３６に設定する。これにより、第２メモリマップ設定部８２は、セキュアワールドにおいて、プロセッサ３０をモニタおよびセキュアオペレーティングシステムとして動作させることができる。
【０１７９】
続いて、ステップＳ１３０において、移行制御部７８は、ワールド制御ユニット３２を呼び出す。ワールド制御ユニット３２は、プロセッサ３０をＯＳモードに変更する。これにより、移行制御部７８は、以後の処理において、ｒｏｏｔモードのノンセキュアワールドにおいて、プロセッサ３０をデバイスドライバ５２として動作させることができる。
【０１８０】
続いて、それぞれのＣＰＵコアは、ステップＳ１３０まで処理が達すると、ステップＳ１３１において処理を待機する。続いて、ステップＳ１３１において、同期部１６１は、全てのＣＰＵコアがステップＳ１３０まで処理を完了した場合、処理を何れかのＣＰＵコアにより実行される移行制御部７８に戻し、コア間を同期させる。
【０１８１】
続いて、ステップＳ３５において、移行制御部７８は、割込制御ユニット３８を呼び出す。割込制御ユニット３８は、無効化した割込ポートへの入力を復帰させる。
【０１８２】
そして、ステップＳ３６において、移行制御部７８は、処理をドライバロード部５４に返す。これにより、移行制御部７８は、処理を汎用オペレーティングシステムに戻すことができる。
【０１８３】
このような第７実施形態に係る情報処理システム１０によれば、プロセッサ３０が複数のＣＰＵコアを有する場合であっても、汎用オペレーティングシステムをプロセッサ３０上で動作させた後に、プロセッサ３０上でモニタを直接動作させるとともに、モニタ上においてセキュアオペレーティングシステムおよび汎用オペレーティングシステムを動作させることができる。
【０１８４】
以上のようなそれぞれの実施形態に係る情報処理システム１０で実行されるプログラムは、モジュール格納モジュール、モジュールロードモジュールおよび移行モジュールを含むモジュール構成となっている。このプログラムは、プロセッサ３０によりメインメモリ２４上に展開して実行されることにより、情報処理システム１０をモジュール格納モジュール、モジュールロードモジュールおよび移行モジュールを有するデバイスドライバ５２、１１０、１２０、１３０、１４０、１６０として機能させる。
【０１８５】
また、情報処理システム１０で実行されるプログラムは、コンピュータにインストール可能な形式または実行可能な形式のファイルで、ＣＤ−ＲＯＭ、フレキシブルディスク、ＣＤ−Ｒ、ＤＶＤ（Digital  Versatile  Disk）等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【０１８６】
また、情報処理システム１０で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、情報処理システム１０で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。また、情報処理システム１０で実行されるプログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【０１８７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１８８】
１０  情報処理システム
２０  情報処理装置
２２  ストレージ
２４  メインメモリ
２６  ブートＲＯＭ
３０  プロセッサ
３２  ワールド制御ユニット
３４  バンクレジスタ
３６  メモリ管理ユニット
３８  割込制御ユニット
５０  汎用オペレーティングシステム
５２  デバイスドライバ
５４  ドライバロード部
５６  モニタ
５８  セキュアオペレーティングシステム
７１  モジュール格納部
７２  モジュールロード部
７３  移行部
７４  メモリマップ生成部
７５  メモリマップ設定部
７６  割込設定部
７７  レジスタ設定部
７８  移行制御部
８１  第１メモリマップ設定部
８２  第２メモリマップ設定部
８６  モニタ割込設定部
８７  第１割込設定部
８８  第２割込設定部
８９  割込ポート設定部
９１  第１レジスタ設定部
９２  第２レジスタ設定部
１１０  デバイスドライバ
１１１  メモリ保護ユニット
１１２  保護設定部
１２０  デバイスドライバ
１２１  ロード判定部
１３０  デバイスドライバ
１３１  アンロード判定部
１３２  モジュールアンロード部
１４０  デバイスドライバ
１４１  検証部
１４２  復号部
１５１  通知ユニット
１５２  確認部
１５３  ロード検証部
１５４  対処部
１６０  デバイスドライバ
１６１  同期部
【図１】
0006462540.tif 000002
【図２】
0006462540.tif 000003
【図３】
0006462540.tif 000004
【図４】
0006462540.tif 000005
【図５】
0006462540.tif 000006
【図６】
0006462540.tif 000007
【図７】
0006462540.tif 000008
【図８】
0006462540.tif 000009
【図９】
0006462540.tif 000010
【図１０】
0006462540.tif 000011
【図１１】
0006462540.tif 000012
【図１２】
0006462540.tif 000013
【図１３】
0006462540.tif 000014
【図１４】
0006462540.tif 000015
【図１５】
0006462540.tif 000016
【図１６】
0006462540.tif 000017
【図１７】
0006462540.tif 000018
【図１８】
0006462540.tif 000019
【図１９】
0006462540.tif 000020
【図２０】
0006462540.tif 000021
【図２１】
0006462540.tif 000022
【図２２】
0006462540.tif 000023
【図２３】
0006462540.tif 000024
【図２４】
0006462540.tif 000025
【図２５】
0006462540.tif 000026
【図２６】
0006462540.tif 000027
【図２７】
0006462540.tif 000028