(57)【特許請求の範囲】
【請求項１】
ＯＳ上で動作するアプリケーションとデータを共有する領域を確保し、前記データを共有する領域にメモリの初期化のため情報を設定するＢＩＯＳと、
前記初期化のための情報を基に前記メモリの初期化の処理の少なくとも一部を実行するアプリケーションと
を含む情報処理装置。
【請求項２】
前記ＢＩＯＳは、
前記データを共有する領域を前記ＯＳが更新できない領域に確保する
請求項１に記載の情報処理装置。
【請求項３】
前記ＢＩＯＳは、
前記アプリケーションが、前記メモリの初期化の処理において、前記データを共有する領域に登録した依頼情報を基に、前記メモリの処理化の処理を実行する
請求項１または２に記載の情報処理装置。
【請求項４】
前記メモリは、
新たに増設された増設メモリである
請求項１ないし３のいずれか１項に記載の情報処理装置。
【請求項５】
前記ＢＩＯＳが、
初期化した前記増設メモリについての情報を前記ＯＳに通知する
請求項４に記載の情報処理装置。
【請求項６】
ＢＩＯＳが、
ＯＳ上で動作するアプリケーションとデータを共有する領域を確保し、前記データを共有する領域にメモリの初期化のため情報を設定し、
アプリケーションが、
前記初期化のための情報を基に前記メモリの初期化の処理の少なくとも一部を実行する
情報処理方法。
【請求項７】
ＯＳ上で動作するアプリケーションとデータを共有する領域を確保し、前記データを共有する領域にメモリの初期化のため情報を設定するＢＩＯＳの処理と、
前記初期化のための情報を基に前記メモリの初期化の処理の少なくとも一部を実行するアプリケーションの処理と
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置（例えば、サーバのようなコンピュータ）に関し、特に、データの共有に関する。
【背景技術】
【０００２】
情報処理装置は、ＯＳ（Operating System）及びＢＩＯＳ（Basic Input Output System）を備え、アプリケーション（アプリケーションソフトウェア：Application Software）を実行する。
【０００３】
ＯＳは、アプリケーションの実行において、メモリを管理する（例えば、特許文献１及び特許文献２を参照）。
【０００４】
ＢＩＯＳは、ＯＳ及びアプリケーションに、ハードウェアの入出力手段を提供する。さらにＢＩＯＳは、情報処理装置の起動処理を実行する。
【０００５】
近年、ＢＩＯＳの拡張として、ＵＥＦＩ（Unified Extensible Firmware Interface）が用いられている（例えば、特許文献３を参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００２−１５７１３３
【特許文献２】特開２００３−３１６６４５
【特許文献３】特開２０１２−０１４６３７
【発明の概要】
【発明が解決しようとする課題】
【０００７】
一般的に、アプリケーションは、ＯＳを介して、ＢＩＯＳとデータをやり取りする。そのため、特許文献１ないし特許文献３に記載の情報処理装置では、ＢＩＯＳと各アプリケーションとは、ＯＳを介さないデータの共有を実現できない。そのため、特許文献１ないし特許文献３に記載の情報処理装置は、ＢＩＯＳとアプリケーションとでの連携動作ができないという問題点があった。
【０００８】
本発明の目的は、上記問題点を解決し、ＢＩＯＳと各アプリケーションとが連携動作できる情報処理装置、及び、情報処理方法を提供することにある。
【課題を解決するための手段】
【０００９】
本発明の情報処理装置は、ＯＳ上の動作するアプリケーションと、前記アプリケーションとデータを共有する領域を前記ＯＳが更新できない領域に確保するＢＩＯＳを含む。
【００１０】
本発明の情報処理方法は、ＯＳ上の動作するアプリケーションとデータを共有する領域を前記ＯＳが更新できない領域に確保する。
【００１１】
本発明のプログラムは、ＯＳの処理と、前記ＯＳ上の動作するアプリケーションの処理と、前記アプリケーションとデータを共有する領域を前記ＯＳが更新できない領域に確保する処理ＢＩＯＳの処理とをコンピュータに実行させる。
【発明の効果】
【００１２】
本発明に基づけば、ＢＩＯＳと各アプリケーションとが連携して動作するとの効果を提供できる。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明における第１の実施形態に係る情報処理装置の機能構成の一例を示すブロック図である。
【図２】図２は、第１の実施形態に係る情報処理装置のハードウェア構成の一例を示すブロック図である。
【図３】図３は、第１の実施形態に係る情報処理装置の動作の一例を示すシーケンス図である。
【図４】図４は、第１の実施形態に係るＢＩＯＳの構成の一例を示すブロック図である。
【図５】図５は、第１の実施形態に係る情報処理装置の他のアプリケーションの動作
【図６】図６は、第２の実施形態に係る情報処理装置の構成の一例を示すブロック図である。
【図７】図７は、第３の実施形態に係る情報処理装置の動作の一例を示すシーケンス図である。
【発明を実施するための形態】
【００１４】
次に、本発明の実施形態について図面を参照して説明する。
【００１５】
なお、各図面は、本発明の実施形態を説明するものである。そのため、本発明は、各図面の記載に限られるわけではない。また、各図面の同様の構成には、同じ番号を付し、その繰り返しの説明を、省略する場合がある。
【００１６】
また、以下の説明に用いる図面において、本発明の説明に関係しない部分の構成については、記載を省略し、図示しない場合もある。
【００１７】
まず、本実施形態の説明において使用する用語について、整理する。
【００１８】
「ＯＳ（Operating System）」とは、情報処理装置で動作するソフトウェアにおいて、アプリケーションに、ハードウェア（例えば、キーボード、ドライブ、ディスプレイ及びプリンタ）を抽象化（共通化）したインタフェースを提供するソフトウェアである。
【００１９】
「カーネル（Kernel）」は、ＯＳにおいて、ハードウェアを管理操作する最も中心的な機能部分である。
【００２０】
「ＢＩＯＳ（Basic Input Output System）」とは、情報処理装置で動作するソフトウェアにおいて、ハードウェア（情報処理装置のハードウェアに加え情報処理装置に接続する外部の機器を含む）に最も近い層のソフトウェアである。ＢＩＯＳは、ＯＳ及びアプリケーションにハードウェアへの入出力手段（サービス）の提供に加え、情報処理装置の運用において必要となる機能を提供する。例えば、ＢＩＯＳは、情報処理装置の起動（ブート：boot）、ハードウェアの初期化を含む制御、電源制御に関する機能など、入出力手段以外のサービスを含んでも良い。なお、ハードウェア、特に外部の装置は、ファームウェアが組み込まれている場合もある。そのため、ＢＩＯＳは、ＯＳとファームウェアとのインタフェースでもある。また、ＢＩＯＳは、後ほど説明するＵＥＦＩ仕様の機能も含む。さらに、ＢＩＯＳは、ＯＳとのインタフェースを変更しない限り、つまりＯＳの動作に影響を与えない限り、ＯＳと独立した機能の拡張及び変更が可能である。
【００２１】
「ファームウェア（Firmware）」とは、ハードウェアに組み込まれたソフトウェアである。
【００２２】
「アプリケーション（Application）」とは、ＯＳ上で動作するソフトウェアである。アプリケーションは、情報処理装置において、利用者又は情報処理装置に接続する他の装置に、各種の機能を提供するソフトウェアである。
【００２３】
「ＡＣＰＩ（Advanced Configuration and Power Interface）」とは、情報処理装置の電源制御に関する規格である。ＡＣＰＩにおいては、ＯＳが電源の管理を主導する。
【００２４】
「ＡＣＰＩ  Ｔａｂｌｅ」とは、ＡＣＰＩにおいて、初期化に必要なデータを保持するテーブルである。
【００２５】
「パース（parse）」とは、情報処理において、文章の文法的な関係の解析、特に、構文の解析である。構文解析をする構成は、「パーサー（parser）」と呼ばれる。
【００２６】
「ＵＥＦＩ（Unified Extensible Firmware Interface）」とは、ＢＩＯＳの拡張として制定されたＥＦＩ（Extensible Firmware Interface）を基に制定された、ＯＳとハードウェア（及びファームウェア）と間（つまり、ＢＩＯＳに相当する機能）のインタフェースの仕様である。
【００２７】
「ＧＵＩＤ（Globally Unique Identifier）」とは、情報処理装置で使用される識別子体系の一つである。ＧＵＩＤは、全世界で同じ値を持つことがないように設定された一意の識別子である。同様の識別子として、「ＵＵＩＤ（Universally Unique Identifier）」がある。
【００２８】
次に、本発明のおける第１の実施形態に係る情報処理装置１０について図面を参照して説明する。
【００２９】
（第１の実施形態）
図１は、本発明における第１の実施形態に係る情報処理装置１０の機能構成の一例を示すブロック図である。
【００３０】
情報処理装置１０は、ＢＩＯＳ１００と、ＯＳ２００と、アプリケーション３００とを含む。
【００３１】
アプリケーション３００は、情報処理装置１０のＯＳ２００上で動作するアプリケーションである。情報処理装置１０は、ＯＳ２００上で動作するアプリケーション３００の数に、制限はない。例えば、情報処理装置１０は、１つ、又は、複数のアプリケーション３００を含んでも良い。図１では、一例として、アプリケーション３０１、アプリケーション３０２、及び、アプリケーション３０３を示す。以下、アプリケーション３０１−３０３に共通する説明においては、アプリケーション３００と言う。
【００３２】
なお、アプリケーション３０１−３０３は、同じアプリケーションでも良く、異なるアプリケーションでも良い。つまり、アプリケーション３０１−３０３は、特に区別する必要はない。
【００３３】
ただし、本実施形態の係るアプリケーション３００は、後ほど説明するように、ＢＩＯＳ１００とデータを共有する仕組みを備える。
【００３４】
そこで、以下の説明では、アプリケーション３０１を用いて説明する。つまり、アプリケーション３０１が、ＢＩＯＳ１００とデータ共有する仕組みを備えるとして説明する。この仕組みは、図１において、ＢＩＯＳ１００とアプリケーション３０１との間の接続４００として示されている。なお、後ほど説明する通り、この仕組みは、ＯＳ２００を介さないため、ＯＳ２００を迂回している。
【００３５】
また、アプリケーション３０１に対する他のアプリケーションとして、アプリケーション３０２を用いて説明する。なお、アプリケーション３０２は、ＢＩＯＳ１００とデータを共有する仕組みを備えていても良く、備えていなくても良い。
【００３６】
ＯＳ２００は、情報処理装置１０のＯＳとして動作する。ＯＳ２００は、特に制限はない。例えば、ＯＳ２００は、Ｗｉｎｄｏｗｓ（登録商標）又はＬｉｎｕｘ（登録商標）でも良い。
【００３７】
ＢＩＯＳ１００は、情報処理装置１０のＢＩＯＳとして動作する。さらに、ＢＩＯＳ１００は、後ほど説明するように、アプリケーション３０１とデータを共有する領域（以下、「共有領域」と言う）を確保し、アプリケーション３０１と確保した領域（共有領域）を共有する仕組みを備える。
【００３８】
なお、ＢＩＯＳ１００の仕様及び機能は、後ほど説明する共有領域に関する機能を除き、特に制限はない。ただし、以下のＢＩＯＳ１００の動作の説明においては、一例として、広く用いられているＵＥＦＩ仕様を参照して説明する。
【００３９】
図２は、第１の実施形態に係る情報処理装置１０のハードウェア構成の一例を示すブロック図である。
【００４０】
情報処理装置１０は、ＣＰＵ（Central Processing Unit）６１０と、ＲＯＭ（Read Only Memory）６２０と、ＲＡＭ（Random Access Memory）６３０と、内部記憶装置６４０と、入出力接続回路（ＩＯＣ：Input Output Circuit）６５０と、ネットワークインターフェース回路（ＮＩＣ：Network Interface Circuit）６８０とを含み、コンピュータを構成している。
【００４１】
ＣＰＵ６１０は、ＲＯＭ６２０及び内部記憶装置６４０からプログラムを読み込む。そして、ＣＰＵ６１０は、読み込んだプログラムに基づいて、ＲＡＭ６３０と、内部記憶装置６４０と、ＩＯＣ６５０と、ＮＩＣ６８０とを制御する。そして、ＣＰＵ６１０は、これらの構成を制御し、図１に示す、ＢＩＯＳ１００と、ＯＳ２００と、アプリケーション３００としての各機能を実現する。ＣＰＵ６１０は、各機能を実現する際に、ＲＡＭ６３０又は内部記憶装置６４０を、プログラムの一時記憶として使用しても良い。
【００４２】
このように、情報処理装置１０は、ＲＯＭ６２０及び内部記憶装置６４０のような非揮発性（non-transitory）メモリ及びＲＡＭ６３０のような揮発性（transitory）メモリを用いて、各機能を実現する。
【００４３】
また、ＣＰＵ６１０は、コンピュータで読み取り可能にプログラムを記憶した記憶媒体７００が含むプログラムを、図示しない記憶媒体読み取り装置を用いて読み込んでも良い。なお、記憶媒体７００は、非揮発性（non-transitory）メモリの一例である。
【００４４】
あるいは、ＣＰＵ６１０は、ＮＩＣ６８０を介して、図示しない外部の装置からプログラムを受け取り、ＲＡＭ６３０に保存し、ＲＡＭ６３０のプログラムを基に各機能を実現しても良い。
【００４５】
さらに、ＣＰＵ６１０は、後ほど説明するアプリケーション３０１が使用する仮想アドレス（論理アドレス）と物理アドレスとの変換するメモリ管理部（ＭＭＵ：Memory Management Unit）を含んでも良い。あるいは、情報処理装置１０は、図示しない動的アドレス変換（ＤＡＴ：Dynamic Address Translation）部を含んでも良い。
【００４６】
ＲＯＭ６２０は、ＣＰＵ６１０が実行するプログラム及び固定的なデータを記憶する。ＲＯＭ６２０は、ＢＩＯＳ１００のプログラムを記憶しても良い。この場合、ＣＰＵ６１０は、ＲＯＭ６２０上のＢＩＯＳ１００のプログラムを実行して、ＢＩＯＳ１００としての機能を実現する。ＲＯＭ６２０は、例えば、Ｐ−ＲＯＭ（Programable-ROM）又はフラッシュＲＯＭである。なお、ＣＰＵ６１０は、ＮＩＣ６８０を介して、図示しない外部装置からＢＩＯＳ１００のプログラムを受信し、プログラムをＲＡＭ６３０に保存し、保存したＢＩＯＳ１００のプログラムを実行して、ＢＩＯＳ１００の機能を実現しても良い。
【００４７】
ＲＡＭ６３０は、ＣＰＵ６１０が実行するプログラム及びデータを一時的に記憶する。ＣＰＵ６１０は、内部記憶装置６４０からＯＳ２００用のプログラム及びアプリケーション３００のプログラムを読み出し、ＲＡＭ６３０に保存して、各プログラムを実行しても良い。この場合、ＣＰＵ６１０は、ＲＡＭ６３０上のＯＳ２００のプログラム及びアプリケーション３００のプログラムを実行して、ＯＳ２００及びアプリケーション３００としての機能を実現する。また、ＣＰＵ６１０は、ＲＡＭ６３０を、共有領域として利用しても良い。ＲＡＭ６３０は、例えば、Ｄ−ＲＡＭ（Dynamic-RAM）である。
【００４８】
内部記憶装置６４０は、情報処理装置１０が長期的に保存するデータ及びプログラムを記憶する。また、内部記憶装置６４０は、ＣＰＵ６１０の一時記憶装置として動作しても良い。内部記憶装置６４０は、例えば、ハードディスク装置、光磁気ディスク装置、ＳＳＤ（Solid State Drive）又はディスクアレイ装置である。
【００４９】
なお、ＣＰＵ６１０は、ＲＡＭ６３０及び内部記憶装置６４０を、情報処理装置１０の仮想アドレス及び物理アドレスに対応する物理メモリ及び仮想メモリとして利用しても良い。
【００５０】
ＩＯＣ６５０は、ＣＰＵ６１０と、入力機器６６０及び表示機器６７０とのデータを仲介する。ＩＯＣ６５０は、例えば、ＩＯインターフェースカード又はＵＳＢ（Universal Serial Bus）カードである。
【００５１】
入力機器６６０は、情報処理装置１０の操作者からの入力指示を受け取る機器である。入力機器６６０は、例えば、キーボード、マウス又はタッチパネルである。
【００５２】
表示機器６７０は、情報処理装置１０の操作者に情報を表示する機器である。表示機器６７０は、例えば、液晶ディスプレイである。
【００５３】
ＮＩＣ６８０は、ネットワークを介した図示しない外部の装置とのデータのやり取りを中継する。ＮＩＣ６８０は、例えば、ＬＡＮ（Local Area Network）カードである。
【００５４】
次に、ＢＩＯＳ１００とアプリケーション３０１とでデータを共有する仕組みについて説明する。
【００５５】
まず、本実施形態の情報処理装置１０の仕組みの説明の前に、本実施形態に関連する方法を説明する。
【００５６】
第１の方法は、「ＡＣＰＩ  Ｔａｂｌｅ」を利用する方法である。
【００５７】
第１の方法において、ＢＩＯＳ１００は、ＡＣＰＩ  Ｔａｂｌｅを利用して、ＯＳ２００及びアプリケーション３０１と、ＡＣＰＩ仕様で定められたデータを共有する。
【００５８】
より具体的には、ＢＩＯＳ１００は、次のようにアプリケーション３０１とデータを共有する。
【００５９】
ＡＣＰＩの仕様において、ＢＩＯＳ１００は、ＡＣＰＩ  Ｔａｂｌｅに、ベンダ固有の情報を含むＴａｂｌｅを追加できる。そこで、ＢＩＯＳ１００は、アプリケーション３０１と共有したいデータを、ベンダ固有の情報としてＴａｂｌｅに追加する。そして、ＢＩＯＳ１００は、この情報を、ＯＳ２００を介して、アプリケーション３０１と共有する。
【００６０】
しかし、ＡＣＰＩ  Ｔａｂｌｅの構文解析（パース）は、ＯＳ２００のカーネルにおいて行われる。そのため、共有したいデータをアプリケーション３０１に引き渡すためには、ＯＳ２００のカーネルが、ＢＩＯＳ１００が追加したＴａｂｌｅを構文解析できることが必要である。ＯＳ２００のカーネルが追加したＴａｂｌｅを構文解析できるためには、ＯＳ２００のカーネルを改造すること、又は、追加したＴａｂｌｅを構文解析（パース）するためのモジュール（ドライバ）をＯＳ２００のカーネルに追加することが必要である。
【００６１】
このように、第１の方法は、ＯＳ２００のカーネルの改造又は新たなモジュールの追加が必要であるとの問題点があった。つまり、第１の方法は、ＯＳ２００を介さないデータの共有を実現できないとの問題点があった。
【００６２】
第２の方法は、ＵＥＦＩ仕様の「ＥＦＩ変数」を利用する方法である。
【００６３】
ＯＳ２００は、ＵＥＦＩ仕様で定められたＥＦＩサービス（ＵＥＦＩ仕様の「SetVariable」及び「GetVariable」）を利用し、ＢＩＯＳ１００と、データ（このデータは、「ＥＦＩ変数」と呼ばれる）をやり取りできる。さらに、アプリケーション３０１は、ＵＥＦＩ仕様の「SetVariable」及び「GetVariable」を使用して、ＢＩＯＳ１００と、ＥＦＩ変数をやり取りができる。さらに、ＥＦＩ変数は、任意のデータを格納できる。
【００６４】
つまり、ＢＩＯＳ１００とアプリケーション３０１とは、「ＥＦＩ変数」を利用して、データを共有できる。
【００６５】
しかし、ＯＳ２００が扱えるＥＦＩ変数のサイズには、ＯＳ２００の仕様に基づく制限がある。例えば、Ｌｉｎｕｘ（登録商標）の上限は、１ＫＢｙｔｅである。そのため、第２の方法は、共有できるデータの量に制限があるとの問題点があった。つまり、第２の方法も、ＯＳ２００に基づく制限があるとの問題点があった。
【００６６】
また、第１の方法及び第２の方法は、アプリケーション３０１とＢＩＯＳ１００との共有データに対して、ＯＳ２００及びアプリケーション３０２（他のアプリケーション）からのアクセス（参照又は更新）を防ぐことができないとの問題点があった。
【００６７】
そこで、本発明のおける第１の実施形態に係る情報処理装置１０は、ＯＳ２００を介さない、つまり、ＯＳ２００の変更及びモジュールの追加を必要とせず、ＯＳ２００の仕様に制限されない、ＢＩＯＳ１００とアプリケーション３０１とのデータの共有する仕組みを提供する。
【００６８】
さらに、情報処理装置１０は、共有データに対するＯＳ２００及び他のアプリケーション３０２からの参照及び更新を防ぐこともできる。
【００６９】
次に、図面を参照して、本実施形態の情報処理装置１０のデータを共有する仕組みについて説明する。
【００７０】
図３は、情報処理装置１０の動作の一例を示すシーケンス図である。
【００７１】
ＢＩＯＳ１００は、情報処理装置１０の起動時に、一般的な起動処理に加え、アプリケーション３０１とデータを共有するための領域（共有領域）をメモリ（例えば、ＲＡＭ６０２）に確保する（Ｓ０１）。なお、情報処理装置１０は、共有領域の確保を、メモリに限る必要はない。例えば、情報処理装置１０は、ＩＯ空間に共有領域を確保しても良い。
【００７２】
そして、ＢＩＯＳ１００は、アプリケーション３０１と共有するために、確保した共有領域のデータを初期設定（例えば、必要なデータを格納し、他の部分を初期化）する（Ｓ０２）。なお、ＢＩＯＳ１００は、初期設定後は、いつでも、データを格納及び更新しても良い。
【００７３】
ＢＩＯＳ１００は、起動処理後、ＯＳ２００を起動する（Ｓ０３）。
【００７４】
ＯＳ２００は、起動中に、メモリマップを取得するために、ＢＩＯＳ１００にメモリマップを問い合わせる（Ｓ０４）。
【００７５】
ＢＩＯＳ１００は、メモリマップをＯＳ２００に報告する。その際、ＢＩＯＳ１００は、上記の共有領域を、ＯＳ２００が変更できない領域又はアクセスできない領域（以下、まとめ「変更禁止領域」と言う）として報告する（Ｓ０５）。
【００７６】
例えば、ＵＥＦＩ仕様において、ファームウェア用の領域（ＵＥＦＩ仕様では「EfiACPIMemoryNVS」）は、ＯＳ２００からデータを変更しない領域として定められている。そこで、ＢＩＯＳ１００は、共有領域を、ＵＥＦＩ仕様のファームウェア用の領域として報告しても良い。
【００７７】
ＯＳ２００は、変更禁止領域のデータを変更しない。さらに、ＯＳ２００は、アプリケーション３００から要求されても変更禁止領域のデータを変更しないように制御する。したがって、アプリケーション３００は、ＯＳ２００を介して共有領域をアクセスできない。ただし、後ほど説明するように、アプリケーション３０１は、ＯＳ２００を介さずに、ＢＩＯＳ１００との共有領域をアクセスできる。一方、ＢＩＯＳ１００が、共有領域を変更禁止領域としてＯＳ２００に通知するため、アプリケーション３０２（及びアプリケーション３０３）は、ＢＩＯＳ１００とアプリケーション３０１との共有領域にアクセスできない。
【００７８】
次に、ＯＳ２００は、アプリケーション３０１を起動する（Ｓ０６）。
【００７９】
起動されたアプリケーション３０１は、ＯＳ２００に使用する物理アドレスを問い合わせる（Ｓ０７−１）。
【００８０】
ＯＳ２００は、物理アドレスの問い合わせを、ＢＩＯＳ１００に通知する（Ｓ０７−２）。
【００８１】
ＢＩＯＳ１００は、物理アドレスを、ＯＳ２００に返却する（Ｓ０８−１）。
【００８２】
ＯＳ２００は、物理アドレスを、アプリケーション３０１に返却する（Ｓ０８−２）。
【００８３】
ただし、本実施形態のＢＩＯＳ１００及びアプリケーション３０１は、ＢＩＯＳ１００とアプリケーション３０１との共有領域の物理アドレスを、アプリケーション３０１には通知し、アプリケーション３０２には通知しない仕組みを備える。
【００８４】
この仕組みについて詳細に説明する。
【００８５】
図４は、第１の実施形態のＢＩＯＳ１００の構成の一例を示すブロック図である。
【００８６】
ＢＩＯＳ１００は、物理アドレスの配布及び配布に関する通知を管理している。
【００８７】
そのため、ＢＩＯＳ１００は、アドレス提供部１１０と、情報提供部１２０とを含む。
【００８８】
アドレス提供部１１０は、アプリケーション３０１に、物理アドレスを通知する（以下、この機能を「アドレス提供サービス」と言う）。
【００８９】
ただし、アプリケーション３０１が、ＢＩＯＳ１００のアドレス提供サービスを利用するためには、ＢＩＯＳ１００に所定の情報（以下、「取得用情報」と言う）の通知が必要である。
【００９０】
したがって、アプリケーション３０１は、物理アドレスを取得する前に、ＢＩＯＳ１００から取得用情報を取得することが必要である。
【００９１】
情報提供部１２０は、アプリケーション３０１からの問い合わせに対して、取得用情報を提供する（以下、この機能を「情報提供サービス」と言う）。
【００９２】
つまり、アプリケーション３０１は、ＢＩＯＳ１００の情報提供サービスを利用して、取得用情報を取得する。そして、アプリケーション３０１は、取得用情報を用いて、ＢＩＯＳ１００のアドレス提供サービスを利用し、物理アドレスを取得する。
【００９３】
具体例として、ＵＥＦＩ仕様を用いて、この動作をより詳細に説明する。
【００９４】
ＵＥＦＩ仕様では、ＢＩＯＳ１００からアプリケーション３０１に情報を通知する仕組みとして、「GetVariableサービス」が、規定されている。つまり、ＵＥＦＩ仕様の場合、「GetVariableサービス」が、「アドレス提供サービス」に相当する。
【００９５】
そして、ＵＥＦＩ仕様において、「GetVariableサービス」の利用には、「ＥＦＩ変数の名前」と「ＧＵＩＤ」が必要である。つまり、ＵＥＦＩ仕様の場合、「ＥＦＩ変数の名前」と「ＧＵＩＤ」が、本実施形態の「取得用情報」に相当する。
【００９６】
そして、ＵＥＦＩ仕様では、「ＥＦＩ変数名」と「ＧＵＩＤ」を取得するサービスとして、「GetNextVariableName」サービスが、規定されている。つまり、ＵＥＦＩ仕様の「GetNextVariableName」は、「情報提供サービス」に相当する。
【００９７】
本実施形態の情報提供部１２０は、一般的な領域に関する情報提供サービス（例えば、「GetNextVariableName」）の要求に対しては、取得用情報（例えば、「ＥＦＩ変数の名前」と「ＧＵＩＤ」）を返却する。しかし、情報提供部１２０は、共有領域に関する情報提供サービスの要求に対しては、取得用情報（例えば、「ＥＦＩ変数名」と「ＧＵＩＤ」）を返却しない。
【００９８】
一方、本実施形態のアプリケーション３０１は、予め、ＢＩＯＳ１００と共有する領域に関する取得用情報（例えば、「ＥＦＩ変数名」と「ＧＵＩＤ」）を保持する。そこで、アプリケーション３０１は、保持する取得用情報を用いて、ＢＩＯＳ１００のアドレス取得部に物理アドレスを問い合わせる。ＢＩＯＳ１００は、予め保持している取得用情報とアプリケーション３０１から受信した取得用情報とが一致した場合に、共有領域の物理アドレスをアプリケーション３０１に返却する。
【００９９】
なお、取得用情報は、予め、アプリケーション３０１の作成者又は利用者が、アプリケーション３０１及びＢＩＯＳ１００に保持させれば良い。
【０１００】
例えば、ＵＥＦＩ仕様の場合、アプリケーション３０１は、予め、共有領域に対応する「ＥＦＩ変数名」と「ＧＵＩＤ」を保持する。そして、アプリケーション３０１は、「GetVariableサービス」において、保持する「ＥＦＩ変数名」と「ＧＵＩＤ」をＢＩＯＳ１００に送付し、共有領域の物理アドレスを取得する。
【０１０１】
つまり、アプリケーション３０１は、予め、ＢＩＯＳ１００と共有する領域の物理アドレスを取得するための情報（取得用情報）を保持し、その情報を用いてＢＩＯＳ１００から共有領域の物理アドレスを取得する。
【０１０２】
なお、アプリケーション３０１は、ＢＩＯＳ１００と共有しない領域については、情報提供部１２０から取得用情報を取得し、その情報を用いてアドレス提供部１１０から物理アドレスを取得する。
【０１０３】
このような仕組みを基に、情報処理装置１０のＢＩＯＳ１００とアプリケーション３０１は、共有領域のデータを共有できる。そのため、ＢＩＯＳ１００とアプリケーション３００は、連携した動作を実現できる。
【０１０４】
次に、アプリケーション３０２（他のアプリケーション）が、ＢＩＯＳ１００とアプリケーション３０１との共有領域のデータにアクセスできない仕組みを説明する。
【０１０５】
図５は、第１の実施形態に係る情報処理装置１０の他のアプリケーションの動作の一例を示すシーケンス図である。
【０１０６】
図５のＳ０１−Ｓ０６は、図３と同じため、説明を省略する。
【０１０７】
起動されたアプリケーション３０２は、物理アドレスの取得の前に、情報提供部１２０に取得用情報を問い合わせる（Ｓ１７−１）。アプリケーション３０２は、問い合わせに、ＢＩＯＳ１００の情報提供サービス（例えば、ＵＥＦＩ仕様の「GetNextVariableName」）を用いる。
【０１０８】
ＯＳ２００は、取得用情報の問い合わせを、ＢＩＯＳ１００に通知する（Ｓ１７−２）。
【０１０９】
ＢＩＯＳ１００の情報提供部１２０は、取得用情報を、ＯＳ２００に返却する（Ｓ１８−１）。
【０１１０】
ＯＳ２００は、ＢＩＯＳ１００から受け取った取得用情報を、アプリケーション３０２に返却する（Ｓ１８−２）。
【０１１１】
ただし、情報提供部１２０は、既に説明した通り、共有領域に関する取得用情報を返却しない。
【０１１２】
したがって、アプリケーション３０２（他のアプリケーション）は、ＢＩＯＳ１００とアプリケーション３０１との共有領域の取得用情報（例えば、「ＥＦＩ変数名」と「ＧＵＩＤ」）を取得できない。そのため、アプリケーション３０２は、ＢＩＯＳ１００とアプリケーション３０１との共有領域の物理アドレスを取得できない。つまり、アプリケーション３０２は、ＢＩＯＳ１００とアプリケーション３０１との共有領域のデータにアクセス（参照及び更新）できない。
【０１１３】
なお、アプリケーション３０２が、ＢＩＯＳ１００とデータを共有する場合、アプリケーション３０２は、ＢＩＯＳ１００とアプリケーション３０２との共有領域の取得用情報を保持する。したがって、アプリケーション３０２は、保持する取得用情報を用いて、ＢＩＯＳ１００と共有領域のデータを共有できる。
【０１１４】
このような仕組みを基に、情報処理装置１０は、アプリケーション３０２（他のアプリケーション）から、ＢＩＯＳ１００とアプリケーション３０１との共有領域のデータを保護する。
【０１１５】
図３を用いた説明に戻る。
【０１１６】
物理アドレスを取得後、アプリケーション３０１は、共有領域を含む物理アドレスをＯＳ２００に通知して、アプリケーション３０１で使用する仮想アドレス又は論理アドレス（以下、まとめて「仮想アドレス」として説明する）へのマッピングを依頼する（Ｓ０９）。アプリケーション３０１は、例えば、ＯＳ２００のシステムコールを使用して、マッピングを依頼しても良い。
【０１１７】
この動作の具体例として、Ｌｉｎｕｘ（登録商標）を用いて説明する。
【０１１８】
アプリケーション３０１は、受け取った物理アドレスを指定して、Ｌｉｎｕｘ（登録商標）のシステムコールｍｍａｐ（memory map）を実行し、物理アドレスを仮想アドレスにマッピングしても良い。
【０１１９】
ここにおけるＯＳ２００のマッピング機能は、物理アドレスの仮想アドレスへのマッピングであり、ＯＳ２００が管理している領域に関連しない。そのため、ＯＳ２００のマッピング機能は、変更禁止領域となっている共有領域を、仮想アドレスにマッピングできる。
【０１２０】
そして、ＯＳ２００は、マッピングした仮想アドレスをアプリケーション３０１に返却する（Ｓ１０）。
【０１２１】
これ以降、アプリケーション３０１は、仮想アドレスを用いて、共有領域のデータにアクセス（参照及び更新）できる（Ｓ１１−１）。ここで、アプリケーション３０１が、仮想アドレスを用いてアクセスする場合、上記のＭＭＵ又はＤＡＴが、アドレスを変換する。そのため、アプリケーション３０１は、ＯＳ２００を介さすに、共有領域にアクセス可能である。つまり、アプリケーション３０１は、ＯＳ２００の変更禁止領域でも、共有領域としてアクセス可能である。
【０１２２】
一方、ＢＩＯＳ１００は、物理アドレスを用いて、共有領域のデータにアクセス（更新及び参照）できる（Ｓ１１−２）。
【０１２３】
このように、ＢＩＯＳ１００とアプリケーション３０１は、相互に、共有領域をアクセス（参照及び更新）できる。
【０１２４】
そのため、ＢＩＯＳ１００とアプリケーション３０１は、ＯＳ２００を介さずに、連携して動作できる。
【０１２５】
次に、本実施形態の情報処理装置１０の効果について説明する。
【０１２６】
情報処理装置１０は、ＢＩＯＳ１００とアプリケーション３０１とが連携して動作できるとの効果を得ることができる。
【０１２７】
その理由は、次のとおりである。
【０１２８】
情報処理装置１０のＢＩＯＳ１００が、共有領域を確保する。そして、ＢＩＯＳ１００は、共有領域をＯＳ２００が参照及び変更できない領域（変更禁止領域）とする。そして、アプリケーション３０１は、予め保持する共有領域の物理アドレスを取得するための情報（取得用情報）を用いて、ＢＩＯＳ１００から共有領域の物理アドレスを取得する。そして、アプリケーション３０１は、共有領域を含めて仮想アドレスを取得する。そのため、アプリケーション３０１は、共有領域を使用できる。また、ＢＩＯＳ１００は、確保した共有領域を、アクセス可能である。
【０１２９】
このように、ＢＩＯＳ１００とアプリケーション３０１は、ＯＳ２００が参照及び変更できない領域を共有し、連携して動作できるためである。
【０１３０】
さらに、情報処理装置１０は、ＯＳカーネルの改造及び新たなモジュールを必要としないで上記効果を得ることができる。
【０１３１】
その理由は、ＢＩＯＳ１００とアプリケーション３０１とが、ＯＳ２００を介さずに、上記構成を備えて領域を共有できるためである。つまり、情報処理装置１０は、ＯＳ２００に機能を追加しなくても、ＢＩＯＳ１００とアプリケーション３０１とで領域を共有できる仕組みを含むためである。
【０１３２】
さらに、情報処理装置１０は、共有領域のデータ量を、ＯＳ２００の制限を受けないで設定する効果を得ることができる。
【０１３３】
その理由は、次のとおりである。
【０１３４】
本実施形態では、ＢＩＯＳ１００は、ＯＳ２００が管理していない領域に、共有領域を確保する。そのため、共有領域は、ＯＳ２００の仕様に制限されない。つまり、確保された共有領域が、ＯＳ２００が管理する領域でないため、共有領域を仮想アドレスにマッピングするＯＳ２００のマッピング処理は、ＯＳ２００の仕様に制限されないためである。
【０１３５】
さらに、情報処理装置１０は、他のアプリケーションから共有領域を保護する効果を得ることができる。
【０１３６】
その理由は、次のとおりである。
【０１３７】
他のアプリケーション（例えば、アプリケーション３０２）は、ＢＩＯＳ１００とアプリケーション３０１との共有領域に関する「取得用情報」を取得できない。そのため、アプリケーション３０２は、ＢＩＯＳ１００とアプリケーション３０１との共有領域をアクセスできないためである。
【０１３８】
（第２の実施形態）
次に、本発明の第２の実施形態の情報処理装置１１について、図面を参照して説明する。
【０１３９】
図６は、第２の実施形態に係る情報処理装置１１の構成の一例を示すブロック図である。
【０１４０】
図６において、図１と同様の構成には同様の符号を付し、その詳細な説明を省略する。
【０１４１】
図６に示す情報処理装置１１は、ＢＩＯＳ１００と、アプリケーション３０１とを含む。
【０１４２】
ＢＩＯＳ１００は、共有領域をＯＳ２００がアクセスできないように確保する。そのため、図６は、ＯＳ２００を、破線で示した。
【０１４３】
そして、ＢＩＯＳ１００は、所定のサービス（第１の実施形態と同様のアドレス提供サービス）を用いてアプリケーション３０１に共有領域のアドレスを通知し、アプリケーション３０１と共有領域のデータを共有する。
【０１４４】
つまり、本実施形態のＢＩＯＳ１００とアプリケーション３０１は、第１の実施形態のＢＩＯＳ１００とアプリケーション３０１との同様の動作を基に、共有領域のデータを共有する。
【０１４５】
なお、図６に示す第２の実施形態の情報処理装置１１は、本発明の最小構成の一例である。
【０１４６】
このように、図６に示す情報処理装置１１は、第１の実施形態の情報処理装置１０と同様の効果を実現できる。
【０１４７】
その理由は、第２の実施形態のＢＩＯＳ１００及びアプリケーション３０１が、第１の実施形態のＢＩＯＳ１００及びアプリケーション３０１と同様に動作し、所定の領域を共有する。そして、第２の実施形態のＢＩＯＳ１００及びアプリケーション３０１が、その領域を用いて連携した動作を実現できるためである。
【０１４８】
（第３の実施形態）
情報処理装置１０のメモリは、初期化後に使用される。そして、一般的に、ＢＩＯＳ１００が、メモリを初期化する。ただし、ＢＩＯＳ１００の処理は、ＯＳ２００の管理下の処理ではない。そのため、ＯＳ２００が起動後のＢＩＯＳ１００の処理時間は、できるだけ短い方が望ましい。
【０１４９】
ＢＩＯＳ１００が、情報処理装置１０に初期搭載されたメモリを初期化する場合、ＯＳ２００は、ＢＩＯＳ１００での初期化処理後に起動すれば、ＢＩＯＳ１００の処理の影響を受けない。
【０１５０】
ＯＳ２００の起動後でも、メモリを増設したい場合がある。ＯＳ２００の起動後にメモリを増設するためには、ＢＩＯＳ１００が、増設されたメモリを初期化する必要がある。しかし、ＢＩＯＳ１００が、ＯＳ２００の起動後に、メモリの初期化処理を実行することは、ＯＳ２００の動作に影響を与える。そのため、ＯＳ２００の起動後は、メモリの増設ができなかった。
【０１５１】
ただし、メモリの初期化処理は、ＢＩＯＳ１００でなければ実施できない処理と、一般的なアプリケーション（例えば、アプリケーション３０１）で実行できる処理とを含む。
【０１５２】
そこで、本発明の第３の実施形態は、ＢＩＯＳ１００とアプリケーション３００との共有領域を用いた連携動作を用いて、上記問題点を解決し、ＯＳ２００の起動後でもメモリを増設できるようにした。
【０１５３】
以下、本発明に係る第３の実施形態を説明する。
【０１５４】
なお、本実施形態の構成は、第１の実施形態及び第２の実施形態と同様である。そのため、構成の説明を省略し、本実施形態に特有の動作について説明する。なお、構成の説明には、第１の実施形態の情報処理装置１０と同様の構成を参照して説明する。
【０１５５】
本実施形態に係るアプリケーション３０１は、メモリ、特に情報処理装置１０に増設されたメモリを初期化する。そのため、以降は、アプリケーション３０１を初期化アプリケーション３１０として説明する。
【０１５６】
なお、初期化アプリケーション３１０は、本実施形態の動作の開始する前に起動されれば、起動の時期は特に制限はない。例えば、ＯＳ２００が、起動時に、初期化アプリケーション３１０を起動しても良い。そのため、以下の説明では、初期化アプリケーション３１０は、起動済みとして説明する。そして、ＢＩＯＳ１００と初期化アプリケーション３１０とは、領域を共有済みとする。
【０１５７】
まず、情報処理装置１０の利用者が、情報処理装置１０のメモリを増設する。そして、増設後、利用者が、例えば、管理用の装置（ＢＭＣ：Base Management Controller）を操作して、情報処理装置１０にメモリの増設を通知する。その通知を基に、以下で説明する、本実施形態の動作が、開始する。
【０１５８】
図７は、本実施形態に係る情報処理装置１０の動作の一例を示すシーケンス図である。
【０１５９】
まず、通知を基に、ＢＩＯＳ１００は、動作を開始する。なお、動作の開始の手段は、特に制限はない。例えば、ＢＩＯＳ１００は、通知を基に発生したＣＰＵ６１０の割り込みで起動されても良い。
【０１６０】
ＢＩＯＳ１００は、所定の情報を確認し、割り込みの内容を判断する。例えば、ＢＩＯＳ１００は、ＣＰＵ６１０のレジスタ及び図示しない回路の状態を把握すれば良い。そして、増設メモリの初期化と判断した場合、ＢＩＯＳ１００は、共有領域に増設メモリの初期化に必要な情報（以下、「第１のパラメータ」と言う）を格納する（Ｓ２２）。ここで、第１のパラメータは、情報処理装置１０のメモリの仕様に基づいた情報である。例えば、第１のパラメータは、増設メモリの位置（アドレス）、増設メモリに関する回路情報（例えば、増設メモリに対応するメモリコントローラに関する情報）である。
【０１６１】
なお、増設メモリの初期化以外の割り込みの場合、ＢＩＯＳ１００は、その割り込みに対応した動作を実行すれば良い。
【０１６２】
一方、初期化アプリケーション３１０は、起動後、共有領域を常に監視している。例えば、初期化アプリケーション３１０は、定期的に共有領域をポーリングする。そして、第１のパラメータの書き込みを検出すると、初期化アプリケーション３１０は、第１のパラメータを用いてメモリを初期化する（Ｓ２３）。
【０１６３】
初期化処理の中で、ＢＩＯＳ１００に依頼が必要な処理が発生した場合、初期化アプリケーション３１０は、ＢＩＯＳ１００の依頼するための情報（以下、「第２のパラメータ」と言う）を共有領域に設定する（Ｓ２４）。ここで、ＢＩＯＳ１００に依頼が必要な処理とは、例えば、Ｐｅｎｔｉｕｍ（登録商標）  ＣＰＵのＳＭＭ（System Management Mode）の処理である。
【０１６４】
そして、初期化アプリケーション３１０は、ＢＩＯＳ１００に処理を依頼する（Ｓ２５）。なお、この処理の依頼の手段は、特に制限はない。例えば、初期化アプリケーション３１０は、Ｐｅｎｔｉｕｍ（登録商標）  ＣＰＵのＳＭＩ（System Management Interrupt）を用いても良い。
【０１６５】
ＢＩＯＳ１００は、第２のパラメータを用いて、メモリの初期化の処理を実行する（Ｓ２６）。
【０１６６】
ＢＩＯＳ１００は、処理の終了後、結果を共有領域に設定し、処理を初期化アプリケーション３１０に戻す（Ｓ２７）。
【０１６７】
初期化アプリケーション３１０は、ＢＩＯＳ１００の処理後、初期化処理を継続する。
【０１６８】
初期化アプリケーション３１０は、初期化に必要な処理（自分で実行する初期化処理（Ｓ２３）及びＢＩＯＳ１００に依頼する処理（Ｓ２６））が終了すると、つまり、メモリの初期化が完了すると、必要な情報を共有領域に設定する（Ｓ２８）。
【０１６９】
そして、初期化アプリケーション３１０は、処理をＢＩＯＳ１００に戻す（Ｓ２９）。この処理として、初期化アプリケーション３１０は、例えば、ＳＭＩを用いても良い。
【０１７０】
ＢＩＯＳ１００は、共有領域の情報を基に初期化の終了を検出し、ＯＳ２００がメモリを組み込むための情報を設定する（Ｓ３０）。例えば、ＡＣＰＩ  Ｔａｂｌｅを用いる場合、ＢＩＯＳ１００は、ＡＣＰＩ  ＴａｂｌｅのＤＳＤＴ（Differentiated System Description Table)に所定の値を設定する。
【０１７１】
そして、ＢＩＯＳ１００は、処理をＯＳ２００に戻す（Ｓ３１）。例えば、ＡＣＰＩ仕様の場合、ＢＩＯＳ１００は、Ｎｏｔｉｆｙ処理を実行する。つまり、ＢＩＯＳ１００は、処理のＢＩＯＳ１００及び初期化アプリケーション３１０との連携動作の結果をＯＳ２００に通知する。
【０１７２】
ＯＳ２００は、ＢＩＯＳ１００が設定した情報（例えば、ＡＣＰＩ  Ｔａｂｌｅ）を基に、増設メモリをシステムに組み込む（Ｓ３２）。
【０１７３】
なお、初期化アプリケーション３１０は、初期化処理において障害（エラー）を検出した場合、処理をＢＩＯＳ１００に戻しても良い。
【０１７４】
次に、本実施形態の効果について説明する。
【０１７５】
本実施形態の情報処理装置１０は、ＯＳ２００の起動後でも、メモリを増設できる効果を得ることできる。
【０１７６】
その理由は、次のとおりである。
【０１７７】
ＢＩＯＳ１００は、共有領域に、増設メモリの初期化に必要な情報を設定し、初期化アプリケーション３１０に、増設メモリの初期化の処理を依頼する。初期化アプリケーション３１０は、共有領域の情報を基に、ＢＩＯＳ１００でなければできない処理を除いて、メモリの初期化処理を実行する。
【０１７８】
初期化アプリケーション３１０は、ＯＳ２００の管理下で動作している。そのため、初期化アプリケーション３１０は、処理の時間が長くても、ＯＳ２００の処理に影響を与えない。一方、ＢＩＯＳ１００は、ＢＩＯＳ１００でなければできない処理を除き、初期化処理を実行しない。つまり、ＢＩＯＳ１００の処理時間は、短い。
【０１７９】
このように、本実施形態は、ＢＩＯＳ１００とアプリケーション３００との共有領域を用いて、ＯＳ２００への影響を低減したメモリの初期化を実現できる。そのため、本実施形態は、ＯＳ２００の起動後でもメモリを増設できる効果を得ることができる。
【０１８０】
なお、本実施形態の説明において、増設されたメモリを処理の対象とした。しかし、本実施形態は、これに限る必要はない。例えば、本実施形態は、初期搭載のメモリを対象に動作しても良い。あるいは、本実施形態は、ＩＯカードなどの外部記憶媒体の初期化又は外部装置の初期化を対象に動作しても良い。
【０１８１】
また、本実施形態に係る情報処理装置１０は、図示していない、初期化対象のメモリを制御するためのメモリコントローラ、及び／又は、メモリのデータを一時保存するメモリバッファを含んでも良い。
【０１８２】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成及び詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０１８３】
１０    情報処理装置
１１    情報処理装置
１００    ＢＩＯＳ
１１０    アドレス提供部
１２０    情報提供部
２００    ＯＳ
３００    アプリケーション
３０１    アプリケーション
３０２    アプリケーション
３０３    アプリケーション
３１０    初期化アプリケーション
４００    接続
６１０    ＣＰＵ
６２０    ＲＯＭ
６３０    ＲＡＭ
６４０    内部記憶装置
６５０    ＩＯＣ
６６０    入力機器
６７０    表示機器
６８０    ＮＩＣ
７００    記憶媒体
【図１】
0005867638.tif 000002
【図２】
0005867638.tif 000003
【図３】
0005867638.tif 000004
【図４】
0005867638.tif 000005
【図５】
0005867638.tif 000006
【図６】
0005867638.tif 000007
【図７】
0005867638.tif 000008