(57)【要約】【課題】レガシーＯＳ環境から統合拡張可能ファームウェア・インターフェース（ＵＥＦＩ）ブート前環境への復元を行うための方法およびシステムを提供すること。【解決手段】方法は、ＵＥＦＩブート前環境で、残される必要があるＵＥＦＩブート前環境の、ＣＰＵの実行コンテキストを含むコンテキストを記憶するステップと、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗することに応じてＣＰＵの実行コンテキストの第１の部分を復元するステップと、ＵＥＦＩブート前環境に関連するＣＰＵにシステム管理モードを開始させ、システム管理モードでＣＰＵの実行コンテキストの第２の部分を復元するステップと、ＣＰＵのシステム管理モードから抜け、それによって、ＵＥＦＩブート前環境に戻るステップとを含む。方法およびシステムは、レガシーＯＳをブートする試みが失敗した後にＵＥＦＩブート前環境への復元を行い、それによって、レガシーＯＳのブートの失敗の診断およびその後のＵＥＦＩ  ＯＳのブートの試みをサポートすることができる。【選択図】図３
2015518615.tif 000002
【特許請求の範囲】
【請求項１】
レガシーＯＳ環境から統合拡張可能ファームウェア・インターフェース（ＵＥＦＩ）ブート前環境への復元を行うための方法であって、
前記ＵＥＦＩブート前環境で、残される必要がある前記ＵＥＦＩブート前環境の、ＣＰＵの実行コンテキストを含むコンテキストを記憶するステップと、
前記ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗することに応じて前記ＣＰＵの実行コンテキストの第１の部分を復元するステップと、
前記ＵＥＦＩブート前環境に関連するＣＰＵにシステム管理モードを開始させ、前記システム管理モードで前記ＣＰＵの実行コンテキストの第２の部分を復元するステップと、
ＣＰＵのシステム管理モードから抜け、それによって、前記ＵＥＦＩブート前環境に戻るステップとを含む、方法。
【請求項２】
残される必要がある前記ＵＥＦＩブート前環境の前記コンテキストが、ＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスと前記メモリ領域の内容とをさらに含む、請求項１に記載の方法。
【請求項３】
残される必要がある前記ＵＥＦＩブート前環境のコンテキストを記憶する前記ステップにおいて、ＵＥＦＩの予約されたメモリが、残される必要がある前記ＵＥＦＩブート前環境の前記コンテキストを記憶するために利用される、請求項２に記載の方法。
【請求項４】
以下の手法、すなわち、
Ｉ）レガシーＯＳのローダからソフトウェア割り込みを受け取ることに応じて、ＵＥＦＩブート前環境が前記レガシーＯＳをロードすることに失敗すると判定するステップと、
ＩＩ）ウォッチドッグ・クロックによって事前に設定された指定された時間以内にレガシーＯＳのブートが成功であるという通知をＵＥＦＩブート前環境が受信しなかった場合、ハードウェア割り込みをトリガする前記ウォッチドッグ・クロックをＵＥＦＩファームウェアに追加し、前記ハードウェア割り込みのトリガによって、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗すると判定するステップと、
ＩＩＩ）マシン検査例外メカニズムを利用することによってＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗すると判定することとのうちの１つを使用することによって、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗すると判定される、請求項２または３に記載の方法。
【請求項５】
前記ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗することに応じて、残される必要がある前記ＵＥＦＩブート前環境の前記コンテキスト内のＵＥＦＩのコードおよびデータが存在する前記メモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在する前記メモリ領域のアドレスに復元するステップをさらに含む、請求項４に記載の方法。
【請求項６】
残される必要がある前記ＵＥＦＩブート前環境の前記コンテキスト内のＵＥＦＩのコードおよびデータが存在する前記メモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在する前記メモリ領域のアドレスに復元した後で、ＰＣＩデバイスのメモリ・マップド入出力を終了させるステップをさらに含む、請求項５に記載の方法。
【請求項７】
前記ＣＰＵがシステム管理モードを開始することに応じて、残される必要がある前記ＵＥＦＩブート前環境の前記コンテキスト内のＵＥＦＩのコードおよびデータが存在する前記メモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在する前記メモリ領域のアドレスに復元するステップをさらに含む、請求項４に記載の方法。
【請求項８】
残される必要がある前記ＵＥＦＩブート前環境の前記コンテキスト内のＵＥＦＩのコードおよびデータが存在する前記メモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在する前記メモリ領域のアドレスに復元した後で、ＰＣＩデバイスのメモリ・マップド入出力を終了させるステップをさらに含む、請求項７に記載の方法。
【請求項９】
命令ポインタ・レジスタがレガシーＯＳのブートを行う呼び出し命令の次の命令を指すように、ＣＰＵがシステム管理モードを開始することに応じて、保存された前記命令ポインタ・レジスタを修正するステップをさらに含む、請求項５または７に記載の方法。
【請求項１０】
前記ＵＥＦＩブート前環境に戻ることに応じて、ＵＥＦＩによって制御されるコントローラのドライバが再実行されるようにするステップをさらに含む、請求項５または７に記載の方法。
【請求項１１】
レガシーＯＳ環境から統合拡張可能ファームウェア・インターフェース（ＵＥＦＩ）ブート前環境への復元を行うためのシステムであって、
前記ＵＥＦＩブート前環境で、残される必要がある前記ＵＥＦＩブート前環境の、ＣＰＵの実行コンテキストを含むコンテキストを記憶するように構成された記憶手段と、
前記ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗することに応じて前記ＣＰＵの実行コンテキストの第１の部分を復元するように構成された第１の復元手段と、
前記ＵＥＦＩブート前環境に関連するＣＰＵにシステム管理モードを開始させ、前記システム管理モードで前記ＣＰＵの実行コンテキストの第２の部分を復元するように構成された第２の復元手段と、
ＣＰＵのシステム管理モードから抜け、それによって、前記ＵＥＦＩブート前環境に戻るように構成された退出手段とを含む、システム。
【請求項１２】
残される必要がある前記ＵＥＦＩブート前環境の前記コンテキストが、ＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスと前記メモリ領域の内容とをさらに含む、請求項１１に記載のシステム。
【請求項１３】
前記記憶手段において、残される必要がある前記ＵＥＦＩブート前環境の前記コンテキストを記憶するためにＵＥＦＩの予約されたメモリが利用される、請求項１２に記載のシステム。
【請求項１４】
前記第１の復元手段が、
レガシーＯＳのローダからソフトウェア割り込みを受け取ることに応じて、ＵＥＦＩブート前環境が前記レガシーＯＳをロードすることに失敗すると判定するように構成された第１の判定手段と、
ウォッチドッグ・クロックによって事前に設定された指定された時間以内にレガシーＯＳのブートが成功であるという通知をＵＥＦＩブート前環境が受信しなかった場合、ハードウェア割り込みをトリガする前記ウォッチドッグ・クロックをＵＥＦＩファームウェアに追加し、前記ハードウェア割り込みのトリガによって、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗すると判定するように構成された第２の判定手段と、
マシン検査例外メカニズムを利用することによってＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗すると判定するように構成された第３の判定手段とのうちの１つを使用することによってＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗すると判定する、請求項１２または１３に記載のシステム。
【請求項１５】
前記第１の復元手段が、前記ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗することに応じて、残される必要がある前記ＵＥＦＩブート前環境の前記コンテキスト内のＵＥＦＩのコードおよびデータが存在する前記メモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在する前記メモリ領域のアドレスに復元するようにさらに構成されている、請求項１４に記載のシステム。
【請求項１６】
前記第１の復元手段が、残される必要がある前記ＵＥＦＩブート前環境の前記コンテキスト内のＵＥＦＩのコードおよびデータが存在する前記メモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在する前記メモリ領域のアドレスに復元した後で、ＰＣＩデバイスのメモリ・マップド入出力を終了させるようにさらに構成されている、請求項１５に記載のシステム。
【請求項１７】
前記第２の復元手段が、前記ＣＰＵがシステム管理モードを開始することに応じて、残される必要がある前記ＵＥＦＩブート前環境の前記コンテキスト内のＵＥＦＩのコードおよびデータが存在する前記メモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在する前記メモリ領域のアドレスに復元するようにさらに構成されている、請求項１４に記載のシステム。
【請求項１８】
前記第２の復元手段が、残される必要がある前記ＵＥＦＩブート前環境の前記コンテキスト内のＵＥＦＩのコードおよびデータが存在する前記メモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在する前記メモリ領域のアドレスに復元した後で、ＰＣＩデバイスのメモリ・マップド入出力を終了させるようにさらに構成されている、請求項１７に記載のシステム。
【請求項１９】
前記第２の復元手段が、命令ポインタ・レジスタがレガシーＯＳのブートを行う呼び出し命令の次の命令を指すように、ＣＰＵがシステム管理モードを開始することに応じて、保存された前記命令ポインタ・レジスタを修正するようにさらに構成されている、請求項１５または１７に記載のシステム。
【請求項２０】
前記退出手段が、前記ＵＥＦＩブート前環境に戻ることに応じて、ＵＥＦＩによって制御されるコントローラのドライバが再実行されるようにするようにさらに構成されている、請求項１５または１７に記載のシステム。
【請求項２１】
コンピュータで実行されるときに、請求項１ないし１０のいずれかに記載の方法のステップを実行するように適合されたプログラム・コードを含む、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ・システムのファームウェアに関し、より詳細には、レガシーＯＳ環境からＵＥＦＩブート前環境（pre-boot environment）への復元を行うための方法およびシステムに関する。
【背景技術】
【０００２】
レガシーＢＩＯＳ（基本入出力システム）は、一種のファームウェアであり、基本入出力システムとして、起動するときにハードウェアのブートおよび検出などの作業を担い、ＯＳがハードウェアを制御している間は中間的役割を果たす。Ｗｉｎｄｏｗｓ（Ｒ）  ＮＴ、Ｌｉｎｕｘ（Ｒ）から、これらのＯＳは、以前であればＢＩＯＳによって実行される必要があるハードウェア制御プログラムをＯＳに組み込んでおり、プログラムはＯＳで実行され、もはやＢＩＯＳの機能を呼び出す必要は全くない。ハードウェアの迅速な開発が原因で、レガシーＢＩＯＳは開発の重荷になった。
【０００３】
最近、最新の拡張可能ファームウェア・インターフェース（ＥＦＩ：ExtensibleFirmware Interface）が開発された。統合拡張可能ファームウェア・インターフェース（ＵＥＦＩ：UnifiedExtensible Firmware Interface）が、ＥＦＩ１．１０に基づいて開発され、ＵＥＦＩは、全く新しい種類のインターフェースを記載する規格である。そのようなインターフェースは、ブート前動作環境から一種のＯＳへの自動的なロードのためにＯＳによって使用され、それによって、起動手順を簡素化し、時間を節約する。
【０００４】
ＵＥＦＩは、Ｃ言語式のパラメータ・スタック渡しの手法および動的リンクの方法を使用してシステムを構築し、ＢＩＯＳよりも容易に実装され、耐障害性および誤り訂正の点でより優れており、システムの研究開発の時間を短縮する可能性がある。さらに、ＵＥＦＩは、３２ビット・モードまたは６４ビット・モードで動作し、より高いアドレス指定能力が、ＢＩＯＳと比べて優れた性能をもたらす可能性がある。さらに、ＵＥＦＩアーキテクチャのドライバは、ＵＥＦＩドライバに関する１組の仮想マシン命令であるＥＦＩバイト・コードで記述され、命令は、ＵＥＦＩによって駆動される動作環境で実行されるために解釈され、ＵＥＦＩの十分な下位互換性を保証することができる。加えて、グラフィック・ドライバ機能がＵＥＦＩに組み込まれており、高解像度のカラー・グラフィック環境を提供することができる。環境に入った後、ユーザは、マウスでクリックすることによって構成を調整することができ、これは、Ｗｉｎｄｏｗｓ（Ｒ）システムのアプリケーション・ソフトウェアと同じぐらい簡単である。さらに、ＵＥＦＩは、モジュール式の設計を採用しており、論理的に２つの部分、すなわち、ハードウェアの制御およびＯＳのソフトウェアの管理に分けられ、ハードウェアの制御は、すべてのＵＥＦＩのバージョンに共通であり、ＯＳのソフトウェアの管理は、実際は、メインボードの製造業者が様々な豊富な機能を実現することができるプログラム可能なオープン・インターフェースである。例えば、当業者によく知られている様々なバックアップ機能および診断機能が、ＵＥＦＩを通じて実現され得る。したがって、多くのコンピュータ製造業者が、現在、ＵＥＦＩファームウェアを使用し始めており、ＵＥＦＩファームウェアをサポートするマシンの販売が支配的になることが期待されている。
【０００５】
ＵＥＦＩファームウェアの観点から見て、ＯＳは、２つの種類に分けられる可能性があり、つまり、第１の種類のＯＳは、Ｗｉｎｄｏｗｓ（Ｒ）  Ｓｅｒｖｅｒ  ２００８  Ｒ２などのＵＥＦＩファームウェアをサポートし、利用することができるＯＳであり、第２の種類のＯＳは、ＵＥＦＩファームウェアをサポートすることができないＯＳ、すなわち、レガシーＯＳである。ＵＥＦＩは、ＵＥＦＩファームウェアがＷｉｎｄｏｗｓ（Ｒ）  ＸＰ  ３２ビット版、Ｗｉｎｄｏｗｓ（Ｒ）  Ｓｅｒｖｅｒ  ２００３  ｆｏｒ  ｘ８６などのレガシーＯＳをロードし、ブートすることを可能にする互換性サポート・モジュールを提供することができる。
【０００６】
ＵＥＦＩファームウェアの実行環境は、ＵＥＦＩブート前環境であり、この環境は、ＵＥＦＩファームウェアのコードを実行し、ＯＳのためのブート環境のシステム・ブート段階を準備する。ＵＥＦＩファームウェアのシステム・ロード・モジュールは、ＵＥＦＩをサポートし、利用するＯＳをロードするとき、何らかの問題が原因でＯＳが正常にロードされ得ない場合、ＵＥＦＩブート前環境に直接戻ることができる。しかし、ＵＥＦＩファームウェアのシステム・ロード・モジュールがレガシーＯＳをロードし、ブートするときは、レガシーＯＳをロードし、ブートすることを可能にするために、互換性サポート・モジュールがシステム・ロード・モジュールで必要とされるか、または互換性サポート・モジュールがシステム・ロード・モジュールなしに直接利用される。しかし、従来技術においては、ＵＥＦＩがレガシーＯＳのブートを試みるために互換性サポート・モジュールを開始すると、たとえレガシーＯＳのブートの試みが失敗する場合であってもＵＥＦＩブート前環境に戻る方法はない。したがって、エンジニアは、問題の診断を行うことができない。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
レガシーＯＳ環境から統合拡張可能ファームウェア・インターフェース（ＵＥＦＩ）ブート前環境への復元を行うための方法およびシステムを提供する。
【課題を解決するための手段】
【０００８】
本発明の一態様によれば、レガシーＯＳ環境から統合拡張可能ファームウェア・インターフェース（ＵＥＦＩ）ブート前環境への復元を行うための方法が提供される。方法は、ＵＥＦＩブート前環境で、残される必要があるＵＥＦＩブート前環境のコンテキストを記憶するステップであって、残される必要があるＵＥＦＩブート前環境のコンテキストが、ＣＰＵの実行コンテキストを含む、記憶するステップと、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗することに応じてＣＰＵの実行コンテキストの第１の部分を復元するステップと、ＵＥＦＩブート前環境に関連するＣＰＵにシステム管理モードを開始させ、システム管理モードでＣＰＵの実行コンテキストの第２の部分を復元するステップと、ＣＰＵのシステム管理モードから抜け、それによって、ＵＥＦＩブート前環境に戻るステップとを含む。
【０００９】
本発明の別の態様によれば、レガシーＯＳ環境から統合拡張可能ファームウェア・インターフェース（ＵＥＦＩ）ブート前環境への復元を行うためのシステムが提供される。システムは、ＵＥＦＩブート前環境で、残される必要があるＵＥＦＩブート前環境の、ＣＰＵの実行コンテキストを含むコンテキストを記憶するように構成された記憶手段と、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗することに応じてＣＰＵの実行コンテキストの第１の部分を復元するように構成された第１の復元手段と、ＵＥＦＩブート前環境に関連するＣＰＵにシステム管理モードを開始させ、システム管理モードでＣＰＵの実行コンテキストの第２の部分を復元するように構成された第２の復元手段と、ＣＰＵのシステム管理モードから抜け、それによって、ＵＥＦＩブート前環境に戻るように構成された退出手段とを含む。
【００１０】
添付の図面の本開示の一部の実施形態のより詳細な記載によって、本開示の上述のおよびその他の目的、特徴、および利点がより明らかになり、概して、同じ参照は、本開示の実施形態の同じ構成要素を指す。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態を実装するために適用可能な例示的なコンピュータ・システム１００を示す図である。
【図２】本発明によるＵＥＦＩブート前環境のブロック図である。
【図３】本発明の一実施形態によるレガシーＯＳ環境からＵＥＦＩブート前環境への復元を行うための方法のステップを示す図である。
【図４】ＵＥＦＩファームウェアによって定義されたメモリ領域の種類を示す図である。
【図５】レガシーＯＳ環境からＵＥＦＩブート前環境への復元を行うためのシステムの構造的なブロック図である。
【発明を実施するための形態】
【００１２】
一部の好ましい実施形態が、本開示の好ましい実施形態が示された添付の図面を参照してより詳細に説明される。しかし、本開示は、様々な方法で実装される可能性がありしたがって、本明細書において開示された実施形態に限定されると見なされるべきでない。それどころか、それらの実施形態は、本開示を十分かつ完全に理解することと、当業者に本開示の範囲を完全に伝えることとのために提供される。
【００１３】
図１は、本発明の実施形態を実装するために適用可能な例示的なコンピュータ・システム１００を示す。図１に示されるように、コンピュータ・システム１００は、ＣＰＵ（中央処理ユニット）１０１、ＲＡＭ（ランダム・アクセス・メモリ）１０２、ＲＯＭ（読み出し専用メモリ）１０３、システム・バス１０４、ハード・ドライブ・コントローラ１０５、キーボード・コントローラ１０６、シリアル・インターフェース・コントローラ１０７、パラレル・インターフェース・コントローラ１０８、ディスプレイ・コントローラ１０９、ハード・ドライブ１１０、キーボード１１１、シリアル周辺機器１１２、パラレル周辺機器１１３、およびディスプレイ１１４を含み得る。上述のデバイスの中で、ＣＰＵ１０１、ＲＡＭ１０２、ＲＯＭ１０３、ハード・ドライブ・コントローラ１０５、キーボード・コントローラ１０６、シリアル・インターフェース・コントローラ１０７、パラレル・インターフェース・コントローラ１０８、およびディスプレイ・コントローラ１０９は、システム・バス１０４に結合される。ハード・ドライブ１１０は、ハード・ドライブ・コントローラ１０５に結合される。キーボード１１１は、キーボード・コントローラ１０６に結合される。シリアル周辺機器１１２は、シリアル・インターフェース・コントローラ１０７に結合される。パラレル周辺機器１１３は、パラレル・インターフェース・コントローラ１０８に結合される。そして、ディスプレイ１１４は、ディスプレイ・コントローラ１０９に結合される。図１に示される構造は、本発明に対するいかなる限定のためでもなく例示のみを目的としていることを理解されたい。場合によっては、いくつかのデバイスが、特定の状況に基づいてコンピュータ・システム１００に追加されるか、またはコンピュータ・システム１００から削除される可能性がある。
【００１４】
当業者に理解されるであろうように、本発明の態様は、システム、方法、またはコンピュータ・プログラム製品として具現化され得る。したがって、本発明の態様は、すべてハードウェアの実施形態、すべてソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、またはソフトウェアの態様とハードウェアの態様とを組み合わせる実施形態の形態をとる可能性があり、これらのすべてが本明細書において概して「回路」、「モジュール」、もしくは「システム」と呼ばれることがある。さらに、本発明の態様は、コンピュータ可読プログラム・コードを具現化１つまたは複数のコンピュータ可読媒体で具現化されたコンピュータ・プログラム製品の形態をとる可能性がある。
【００１５】
１つまたは複数のコンピュータ可読媒体の任意の組み合わせが、利用される可能性がある。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読ストレージ媒体である可能性がある。コンピュータ可読ストレージ媒体は、例えば、電子、磁気、光、電磁、赤外線、もしくは半導体のシステム、装置、またはデバイス、あるいはこれらの任意の好適な組み合わせである可能性があるが、これらに限定されない。コンピュータ可読ストレージ媒体のより詳細な例（非網羅的なリスト）は、以下、すなわち、１つもしくは複数の配線を有する電気的な接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭもしくはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、光ストレージ・デバイス、磁気ストレージ・デバイス、またはこれらの任意の好適な組み合わせを含むであろう。本明細書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置、もしくはデバイスによって、または命令実行システム、装置、もしくはデバイスに関連して使用するためのプログラムを含むあるいは記憶することができる任意の有形の媒体である可能性がある。
【００１６】
コンピュータ可読信号媒体は、例えば、ベースバンドで、または搬送波の一部としてコンピュータ可読プログラム・コードを具現化する伝播されるデータ信号を含み得る。そのような伝播される信号は、電磁的、光学的、またはこれらの任意の好適な組み合わせを含むがこれらに限定されない様々な形態のうちの任意の形態をとり得る。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、命令実行システム、装置、もしくはデバイスによって、または命令実行システム、装置、もしくはデバイスに関連して使用するためのプログラムを伝達、伝播、あるいは搬送することができる任意のコンピュータ可読媒体である可能性がある。
【００１７】
コンピュータ可読媒体上に具現化されるプログラム・コードは、無線、有線、光ファイバ・ケーブル、ＲＦなど、またはこれらの任意の好適な組み合わせを含むがこれらに限定されない任意の適切な媒体を用いて送信される可能性がある。
【００１８】
本発明の態様の操作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語と、「Ｃ」プログラミング言語または同様のプログラミング言語などの通常の手続き型プログラミング言語とを含む１つまたは複数のプログラミング言語の任意の組み合わせで記述され得る。プログラム・コードは、すべてユーザのコンピュータ上で、スタンドアロンのソフトウェア・パッケージとしてユーザのコンピュータ上で部分的に、ユーザのコンピュータ上で部分的にかつ遠隔のコンピュータ上で部分的に、またはすべて遠隔のコンピュータもしくはサーバ上で実行され得る。最後の場合では、遠隔のコンピュータが、ローカル・エリア・ネットワーク（ＬＡＮ）もしくは広域ネットワーク（ＷＡＮ）を含む任意の種類のネットワークを介してユーザのコンピュータに接続され得るか、または外部コンピュータへの接続が（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）行われ得る。
【００１９】
本発明の態様が、本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照して以下で説明される。流れ図またはブロック図あるいはその両方の各ブロック、および流れ図またはブロック図あるいはその両方のブロックの組み合わせは、コンピュータ・プログラム命令によって実装され得ることが理解されるであろう。これらのコンピュータ・プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサによって実行される命令が、流れ図もしくはブロック図またはその両方の１つのブロックあるいは複数のブロックで規定された機能／動作を実施するための手段をもたらすように、多目的コンピュータ、専用コンピュータ、またはその他のプログラム可能なデータ処理装置のプロセッサに与えられてマシンを作り出すものであってよい。
【００２０】
これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に記憶された命令が、流れ図もしくはブロック図またはその両方の１つのブロックあるいは複数のブロックで規定された機能／動作を実施する命令の手段を含む製品をもたらすようにコンピュータ可読媒体に記憶され、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスを特定の方法で機能させるように指示するものであってよい。
【００２１】
コンピュータ・プログラム命令は、コンピュータまたはその他のプログラム可能な装置で実行される命令が流れ図もしくはブロック図またはその両方の１つのブロックあるいは複数のブロックで規定された機能／動作を実施するためのプロセスを提供するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスにロードされ、一連の操作のステップをそのコンピュータ、その他のプログラム可能な装置、またはその他のデバイス上で実行させてコンピュータで実施されるプロセスを生成するものであってよい。
【００２２】
ここで図２を参照すると、本発明によるＵＥＦＩブート前環境のブロック図、すなわち、ＵＥＦＩファームウェアのブロック図が示されている。説明において、ＵＥＦＩブート前環境およびＵＥＦＩファームウェアは、同義語であり、区別されない。ＵＥＦＩブート前環境は、主に、ＵＥＦＩ実行環境モジュールを含み、さらに、このモジュールは、セキュリティ・モジュール、初期化モジュール、ドライバ実行環境モジュール、ブート・ドライバ選択モジュール、およびシステム・ロード・モジュールまたは互換性サポート・モジュールを含む。ＵＥＦＩのシステム・ロード・モジュールが、ＵＥＦＩをサポートし、利用するＯＳをロードするときは、そのようなＯＳがＵＥＦＩの仕様によって定義されたいくつかの標準的なインターフェースをサポートするので、システム・ロード・モジュールは、何らかの問題が原因でＯＳが正常にロードされ得ない場合、ＵＥＦＩブート前環境に直接戻ることができる。しかし、ＵＥＦＩの互換性サポート・モジュールがレガシーＯＳをロードし、ブートするときは、ＵＥＦＩがレガシーＯＳのブートを試みるために互換性サポート・モジュールを開始すると、たとえレガシーＯＳのブートの試みが失敗する場合であってもＵＥＦＩブート前環境に戻る方法はない。したがって、エンジニアは、問題の診断を行うことができない。
【００２３】
ＵＥＦＩファームウェアとＯＳとの両方は、ＣＰＵのハードウェアで実行されるソフトウェアである。ＵＥＦＩファームウェアは、ＯＳの前に実行されるコードのセグメントであり、ＯＳが起動する前のハードウェアの初期化と、ＯＳが利用可能なサービス・インターフェースの準備とを担う。ＣＰＵシステムは、リアル・モード、プロテクト・モード、仮想８０８６モード、およびシステム管理モードを含む様々なモードを有し、様々なモードの間で切り替えられる可能性がある。概して、ＣＰＵは、電源を投入された後、リアル・モードで動作し、レジスタを使用してメモリ内の命令の位置をＣＰＵに知らせ、次のプログラムを実行するときに必要とされる主な内容を示すために、ＤＳ、ＥＳ、ＦＳ、ＧＳ、ＳＳ、およびその他のレジスタを使用してメモリ内の異なる目的を持ったデータ・セグメントの位置を示す。プロテクト・モードは、リアル・モードと同じであり、プロテクト・モードでプログラムを実行することの核心は、やはり、「ＣＰＵが（１つまたは複数の）命令を実行して関連するデータを操作する」ことである。したがって、リアル・モードの様々なコード・セグメント、データ・セグメント、スタック・セグメント、割り込みサービス・プログラムがやはり存在し、それらの機能および効果は変更されないままである。ＵＥＦＩファームウェアは、ＣＰＵが電源を投入された後、リアル・モードで動作し、ＵＥＦＩは、ＣＰＵのプロテクト・モードで実行されるコードおよびＣＰＵのシステム管理モードで実行されるコードも含む。ＵＥＦＩが互換性サポート・モジュールを開始してレガシーＯＳのブートを試みるとき、ＵＥＦＩのコードは、ＣＰＵのプロテクト・モードで実行されている。ブートの試みが失敗し、ＵＥＦＩブート前環境に戻る必要がある場合、必要とされることは、最初にＣＰＵのプロテクト・モードに戻ることである。システム管理モードは、電源管理、システム・ハードウェア制御などのシステム・レベルのいくつかの機能を提供することができる特別なプロセッサ・モードである。システム管理モードの主な恩恵は、システム管理モードが、通常のＣＰＵ動作環境と完全に異なり、独立しているプロセッサ環境を提供することができることである。そのような環境は、ＯＳまたはアプリケーション・ソフトウェアによって認識されにくい。ＣＰＵは、システム管理モードを開始するとき、ＣＰＵのレジスタの値などのＣＰＵの実行コンテキスト情報の一部をシステム管理モードのメモリ（ＳＭＭ  ＲＡＭ）のチャンク、すなわち、いわゆる、ＣＰＵの状態保存領域（Save State Region）に保存する。システム管理モードから抜けるとき、プロセッサは、プロセッサの状態保存領域のＣＰＵの実行コンテキストの一部を利用して、システム管理モードを開始する前のプロセッサの状態を復元する。ＵＥＦＩファームウェアは、システム管理モードを抜けるときにシステム管理モードを開始する前のプロセッサの状態を復元するような技術的な特徴を利用して、ＵＥＦＩ実行前環境に戻ることができる。
【００２４】
ＵＥＦＩをサポートするＯＳに関しては、システム・ロード・モジュールは、ＵＥＦＩによって直接呼び出されるので、失敗する場合、ＵＥＦＩ実行前環境に直接戻る。ＯＳは、正常にロードされ終わるまでＵＥＦＩブート前環境を壊さない。しかし、ＯＳ正常に起動した後は、ＵＥＦＩブート前環境に直接戻る方法はない。
【００２５】
互換性サポート・モジュールは、レガシーＯＳをブートすることができ、これは、互換性サポート・モジュールがこれまでのＢＩＯＳに元々存在していたレガシーＯＳまたはレガシー・オプションＲＯＭ（Ｏｐｔｉｏｎ  ＲＯＭ）によって必要とされるいくつかのインターフェースの実装をＵＥＦＩファームウェアで提供するからであり、オプションＲＯＭは、様々なボードおよびカードを制御するファームウェアの一種であり、ボードおよびカードに置かれるか、またはＵＥＦＩファームウェアもしくはＢＩＯＳファームウェアに含まれる可能性がある。しかし、ＵＥＦＩファームウェアが互換性サポート・モジュールを開始してレガシーＯＳのブートを実行すると、ＵＥＦＩブート前環境のコンテキストは壊される。したがって、たとえレガシーＯＳをブートする試みが失敗したとしても、ＵＥＦＩブート前環境のコンテキストは壊されてしまっているので、ＵＥＦＩブート前環境に戻る方法はない。
【００２６】
したがって、ＵＥＦＩブート前環境にもとるために、１つの重要なことは、ＵＥＦＩブート前環境の完全性を保証すること、つまり、ＵＥＦＩブート前環境のコンテキストの必要な情報を保存することである。もう１つは、ＣＰＵが、システム管理モードから抜けるときにシステム管理モードを開始する前のプロセッサの状態を復元するという上述の特徴を利用することである。
【００２７】
したがって、本発明は、レガシーＯＳ環境からＵＥＦＩブート前環境への復元を行うための方法およびシステムを提供する。マルチＯＳをサポートする環境内で、そのような方法およびシステムは、レガシーＯＳのブートの失敗の診断およびその後のＵＥＦＩ  ＯＳのブートの試みをサポートするために使用され得る。
【００２８】
図３は、発明の一実施形態によるレガシーＯＳ環境からＵＥＦＩブート前環境への復元を行うための方法のステップを示す。図３によれば、方法は、
【００２９】
ステップＳ３０１において、ＵＥＦＩブート前環境で、残される必要があるＵＥＦＩブート前環境の、ＣＰＵの実行コンテキストを含むコンテキストを記憶することと、
【００３０】
ステップＳ３０２において、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗することに応じてＣＰＵの実行コンテキストの第１の部分を復元することと、
【００３１】
ステップＳ３０３において、ＵＥＦＩブート前環境に関連するＣＰＵにシステム管理モードを開始させ、システム管理モードでＣＰＵの実行コンテキストの第２の部分を復元することと、
【００３２】
ステップＳ３０４において、ＣＰＵのシステム管理モードから抜け、それによって、ＵＥＦＩブート前環境に戻ることとを含む。
【００３３】
残される必要があるＵＥＦＩブート前環境のコンテキストは、ＣＰＵの実行コンテキストを含む。特に、ＣＰＵの実行コンテキストは、２つの部分に分けられる可能性があり、第１の部分は、グローバル記述子テーブル（ＧＤＴ：Global Descriptor Table）、割り込み記述子テーブル（ＩＤＴ：InterruptDescriptor Table）、制御レジスタ、およびセグメント・レジスタを含み、第２の部分は、フラグ・レジスタ、命令ポインタ・レジスタ、汎用レジスタ、システム管理ベース・レジスタを含む。ＣＰＵの実行コンテキストの第２の部分は、システム管理モードで復元されなければならないが、ＣＰＵは、ＣＰＵの実行コンテキストの第１の部分が復元された後にのみシステム管理モードを開始することができるので、そのＣＰＵの実行コンテキストを利用して、システム管理モードを抜けるときにシステム管理モードを開始する前のプロセッサの状態を復元し、それによって、ＵＥＦＩブート前環境を復元することができる。
【００３４】
ＣＰＵのレジスタは、ソフトウェアがＣＰＵのハードウェアと通信するソフトウェア−ハードウェア・インターフェースであり、保存され、復元される必要があるＣＰＵ（６４ビットＣＰＵを例にとる）のレジスタの値は、フラグ・レジスタ（ＲＦＬＡＧＳなど）、命令ポインタ・レジスタ（ＲＩＰなど）、汎用レジスタ（ＲＤＩ、ＲＳＩ、ＲＢＰ、ＲＳＰ、ＲＢＸ、ＲＤＸ、ＲＣＸ、ＲＡＸ、Ｒ８〜Ｒ１５など）、システム管理ベース・レジスタ（ＳＭＢＡＳＥ）、制御レジスタ（ＣＲ０、ＣＲ３など）、セグメント・レジスタ（ＧＳ、ＦＳ、ＤＳ、ＳＳ、ＣＳ、ＥＳなど）を含む。ＣＰＵの状態保存領域を修正することによって復元され得るレジスタは、フラグ・レジスタ、命令ポインタ・レジスタ、汎用レジスタ、システム管理ベース・レジスタを含む。セグメント・レジスタは、ＭＯＶまたはＰＯＰ命令によって復元される可能性があり、制御レジスタは、ＭＯＶ命令によって復元される可能性がある。グローバル記述子テーブルは、メモリ領域に存在し、グローバルなデータ構造（セグメント記述子など）を記憶する。ＧＤＴＲレジスタは、グローバル記述子テーブルが記憶されるメモリ領域を指し、グローバル記述子テーブルのアドレスは、ＬＧＤＴ／ＳＧＤＴ命令によってロードまたは保存される可能性があり、割り込み記述子テーブルは、メモリ領域に存在し、割り込み記述子を記憶する。ＩＤＴＲレジスタは、グローバル記述子テーブルが記憶されるメモリ領域を指し、割り込み記述子テーブルのアドレスは、ＬＩＤＴ／ＳＩＤＴ命令によってロードまたは保存される可能性がある。ここで、命令ポインタ・レジスタは、現在実行されているコードのメモリ・アドレスを指すために使用される。
【００３５】
上述の方法は、ＣＰＵのシステム管理モードから抜け、それによって、元の実行環境、すなわち、ＵＥＦＩブート前環境に戻ることができるが、この環境は、必ずしも元のＵＥＦＩブート前環境であるとは限らず、このことは、主に、元のＵＥＦＩブート前環境に戻るために使用されるコンテキスト情報の別の部分が壊されたかどうかが分からないためである。したがって、残される必要があるＵＥＦＩブート前環境のコンテキストは、ＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスとそのメモリ領域の内容とをさらに含み、その理由は、そのアドレスおよび内容が、ＵＥＦＩが元々動作する環境であり、これらの情報が、ＵＥＦＩが元々動作する環境にシステムが直接戻ることを可能にし得るためである。ＵＥＦＩの仕様によって定義されたＵＥＦＩブート・サービス・ルーチンは、ＵＥＦＩファームウェアの実装で与えられなければならず、その実装のＧｅｔＭｅｍｏｒｙｍａｐ（）メソッドが、メモリ領域テーブル（メモリ・マップ）を取得するために使用され得る。メソッドは、メモリ記述子を含む配列を返し、メモリ記述子のそれぞれは、対応するメモリ領域の種類、開始アドレス、サイズ、および属性を示す。残される必要があるメモリ領域のアドレスは、メモリ記述子の開始アドレスおよびサイズによって決定される可能性があり、それによって、そのメモリ領域の内容を取得する。
【００３６】
図４は、ＵＥＦＩファームウェアによって定義されたメモリ領域の種類を示し、図４の上半分は、ＵＥＦＩブート前環境の残される必要があるメモリ領域の種類である。図で、メモリの種類の記述子は、以下の通りである。
EfiReservedMemoryType−予約されたメモリの種類。この種類のメモリ領域はＵＥＦＩファームウェアおよびＯＳによって保護される。
EfiLoaderCode、EfiLoaderData−ＵＥＦＩローダのコードおよびデータを記憶するためのメモリ領域の種類。
EfiBootServicesCode、EfiBootServicesData−ブート・サービス・ドライバ・プログラムのコードおよびデータを記憶するためのメモリ領域の種類。
EfiRuntimeServicesCode、EfiRuntimeServicesData−ランタイム・サービス・ドライバ・プログラムのコードおよびデータを記憶するためのメモリ領域の種類。
EfiConventionalMemory−使用可能な通常のメモリ領域の種類。
EfiUnusableMemory−エラーがあるために使用することができないメモリ領域の種類。
EfiACPIReclaimMemory−高度設定および電力インターフェース（advanced configuration and power interface）テーブル（ＡＣＰＩテーブル）を記憶するためのメモリ領域の種類。
EfiACPIMemoryNVS−ファームウェアによる仕様のために予約されたメモリ領域の種類。
fiMemoryMappedIO−メモリ・マップド入出力を確立するためのメモリ領域の種類。
fiMemoryMappedIOPortSpace−メモリ・マップド入出力ポートのためのメモリ領域の種類。
EfiPalCode−プロセッサ抽象化レイヤのコードを記憶するためのメモリの種類。
【００３７】
一実施形態において、システムが元のＵＥＦＩ実行環境に直接戻ることを可能にするために、図３に示された方法は、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗することに応じて、残される必要があるＵＥＦＩブート前環境のコンテキスト内のＵＥＦＩのコードおよびデータが存在するメモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスに復元することをさらに含む。しかし、この復元方法は、メモリ領域がＯＳによって同時にアクセスされており、したがって、ＵＥＦＩブート前環境のコンテキストの完全性が損なわれる危険性をはらむ。さらなる実施形態では、方法は、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗することに応じて、残される必要があるＵＥＦＩブート前環境のコンテキスト内のＵＥＦＩのコードおよびデータが存在するメモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスに復元した後で、ＰＣＩデバイスのメモリ・マップド入出力（ＭＭＩＯ）を終了させることをさらに含む。これは、ＵＥＦＩブート前環境のコンテキストの完全性が損なわれる危険性を減らすために、ダイレクト・メモリ・アクセス・デバイス（ＤＭＡ）によるメモリへのアクセスが復元された領域を壊すことを防止することができる。終了させるステップは、ＰＣＩデバイスの設定空間のベース・アドレス・レジスタを消去することによって行われる可能性がある。
【００３８】
別の実施形態において、システムが元のＵＥＦＩ実行環境に直接戻ることを可能にするために、図３に示された方法は、ＣＰＵがシステム管理モードを開始することに応じて、残される必要があるＵＥＦＩブート前環境のコンテキスト内のＵＥＦＩのコードおよびデータが存在するメモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスに復元することをさらに含む。さらなる実施形態では、方法は、ＣＰＵがシステム管理モードを開始することに応じて、残される必要があるＵＥＦＩブート前環境のコンテキスト内のＵＥＦＩのコードおよびデータが存在するメモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスに復元した後で、ＰＣＩデバイスのメモリ・マップド入出力（ＭＭＩＯ）を終了させることをさらに含む。これは、ダイレクト・メモリ・アクセス・デバイス（ＤＭＡ）によるメモリへのアクセスが復元された領域を壊すことを防止することができる。終了させるステップは、ＰＣＩデバイスの設定空間のベース・アドレス・レジスタを消去することによって行われる可能性がある。
【００３９】
残される必要があるＵＥＦＩブート前環境のコンテキストは、そのメモリ領域に記憶されたデータがＵＥＦＩブート前環境およびレガシーＯＳ環境で壊されることにならない限り、任意の適切なメモリ領域に保存され得る。単純な実施形態においては、外部ストレージ（一般的には、ＵＳＢストレージ媒体、光ディスク、取り外し可能なハード・ディスクまたはフロッピー（Ｒ）・ディスクなどのストレージ媒体）が、残される必要があるＵＥＦＩブート前環境のコンテキストを記憶するために使用される可能性がある。これらの方法によって記憶される内容は、プログラムによって制御される可能性があり、ＵＥＦＩブート前環境およびレガシーＯＳ環境によって壊されない。しかし、復元のために必要とされる時間は、比較的長く、復元のプロセスは、比較的複雑であり、例えば、デバイスを駆動することができるコードは、復元中に実行される必要があり、外部ストレージ・デバイスに記憶されたコンテキストの内容は、（隠しパーティションに置かれるなど）特別な保護メカニズムが存在しない場合、壊され得る可能性がある。
【００４０】
別の実施形態においては、ＵＥＦＩの予約されたメモリが、残される必要があるＵＥＦＩブート前環境のコンテキストを記憶するために使用される可能性がある。そのようなＥＦＩの予約されたメモリのメモリ領域の完全性は、ＵＥＦＩブート前環境とレガシーＯＳ環境との両方で保証され得る。残される必要があるＵＥＦＩブート前環境のコンテキストは、ＵＥＦＩがレガシーＯＳのブートの呼び出しを実行するために互換性サポート・モジュールを開始する前である限り、ＵＥＦＩブート前環境を開始した後の任意の時間に保存され得る。好ましい実施形態においては、ＵＥＦＩシステム・サービスが、残される必要がある上記ＵＥＦＩブート前環境のコンテキストが割り当てられた予約されたメモリに保存されるように、十分な予約されたメモリを割り当てるために最初に呼び出される必要がある。
【００４１】
一実施形態において、方法は、レガシーＯＳを再び呼び出し、ＵＥＦＩブート前環境に再び戻り、それによって、悪循環に陥ることを避けるために、命令ポインタ・レジスタがレガシーＯＳのブートを行う呼び出し命令の次の命令を指すように、ＣＰＵがシステム管理モードを開始することに応じて、保存された命令ポインタ・レジスタを修正することをさらに含む。
【００４２】
ステップＳ３０２において、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗することに応じてＣＰＵの実行コンテキストの第１の部分を復元するが、本明細書では、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗すると判定する方法についてのいくつかの実施形態が提供される。
【００４３】
一実施形態においては、互換性サポート・モジュールがレガシーＯＳのローダを開始するとき、ブートの失敗に応じて、レガシーＯＳのローダは、通常、（ＩＮＴ１８などの）ソフトウェア割り込みを呼び出してＵＥＦＩファームウェアに知らせる。ＵＥＦＩファームウェアの観点からすれば、レガシーＯＳのローダからソフトウェア割り込みを受け取ることに応じて、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗すると判定され得る。失敗と判定されると、ＵＥＦＩブート前環境に関連するＣＰＵにシステム管理モードを開始させる方法は、割り込みハンドラ機能を利用して、ＣＰＵの実行コンテキストの第１の部分またはＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスあるいはその両方と、そのメモリ領域の内容とを復元する可能性がある。
【００４４】
別の実施形態においては、ウォッチドッグ・クロックが、ブート期間中のレガシーＯＳのシステム・ハング状態を検出するためにＵＥＦＩファームウェアに追加される可能性がある。ウォッチドッグ・クロックは、指定された時間に事前に設定され、ウォッチドッグ・クロックによって事前に設定された指定された時間以内にレガシーＯＳのブートが成功であるという通知をＵＥＦＩブート前環境が受信しなかった場合、ハードウェア割り込みをトリガし、ハードウェア割り込みのトリガによって、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗すると判定される。反対に、ＵＥＦＩブート前環境がレガシーＯＳを正常にロードした場合、ＵＥＦＩブート前環境は、ウォッチドッグ・クロックによって事前に設定された指定された時間以内にレガシーＯＳが正常にブートされたという通知を受信し、この時点で、ＵＥＦＩファームウェアが、ウォッチドッグ・クロックを停止するか、またはウォッチドッグ・クロックを無限の期間に事前設定する可能性がある。特定の実施形態においては、ＣＰＵの実行コンテキストの第１の部分またはＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスあるいはその両方と、そのメモリ領域の内容とを復元するために割り込みハンドラ機能が使用される可能性がある。
【００４５】
さらに別の実施形態においては、マシン検査例外（Machine-CheckException）メカニズムが使用される可能性がある。マシン検査例外は、ハードウェア・エラーを検出し、報告するためにＣＰＵによって提供されるメカニズムである。マシン検査例外は、ＰＣシステムにおいて最も優先度の高い例外であり、いかなるその他の割り込み／例外によっても中断され得ない。マシン検査例外では、例えば、Ｘ８６アーキテクチャを有するＣＰＵについては、発生したエラーの状態が、ＩＡ３２＿ＭＣｉ＿ＳＴＡＴＵＳレジスタによって報告される可能性があり、このレジスタの２ビットが、現在のＣＰＵの実行コンテキストが壊されたかどうかを検査するために使用される可能性があり、すなわち、Ｖａｌｉｄ（ビット６３）＝１かつＰＣＣ（ビット５７）＝０であり、それは、コンテキストが壊されていないことを表す。ＣＰＵの実行コンテキストが壊されていない場合、ＣＰＵの実行コンテキストの第１の部分またはＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスあるいはその両方と、そのメモリ領域の内容とが、マシン検査例外のハンドラ機能で復元され得る。さらなる実施形態においては、ＣＰＵの実行コンテキストが壊されたかどうかが、例外ハンドラ機能で最初に判定される必要がある。ＣＰＵの実行コンテキストが壊されていない場合、ＣＰＵの実行コンテキストの第１の部分またはＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスあるいはその両方と、そのメモリ領域の内容とが、エラーが訂正された後に復元される可能性があり、ＣＰＵの実行コンテキストが壊された場合、唯一できることはシステムをリブートすることである。
【００４６】
ＣＰＵの実行コンテキストの第１の部分を復元することは、グローバル記述子テーブル（ＧＤＴ）、割り込み記述子テーブル（ＩＤＴ）、制御レジスタ、およびセグメント・レジスタを復元することを含み、以下の擬似コードが使用され得る。
MemoryCopy(ORIGINAL_GDT_ADDRESS,SAVED_GDT_ADDRESS,sizeof(GDT))//グローバル記述子テーブルを復元する
LGDT ORIGINAL_GDT_ADDRESS
MemoryCopy(ORIGINAL_IDT_ADDRESS,SAVED_IDT_ADDRESS,sizeof(IDT))//割り込み記述子テーブルを復元する
LIDT ORIGINAL_IDT_ADDRESS
MOV CONTROL_REGISTER,SAVED_CR_VALUE//制御レジスタを復元する
FAR JMP ADDRESS_OF_NEXT_INSTRUCTION//次の命令にｆａｒジャンプ（far jump）し、実行フローを変更し、プロセッサをシリアライズする
MOV SEGMENT_REGISTER,//セグメント・レジスタを復元する
SAVED_SEGMENT_REGISTER_VALUE
【００４７】
ＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスとそのメモリ領域の内容とを復元するために、残される必要があるＵＥＦＩブート前環境のコンテキストは、ＵＥＦＩのコードおよびデータが存在するメモリ領域の内容をＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスにコピーするために利用され得る。予約されたメモリが残される必要があるＵＥＦＩブート前環境のコンテキストを記憶するために使用されるとき、それは、メモリ間コピーの方法である。
【００４８】
ステップＳ３０３において、ＵＥＦＩブート前環境に関連するＣＰＵにシステム管理モードを開始させ、システム管理モードでＣＰＵの実行コンテキストの第２の部分を復元する。ＣＰＵの実行コンテキストの第２の部分を復元することは、フラグ・レジスタ、命令ポインタ・レジスタ、汎用レジスタ、システム管理ベース・レジスタを復元することを含み、ＣＰＵの実行コンテキストの第１の部分を復元するために使用された擬似コードと同様の擬似コードが使用され得る。ＵＥＦＩブート前環境に関連するＣＰＵにシステム管理モードを開始させることは、ハードウェア・トリガ方法を使用する可能性があり、またはソフトウェア・システム管理割り込み（ソフトウェアＳＭＩ：software System Management Interrupt）をトリガする方法を使用する可能性がある。ＵＥＦＩブート前環境に関連するＣＰＵにシステム管理モードを開始させる前に、ＣＰＵがシステム管理モードを開始することができるように、ＣＰＵが最初に保護モードに切り替えられるべきであり、次いで、ソフトウェア・システム管理割り込み（ソフトウェアＳＭＩ）がトリガされる。
【００４９】
ステップＳ３０４において、ＣＰＵのシステム管理モードを抜け、それによって、ＵＥＦＩブート前環境に戻り、ＣＰＵのシステム管理モードを抜けることは、次のＵＥＦＩのブート・オプションを試すか、またはＵＥＦＩシステム診断を実行することが可能であるように、ＣＰＵによってＲＳＭ命令を実行し、それによって、最初に保存されたＵＥＦＩブート前実行環境に戻ることによって実現され得る。さらに、システムのコントローラがレガシー・システムのブートを試みる間にＵＥＦＩによってすべて切断されるので、ＵＥＦＩブート前環境が復元された後、ＵＥＦＩによって制御されるコントローラのドライバは、コントローラに対するＵＥＦＩの制御が復元され得るように、ＵＥＦＩブート前環境に戻ることに応じて再実行させられる。
【００５０】
同じ発明の概念の下で、本発明は、レガシーＯＳ環境からＵＥＦＩブート前環境への復元を行うためのシステムも開示し、図５は、レガシーＯＳ環境からＵＥＦＩブート前環境への復元を行うためのシステムの構造的なブロック図を示す。図５によれば、システムは、ＵＥＦＩブート前環境で、残される必要があるＵＥＦＩブート前環境の、ＣＰＵの実行コンテキストを含むコンテキストを記憶するように構成された記憶手段５０１と、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗することに応じてＣＰＵの実行コンテキストの第１の部分を復元するように構成された第１の復元手段５０２と、ＵＥＦＩブート前環境に関連するＣＰＵにシステム管理モードを開始させ、システム管理モードでＣＰＵの実行コンテキストの第２の部分を復元するように構成された第２の復元手段５０３と、ＣＰＵのシステム管理モードから抜け、それによって、ＵＥＦＩブート前環境に戻るように構成された退出手段５０４とを含む。
【００５１】
一実施形態において、残される必要があるＵＥＦＩブート前環境のコンテキストは、ＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスとそのメモリ領域の内容とをさらに含む。好ましくは、記憶手段は、ＵＥＦＩの予約されたメモリを使用して、残される必要があるＵＥＦＩブート前環境のコンテキストを記憶する。
【００５２】
一実施形態において、第１の復元手段は、レガシーＯＳのローダからソフトウェア割り込みを受け取ることに応じてＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗すると判定するように構成された第１の判定手段と、ウォッチドッグ・クロックによって事前に設定された指定された時間以内にレガシーＯＳのブートが成功であるという通知をＵＥＦＩブート前環境が受信しなかった場合、ハードウェア割り込みをトリガするウォッチドッグ・クロックをＵＥＦＩファームウェアに追加し、ハードウェア割り込みのトリガによって、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗すると判定するように構成された第２の判定手段と、マシン検査例外メカニズムを利用することによってＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗すると判定するように構成された第３の判定手段とのうちの１つを使用することによってＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗すると判定する。
【００５３】
一実施形態において、第１の復元手段は、ＵＥＦＩブート前環境がレガシーＯＳをロードすることに失敗することに応じて、残される必要があるＵＥＦＩブート前環境のコンテキスト内のＵＥＦＩのコードおよびデータが存在するメモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスに復元するようにさらに構成されている。好ましくは、第１の復元手段は、残される必要があるＵＥＦＩブート前環境のコンテキスト内のＵＥＦＩのコードおよびデータが存在するメモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスに復元した後で、ＰＣＩデバイスのメモリ・マップド入出力を終了させるようにさらに構成されている。
【００５４】
別の実施形態において、第２の復元手段は、ＣＰＵがシステム管理モードを開始することに応じて、残される必要があるＵＥＦＩブート前環境のコンテキスト内のＵＥＦＩのコードおよびデータが存在するメモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスに復元するようにさらに構成されている。好ましくは、第２の復元手段は、残される必要があるＵＥＦＩブート前環境のコンテキスト内のＵＥＦＩのコードおよびデータが存在するメモリ領域の内容を、ＵＥＦＩのコードおよびデータが存在するメモリ領域のアドレスに復元した後で、ＰＣＩデバイスのメモリ・マップド入出力を終了させるようにさらに構成されている。好ましくは、第２の復元手段は、命令ポインタ・レジスタがレガシーＯＳのブートを行う呼び出し命令の次の命令を指すように、ＣＰＵがシステム管理モードを開始することに応じて、保存された命令ポインタ・レジスタを修正するようにさらに構成されている。
【００５５】
一実施形態において、退出手段は、ＵＥＦＩブート前環境に戻ることに応じて、ＵＥＦＩによって制御されるコントローラのドライバが再実行されるようにするようにさらに構成されている。
【００５６】
図面の流れ図およびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品のあり得る実装のアーキテクチャ、機能、および操作を示す。これに関連して、流れ図またはブロック図の各ブロックは、（１つまたは複数の）規定された論理的な機能を実装するための１つまたは複数の実行可能命令を含むモジュール、セグメント、またはコードの一部を表す可能性がある。一部の代替的な実装においては、ブロックで示された機能が、図面に示された順序とは異なる順序で行われる可能性があることにも留意されたい。例えば、関連する機能に応じて、連続で示された２つのブロックが実際には実質的に同時に実行される可能性があり、またはそれらのブロックが逆順に実行されることもあり得る。ブロック図または流れ図あるいはその両方の各ブロックと、ブロック図または流れ図あるいはその両方のブロックの組み合わせとは、規定された機能もしくは動作を実行する専用のハードウェアに基づくシステム、または専用のハードウェアとコンピュータ命令との組み合わせによって実装され得ることも認められるであろう。
【００５７】
本発明の様々な実施形態の説明は、例示を目的として示されたが、網羅的であるように、または開示された実施形態に限定されるように意図されていない。多くの変更および改変が、説明された実施形態の範囲および精神から逸脱することなく当業者に明らかになるであろう。本明細書において使用された用語は、実施形態の原理、実用的な応用、もしくは市場に見られるテクノロジーに勝る技術的な改善を最もよく説明するか、または当業者が本明細書で開示された実施形態を理解することを可能にするように選択された。
【図１】
2015518615.tif 000003
【図２】
2015518615.tif 000004
【図３】
2015518615.tif 000005
【図４】
2015518615.tif 000006
【図５】
2015518615.tif 000007
【国際調査報告】
2015518615.tif 000008
2015518615.tif 000009