(57)【要約】関数の読み出し先のアドレスに対応する物理メモリのメモリ領域に格納されているデータを、仮想計算機により適切にアクセスできるようにする。仮想計算機システムには、仮想計算機を管理する仮想計算機管理部と、仮想計算機の論理プロセッサとがある。仮想計算機管理部は、物理ＡＰＣＩテーブルに基づいて、論理メモリ領域に論理ＡＰＣＩテーブルを作成する。論理プロセッサは、論理ＡＰＣＩテーブルに含まれる制御メソッド中の所定の関数によるアクセス対象のメモリのメモリ領域のアドレス及びサイズを交換用メモリ領域に格納する。仮想計算機管理部は、交換用メモリ領域からアドレス及びサイズを取得し、対応するメモリ領域のデータを取得し、取得したデータを論理メモリ領域に格納する。論理プロセッサは、論理メモリ領域のデータを取得する。
2013088818.tif 000002
【特許請求の範囲】
【請求項１】
複数の仮想計算機を稼働可能な仮想計算機システムであって、
メモリと、
前記メモリに接続されたプロセッサと
を有し、
前記メモリは、物理ＡＰＣＩ（Advanced Configuration and Power Interface）テーブルを記憶し、
前記プロセッサは、前記仮想計算機を管理する仮想計算機管理部と、前記仮想計算機の論理プロセッサとして動作し、
前記仮想計算機管理部は、
前記物理ＡＰＣＩテーブルに基づいて、前記メモリ中の、前記仮想計算機に割当てられるメモリ領域、である論理メモリ領域に、論理ＡＰＣＩテーブルを作成し、
前記論理プロセッサは、
前記論理ＡＰＣＩテーブルに含まれる制御メソッド中の所定の関数によるアクセス対象の前記メモリのメモリ領域のアドレス及びサイズを交換用メモリ領域に格納し、
前記仮想計算機管理部は、
前記交換用メモリ領域から前記アドレス及び前記サイズを取得し、前記メモリから前記アドレス及び前記サイズに対応するメモリ領域のデータを取得し、
取得した前記データを前記仮想計算機に割当てられた前記論理メモリ領域に格納し、
前記論理プロセッサは、
前記メモリの前記論理メモリ領域のデータを取得する
仮想計算機システム。
【請求項２】
前記仮想計算機管理部は、
前記物理ＡＣＰＩテーブル中の制御メソッドから前記メモリのメモリ領域をアクセスする関数を特定し、
前記論理プロセッサに、前記関数のアクセス対象のメモリ領域のアドレス及びサイズを前記交換用メモリ領域に格納させ、前記交換用メモリ領域から前記アドレス及び前記サイズを取得させるための第１記述と、取得した前記アドレス及び前記サイズに基づいて、前記論理メモリ領域の対応するメモリ領域のデータを取得させるための第２記述とを、前記制御メソッドに追加し、前記第１及び第２記述を追加した制御メソッドを前記論理ＡＣＰＩテーブルに格納し、
前記論理プロセッサは、前記制御メソッドを実行する
請求項１に記載の仮想計算機システム。
【請求項３】
前記仮想計算機管理部は、
前記メモリ領域をアクセスする関数のアクセスするメモリ領域を宣言する記述の直前に、前記第１記述及び前記第２記述を追加する
請求項２に記載の仮想計算機システム。
【請求項４】
前記仮想計算機管理部は、
取得した前記データを格納した前記論理メモリ領域におけるアドレス及びサイズを前記交換用メモリ領域に格納し、
前記論理プロセッサは、
前記交換用メモリ領域から前記アドレス及び前記サイズを取得し、前記アドレス及び前記サイズに基づいて、前記論理メモリ領域から前記データを取得する
請求項１に記載の仮想計算機システム。
【請求項５】
前記仮想計算機管理部は、
前記論理メモリ領域における前記アドレス及び前記サイズに対応するメモリ領域が未使用であるか否かを判定し、当該メモリ領域が未使用である場合には、取得した前記データを当該領域に格納し、当該メモリ領域のアドレス及びサイズを前記交換用領域に格納し、当該メモリ領域が未使用でない場合には、前記論理メモリ領域から空き領域を検出し、当該空き領域に前記データを格納し、当該空き領域のアドレス及びサイズを前記交換用メモリ領域に格納し、
前記論理プロセッサは、
前記交換用メモリ領域から前記アドレス及び前記サイズを取得し、前記アドレス及び前記サイズに基づいて、前記論理メモリ領域から前記データを取得する
請求項１に記載の仮想計算機システム。
【請求項６】
複数の仮想計算機を稼働可能な計算機に実行させるための仮想化機構であって、
メモリに記憶された物理ＡＰＣＩテーブルに基づいて、前記メモリ中の、前記仮想計算機に割当てられるメモリ領域、である論理メモリ領域に、論理ＡＰＣＩテーブルを作成し、
前記論理ＡＰＣＩテーブルに含まれる制御メソッド中の所定の関数によるアクセス対象の前記メモリのメモリ領域のアドレス及びサイズが格納された交換用メモリ領域から、前記アドレス及び前記サイズを取得し、前記メモリから前記アドレス及び前記サイズに対応するメモリ領域のデータを取得し、
取得した前記データを前記仮想計算機に割当てられた前記論理メモリ領域に格納する、
ことを計算機に実行させる仮想化機構。
【請求項７】
前記物理ＡＣＰＩテーブル中の制御メソッドから前記メモリのメモリ領域をアクセスする関数を特定させ、
仮想計算機の論理プロセッサに、前記関数のアクセス対象のメモリ領域のアドレス及びサイズを前記交換用メモリ領域に格納させ、前記交換用メモリ領域から前記アドレス及び前記サイズを取得させるための第１記述と、取得した前記アドレス及び前記サイズに基づいて、前記論理メモリ領域の対応するメモリ領域のデータを取得させるための第２記述とを、前記制御メソッドに追加し、前記第１及び第２記述を追加した制御メソッドを前記論理ＡＣＰＩテーブルに格納する、
ことを計算機に実行させる請求項６に記載の仮想計化機構。
【請求項８】
前記メモリ領域をアクセスする関数のアクセスするメモリ領域を宣言する記述の直前に、前記第１記述及び前記第２記述を追加する
ことを計算機に実行させる請求項７に記載の仮想化機構。
【請求項９】
取得した前記データを格納した前記論理メモリ領域におけるアドレス及びサイズを前記交換用メモリ領域に格納する、
ことを計算機に実行させる請求項６に記載の仮想化機構。
【請求項１０】
前記論理メモリ領域における前記アドレス及び前記サイズに対応するメモリ領域が未使用であるか否かを判定し、当該メモリ領域が未使用である場合には、取得した前記データを当該領域に格納し、当該メモリ領域のアドレス及びサイズを前記交換用領域に格納し、当該メモリ領域が未使用でない場合には、前記論理メモリ領域から空き領域を検出し、当該空き領域に前記データを格納し、当該空き領域のアドレス及びサイズを前記交換用メモリ領域に格納する
ことを計算機に実行させる請求項６に記載の仮想化機構。
【請求項１１】
仮想計算機管理部が、メモリに記憶された物理ＡＰＣＩテーブルに基づいて、前記メモリ中の、仮想計算機に割当てられるメモリ領域、である論理メモリ領域に、論理ＡＰＣＩテーブルを作成し、
前記仮想計算機の論理プロセッサが、前記論理ＡＰＣＩテーブルに含まれる制御メソッド中の所定の関数によるアクセス対象の前記メモリのメモリ領域のアドレス及びサイズを所定の交換用メモリ領域に格納し、
前記仮想計算機管理部が、前記交換用メモリ領域から前記アドレス及び前記サイズを取得し、前記メモリから前記アドレス及び前記サイズに対応するメモリ領域のデータを取得し、
前記仮想計算機管理部が、取得した前記データを前記仮想計算機に割当てられた前記論理メモリ領域に格納し、
前記論理プロセッサが、前記メモリの前記論理メモリ領域のデータを取得する
データ管理方法。
【請求項１２】
前記仮想計算機管理部が、前記物理ＡＣＰＩテーブル中の制御メソッドから前記メモリのメモリ領域をアクセスする関数を特定し、
前記仮想計算機管理部が、前記論理プロセッサに、前記関数のアクセス対象のメモリ領域のアドレス及びサイズを前記交換用メモリ領域に格納させ、前記交換用メモリ領域から前記アドレス及び前記サイズを取得させるための第１記述と、取得した前記アドレス及び前記サイズに基づいて、前記論理メモリ領域の対応するメモリ領域のデータを取得させるための第２記述とを、前記制御メソッドに追加し、前記第１及び第２記述を追加した制御メソッドを前記論理ＡＣＰＩテーブルに格納し、
前記論理プロセッサが、前記制御メソッドを実行する
請求項１１に記載のデータ管理方法。
【請求項１３】
前記仮想計算機管理部が、前記メモリ領域をアクセスする関数のアクセスするメモリ領域を宣言する記述の直前に、前記第１記述及び前記第２記述を追加する
請求項１２に記載のデータ管理方法。
【請求項１４】
前記仮想計算機管理部が、取得した前記データを格納した前記論理メモリ領域におけるアドレス及びサイズを前記交換用メモリ領域に格納し、
前記論理プロセッサが、前記交換用メモリ領域から前記アドレス及び前記サイズを取得し、前記アドレス及び前記サイズに基づいて、前記論理メモリ領域から前記データを取得する
請求項１１に記載のデータ管理方法。
【請求項１５】
前記仮想計算機管理部が、前記論理メモリ領域における前記アドレス及び前記サイズに対応するメモリ領域が未使用であるか否かを判定し、当該メモリ領域が未使用である場合には、取得した前記データを当該領域に格納し、当該メモリ領域のアドレス及びサイズを前記交換用領域に格納し、当該メモリ領域が未使用でない場合には、前記論理メモリ領域から空き領域を検出し、当該空き領域に前記データを格納し、当該空き領域のアドレス及びサイズを前記交換用メモリ領域に格納し、
前記論理プロセッサが、前記交換用メモリ領域から前記アドレス及び前記サイズを取得し、前記アドレス及び前記サイズに基づいて、前記論理メモリ領域から前記データを取得する
請求項１１に記載のデータ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
先行出願の相互参照
本出願が、2011年１2月１3日に出願された日本特許出願２０１１−２７２６２９号に関連しその出願の優先権の利益を主張するもので、その出願の全体の開示が参照により本明細書に援用される。
本発明は、仮想計算機を稼働する仮想計算機システムにおいて、ＡＣＰＩ（Advanced Configuration and Power Interface）テーブルのデータを管理する技術に関する。
【背景技術】
【０００２】
近年、サーバ台数の増加と共に運用に関する複雑さが増加し、運用コストが問題化している。運用コストを低減する技術の一つとして、複数サーバを１台にまとめる仮想計算機システムが注目を集めている。論理分割(ＬＰＡＲ)方式の仮想化では、物理的な計算機資源（ＣＰＵ、主記憶、Ｉ／Ｏなど）を分割し、分割した計算機資源を仮想計算機に対して割り当てる。そのため、ＬＰＡＲ方式では計算機資源の構成によって、仮想計算機の構成も変化する。一方、仮想計算機（ＶＭ）方式では物理的な計算機資源を抽象化して仮想計算機に見せる。そのため、ＶＭ方式では物理計算機の構成に依存せず、仮想計算機の構成は自由に定義できる。【０００３】
ＯＳ（Operating System）が計算機の構成情報を得るための規格としてＡＣＰＩがある。ＡＣＰＩの仕様は非特許文献１において定義されている。非特許文献１においては、ＯＳによってマザーボードデバイスの構成情報の取得を可能にするとともに、デバイスおよびシステム全体の電力管理を可能にするための業界共通のインターフェースが定義されている。【０００４】
ＡＣＰＩの機能は、静的なテーブルと、ＡＣＰＩインタプリタによって実行可能な動的なテーブルとの２種類のＡＣＰＩテーブルを用いて提供される。ＡＣＰＩインタプリタによって実行可能なテーブルは、ＡＭＬ（ACPI Machine Language）によって記述されており、内部には制御メソッドが定義されている。この制御メソッドをＡＣＰＩインタプリタが実行することで、ＯＳがＡＣＰＩの機能を使うことができる。【０００５】
このＡＭＬは、機械語であるため可読性が低く、プログラマがＡＭＬを直接記述するのは困難である。そのため、ＡＣＰＩではＡＳＬ（ACPI Source Language）という可読性が高いソース言語を定義している。プログラマはＡＳＬで記述したソースコードをコンパイルしてＡＭＬを作成することができる。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Advanced Configuration and PowerInterface Specification Revision 4.0a April 5, 2010, 1 Introduction (P21-32)
【発明の概要】
【発明が解決しようとする課題】
【０００７】
仮想化計算機上のＯＳ(以下、ゲストＯＳとする)がＡＣＰＩ機能を使用する場合、仮想計算機に定義されたＡＣＰＩテーブル（以下、論理ＡＣＰＩテーブルとする)にアクセスする。論理ＡＣＰＩテーブルは、仮想計算機が認識する論理的なハードウェアに依存し、仮想化の方式によって作られ方が異なる。【０００８】
ＶＭ方式の仮想化の場合、仮想計算機は、仮想計算機システムの物理的な計算機資源を抽象化して作成される。そのため、仮想計算機が認識する論理ハードウェアと物理ハードウェアとの構造は異なり、論理ＡＣＰＩテーブルは仮想計算機用に独自に定義される。【０００９】
一方、ＬＰＡＲ方式の仮想化では、仮想計算機は、物理計算機資源を分割して作成される。そのため、仮想計算機が認識する論理ハードウェア構成と物理ハードウェア構成とは似ており、論理ＡＣＰＩテーブルは、ファームウェアに定義されているＡＣＰＩテーブル（以下、物理ＡＣＰＩテーブルという）を基に作成される。物理ＡＣＰＩテーブルから構成情報や、ＡＣＰＩ機能を使う制御メソッドを複製して、論理ＡＣＰＩテーブルを作成する。これによって物理計算機と仮想計算機とでは、同じＡＣＰＩ機能を使用する制御メソッドが動作する。例えば、デバイスのバス番号は、物理計算機と、仮想計算機とで等しいため、バス番号を取得する制御メソッドは複製して使用することができる。次に、論理ＡＣＰＩテーブルの仮想計算機と物理計算機とで構成が異なる部分を、仮想計算機の構成に合わせて編集する。例えば、仮想計算機に定義できる論理ＣＰＵ数と物理計算機に搭載されている（物理ＡＣＰＩテーブルに定義されている）物理ＣＰＵ数が異なる場合、論理ＡＣＰＩテーブルのＣＰＵ数定義の記述を変更する。【００１０】
メモリ領域にアクセスする制御メソッドの場合には、制御メソッドを複製するだけでは、正常に動作しない。すなわち、制御メソッドがアクセスするメモリ領域にデータが存在しないと、正常なアクセスができない。【００１１】
ＡＣＰＩテーブルからメモリ領域にアクセスする制御メソッドとしては、Ｌｏａｄ関数を含む制御メソッドがある。Ｌｏａｄ関数は、論理ＡＣＰＩテーブル内の制御メソッドで使用されるＡＳＬ関数であり、アドレスとサイズとを指定してメモリ空間からデータをロードするための関数である。【００１２】
ゲストＯＳが、Ｌｏａｄ関数を実行する際、引数として読み出すデータのアドレスとサイズとが必要となる。論理ＡＣＰＩテーブルが、物理ＡＣＰＩテーブルから複製して作成されている場合、Ｌｏａｄ関数が読み出すアドレスは物理ＡＣＰＩテーブルに定義されたＬｏａｄ関数と同じアドレスとなっている。ここで、仮想計算機からメモリ領域にアクセスした場合と、物理計算機上からメモリ領域にアクセスした場合では、同じアドレスにアクセスしても、異なる物理メモリのアドレスにアクセスすることになる。【００１３】
仮想計算機システムでは、複数の仮想計算機が同時に稼動しており、各仮想計算機に対して物理メモリが分割されて割り当てられている。このため、各仮想計算機の物理メモリの開始アドレスは様々となる。一般的に、ＯＳは、メモリ領域がアドレス０番地から始まることを想定して設計されている。そのため、仮想計算機システムでは、仮想計算機上のＯＳがメモリにアクセスする場合、アクセスするアドレスが変換され、物理メモリ上のこの仮想計算機に割り当てられたメモリ領域（論理メモリ領域）にアクセスする作りとなっている。例えば、仮想計算機がアドレス0x1000にアクセスする場合には、この仮想計算機に割り当てられたメモリ領域の開始アドレスが0ｘ10000ならば、実際には、物理メモリの0x11000をアクセスすることとなる。このため、複製した制御メソッドのＬｏａｄ関数がアドレス0x1000をアクセスするものである場合には、物理メモリの0x1000にあるデータと、同じデータが物理メモリの0x11000にないと、仮想計算機においては、正常にＬｏａｄ関数を実行できない。このため、Ｌｏａｄ関数を実行するには、Ｌｏａｄ関数が読み出すデータを仮想計算機の論理メモリのメモリ領域に複製する必要がある。【００１４】
しかし、Ｌｏａｄ関数が読み出すデータのアドレスとサイズとが変数で定義されている場合には、Ｌｏａｄ関数を実行する時点までＬｏａｄ関数が読み出すデータのアドレスとサイズとが決定しない。このため、Ｌｏａｄ関数を実行する前に、固定的にデータを仮想計算機の対応するメモリ領域に複製することができず、Ｌｏａｄ関数を実行できないという問題がある。【００１５】
本発明は、上記課題に鑑みなされたものであり、その目的は、関数の読み出し先のアドレスに対応する物理メモリのメモリ領域に格納されているデータを、仮想計算機により適切にアクセスすることのできる技術を提供することにある。
【課題を解決するための手段】
【００１６】
仮想計算機システムは、メモリと、メモリに接続されたプロセッサとを有し、複数の仮想計算機を稼働可能である。メモリは、物理ＡＰＣＩテーブルを記憶する。プロセッサは、仮想計算機を管理する仮想計算機管理部（例えばハイパバイザ）と、仮想計算機の論理プロセッサとして動作する。仮想計算機管理部は、物理ＡＰＣＩテーブルに基づいて、メモリ中の仮想計算機に割当てられるメモリ領域である論理メモリ領域に論理ＡＰＣＩテーブルを作成し、論理プロセッサは、論理ＡＰＣＩテーブルに含まれる制御メソッド中の所定の関数によるアクセス対象のメモリのメモリ領域のアドレス及びサイズを所定の交換用メモリ領域に格納し、仮想計算機管理部は、交換用メモリ領域からアドレス及びサイズを取得し、メモリからアドレス及びサイズに対応するメモリ領域のデータを取得し、取得したデータを仮想計算機に割当てられた論理メモリ領域に格納し、論理プロセッサは、メモリの論理メモリ領域のデータを取得する。
【発明の効果】
【００１７】
物理ＡＣＰＩテーブルから論理ＡＣＰＩテーブルを作成する仮想計算機システムにおいて、所定の関数で読み出すデータを物理ＡＣＰＩテーブルから論理ＡＣＰＩテーブル内に複製するので、関数の読み出すデータのアドレスとサイズとが変数で定義されていても、論理ＡＣＰＩテーブルからデータを適切に読み出すことができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、実施形態に係る仮想計算機システムの構成図である。
【図２】図２は、実施形態に係る仮想計算機システムにおけるＡＣＰＩの概要を示す図である。
【図３】図３は、従来例に係るＬｏａｄ関数を含む制御メソッドの一例を示す図である。
【図４】図４は、実施形態に係るＬｏａｄ関数を含む制御メソッドの一例を示す図である。
【図５】図５は、実施形態に係るＬｏａｄ関数実行時の処理概要を示す図である。
【図６】図６は、非仮想計算機システムでのメモリマップの一例を示すである。
【図７】図７は、実施形態に係る仮想計算機システムでのメモリマップの一例を示す図である。
【図８】図８は、実施形態に係る制御メソッド実行処理のフローチャートである。
【図９】図９は、実施形態に係る制御メソッド編集処理のフローチャートである。
【発明を実施するための形態】
【００１９】
一実施形態を、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００２０】
なお、以下の説明では、プログラム、又は、プログラムのモジュールを主語として処理を説明する場合があるが、プログラムやプログラムモジュールは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インタフェースデバイスを用いながら行うため、処理の主語がプロセッサとされてもよい。プログラム、プログラムモジュールを主語として説明された処理は、プロセッサ或いはそのプロセッサを有する装置やシステム（例えば、仮想計算機システム）が行う処理としても良い。プログラムは、プログラムソースからインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
【００２１】
図１は、実施形態に係る仮想計算機システムの構成図である。
【００２２】
仮想計算機システムは、物理資源１００を備える。物理資源１００は、1以上の物理ＣＰＵ１０１、1以上の物理メモリ１０２を備える。仮想計算機システムでは、物理資源１００を用いて、複数の仮想計算機１０５を定義し、稼働させることができる。仮想計算機１０５は、論理資源として、論理ＣＰＵ１０６、論理メモリ１０７を備える。論理ＣＰＵ１０６は、1以上の物理ＣＰＵ１０１の能力が論理的に分割されたものである。論理メモリ１０７は、1以上の物理メモリ１０２の一部であり、1以上の物理メモリ１０２が論理的に分割して生成される。具体的には、論理メモリ１０７は、1以上の物理メモリ１０２の一部のアドレス空間に対応する記憶領域（論理メモリ領域）を有する。仮想計算機１０５においては、論理資源の上でゲストＯＳ１０８が動作する。すなわち、論理ＣＰＵ１０６がゲストＯＳ１０８を実行する。
【００２３】
物理資源１００上では、ハイパバイザ１０３が起動される。ハイパバイザ１０３は、物理ＣＰＵ１０１が物理メモリ１０２のハイパバイザプログラムを実行することにより構成される。ハイパバイザ１０３は、仮想計算機１０５を管理する処理を実行する。本実施形態では、ハイパバイザ１０３は、Ｌｏａｄ関数が実行される際に、データの制御をするＬｏａｄデータ制御部１０４を備える。
【００２４】
図２は、実施形態に係る仮想計算機システムにおけるＡＣＰＩの概要を示す図である。
【００２５】
仮想計算機１０５は、ゲストＯＳ１０８、論理ＡＣＰＩテーブル２０４を備える。ゲストＯＳ１０８は、カーネル２０２、ＡＣＰＩインタプリタ２０３を備える。ゲストＯＳ１０８が制御メソッドを実行する場合には、カーネル２０２からＡＣＰＩインタプリタ２０３に対して制御メソッドの実行を命令する。制御メソッドは、ゲストＯＳ１１８がＡＣＰＩ機能を使うためのオブジェクトであり、ＡＣＰＩインタプリタ２０３によって実行される。ＡＣＰＩインタプリタ２０３は、論理ＡＣＰＩテーブル２０４から該当する制御メソッドの処理内容を示す記述を読み出し、処理を実行する。
【００２６】
ハイパバイザ１０３は、ＡＣＰＩインタプリタ２０６、物理ＡＣＰＩテーブル２０７を備える。物理ＡＣＰＩテーブル２０７は、制御メソッドを格納している。仮想計算機１０５の論理ＡＣＰＩテーブル２０４は、物理ＡＣＰＩテーブル２０７から複製され、仮想計算機１０５の構成に合わせて編集されることにより構成される。
【００２７】
図３は、従来例に係るＬｏａｄ関数を含む制御メソッドの一例を示す図である。図３は、物理ＡＣＰＩテーブル２０７に格納されている制御メソッドの一例である。
【００２８】
制御メソッドの１行目から３行目は、使用する変数を初期化させる記述である。制御メソッドの５行目から１４行目は、ＩＦ、ＥＬＳＥ文で変数ＦＬＡＧの値がＺＥＲＯ(整数の０)でなければ、７行目と８行目の処理を実行させ、変数ＦＬＡＧの値がＺＥＲＯであれば、１２行目と１３行目の処理を実行させる記述である。つまり、この間の記述に対応する処理では、変数ＦＬＡＧの値によって、変数ＡＤＤＲと変数ＳＩＺＥの値が変わる。
【００２９】
制御メソッドの１６行目は、Ｌｏａｄ関数で読み出すメモリの領域の宣言を行う記述である。制御メソッドの１８行目は、Ｌｏａｄ関数を実行させ、開始アドレスＡＤＤＲからＳＩＺＥバイト分のデータをメモリ領域から読み出させるための記述である。この制御メソッドにおいては、１５行目以降の処理の実行まで進まないと、Ｌｏａｄ関数が読み出すデータのアドレス（変数ＡＤＤＲの値）とサイズ（変数ＳＩＺＥの値）が決定しない。
【００３０】
ここで、論理ＡＣＰＩテーブル２０４は、物理ＡＣＰＩテーブル２０７を基に作成される。このため、制御メソッドを単に複製しただけの場合には、物理ＡＣＰＩテーブル２０７の制御メソッドに含まれるＬｏａｄ関数が読み出すデータのアドレスとサイズとは、物理ＡＣＰＩテーブル２０７の記述のままである。
【００３１】
仮想計算機１０５において、この制御メソッドを実行すると、Ｌｏａｄ関数は、論理メモリ１０７の論理ＡＣＰＩテーブル２０４からデータを読み出すこととなるが、論理メモリ１０７の対応する領域に、読み出すべきデータが物理ＡＣＰＩテーブル２０７から複製されていない場合には、データを正常に読み出せない。
【００３２】
そこで、本実施形態では、Ｌｏａｄ関数を適切に実行できるようにするために、ハイパバイザ１０３が、物理ＡＣＰＩテーブル２０７から論理ＡＣＰＩテーブル２０４へＬｏａｄ関数で読み出すデータを複製できるようにしている。この複製処理を実行するために、本実施形態では、ハイパバイザ１０３に、制御メソッドの処理内容の記述を編集する機能と、データを複製する機能とを追加する。
【００３３】
具体的には、ハイパバイザ１０３は、Ｌｏａｄ関数の読み出す領域が宣言される前のステップ（例えば、１つ前のステップ）に、物理ＡＣＰＩテーブル２０７から論理ＡＣＰＩテーブル２０４へデータを複製するための処理の記述を追加する。ここで、Ｌｏａｄ関数が読み出すデータのアドレスとサイズとは、制御メソッドの実行している途中で変化する場合があるため、本実施形態では、Ｌｏａｄ関数の領域が宣言される１ステップ前に複製するための処理が実行されるような記述とする。例えば、図３に示すＬｏａｄ関数を含む制御メソッドの場合には、１４行目に対応する処理になるまで、Ｌｏａｄ関数が読み出すデータのアドレスとサイズとが決定しない。そこで、Ｌｏａｄ関数が読み出すデータの領域を宣言する１ステップ前の１６行目に、Ｌｏａｄ関数が読み出すデータを複製するための処理の記述を追加する。
【００３４】
図４は、実施形態に係るＬｏａｄ関数を含む制御メソッドの一例を示す図である。図４は、図３に示す制御メソッドに対してデータの複製するための処理の記述を追加する編集をした後の制御メソッドの例を示す。この制御メソッドは、仮想計算機１０５の論理メモリ１０７に格納される。
【００３５】
制御メソッドの１行目から１４行目の記述は、図３の制御メソッドの１行目から１４行目の記述と同じである。制御メソッドの１６行目と１７行目とは、Ｌｏａｄ関数が読み出すデータのメモリ領域のアドレスとサイズとの値を、仮想計算機１０５とハイパバイザ１０３との間でアドレスとサイズとを通知するためのメモリ領域（以下アドレス・サイズ通知用メモリ領域５１１（図５参照）という）に書き込む処理を行う記述である。アドレス・サイズ通知用メモリ領域５１１は、論理メモリ１０７に与えられたメモリ領域以外の物理メモリ１０２のメモリ領域である。このアドレス・サイズ通知用メモリ領域５１１は、仮想計算機１０５の論理ＣＰＵ１０６によりアクセスできるようなっている。ハイパバイザ１０３は、アドレス・サイズ通知用メモリ領域５１１へのアドレスとサイズとの書き込みを受けて、物理ＡＣＰＩテーブル２０７の対応する領域のデータを読み出す。次に、ハイパバイザ１０３は、読み出したデータを、論理ＡＣＰＩテーブル２０４に書き込み、論理ＡＣＰＩテーブル２０４内に書き込んだデータのアドレスとサイズとをアドレス・サイズ通知用メモリ領域５１１に書き込む。ここで、書き込むアドレスは、対応する仮想計算機１０５における論理メモリ１０７内におけるアドレスである。
【００３６】
制御メソッドの１９行目と２０行目の記述は、アドレス・サイズ通知用メモリ領域５１１から論理ＡＣＰＩテーブル２０４に書き込まれたデータのアドレスとサイズとを制御メソッドが取得する処理を行う記述である。この１９行目と２０行目との記述に対応する処理を実行することによって、Ｌｏａｄ関数が読み出すアドレスとサイズが決定する。制御メソッドの２２行目の記述は、Ｌｏａｄ関数が読み出すメモリ領域を宣言する記述である。制御メソッドの２４行目の記述は、Ｌｏａｄ関数を実行させる記述である。
【００３７】
図５は、実施形態に係るＬｏａｄ関数実行時の処理概要を示す図である。
【００３８】
仮想計算機１０５は、ゲストＯＳ１０８と、論理ＡＣＰＩテーブル２０４とを備える。ゲストＯＳ１０８は、ＡＣＰＩインタプリタ２０３を備える。論理ＡＣＰＩテーブル２０４は、名前空間５０９と、データ領域５１０とを備える。名前空間５０９は、制御メソッドの処理内容の記述や、変数値などを保持する空間である。データ領域５１０は、Ｌｏａｄ関数で読み出されるデータを書き込むための領域である。
【００３９】
ハイパバイザ１０３は、アドレス・サイズ通知用メモリ領域５１１、Ｌｏａｄデータ制御部１０４、及び物理ＡＣＰＩテーブル２０７を備える。アドレス・サイズ通知用メモリ領域５１１は、制御メソッド（仮想計算機１０５）と、ハイパバイザ１０３との間で、Ｌｏａｄ関数が呼び出すデータのアドレスとサイズとをやり取りするためのメモリ領域である。アドレス・サイズ通知用メモリ領域５１１は、物理メモリ１０２上の論理メモリ１０７に割当てられた領域以外の領域に、予め確保されている。このアドレス・サイズ通知用メモリ領域５１１は、仮想計算機１０５の論理ＣＰＵ１０６によりアクセスできるようなっている。Ｌｏａｄデータ制御部１０４は、Ｌｏａｄ関数で呼び出すデータを制御する機能部であり、物理ＡＣＰＩテーブル２０７からデータ領域５１０にデータを複製する処理等を行う。
【００４０】
ここで、図４に示す制御メソッドが名前空間５０９に格納されている場合に、当該制御メソッドを実行した際の処理の流れの概要を説明する。
【００４１】
仮想計算機１０５において、ＡＣＰＩインタプリタ２０３が名前空間５０９から制御メソッドが読み出し（ステップ５０１）、読み出した制御メソッドを逐次的に処理する。ここで、図５では、Ｌｏａｄ関数を実行した例を説明するので、Ｌｏａｄ関数の実行と直接関係しない図４に示す制御メソッドの１行目から１５行目の記述に対応する処理の説明は省略する。
【００４２】
ＡＣＰＩインタプリタ２０３は、制御メソッドの１６行目と１７行目との記述に対応する処理を実行することにより、Ｌｏａｄ関数により読み出すデータのアドレスとサイズとをアドレス・サイズ通知用領域５１１に書き込む（ステップ５０２）。
【００４３】
このように、アドレスとサイズとがアドレス・サイズ通知用領域５１１に書き込まれると、ハイパバイザ１０３のＬｏａｄデータ制御部１０４が、アドレス・サイズ通知用領域５１１からＬｏａｄ関数で読み出すデータのアドレスとサイズとを読み出す。ここでのアドレスとサイズとは、ステップ５０２で書き込まれた値である。
【００４４】
次いで、Ｌｏａｄデータ制御部１０４は、取得したアドレスとサイズとを用い、物理ＡＣＰＩテーブル２０７からＬｏａｄ関数で読み出すデータを読み出し（ステップ５０４）、読み出したデータを仮想計算機１０５のデータ領域５１０に書き込む（ステップ５０５）。ここで、データを書き込むデータ領域５１０の開始アドレスとサイズとの決定方法は後述する。
【００４５】
Ｌｏａｄデータ制御部１０４は、データ領域５１０に書き込んだデータのアドレスとサイズとをアドレス・サイズ通知用領域５１１に書き込む（ステップ５０６）。
【００４６】
ＡＣＰＩインタプリタ２０３は、制御メソッドの１９行目と２０行目の記述を実行することにより、アドレス・サイズ通知用領域５１１に書き込まれたアドレスとサイズとを読み出す（ステップ５０７）。
【００４７】
次いで、ＡＣＰＩインタプリタ２０３は、制御メソッドの２２行目の処理を行うことにより、Ｌｏａｄ関数で読み出すメモリの領域の宣言を行い、制御メソッドの２４行目の記述を実行することにより、ステップ５０７で取得したアドレスとサイズとに基づいて、Ｌｏａｄ関数が実行することにより、データ領域５１０に複製されたデータが読み出される（ステップ５０８）。
【００４８】
ここで、仮想計算機システムにおける物理メモリ１０２のメモリマップを説明するにあたり、まず、物理資源上に一つのＯＳが起動する非仮想計算機システムにおける物理メモリのメモリマップについて説明する。
【００４９】
図６は、非仮想計算機システムでのメモリマップの一例を示すである。
【００５０】
非仮想計算機システムでは、図６に示すように、物理ＡＣＰＩテーブル２０７内のＬｏａｄ関数データ６０１に、Ｌｏａｄ関数で読み出す対象となるデータが入っている。Ｌｏａｄ関数データ６０１は、「ＰｈｙＬｏａｄＡｄｄｒ」から「ＰｈｙＬｏａｄＡｄｄｒ＋ＰｈｙＬｏａｄＳｉｚｅ」までの領域に格納されているが、Ｌｏａｄ関数が実行されるまでは、「ＰｈｙＬｏａｄＡｄｄｒ」、「ＰｈｙＬｏａｄＡｄｄｒ＋ＰｈｙＬｏａｄＳｉｚｅ」は、一意に決定しない。「ＰｈｙＬｏａｄＡｄｄｒ」は、物理ＡＣＰＩテーブル２０７内のＬｏａｄ関数データ６０１の開始アドレスであり、「ＰｈｙＬｏａｄＳｉｚｅ」は、物理ＡＣＰＩテーブル２０７内のＬｏａｄ関数データ６０１のサイズである。非仮想計算機システムのＯＳ６０２がＬｏａｄ関数を実行する際には、「ＰｈｙＬｏａｄＡｄｄｒ」及び「ＰｈｙＬｏａｄＡｄｄｒ＋ＰｈｙＬｏａｄＳｉｚｅ」が一意に決定されるので、当該値を用いて、Ｌｏａｄ関数データ６０１から直接データを読み出す。
【００５１】
次に、仮想計算機が稼働する仮想計算機システムでのメモリマップを説明する。
【００５２】
図７は、実施形態に係る仮想計算機システムでのメモリマップの一例を示す図である。
【００５３】
仮想計算機システムでは、物理ＡＣＰＩテーブル２０７内のロード関数データ６０１に、Ｌｏａｄ関数で読み出す対象となるデータが入っている。Ｌｏａｄ関数データ６０１は、「ＰｈｙＬｏａｄＡｄｄｒ」から「ＰｈｙＬｏａｄＡｄｄｒ＋ＰｈｙＬｏａｄＳｉｚｅ」までの領域に格納されているが、Ｌｏａｄ関数が実行されるまでは、「ＰｈｙＬｏａｄＡｄｄｒ」、「ＰｈｙＬｏａｄＡｄｄｒ＋ＰｈｙＬｏａｄＳｉｚｅ」は、一意に決定しない。
【００５４】
仮想計算機１０５は、論理ＡＣＰＩテーブル２０４内にデータ領域５１０、ゲストＯＳ１０８の領域を持つ。論理ＡＣＰＩテーブル２０４は、物理ＡＣＰＩテーブル２０７を基に作成されているので、Ｌｏａｄ関数に記述されているデータのアドレスとサイズとは、それぞれ「ＰｈｙＬｏａｄＡｄｄｒ」と「ＰｈｙＬｏａｄＳｉｚｅ」となっている。ここで、ゲストＯＳ１０８がＬｏａｄ関数を実行する際には、Ｌｏａｄ関数に記述されている「ＰｈｙＬｏａｄＡｄｄｒ」は、仮想計算機１０５上（つまり、論理メモリ１０７）のアドレス（以下、仮想アドレスという）であるため、実際にアクセスされる物理メモリ１０２のアドレスとは異なる。以下、仮想アドレスについて記載する場合のみ仮想アドレスと明記し、明記されていない場合は、物理メモリ１０２のアドレスとする。仮想アドレス「ＰｈｙＬｏａｄＡｄｄｒ」は、仮想計算機１０５に割り当てられた論理メモリ１０７の開始アドレスから「ＰｈｙＬｏａｄＡｄｄｒ」先のアドレスを指し、物理メモリ１０２のアドレスとしては、「0x70000＋ＰｈｙＬｏａｄＡｄｄｒ」となる。なお、ここでは、論理メモリ１０７の開始アドレスを「0x70000」として説明する。
【００５５】
このため、データ領域５１０の開始アドレス「ＬｏｇＬｏａｄＡｄｄｒ」は、「0x70000＋ＰｈｙＬｏａｄＡｄｄｒ」となり、サイズ「ＬｏｇＬｏａｄＳｉｚｅ」は、「ＰｈｙＬｏａｄＳｉｚｅ」となる。「ＬｏｇＬｏａｄＡｄｄｒ」と「ＬｏｇＬｏａｄＳｉｚｅ」とは、Ｌｏａｄ関数データ６０１の「ＰｈｙＬｏａｄＡｄｄｒ」と「ＰｈｙＬｏａｄＳｉｚｅ」とが決まるまで決定されず、固定的に対応するメモリ領域を事前に複製することはできない。
【００５６】
また、既に「0x70000＋ＰｈｙＬｏａｄＡｄｄｒ」から「0x70000＋ＰｈｙＬｏａｄＡｄｄｒ＋ＰｈｙＬｏａｄＳｉｚｅ」までのメモリ領域が使用されていた場合には、当該メモリ領域にデータを複製することができず、この場合には、空き領域にデータを複製して、仮想計算機１０５がＬｏａｄ関数により読み出す仮想アドレスとサイズとを、データを格納したメモリ領域に合わせて変更する必要がある。
【００５７】
次に、実施形態に係る仮想計算機システムにおける処理動作を詳細に説明する。
【００５８】
図８は、実施形態に係る制御メソッド実行処理のフローチャートである。
【００５９】
ここで、論理ＡＣＰＩテーブル２０４には、図４に示すＬｏａｄ関数を含む制御メソッドが格納されているものとして、以下説明する。なお、図４に示す制御メソッドの生成方法は後述する。
【００６０】
仮想計算機１０５のゲストＯＳ１０８が、制御メソッドの実行命令を出すと（ステップ８００（図５のステップ５０１に対応））、実行命令を受けてＡＣＰＩインタプリタ２０３が、論理ＡＣＰＩテーブル２０４内の名前空間５０９から制御メソッドの処理内容を順次読み出す（ステップ８０１）。Ｌｏａｄ関数を含む制御メソッドの場合には、後述する制御メソッドの編集処理により追加された複製処理までの記述に対応する処理（図４に示す１５行目までの記述に対応する処理）は、Ｌｏａｄ関数を実行するための追加処理と関係しないので、ＡＣＰＩインタプリタ２０３によって逐次的に実行される（ステップ８０２）。なお、これらの処理は制御メソッドの編集前の制御メソッド（図３に示す制御メソッド）にある処理である。
【００６１】
次いで、ＡＣＰＩインタプリタ２０３が、制御メソッドの１８，１９行目の記述に基づいて、アドレス・サイズ通知用メモリ領域５１１に、Ｌｏａｄ関数で読み出すデータのアドレスとサイズとを書き込む（ステップ８０３（図５のステップ５０２に対応））。
【００６２】
この後、ハイパバイザ１０３のＬｏａｄデータ制御部１０４によるステップ８０４〜ステップ８０８の処理が実行される。
【００６３】
すなわち、ハイパバイザ１０３のＬｏａｄデータ制御部１０４は、アドレス・サイズ通知用メモリ領域５１１からステップ８０３で書き込まれたアドレスとサイズとを取得する（ステップ８０４（図５のステップ５０３に対応））。
【００６４】
次いで、Ｌｏａｄデータ制御部１０４は、取得したアドレスとサイズとに基づいて、物理ＡＣＰＩテーブル２０７の対応するメモリ領域からデータを読み出す（ステップ８０５（図５のステップ５０４））。
【００６５】
次いで、Ｌｏａｄデータ制御部１０４は、読み出したデータを書き込むためのデータ領域５１０の開始アドレスとサイズとを決定する（ステップ８０６）。ここで、Ｌｏａｄ関数が読み出すデータの仮想アドレスと、仮想計算機１０５に割り当てられた論理メモリ１０７のメモリ領域の開始アドレスとの和に対応するアドレスから、データのサイズ分のメモリ領域が未使用である場合には、Ｌｏａｄデータ制御部１０４は、当該メモリ領域をデータ領域５１０と決定する。一方、当該メモリ領域が既に使用されている場合には、Ｌｏａｄデータ制御部１０４は、仮想計算機１０５の論理メモリ１０７の未使用領域の中で、開始アドレスが一番若く、且つ必要なサイズを確保できるメモリ領域をデータ領域５１０と決定する。
【００６６】
次いで、Ｌｏａｄデータ制御部１０４は、データ領域５１０に、物理ＡＣＰＩテーブル２０７から読み出したデータを書き込み（ステップ８０７）、データ領域５１０のアドレス（仮想アドレス）とサイズとをアドレス・サイズ通知用メモリ領域５１１に書き込む（ステップ８０８）。
【００６７】
次いで、仮想計算機１０５のＡＣＰＩインタプリタ２０３が、制御メソッドの１８，１９行目の記述に基づいて、アドレス・サイズ通知用メモリ領域５１１からデータ領域５１０のアドレスとサイズとを取得し（ステップ８０９）、取得したアドレスとサイズとに基づいて、Ｌｏａｄ関数を実行することにより、論理ＡＣＰＩテーブル２０４から対象のデータを読み出す（ステップ８１０）。
【００６８】
ゲストＯＳ１０８が実行する制御メソッドは、論理ＡＣＰＩテーブル２０４内に定義されており、論理ＡＣＰＩテーブル２０４は、物理ＡＣＰＩテーブル２０７をもとに作成されている。論理ＡＣＰＩテーブル２０４に定義されているＬｏａｄ関数を含む制御メソッドを実行するためには、Ｌｏａｄ関数を実行する前に、読み出すデータを物理ＡＣＰＩテーブル２０７から論理ＡＣＰＩテーブル２０４に複製する必要がある。このとき、Ｌｏａｄ関数が読み出すデータのアドレスとサイズとが変数で定義されていた場合、固定的に対応するデータを複製する複製処理を行うことができない。これに対して、本実施形態では、ステップ８０３でハイパバイザ１０３にＬｏａｄ関数で読み出すアドレスを通知し、ステップ８０４〜ステップ８０８で、Ｌｏａｄ関数が読み出すデータを物理ＡＣＰＩテーブル２０７から論理ＡＣＰＩテーブル２０４へ複製する複製処理を行い、ステップ８０９で、仮想計算機１０５が複製されたデータのアドレスを取得し、ステップ８１０で、仮想計算機１０５がＬｏａｄ関数を実行している。このように、Ｌｏａｄ関数が実行されるステップ８１０の１ステップ前に、物理ＡＣＰＩテーブル２０７から論理ＡＣＰＩテーブル２０４へのデータの複製処理をするようにしている。この時点では、Ｌｏａｄ関数が読み出すアドレスとサイズとが変数で定義されていても一意に決まっており、データの複製処理を適切に実行することが可能である。
【００６９】
ここで、ステップ８０３とステップ８０９とは、本実施形態では、制御メソッドに対して編集処理により追加された記述により実行されている。ＯＳ（ゲストＯＳ１０８）は、起動後にＡＣＰＩテーブル（論理ＡＣＰＩテーブル２０４）が書き換わることを想定した作りになっていないため、制御メソッドの編集処理は、ゲストＯＳ１０８を起動する前、つまり、仮想計算機１０５の作成時に、ハイパバイザ１０３により実施される。
【００７０】
図９は、実施形態に係る制御メソッド編集処理のフローチャートである。
【００７１】
ハイパバイザ１０３は、仮想計算機１０５の生成を開始する（ステップ９０１）。仮想計算機１０５の生成は、ゲストＯＳ１０８の起動前に行われ、論理ＡＣＰＩテーブル２０４などの論理資源の生成が行われる。
【００７２】
ハイパバイザ１０３は、論理ＡＣＰＩテーブル２０４から次の処理対象の制御メソッドを探して取得し（ステップ９０２）、制御メソッド内にＬｏａｄ関数が使われているか否かを調べる（ステップ９０３）。この結果、制御メソッドにＬｏａｄ関数が使われていない場合（ステップ９０３でＮｏ）には、ハイパバイザ１０３は、ステップ９０６に処理を進める。
【００７３】
一方、制御メソッドにＬｏａｄ関数が使われている場合（ステップ９０３でＹｅｓ）には、ハイパバイザ１０３は、制御メソッドへ記述を追加する処理を行う（ステップ９０４、ステップ９０５）。ステップ９０４では、ハイパバイザ１０３は、制御メソッドに、Ｌｏａｄ関数が読み出すデータのアドレスとサイズとをアドレス・サイズ通知用メモリ領域５１１に書き込む処理の記述（図４の制御メソッドでは、１６，１７行目）を追加する。ステップ９０５では、ハイパバイザ１０３は、制御メソッドに、アドレス・サイズ通知用メモリ領域５１１からデータ領域５１０のアドレスとサイズとを取得する処理の記述（図４の制御メソッドでは、１９，２０行目）を追加する。
【００７４】
次いで、ステップ９０６では、ハイパバイザ１０３は、全ての制御メソッドを調べ終わったか否かを判断し、全ての制御メソッドを調べ終わった場合（ステップ９０６でＹｅｓ）には、制御メソッド編集処理を終了する。一方、全ての制御メソッドを調べ終わっていない場合（ステップ９０６でＮｏ）には、ハイパバイザ１０３は、処理をステップ９０２に進め、次の処理対象の制御メソッドについての処理を行う。
【００７５】
以上、一実施形態を説明したが、本発明は、この実施形態に限定されるものでなく、その趣旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【００７６】
例えば、上記実施形態では、Ｌｏａｄ関数を実行する場合を例に説明していたが、本発明はこれに限られず、物理メモリのアドレスで指定されたデータを読み出すＡＭＬ関数であれば、本発明を適用することができる。
【符号の説明】
【００７７】
１００：物理計算機資源、１０１：物理ＣＰＵ、１０２：物理メモリ、１０３：ハイパバイザ、１０４：Ｌｏａｄデータ制御部、１０５：仮想計算機、１０６：論理ＣＰＵ、１０７：論理メモリ、１０８：ゲストＯＳ、２０３：ＡＣＰＩインタプリタ、２０４：論理ＡＣＰＩテーブル、２０７：物理ＡＣＰＩテーブル、５０９：名前空間、５１０：データ領域、５１１：アドレス・サイズ通知用メモリ領域。
【図１】
2013088818.tif 000003
【図２】
2013088818.tif 000004
【図３】
2013088818.tif 000005
【図４】
2013088818.tif 000006
【図５】
2013088818.tif 000007
【図６】
2013088818.tif 000008
【図７】
2013088818.tif 000009
【図８】
2013088818.tif 000010
【図９】
2013088818.tif 000011
【国際調査報告】
2013088818.tif 000012
2013088818.tif 000013
2013088818.tif 000014
2013088818.tif 000015