(57)【特許請求の範囲】
【請求項１】
仮想環境において実行されるプログラムに対して割り当てられるメモリ上の領域を識別するための仮想領域識別情報と前記プログラムを実行する仮想環境に対して割り当てられるメモリ上の領域を識別する実領域識別情報とを前記仮想環境毎に対応付けて管理する領域識別情報管理部と、
前記実領域識別情報が複数の仮想環境に対して重複して割り当てられているか否かを判定する重複判定部と、
前記重複判定部によって前記実領域識別情報が複数の仮想環境に対して重複して割り当てられている場合に、当該実領域識別情報に対応付けて、重複している旨を示す重複情報を管理する重複領域管理部と、
実行時間が割り当てられている切替元の仮想環境から切替先の仮想環境へ切り替える際に、前記切替先の仮想環境に対して割り当てられている前記実領域識別情報を前記領域識別情報管理部から読み出し、読み出した実領域識別情報が複数の仮想環境に対して重複して割り当てられているか否かを前記重複情報を参照して判定し、この読み出した実領域識別情報の内、重複して割り当てられていると判定された実領域識別情報をＴＬＢ処理の対象とするＴＬＢ制御部と
を有することを特徴とするメモリ管理装置。
【請求項２】
仮想環境において実行されるプログラムに対して割り当てられるメモリ上の領域を識別するための仮想領域識別情報と前記プログラムを実行する仮想環境に対して割り当てられるメモリ上の領域を識別する実領域識別情報とを前記仮想環境毎に対応付けて領域識別情報管理部に管理する管理ステップと、
前記実領域識別情報が複数の仮想環境に対して重複して割り当てられているか否かを判定する重複判定ステップと、
前記重複判定ステップによって前記実領域識別情報が複数の仮想環境に対して重複して割り当てられている場合に、当該実領域識別情報に対応付けて、重複している旨を示す重複情報を重複領域管理部に管理する管理ステップと、
実行時間が割り当てられている切替元の仮想環境から切替先の仮想環境へ切り替える際に、前記切替先の仮想環境に対して割り当てられている前記実領域識別情報を前記領域識別情報管理部から読み出し、読み出した実領域識別情報が複数の仮想環境に対して重複して割り当てられているか否かを前記重複情報を参照して判定し、この読み出した実領域識別情報の内、重複して割り当てられていると判定された実領域識別情報をＴＬＢ処理の対象とするＴＬＢ制御ステップと
を含むことを特徴とするメモリ管理方法。
【請求項３】
仮想環境において実行されるプログラムに対して割り当てられるメモリ上の領域を識別するための仮想領域識別情報と前記プログラムを実行する仮想環境に対して割り当てられるメモリ上の領域を識別する実領域識別情報とを前記仮想環境毎に対応付けて領域識別情報管理部に管理する管理手順と、
前記実領域識別情報が複数の仮想環境に対して重複して割り当てられているか否かを判定する重複判定手順と、
前記重複判定手順によって前記実領域識別情報が複数の仮想環境に対して重複して割り当てられている場合に、当該実領域識別情報に対応付けて、重複している旨を示す重複情報を重複領域管理部に管理する管理手順と、
実行時間が割り当てられている切替元の仮想環境から切替先の仮想環境へ切り替える際に、前記切替先の仮想環境に対して割り当てられている前記実領域識別情報を前記領域識別情報管理部から読み出し、読み出した実領域識別情報が複数の仮想環境に対して重複して割り当てられているか否かを前記重複情報を参照して判定し、この読み出した実領域識別情報の内、重複して割り当てられていると判定された実領域識別情報をＴＬＢ処理の対象とするＴＬＢ制御手順と
を含むプログラムをコンピュータ装置に実行させることを特徴とするメモリ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ管理装置、メモリ管理方法及びメモリ管理プログラムに関する。  
【背景技術】
【０００２】
組み込み機器（例えば、携帯電話機）で使用されている中央処理ユニット（Central Processing Unit：以下、単にＣＰＵと称する）の性能が向上し、仮想化して複数オペレーティングシステム（Operating System:以下、単にＯＳと称する）を動作させることが可能となってきた。そのような機器では、パソコンやサーバ用のＣＰＵのように、仮想化のサポートのあるＣＰＵではなく、組み込みに特化したＣＰＵを使用している。つまり、組み込み機器における仮想化は、性能面では可能であるが、機能面ではソフトによる仮想化のサポートが必要な状況にある。
【０００３】
仮想環境で動作するＯＳ(ゲストＯＳ)が、仮想環境ではないときに行っているＴＬＢ(Translation Lookaside Buffer)フラッシュをなくす制御は、仮想化した際に、各ゲストＯＳで何もしなければ、ゲスト間の切り替えでは有効に働かない。その結果、仮想化していないときに比べＴＬＢフラッシュが増加することになる。
【０００４】
例えば、通常、ＯＳのカーネル領域として使用される仮想メモリにおけるグローバルな領域は、ゲストＯＳ間で同じ仮想アドレスに存在する可能性がある。また、プロセス毎のメモリマップをＴＬＢのエントリとしてキャッシュできるようにするＡＳＩＤ(Address Space Identifier)により、ゲスト内のプロセス切り替えではＴＬＢフラッシュの必要はないが、ゲスト間の切り替えでは、ＡＳＩＤが重複した場合、ＴＬＢフラッシュが必要となる。
【０００５】
ＡＳＩＤは、プロセスＩＤに対応付けて使用しているため、ＯＳでは０から順に使用されており、ゲスト間で重複する可能性が高い。さらに、メモリ領域を分類してアクセス保護を可能とするドメインにより、各ＯＳは、カーネル領域やユーザ領域を分けてドメインによるアクセス制御を行っている。
【０００６】
ドメイン重複時には、グローバル領域かＡＳＩＤが同じ場合に、ゲスト間の切り替えでＴＬＢフラッシュが必要となる。特に、グローバル領域は同じドメインであることが多い。
【０００７】
また、ゲストＯＳにおいて、複数ゲストＯＳが存在することを前提に制御を変更することを考えてみる。例えば、ゲストが扱えるＡＳＩＤの最大数を制限すると、ＯＳの扱えるプロセス数を制限することにつながり、如いてはＯＳの設計自体に影響を与えることにつながる。つまり、ゲストＯＳの制御を適切に変更することは非常に難しいと言わざるを得ない。
【０００８】
ゲストＯＳのＡＳＩＤの使用法を変更しないようにするために、ゲストＯＳが使用するＡＳＩＤと実際のＡＳＩＤとの対応表を用意し、ゲストＯＳは自由にＡＳＩＤを使用するが、実際のＡＳＩＤは重複しないように制御する方法が提案されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００９−１５１６５０号公報
【特許文献２】特許第２８２５５５０号公報
【特許文献３】特開平５−３５５９７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、従来技術ではグローバル領域のＴＬＢフラッシュを削減することはできない。
【００１１】
また、従来技術では、ＴＬＢのエントリを管理することにより、実際に使用されているＡＳＩＤを正確に把握し、空いているＡＳＩＤを回収して同じＡＳＩＤを重複して使用する状況を避けている。しかしながら、ＴＬＢのエントリを管理することは、非常に重い処理であり、ＴＬＢフラッシュを削減する意味が薄れてしまう。つまり、ＴＬＢのエントリを管理することは、実際の環境では行えないため、ＡＳＩＤを回収することができず、ＡＳＩＤを重複使用せざるを得ない状況となる。このような状況に対して従来技術では対応できないのが実情である。
【００１２】
開示技術は上記点に鑑みてなされたものであり、その目的とするところは、仮想環境上の制御を極力変更することなく、複数の仮想環境が動作した場合にも、仮想化していないときと同等までＴＬＢフラッシュを抑制するメモリ管理装置等を提供することである。
【課題を解決するための手段】
【００１３】
本願の開示するメモリ管理装置は、一つの態様において、仮想環境において実行されるプログラムに対して割り当てられるメモリ上の領域を識別するための仮想領域識別情報と前記プログラムを実行する仮想環境に対して割り当てられるメモリ上の領域を識別する実領域識別情報とを前記仮想環境毎に対応付けて管理する領域識別情報管理部と、前記実領域識別情報が複数の仮想環境に対して重複して割り当てられているか否かを判定する重複判定部と、前記重複判定部によって前記実領域識別情報が複数の仮想環境に対して重複して割り当てられている場合に、当該実領域識別情報に対応付けて、重複している旨を示す重複情報を管理する重複領域管理部と、実行時間が割り当てられている切替元の仮想環境から切替先の仮想環境へ切り替える際に、前記切替先の仮想環境に対して割り当てられている前記実領域識別情報を前記領域識別情報管理部から読み出し、読み出した実領域識別情報が複数の仮想環境に対して重複して割り当てられているか否かを前記重複情報を参照して判定し、この読み出した実領域識別情報の内、重複して割り当てられていると判定された実領域識別情報をＴＬＢ処理の対象とするＴＬＢ制御部とを有するようにした。
【発明の効果】
【００１４】
本願の開示するメモリ管理装置の一つの態様では、仮想環境上の制御を極力変更することなく、複数の仮想環境が動作した場合にも、仮想化していないときと同等までＴＬＢフラッシュを抑制できるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、メモリ管理装置のハードウェア及びソフトウェア構成を示す説明図である。
【図２】図２は、ＡＳＩＤ変換表のエントリ内容の一例を示す説明図である。
【図３】図３は、実ＡＳＩＤ使用表のエントリ内容の一例を示す説明図である。
【図４】図４は、ドメイン変換表のエントリ内容の一例を示す説明図である。
【図５】図５は、実ドメイン使用表のエントリ内容の一例を示す説明図である。
【図６】図６は、ＡＳＩＤ設定部の処理動作を示すフローチャートである。
【図７】図７は、ドメイン設定部の処理動作を示すフローチャートである。
【図８】図８は、ＡＳＩＤ管理部の処理動作を示すフローチャートである。
【図９】図９は、ＡＳＩＤ制御部の処理動作を示すフローチャートである。
【図１０】図１０は、ドメイン管理部の処理動作を示すフローチャートである。
【図１１】図１１は、ドメイン制御部の処理動作を示すフローチャートである。
【図１２】図１２は、コンテキストスイッチ制御部の処理動作を示すフローチャートである。
【図１３】図１３は、例外処理部の処理動作を示すフローチャートである。
【図１４】図１４は、ＴＬＢフラッシュ制御部の処理動作を示すフローチャートである。
【図１５】図１５は、実施例２のＴＬＢフラッシュ制御部の処理動作を示すフローチャートである。
【図１６】図１６は、実施例３のＴＬＢフラッシュ制御部の処理動作を示すフローチャートである。
【図１７】図１７は、ＴＬＢフラッシュ判断情報の一例を示す説明図である。
【発明を実施するための形態】
【００１６】
以下、図面に基づいて、本願の開示するメモリ管理装置、メモリ管理方法及びメモリ管理プログラムの実施例を詳細に説明する。尚、本実施例により、開示技術が限定されるものではない。
【実施例１】
【００１７】
図１は、メモリ管理装置のハードウェア及びソフトウェア構成を示す説明図である。図１に示すメモリ管理装置１は、ハードウェア構成１０として、メモリ１１、メモリ管理ユニット（Memory Management Unit：以下、単にＭＭＵと称する）１２、ＴＬＢ１３及びＣＰＵ１４を有する。ＣＰＵ１４は、命令を実行することに加え、例外を発生させる。ＭＭＵ１２は、ＡＳＩＤ設定やドメインアクセス設定を実行する部位に相当し、その設定に基づきメモリ１１へのアクセスを実現する。この際、ＭＭＵ１２は、ページテーブルをメモリ１１やＴＬＢ１３から参照する。また、ＴＬＢ１３のフラッシュもＭＭＵ１２にて行う。メモリ１１は、ハイパーバイザやＶＭのソフトウェア等が保持され、ＣＰＵ１４を通じて、ＭＭＵ１２経由でアクセスされる。
【００１８】
更に、メモリ管理装置１は、ソフトウェア構成２０として、仮想環境下でゲストＯＳを動作する複数の仮想マシン（Virtual Machine：以下、単にＶＭと称する）２１と、これら複数のＶＭ２１を管理するハイパーバイザ２２とを有する。
【００１９】
ＶＭ２１は、ＡＳＩＤ設定部３１及びドメイン設定部３２を有する。ＡＳＩＤ設定部３１は、ＶＭ２１上のＯＳが管理しているプロセスに設定される仮想ＡＳＩＤをハイパーバイザ２２に通知する。ドメイン設定部３２は、ＶＭ２１上のＯＳが管理している仮想アドレス空間を構成するページテーブルエントリの変更やドメインアクセス設定をハイパーバイザ２２に通知する。
【００２０】
ＶＭ２１には、ＯＳを修正することなく、そのまま動作可能な完全仮想化と、特権命令をハイパーバイザ２２への呼び出し、すなわちハイパーコールに修正してＯＳを動作させる準仮想化との２種類が存在する。ＶＭ２１からハイパーバイザ２２への通知の仕方も完全仮想化と準仮想化との２種類が存在する。完全仮想化のＶＭ２１の場合は、ＶＭ２１上で特権命令が実行されると、ＣＰＵ１４が例外を発生させるため、その例外によってハイパーバイザ２２への通知が可能である。準仮想化のＶＭ２１の場合は、ハイパーコールでハイパーバイザ２２に通知する。尚、ハイパーコールはソフトウェア割り込み等のＣＰＵ１４の機能を利用して実現される。完全仮想化の場合も、ハイパーコールによる通知が可能である。これらの通知機能を利用して、ＶＭ２１からハイパーバイザ２２に指示を出す。
【００２１】
ハイパーバイザ２２は、ＡＳＩＤ管理部４１、ＡＳＩＤ制御部４２、ＡＳＩＤ変換表４３及び実ＡＳＩＤ使用表４４を有する。図２は、ＡＳＩＤ変換表４３のエントリ内容の一例を示す説明図である。ＡＳＩＤ変換表４３は、ＶＭ２１毎に用意され、ＶＭ２１の仮想ＡＳＩＤとＭＭＵ１２に設定する実ＡＳＩＤとの対応表である。図２に示すＡＳＩＤ変換表４３のエントリ内容は、ＶＭＩＤ４３Ａ、仮想ＡＳＩＤ４３Ｂ、実ＡＳＩＤ４３Ｃ、重複フラグ４３Ｄ、ＴＬＢ要否フラグ４３Ｅ及び使用中フラグ４３Ｆを含む。
【００２２】
ＶＭＩＤ４３Ａは、該当ＶＭ２１を一意に識別するＩＤに相当する。仮想ＡＳＩＤ４３Ｂは、ＶＭ２１上で動作するＯＳにより実行されるプロセス毎の仮想アドレス空間を識別するためのアドレス空間識別情報である。仮想ＡＳＩＤ４３Ｃは、例えば、ＡＲＭプロセッサの場合、０〜２５５を指定可能である。重複フラグ４３Ｄは、当該実ＡＳＩＤを重複割当中の複数の仮想ＡＳＩＤのプロセスがあるか否か、すなわち「有」又は「無」を示すフラグに相当する。ＴＬＢ要否フラグ４３Ｅは、当該プロセスへの切替時にＴＬＢフラッシュが必要であるか否か、すなわち「要」又は「否」を示すフラグに相当する。尚、ＴＬＢ要否フラグ４３Ｅは、当該ＶＭ２１がＴＬＢフラッシュを実行すると、そのＴＬＢフラッシュを「否」に設定するものである。
【００２３】
使用中フラグ４３Ｆは、当該ＶＭ２１のＯＳにて仮想ＡＳＩＤのプロセスが現在使用中であるか否か、すなわち「使用中」又は「未使用」を示すフラグに相当する。ＡＳＩＤ変換表４３は、実ＡＳＩＤに無効な値を設定することで使用中フラグを代用しても良い。尚、ＡＳＩＤ変換表４３は、仮想ＡＳＩＤの最大個数分のテーブル領域を予め準備しても良く、この場合、最大個数分のテーブル領域を確保する必要があるが、仮想ＡＳＩＤを検索する際の作業効率が向上するものである。また、ＡＳＩＤ変換表４３は、有効な仮想ＡＳＩＤのみをリストとして追加するようにしても良い。
【００２４】
図３は、実ＡＳＩＤ使用表４４のエントリ内容の一例を示す説明図である。実ＡＳＩＤ使用表４４は、実ＡＳＩＤの使用状況を管理する。図３に示す実ＡＳＩＤ使用表４４のエントリ内容は、実ＡＳＩＤ４４Ａ、重複フラグ４４Ｂ、使用中フラグ４４Ｃ、重複使用中の仮想マシンリスト４４Ｄを含む。重複フラグ４４Ｂは、実ＡＳＩＤを重複割当中の仮想ＡＳＩＤのプロセスがあるか否か、すなわち「有」又は「無」を示すフラグに相当する。使用中フラグ４４Ｃは、当該実ＡＳＩＤを使用中であるか否か、すなわち「使用中」又は「未使用」を示すフラグに相当する。重複使用中の仮想マシンリスト４４Ｄは、当該実ＡＳＩＤを使用中のＶＭＩＤ及び仮想ＡＳＩＤの組を管理する。
【００２５】
ＡＳＩＤ管理部４１は、ＶＭ２１からＡＳＩＤ割当やＡＳＩＤ削除の指示を得て、このＶＭ２１のＡＳＩＤ変換表４３及び実ＡＳＩＤ使用表４４の内容を更新すると共に、ＶＭ終了時にＶＭ２１に対応するＡＳＩＤ変換表４３を削除する。
【００２６】
ＡＳＩＤ制御部４２は、仮想ＡＳＩＤを実ＡＳＩＤに変換し、実ＡＳＩＤをＭＭＵ１２に対して設定する。ＡＳＩＤ制御部４２は、ＡＳＩＤ変換表４３からＶＭＩＤ及び仮想ＡＳＩＤをキーにエントリを取得し、エントリの重複フラグ４３Ｄが「有」の場合、仮想ＡＳＩＤが重複していると判断する。更に、ＡＳＩＤ制御部４２は、このエントリの実ＡＳＩＤをキーに実ＡＳＩＤ使用表４４からＶＭＩＤ及び仮想ＡＳＩＤの仮想マシンリスト４４Ｄを取得する。更に、ＡＳＩＤ制御部４２は、このリストに対して、ＡＳＩＤ変換表４３からエントリを取得し、このエントリのＴＬＢ要否フラグ４３Ｅを「要」に変更する。
【００２７】
更に、ハイパーバイザ２２は、ドメイン管理部４５、ドメイン制御部４６、ドメイン変換表４７及び実ドメイン使用表４８を有する。図４は、ドメイン変換表４７のエントリ内容の一例を示す説明図である。ドメイン変換表４７は、ＶＭ２１毎に備えられ、ＶＭ２１の仮想ドメインとＭＭＵ１２に設定する際の実ドメインとの対応関係を示す変換表である。図４に示すドメイン変換表４７は、ＶＭＩＤ４７Ａ、仮想ドメイン４７Ｂ、実ドメイン４７Ｃ、アクセス設定４７Ｄ、重複フラグ４７Ｅ、ＴＬＢ要否フラグ４７Ｆ、使用中フラグ４７Ｇ、グローバル４７Ｈ及びローカル４７Ｉを含む。
【００２８】
ＶＭＩＤ４７Ａは、ＶＭ２１を一意に識別するＩＤに相当する。尚、ＶＭＩＤ４７Ａは、ドメイン変換表４７がＶＭ２１毎に保持可能であれば、省略可能である。仮想ドメイン４７Ｂは、ＶＭ２１のＯＳが使用するドメインに相当する。仮想ドメイン４７Ｂは、ＡＲＭプロセッサの場合、０〜１５を指定可能である。実ドメイン４７Ｃは、ハードウェアに設定する際のドメインに相当する。尚、ＡＳＩＤと異なり、同一ＶＭ２１内で異なる仮想ドメインが同一の実ドメインと対応付けられることはない。アクセス設定４７Ｄは、当該仮想ドメイン４７Ｂに対応した実ドメインに対応するメモリ領域のアクセス権限の設定内容を管理する。尚、アクセス権限には、アクセス可、アクセス不可、ページテーブルエントリのフラグに従うといった設定がある。
【００２９】
重複フラグ４７Ｅは、実ドメインを重複割当中の複数の仮想ドメインがあるか否か、すなわち「有」又は「無」を示すフラグに相当する。ＴＬＢ要否フラグ４７Ｆは、当該プロセスへの切替時にＴＬＢフラッシュが必要であるか否か、すなわち「要」又は「否」を示すフラグに相当する。尚、ＴＬＢ要否フラグ４７Ｆは、当該ＶＭ２１がＴＬＢフラッシュを実行すると、そのＴＬＢフラッシュを「否」に設定するものである。使用中フラグ４７Ｇは、当該ＶＭ２１のＯＳにて仮想ドメインが現在使用中であるか否か、すなわち「使用中」又は「未使用」を示すフラグに相当する。ドメイン変換表４７は、実ドメインに無効な値を設定しても良い。
【００３０】
また、グローバル４７Ｈは、仮想ドメインがグローバル領域に使用されている場合に設定し、ローカル４７Ｉは、仮想ドメインがローカル領域に使用されている場合に設定する。尚、グローバル領域又はローカル領域に使用されているか否かは、ページテーブルエントリ内のフラグとして存在し、グローバル領域の場合はＴＬＢ１３にＡＳＩＤと関係なくキャッシュされる。ＴＬＢ１３にキャッシュされる情報は、仮想アドレス、ページサイズ、物理アドレス及びページテーブルエントリのフラグ群に相当する。また、ローカル領域の場合はＴＬＢ１３にＡＳＩＤと関連付けてキャッシュされる。この際、ＴＬＢ１３にキャッシュされる情報は、仮想アドレス、ページサイズ、物理アドレス、ページテーブルエントリ内のフラグ群及びＡＳＩＤに相当する。
【００３１】
尚、ドメイン変換表４７は、仮想ドメインの最大個数分のテーブル領域を予め準備しても良く、この場合、最大個数分のテーブル領域を確保する必要があるが、仮想ドメインを検索する際の作業効率が向上するものである。また、ドメイン変換表４７は、有効な仮想ドメインのみをリストとして追加するようにしても良い。
【００３２】
図５は、実ドメイン使用表４８のエントリ内容の一例を示す説明図である。実ドメイン使用表４８は、実ドメインの使用状況を管理する。図５に示す実ドメイン使用表４８のエントリ内容は、実ドメイン４８Ａ、重複フラグ４８Ｂ、使用中フラグ４８Ｃ、重複使用中の仮想マシンリスト４８Ｄを含む。重複フラグ４８Ｂは、実ドメインを重複割当中の仮想ドメインがあるか否か、すなわち「有」又は「無」を示すフラグに相当する。使用中フラグ４８Ｃは、当該実ドメインを使用中であるか否か、「使用中」又は「未使用」を示すフラグに相当する。重複使用中の仮想マシンリスト４８Ｄは、当該実ドメインを使用中のＶＭＩＤ及び仮想ドメインの組を管理する。
【００３３】
ドメイン管理部４５は、ＶＭ２１からドメイン割り当て、ドメイン削除、ドメインアクセス設定、ページテーブルエントリ設定の指示を得て、そのＶＭ２１のドメイン変換表４７及び実ドメイン使用表４８の内容を更新する。更に、ドメイン管理部４５は、ＶＭ２１の終了時に、ＶＭ２１に対応するドメイン変換表４７を削除する。
【００３４】
ドメイン制御部４６は、ＶＭ２１のドメイン変換表４７からドメインアクセス設定を構築し、そのドメインアクセス設定をＭＭＵ１２に対して設定する。ドメイン制御部４６は、ドメイン変換表４７からＶＭＩＤ４７Ａ及び仮想ドメイン４７Ｂをキーにエントリを取得し、エントリの重複フラグ４７Ｅが「有」の場合、仮想ドメインが重複していると判断する。更に、ドメイン制御部４６は、このエントリの実ドメインをキーに実ドメイン使用表４８からＶＭＩＤ及び仮想ドメインの仮想マシンリスト４８Ｄを取得する。更に、ドメイン制御部４６は、このリストに対してドメイン変換表４７からエントリを取得し、このエントリのＴＬＢ要否フラグ４７Ｆを「要」に変更する。
【００３５】
更に、ハイパーバイザ２２は、コンテキストスイッチ制御部４９、ＴＬＢフラッシュ制御部５０及び例外処理部５１を有する。
【００３６】
コンテキストスイッチ制御部４９は、ＶＭ２１間の切替や同一ＶＭ２１内のプロセス切替等のコンテキストスイッチを実行する。更に、コンテキストスイッチ制御部４９は、ＴＬＢフラッシュ制御部５０に対してＴＬＢフラッシュの制御処理の実行を指示する。更に、コンテキストスイッチ制御部４９は、ＡＳＩＤ制御部４２に対して仮想ＡＳＩＤを切替える処理の実行を指示し、ドメイン制御部４６に対してドメインアクセス設定処理の実行を指示する。その後、ＣＰＵ１４のレジスタの入れ替えやページテーブルの置き換え等のコンテキストスイッチの処理を行う。
【００３７】
また、ＴＬＢフラッシュ制御部５０は、ＴＬＢフラッシュの制御処理において、ＴＬＢフラッシュが必要であるか否かを判定し、必要の場合、ＭＭＵ１２に対してＴＬＢフラッシュの命令を発行する。また、例外処理部５１は、ＣＰＵ１４が発生する例外を処理する。
【００３８】
次に、実施例１のメモリ管理装置１の動作について説明する。図６は、ＡＳＩＤ設定部３１の処理動作を示すフローチャートである。ＡＳＩＤ設定部３１は、ＶＭ２１上で動作するＯＳにより実行されるプロセスの管理処理と連動して、ハイパーバイザ２２へ所定の指示を通知する。尚、プロセスの管理としては、プロセス作成、プロセス削除、プロセス切り替え等がある。
【００３９】
図６に示すＡＳＩＤ設定部３１は、プロセスを作成するか否かを判定する（ステップＳ１１）。ＡＳＩＤ設定部３１は、プロセスを作成する場合（ステップＳ１１肯定）、当該プロセスに新たな仮想ＡＳＩＤを割り当てる（ステップＳ１２）。更に、ＡＳＩＤ設定部３１は、仮想ＡＳＩＤの割当を通知すべく、ハイパーバイザ２２のＡＳＩＤ管理部４１を呼び出し（ステップＳ１３）、この処理動作を終了する。
【００４０】
ＡＳＩＤ設定部３１は、プロセスを作成しない場合（ステップＳ１１否定）、プロセスを削除するか否かを判定する（ステップＳ１４）。ＡＳＩＤ設定部３１は、プロセスを削除する場合（ステップＳ１４肯定）、仮想ＡＳＩＤを解放する（ステップＳ１５）。更に、ＡＳＩＤ設定部３１は、仮想ＡＳＩＤの削除を通知すべく、ハイパーバイザ２２のＡＳＩＤ管理部４１を呼び出し（ステップＳ１６）、この処理動作を終了する。
【００４１】
ＡＳＩＤ設定部３１は、プロセスを削除しない場合（ステップＳ１４否定）、プロセスを切替えたか否かを判定する（ステップＳ１７）。ＡＳＩＤ設定部３１は、プロセスを切替える場合（ステップＳ１７肯定）、プロセスの切替処理を行い、切替先プロセスに対応する仮想ＡＳＩＤを取得する（ステップＳ１８）。更に、ＡＳＩＤ設定部３１は、切替先プロセスの仮想ＡＳＩＤを通知すべく、ハイパーバイザ２２のコンテキストスイッチ制御部４９を呼び出し（ステップＳ１９）、この処理動作を終了する。また、ＡＳＩＤ設定部３１は、プロセスを切替えない場合（ステップＳ１７否定）、この処理動作を終了する。
【００４２】
図７は、ドメイン設定部３２の処理動作を示すフローチャートである。ドメイン設定部３２は、ＶＭ２１上で動作するＯＳにより実行される、プロセス毎に作成される仮想アドレス空間のためのページテーブルの作成処理や、ドメインアクセスの設定処理に連動して、ハイパーバイザ２２に指示を通知する。尚、仮想ドメインは、ページテーブルのエントリ内にドメイン番号として設定される。そのページテーブルによってアクセスされるアドレス空間は、そのドメインに属すことになる。ドメインアクセス設定は、ドメイン番号毎にアクセス権を設定するものであり、アクセス不可、アクセス可、ページテーブルのフラグに従うといったアクセス権がドメイン番号毎に設定できる。
【００４３】
図７においてドメイン設定部３２は、使用する新たな仮想ドメインを追加するか否かを判定する（ステップＳ２１）。ドメイン設定部３２は、使用する新たな仮想ドメインを追加する場合（ステップＳ２１肯定）、追加する仮想ドメインのドメイン番号を通知すべく、ハイパーバイザ２２のドメイン管理部４５を呼び出し（ステップＳ２２）、この処理動作を終了する。尚、仮想ドメインをグローバル領域又はローカル領域の一方又は両方で使用するか否かを指定することも可能である。
【００４４】
また、ドメイン設定部３２は、仮想ドメインを追加しなかった場合（ステップＳ２１否定）、使用しなくなった仮想ドメインを削除するか否かを判定する（ステップＳ２３）。ドメイン設定部３２は、使用しなくなった仮想ドメインを削除する場合（ステップＳ２３肯定）、削除する仮想ドメインのドメイン番号を通知すべく、ハイパーバイザ２２のドメイン管理部４５を呼び出し（ステップＳ２４）、この処理動作を終了する。
【００４５】
また、ドメイン設定部３２は、仮想ドメインを削除しなかった場合（ステップＳ２３否定）、ドメインアクセスを設定するか否かを判定する（ステップＳ２５）。ドメイン設定部３２は、ドメインアクセスを設定する場合（ステップＳ２５肯定）、そのドメインアクセスの設定を通知すべく、ハイパーバイザ２２のドメイン管理部４５を呼び出し（ステップＳ２６）、この処理動作を終了する。
【００４６】
更に、ドメイン設定部３２は、ドメインアクセスを設定しない場合（ステップＳ２５否定）、ページテーブルのエントリ内容の修正であるか否かを判定する（ステップＳ２７）。ドメイン設定部３２は、ページテーブルのエントリ内容の修正である場合（ステップＳ２７肯定）、そのエントリ内容をハイパーバイザ２２のドメイン管理部４５に通知し（ステップＳ２８）、この処理動作を終了する。
【００４７】
更に、ドメイン設定部３２は、ページテーブルのエントリ内容の修正でない場合（ステップＳ２７否定）、この処理動作を終了する。
【００４８】
尚、ドメイン設定部３２による仮想ドメインの追加や削除は、ハイパーバイザ２２に通知するように構成したが、ページテーブルエントリからハイパーバイザ２２がドメイン番号を抜き出し、自動的に使用仮想ドメインを追加するようにしても良い。また、ページテーブルエントリのグローバルフラグをチェックすることで仮想ドメインがグローバル領域又はローカル領域で使用されているかを判別できる。このため、仮想ドメインの追加や削除を、ドメイン設定部３２で行わない方法も可能である。
【００４９】
図８は、ＡＳＩＤ管理部４１の処理動作を示すフローチャートである。ＡＳＩＤ管理部４１は、ＶＭ２１のＡＳＩＤ設定部３１又は、ＶＭ２１が終了する際、図示せぬＶＭ管理部からの呼出動作に応じて起動する。尚、ＶＭ管理部は、ハイパーバイザ２２内に配置し、当該ＶＭ２１の生成や終了、ＶＭ２１の切替等を管理するものである。このＶＭ２１の切替とは、一般にスケジューラを使用し、複数のＶＭ２１が存在する場合、一定時間毎に、ＣＰＵ１４を使用する、つまり、実際に動作するＶＭ２１を切替えることである。
【００５０】
図８においてＡＳＩＤ管理部４１は、ＶＭ２１のＡＳＩＤ設定部３１から新たな仮想ＡＳＩＤの割当を検出したか否かを判定する（ステップＳ３１）。ＡＳＩＤ管理部４１は、新たな仮想ＡＳＩＤの割当を検出した場合（ステップＳ３１肯定）、実ＡＳＩＤ使用表４４のエントリ内容を参照し、新たな仮想ＡＳＩＤに対応する実ＡＳＩＤを割り当てると共に、当該仮想ＡＳＩＤに対応したＡＳＩＤ変換表４３を更新し（ステップＳ３２）、この処理動作を終了する。尚、ＡＳＩＤ管理部４１は、実ＡＳＩＤ使用表４４のエントリ内容を参照し、未使用の実ＡＳＩＤを新たな仮想ＡＳＩＤに優先的に割り当てる。その結果、ＡＳＩＤ管理部４１は、実ＡＳＩＤ使用表４４及びＡＳＩＤ変換表４３の実ＡＳＩＤの使用中フラグを「使用中」に設定する。更に、ＡＳＩＤ管理部４１は、実ＡＳＩＤ使用表４４の実ＡＳＩＤに対応する仮想マシンリスト（ＶＭＩＤ及び仮想ＡＳＩＤ）４４Ｄを追加する。
【００５１】
また、ＡＳＩＤ管理部４１は、全ての実ＡＳＩＤが「使用中」の場合、重複していない実ＡＳＩＤ、同一ＶＭ２１が使用していない実ＡＳＩＤ、ＴＬＢ要否フラグが「否」の実ＡＳＩＤ等を割り当てるようにしても良い。また、ＡＳＩＤ管理部４１は、割り当てられた実ＡＳＩＤが重複して割り当てられた場合、実ＡＳＩＤ使用表４４の当該実ＡＳＩＤの重複フラグ４４Ｂを「有」に設定すると共に、ＡＳＩＤ変換表４３の当該実ＡＳＩＤの重複フラグ４３Ｄを「有」に設定する。更に、ＡＳＩＤ管理部４１は、重複しているＶＭ２１の仮想ＡＳＩＤに関し、ＡＳＩＤ変換表４３のＴＬＢ要否フラグ４３Ｅに「要」が存在する場合、対象ＶＭ２１のＡＳＩＤ変換表４３の仮想ＡＳＩＤのＴＬＢ要否フラグ４３Ｅを「要」に設定する。
【００５２】
ＡＳＩＤ管理部４１は、新たな仮想ＡＳＩＤの割当を検出しなかった場合（ステップＳ３１否定）、仮想ＡＳＩＤの削除を検出したか否かを判定する（ステップＳ３３）。ＡＳＩＤ管理部４１は、仮想ＡＳＩＤの削除を検出した場合（ステップＳ３３肯定）、実ＡＳＩＤ使用表４４のエントリ内容を参照し、削除の仮想ＡＳＩＤに対応する実ＡＳＩＤを解放する（ステップＳ３４）。更に、ＡＳＩＤ管理部４１は、当該仮想ＡＳＩＤに対応したＡＳＩＤ変換表４３を更新し（ステップＳ３４）、この処理動作を終了する。
【００５３】
尚、ＡＳＩＤ管理部４１は、削除の仮想ＡＳＩＤに対応するＡＳＩＤ変換表４３の実ＡＳＩＤを無効な値にして使用中フラグ４３Ｆの設定を解除する（未使用）。また、ＡＳＩＤ管理部４１は、重複が設定中の実ＡＳＩＤに対応する実ＡＳＩＤ使用表４４のＶＭＩＤ及び仮想ＡＳＩＤの組を削除し、残りの組が１個の場合、その重複フラグ４４Ｂの設定を解除する（無）。更に、ＡＳＩＤ管理部４１は、残りの組が１個の場合、その組に対応するＡＳＩＤ変換表４３の仮想ＡＳＩＤの重複フラグ４３Ｄの設定を解除する（無）。
【００５４】
ＡＳＩＤ管理部４１は、仮想ＡＳＩＤの削除を検出しなかった場合（ステップＳ３３否定）、ＶＭ管理部からＶＭ終了を検出したか否かを判定する（ステップＳ３５）。ＡＳＩＤ管理部４１は、ＶＭ終了を検出した場合（ステップＳ３５肯定）、当該ＶＭ２１が使用している全ての仮想ＡＳＩＤを解放する（ステップＳ３６）。更に、ＡＳＩＤ管理部４１は、当該ＶＭ２１が使用している全ての仮想ＡＳＩＤを管理するＡＳＩＤ変換表４３を削除し（ステップＳ３６）、この処理動作を終了する。また、ＡＳＩＤ管理部４１は、ＶＭ終了を検出しなかった場合（ステップＳ３５否定）、この処理動作を終了する。
【００５５】
図９は、ＡＳＩＤ制御部４２の処理動作を示すフローチャートである。ＡＳＩＤ制御部４２は、コンテキストスイッチ制御部４９から呼び出されると、設定対象として指定された仮想ＡＳＩＤとその仮想ＡＳＩＤを使用するＶＭ２１を示すＶＭＩＤとを、コンテキストスイッチ制御部４９から引き渡される。
【００５６】
図９においてＡＳＩＤ制御部４２は、コンテキストスイッチ制御部４９から呼び出されると、設定対象として指定された仮想ＡＳＩＤに対応する実ＡＳＩＤをＡＳＩＤ変換表４３のエントリから取得する（ステップＳ４１）。ＡＳＩＤ制御部４２は、実ＡＳＩＤの重複フラグ４３Ｄに基づき、実ＡＳＩＤが重複使用されているか否かを判定する（ステップＳ４２）。ＡＳＩＤ制御部４２は、実ＡＳＩＤが重複使用されている場合（ステップＳ４２肯定）、実ＡＳＩＤ使用表４４に登録されている実ＡＳＩＤに対応する重複使用の仮想マシンリスト４４Ｄ内の重複使用のＶＭＩＤ及び仮想ＡＳＩＤを検索する。更に、ＡＳＩＤ制御部４２は、仮想マシンリスト４４Ｄ内のＶＭＩＤ及び仮想ＡＳＩＤの内、対象ＶＭＩＤ及び対象仮想ＡＳＩＤとは別のＶＭＩＤと仮想ＡＳＩＤの組に対して、ＡＳＩＤ変換表４３に登録されているＡＳＩＤ変換情報を取得する。更に、ＡＳＩＤ制御部４２は、ＡＳＩＤ変換情報を取得すると、ＴＬＢ要否フラグ４３Ｅに「要」を設定する（ステップＳ４３）。そして、ＡＳＩＤ制御部４２は、実ＡＳＩＤをＭＭＵ１２に設定し（ステップＳ４４）、この処理動作を終了する。
【００５７】
更に、ＡＳＩＤ制御部４２は、実ＡＳＩＤが重複使用されていない場合（ステップＳ４２否定）、ＡＳＩＤ変換情報の設定処理を実行せず、実ＡＳＩＤをＭＭＵ１２に設定すべく、ステップＳ４４に移行する。ＡＳＩＤ制御部４２は、ＡＳＩＤ変換情報の重複フラグが「有」の場合、実ＡＳＩＤが重複していると判断し、重複フラグが「無」の場合、実ＡＳＩＤが重複していないと判断する。
【００５８】
図１０は、ドメイン管理部４５の処理動作を示すフローチャートである。ドメイン管理部４５は、ＶＭ２１のドメイン設定部３２又は、ＶＭ２１が終了する際、図示せぬＶＭ管理部からの呼出動作に応じて起動する。図１０においてドメイン管理部４５は、ＶＭ２１のドメイン設定部３１から新たな仮想ドメインの割当を検出したか否かを判定する（ステップＳ５１）。ドメイン管理部４５は、新たな仮想ドメインの割当を検出した場合（ステップＳ５１肯定）、実ドメイン使用表４８のエントリ内容を参照し、新たな仮想ドメインに対応する実ドメインを割り当てる（ステップＳ５２）。
【００５９】
更に、ドメイン管理部４５は、当該仮想ドメインに対応したドメイン変換表４７を更新し（ステップＳ５２）、この処理動作を終了する。尚、ドメイン管理部４５は、実ドメイン使用表４８のエントリ内容を参照し、未使用の実ドメインを新たな仮想ドメインに優先的に割り当てる。その結果、ドメイン管理部４５は、実ドメイン使用表４８及びドメイン変換表４７の実ドメインを使用中に設定し、実ドメイン使用表４８にＶＭＩＤ及び仮想ドメインの組を仮想マシンリスト４８Ｄとして追加する。
【００６０】
また、ドメイン管理部４５は、全ての実ドメインが使用中の場合、重複していない実ドメイン、ＴＬＢ要否フラグ４７Ｆが「否」の実ドメイン又は、グローバル領域に使用されていない実ドメイン等を割り当てるようにしても良い。また、ドメイン管理部４５は、割り当てられた実ドメインが重複して割り当てられた場合、実ドメイン使用表４８の当該実ドメインの重複フラグ４８Ｂを設定すると共に、ドメイン変換表４７の当該実ドメインの重複フラグ４７Ｅを設定する。更に、ドメイン管理部４５は、重複しているＶＭ２１の仮想ドメインに関し、ドメイン変換表４７のＴＬＢ要否フラグ４７Ｆ内に「要」が存在する場合、対象ＶＭ２１のドメイン変換表４７の仮想ドメインのＴＬＢ要否フラグ４７Ｆを「要」に設定する。
【００６１】
また、ドメイン管理部４５は、ＶＭ２１のドメイン設定部３２からグローバル又はローカルが指定されている場合、ドメイン変換表４７のグローバル４７Ｈ又はローカル４７Ｉの設定を指定通り設定する。
【００６２】
ドメイン管理部４５は、新たな仮想ドメインの割当を検出しなかった場合（ステップＳ５１否定）、仮想ドメインの削除を検出したか否かを判定する（ステップＳ５３）。ＡＳＩＤ管理部４１は、仮想ドメインの削除を検出した場合（ステップＳ５３肯定）、実ドメイン使用表４８のエントリ内容を参照し、削除の仮想ドメインに対応する実ドメインを解放する（ステップＳ５４）。更に、ドメイン管理部４５は、当該仮想ドメインに対応したドメイン変換表４７を更新し（ステップＳ５４）、この処理動作を終了する。尚、ドメイン管理部４５は、削除の仮想ドメインに対応するドメイン変換表４７の実ドメインを無効な値にして使用中フラグ４７Ｇの設定を解除する（未使用）。また、ドメイン管理部４５は、重複が設定中の実ドメインに対応する実ドメイン使用表４８のＶＭＩＤ及び仮想ドメインの組を削除し、残りの組が1個の場合、その重複フラグ４８Ｂの設定を解除する（無）。更に、ドメイン管理部４５は、残りの組が1個の場合、その組に対応するドメイン変換表４７の仮想ドメインの重複フラグ４７Ｅの設定を解除する（無）。
【００６３】
ドメイン管理部４５は、仮想ドメインの削除を検出しなかった場合（ステップＳ５３否定）、ドメインアクセスの設定を検出したか否かを判定する（ステップＳ５５）。ドメイン管理部４５は、ドメインアクセスの設定を検出した場合（ステップＳ５５肯定）、仮想ドメイン毎のアクセス設定を読み出し、読み出したアクセス制御の設定をドメイン変換表４７のアクセス設定４７Ｄに更新し（ステップＳ５６）、この処理動作を終了する。
【００６４】
ドメイン管理部４５は、ドメインアクセスの設定を検出しなかった場合（ステップＳ５５否定）、ＶＭ２１のドメイン設定部３２からページテーブルエントリの設定を検出したか否かを判定する（ステップＳ５７）。ドメイン管理部４５は、ページテーブルエントリの設定を検出した場合（ステップＳ５７肯定）、エントリ内のドメイン番号を取得し、そのドメイン番号を仮想ドメインとして、対応する実ドメインをドメイン変換表４７から取得する。更に、ドメイン管理部４５は、ページテーブルエントリのドメイン番号を実ドメインで置き換える（ステップＳ５８）。ドメイン管理部４５は、ページテーブルの領域のドメインを置き換えたエントリを書き込む。このドメインの変換により、ＭＭＵ１２に設定されるドメインとページテーブルのエントリのドメインの整合性が保たれる。
【００６５】
更に、ドメイン管理部４５は、ページテーブルエントリのグローバルフラグを取得し、フラグが設定されている場合、ドメイン変換表４７の仮想ドメインのグローバルフラグ４７Ｈを設定する。また、ドメイン管理部４５は、フラグが設定されていない場合、ドメイン変換表４７の仮想ドメインのローカルフラグ４７Ｉを設定する（ステップＳ５９）。
【００６６】
また、ドメイン管理部４５は、ページテーブルエントリの設定を検出しなかった場合（ステップＳ５７否定）、ＶＭ管理部からＶＭ終了を検出したか否かを判定する（ステップＳ６０）。ドメイン管理部４５は、ＶＭ終了を検出した場合（ステップＳ６０肯定）、当該ＶＭ２１が使用している全ての仮想ドメインを解放する（ステップＳ６１）。更に、ドメイン管理部４５は、当該ＶＭ２１が使用している全ての仮想ドメインを管理するドメイン変換表４７を削除し（ステップＳ６１）、この処理動作を終了する。また、ドメイン管理部４５は、ＶＭ終了を検出しなかった場合（ステップＳ６０否定）、この処理動作を終了する。
【００６７】
図１１は、ドメイン制御部４６の処理動作を示すフローチャートである。図１１においてドメイン制御部４６は、コンテキストスイッチ制御部４９から設定するＶＭ２１を指定して呼び出されると、ドメイン変換表４７から当該ＶＭＩＤに対応する実ドメイン及びアクセス設定を取得する（ステップＳ７１）。ドメイン制御部４６は、実ドメイン及びアクセス設定を取得すると、ＭＭＵ１２に設定するためのドメインアクセス設定を構築する（ステップＳ７２）。尚、ドメインアクセス設定には、当該ＶＭ２１で使用中の実ドメインの他に、当該ＶＭ２１で使用していない実ドメインも必要である。つまり、ドメイン制御部４６は、当該ＶＭ２１が使用中の実ドメインに対するドメインアクセスはアクセス可、当該ＶＭ２１が使用していない実ドメインに対するドメインアクセスはアクセス不可に設定する。
【００６８】
更に、ドメイン制御部４６は、実ドメイン使用表４８を参照して、当該ＶＭ２１が使用中で、かつ、アクセス設定がアクセス不可以外の仮想ドメインの実ドメインが重複使用中であるか否かを判定する（ステップＳ７３）。ドメイン制御部４６は、実ドメインが重複使用中である場合（ステップＳ７３肯定）、対象のＶＭ２１以外の実ドメインに対応する仮想ドメインを実ドメイン使用表４８のＶＭＩＤと仮想ドメインの組として取得する（ステップＳ７４）。更に、ドメイン制御部４６は、それらのドメイン変換表４７のＴＬＢ要否フラグ４７Ｆを「要」に変更し（ステップＳ７４）、ドメインアクセスをＭＭＵ１２に設定し（ステップＳ７５）、この処理動作を終了する。
【００６９】
また、ドメイン制御部４６は、実ドメインが重複使用中でない場合（ステップＳ７３否定）、そのドメインアクセス設定をＭＭＵ１２に設定すべく、ステップＳ７５に移行する。
【００７０】
図１２は、コンテキストスイッチ制御部４９の処理動作を示すフローチャートである。コンテキストスイッチ制御部４９は、ＶＭ２１のＡＳＩＤ設定部３１から仮想ＡＳＩＤを指定して呼び出されるか、図示せぬＶＭ管理部からＶＭＩＤを指定して呼び出される。図１２においてコンテキストスイッチ制御部４９は、ＶＭ管理部から呼び出された場合、現在のＶＭ２１から異なるＶＭ２１への切替が発生したか否かを判定する（ステップＳ８１）。コンテキストスイッチ制御部４９は、ＶＭ２１の切り替えが発生した場合（ステップＳ８１肯定）、現在のＶＭ２１の仮想ＡＳＩＤを図示せぬＶＭ２１毎のＡＳＩＤ保存部に保存する。更に、コンテキストスイッチ制御部４９は、指定された切替先ＶＭ２１の仮想ＡＳＩＤを当該切替先ＶＭ２１のＡＳＩＤ保存部から取得する（ステップＳ８２）。
【００７１】
コンテキストスイッチ制御部４９は、ＴＬＢフラッシュが必要であるか否か判断し、必要な場合、ＴＬＢフラッシュを実行するために切替先ＶＭ２１及び仮想ＡＳＩＤを指定してＴＬＢフラッシュ制御部５０を呼び出す（ステップＳ８３）。更に、コンテキストスイッチ制御部４９は、ＴＬＢフラッシュ制御部５０を呼び出した後、切替先ＶＭ２１及び仮想ＡＳＩＤを指定してＡＳＩＤ制御部４２を呼び出す（ステップＳ８４）。更に、コンテキストスイッチ制御部４９は、切替先ＶＭ２１を指定してドメイン制御部４６を呼び出す（ステップＳ８５）。そして、コンテキストスイッチ制御部４９は、コンテキストスイッチを実行し（ステップＳ８６）、この処理動作を終了する。尚、コンテキストスイッチは、ＣＰＵ１４のレジスタの入れ替えや仮想アドレスから物理アドレスへの変換に使用するページテーブルの置き換えを実行する。
【００７２】
また、コンテキストスイッチ制御部４９は、ＶＭ切替が発生しなかった場合（ステップＳ８１否定）、ＴＬＢフラッシュ制御部５０を呼び出すべく、ステップＳ８３に移行する。尚、ＡＳＩＤ設定部３１から呼び出された場合は、ステップＳ８３から処理を行う。
【００７３】
図１３は、例外処理部５１の処理動作を示すフローチャートである。尚、例外とは、例えば、アクセスすべきメモリが存在しなかったり、アクセス権がなかったりすることによりメモリアクセス時に発生する例外や、０で除算したり、未定義の命令を実行しようとしたことにより、ＣＰＵ１４が実行時に発生する例外等である。
【００７４】
例外処理部５１は、メモリアクセス時に発生する例外に対する処理であり、かつ、ハイパーバイザ２２の実行中ではなく、ＶＭ２１の実行中に発生したものを対象とする。図１３において例外処理部５１は、例外の種類を調べ、例外がドメインフォールトであるか否かを判定する（ステップＳ９１）。尚、ドメインフォールトとは、ＶＭ２１がアクセスした仮想アドレスに対応するページテーブルエントリのドメインに対するドメインアクセス設定が、アクセス不可のときに発生する例外である。
【００７５】
例外処理部５１は、例外がドメインフォールトでない場合（ステップＳ９１否定）、当該ＶＭ２１へ例外をそのまま通知し（ステップＳ９２）、この処理動作を終了する。尚、ＶＭ２１は、通知内容に基づき、その例外を処理する。
【００７６】
また、例外処理部５１は、例外がドメインフォールトである場合（ステップＳ９１肯定）、フォールト発生の要因となった仮想アドレス、すなわちＶＭ２１がアクセスを試みた仮想アドレスを取得する。更に、例外処理部５１は、その仮想アドレスに対応するページテーブルエントリを取得する（ステップＳ９３）。尚、ＴＬＢのエントリには、自ＶＭ２１で使用していないドメインが使用されている可能性があり、ドメインアクセス設定ではそのドメインはアクセス不可に設定されるため、自ＶＭ２１とは関係のないドメインフォールトが発生することになる。
【００７７】
例外処理部５１は、ページテーブルエントリが存在しないか否かを判定する（ステップＳ９４）。例外処理部５１は、ページテーブルエントリが存在しない場合（ステップＳ９４肯定）、他のＶＭ２１のページテーブルエントリがＴＬＢ１３に残っていて、なおかつ、ページテーブルが存在しない仮想アドレスへのアクセスと判断する。例外処理部５１は、アクセスすべきメモリが存在しないことを示すページフォールトの例外に変更し（ステップＳ９５）、ＶＭ２１へ例外を通知すべく、ステップＳ９２に移行する。
【００７８】
尚、例外が通知されたＶＭ２１のＯＳの処理としては、実行継続不能と判断して自身を終了したり、デマンドページングの機能を備えたＯＳでは、ページフォールトを契機に新たにメモリを割り当てるといった処理を実行したりする。デマンドページングの場合は、ページフォールトの発生したアドレスとページフォールトの原因により、メモリ割当可能なアドレスであるか否かを判定する。割当可能なメモリがある場合、ページテーブルを変更し、ページフォールトが起きた箇所から再度実行するよう、例外からの復帰を行う。尚、例外処理部５１は、ＴＬＢフラッシュ制御部５０の呼出を省略しても良い。その理由は、フォールトを発生させたＶＭ２１は、フォールト発生時の仮想アドレスをアクセスするためのページテーブルを用意していない場合があるためである。
【００７９】
例外処理部５１は、ページテーブルエントリが存在する場合（ステップＳ９４否定）、ページテーブルエントリのドメインを参照し、この実ドメインを取得する（ステップＳ９６）。更に、例外処理部５１は、例外発生時に動作していたＶＭ２１のＶＭＩＤ及び実ドメインに対応する仮想ドメインを実ドメイン使用表４８から取得する。更に、例外処理部５１は、この仮想ドメインのアクセス設定に基づき、エントリのドメインがアクセス可能であるか否かを判定する（ステップＳ９６）。
【００８０】
例外処理部５１は、エントリのドメインがアクセス可能でない場合（ステップＳ９６否定）、ページフォールトの例外に変更すべく、ステップＳ９５に移行する。尚、アクセスが可能でない場合とは、仮想ドメインのアクセス設定がアクセス不可の場合と、エントリのフラグに従う場合のフラグによるアクセス権の欠如である。例外処理部５１は、アクセス不可の場合、例外の変更は必要ないが、アクセス権の欠如の場合、アクセス違反へと例外を変更する。そして、例外処理部５１は、ＶＭ２１へ例外を通知すべく、ステップＳ９２に移行する。尚、例えば、ＶＭ２１のＯＳは、カーネルモード時に例外を通知されると、これ以上実行を継続不能と判断してＰａｎｉｃにし、結果、ＶＭ２１は終了する。また、ＶＭ２１のＯＳは、ユーザモード時に例外を通知されると、ユーザモードで実行されていたプロセスにシグナルを通知してプロセスを終了する。尚、例外処理部５１は、ＴＬＢフラッシュ制御部５０の呼出を省略しても良い。
【００８１】
例外処理部５１は、エントリのドメインがアクセス可能である場合（ステップＳ９６肯定）、仮想アドレスを指定してＴＬＢフラッシュ制御部５０を呼び出し（ステップＳ９７）、この処理動作を終了する。尚、ＴＬＢフラッシュ制御部５０の呼び出しは、ＶＭ２１からアクセスが可能にも関わらず、仮想アドレスに関するＴＬＢエントリのために例外が発生し、そのＴＬＢエントリの影響を排除すべく、ＴＬＢエントリをフラッシュするためである。
【００８２】
例外処理部５１は、例外が発生する前の状態からＶＭ２１を再開する。尚、ＶＭ２１の再開とは、ＴＬＢフラッシュ制御部５０によるＴＬＢフラッシュ処理終了後、フォールト発生の要因となった仮想アドレス、すなわちＶＭ２１がアクセスを試みた仮想アドレスに対して再度アクセスを試みるものである。例外が発生したときの、ＣＰＵ１４のレジスタの情報を、例外が発生する前に戻して処理を再開させる。具体的には、プログラムカウンタを戻すことで実現できる。
【００８３】
尚、例外処理部５１は、仮想アドレスを指定してＴＬＢフラッシュ制御部５０を呼び出しているが、ＴＬＢフラッシュの方法はいくつかあるため、適切なパラメータを指定して起動することも可能である。
【００８４】
図１４は、ＴＬＢフラッシュ制御部５０の処理動作を示すフローチャートである。ＴＬＢフラッシュ制御部５０は、コンテキストスイッチ制御部４９又は例外処理部５１から呼び出される。図１４においてＴＬＢフラッシュ制御部５０は、ＴＬＢフラッシュの実行が必要であるか否かを判定する（ステップＳ１０１）。ＴＬＢフラッシュ制御部５０は、ＴＬＢフラッシュの実行が必要な場合（ステップＳ１０１肯定）、ＴＬＢフラッシュ命令を発行し（ステップＳ１０２）、この処理動作を終了する。また、ＴＬＢフラッシュ制御部５０は、ＴＬＢフラッシュの実行が必要でない場合（ステップＳ１０１否定）、この処理動作を終了する。
【００８５】
尚、ＴＬＢフラッシュ制御部５０は、例外処理部５１から呼び出された場合、仮想アドレスが指定されているため、ＴＬＢフラッシュの実行が必要であると判断する。更に、ＴＬＢフラッシュ制御部５０は、例外処理部５１から呼び出された際に指定された仮想アドレスを使用してＴＬＢフラッシュ命令を発行する。
【００８６】
また、ＴＬＢフラッシュ制御部５０は、コンテキストスイッチ制御部４９から呼び出された場合、切替先ＶＭ２１を示すＶＭＩＤ及び仮想ＡＳＩＤが指定される。更に、ＴＬＢフラッシュ制御部５０は、切替先ＶＭ２１のＶＭＩＤ及び仮想ＡＳＩＤに基づき、ＴＬＢフラッシュの実行が必要であるか否かを判定する。ＴＬＢフラッシュ制御部５０は、ＶＭ２１のドメイン変換表４７からＴＬＢ要否フラグ４７Ｆが「要」のドメインを抜き出す。更に、ＴＬＢフラッシュ制御部５０は、抜き出したドメインの内、グローバルフラグ４７Ｈが設定されているドメインが存在した場合、ＴＬＢフラッシュの実行が必要であると判断する。尚、ＶＭ２１間で同じドメインを使用している場合、例えば、ＶＭ１のある領域Ａのページテーブルにそのドメインとグローバルを設定し、そのページテーブルエントリがＴＬＢ１３にキャッシュされた場合を想定する。この場合、ＴＬＢフラッシュ制御部５０は、ＴＬＢ１３をフラッシュせずに、ＶＭ２に切替えると、ＶＭ２は本来領域Ａに対してアクセスできなくても、ＴＬＢ１３に残っているページテーブルエントリを使用して、領域Ａに対してアクセスできてしまう。つまり、ＶＭ２１間でメモリ領域の分離ができていないことになってしまう。従って、ＴＬＢフラッシュ制御部５０は、グローバルフラグが設定されているものが存在した場合、ＴＬＢフラッシュの実行を必要と判断する。
【００８７】
また、ＴＬＢフラッシュ制御部５０は、グローバルフラグが設定されていないページテーブルエントリがある場合、ＡＳＩＤを使用してＴＬＢ１３を検索するので、この時点でＴＬＢフラッシュの実行が必要であると判断せず、下記の時点で判断する。
【００８８】
ＴＬＢフラッシュ制御部５０は、グローバルフラグが設定されているドメインのＴＬＢ要否フラグが「否」の場合、ＶＭ２１のＡＳＩＤ変換表４３の仮想ＡＳＩＤのＴＬＢ要否フラグ４７Ｆを参照する。ＴＬＢフラッシュ制御部５０は、そのＴＬＢ要否フラグ４７Ｆが「要」の場合、仮想ＡＳＩＤに対してＴＬＢフラッシュの実行が必要であると判断する。この際、ＴＬＢフラッシュ制御部５０は、そのＴＬＢフラッシュの実行が必要であると判断した際、そのＴＬＢ要否フラグ４７Ｆの項目を「要」から「否」に変更する。
【００８９】
また、ＴＬＢフラッシュ制御部５０は、グローバルフラグが設定されている仮想ドメインのＴＬＢ要否フラグ４７Ｆが「要」の場合、ＴＬＢ１３全体のフラッシュを実行する。また、ＴＬＢフラッシュ制御部５０は、仮想ＡＳＩＤに対してＴＬＢフラッシュが必要と判断された場合、仮想ＡＳＩＤに対応付けられている実ＡＳＩＤを指定してＴＬＢ１３をフラッシュする。
【００９０】
尚、ＴＬＢフラッシュ制御部５０は、アドレスを指定してＴＬＢ１３をフラッシュすることも可能であるため、グローバルフラグが設定されているドメインのＴＬＢ要否フラグ４７Ｆが「要」の場合でも、部分的にＴＬＢをフラッシュすることは可能である。
【００９１】
また、ＴＬＢフラッシュ制御部５０は、例外処理部５１から呼び出された場合も、仮想アドレスを指定してＴＬＢフラッシュを実行する以外に、ＴＬＢ１３全体をフラッシュすることも可能である。更に、ＴＬＢフラッシュ制御部５０は、現在動作しているＶＭ２１の仮想ＡＳＩＤに対応づけられている実ＡＳＩＤを指定してＴＬＢフラッシュを実行することも可能である。
【００９２】
実施例１では、コンテキストスイッチ時に最小限のＴＬＢフラッシュのみを実行し、ＴＬＢ１３にキャッシュされているエントリがバッティングした場合には、例外処理にてＴＬＢフラッシュを実行する。その結果、ＴＬＢフラッシュを例外発生まで遅らせることができるため、その間にＴＬＢ１３内のエントリが入れ替わる可能性もあるため、結果として、不必要なＴＬＢフラッシュを抑制することができる。つまり、実施例１では、ＡＳＩＤ及びドメインを仮想化し、ＡＳＩＤ及びドメインをＶＭ２１毎に排他的に使用することで、仮想環境下で動作する複数ＶＭ２１間の切替が発生したとしても、ＴＬＢフラッシュの発生頻度を抑制できる。
【実施例２】
【００９３】
次に、実施例２のメモリ管理装置１について説明する。尚、実施例１のメモリ管理装置１と同一の構成については同一符号を付すことで、その重複する構成及び動作の説明については省略する。実施例２のメモリ管理装置１は、ＴＬＢフラッシュ制御部５０において、仮想ＡＳＩＤに対してＴＬＢフラッシュを実行した際に、実ＡＳＩＤの再割当を実行するようにしたものである。
【００９４】
図１５は、実施例２のＴＬＢフラッシュ制御部５０の処理動作を示すフローチャートである。尚、ＴＬＢフラッシュ制御部５０は、コンテキストスイッチ制御部４９又は例外処理部５１から呼び出される。図１５においてＴＬＢフラッシュ制御部５０は、ＴＬＢフラッシュの実行が必要であるか否かを判定する（ステップＳ１１１）。ＴＬＢフラッシュ制御部５０は、ＴＬＢフラッシュの実行が必要である場合（ステップＳ１１１肯定）、ＴＬＢフラッシュ命令を発行する（ステップＳ１１２）。また、ＴＬＢフラッシュ制御部５０は、ＴＬＢフラッシュの実行が必要でない場合（ステップＳ１１１否定）、この処理動作を終了する。
【００９５】
ＴＬＢフラッシュ制御部５０は、ＴＬＢフラッシュ命令発行に応じて現在動作中のＶＭ２１の現在設定されている仮想ＡＳＩＤのエントリを全てフラッシュしたか否かを判定する（ステップＳ１１３）。ＴＬＢフラッシュ制御部５０は、現在動作中のＶＭ２１の現在設定されている仮想ＡＳＩＤのエントリを全てフラッシュした場合（ステップＳ１１３肯定）、ＶＭ２１の仮想ＡＳＩＤを削除するようにＡＳＩＤ管理部４１を呼び出す（ステップＳ１１４）。更に、ＴＬＢフラッシュ制御部５０は、ＶＭ２１の仮想ＡＳＩＤを追加するようにＡＳＩＤ管理部４１を呼び出し（ステップＳ１１５）、この処理動作を終了する。その結果、実ＡＳＩＤに空きがあれば、仮想ＡＳＩＤは重複しないものに変更されることになる。
【００９６】
また、ＴＬＢフラッシュ制御部５０は、現在動作中のＶＭ２１の現在設定されている仮想ＡＳＩＤのエントリをフラッシュしなかった場合（ステップＳ１１３否定）、この処理動作を終了する。
【００９７】
実施例２では、実ＡＳＩＤに空きがあるのに実ＡＳＩＤを重複して使用するような場合に、空いている実ＡＳＩＤを使用するように仮想ＡＳＩＤの割当を再調整できるため、ＴＬＢフラッシュの頻度を更に抑制できる。
【実施例３】
【００９８】
次に、実施例３のメモリ管理装置１について説明する。尚、実施例１及び２のメモリ管理装置１と同一の構成については同一符号を付すことで、その重複する構成及び動作の説明については省略する。実施例３のメモリ管理装置１は、ＴＬＢフラッシュを一律に遅延させるのではなく、遅延させる場合と遅延させない場合とに切替えるものである。尚、実施例１のメモリ管理装置１は、ＴＬＢフラッシュを遅延させた場合、ＡＳＩＤやドメインの重複使用状況に応じて、遅延させたＴＬＢフラッシュが例外処理によって頻繁に発生するような事態も考えられる。そこで、このような事態に対処すべく、ＴＬＢフラッシュの遅延を一律に実行するのではなく、条件に応じてＴＬＢフラッシュの遅延を実行するか否かを判定するようにした。
【００９９】
図１６は、実施例３のＴＬＢフラッシュ制御部５０の処理動作を示すフローチャートである。図１６においてＴＬＢフラッシュ制御部５０は、コンテキストスイッチ制御部４９から呼び出された場合、すなわちコンテキストスイッチ時であるか否かを判定する（ステップＳ１２１）。ＴＬＢフラッシュ制御部５０は、コンテキストスイッチ時である場合（ステップＳ１２１肯定）、切替元のＶＭ２１を示すＶＭＩＤ及び仮想ＡＳＩＤを保存する（ステップＳ１２２）。尚、同一のＶＭ２１内で仮想ＡＳＩＤを切替える場合には、ＶＭＩＤの保存を行わない。そして、ＴＬＢフラッシュ制御部５０は、ステップＳ１２２の処理後、ＴＬＢフラッシュが必要であるか否かを判定すべく、ステップＳ１１１〜Ｓ１１５の処理動作に移行する
【０１００】
また、ＴＬＢフラッシュ制御部５０は、コンテキストスイッチ時でない場合（ステップＳ１２１否定）、例外処理部５１から呼び出された場合、すなわち例外処理時であるか否かを判定する（ステップＳ１２３）。ＴＬＢフラッシュ制御部５０は、例外処理時である場合（ステップＳ１２３肯定）、例外の発生した仮想アドレスが属するページテーブルエントリから仮想ドメインと、そのページテーブルエントリがグローバルでない場合の仮想ＡＳＩＤとを取得する。尚、仮想ドメインは、仮想アドレスから対応するページテーブルエントリを取得し、ページテーブルエントリに記されたドメイン番号を実ドメインとして実ドメイン使用表４８を参照し、例外発生時に動作していたＶＭ２１のＶＭＩＤとの組の仮想ドメインである。また、仮想ＡＳＩＤは、ＶＭ２１毎の図示せぬＡＳＩＤ保存部から取得するものである。
【０１０１】
そして、ＴＬＢフラッシュ制御部５０は、ＴＬＢフラッシュ判断情報を更新する（ステップＳ１２４）。図１７は、ＴＬＢフラッシュ判断情報の一例を示す説明図である。図１７に示すＴＬＢフラッシュ判断情報は、ドメインの場合とＡＳＩＤの場合の二つ示している。ドメインの場合のＴＬＢフラッシュ判断情報、すなわちドメイン依存情報８１は、ＴＬＢフラッシュの対象となる領域がグローバルの場合に設定され、ＶＭＩＤ８１Ａ、仮想ドメイン８１Ｂ及び依存ＶＭＩＤ８１Ｃを有する。尚、ＶＭＩＤ８１Ａは、ＴＬＢフラッシュを行うときのＶＭ２１、すなわち例外処理部５１が処理を実行する契機となるフォールトを引き起こしたＶＭ２１のＩＤである。仮想ドメイン８１Ｂは、ＴＬＢフラッシュの対象となる領域のドメイン番号である。依存ＶＭＩＤ８１Ｃは、コンテキストスイッチ時に保存したＶＭ２１のＩＤである。
【０１０２】
また、ＡＳＩＤの場合のＴＬＢフラッシュ判断情報、すなわちＡＳＩＤ依存情報８２は、ＴＬＢフラッシュの対象となる領域がローカルの場合に設定され、ＶＭＩＤ８２Ａ、仮想ＡＳＩＤ８２Ｂ及び依存ＶＭＩＤ８２Ｃを有する。尚、ＶＭＩＤ８２Ａは、ＴＬＢフラッシュを行うときのＶＭ２１のＩＤである。仮想ＡＳＩＤ８２Ｂは、ＴＬＢフラッシュの対象となる領域のＡＳＩＤである。依存ＶＭＩＤ８２Ｃは、コンテキストスイッチ時に保存したＶＭ２１のＩＤである。
【０１０３】
ＴＬＢフラッシュ制御部５０は、重複使用されなくなった仮想ＡＳＩＤを指定してＡＳＩＤ管理部４１から呼び出された場合、ＴＬＢフラッシュ判断情報８２内に指定された仮想ＡＳＩＤが存在すれば削除する。尚、ＴＬＢフラッシュ制御部５０は、ＴＬＢフラッシュ判断情報８２から、指定された仮想ＡＳＩＤのＶＭ２１が依存ＶＭＩＤ８２Ｃに設定されている項目を検索する。更に、ＴＬＢフラッシュ制御部５０は、その検索結果である依存ＶＭＩＤ８２ＣのＶＭ２１の仮想ＡＳＩＤの実ＡＳＩＤをＡＳＩＤ変換表４３から取得する。更に、ＴＬＢフラッシュ制御部５０は、指定された仮想ＡＳＩＤの実ＡＳＩＤを指定された仮想ＡＳＩＤのＶＭ２１のＡＳＩＤ変換表４３から取得し、同じであれば存在すると判断する。また、ＴＬＢフラッシュ制御部５０は、存在しなければ何もしない。
【０１０４】
ＴＬＢフラッシュ制御部５０は、使用されなくなった仮想ドメインを指定してドメイン管理部４５から呼び出された場合、ＴＬＢフラッシュ判断情報８１から、削除できる項目があるか判断する。尚、ＴＬＢフラッシュ制御部５０は、図１７の例のドメインの場合は、依存ＶＭＩＤの仮想ドメインがすべて削除されたときに削除できるため、指定された仮想ドメインのＶＭ２１が依存ＶＭＩＤに設定されている項目を検索する。更に、ＴＬＢフラッシュ制御部５０は、依存ＶＭＩＤの仮想ドメインが全て削除されていることをドメイン変換表４７から確認できた場合のみ、その依存ＶＭＩＤを含む項目を削除する。尚、ＴＬＢフラッシュ制御部５０は、ドメイン管理部４５から呼び出す単位をドメイン単位とした。しかしながら、ＴＬＢフラッシュ制御部５０は、ＶＭ削除時に、ドメイン管理部４５からＶＭ２１が使用しているすべての仮想ドメインという形で呼び出し、依存ＶＭＩＤを含む項目を削除することで、ＶＭ２１が使用する仮想ドメイン単位で繰り返し呼び出す場合に比較して処理が円滑になる。
【０１０５】
従って、ＴＬＢフラッシュ制御部５０は、ＴＬＢフラッシュ判断情報を更新すると（ステップＳ１２４）、ＴＬＢフラッシュが必要であるか否かを判定すべく、ステップＳ１１１〜Ｓ１１５の処理動作に移行する。
【０１０６】
また、ＴＬＢフラッシュ制御部５０は、例外処理時でない場合（ステップＳ１２３否定）、ＴＬＢフラッシュ判断情報を更新し（ステップＳ１２５）、処理動作を終了する。
【０１０７】
ＡＳＩＤ管理部４１及びドメイン管理部４５から呼び出された場合、ＴＬＢフラッシュ制御部５０の処理は終了する。コンテキストスイッチ制御部４９から呼び出された場合は、ＴＬＢフラッシュの判断が変更される。
【０１０８】
更に、ＴＬＢフラッシュ制御部５０は、切替後のＶＭＩＤのＴＬＢフラッシュ判断情報を取得する。ＴＬＢフラッシュ制御部５０は、取得したＴＬＢフラッシュ判断情報においてドメインの依存情報が含まれている場合、その依存情報の項目「依存ＶＭＩＤ」に切替前のＶＭ２１を示すＶＭＩＤが設定されている依存情報があれば、その依存情報の項目「仮想ドメイン」に示される仮想ドメインの領域に対するＴＬＢフラッシュを「要」と判断する。
【０１０９】
ＴＬＢフラッシュ制御部５０は、取得したＴＬＢフラッシュ判断情報においてＡＳＩＤの依存情報が含まれている場合、その依存情報の項目「依存ＶＭＩＤ」に切替前のＶＭ２１を示すＶＭＩＤが設定されている依存情報があるか否かを判定する。ＴＬＢフラッシュ制御部５０は、依存情報がある場合、その依存情報の項目「依存ＶＭＩＤ」に示されるＶＭＩＤに対応付けてＡＳＩＤ変換表４３に登録されているＡＳＩＤ変換情報から、その依存情報の項目「仮想ＡＳＩＤ」に示される仮想ＡＳＩＤの実ＡＳＩＤを取得する。これにより、切替前のＶＭ（依存ＶＭＩＤ）の仮想ＡＳＩＤに対応する実ＡＳＩＤが取得される。
【０１１０】
また、ＴＬＢフラッシュ制御部５０は、ＡＳＩＤの依存情報の仮想ＡＳＩＤに対してＡＳＩＤ変換表４３から実ＡＳＩＤを取得し、依存ＶＭＩＤの実ＡＳＩＤと同じであれば、実ＡＳＩＤに対してＴＬＢフラッシュが必要と判断する。尚、ＡＳＩＤの依存情報の仮想ＡＳＩＤは、切替前のＶＭ２１を示すＶＭＩＤが項目「依存ＶＭＩＤ」に設定されているもののみに限定する。
【０１１１】
尚、ドメインの領域をＴＬＢフラッシュする方法は、ここでは示さないが、ドメイン管理部４５において、ページテーブルエントリ設定時にドメイン毎にメモリ領域を記録しておく。更に、ＴＬＢフラッシュ制御部５０において、その記録しておいたメモリ領域を指定してＴＬＢフラッシュの命令を実行すれば可能である。また、これ以外にも、ＴＬＢフラッシュの発生頻度を記録しておき、その発生頻度に応じて遅延させるか否かを判断させることも可能である。また、遅延させるか否かの判断は、これらに限定されるものではない。
【０１１２】
実施例３では、ＴＬＢフラッシュを遅延する効果のない場合には、コンテキストスイッチ時にＴＬＢフラッシュできるようになり、遅延による例外処理の多発による不具合にも対処できる。
【０１１３】
尚、上記実施例３では、ＴＬＢフラッシュ判断情報としてドメイン依存情報８１及びＡＳＩＤ依存情報８２を例に挙げて説明したが、ＴＬＢフラッシュの対象領域の設定、すなわち、グローバル又はローカルに応じて依存情報の設定処理を実行するようにした。しかしながら、ＴＬＢフラッシュの対象領域の設定がグローバルの場合にのみ依存情報の設定処理を実行するようにしても良い。
【０１１４】
また、上記実施例３では、ＡＳＩＤ依存情報８２の仮想ＡＳＩＤに対してＡＳＩＤ変換表４３から実ＡＳＩＤを取得し、その実ＡＳＩＤが依存ＶＭＩＤの実ＡＳＩＤと同じ場合、実ＡＳＩＤに対してＴＬＢフラッシュの実行が必要と判断した。しかしながら、依存ＶＭＩＤと同値の実ＡＳＩＤを設定されたＡＳＩＤ変換情報をＡＳＩＤ変換表４３で照合し、ＴＬＢフラッシュの要否を判断するようにしても良い。
【実施例４】
【０１１５】
次に、実施例４のメモリ管理装置１について説明する。尚、実施例１のメモリ管理装置１と同一の構成については同一符号を付すことで、その重複する構成及び動作の説明については省略する。実施例４のメモリ管理装置１は、ＶＭ２１の特性を利用して、実ＡＳＩＤの割当や実ドメインの割当を実現する。
【０１１６】
先ず、実ＡＳＩＤの割当について説明する。以下に述べるパラメータは、ＶＭ２１から指定してもよいし、予め、ハイパーバイザ２２に用意しておいても良い。ＶＭ２１から指定する場合は、ハイパーコール等を使用する。ＶＭ２１に対して、使用可能な仮想ＡＳＩＤ数の割合を設定しておく。割合なので、動作しているＶＭ２１に応じて、使用可能な仮想ＡＳＩＤ数は変動する。
【０１１７】
ＡＳＩＤ管理部４１は、仮想ＡＳＩＤの追加時に、当該仮想ＡＳＩＤの追加を依頼したＶＭ２１が割合よりも多く実ＡＳＩＤを使用している場合には、重複使用の実ＡＳＩＤを割り当てる。また、ＡＳＩＤ管理部４１は、割合よりも少ない場合は、割合を最も超えているＶＭ２１を探し、このＶＭ２１の仮想ＡＳＩＤで重複していない仮想ＡＳＩＤを探し、その仮想ＡＳＩＤに対応付けられた実ＡＳＩＤを解放する。仮想ＡＳＩＤは、解放した実ＡＳＩＤ以外の実ＡＳＩＤと対応付ける。このときは、必ず実ＡＳＩＤを重複使用することになる。この場合、ＡＳＩＤ管理部４１は、ＴＬＢ要否フラグを「要」に設定する。
【０１１８】
実ＡＳＩＤの解放については、次に述べる。ＡＳＩＤ変換表４３は、使用頻度を記録できるように拡張する。使用頻度は、ＴＬＢフラッシュ制御部５０にて切り替えられたときに加算する。使用頻度の高い仮想ＡＳＩＤが重複すると、それだけＴＬＢフラッシュの可能性が高まるため、重複させる仮想ＡＳＩＤは使用頻度の低いものを選択する。使用頻度の低い仮想ＡＳＩＤが重複していなければ、それを選択し、そうでなければ、次に使用頻度の低いものを対象として重複のない仮想ＡＳＩＤを探す。使用頻度の低い仮想ＡＳＩＤの重複がなくなるまで、重複している仮想ＡＳＩＤの対応付けを変更することも可能である。実ＡＳＩＤの対応付けを変更された仮想ＡＳＩＤのＴＬＢ要否フラグは「要」に変更する。
【０１１９】
また、ＡＳＩＤ変換表４３は、優先度を記録できるように拡張する。優先度の低い仮想ＡＳＩＤを重複させ、優先度の高い仮想ＡＳＩＤは重複させないように制御する。仮想ＡＳＩＤを重複させる実ＡＳＩＤを決定する場合、ＶＭ２１内の仮想ＡＳＩＤに限定するか、若しくは、ＶＭ２１を限定せず、全てのＶＭ２１の仮想ＡＳＩＤを対象にしても良い。
【０１２０】
尚、これらの実ＡＳＩＤの解放方法は、ＡＳＩＤの割当時にも使用できる。ＶＭ２１の仮想ＡＳＩＤ数の割合とは関係なく、使用頻度や優先度により、実ＡＳＩＤの割り当てを制御することが可能である。
【０１２１】
優先度の低い仮想ＡＳＩＤは、実ＡＳＩＤに空きがあるときでさえ、重複させるようにすることも可能である。次に、実ドメインの割当について説明する。ドメインは、ドメイン番号がページテーブルのエントリ内に設定されているため、ＶＭ２１の実ドメインを変更することは容易ではない。尚、実ドメインを変更することは、ページテーブルエントリのドメイン番号を変更することになる。従って、ページテーブルのエントリはいくつも存在し、同じドメイン番号はページテーブルにいくつでも設定できる。つまり、実ドメインを変更すると、そのドメイン番号のページテーブルを全て変更する必要がある。しかも、ページテーブルを変更するには、ＴＬＢ１３もフラッシュする必要があるため、仮想ドメインと実ドメインの対応付けは変更しない。
【０１２２】
また、ドメインは、再調整を行わず、重複させる仮想ドメインの決定方法を説明する。ＶＭ２１に対して、重複を許可するかどうか設定しておく。これは単なるフラグであっても、優先順位であってもよい。優先順位の場合は、最も優先順位の低いＶＭ２１の仮想ドメインを重複させるようにする。また、ＶＭ２１に対して、使用メモリ領域を設定しておく。このメモリ領域の重なりを調べ、メモリ領域が多く重なるＶＭ２１と仮想ドメインを重複させる。その結果、ＴＬＢフラッシュを避けるためというよりは、ＴＬＢフラッシュが起きるのであれば、よりＴＬＢフラッシュの起きやすい重複をさせ、実ドメインを重複させる。そして、実ドメインを重複させることで、空きになった実ドメインを他のＶＭ２１に使用できる他のドメインとして有効利用できる。つまり、ＴＬＢフラッシュ制御部５０にＴＬＢフラッシュが必要であると判定させるための重複をメモリ領域が多く重なるＶＭ２１間で生じさせるものである。尚、仮想ドメイン毎に使用メモリ領域を設定しておき、仮想ドメイン毎に重複を判断することも可能である。
【０１２３】
また、仮想ＡＳＩＤの使用数の少ないＶＭ２１とドメインを重複させる。尚、仮想ＡＳＩＤの使用数の少ないＶＭ２１とは、例えば、実ドメインを重複するＶＭ数で最大実ＡＳＩＤ数を割った値よりも少ないＶＭ２１である。尚、全てのＶＭ２１がＡＳＩＤを複数使用するわけではなく、一つしか使用しないＶＭ２１も存在する。従って、このようなＶＭ２１を想定すると、更に、使用数の少ないと判断されたＶＭ２１の中でも少ない順に選択する。仮想ＡＳＩＤ数が少ないとは、ＡＳＩＤが重複する可能性が少なくなり、ＴＬＢフラッシュを抑制できる可能性が高まる。また、予めＡＳＩＤを排他的に使用できるＶＭ２１間では積極的にドメインを重複させることも可能である。例えば、ＯＳがＡＳＩＤを一つしか使わないＶＭ２１であれば、ＡＳＩＤを重複させなければドメインを重複させられる。ドメインも、ＡＳＩＤと同様、割り当て時に空きがあっても重複させるようにすることも可能である。
【０１２４】
実施例４では、効率的にＡＳＩＤやドメインを割り当てられるようになり、ＴＬＢフラッシュを抑制できる。
【実施例５】
【０１２５】
次に、実施例５のメモリ管理装置１について説明する。尚、実施例１のメモリ管理装置１と同一の構成については同一符号を付すことで、その重複する構成及び動作の説明については省略する。実施例５のメモリ管理装置１は、ＶＭ２１のメモリ使用状況を管理し、メモリ領域が重複していない仮想ＡＳＩＤを重複させるというものである。尚、メモリ管理装置１は、ＶＭ２１毎にグローバルな領域の使用状況(グローバル領域使用状況)、ＶＭ２１内のプロセス毎の使用状況(ローカル領域使用状況)を管理する。
【０１２６】
プロセス毎の使用状況は、仮想ＡＳＩＤ毎の使用状況に相当する。メモリ領域を２ＭＢ単位で使用有無を１ビットで表わすと、４ＧＢのメモリ空間では、２５６バイト必要である。つまり、ＶＭ２１毎に、グローバルな領域用に２５６バイト、プロセス数×２５６バイトのメモリが必要である。グローバル及びローカルの区別なく管理することも可能である。この際、メモリ領域の使用有無をカウンタで表わすことも可能である。
【０１２７】
また、ＶＭ２１のグローバル領域使用状況は、ＶＭ管理部によるＶＭ作成時に作成され、ＶＭ管理部によるＶＭ終了時に削除される。ローカル領域使用状況は、ＡＳＩＤ管理部４１のＡＳＩＤ割当時に作成され、ＡＳＩＤ管理部４１のＡＳＩＤ削除時に削除される。グローバル領域使用状況とローカル領域使用状況は、ドメイン管理部４５のページテーブルエントリ設定時に更新される。
【０１２８】
これらの使用状況により、ＡＳＩＤ管理部４１における実ＡＳＩＤの割当時に、使用メモリ領域が重ならない仮想ＡＳＩＤを見つけ、この使用メモリ領域が重ならない仮想ＡＳＩＤと実ＡＳＩＤを重複使用することが可能となる。尚、ＡＳＩＤ管理部４１は、実ＡＳＩＤを割り当てる対象の仮想ＡＳＩＤのローカル領域使用状況と、対象以外のローカル領域使用状況とを比較し、使用メモリ領域が重ならないものを検索する。更に、ＡＳＩＤ管理部４１は、検索結果としてのローカル領域使用状況のＶＭＩＤ及び仮想ＡＳＩＤからＡＳＩＤ変換表４３を参照し、重複使用する実ＡＳＩＤを検索する。更に、使用メモリ領域が重ならない仮想ＡＳＩＤ及び実ＡＳＩＤを有するＡＳＩＤ変換情報を割当対象のＡＳＩＤに対応付けてＡＳＩＤ変換表４３に登録する。尚、割当対象のＡＳＩＤは、ＶＭ２１上で動作するＡＳＩＤ設定部３１からＡＳＩＤ管理部４１が呼び出される際に指定されるＩＤに相当する。尚、使用状況は、ＶＭ作成時やＶＭ２１内のＯＳのプロセス作成時に、ハイパーコール等で設定することも可能である。
【０１２９】
実施例５では、メモリ領域の重複が少ない仮想ＡＳＩＤを重複するようにしているため、ＴＬＢフラッシュの可能性は少なくなる。
【実施例６】
【０１３０】
次に、実施例６のメモリ管理装置１について説明する。尚、実施例５のメモリ管理装置１と同一の構成については同一符号を付すことで、その重複する構成及び動作の説明については省略する。実施例６のメモリ管理装置１は、実施例５の使用状況を活用し、他のＶＭ２１が使用していないメモリ領域のみを使用するＶＭ２１を動作させ、そのＶＭ２１とのコンテキストスイッチ時には、ＴＬＢフラッシュを起こさないようにするというものである。
【０１３１】
ＶＭ管理部がＶＭ２１を作成するとき、ＶＭ２１が必要とするメモリ領域のサイズ分、空いているメモリ領域を探し、空きメモリ領域があれば、その領域で動作するようにＶＭ２１のプログラムを変換し、そのメモリ領域にコピーする。尚、ＶＭ２１のプログラムは、ＶＭ２１上で動作するプログラムに相当し、どのアドレスに配置されても実行できるような形式で作成されたプログラムである。その領域で動作するようにＶＭ２１のプログラムを変換するとは、実際にメモリに配置する際にアドレスを変換することである。ＶＭ２１がそのメモリ領域をアクセスできるようにページテーブルを作成し、ＶＭ２１を動作させる。空きメモリ領域は、全てのＶＭ２１のグローバル領域使用状況とローカル領域使用状況の和をとり、いずれでも使用されていない領域のことである。また、空きメモリ領域のアドレスは、その都度変化する可能性があるため、ＶＭ２１のプログラムは、リエントラントに作成しておく。尚、リエントラントとは、どのアドレスに配置されても動作するように作成されたプログラムに相当する。従って、一つのプロセスのみしか動作しないようなＶＭ２１に対して適用でき、高速にＶＭ２１との切り替えを行うことが可能となる。
【０１３２】
実施例６では、全ての仮想アドレスを構成するページテーブルに、このＶＭ２１のメモリ領域の変換エントリを備えることで、コンテキストスイッチ時にページテーブルの置き換えを行う必要もなく、さらに高速化できる。
【０１３３】
尚、実施例１乃至６では、単一のＣＰＵ１４の環境に適用した場合を例に挙げて説明したが、複数のＣＰＵ１４のマルチプロセッサの環境下でも同様の効果が得られることは言うまでもない。この際、ＣＰＵ１４毎に上述した構成を構築することになる。
【０１３４】
また、図示した各部の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
【０１３５】
さらに、各装置で行われる各種処理機能は、ＣＰＵ（Central Processing Unit）（又はＭＰＵ（Micro Processing Unit）、ＭＣＵ（Micro Controller Unit）等のマイクロ・コンピュータ）上、又は同ＣＰＵ（又はＭＰＵ、ＭＣＵ等のマイクロ・コンピュータ）で解析実行するプログラム上、又はワイヤードロジックによるハードウェア上で、その全部又は任意の一部を実行するようにしても良いことは言うまでもない。
【０１３６】
以上、本実施例を含む実施の形態に関し、更に以下の付記を開示する。
【０１３７】
（付記１）仮想環境において実行されるプログラムに対して割り当てられるメモリ上の領域を識別するための仮想領域識別情報と前記プログラムを実行する仮想環境に対して割り当てられるメモリ上の領域を識別する実領域識別情報とを前記仮想環境毎に対応付けて管理する領域識別情報管理部と、
前記実領域識別情報が複数の仮想環境に対して重複して割り当てられているか否かを判定する重複判定部と、
前記重複判定部によって前記実領域識別情報が複数の仮想環境に対して重複して割り当てられている場合に、当該実領域識別情報に対応付けて、重複している旨を示す重複情報を管理する重複領域管理部と、
実行時間が割り当てられている切替元の仮想環境から切替先の仮想環境へ切り替える際に、前記切替先の仮想環境に対して割り当てられている前記実領域識別情報を前記領域識別情報管理部から読み出し、読み出した実領域識別情報が複数の仮想環境に対して重複して割り当てられているか否かを前記重複情報を参照して判定し、この読み出した実領域識別情報の内、重複して割り当てられていると判定された実領域識別情報をＴＬＢ処理の対象とするＴＬＢ制御部と
を有することを特徴とするメモリ管理装置。
【０１３８】
（付記２）前記仮想環境毎に、前記仮想領域識別情報に含む仮想ドメイン及び前記実領域識別情報に含む実ドメインを前記領域識別情報管理部内に対応付けるドメイン管理部を有し、
前記ＴＬＢ制御部は、
前記仮想環境動作時にドメインの対応付けからドメインアクセス設定を行い、このドメインアクセス設定に基づき、他の仮想環境と重複して使用しているドメインに対してアクセス可能である場合に、ＴＬＢ処理の対象としてＴＬＢフラッシュが必要であることを保持するドメイン制御部と、
前記仮想環境の切替時にＴＬＢフラッシュが必要であるか否かを判断するＴＬＢフラッシュ制御部と、
例外発生時に他の仮想環境と重複して使用しているドメインに対してアクセス可能である場合にＴＬＢフラッシュを実行すると共に、例外発生時に他の仮想環境と重複して使用しているドメインに対してアクセス可能でない場合にＴＬＢフラッシュを遅延させる例外処理部と
を有することを特徴とする付記１記載のメモリ管理装置。
【０１３９】
（付記３）前記仮想環境毎に、前記仮想領域識別情報に含む仮想ＡＳＩＤ及び前記実領域識別情報に含む実ＡＳＩＤを前記領域識別情報管理部内に対応付けるＡＳＩＤ管理部を有し、
前記ＴＬＢ制御部は、
前記仮想環境動作時に使用するＡＳＩＤが他の仮想環境と重複している場合にはＴＬＢフラッシュが必要であることを保持するＡＳＩＤ制御部を有することを特徴とする付記２記載のメモリ管理装置。
【０１４０】
（付記４）前記ＡＳＩＤ管理部は、
前記仮想環境の仮想ＡＳＩＤを新規に実ＡＳＩＤに対応付ける際に、既に対応付けられているＡＳＩＤの対応付けを変更することを特徴とする付記３記載のメモリ管理装置。
【０１４１】
（付記５）前記ＴＬＢフラッシュ制御部は、
前記ＴＬＢフラッシュを実行すると判断したＡＳＩＤの対応付けを変更するように前記ＡＳＩＤ管理部に指示することを特徴とする付記３又は４記載のメモリ管理装置。
【０１４２】
（付記６）前記ＴＬＢフラッシュ制御部は、
前記ＴＬＢフラッシュ実行時のＡＳＩＤ及びドメインを保持し、この保持内容をＴＬＢフラッシュの判断に使用することを特徴とする付記３〜５の何れか一つに記載のメモリ管理装置。
【０１４３】
（付記７）前記ＡＳＩＤ管理部は、
前記ＡＳＩＤを重複使用しなくなった場合に当該ＡＳＩＤを前記ＴＬＢフラッシュ制御部に通知すると共に、
前記ドメイン管理部は、
前記ドメインが使用されなくなった場合に当該ドメインを前記ＴＬＢフラッシュ制御部に通知することを特徴とする付記６記載のメモリ管理装置。
【０１４４】
（付記８）前記例外処理部は、
前記例外発生時に、当該例外を仮想環境に通知可能な例外に変換することを特徴とする付記２〜７の何れか一つに記載のメモリ管理装置。
【０１４５】
（付記９）仮想環境において実行されるプログラムに対して割り当てられるメモリ上の領域を識別するための仮想領域識別情報と前記プログラムを実行する仮想環境に対して割り当てられるメモリ上の領域を識別する実領域識別情報とを前記仮想環境毎に対応付けて領域識別情報管理部に管理する管理ステップと、
前記実領域識別情報が複数の仮想環境に対して重複して割り当てられているか否かを判定する重複判定ステップと、
前記重複判定ステップによって前記実領域識別情報が複数の仮想環境に対して重複して割り当てられている場合に、当該実領域識別情報に対応付けて、重複している旨を示す重複情報を重複領域管理部に管理する管理ステップと、
実行時間が割り当てられている切替元の仮想環境から切替先の仮想環境へ切り替える際に、前記切替先の仮想環境に対して割り当てられている前記実領域識別情報を前記領域識別情報管理部から読み出し、読み出した実領域識別情報が複数の仮想環境に対して重複して割り当てられているか否かを前記重複情報を参照して判定し、この読み出した実領域識別情報の内、重複して割り当てられていると判定された実領域識別情報をＴＬＢ処理の対象とするＴＬＢ制御ステップと
を含むことを特徴とするメモリ管理方法。
【０１４６】
（付記１０）仮想環境において実行されるプログラムに対して割り当てられるメモリ上の領域を識別するための仮想領域識別情報と前記プログラムを実行する仮想環境に対して割り当てられるメモリ上の領域を識別する実領域識別情報とを前記仮想環境毎に対応付けて領域識別情報管理部に管理する管理手順と、
前記実領域識別情報が複数の仮想環境に対して重複して割り当てられているか否かを判定する重複判定手順と、
前記重複判定手順によって前記実領域識別情報が複数の仮想環境に対して重複して割り当てられている場合に、当該実領域識別情報に対応付けて、重複している旨を示す重複情報を重複領域管理部に管理する管理手順と、
実行時間が割り当てられている切替元の仮想環境から切替先の仮想環境へ切り替える際に、前記切替先の仮想環境に対して割り当てられている前記実領域識別情報を前記領域識別情報管理部から読み出し、読み出した実領域識別情報が複数の仮想環境に対して重複して割り当てられているか否かを前記重複情報を参照して判定し、この読み出した実領域識別情報の内、重複して割り当てられていると判定された実領域識別情報をＴＬＢ処理の対象とするＴＬＢ制御手順と
を含むプログラムをコンピュータ装置に実行させることを特徴とするメモリ管理プログラム。
【符号の説明】
【０１４７】
１  メモリ管理装置
１１  メモリ
１２  ＭＭＵ
１３  ＴＬＢ
１４  ＣＰＵ
２１  ＶＭ
２２  ハイパーバイザ
４１  ＡＳＩＤ管理部
４２  ＡＳＩＤ制御部
４３  ＡＳＩＤ変換表
４４  実ＡＳＩＤ使用表
４５  ドメイン管理部
４６  ドメイン制御部
４７  ドメイン変換表
４８  実ドメイン使用表
５０  ＴＬＢフラッシュ制御部
５１  例外処理部
【図１】
0005459006.tif 000002
【図２】
0005459006.tif 000003
【図３】
0005459006.tif 000004
【図４】
0005459006.tif 000005
【図５】
0005459006.tif 000006
【図６】
0005459006.tif 000007
【図７】
0005459006.tif 000008
【図８】
0005459006.tif 000009
【図９】
0005459006.tif 000010
【図１０】
0005459006.tif 000011
【図１１】
0005459006.tif 000012
【図１２】
0005459006.tif 000013
【図１３】
0005459006.tif 000014
【図１４】
0005459006.tif 000015
【図１５】
0005459006.tif 000016
【図１６】
0005459006.tif 000017
【図１７】
0005459006.tif 000018