(57)【要約】【課題】ＯＳがサポートし論理アドレスで動作する第２ブートプログラム基本部がハードウェアがサポートし物理アドレスで動作する第１ブートプログラム基本部の機能を用いて動作できるように情報処理装置を構成する。【解決手段】情報処理装置は、アドレス変換機構を含む演算処理部および制御部に仮想アドレス空間を設定し、第１の関数を提供する第１ブートプログラム基本部を該仮想アドレス空間上で動作させるスタートモジュールを実行し、第２ブートプログラム基本部が提供する第２の関数を用いてブート対象プログラムの読み込みを指示するブートローダを実行し、該読み込み指示をブートローダから受け取る第２ブートプログラム基本部を実行し、該読み込み指示を第１の関数に変換して第１ブートプログラム基本部処理部へ渡すエミュレーションプログラムを実行し、第１の関数に変換された該読み込み指示を制御部へ渡す第１ブートプログラム基本部を実行する。【選択図】図１
2015094966.tif 000002
【特許請求の範囲】
【請求項１】
ブート対象プログラムを格納するストレージと、
仮想アドレスから物理アドレスへのアドレス変換機構を含み、前記ストレージに格納された前記ブート対象プログラムの読み込みを実行する演算処理部と、
前記演算処理部からの前記ブート対象プログラムの読み込み指示に基づき前記ブート対象プログラムが記憶される主記憶部と、
仮想アドレスから物理アドレスへのアドレス変換機構を含み、前記演算処理部から受け取った前記ブート対象プログラムの読み込み指示に従って前記ストレージから前記ブート対象プログラムを読み出し、読み出だされた前記ブート対象プログラムを前記主記憶部内の物理アドレス上の複数の非連続領域に書き込む制御部と
を含み、
前記演算処理部は、
前記演算処理部および前記制御部に仮想アドレス空間を設定し、設定された前記仮想アドレス空間上で、物理アドレス上で動作するようにプログラムされアプリケーションプログラムに第１の関数を提供する第１ブートプログラム基本部を動作させるスタートモジュールを実行するスタートモジュール処理部と、
仮想アドレス上で動作するようにプログラムされた第２ブートプログラム基本部が提供する第２の関数を用いて前記ブート対象プログラムの読み込みを指示するブートローダを実行するブートローダ処理部と、
前記ブート対象プログラムの読み込み指示を前記ブートローダ処理部から受け取る第２ブートプログラム基本部を実行する第２ブートプログラム基本部処理部と、
前記第２ブートプログラム基本部処理部が受け取った前記ブート対象プログラムの読み込み指示を前記第１の関数に変換して前記第１ブートプログラム基本部処理部へ渡すエミュレーションプログラムを実行するエミュレーションプログラム処理部と、
前記エミュレーションプログラム処理部により前記第１の関数に変換された前記ブート対象プログラムの読み込み指示を前記制御部へ渡す前記第１ブートプログラム基本部を実行する第１ブートプログラム基本部処理部と、
を含む、情報処理装置。
【請求項２】
前記第１ブートプログラム基本部は、Unified Extensible Firmware Interface（ＵＥＦＩ）またはBasic Input/Output System（ＢＩＯＳ）であり、前記ブートローダおよび前記第２ブートプログラム基本部は、Open Firmwareである、請求項１に記載の情報処理装置。
【請求項３】
前記スタートモジュール処理部は、
物理アドレスと仮想アドレスとのアドレス変換テーブルを作成し、作成された前記アドレス変換テーブルを前記第１ブートプログラム基本部の起動前に前記演算処理部および前記制御部に登録し、
前記第１ブートプログラム基本部処理部に与えるメモリリソースおよびInput/Output（Ｉ／Ｏ）リソースの情報を仮想アドレスで作成し、作成された前記仮想アドレスを前記演算処理部および前記制御部に登録する
処理を更に含むスタートモジュールを実行する、請求項１または２に記載の情報処理装置。
【請求項４】
前記エミュレーションプログラム処理部は、
前記第２ブートプログラム基本部を前記第１の関数上で動作させるためのインタフェース変換を実行するインタフェースモジュールと、
前記インタフェースモジュールにデバイスツリーを構築させ、前記デバイスツリーの構築後に前記第２ブートプログラム基本部および前記ブートローダを起動させるローディングモジュールと
を含むエミュレーションプログラムを実行する、請求項１〜３の何れか一項に記載の情報処理装置。
【請求項５】
仮想アドレスから物理アドレスへのアドレス変換機構を含む演算処理部が、ストレージに格納された前記ブート対象プログラムの読み込みを指示し、
仮想アドレスから物理アドレスへのアドレス変換機構を含む制御部が、前記演算処理部から受け取った前記ブート対象プログラムの読み込み指示に従って前記ストレージから前記ブート対象プログラムを読み出し、読み出だされた前記ブート対象プログラムを主記憶部内の物理アドレス上の複数の非連続領域に書き込む
処理を含み、
前記演算処理部が実行する前記ブート対象プログラムの読み込み指示は、
前記演算処理部および前記制御部に仮想アドレス空間を設定し、設定された前記仮想アドレス空間上で、物理アドレス上で動作するようにプログラムされアプリケーションプログラムに第１の関数を提供する第１ブートプログラム基本部を動作させるスタートモジュールを実行し、
仮想アドレス上で動作するようにプログラムされた第２ブートプログラム基本部が提供する第２の関数を用いて前記ブート対象プログラムの読み込みを指示するブートローダを実行し、
前記ブート対象プログラムの読み込み指示を前記ブートローダから受け取る第２ブートプログラム基本部を実行し、
第２ブートプログラム基本部が受け取った前記ブート対象プログラムの読み込み指示を前記第１の関数に変換して前記第１ブートプログラム基本部処理部へ渡すエミュレーションプログラムを実行し、
前記第１の関数に変換された前記ブート対象プログラムの読み込み指示を前記制御部へ渡す前記第１ブートプログラム基本部を実行する
処理を含む、情報処理装置の制御方法。
【請求項６】
仮想アドレスから物理アドレスへのアドレス変換機構を含む演算処理部が、ストレージに格納された前記ブート対象プログラムの読み込みを指示し、
仮想アドレスから物理アドレスへのアドレス変換機構を含む制御部が、前記演算処理部から受け取った前記ブート対象プログラムの読み込み指示に従って前記ストレージから前記ブート対象プログラムを読み出し、読み出だされた前記ブート対象プログラムを主記憶部内の物理アドレス上の複数の非連続領域に書き込む
処理を含み、
前記演算処理部および前記制御部に仮想アドレス空間を設定し、設定された前記仮想アドレス空間上で、物理アドレス上で動作するようにプログラムされアプリケーションプログラムに第１の関数を提供する第１ブートプログラム基本部を動作させるスタートモジュールに従った処理と、
仮想アドレス上で動作するようにプログラムされた第２ブートプログラム基本部が提供する第２の関数を用いて前記ブート対象プログラムの読み込みを指示するブートローダに従った処理と、
前記ブート対象プログラムの読み込み指示を前記ブートローダから受け取る第２ブートプログラム基本部に従った処理と、
第２ブートプログラム基本部が受け取った前記ブート対象プログラムの読み込み指示を前記第１の関数に変換して前記第１ブートプログラム基本部処理部へ渡すエミュレーションプログラムに従った処理と、
前記第１の関数に変換された前記ブート対象プログラムの読み込み指示を前記制御部へ渡す前記第１ブートプログラム基本部に従った処理と
を情報処理装置に実行させる制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理装置の制御方法、および制御プログラムに関する。
【背景技術】
【０００２】
コンピュータの電源が投入された時にOperation System（ＯＳ）を起動するためには、ブートプログラムが用いられ得る。ブートプログラムは、アプリケーション層に実装されブート対象プログラムを読み込むブートローダと、デバイスドライバを含みApplication Programming Interface（ＡＰＩ）をブートローダに提供するブートプログラム基本部とを含み得る。ここで、ＡＰＩとはＯＳのカーネルによって提供される関数等の集合であり、ＯＳはＡＰＩに含まれる関数等を介して、ブートプログラム等のプログラムに対して所定の機能を提供する。ブートプログラムは、コンピュータのCentral Processing Unit（ＣＰＵ）により実行される。ＣＰＵは、Peripheral Component Interconnect（ＰＣＩ）ルートブリッジといったコントローラに対してストレージに格納されたＯＳイメージを主記憶装置に書き込ませ、主記憶装置に書き込まれたＯＳイメージを読み込む。
【０００３】
ブートプログラムには、物理アドレス上で動作するブートプログラムと、仮想アドレス上で動作するブートプログラムがある。
【０００４】
物理アドレス上で動作するブートプログラムが使用される場合、ブートプログラムおよびコントローラは、主記憶装置のアドレスを物理アドレスで管理する。また、ストレージ内のＯＳイメージが主記憶装置に読み込まれる際には、物理アドレスのアドレス体系上で全てのモジュールが動作する。ブートプログラムが物理アドレス上で動作する構成の一例としては、ＣＰＵのアーキテクチャがIntel Architecture（ＩＡ）であり、ブートプログラムがUnified Extensible Firmware Interface（ＵＥＦＩ）であり、ＯＳがWindows（登録商標）またはＩＡ Linux（登録商標）であり、ＰＣＩルートブリッジ（Peripheral Component Interconnect root bridge）がアドレス変換機構を有しない構成が挙げられる。
【０００５】
一方、仮想アドレス上で動作するブートプログラムが使用される場合、ブートプログラムおよびコントローラは、主記憶装置のアドレスを仮想アドレスで管理する。また、ストレージ内のＯＳイメージが主記憶装置に読み込まれる際には、仮想アドレスのアドレス体系上で全てのモジュールが動作する。仮想アドレス上でブートプログラムが動作する構成の一例としては、ＣＰＵのアーキテクチャがScalable Processor ARChitecture（ＳＰＡＲＣ）であり、ブートプログラムがOpen Firmwareであり、ＯＳがSolarisまたはＳＰＡＲＣ Linux（登録商標）であり、ＰＣＩルートブリッジがアドレス変換機構を有する構成が挙げられる。
【０００６】
例えば、新たなハードウェアがコンピュータに実装される場合に、既存のＯＳがサポートしブートローダにＡＰＩを提供するブートプログラム基本部を新たなハードウェアがサポートしていないケースがある。他方で、このブートプログラム基本部とは別のブートの仕組みを有するブートプログラム基本部を新たなハードウェアがサポートしているケースがある。以下の説明では、ハードウェアがサポートするブートプログラム基本部を第１ブートプログラム基本部と便宜的に呼び、ＯＳがサポートしブートローダにＡＰＩを提供するブートプログラムを第２ブートプログラム基本部と便宜的に呼ぶ。
【０００７】
上述のようなケースに対応するために、ブートローダおよび第２ブートプログラム基本部に加えて第１ブートプログラム基本部がブートプログラムとして含まれるように構成することが考えられる。そして、第２ブートプログラム基本部がエミュレーションを介して第１ブートプログラム基本部の機能を使用できるように構成することが考えられる。こうした構成の一例としては、ＵＥＦＩ上のBasic Input/Output System（ＢＩＯＳ）エミュレーションが挙げられる。すなわち、物理アドレス上でそれぞれ動作するＵＥＦＩおよびＢＩＯＳがブートプログラムとして含まれ、ＵＥＦＩがエミュレーションを介してＢＩＯＳの機能を使用する構成が挙げられる。
【０００８】
なお、論理分割されたデータ処理システム内で稼動するさまざまなオペレーティング・システム・イメージのための多数の機能およびサービスを実行するファームウェア・コンポーネントが知られている。すなわち、まず、最も早期の初期プログラム・ロード（ＩＰＬ）ステージにおいて、システム・ファームウェアは、入出力（Ｉ／Ｏ）サブシステムのハードウェア検出を実行し、その後、ハードウェアを提示するために、システム・メモリ・マップに従ってシステム・アドレス範囲を初期化し、割り当てる。次に、ＩＰＬのオープン・ファームウェア・ステージにおいて、オープン・ファームウェアは、システム内の現在のハードウェアに基づいて、オープン・ファームウェア・デバイス・ツリーを作成する。最後に、ＩＰＬの最終ステージにおいて、ランタイム抽象化サービス（runtime abstraction service、ＲＴＡＳ）ファームウェアは、ハードウェア情報を知り、ランタイム中にオペレーティング・システムにサービスを提供できるようにする。また、ＲＴＡＳは、システムがランタイム中になんらかのエラー例外に出会った時に、ハードウェア問題を分析し、分離する。ＲＴＡＳは、検出プロセスを実行し、ハードウェアを記述するためにデータ構造を作成する。
【０００９】
また、次のようなコンピュータシステムが知られている。すなわち、コンピュータに電源が投入されると、ファームウェア内のブートプログラムが実行され、システムに接続されプロセッサがアドレス可能なハードウェア装置の識別および位置を判別するために、入出力空間がスキャンされる。そして、得られた装置の識別情報と絶対アドレス情報を使用して装置情報のデータベースが生成される。その後、オペレーティング・システム・コードがシステム・メモリにロードされる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００２−２６８９００号公報
【特許文献２】特表２０００−５１７０８５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
発明が解決しようとする課題の１つは、コンピュータに実装されるハードウェアがサポートし物理アドレス上で動作する第１ブートプログラム基本部とＯＳがサポートし論理アドレス上で動作するブートローダおよび第２ブートプログラム基本部とがブートプログラムとして含まれ、第２ブートプログラム基本部がエミュレーションを介して第１ブートプログラム基本部の機能を用いて動作できる構成を構築することである。
【課題を解決するための手段】
【００１２】
一実施形態に従った情報処理装置は、ブート対象プログラムを格納するストレージと、仮想アドレスから物理アドレスへのアドレス変換機構を含み、ストレージに格納されたブート対象プログラムの読み込みを実行する演算処理部と、演算処理部からのブート対象プログラムの読み込み指示に基づきブート対象プログラムが記憶される主記憶部と、仮想アドレスから物理アドレスへのアドレス変換機構を含み、演算処理部から受け取ったブート対象プログラムの読み込み指示に従ってストレージからブート対象プログラムを読み出し、読み出だされたブート対象プログラムを主記憶部内の物理アドレス上の複数の非連続領域に書き込む制御部とを含む。また、演算処理部は、演算処理部および制御部に仮想アドレス空間を設定し、設定された仮想アドレス空間上で、物理アドレス上で動作するようにプログラムされアプリケーションプログラムに第１の関数を提供する第１ブートプログラム基本部を動作させるスタートモジュールを実行するスタートモジュール処理部と、仮想アドレス上で動作するようにプログラムされた第２ブートプログラム基本部が提供する第２の関数を用いてブート対象プログラムの読み込みを指示するブートローダを実行するブートローダ処理部と、ブート対象プログラムの読み込み指示をブートローダ処理部から受け取る第２ブートプログラム基本部を実行する第２ブートプログラム基本部処理部と、第２ブートプログラム基本部処理部が受け取ったブート対象プログラムの読み込み指示を第１の関数に変換して第１ブートプログラム基本部処理部へ渡すエミュレーションプログラムを実行するエミュレーションプログラム処理部と、エミュレーションプログラム処理部により第１の関数に変換されたブート対象プログラムの読み込み指示を制御部へ渡す第１ブートプログラム基本部を実行する第１ブートプログラム基本部処理部とを含む。
【発明の効果】
【００１３】
一実施形態に従った情報処理装置によれば、コンピュータに実装されるハードウェアがサポートし物理アドレス上で動作する第１ブートプログラム基本部とＯＳがサポートし論理アドレス上で動作するブートローダおよび第２ブートプログラム基本部とがブートプログラムとして含まれ、第２ブートプログラム基本部がエミュレーションを介して第１ブートプログラム基本部の機能を用いて動作できる構成を構築することができる。
【図面の簡単な説明】
【００１４】
【図１】実施形態に従った情報処理装置の例示的な概略構成図である。
【図２】実施形態に従った情報処理装置によるブート対象プログラムの読み込み処理の説明図である。
【図３】比較対象の情報処理装置によるブート対象プログラムの読み込み処理の説明図である。
【図４】実施形態に従った情報処理装置の例示的な時系列動作説明図である。
【図５】スタートモジュール処理部の例示的な処理フロー図である。
【図６】ローディングモジュールを実行するエミュレーションプログラム処理部の例示的な処理フロー図である。
【図７】インタフェースモジュールを実行するエミュレーションプログラム処理部の例示的な処理フロー図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照しながら本発明を実施するための形態を詳細に説明する。
図１は、実施形態に従った情報処理装置の例示的な概略構成図である。
【００１６】
図１に示される情報処理装置１００は、例えば、コンピュータである。図１に示すように、情報処理装置１００は、演算処理部１１０、起動プログラム格納部１２０、主記憶部１３０、ストレージ１４０、入出力（Input/Output、Ｉ／Ｏ）用回路１４１、制御部１５０、入力部１６０、表示部１７０、記録媒体用ドライブ１８０、および通信インタフェース１９０を含む。
【００１７】
演算処理部１１０は、例えば、Central Processing Unit（ＣＰＵ）である。演算処理部１１０は、スタートモジュール処理部１１１、第１ブートプログラム基本部処理部１１２、エミュレーションプログラム処理部１１３、第２ブートプログラム基本部処理部１１４、およびブートローダ処理部１１５を含む。また、演算処理部１１０は、仮想アドレスから物理アドレスへの変換機構であるアドレス変換機構１１６を含む。
【００１８】
起動プログラム格納部１２０は、情報処理装置１００の電源投下後に起動するプログラムを格納する装置であり、例えば、Read Only Memory（ＲＯＭ）やフラッシュメモリである。起動プログラム格納部１２０には、スタートモジュール１２１、第１ブートプログラム基本部１２２、エミュレーションプログラム１２３、第２ブートプログラム基本部１２４、およびブートローダ１２５が格納される。
【００１９】
スタートモジュール１２１は、ブートプログラムが起動される前に演算処理部１１０および制御部１５０上に仮想アドレス空間を構築するプログラムである。
【００２０】
第１ブートプログラム基本部１２２は、情報処理装置１００が備える各種ハードウェアがサポートし、アプリケーションプログラムにＡＰＩ（第１ＡＰＩ）、すなわち、第１の機能を提供するプログラムである。第１ブートプログラム基本部１２２は、物理アドレス上で動作するようにプログラムされている。第１ブートプログラム基本部１２２の例としては、ＵＥＦＩおよびＢＩＯＳが挙げられる。ここで、ＡＰＩとはＯＳのカーネルによって提供される関数等の集合であり、ＯＳはＡＰＩに含まれる関数等を介して、ブートプログラム等のプログラムに対して所定の機能を提供する。
【００２１】
第２ブートプログラム基本部１２４は、アプリケーションプログラムとしてのブートローダ１２５にＡＰＩ（第２ＡＰＩ）、すなわち、第２の機能を提供するプログラムである。第２ブートプログラム基本部１２４は、仮想アドレス上で動作するようにプログラムされている。また、ブートローダ１２５は、ストレージ１４０に格納されたＯＳがサポートするプログラムである。第２ブートプログラム基本部１２４およびブートローダ１２５の例としては、Open Firmwareが挙げられる。
【００２２】
第１ブートプログラム基本部１２２、第２ブートプログラム基本部１２４、およびブートローダ１２５は、情報処理装置１００に備えられるブートプログラムである。
【００２３】
エミュレーションプログラム１２３は、第２ブートプログラム基本部１２４が第１ブートプログラム基本部１２２の機能を使用して動作できる環境を提供するプログラムである。具体的には、エミュレーションプログラム１２３は、第２ブートプログラム基本部１２４中のドライバの呼び出しを第１ブートプログラム基本部１２２が提供するＡＰＩの関数へ変換するプログラムである。
【００２４】
主記憶部１３０は、実行中のプログラムや処理中のデータを一時的に記憶し、演算処理部１１０が直接アクセス可能な主記憶装置であり、例えば、Random Access Memory（ＲＡＭ）である。起動プログラム格納部１２０に格納される各種プログラム１２１〜１２５は、主記憶部１３０に読み込まれ、演算処理部１１０内の対応する処理部１１１〜１１５によりそれぞれ実行され得る。例えば、スタートモジュール１２１は、ブートプログラム１２２、１２４、および１２５の起動前に主記憶部１３０に読み込まれ、スタートモジュール処理部１１１により実行される。スタートモジュール１２１は、ブートプログラム１２２、１２４、１２５の起動後に主記憶装置１３０から消去され、スタートモジュール処理部１１１は、動作しない。
【００２５】
ストレージ１４０は、例えばハードディスクドライブ（Hard Disk Drive、ＨＤＤ）である。ストレージ１４０には、ＯＳイメージ等のブート対象プログラムが含まれる。
【００２６】
Ｉ／Ｏ用回路１４１は、ストレージ１４０への入出力インタフェースであり、例えば、Large Scale Integration（ＬＳＩ）等の集積回路である。Ｉ／Ｏ用回路１４１は、ストレージ１４０の一部とみなしてもよい。
【００２７】
制御部１５０は、例えば、ＰＣＩルートブリッジやＰＣＩ Express（ＰＣＩｅ）ルートブリッジといったコントローラである。制御部１５０は、仮想アドレスから物理アドレスへの変換機構であるアドレス変換機構１５１を含む。
【００２８】
入力部１６０は、例えば、キーボード、マウスである。表示部１７０は、例えば、液晶ディスプレイである。
【００２９】
記録媒体用ドライブ１８０は、記録媒体に記録されたデータを読み込み、および／またはデータを記録媒体へ書き込むための装置である。記録媒体は、例えば、Compact Disk Read Only Memory（ＣＤ−ＲＯＭ）、Digital Versatile Disk（ＤＶＤ）、Universal Serial Bus（ＵＳＢ）メモリ、フラッシュメモリ等である。なお、起動プログラム格納部１２０内の各種プログラム１２１〜１２５は、記録媒体に記録されてもよく、記録媒体に記録された各種プログラム１２１〜１２５が記録媒体用ドライブ１８０により起動プログラム格納部１２０に格納されるように構成してもよい。
【００３０】
通信インタフェース１９０は、Local Area Network（ＬＡＮ）やインターネット等の外部ネットワークと情報処理装置１００が接続するためのインタフェースである。なお、起動プログラム格納部１２０内の各種プログラム１２１〜１２５は、通信インタフェース１９０を介して他の情報処理装置（不図示）から転送されて起動プログラム格納部１２０に格納されるように構成してもよい。
【００３１】
情報処理装置１００では、ブートプログラム１２２、１２４、および１２５が主記憶部１３０に読み込まれて対応する処理部１１２、１１４、および１１５が処理を開始する前に、スタートモジュール１２１が主記憶部１３０に読み込まれる。そして、スタートモジュール処理部１１１は、スタートモジュール１２１に従って処理を実行する。
【００３２】
具体的には、スタートモジュール処理部１１１は、物理アドレスと仮想アドレスとの間のアドレス変換テーブルを作成する。そして、スタートモジュール処理部１１１は、作成されたアドレス変換テーブルを演算処理部１１０および制御部１５０内に登録する。また、スタートモジュール処理部１１１は、物理アドレスで動作する第１ブートプログラム基本部１２２を実行する第１ブートプログラム基本部処理部１１２に対して与えるメモリリソースやＩ／Ｏリソースの情報を仮想アドレスで作成する。そして、スタートモジュール処理部１１１は、作成された仮想アドレスを演算処理部１１０および制御部１５０内に登録する。このようなスタートモジュール処理部１１１による処理によって、第２ブートプログラム基本部１２４に従って第２ブートプログラム基本部処理部１１４が動作するために必要な仮想アドレス空間を、ブートプログラム１２２、１２４、および１２５が起動される前に演算処理部１１０および制御部１５０に構築できる。そして、第１ブートプログラム基本部１２２を実行する第１ブートプログラム基本部処理部１１２は、構築された仮想アドレス空間上で動作できる。
【００３３】
ブートプログラム１２２、１２４、および１２５は、上述のようなスタートモジュール１２１によって演算処理部１１０および制御部１５０に仮想アドレス空間が構築された後に順次起動する。
【００３４】
図２は、実施形態に従った情報処理装置によるブート対象プログラムの読み込み処理の説明図である。図２には、ブートプログラム起動後の情報処理装置１００が示されている。なお、説明を明確にするために、図１に示した情報処理装置１００が含む構成要素の一部のみが図２に示されていることに留意すべきである。
【００３５】
前述したように、実施形態に従った情報処理装置１００では、ブートプログラムが起動される前に演算処理部１１０および制御部１５０上に仮想アドレス空間が構築される。そこで、ブート対象プログラムの一例であるＯＳイメージの読み込み処理において、情報処理装置１００は、以下のように動作する。
【００３６】
図２に示されるように、ブートローダ１２５を実行するブートローダ処理部１１５は、ＯＳイメージを読み込むための主記憶部１３０上のアドレスを仮想アドレスにより指定する。ブートローダ処理部１１５により指定されたアドレスは、第２ブートプログラム基本部１２４を実行する第２ブートプログラム基本部処理部１１４に渡される（図２の処理(1)）。そして、ブートローダ処理部１１５により指定されたアドレスは、第２ブートプログラム基本部処理部１１４を経由してエミュレーションプログラム１２３を実行するエミュレーションプログラム処理部１１３に渡される（処理(2)）。
【００３７】
エミュレーションプログラム処理部１１３は、第２ブートプログラム基本部１２４が提供するＡＰＩ（第２ＡＰＩ）の関数を第１ブートプログラム基本部１２２が提供するＡＰＩ（第１ＡＰＩ）の関数に変換する。そして、エミュレーションプログラム処理部１１３は、第２ブートプログラム基本部処理部１１４を介してブートローダ処理部１１５から受け取ったアドレスを仮想アドレスのままで第１ブートプログラム基本部１２２を実行する第１ブートプログラム基本部処理部１１２に渡す（処理(3)）。このように、エミュレーションプログラム処理部１１３は、ブートローダ処理部１１５により指定されたアドレスに対するアドレス変換を実行しない。
【００３８】
第１ブートプログラム基本部処理部１１２は、アドレス変換機構１５１を備えた制御部１５０に対して、ブートローダ処理部１１５により指定されたアドレス、すなわちＯＳイメージの読み込み用のアドレスを仮想アドレスにより指定する（処理(4)）。
【００３９】
制御部１５０は、第１ブートプログラム基本部処理部１１２により指定されたアドレスをアドレス変換機構１５１によって仮想アドレスから物理アドレスに変換する。そして、制御部１５０は、ストレージ１４０に格納されたＯＳイメージをＩ／Ｏ用回路１４１を介して読み出し（処理(5)）、読み出されたＯＳイメージを主記憶部１３０内のページ単位に分割された複数の非連続の物理アドレスに書き込む（処理(６)）。
【００４０】
ブートローダ処理部１１５は、指定された仮想アドレスに対応する物理アドレスで主記憶部１３０内に書き込まれたＯＳイメージを、指定された仮想アドレスにより読み込む（処理(7)）。
【００４１】
このように、実施形態に従った情報処理装置よれば、コンピュータに実装されるハードウェアがサポートし物理アドレス上で動作する第１ブートプログラム基本部とＯＳがサポートし論理アドレス上で動作するブートローダおよび第２ブートプログラム基本部とがブートプログラムとして含まれ、第２ブートプログラム基本部がエミュレーションを介して第１ブートプログラム基本部の機能を用いて動作できる構成を構築することができる。実施形態に従った情報処理装置は、例えば、ＵＥＦＩまたはＢＩＯＳがサポートしているハードウェア上でOpen FirmwareをサポートしているＯＳを動作させる場合に利用することができる。
【００４２】
また、実施形態に従った情報処理装置１００によれば、図３に示されるような情報処理装置２００の構成と比較して演算処理部１１０の処理負担を軽減できる。
【００４３】
図３は、比較対象の情報処理装置によるブート対象プログラムの読み込み処理の説明図である。図３において、情報処理装置１００の構成要素と同じ情報処理装置２００の構成要素には、同じ参照符号がふられている。
【００４４】
情報処理装置２００において、第２ブートプログラム基本部１２４を実行する第２ブートプログラム基本部処理部１１４は、第１ブートプログラム基本部１２２を実行する第１ブートプログラム基本部処理部２１２が提供するＡＰＩ（第１ＡＰＩ）の関数を使用して動作するように構成される。こうした情報処理装置２００の構成は、情報処理装置１００の構成と同様である。前述したように、第１ブートプログラム基本部１２２は、物理アドレス上で動作するようにプログラムされており、第２ブートプログラム基本部１２４は、仮想アドレス上で動作するようにプログラムされている。
【００４５】
しかしながら、情報処理装置２００は、前述したようなスタートモジュール１２１および該スタートモジュール１２１を実行するスタートモジュール処理部１１１を含まない。したがって、情報処理装置１００とは異なり、情報処理装置２００では、ブートプログラム１２２，１２４，および１２５が起動される前に演算処理部１１０および制御部１５０上に仮想アドレス空間が構築されない。そこで、ブートローダ１２５を実行するブートローダ処理部１１５がブート対象プログラムを読み込むために、情報処理装置２００は、以下のように構成され得る。
【００４６】
まず、第２ブートプログラム基本部１２４は、第１ブートプログラム基本部１２２の初期化後に、第１ブートプログラム基本部１２２の１つのアプリケーションプログラムとして起動される。起動された第２ブートプログラム基本部１２４を実行する第２ブートプログラム基本部処理部１１４は、第２ブートプログラム基本部１２４用の仮想アドレス空間を構築する。しかしながら、物理アドレスで動作する第１ブートプログラム基本部１２２は、第２ブートプログラム基本部処理部１１４により構築された仮想空間上では動作できない。そこで、演算処理部２１０は、第２ブートプログラム基本部１２４およびエミュレーションプログラムが動作する時のみに仮想空間上で動作する。一方、第１ブートプログラム基本部１２２のドライバは、物理アドレスでしか動作しないため、第１ブートプログラム基本部１２２をサポートする情報処理装置２００のハードウェア（Ｉ／Ｏ装置）は、物理アドレスで動作する。
【００４７】
そこで、図３に示すように、情報処理装置２００では、第２ブートプログラム基本部１２４を実行する第２ブートプログラム基本部処理部１１４は、連続した仮想アドレスでＩ／ＯのDirect Memory Access（ＤＭＡ）転送を要求する（処理(2)）。しかしながら、第１ブートプログラム基本部１２２が提供するＡＰＩ（第１ＡＰＩ）の関数は、連続した物理アドレスでＩ／ＯのＤＭＡ転送を実行する機能しか有しない（処理(5)）。このため、第１ブートプログラム基本部１２２を実行する第１ブートプログラム基本部処理部２１２が第２ブートプログラム基本部処理部１１４によるＩ／Ｏ要求を実行できるための仕組みを備えなければ、第２ブートプログラム基本部１２４は、動作不能に陥る。そこで、そうした仕組みをエミュレーションプログラムおよび該エミュレーションプログラムを実行するエミュレーションプログラム処理部２１３が備えるように構成することが考えられる。
【００４８】
すなわち、エミュレーションプログラムを実行するエミュレーションプログラム処理部２１３は、第２ブートプログラム基本部１２４が提供する第２ＡＰＩの関数を介してブートローダ１２５から要求されたＤＭＡ転送（処理(1)）をページ境界で区切って複数のＩ／Ｏリクエストに分割する。そして、エミュレーションプログラム処理部２１３は、分割された複数のＩ／Ｏリクエストを連続した物理アドレスに変換する（処理(3)）。エミュレーションプログラム処理部２１３は、物理アドレスに変換されたＩ／Ｏリクエストを第１ＡＰＩを介して第１ブートプログラム基本部処理部２１２へ出力する（処理(4)）。
【００４９】
エミュレーションプログラムおよび該エミュレーションプログラムを実行するエミュレーションプログラム処理部２１３を上述のように構成した場合、第１ブートプログラム基本部処理部２１２は、第２ブートプログラム基本部処理部１１４によるＩ／Ｏ要求を実行でき、ブート対象プログラムは、ストレージ１４０から主記憶部１３０に読み込まれる。
【００５０】
すなわち、制御部２５０は、仮想アドレスから物理アドレスへのアドレス変換を実行せずに、ストレージ１４０に格納されたＯＳイメージをＩ／Ｏ用回路１４１を介して読み出す（処理(6)）。そして、制御部２５０は、読み出されたＯＳイメージを主記憶部１３０内の連続した物理アドレスに書き込む（処理(7)）。ブートローダ処理部１１５は、ページ境界で分割された複数の仮想アドレスに対応する連続した物理アドレスにより主記憶部１３０内に書き込まれたＯＳイメージを、指定された仮想アドレスにより読み込む（処理(8)）。
【００５１】
しかしながら、情報処理装置２００では、ページ境界に関する上述のような複雑な処理がエミュレーション処理部２１３に要求される。このため、エミュレーションプログラム処理部２１３を含む演算処理部２１０の処理負担が増加するという望ましくない結果が生じる。
【００５２】
これに対して、前述したように、実施形態に従った情報処理装置１００では、ブートプログラム１２２、１２４、および１２５が起動するタイミングよりも前に、演算処理部１１０および制御部１５０は、仮想アドレス環境へ移行する。このため、情報処理装置１００では、物理アドレス用の第１ブートプログラム基本部１２２上で仮想アドレス用の第２ブートプログラム基本部１２４が動作する場合に、ページ境界に関する上述のような複雑な処理は発生しない。したがって、情報処理装置１００によれば、情報処理装置２００と比較して演算処理部１１０の処理負担を軽減できる。
【００５３】
情報処理装置１００において仮想アドレス空間が構築されてブート対象プログラムが読み込まれる一連の処理の一例を図４〜図７を参照しながら説明する。
【００５４】
図４は、実施形態に従った情報処理装置の例示的な時系列動作説明図である。図４には、仮想アドレス空間の構築からブート対象プログラムの読み込みまでの情報処理装置１００の時系列に従った例示的な動作が示されている。図４の下部に示される太い矢印線Ａ〜Ｄは、時間の流れを表し、矢印線Ａ〜Ｄの各々の上部には、情報処理装置１００の構成要素の例示的な動作が示されている。
【００５５】
図４に示す時間Ａにおいて、情報処理装置１００の電源が投入されると、スタートモジュール１２１がまず起動される。スタートモジュール１２１は、演算処理部１１０および制御部１５０を仮想アドレスで起動するプログラムである。また、スタートモジュール１２１は、第１ブートプログラム基本部１２２を起動するプログラムである。スタートモジュール１２１を実行するスタートモジュール処理部１１１は、図５に示す処理を実行する。図５は、スタートモジュール処理部の例示的な処理フロー図である。
【００５６】
ステップＳ１０１において、スタートモジュール処理部１１１による処理が開始される。ステップＳ１０２において、スタートモジュール処理部１１１は、ブートプログラム１２２、１２４、および１２５が起動される前に、物理アドレスと仮想アドレスとの間のアドレス変換テーブル（ページテーブル）を作成する。そして、スタートモジュール処理部１１１は、作成されたアドレス変換テーブルを演算処理装置１１０および制御部１５０に登録する。
【００５７】
ステップＳ１０３において、スタートモジュール処理部１１１は、メモリリソースおよびＩ／Ｏリソースを仮想アドレスで作成する。そして、スタートモジュール処理部１１１は、作成されたメモリリソースおよびＩ／Ｏリソースの情報を演算処理装置１１０および制御部１５０に登録する。ステップＳ１０３の処理によって、物理アドレスで動作する第１ブートプログラム基本部１２２にメモリリソースおよびＩ／Ｏリソースの情報が仮想アドレスで与えられるように構成できる。
【００５８】
ステップＳ１０４において、スタートモジュール処理部１１１は、第１ブートプログラム基本部１２２のコードを主記憶部１３０に読み込む。そして、ステップＳ１０５において、スタートモジュール処理部１１１は、第１ブートプログラム基本部１２２を起動し、一連の処理を終了する（ステップＳ１０６）。
【００５９】
図４の時間Ｂに示されるように、スタートモジュール１２１を実行するスタートモジュール処理部１１１による上述のような処理によって演算処理部１１０および制御部１５０は、仮想アドレスで起動する。また、スタートモジュール処理部１１１による処理によって第１ブートプログラム基本部１２２が起動される。
【００６０】
図４に示す時間Ｂにおいて、第１ブートプログラム基本部１２２に含まれるディスパッッチャおよびブートマネージャは、第１ブートプログラム基本部１２２に含まれるデバイスドライバを起動する。また、ディスパッッチャおよびブートマネージャは、エミュレーションプログラム１２３に含まれるローディングモジュールおよびインタフェースモジュールを起動する。ディスパッッチャおよびブートマネージャによるこうした処理は、第１ブートプログラム基本部処理部１１２により実行される。
【００６１】
図４の時間Ｃに示されるように、第１ブートプログラム基本部処理部１１２による上述のような処理によってエミュレーションプログラム１２３に含まれるローディングモジュールおよびインタフェースモジュールが起動される。ローディングモジュールは、第２ブートプログラム基本部１２４およびブートローダ１２５を起動するモジュールである。インタフェースモジュールは、第２ブートプログラム基本部１２４によるドライバ呼び出しを処理するモジュールである。
【００６２】
図４に示す時間Ｃにおいて、ローディングモジュールを実行するエミュレーションプログラム処理部１１３は、図６に示す処理を実行する。図６は、ローディングモジュールを実行するエミュレーションプログラム処理部の例示的な処理フロー図である。
【００６３】
第２ブートプログラム基本部１２４が動作できるためには、第２ブートプログラム基本部１２４のドライバ呼び出しを処理するインタフェースモジュールがデバイスツリーを保持する必要がある。そこで、ステップＳ２０１において一連の処理が開始されると、ステップＳ２０２において、ローディングモジュールを実行するエミュレーションプログラム処理部１１３は、デバイスツリーの構築をインタフェースモジュールに指示するためにインタフェースモジュールへのアクセスインタフェースを取得する。そして、ステップＳ２０３において、エミュレーションプログラム処理部１１３は、デバイスツリーの構築をインタフェースモジュールに指示する。
【００６４】
ステップＳ２０４において、ローディングモジュールを実行するエミュレーションプログラム処理部１１３は、第１ブートプログラム基本部１２２が提供する第１ＡＰＩの関数を利用して第２ブートプログラム基本部１２４およびブートローダ１２５の実行コードを読み出し、主記憶部１３０に読み込む。そして、ステップＳ２０５において、エミュレーションプログラム処理部１１３は、第２ブートプログラム基本部１２４およびブートローダ１２５を起動する。
【００６５】
ローディングモジュールを実行するエミュレーションプログラム処理部１１３は、第２ブートプログラム基本部１２４を起動するときにインタフェースモジュールへアクセスするためのエントリポイント等の情報を第２ブートプログラム基本部１２４へ渡す。第２ブートプログラム基本部１２４が起動されると、ローディングモジュールから第２ブートプログラム基本部１２４へ制御が渡される。そして、ローディングモジュールを実行するエミュレーションプログラム処理部１１３は、一連の処理を終了し、ローディングモジュールは、主記憶部１３０から消滅する（ステップＳ２０６）。
【００６６】
図４の時間Ｄに示されるように、ローディングモジュールを実行するエミュレーションプログラム処理部１１３による上述のような処理によって第２ブートプログラム基本部１２４およびブートローダ１２５が起動される。
【００６７】
図４に示す時間Ｄにおいて、インタフェースモジュールを実行するエミュレーションプログラム処理部１１３は、図７に示す処理を実行する。図７は、インタフェースモジュールを実行するエミュレーションプログラム処理部の例示的な処理フロー図である。なお、図７に示すステップＳ３０１〜Ｓ３０４における処理は、図４に示す時間Ｃにおいて実行されることに注意すべきである。
【００６８】
一連の処理が開始されると（ステップＳ３０１）、ステップＳ３０２において、インタフェースモジュールを実行するエミュレーションプログラム処理部１１３は、インタフェースモジュールへのアクセスインタフェースをローディングモジュールに登録させる。ステップＳ３０３において、エミュレーションプログラム処理部１１３は、ローディングモジュールからのデバイスツリーの構築指示を待つ。そして、ステップＳ３０４において、エミュレーションプログラム処理部１１３は、ローディングモジュールからのデバイスツリーの構築指示に従って、デバイスツリーを構築する。ステップＳ３０４における処理によって、インタフェースモジュールを実行するエミュレーションプログラム処理部１１３は、構築されたデバイスツリーをアプリケーション層に実装されたブートローダ１２５に第２ＡＰＩの関数を介して提供できる。
【００６９】
ステップＳ３０５において、インタフェースモジュールを実行するエミュレーションプログラム処理部１１３は、第２ブートプログラム基本部１２４を実行する第２ブートプログラム基本部処理部１１４からの指示を待つ。第２ブートプログラム基本部処理部１１４からの指示は、ブートローダ１２５実行するブートローダ処理部１１５から第２ＡＰＩを介して受け取ったブート対象プログラムの読み込み指示である。
【００７０】
第２ブートプログラム基本部処理部１１４からの指示が受信されると、ステップＳ３０６において、エミュレーションプログラム処理部１１３は、第２ブートプログラム基本部１２４から受け取った指示を第１ＡＰＩに変換する。そして、エミュレーションプログラム処理部１１３は、第１ＡＰＩに変換された指示を第１ブートプログラム基本部１２２を実行する第１ブートプログラム基本部処理部１１２へ渡す。ステップＳ３０６における処理によって、第２ブートプログラム基本部１２４は、第１ブートプログラム基本部１２２が提供する第１ＡＰＩの関数を用いて動作できる。
【００７１】
ステップＳ３０７において、インタフェースモジュールを実行するエミュレーションプログラム処理部１１３は、第１ブートプログラム基本部処理部１１２からの実行結果を取得する。ステップＳ３０８において、エミュレーションプログラム処理部１１３は、取得された実行結果を第２ブートプログラム基本部処理部１１４へ返す。そして、エミュレーションプログラム処理部１１３は、ステップＳ３０５における処理に戻って、第２ブートプログラム基本部１２４を実行する第２ブートプログラム基本部処理部１１４からの指示を待つ。こうした処理によって、ブート対象プログラムが主記憶部１３０へ読み込まれる。
【００７２】
以上の説明から理解し得るように、実施形態に従った情報処理装置、情報処理装置の制御方法、および制御プログラムによれば、コンピュータに実装されるハードウェアがサポートし物理アドレス上で動作する第１ブートプログラム基本部とＯＳがサポートし論理アドレス上で動作するブートローダおよび第２ブートプログラム基本部とがブートプログラムとして含まれ、第２ブートプログラム基本部がエミュレーションを介して第１ブートプログラム基本部の機能を用いて動作できる構成を構築することができる。また、実施形態に従った情報処理装置、情報処理装置の制御方法、および制御プログラムによれば、物理アドレス用の第１ブートプログラム基本部上で仮想アドレス用の第２ブートプログラム基本部が動作する場合に、ページ境界に関する複雑な処理が発生せず、演算処理部の処理負担を軽減できる。
【００７３】
以上の実施形態に関し、更に以下の付記を開示する。
（付記１）
ブート対象プログラムを格納するストレージと、
仮想アドレスから物理アドレスへのアドレス変換機構を含み、前記ストレージに格納された前記ブート対象プログラムの読み込みを実行する演算処理部と、
前記演算処理部からの前記ブート対象プログラムの読み込み指示に基づき前記ブート対象プログラムが記憶される主記憶部と、
仮想アドレスから物理アドレスへのアドレス変換機構を含み、前記演算処理部から受け取った前記ブート対象プログラムの読み込み指示に従って前記ストレージから前記ブート対象プログラムを読み出し、読み出だされた前記ブート対象プログラムを前記主記憶部内の物理アドレス上の複数の非連続領域に書き込む制御部と
を含み、
前記演算処理部は、
前記演算処理部および前記制御部に仮想アドレス空間を設定し、設定された前記仮想アドレス空間上で、物理アドレス上で動作するようにプログラムされアプリケーションプログラムに第１の関数を提供する第１ブートプログラム基本部を動作させるスタートモジュールを実行するスタートモジュール処理部と、
仮想アドレス上で動作するようにプログラムされた第２ブートプログラム基本部が提供する第２の関数を用いて前記ブート対象プログラムの読み込みを指示するブートローダを実行するブートローダ処理部と、
前記ブート対象プログラムの読み込み指示を前記ブートローダ処理部から受け取る第２ブートプログラム基本部を実行する第２ブートプログラム基本部処理部と、
前記第２ブートプログラム基本部処理部が受け取った前記ブート対象プログラムの読み込み指示を前記第１の関数に変換して前記第１ブートプログラム基本部処理部へ渡すエミュレーションプログラムを実行するエミュレーションプログラム処理部と、
前記エミュレーションプログラム処理部により前記第１の関数に変換された前記ブート対象プログラムの読み込み指示を前記制御部へ渡す前記第１ブートプログラム基本部を実行する第１ブートプログラム基本部処理部と、
を含む、情報処理装置。
（付記２）
前記第１ブートプログラム基本部は、Unified Extensible Firmware Interface（ＵＥＦＩ）またはBasic Input/Output System（ＢＩＯＳ）であり、前記ブートローダおよび前記第２ブートプログラム基本部は、Open Firmwareである、付記１に記載の情報処理装置。
（付記３）
前記スタートモジュール処理部は、
物理アドレスと仮想アドレスとのアドレス変換テーブルを作成し、作成された前記アドレス変換テーブルを前記第１ブートプログラム基本部の起動前に前記演算処理部および前記制御部に登録し、
前記第１ブートプログラム基本部処理部に与えるメモリリソースおよびInput/Output（Ｉ／Ｏ）リソースの情報を仮想アドレスで作成し、作成された前記仮想アドレスを前記演算処理部および前記制御部に登録する
処理を更に含むスタートモジュールを実行する、付記１または２に記載の情報処理装置。
（付記４）
前記エミュレーションプログラム処理部は、
前記第２ブートプログラム基本部を前記第１の関数上で動作させるためのインタフェース変換を実行するインタフェースモジュールと、
前記インタフェースモジュールにデバイスツリーを構築させ、前記デバイスツリーの構築後に前記第２ブートプログラム基本部および前記ブートローダを起動させるローディングモジュールと
を含むエミュレーションプログラムを実行する、付記１〜３の何れか一項に記載の情報処理装置。
（付記５）
仮想アドレスから物理アドレスへのアドレス変換機構を含む演算処理部が、ストレージに格納された前記ブート対象プログラムの読み込みを指示し、
仮想アドレスから物理アドレスへのアドレス変換機構を含む制御部が、前記演算処理部から受け取った前記ブート対象プログラムの読み込み指示に従って前記ストレージから前記ブート対象プログラムを読み出し、読み出だされた前記ブート対象プログラムを主記憶部内の物理アドレス上の複数の非連続領域に書き込む
処理を含み、
前記演算処理部が実行する前記ブート対象プログラムの読み込み指示は、
前記演算処理部および前記制御部に仮想アドレス空間を設定し、設定された前記仮想アドレス空間上で、物理アドレス上で動作するようにプログラムされアプリケーションプログラムに第１の関数を提供する第１ブートプログラム基本部を動作させるスタートモジュールを実行し、
仮想アドレス上で動作するようにプログラムされた第２ブートプログラム基本部が提供する第２の関数を用いて前記ブート対象プログラムの読み込みを指示するブートローダを実行し、
前記ブート対象プログラムの読み込み指示を前記ブートローダから受け取る第２ブートプログラム基本部を実行し、
第２ブートプログラム基本部が受け取った前記ブート対象プログラムの読み込み指示を前記第１の関数に変換して前記第１ブートプログラム基本部処理部へ渡すエミュレーションプログラムを実行し、
前記第１の関数に変換された前記ブート対象プログラムの読み込み指示を前記制御部へ渡す前記第１ブートプログラム基本部を実行する
処理を含む、情報処理装置の制御方法。
（付記６）
前記第１ブートプログラム基本部は、Unified Extensible Firmware Interface（ＵＥＦＩ）またはBasic Input/Output System（ＢＩＯＳ）であり、前記ブートローダおよび前記第２ブートプログラム基本部は、Open Firmwareである、付記５に記載の情報処理装置の制御方法。
（付記７）
前記演算処理部は、
物理アドレスと仮想アドレスとのアドレス変換テーブルを作成し、作成された前記アドレス変換テーブルを前記第１ブートプログラム基本部の起動前に前記演算処理部および前記制御部に登録し、
前記第１ブートプログラム基本部処理部に与えるメモリリソースおよびInput/Output（Ｉ／Ｏ）リソースの情報を仮想アドレスで作成し、作成された前記仮想アドレスを前記演算処理部および前記制御部に登録する
処理を更に含むスタートモジュールを実行する、付記５または６に記載の情報処理装置の制御方法。
（付記８）
前記演算処理部は、
前記第２ブートプログラム基本部を前記第１の関数上で動作させるためのインタフェース変換を実行するインタフェースモジュールと、
前記インタフェースモジュールにデバイスツリーを構築させ、前記デバイスツリーの構築後に前記第２ブートプログラム基本部および前記ブートローダを起動させるローディングモジュールと
を含むエミュレーションプログラムを実行する、付記５〜７の何れか一項に記載の情報処理装置の制御方法。
（付記９）
仮想アドレスから物理アドレスへのアドレス変換機構を含む演算処理部が、ストレージに格納された前記ブート対象プログラムの読み込みを指示し、
仮想アドレスから物理アドレスへのアドレス変換機構を含む制御部が、前記演算処理部から受け取った前記ブート対象プログラムの読み込み指示に従って前記ストレージから前記ブート対象プログラムを読み出し、読み出だされた前記ブート対象プログラムを主記憶部内の物理アドレス上の複数の非連続領域に書き込む
処理を含み、
前記演算処理部および前記制御部に仮想アドレス空間を設定し、設定された前記仮想アドレス空間上で、物理アドレス上で動作するようにプログラムされアプリケーションプログラムに第１の関数を提供する第１ブートプログラム基本部を動作させるスタートモジュールに従った処理と、
仮想アドレス上で動作するようにプログラムされた第２ブートプログラム基本部が提供する第２の関数を用いて前記ブート対象プログラムの読み込みを指示するブートローダに従った処理と、
前記ブート対象プログラムの読み込み指示を前記ブートローダから受け取る第２ブートプログラム基本部に従った処理と、
第２ブートプログラム基本部が受け取った前記ブート対象プログラムの読み込み指示を前記第１の関数に変換して前記第１ブートプログラム基本部処理部へ渡すエミュレーションプログラムに従った処理と、
前記第１の関数に変換された前記ブート対象プログラムの読み込み指示を前記制御部へ渡す前記第１ブートプログラム基本部に従った処理と
を情報処理装置に実行させる制御プログラム。
（付記１０）
前記第１ブートプログラム基本部は、Unified Extensible Firmware Interface（ＵＥＦＩ）またはBasic Input/Output System（ＢＩＯＳ）であり、前記ブートローダおよび前記第２ブートプログラム基本部は、Open Firmwareである、付記９に記載の制御プログラム。
（付記１１）
前記演算処理部に、
物理アドレスと仮想アドレスとのアドレス変換テーブルを作成し、作成された前記アドレス変換テーブルを前記第１ブートプログラム基本部の起動前に前記演算処理部および前記制御部に登録し、
前記第１ブートプログラム基本部処理部に与えるメモリリソースおよびInput/Output（Ｉ／Ｏ）リソースの情報を仮想アドレスで作成し、作成された前記仮想アドレスを前記演算処理部および前記制御部に登録する
処理を更に含むスタートモジュールに従った処理を実行させる、付記９または１０に記載の制御プログラム。
（付記１２）
前記演算処理部に、
前記第２ブートプログラム基本部を前記第１の関数上で動作させるためのインタフェース変換を実行するインタフェースモジュールと、
前記インタフェースモジュールにデバイスツリーを構築させ、前記デバイスツリーの構築後に前記第２ブートプログラム基本部および前記ブートローダを起動させるローディングモジュールと
を含むエミュレーションプログラムに従った処理を実行させる、付記９〜１１の何れか一項に記載の制御プログラム。
【符号の説明】
【００７４】
１００、２００      情報処理装置
１１０、２１０      演算処理部
１１１      スタートモジュール処理部
１１２、２１２      第１ブートプログラム基本部処理部
１１３、２１３      エミュレーションプログラム処理部
１１４      第２ブートプログラム基本部処理部
１１５      ブートローダ処理部
１１６      アドレス変換機構
１２０      起動プログラム格納部
１２１      スタートモジュール
１２２      第１ブートプログラム基本部
１２３      エミュレーションプログラム
１２４      第２ブートプログラム基本部
１２５      ブートローダ
１３０      主記憶部
１４０      ストレージ
１４１      Ｉ／Ｏ用回路
１５０、２５０      制御部
１５１      アドレス変換機構
１６０      入力部
１７０      表示部
１８０      記録媒体用ドライブ
１９０      通信インタフェース
【図１】
2015094966.tif 000003
【図２】
2015094966.tif 000004
【図３】
2015094966.tif 000005
【図４】
2015094966.tif 000006
【図５】
2015094966.tif 000007
【図６】
2015094966.tif 000008
【図７】
2015094966.tif 000009