以下、図面に基づいて本発明の実施の形態を説明する。本実施の形態は、仮想環境が前提とされる。すなわち、一般的にハイパーバイザと呼ばれるプログラムによって実現される仮想マシン上において、ゲストOS(オペレーティングシステム)に割り当てられた、CPU1の一つの特権レベルにおいて、実質的に二種類の特権レベルを実現する方法について説明する。すなわち、特権モードと非特権モードの二つの特権レベルを有するCPUの場合、特権モードは、ハイパーバイザに割り当てられ、非特権モードはゲストOSに割り当てられる。本実施の形態では、ゲストOSに割り当てられた非特権モード内において二つの特権レベルが実質的に実現され、各特権レベルに応じたアクセス制御が行われる。二つの特権レベルのうち、仮想化されていない環境における非特権モードに相当する動作モードを「ユーザモード」といい、仮想化されていない環境における特権モードに相当する動作モードを「カーネルモード」という。すなわち、ユーザモードとは、ページテーブルのエントリにおいて非特権モードに対して設定されたアクセス権が適用されるべき動作モードである。カーネルモードとは、ページテーブルのエントリにおいて特権モードに対して設定されたアクセス権が適用されるべき動作モードである。
また、本実施の形態では、第一のアクセス権の一例であるページ単位のアクセス権に対して優先される、第二のアクセス権が導入される。ページ単位のアクセス権とは、ページテーブルのエントリ(TLB151(Translation Look-aside Buffer:トランスレーション・ルックアサイド・バッファ)にキャッシュされているエントリも含む。)において設定されるアクセス権をいう。一つの第二のアクセス権は、一以上のページ(ページテーブルのエントリ)を設定範囲とすることができる。当該設定範囲に対して設定された第二のアクセス権は、当該設定範囲に属するページに対してページテーブルのエントリにおいて設定されたアクセス権(第一のアクセス権)に対して優先される。本実施の形態では、斯かる第二のアクセス権を実現するための手段として、ドメインという概念を導入する。ドメインには、ドメインごとに、ページテーブルに設定されたアクセス権に対して優先されるアクセス権を設定することができるという性質を有する。また、ドメインは、仮想アドレス空間に係るページを分類(ページテーブルのエントリを分類)する単位(分類単位)を定義できるという性質も有する。すなわち、ドメインによって、仮想アドレス空間に係るページ(ページテーブルのエントリ)を、複数のグループ又は領域(空間)に分割又は分類することができる。
なお、ドメインによって仮想アドレス空間に係るページを分類できるという性質については、本実施の形態(特に、第一の実施の形態及び第二の実施の形態)において、必要とはされない。全てのページに対して一つのドメインしか設定できなくてもよい。本実施の形態において、ドメインに対して設定されたアクセス権を「ドメインアクセス権」という。すなわち、ドメインアクセス権は、第二のアクセス権の一例である。
第一の実施の形態について説明する。第一の実施の形態では、一つのプロセス(仮想アドレス空間)に対して二つのページテーブルが生成される。一方のページテーブル(以下、「カーネル用ページテーブル」という。)のエントリには、非特権モードのアクセス権として、カーネルモードに対するアクセス権が設定される。他方のページテーブル(以下、「ユーザ用ページテーブル」という。)には、非特権モードのアクセス権として、ユーザモードに対するアクセス権が設定される。但し、MMU(Memory Management Unit:メモリ管理ユニット)には、いずれか一方のページテーブルのアドレスが設定される。通常のMMUに設定可能なページテーブルのアドレスは、一つに限られるからである。なお、双方のページテーブルのマッピング情報(仮想アドレスと物理アドレスとの対応情報)は、同じである。また、双方のページテーブルの特権モードのアクセス権は、ハイパーバイザに対して適用される。以下、MMUにアドレスが設定されているページテーブルを、本実施の形態において「有効なページテーブル」という。後述されるように、有効なページテーブルは、動作モード(ユーザモード、カーネルモード)の切り替えに応じて、直ちに切り替えられない。有効なページテーブルの切り替えは、TLBフラッシュを要するからである。換言すれば、動作モードの切り替えに対して、有効なページテーブルの切り替えを遅延させることで、TLBのフラッシュが遅延される。その結果、TLBのフラッシュの機会が削減される。
ドメインアクセス権の値は、図6に示されるように決定される。図6は、第一の実施の形態におけるドメインアクセス権の決定方法を説明するための図である。本実施の形態において、ドメインに対して設定可能なアクセス権は、「アクセス可」、「アクセス不可」、及び「フラグ」に分類される。「アクセス可」は、読み書きが許可されるアクセス権である。「アクセス不可」は、いかなるアクセスも禁止されるアクセス権である。「フラグ」は、ページテーブルのエントリに設定されたアクセス権が有効とされる(使用される)ことを示すアクセス権である。なお、「アクセス可」、「アクセス不可」、「フラグ」のそれぞれは、ドメインを利用可能なARMアーキテクチャにおける、「マネージャ」、「クライアント」、「ノーアクセス」に対応する。
同図に示されるように、ドメインアクセス権は、有効なページテーブルとゲストOSの動作モードとに応じて決定される。具体的には、動作モードがユーザモードであり、有効なページテーブルがユーザ用ページテーブルである場合、ドメインアクセス権は「フラグ」となる。動作モードがユーザモードであり、有効なページテーブルがカーネル用ページテーブルである場合、ドメインアクセス権は「アクセス不可」となる。動作モードがカーネルモードであり、有効なページテーブルがユーザ用ページテーブルである場合、ドメインアクセス権は「フラグ」となる。動作モードがカーネルモードであり、有効なページテーブルがカーネル用ページテーブルである場合、ドメインアクセス権は「フラグ」となる。
なお、一つの仮想アドレス空間に対して複数のドメインが割り当てられている場合、ドメインアクセス権の値は、全てのドメインに対して共通な値が適用される。斯かる点に鑑みて、第一の形態において、ドメインによってページをグループ分けできるという性質は、必要とはされないのである。なお、ドメイン間の重複はないこととする。すなわち、一つのページが複数のドメインに属することは許可されない。
第一の実施の形態において、動作モード切り替え時には、例えば、図7に示されるような処理が実行される。
図7は、第一の実施の形態の動作モード切り替え時における処理内容の一例を説明するための図である。同図には、一つのVM12上のゲストOSの動作モードが切り替わった場合に実行される処理内容が示されている。切り替え前の動作モードは、ユーザモードであるとする。また、動作モードの切り替え前の有効なページテーブルは、ユーザ用ページテーブルであるとする。すなわち、MMU105には、ユーザ用ページテーブルのアドレスが登録されている。
ハイパーバイザ11は、ユーザモードからカーネルモードへの切り替えを検知すると(S11)、ドメイアクセス設定として「フラグ」をMMU105に設定する(S12)。但し、カーネルモードへの切り替えに応じて、カーネル用ページテーブルは、即時的に有効なページテーブルにはされない(S13)。すなわち、有効なページテーブルは、ユーザ用ページテーブルのままである。したがって、TLB151のフラッシュの実行はされない。
なお、動作モードがカーネルモードであり、有効なページテーブルがカーネル用ページテーブルである場合も、処理手順は同様である。すなわち、ドメインアクセス権は、「アクセス不可」に設定されるが、有効なページテーブルは変更されない。TLB151のフラッシュも実行されない。
このように、第一の実施の形態では、ゲストOSの動作モードの切り替えに応じて動作モードと有効なページテーブルとの間に不整合(ずれ)が生じうる。具体的には、ユーザモードのときにカーネル用ページテーブルが有効な状態や、カーネルモードのときにユーザ用ページテーブルが有効な状態が発生しうる。このように不整合が生じている状態のメモリのアクセス保護は、ドメインアクセス権によって確保される。すなわち、ユーザモードのときにカーネル用ページテーブルが有効な状態においては、ドメインアクセス権は「アクセス不可」であるため、ユーザモードの本来の権限を超えたメモリアクセスは拒否される。また、カーネルモードのときにユーザ用ページテーブルが有効な状態においては、ドメインアクセスは「フラグ」である。すなわち、ユーザモードに対するアクセス権に基づいて、メモリアクセスの許否が判定される。ユーザモードのアクセス権は、カーネルモードのアクセス権より小さい。したがって、この場合も、カーネルモードの本来の権限を超えたメモリアクセスは拒否される。
要するに、動作モードと有効なページテーブルとの間に不整合が生じている状態において、動作モードの本来の権限が制限されるように(本来のアクセス権より小さいアクセス権が許可されるように)ドメインアクセス権が設定される。換言すれば、動作モードの切り替えが発生した場合は、二つの動作モードのうち、相対的にアクセス権の小さい動作モードのアクセス権以下となるように、ドメインアクセスが設定される。その結果、本来のアクセス権を超えたメモリアクセスが許可されるのが防止される。なお、本来のアクセス権とは、動作モードに対応するページテーブルのエントリに設定されているアクセス権である。
しかし、この場合、動作モードの本来のアクセス権において許可されるメモリアクセスまで拒否される可能性がある。すなわち、本来の許可されるべきメモリアクセスであるにも拘わらず、フォールト(アクセス違反)が発生する。
例えば、図8は、許可されるべきメモリアクセスに対してフォールトが発生するケースを説明するための図である。
同図において、表(1)には、ユーザモード及びカーネルモードのそれぞれのページテーブルのエントリのアクセス権について、6通りの設定例が示されている。
表(2)は、有効なページテーブルが、ユーザ用ページテーブルであるかカーネル用ページテーブルであるかに応じて、動作モードごとに適用されるアクセス権が示されている。なお、表(1)におけるページテーブルのアクセス権と、表(2)における適用されるアクセス権との対応関係は、列の一致によって確保されている。
表(2)において、ユーザ用ページテーブルが有効な場合、動作モードがカーネルモードであるときに適用されるアクセス権は、表(1)におけるユーザモードのページテーブルのアクセス権に設定された値となる。図6において説明したように、この場合のドメインアクセス権は「フラグ」となるからである。そうすると、この場合に、太線で囲まれたアクセス権(2列目及び3列目)が適用されるときは、カーネルモードの権限内のメモリアクセスであるのにも拘わらずドメインアクセス権に対する違反のフォールトが発生する。具体的には、表(1)において、カーネルモードの2列目のアクセス権は「rw(アクセス可)」であり、3列目のアクセス権は「rw」である。一方、表(2)において、ユーザ用ページテーブルが有効な場合のカーネルモードの2列目のアクセス権は「ro(読み込み可)」であり、3列目のアクセス権は「no(アクセス不可)」である。すなわち、ページテーブルにおいては、「rw」のアクセス権が与えられているにも拘わらず、実際には「ro」又は「no」のアクセス権が適用される。
また、表(2)において、カーネル用ページテーブルが有効な場合、動作モードがユーザモードであるときに適用されるアクセス権は、全てのケースにおいて「no」となる。図6において説明したように、この場合のドメインアクセス権は「アクセス不可」となるからである。そうすると、この場合に、太線で囲まれたアクセス権(1列目、2列目、及び4列目)が適用されるときは、ユーザモードの権限内のメモリアクセスであるのにも拘わらずドメインアクセス権に対する違反のフォールトが発生する。具体的には、表(1)において、ユーザモードの1列目のアクセス権は「rw」であり、2列目及び4列目のアクセス権は「ro(読み込み可)」である。一方、表(2)において、カーネル用ページテーブルが有効な場合のユーザモードの1列目、2列目、及び4列目のアクセス権は「no」である。すなわち、ページテーブルにおいては、「rw」又は「ro」のアクセス権が与えられているにも拘わらず、実際には「no」のアクセス権が適用される。
そこで、本実施の形態では、フォールトの発生時において、図9に示される処理が実行される。
図9は、第一の実施の形態のフォールト発生時における処理内容の一例を説明するための図である。同図の初期状態は、図7における動作モードの切り替え後の状態であるとする。すなわち、動作モードはカーネルモードである。また、有効なページテーブルは、ユーザ用ページテーブルである。
この状態において、ハイパーバイザ11は、フォールトを検知すると(S21)、TLB151をフラッシュさせる(S22)。続いて、ハイパーバイザ11は、カーネル用ページテーブルのアドレスをMMU105に設定する(S23)。すなわち、カーネル用ページテーブルが排他的に有効化される。続いて、ハイパーバイザ11は、ドメインアクセス設定として「フラグ」をMMU105に設定する(S24)(図6参照)。すなわち、ドメインアクセス権は、動作モードの切り替え時のみならず、フォールト発生時にも更新される。フォールト発生時には、上記の処理によって、ゲストOSの動作モードと有効なページテーブルとの不整合が是正されるため、ドメインアクセス権は、有効なページテーブルのエントリのアクセス権に一致するように「フラグ」にされるのである。
その後、ハイパーバイザ11は、ゲストOSに制御を移す。
上記の仕組みによれば、TLB151のフラッシュの機会を必要なときに限定することができる。また、動作モードと有効なページテーブルとが整合していない場合であっても、ドメインアクセス権を利用したアクセス制御により、適切にアクセス保護を図ることができる。
続いて、上記において説明した内容に関して、具体的な情報処理装置への適用例について説明する。
図10は、第一の実施の形態における情報処理装置のハードウェア構成例を示す図である。同図において、情報処理装置10は、それぞれバスBで相互に接続されているドライブ装置100と、補助記憶装置102と、主記憶装置103と、CPU104と、MMU105とを有する。
情報処理装置10での処理を実現するプログラムは、CD−ROM等の記録媒体101によって提供される。プログラムを記録した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体101より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
主記憶装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。CPU104は、主記憶装置103に格納されたプログラムに従って情報処理装置10に係る機能を実行する。MMU105は、メモリ管理手段の一例であり、いわゆるメモリ管理ユニット(MMU105(Memory Management Unit))である。すなわち、MMU105は、CPU104が要求するメモリアクセスに関して、仮想アドレスから物理アドレスへの変換や、アクセス制御(メモリ保護制御)等を実行する。
なお、CPU104は、仮想化をサポートするための特別な機構を有していなくてよい。また、情報処理装置10は、汎用的なコンピュータに限定されない。携帯電話や各種の電子機器等の組み込み機器が、情報処理装置10として本実施の形態に適用されてもよい。
図11は、第一の実施の形態における情報処理装置のソフトウェア構成例を示す図である。情報処理装置10は、ハイパーバイザ11を有する。
ハイパーバイザ11は、情報処理装置10を仮想化する制御プログラムであり、すなわち、ハイパーバイザ11がCPU104に実行させる処理によって、一以上のVM12が、情報処理装置10内で動作する。ハイパーバイザ11は、仮想マシンモニタ(VMM(Virtual Machine Monitor))とも呼ばれる。なお、本実施の形態において、ハイパーバイザ11は、メモリアクセス制御プログラムの一例である。
VM12は、いわゆる仮想マシン(Virtual Machine)であり、ゲストOS121に対して、情報処理装置10をエミュレートする。各VM12上では、ゲストOS121(Operating System)が動作可能である。各ゲストOS121上では、各種のソフトウェアのプロセスが動作する。なお、ゲストOSとは、VM上で動作するOSをいう。
一般的に、仮想マシンを実現する仮想化技術には、二つの種類が存在する。一つは、OSを修正することなくそのまま動作可能な完全仮想化(HVM(Hardware Virtual Machine)とも呼ばれる。)である。もう一つは、特権命令をハイパーバイザへの呼び出し(ハイパーコールと呼ばれる。)に修正してOSを動作させる準仮想化(PV(Para Virtualization)とも呼ばれる)である。本実施の形態では、いずれの仮想化技術が採用されてもよい。
完全仮想化の場合、仮想マシン上で実行された特権命令は、CPU104が発生させる例外によりハイパーバイザ11に通知される。準仮想化の場合、特権命令はハイパーコールによってハイパーバイザ11に通知される。ハイパーコールはソフトウェア割り込み等のCPU104の機能を利用して実現される。完全仮想化の場合も、ハイパーコールによる通知が可能である。本実施の形態においても、このようなハイパーコール又は例外等の通知機構を利用して、VM12からハイパーバイザ11への指示が行われる。
図11において、各VM12上で動作するゲストOS121のカーネルは、ASID設定部122、ページテーブル設定部123、及びドメイン設定部124等を有する。
ASID設定部122は、識別子設定手段の一例である。ASID設定部122は、ゲストOS121が管理しているプロセスごとに割り当てられるASID(Address Space Identifier))をハイパーバイザ11に通知する。ASIDとは、各プロセスの仮想アドレス空間に対する識別子である。各ゲストOS121において割り当てられるASIDが重複しないようにするために、ゲストOS121で使用するASIDが仮想化されてもよい。具体的には、ゲストOS121では全てのASIDが使用でき、ハイパーバイザ11は、ゲストOS121が認識している仮想的なASIDを実際のASIDに変換する。
ページテーブル設定部123は、ゲストOS121が管理している仮想アドレス空間に関するページテーブルのアドレスをハイパーバイザ11に通知する。一つの仮想アドレス空間(プロセス)についてユーザモード用のページテーブル(ユーザ用ページテーブル)とカーネルモード用のページテーブル(カーネル用ページテーブル)との二つページテーブルが生成され、それぞれのアドレスがハイパーバイザ11に通知される。
ドメイン設定部124は、ゲストOS121が使用するドメインの識別子(以下、「ドメイン番号」という。)をハイパーバイザ11に通知する。なお、各ゲストOS121が使用するドメイン番号は、ゲストOS121間において重複しないように、予め決められている。例えば、ゲストOS121の設定情報として、各ゲストOS121に設定されている。または、ASIDと同様に、ゲストOS121間においてドメイン番号が重複しないようにするために、ゲストOS121で使用するドメイン番号が仮想化されてもよい。いずれの場合であっても、実際のドメイン番号(ページテーブルに記録されるドメイン番号)は、ゲストOS121間で重複しないようにすることが望ましい。重複する場合には、ゲストOS121の切り替えの際にハイパーバイザにてTLBフラッシュが必要となる。
ハイパーバイザ11は、ASID管理部111、ページテーブル管理部112、ドメイン管理部113、コンテキストスイッチ制御部114、フォールト処理部115、VM管理部116、ASID管理表117、ページテーブル対応表118、及びドメイン利用表119等を有する。
ASID管理部111は、識別子管理手段の一例である。ASID管理部111は、ゲストOS121のASID設定部122からの指示に応じ、当該ゲストOS121が動作しているVM12に対応するASID管理表117の更新を行う。ASID管理部111は、また、VM12の終了時に、当該VM12に対応するASID管理表117の削除を行う。
ASID管理表117は、識別子記憶手段の一例である。ASID管理表117は、例えば、主記憶装置103内に、VM12ごと(ゲストOS121ごと)に生成される。ASID管理表117には、対応するVM12上で動作するゲストOS121によって割り当てられたASIDの一覧を記憶する。通常、ゲストOS121は、プロセスごとにASIDを割り当てる。したがって、ASID管理表117のエントリ数は、対応するVM12上のプロセス数に一致する。
ページテーブル管理部112は、ゲストOS121のページテーブル設定部123からの指示に応じ、当該ゲストOS121が動作しているVM12のページテーブル対応表118の更新を行う。ページテーブル管理部112は、また、VM12の終了時に、当該VM12に対応するページテーブル対応表118の削除を行う。
ページテーブル対応表118は、ページテーブル対応情報記憶手段の一例である。ページテーブル対応表118は、例えば、主記憶装置103内に、VM12ごと(ゲストOS121ごと)に生成される。ページテーブル対応表118は、ユーザ用ページテーブルのアドレスとカーネル用ページテーブルのアドレスと、現在使用中の(現在有効な)ページテーブルのアドレスとを対応付けて記憶する。通常、ゲストOS121は、プロセスごとにページテーブルを割り当てる。したがって、ページテーブル対応表118のエントリ数は、対応するVM12上のプロセス数に一致する。
ドメイン管理部113は、ゲストOS121のドメイン設定部124からの指示に応じ、当該ゲストOS121が動作しているVM12に対応するドメイン利用表119の更新を行う。ドメイン管理部113は、また、VM12の終了時に、当該VM12に対応するドメイン利用表119の削除を行う。
ドメイン利用表119は、例えば、主記憶装置103内に、VM12(ゲストOS121)ごとに生成される。ドメイン利用表119は、VM12(ゲストOS121)が使用するドメインのドメイン番号を記憶する。
コンテキストスイッチ制御部114は、ゲストOS121のユーザモードとカーネルモードとの切り替えを行う。ハイパーバイザ11のコンテキストスイッチとしては、VM12間やゲストOS121内のプロセス間の切り替えも含まれるが、本実施の形態では、ユーザモードとカーネルモードとの切り替えを対象として説明する。
フォールト処理部115は、CPU104が発生させる例外を処理する。ただし、本実施の形態において、フォールト処理部115によって処理対象とされる例外は、ドメインアクセス権に違反した場合に発生するフォールト(以下、「ドメインフォールト」という。)と、ページテーブルのエントリに設定されたアクセス権に違反した際に起きるアクセス違反に限定される。
VM管理部116は、ハイパーバイザの基本的な機能を実行する。すなわち、VM管理部116は、VM12を実現するための処理制御を行う。例えば、VM管理部116は、VM12の起動(生成)、終了、及び切り替え等を実行する。VM12の切り替えとは、複数のVM12が起動されているときに、CPU104を使用するVM12を切り替えることをいう。例えば、VM12の切り替えとは、一定期間を経過したら、他のVM12にCPU104を与えるといった処理である。したがって、VM管理部116は、常に、いずれのVM12が動作しているのか(CPU104を使用しているのか)を把握している。VM管理部116が把握している情報は、VM管理情報として、例えば、主記憶装置103に記録される。
なお、図11に示されるように、第一の実施の形態において、MMU105は、TLB151を用いて、メモリアクセスの際のアドレス変換等に利用されたページテーブルのエントリをキャッシュするキャッシュ手段である。また、MMU105には、有効なページアドレス及びドメインアクセス権の設定が可能である。MMU105は、ドメインアクセス権を、有効なページアドレスに係るページテーブルのエントリのアクセス権に対して優先させて(優先的に適用して)、メモリアクセスの制御を行う。
以下、情報処理装置10の処理手順について説明する。図12は、第一の実施の形態のASID設定部が実行する処理手順を説明するためのフローチャートである。
ASID設定部122は、ゲストOS121により実行される、プロセス管理処理に連動して、ハイパーバイザ11のASID管理部111に指示を通知する。プロセス管理処理には、プロセスの生成、プロセスの削除、プロセスの切り替え等がある。
ゲストOS121においてプロセスが生成されると(S101でYES)、当該ゲストOS121のASID設定部122は、当該プロセス(すなわち、当該プロセスに係る仮想アドレス空間)に対してASIDを一つ割り当てる(S102)。続いて、ASID設定部122は、割り当てられたASIDの登録指示をASID管理部111に対して通知する(S103)。なお、ゲストOS121においても、プロセスとASIDとの対応関係は管理される。
一方、ゲストOS121においてプロセスが削除されると(S104でYES)、当該ゲストOS121のASID設定部122は、当該プロセスに対応するASIDを解放する(S105)。続いて、ASID設定部122は、当該ASIDを指定して、当該ASIDの登録解除指示をASID管理部111に対して通知する(S106)。
なお、プロセスの切り替え時においても、ゲストOS121における実行中のプロセスを切り替えるよう、ゲストOS121からハイパーバイザ11に指示が行われるが、本実施の形態において、ASID設定部122はプロセスの切り替えには関与しない。
続いて、ASID設定部122からの指示に応じてASID管理部111によって実行される処理手順について説明する。
図13は、第一の実施の形態のASID管理部が実行する処理手順を説明するためのフローチャートである。
ASIDの登録指示がASID設定部122より通知されると(S111でYES)、ASID管理部111は、登録指示において指定されたASIDを含むエントリを当該ASID設定部122が動作するVM12に対応するASID管理表117に追加する(S112)。なお、該当するASID管理表117が無い場合、ASID設定部122は、当該VM12に対応するASID管理表117を、例えば、主記憶装置103に生成する。
図14は、第一の実施の形態のASID管理表のエントリの構成例を示す図である。同図に示されるように、ASID管理表117の一つのエントリは、VMIDとASIDとを格納するための項目を有する。VMIDは、エントリの登録指示元に係るVM12の識別子である。ハイパーバイザ11は、各指示元のゲストOS121が動作するVM12を判別することが可能である。
なお、本実施の形態では、ASID管理表117は、VM12ごとに生成されるため、VMIDの項目は必ずしも必要ではない。複数のVM12に対して一つのASID管理表117を共用する場合に、VMIDの項目は必要となる。
また、ASIDは、プロセスごとに対応する情報であるがが、プロセスIDの項目をASID管理表117に設ける必要はない。ゲストOS121がプロセスを切り替えるときには、切り替え先に係るASIDがハイパーバイザ11に通知される。したがって、ハイバーバイザは、通知されたASIDをASID管理表117より検索することで実行中のプロセスに対応するエントリを特定することができる。但し、プロセスIDの項目が設けられてもよい。
一方、ASIDの登録解除指示がASID設定部122より通知されると(S113でYES)、ASID管理部111は、登録解除指示において指定されたASIDを含むエントリを当該登録解除指示元のASID設定部122が動作するVM12に対応するASID管理表117より削除する(S114)。
また、VM管理部116よりVM12の終了が通知されると(S115でYES)、ASID管理部111は、終了したVM12に対応するASID管理表117を削除する(S116)。
続いて、図15は、第一の実施の形態のページテーブル設定部が実行する処理手順を説明するためのフローチャートである。
ゲストOS121においてプロセスが生成されると(S121でYES)、当該ゲストOS121のページテーブル設定部123は、当該プロセス(すなわち、当該プロセスに係る仮想アドレス空間)に対してページテーブルを二つ生成する(S122)。一方は、ユーザ用ページテーブルであり、他方はカーネル用ページテーブルである。各ページテーブルは、例えば、主記憶装置103に生成される。
続いて、ページテーブル設定部123は、二つのページテーブルのアドレスの登録指示をページテーブル管理部112に対して通知する(S123)。
一方、ゲストOS121においてプロセスが削除されると(S124でYES)、ページテーブル設定部123は、当該プロセスに対応する二つのページテーブルを削除する(S125)。続いて、ページテーブル設定部123は、削除された二つのページテーブルの少なくともいずれか一方のアドレスを指定して、当該アドレスの登録解除指示をページテーブル管理部112に通知する(S126)。
なお、プロセス生成時又はプロセス削除時における、ASID設定部122とページテーブル設定部123との処理手順の前後関係は、所定のものに限定されない。
続いて、ページテーブル設定部123からの指示に応じてページテーブル管理部112によって実行される処理手順について説明する。
図16は、第一の実施の形態のページテーブル管理部が実行する処理手順を説明するためのフローチャートである。
ページテーブルのアドレスの登録指示がページテーブル設定部123より通知されると(S131でYES)、ページテーブル管理部112は、登録指示において指定された二つのページテーブルのアドレスの組を含むエントリを当該登録指示元のページテーブル設定部123が動作するVM12に対応するページテーブル対応表118に追加する(S132)。なお、該当するページテーブル対応表118が無い場合、ページテーブル設定部123は、当該VM12に対応するページテーブル対応表118を、例えば、主記憶装置103に生成する。
図17は、第一の実施の形態のページテーブル対応表のエントリの構成例を示す図である。同図に示されるように、ページテーブル対応表118の一つのエントリは、VMID、ユーザ用ページテーブルアドレス、カーネル用ページテーブルアドレス、及びカレントページテーブルアドレス等を格納するための項目を有する。
VMIDは、エントリの登録指示元に係るVM12の識別子である。ASID管理表117と同様、ページテーブル対応表118はVM12ごとに生成されるため、VMIDの項目は必ずしも必要ではない。ユーザ用ページテーブルアドレス及びカーネル用ページテーブルアドレスは、登録指示に含まれる二つのページテーブルのそれぞれのアドレスである。カレントページテーブルアドレスは、有効なページテーブルのアドレスである。有効なページテーブルとは、MMU105にアドレスが設定され、MMU105が使用中のページテーブルである。ステップS132の段階において、有効なページテーブルは決まっていない(いずれのページテーブルも使用されていない)ため、カレントページテーブルアドレスには何も登録されない。
なお、図7及び図9等において説明したように、有効なページテーブルと、ゲストOS121の動作モードとの間には不整合が生じることもある。したがって、カレントページアドレスに係るページテーブルは、必ずしも動作モードと整合しているとは限らない。
また、ユーザ用ページテーブルアドレス及びカーネル用ページテーブルアドレス等は、プロセスごとに対応する情報であるが、プロセスIDの項目をページテーブル対応表118に設ける必要はない。ゲストOS121がプロセスを切り替えるときには、切り替え先に係るページテーブルのアドレスがハイパーバイザ11に通知される。したがって、ハイパーバイザ11は、通知されたアドレスに合致するユーザ用ページテーブルアドレス又はカーネル用ページテーブルアドレスをページテーブル対応表118より検索することで実行中のプロセスに対応するページテーブルのエントリを特定することができる。但し、プロセスIDの項目が設けられてもよい。
一方、ページテーブルのアドレスの登録解除指示がページテーブル設定部123より通知されると(S133でYES)、ページテーブル管理部112は、登録解除指示において指定されたページテーブルのアドレスを含むエントリを当該登録解除指示元のページテーブル設定部123が動作するVM12に対応するページテーブル対応表118より削除する(S134)。
また、VM管理部116よりVM12の終了が通知されると(S135でYES)、ページテーブル管理部112は、終了したVM12に対応するページテーブル対応表118を削除する(S136)。
続いて、図18は、第一の実施の形態のドメイン設定部が実行する処理手順を説明するためのフローチャートである。
ゲストOS121の起動時において(S141でYES)、当該ゲストOS121のドメイン設定部124は、当該ゲストOS121が使用するドメインのドメイン番号をドメイン管理部113に通知する(S142)。
ゲストOS121の終了時において(S143でYES)、当該ゲストOS121のドメイン設定部124は、ドメイン番号の登録解除指示をドメイン管理部113に通知する(S144)。
なお、各ページがいずれのドメインに属するかについては、ページテーブルの生成時に決定され、ページテーブルのエントリ内にドメイン番号として設定される。すなわち、仮想空間アドレスの各領域が、いずれのドメインに属するかについては、ゲストOS121ごとに予め決定又は設定されている。
続いて、ドメイン設定部124からの指示に応じてドメイン管理部113によって実行される処理手順について説明する。
図19は、第一の実施の形態のドメイン管理部が実行する処理手順を説明するためのフローチャートである。
ドメイン番号の登録指示がドメイン設定部124より通知されると(S151でYES)、ドメイン管理部113は、登録指示において指定されたドメイン番号を含むエントリを当該ドメイン設定部124が動作するVM12に対応するドメイン利用表119に追加する(S152)。なお、該当するドメイン利用表119が無い場合、ドメイン設定部124は、当該VM12に対応するドメイン利用表119を、例えば、主記憶装置103に生成する。
図20は、第一の実施の形態のドメイン利用表のエントリの構成例を示す図である。同図に示されるように、ドメイン利用表119の一つのエントリは、VMIDと一以上のドメイン番号とを格納するための項目を有する。VMIDは、エントリの登録指示元に係るVM12の識別子である。ドメイン番号は、通知されたドメイン番号である。複数のドメイン番号が通知された場合、一つのエントリに対して、複数のドメイン番号が登録される。
一方、ドメイン番号の登録解除指示がドメイン設定部124より通知されると(S153でYES)、ドメイン管理部113は、登録解除指示元のドメイン設定部124が動作するVM12に対応するエントリをドメイン利用表119より削除する(S154)。
また、VM管理部116よりVM12の終了が通知されると(S155でYES)、ドメイン管理部113は、終了したVM12に対応するドメイン利用表119を削除する(S156)。
なお、本実施の形態では、ゲストOS121(ドメイン設定部124)が、ドメイン番号の追加や削除をハイパーバイザ11に通知する例が示されている。しかし、ハイパーバイザ11(ドメイン管理部113)が、ゲストOS121の使用するドメイン番号を自動的又は能動的に特定してもよい。具体的には、ハイパーバイザ11は、ページテーブルのエントリからドメイン番号を取得する。ハイパーバイザ11は、当該ドメイン番号をドメイン利用表119に登録する。
続いて、図21は、第一の実施の形態のコンテキストスイッチ制御部が実行する処理手順を説明するためのフローチャートである。同図のフローチャートは、図7において説明した処理内容に対応する。
ここで、ゲストOS121の動作モードの切り替えについて説明する。仮想化されていない環境において動作するOSの場合、ユーザモードとカーネルモードの切り替えは、OSが全て把握している。カーネルモードからユーザモードへの切り替えは、ユーザモードにおけるコンテキストの復元を行うことによって実現される。このとき、CPUの動作モードも特権モードから非特権モードに移行する。ユーザモードからカーネルモードへの移行は、割り込みや例外等が発生した際にCPUにより強制的に実行される。このとき、CPUの動作モードは特権モードとなる。OSは、再度ユーザモードへ移行できるように、移行前のユーザモード時のコンテキストを保存する。カーネルモードは、割り込みや例外等で非同期に所定のエントリポイントから実行されるため、コンテキストは存在しない。
一方、仮想化環境(仮想マシン上)で動作するゲストOS121については、ユーザモードとカーネルモードの切り替えは、ハイパーバイザ11が全て把握する。カーネルモードからユーザモードへの切り替えは、ゲストOS121が明示的に行うことなので、切り替え時に、ゲストOS121からハイパーバイザ11へユーザモードへの切り替えの指示を出す。ユーザモードからカーネルモードへの移行は、ゲストOS121が明示的に行えることではなく、CPUにより強制的に移行されるため、割り込みや例外等の発生時に、ハイパーバイザ11に制御が移る。ハイパーバイザ11(VM管理部116)は、割り込みや例外の種類を調べ、ゲストOS121に通知すべきものである場合には、ゲストOS121をカーネルモードへ移行させることを決定する。カーネルモードへの移行が決定された場合、VM管理部116は、コンテキストスイッチ制御部114に対して動作モードの切り替えを指示する。
以上のように、ユーザモードとカーネルモードの切り替えは、ゲストOS121からハイパーバイザ11に対して指示が行われるとは限らない、具体的には、ユーザモードへの切り替え時には、ゲストOS121から指示が通知される。一方、ユーザモードからカーネルモードへの移行は、CPU104が発生させる割り込みや例外等に応じて、ハイパーバイザ11が自主的に行う必要がある。したがって、ユーザモードとカーネルモードとの間で切り替えられる情報(例えば、有効なページテーブル等)は、ハイパーバイザ11内で対として管理されることが好ましい。
図21の処理は、上記されたゲストOS121からのユーザモードへの切り替えの指示に応じて、又は割り込みや例外等に応じておこなわれるVM管理部116からの指示に応じて開始される
ステップS161において、コンテキストスイッチ制御部114は、ゲストOS121の動作モードの切り替えの要否を判定する。ゲストOS121の現在の動作モードは、VM管理情報の一部として保存されている。なお、VM管理情報の入れ替えは、VM12(ゲストOS121)内のプロセスの切り替え時に行われる。
ステップS161の処理は、特に、カーネルモードへの切り替えの場合に意義がある。ユーザモードへの切り替えは、必ずカーネルモードにて行われるため、ユーザモードへの切り替えの場合、常に動作モードの切り替えは必要であると判断する。その際、VM管理情報内の動作モードを切り替え先の動作モード(ユーザモード)に変更する。
一方、カーネルモードへ移行する場合、コンテキストスイッチ制御部114は、VM管理部116からの指示に応じて、VM管理情報内の動作モードがユーザモードである場合に、動作モードの切り替えは必要であると判断する。この場合、VM管理情報は、コンテキストスイッチ制御部114によって変更されなくてもよい。VM管理部116によって変更されてもよい。
コンテキストスイッチ制御部114は、動作モードの切り替えが必要であると判定した場合(S161でYES)、切り替え対象のゲストOS121が動作するVM12に対応するページテーブル対応表118に基づいて、有効なページテーブルを判定する(S162)。具体的には、コンテキストスイッチ制御部114は、当該ページテーブル対応表118より、実行中のプロセスに対応するエントリを検索する。コンテキストスイッチ制御部114は、検索されたエントリにおいて、ユーザ用ページテーブルアドレス及びカーネル用ページテーブルアドレスのうち、いずれがカレントページアドレスと一致するかに基づいて、有効なページテーブルを判定する。すなわち、ユーザ用ページテーブルアドレスが一致すれば、有効なページテーブルはユーザ用ページテーブルである。カーネル用ページテーブルアドレスが一致すれば、有効なページテーブルは、カーネル用ページテーブルである。
続いて、コンテキストスイッチ制御部114は、有効なページテーブルと切り替え先の動作モードとに基づいて、ドメインアクセス権を決定する(S163)。ドメインアクセス権の決定方法は、図6において説明した通りである。なお、図6の内容は、コンテキストスイッチ制御部114のロジックとして組み込まれていてもよいし、コンテキストスイッチ制御部114とは別に、補助記憶装置102に保存されていてもよい。
続いて、コンテキストスイッチ制御部114は、動作モードの切り替え対象のゲストOS121が利用する全てのドメインのドメイン番号に関して、決定されたドメインアクセス権をMMU105に設定する(S164)。すなわち、当該ドメインアクセス権は、当該全てのドメインに対して共通なものとなる。なお、動作モードの切り替え対象のゲストOS121が利用する全てのドメインは、ドメイン利用表119に基づいて判定される。ゲストOS121が利用するドメイン以外のドメイン番号に対するアクセス権は変更しない。
続いて、コンテキストスイッチ制御部114は、CPU104のレジスタの入れ替えを行う(S165)。具体的には、カーネルモードからユーザモードへの切り替えの場合、コンテキストスイッチ制御部114は、ゲストOS121のユーザモードでのコンテキストを復元する。これにより、ゲストOS121に制御が移り、ゲストOS121は、ユーザモードで動作を開始する。
一方、ユーザモードからカーネルモードへの移行の場合、ハイパーバイザ11(VM管理部116)が、ゲストOS121がカーネルモード時のエントリポイントからの処理を実行するように制御する。その際、VM管理部116は、ユーザモード時のコンテキストもゲストOS121に通知する。通常、当該コンテキストは、スタックに積んで通知される。ゲストOS121は、カーネルモードにおいて割り込みや例外時の処理を行う。当該処理の終了後、ゲストOS121は、ユーザモードへの切り替えをハイパーバイザ11に通知する。
なお、ハイパーバイザ11のコンテキストスイッチとしては、VM12間の切り替え、VM12内のプロセスの切り替え等も有る。コンテキストスイッチ制御部114は、ゲストOS121に関するユーザモードとカーネルモードの切り替えに特化している。
図21より明らかなように、第一の実施の形態では、ゲストOS121の動作モードの変更に応じては、有効なページテーブルは切り替えられない。したがって、TLB151のフラッシュを不要とすることができる。しかし、動作モードと有効なページテーブルとの間に不整合が生じる。但し、ドメインアクセス権によって、許可されるアクセス権は、二つの特権レベルのアクセス権のうち小さいアクセス権以下に制限される。MMU105は、ドメインアクセス権を優先させてメモリアクセスを制御するからである。したがって、本来のアクセス権を超えたメモリアクセスは適切に制限される。
続いて、図22は、第一の実施の形態のフォールト処理部が実行する処理手順を説明するためのフローチャートである。同図のフローチャートは、図9において説明した処理内容に対応する。
CPU104が発生させるフォールト(例外)には様々な種類ある。例えば、アクセスすべきページが存在しなかったり、アクセス権が無かったりすることによりメモリアクセス時に発生する例外や、0で除算したり、未定義の命令を実行しようとしたことによりCPU104が実行時に発生する例外等が存在する。
本実施の形態のフォールト処理部115は、メモリアクセス時に発生する例外に対する処理を実行する。かつ、ハイパーバイザ11の実行中ではなく、VM12の実行中に発生した例外が対象とされる。更に、ドメインアクセス権を超えてメモリアクセスが行われようとした場合に発生するドメインフォールトと、ページテーブルのエントリに設定されたアクセス権に違反した際に起きるアクセス違反の場合に、フォールト処理部115は呼び出される(図22の処理が開始される)。
ステップS171において、フォールト処理部115は、フォールトの発生要因となったゲストOS121(以下、「カレントゲストOS121」という。)が動作するVM12に対応するページテーブル対応表118に基づいて、有効なページテーブルを判定する。ページテーブル対応表118に基づく有効なページテーブルの判定方法は、図21のステップS162おいて説明した通りであるので、ここでの説明は省略する。なお、フォールトの発生要因となったゲストOS121は、VM管理情報に基づいて特定可能である。
続いて、フォールト処理部115は、有効なページテーブルが、カレントゲストOS121の現在の動作モードと整合しているか否かを判定する(S172)。すなわち、有効なページテーブルは、カレントゲストOS121の現在の動作モードに対応したものであるか否かが判定される。有効なページテーブルがカレントゲストOS121の動作モードと整合している場合(S172でYES)、図22の処理は終了する。すなわち、有効なページテーブルがユーザ用ページテーブルであり、カレントゲストOS121の動作モードがユーザモードである場合、又は有効なページテーブルがカーネル用ページテーブルであり、カレントゲストOS121の動作モードがカーネルモードである場合、図22の処理は終了する。この場合のフォールトは、動作モードに応じた本来のアクセス権(すなわち、ページテーブルのエントリのアクセス権)に違反したものであり、ページテーブルを切り替える必要は無いからである。換言すれば、有効なページテーブルと動作モードとが整合しているにも拘わらず、有効なページテーブルを切り替えることにより、両者の間に不整合を発生させる意味は無いからである。
なお、カレントゲストOSの現在の動作モードは、VM管理情報より取得可能である。
有効なページテーブルがカレントゲストOS121の動作モードと整合していない場合(S172でNO)、フォールト処理部115は、有効でないページテーブルのアドレスを、カレントゲストOSに係るページテーブル対応表118において実行中のプロセスに対応するエントリより取得する(S173)。続いて、フォールト処理部115は、取得されたアドレスによって、当該エントリのカレントページアドレスを更新する(S174)。
続いて、フォールト処理部115は、MMU105にTLB151のフラッシュを実行させる(S175)。続いて、フォールト処理部115は、カレントページアドレスを有効なページテーブルのアドレスとしてMMU105に設定する(S176)。続いて、フォールト処理部115は、新たに有効となったページテーブルとカレントゲストOS121の現在の動作モードとに基づいて、ドメインアクセス権を決定する(S177)。ドメインアクセス権の決定方法は、図6において説明した通りである。
続いて、フォールト処理部115は、カレントゲストOS121が利用する全てのドメインのドメイン番号に関して、決定されたドメインアクセス権をMMU105に設定する(S178)。なお、カレントゲストOS121が利用する全てのドメインは、ドメイン利用表119に基づいて判定される。
この後、ゲストOS121に制御を移すために、フォールト発生時に保存されているコンテキストが復元され、フォールト発生前のコンテキストからゲストOS121の処理が再開される。
図22の実行により、有効なページテーブルと動作モードとの間の不整合が是正される。また、ドメインアクセス権は、「フラグ」とされる。したがって、図22の実行後、MMU105は、動作モードに応じたページテーブルを用いて、メモリアクセスを制御する。
上述したように、第一の実施の形態によれば、TLB151のフラッシュのタイミングを遅延させることができる。すなわち、TLB151がフラッシュされる機会を減少させることができる。
また、最終的に、ページテーブルのエントリのアクセス権に基づいてメモリアクセスが制御されるため、一つのドメインに対して全ての組み合わせのアクセス権の設定が実質的に可能となる。
更に、ページテーブルの非特権モードのアクセス権の設定は、仮想化する際に変更する必要はない。したがって、仮想化に際して、ゲストOS121のメモリマップの大幅な設計変更は必要ない。すなわち、仮想化環境のOS(ゲストOS121)に割り当てられた特権レベルにおいてメモリアクセス保護を適切に図ることができる。
なお、第一の実施の形態では、ゲストOS121の動作モードの切り替えに関して、ASIDは寄与していない。但し、TLB151のエントリにASIDを付与する意味が無いわけではない。TLB151のエントリにASIDを付与することで、ゲストOS121上のプロセス間の切り替え、VM12間の切り替え時等において、TLB151のフラッシュを抑制することができるからである。すなわち、第一の実施の形態は、プロセスごと(仮想アドレス空間ごと)にASIDが割り当てられる仕組みに対して排他的なものではない。
次に、第二の実施の形態について説明する。第二の実施の形態では、第一の実施の形態と異なる点について説明する。
第二の実施の形態は、ページの属性の一つである、グローバル又はローカルについて考慮する。グローバルなページとは、ページテーブルのエントリにグローバルであることを示すフラグ(グローバルフラグ)が設定されているページをいい、複数の仮想アドレス空間(プロセス)によって共用される。ローカルなページとは、ページテーブルのエントリのグローバルフラグにローカルである(グローバルでない)ことが設定されているページをいい、一つの仮想アドレス空間(プロセス)に対応する。各ページをグローバルとするか、ローカルとするかは、OSの種類(OSのメモリマップに関する実装)に応じて決まる。例えば、或るOSは、カーネル空間に対応するページはグローバルとし、ユーザ空間に対応するページはローカルとするかもしれない。別のOSは、カーネル空間及びユーザ空間に対応する全てのページをローカルとするかもしれない。
ローカルなページについては、ASIDが有効となる。すなわち、MMU105は、ローカルなページについては、ページテーブルのエントリをTLB151にキャッシュする際に、MMU105に排他的に設定されているASIDを付与する。一方、グローバルなページについては、ASIDは無効である。すなわち、MMU105は、グローバルなページについては、ページテーブルのエントリがTLB151をキャッシュする際に、ASIDを付与しない。そうすることで、例えば、TLB151のフラッシュ時において、ASIDの付与されていないエントリをフラッシュ対象から除くことができ、キャッシュの効率化を図ることができるからである。
第二の実施の形態では、仮想アドレス空間の全ての空間がローカルなページに対応する場合を前提とする。すなわち、第二の実施の形態は、全ての空間がローカルなページに対応するように仮想アドレス空間を生成するゲストOS121に関して適用可能である。なお、厳密には、仮想化環境における仮想アドレス空間は、ユーザ空間及びカーネル空間に加え、ハイパーバイザ空間を含む。但し、本実施の形態において、全ての仮想アドレス空間とは、便宜上、ハイパーバイザ空間を除く空間をいう。
仮想アドレス空間の全ての空間がローカルなページに対応する場合が前提とされることは、第二の実施の形態では、ASIDを常に有効に利用することが可能であることを意味する。したがって、ゲストOS121の動作モードの切り替え時のTLB151のフラッシュを抑制するための手段として、ASIDを有効活用する点において、第二の実施の形態は、第一の実施の形態と異なる。
図23は、第二の実施の形態の動作モード切り替え時における処理内容の一例を説明するための図である。同図の初期状態は、図7と同様である。すなわち、切り替え前の動作モードは、ユーザモードであるとする。また、動作モードの切り替え前の有効なページテーブルは、ユーザ用ページテーブルであるとする。すなわち、MMU105には、ユーザ用ページテーブルのアドレスが登録されている。
ハイパーバイザ11は、ユーザモードからカーネルモードへの切り替えを検知すると(S31)、切り替え先のカーネルモードに対応したASIDをMMU105に設定する(S32)。すなわち、第二の実施の形態では、ゲストOS121の動作モードごとに、相互に値が異なるASIDが割り当てられる。具体的には、通常、ゲストOS121により、ユーザのプロセスに対して一つ割り当てられるASIDに加えて、カーネルモード用のASIDが更に割り当てられる。
したがって、ユーザモード及びカーネルモードのそれぞれについて一つのASIDが割り当てられる。続いて、ハイパーバイザ11は、カーネル用ページテーブルのアドレスをMMU105に設定する(S33)。すなわち、カーネル用ページテーブルが、排他的に有効化される。
なお、MMU105に設定されるドメインアクセス権は、固定的に「フラグ」とされる。すなわち、常に、有効なページテーブルのエントリの非特権モードに対するアクセス権に基づいてメモリアクセスが制御される。
第二の実施の形態では、全てのページがローカルであるため、ページテーブルのエントリがキャッシュされる際は、常に、当該ページテーブルに対応するASIDが付与される。したがって、ユーザモード用ページテーブルのエントリと、カーネルモード用テーブルのエントリとが、同時期にTLB151内に共存することができる。したがって、ゲストOS121の動作モードの切り替え時におけるTLB151のフラッシュを抑制することができる。また、ゲストOS121の動作モードと、有効なページテーブルとは常に連動しているため、動作モードに応じたアクセス権に基づくメモリアクセスの制御が可能となる。
第二の実施の形態の情報処理装置10について説明する。
ASID設定部122は、ステップS102(図12)において、生成されたプロセスに対して動作モードごとに値の異なるASID(すなわち、二つのASID)を割り当てる。
したがって、ASID管理部111は、ステップS112(図13)において、二つのASIDが対応付けられたエントリを、ASID管理表117に追加する。
図24は、第二の実施の形態のASID管理表のエントリの構成例を示す図である。同図に示されるように、第二の実施の形態のASID管理表117のエントリは、VMIDの他に、ユーザASID及びカーネルASIDを格納するための項目を含む、ユーザASIDは、ユーザモードに対応するASIDである。カーネルASIDは、カーネルモードに対応するASIDである。
なお、第一の実施の形態と同様に、ASID設定部122は、一つのプロセスに対して一つのASIDを割り当て、ASID管理部111が、例えば、ステップS112において、もう一つのASIDを割り当てるようにしてもよい。
また、ドメイン管理部113は、例えば、ステップS152(図19)において、通知されたドメイン番号に対して、「フラグ」を値とするドメインアクセス権をMMU105に設定する。なお、ドメインアクセス権は、ゲストOS121が使用するドメイン番号以外のドメイン番号に対しては、変更しない。
また、図25は、第二の実施の形態のコンテキストスイッチ制御部が実行する処理手順を説明するためのフローチャートである。
ステップS201において、コンテキストスイッチ制御部114は、ゲストOS121の動作モードの切り替えの要否を判定する。当該ステップの処理内容は、図21のステップS161と同様である。動作モードの切り替えの必要がなければ、処理は終了する。
コンテキストスイッチ制御部114は、動作モードの切り替えが必要であると判定した場合(S201でYES)、切り替え対象のゲストOS121(以下、「カレントゲストOS121」という。)が動作するVM12に対応するASID管理表117の実行中のプロセスに対応するエントリより、切り替え先の動作モードに対応するASIDを取得する(S202)。なお、ゲストOS121の動作モードと同様に、有効なASIDをVM管理情報に保存しておくようにしてもよい。その場合、VM管理情報に保存されているASIDと対をなすASIDがASID管理表117より取得されればよい。さらに、有効なASIDと対をなすASIDもVM管理情報に保存しておけば、ASID管理表117を参照する必要はなくなり、処理の高速化を図れる。ただし、VM管理情報の更新は適時行う必要がある。
続いて、コンテキストスイッチ制御部114は、取得されたASIDをMMU105に設定する(S203)。MMU105に設定されたASIDは、排他的に有効となる。続いて、コンテキストスイッチ制御部114は、カレントゲストOS121に係るページテーブル対応表118の実行中のプロセスに対応するエントリより、切り替え先の動作モードに対応するページテーブルのアドレスを取得する(S204)。具体的には、当該エントリ内のユーザ用ページテーブルアドレスとカーネル用ページテーブルアドレスのうち、カレントページアドレスと異なるアドレスが取得される。すなわち、現在MMU105に設定されているページテーブルのアドレスと対をなすページテーブルアドレスが取得される。なお、有効なページテーブルのアドレスをVM管理情報に保存しておくようにしてもよい。その場合、VM管理情報に保存されているアドレスと対をなすアドレスがページテーブル対応表118より取得されればよい。さらに、有効なページテーブルと対をなすページテーブルもVM管理情報に保存しておけば、ページテーブル対応表118を参照する必要はなくなり、処理の高速化を図れる。ただし、VM管理情報の更新は適時行う必要がある。
続いて、コンテキストスイッチ制御部114は、カレントゲストOS121に係るページテーブル対応表118の実行中のプロセスに対応するエントリのカレントページテーブルアドレスを、取得されたアドレスによって更新する(S205)。続いて、コンテキストスイッチ制御部114は、カレントページテーブルアドレスをMMU105に設定する(S206)。続いて、コンテキストスイッチ制御部114は、CPU104のレジスタの入れ替えを行う(S207)。
図25の実行後、MMU105は、ゲストOS121の動作モードに応じたページテーブルのエントリのアクセス権によってメモリアクセスの制御を行う。
なお、第二の実施の形態では、コンテキストスイッチ制御部114によってドメインアクセス権は更新される必要はない。第二の実施の形態において、ドメインアクセス権は、「フラグ」に固定されるからである。
また、第二に実施の形態において、フォールト処理部115による処理は不要である。有効なページテーブルとゲストOS121の動作モードとは、常に整合が図られており、フォールト処理部115による不整合の是正は不要だからである。
上述したように、第二の実施の形態によれば、仮想アドレス空間の全てをローカルなページに対応させるゲストOS121については、ASID及び有効なページテーブルを切り替えることで、TLB151のフラッシュを抑制することができる。また、動作モードに応じたアクセス権によって、メモリアクセスを制御することができる。
更に、ページテーブルの非特権モードのアクセス権の設定は、仮想化する際に変更する必要はない。したがって、仮想化に際して、ゲストOS121のメモリマップの大幅な設計変更は必要ない。
ここで、第一の実施の形態と第二の実施の形態との関係について説明する。第一の実施の形態は、仮想アドレス空間に対する全てのページがローカルであるか否かを問わず、実施可能である。一方、第二の実施の形態は、仮想アドレス空間に対する全てのページがローカルである場合に限って実施可能である。すなわち、第二の実施の形態を実施可能な範囲は、第一の実施の形態を実施可能な範囲に包含される関係にある。ここで、二つの実施の形態が重複する範囲(すなわち、全てのページがローカルである仮想アドレス空間を生成するゲストOS121に関する処理)においては、第二の実施の形態の方が有利であるといえる。第一の実施の形態では、TLB151のフラッシュの機会が削減されるのにとどまるところ、第二の実施の形態では、TLB151をフラッシュする必要は無いからである。
そうすると、情報処理装置10において、全てのページがローカルである仮想アドレス空間を生成するゲストOS121と、そうでないゲストOS121とが共存する場合は、ハイパーバイザ11が、ゲストOS121に応じて、第一の実施の形態又は第二の実施の形態を実施することができれば好都合であるといえる。なお、以下において、全てのページ(ハイパーバイザ空間に係るページを除く)がローカルである仮想アドレス空間を生成するゲストOS121のタイプを「ローカル」という。また、そうでないOSのタイプを「グローバル」という。なお、上記の分類において、ゲストOS121のタイプがローカルであったとしても、一つのプロセスに対して同一のASIDを二つ割り当てるゲストOS121については、「グローバル」に分類されることとする。この場合、二つの動作モードのページテーブルのエントリを、TLB151上において区別することができず、第二の実施の形態を実施できないからである。
ゲストOS121に応じて、ハイパーバイザ11の実施形態を変化させるには、動作モードの切り替えに係るゲストOS121のタイプがローカルであるかグローバルであるかを、ハイパーバイザ11(コンテキストスイッチ制御部114)が区別できる必要がある。
そこで、例えば、各ゲストOS121のドメイン設定部124は、当該ゲストOS121が使用するドメインのドメイン番号を通知する際に(図18:S142)、当該ドメインに属するページは全てローカルであるか否かを示すフラグ(以下、「グローバルフラグ」という。)を通知する。例えば、ドメインに一つでもグローバルなページが属しているドメインに対するグローバルフラグは「1」とされ、グローバルなページが属していないドメインに対するグローバルフラグは「0」とされる。なお、ゲストOS121は、自らが仮想アドレス空間を生成し、自らがドメインの割り当てを決定する。したがって、ゲストOS121に含まれるドメイン設定部124は、各ドメインに属するページがローカルであるかグローバルであるかを予め知っている。
当該通知を受けるハイパーバイザ11のドメイン管理部113は、ステップS152(図19)において、通知されたドメイン番号ごとにグローバルフラグを含むエントリをドメイン利用表119に登録する。したがって、この場合のドメイン利用表119のエントリは次のように拡張される。
図26は、拡張されたドメイン利用表のエントリの構成例を示す図である。同図に示されるように、拡張されたドメイン利用表119では、ドメイン番号ごとにグローバルフラグか記録される。
なお、ドメイン管理部113が自動的又は能動的にドメイン番号を登録する場合、ドメイン管理部113が、ページテーブルエントリのグローバルフラグをチェックすることでドメインがグローバルであるかローカルであるかを判定してもよい。この場合、ドメインの追加や削除は、ドメイン設定部124が行わなくてよい。
コンテキストスイッチ制御部114は、拡張されたドメイン利用表119を利用して、動作モードの切り替え対象のゲストOS121のタイプを判断すればよい。具体的には、ゲストOS121の動作モードの切り替えが通知された場合、コンテキストスイッチ制御部114は、切り替え対象のゲストOS121に係るドメイン利用表119の全てのドメイン番号に対するグローバルフラグを参照する。グローバルフラグの値が、全てのドメイン番号について「0」であれば、当該ゲストOS121のタイプは、ローカルであると判断される。したがって、この場合、コンテキストスイッチ制御部114は、第二の実施の形態(図25)を実施する。但し、当該ゲストOS121に係るASID管理表117の実行中のプロセスに対応するエントリに登録されている二つのASIDの値が同じであれば、コンテキストスイッチ制御部114は、第一の実施の形態(図21)を実施する。
一方、グローバルフラグの値が、少なくとも一つのドメイン番号について「1」であれば、コンテキストスイッチ制御部114は、第一の実施の形態(図21)を実施する。
また、コンテキストスイッチ制御部114がいずれの実施の形態を実施するかの判断に、ASID管理表117が利用されてもよい。すなわち、対象となるエントリに異なる二つのASIDが登録されている場合、第二の実施の形態が実施されればよい。それ以外の場合は、第一の実施の形態が実施されればよい。
なお、第一の実施の形態と、第二の実施の形態とのASID管理表117のエントリの形式を揃えるため、第一の実施の形態においても、ASIDが二つ登録されるようにしてもよい。この場合、二つのASIDは、同じ値とされればよい。
また、タイプがローカルであるゲストOS121に関してフォールト処理部115が処理対象とするフォールトが発生した場合、フォールト処理部115は、何も実行しない。すなわち、タイプがローカルであるゲストOS121に関しては、コンテキストスイッチ制御部114によって第二の実施の形態が実施されるため、ゲストOS121の動作モードと有効なページテーブルとの間に不整合は生じない。したがって、ステップS172(図22)の判定によって、フォールト処理部115による処理は終了してしまうからである。よって、第二の実施の形態が実施される場合に、フォールト処理部115が存在することによる不都合は生じない。
このように、第一の実施の形態と第二の実施の形態とは、排他的な関係ではなく、共存可能な関係にある。又は、第二の実施の形態は、第一の実施の形態における一部を改善するものであるともいえる。
但し、タイプがローカルであるゲストOS121しか対応しないというハイパーバイザ11を実装する場合、第二の実施の形態が単独で実施されてもよい。この場合、ドメインに相当する概念は必要とはされない。第二の実施の形態において、ドメインアクセス権は、「フラグ」に固定されており、実質的に存在意義が無いからである。第二の実施の形態において、ドメインアクセス権をMMU105に設定するのは、MMU105は、ドメインアクセス権を設定可能なMMUであるからである。したがって、第二の実施の形態の実施に際して使用されるMMUがドメインに対応していない場合、第二の実施の形態において、ドメインに関する処理は、除去されてよい。
次に、第三の実施の形態について説明する。第三の実施の形態は、第一又は第二の実施の形態と異なる点について説明する。第三の実施の形態では、一つの仮想アドレス空間に関して、ローカルなドメインとグローバルなドメインとが混在している場合について説明する。換言すれば、ローカルなドメインとグローバルなドメインとが混在する仮想アドレス空間を生成するゲストOS121に対して実行される処理について説明する。したがって、第三の実施の形態では、ドメインが有する、ページ(ページテーブルのエントリ)を分類するという性質が有効に機能する。
ローカルなドメインとは、当該ドメインに属する全てのページがローカルであるドメインをいう。グローバルなドメインとは、当該ドメインに属する少なくとも一つのページがグローバルであるドメインをいう。
図27は、第三の実施の形態における有効なページテーブル及び有効なASIDの遷移例を説明するための図である。同図では、便宜上、一つの仮想アドレス空間に関して、二つのドメインが割り当てられ、一方は、ローカルなドメイン(以下、「ドメインL」という。)、他方は、グローバルなドメイン(以下、「ドメインG」という。)であるとする。
この場合、本実施の形態では、一つのプロセス(仮想アドレス空間)に対して、4つのページが割り当てられる。同図には、この4つのページテーブルPT1〜PT4の遷移例が示されている。各ページテーブルは、上下に2分されて表現されている。上半分は、ドメインLに係るエントリを示す。下半分は、ドメインGに係るエントリを示す。
ページテーブルPT1は、ドメインGに係るエントリ及びドメインLに係るエントリの非特権モードのアクセス権にユーザモードのアクセス権が設定されたページテーブルである。なお、ページテーブルPT1を、以下「ユーザ・ユーザ用ページテーブル」ともいう。
ページテーブルPT2は、ドメインGに係るエントリの非特権モードのアクセス権にユーザモードのアクセス権が設定され、ドメインLに係るエントリの非特権モードのアクセス権にカーネルモードのアクセス権が設定されたページテーブルである。なお、ページテーブルPT2を、以下「ユーザ・カーネル用ページテーブル」ともいう。
ページテーブルPT3は、ドメインGに係るエントリ及びドメインLに係るエントリの非特権モードのアクセス権にカーネルモードのアクセス権が設定されたページテーブルである。なお、ページテーブルPT3を、以下「カーネル・カーネル用ページテーブル」ともいう。
ページテーブルPT4は、ドメインGに係るエントリの非特権モードのアクセス権にカーネルモードのアクセス権が設定され、ドメインLに係るエントリの非特権モードのアクセス権にユーザモードのアクセス権が設定されたページテーブルである。なお、ページテーブルPT4を、以下「カーネル・ユーザ用ページテーブル」ともいう。
なお、一つのプロセス(仮想アドレス空間)に対して割り当てられるASIDは、二つでよい。すなわち、ASIDは、ゲストOS121上において実現したい特権レベルの数だけ有ればよい。同図では、各ページテーブルの下に、有効なASIDが示されている。また、有効なASIDの下には、ゲストOS121の動作モードが示されている。
ここで、ローカルなドメインLに係るエントリについては、ASIDを対応付けてTLB151にキャッシュすることができる。一方、グローバルなドメインGに係るエントリについては、ASIDに対応づけてTLB151にキャッシュできるとは限らない。第三の実施の形態では、二つのドメインの斯かる特性を利用して、ドメインLに関しては第二の実施の形態が適用され、ドメインGに関しては第一の実施の形態が適用されるようにする。
4つのページテーブルのうち、1つのページテーブルが排他的に有効とされる。例えば、ゲストOS121の動作モードがユーザモードであり、ページテーブルPT1が有効な場合に、カーネルモードへの切り替えが発生したとする。動作モードの切り替えが発生した場合、グローバルなドメインGに係るについては、第一の実施の形態を適用したいため、ページテーブルのエントリの切り替えは行いたくない。一方、ローカルなドメインLについては、第二の実施の形態を適用したいため、切り替え先の動作モード(カーネルモード)に対応したアクセス権が設定されたエントリに切り替えたい。そうすると、この場合、ページテーブルPT2を排他的に有効化すればよいことになる。実際問題として、有効なページテーブルの全エントリが切り替わるため、ドメインGのエントリに関しても切り替えが発生する。しかし、ページテーブルPT1とページテーブルPT2とにおいて、ドメインGに対するエントリの内容は同じである。したがって、実質的に、ドメインGに関しては切り替えが発生していない場合と同じ効果を得るこができる。なお、ローカルなドメインLに関してはエントリが実質的にも切り替わったため、第二の実施の形態と同様、有効なASIDはカーネルASIDに切り替えられる。
続いて、ドメインフォールト又はアクセス違反が発生したとする。この場合、グローバルなドメインGについては、第一の実施の形態を適用したいため、動作モードに応じたエントリに切り替えたい。一方、ローカルなドメインLについては、第二の実施の形態を適用したいため、ページテーブルのエントリは切り替えたくない。そうすると、ページテーブルPT3を排他的に有効化すればよいこととなる。なお、ローカルなドメインLに関しては実質的にエントリの切り替えは発生しないため、有効なASIDは切り替えられない。
続いて、動作モードの切り替えが発生すると、ページテーブルPT1からページテーブルPT2への切り替えと同じ要領で、ページテーブルPT3からページテーブルPT4への切り替えが実行される。
なお、ページテーブルは4つであっても、ローカルなドメインLに対するエントリは、実質的に動作モードに対応した2種類である。したがって、ASIDは、2つでよいのである。
図27において、ゲストOS121の動作モードがカーネルモードであり、ページテーブルPT2が有効な状態において、ページテーブルPT2のドメインGに係るエントリに関して、動作モードとの不整合が発生している。また、ゲストOS121の動作モードがユーザモードであり、ページテーブルPT4が有効な状態において、ページテーブルPT4のドメインGに係るエントリに関して、動作モードとの不整合が発生している。すなわち、動作モードの切り替え後、ドメインフォールト又はアクセス違反が発生するまでの間、有効なページテーブルのドメインGに係るエントリに関して、動作モードとの不整合が発生している。斯かる不整合に対するアクセス保護の対策として、第一の実施の形態と同様に、ドメインが利用される。すなわち、ドメインアクセス権により、不整合が発生している状態における、本来のアクセス権を超えたメモリアクセスが防止される。第三の実施の形態において、ドメインアクセス権は、図28に示されるように決定される。
図28は、第三の実施の形態におけるドメインアクセス権の決定方法を説明するための図である。同図の見方は、図6と同様である。第三の実施の形態では、ページテーブルが4種類有るため、行数が増えている点が異なる。なお、同図に示されるドメインアクセス権の値は、グローバルなドメインGに関するものである。ローカルなドメインLについては、「フラグ」固定でよいため、図示は省略されている。
図28に示されように、有効なページテーブルのドメインGのエントリのアクセス権が、ゲストOS121の動作モードよりも高い(又は広い)場合、ドメインアクセス権は「アクセス不可」とされる。それ以外のドメインアクセス権は「フラグ」とされる。
なお、1つの仮想アドレス空間に関して、ローカルなドメインLが2以上割り当てられもよい。又は、グローバルなドメインGが2以上割り当てられてもよい。ローカルなドメインLが2以上割り当てられる場合、ドメインLの個数の増加に応じて、ページテーブルの種類を増加させなくてもよい。すなわち、ページテーブルの種類は、ドメインLが1つである場合と同じでもよい。ドメインLのエントリについては、動作モードの切り替えに応じて切り替えられるため、全てのドメインLのエントリが同期して切り替わるからである。
一方、グローバルなドメインGが2以上割り当てられる場合、ドメインGの増加に応じてページテーブルの種類を増加させる意義はある。ドメインGごとに対応する動作モードが異なるエントリを有するページテーブルを別に用意することで、フォールトの発生した際に実質的に切り替えられるエントリを当該フォールトに係るドメインGに係るエントリに限定することができる。
図29は、グローバルなドメインごとにページテーブルを分ける意義を説明するための図である。同図の見方は、図27と同じである。
同図には、ページテーブルPT5〜PT8へ遷移する様子が示されている。なお、各ページテーブルは、ローカルなドメインLに係るエントリと、グローバルなドメインG1に係るエントリと、グローバルなドメインG2に係るエントリとを含む。すなわち、同図には、グローバルなドメインが二つ割り当てられた場合が示されている。
まず、ゲストOS121の動作モードがユーザモードである場合に、ページテーブルPT5が有効なページテーブルであったとする。この状態で、ゲストOS121の動作モードがカーネルモードに切り替わると、ページテーブルPT6が有効となる。ページテーブルPT6は、ドメインLに係るエントリのアクセス権が、ページテーブルPT5と異なる。続いて、ドメインG1に係るページに対するアクセスにおいて、フォールトが発生すると、ページテーブルPT7が有効となる。ページテーブルPT7は、ドメインG1に係るエントリのアクセス権が、ページテーブルPT6と異なる。続いて、ゲストOS121の動作モードがユーザモードに切り替わると、ページテーブルPT8が有効となる。ページテーブルPT8は、ドメインLに係るエントリのアクセス権が、ページテーブルPT7と異なる。
現在の状態において、ゲストOS121はユーザモードであり、ドメインG2に係るエントリは、ユーザモードに対応するものである。すなわち、ドメインG2のエントリが、ドメインG1と連動して切り替わらないことにより、動作モードと整合したものとなっている。したがって、ページPT8が有効な状態において、ドメインG2に係るページに対して、本来のアクセス権の範囲内のメモリアクセスが発生したとしても、フォールトは発生しない。したがって、TLB151のフラッシュは発生しない。
一方、ドメインG2のエントリが、ドメインG1のエントリと連動して切り替わる場合、ページテーブルPT8に関して、ドメインG2のエントリは、カーネルモードに対応したものとなっている。したがって、ドメインG2に係るページに対して、本来のアクセス権の範囲内のメモリアクセスが発生した場合、フォールトが発生する可能性がある。
このように、グローバルなドメインについては、ドメインごとにページテーブルを分けた方が、フォールトが発生する機会を削減することができ、TLB151がフラッシュされる機会を削減される。
そこで、必要なページテーブルの個数は、以下の式(1)で算出されればよい。
2×2n ・・・ (1)
nは、グローバルなドメインの数である。例えば、図27の場合、グローバルなドメインは、1個である。したがって、必要なページテーブルは、2×21=4個となる。また、図29の場合、グローバルなドメインは、2個である。したがって、2×22=8個となる。
なお、式(1)において、第一項の「2」は、動作モードの数に対応する。すなわち、(1)は、動作モード(の種類)とドメインの(種類)との組み合わせごとに、ページテーブルを生成すべきことを意味する。したがって、例えば、動作モードが2以上となる場合は、第一項の値を、動作モードの数に一致させればよい。
以下、第三の実施の形態の情報処理装置10に関して説明する。
第三の実施の形態では、ページテーブルの種類の拡張に伴って、ページテーブル設定部123は、ステップS122(図15)において、生成されたプロセス(すなわち、当該プロセスに係る仮想アドレス空間)に対して必要な数のページテーブルを生成する。必要な数は、式(1)に基づいて算出される。
続いて、ページテーブル設定部123は、生成されたページテーブルのアドレスの登録指示をページテーブル管理部112に対して通知する(S123)。
また、ページテーブル管理部112は、ステップS132(図16)において、登録指示において指定されたページテーブルのアドレスの組を含むエントリを当該登録指示元のページテーブル設定部123が動作するVM12に対応するページテーブル対応表118に追加する。したがって、当該エントリは、図30に示されるようになる。
図30は、第三の実施の形態のページテーブル対応表のエントリの構成例を示す図である。同図に示されるページテーブル対応表118のエントリは、四つのページテーブルのアドレスを格納するための項目を有する。すなわち、当該エントリは、図27のように、グローバルなドメインが一つである場合に対応したものである。
ドメイン利用表119は、図26において説明した、グローバルフラグを格納可能な形式とすればよい。したがって、ドメイン設定部124及びドメイン管理部113は、当該形式のドメイン利用表119に対応した処理を実行すればよい。
また、図31は、第三の実施の形態のコンテキストスイッチ制御部が実行する処理手順を説明するためのフローチャートである。
ステップS301において、コンテキストスイッチ制御部114は、ゲストOS121の動作モードの切り替えの要否を判定する。当該ステップの処理内容は、図21のステップS161と同様である。動作モードの切り替えの必要がなければ、処理は終了する。
コンテキストスイッチ制御部114は、動作モードの切り替えが必要であると判定した場合(S301でYES)、切り替え対象のゲストOS121に係るドメイン利用表119のエントリを取得し(S302)、ローカルなドメインの有無を判定する(S303)。ローカルなドメインの有無は、取得されたエントリのグローバルフラグに基づいて判定される。
ローカルなドメインが少なくとも一つ有る場合(S303でYES)、コンテキストスイッチ制御部114は、ステップS304〜S308を実行する。ステップS304〜S308の処理内容は、図25のステップS202〜S206と同様でよい。但し、第三の実施の形態では、ページテーブルが4以上有るため、ステップS306の内容がステップS204と多少異なる。具体的には、ローカルなドメインに対応するエントリは、切り替え前のエントリと、対応する動作モードが異なり、グローバルなドメインに対応するエントリは、切り替え前のエントリと、対応する動作モードが同じである(共通する)ページテーブルのアドレスがページテーブル対応表118より取得される。
ステップS308に続いて、コンテキストスイッチ制御部114は、ステップS302において取得された、ドメイン利用表119のエントリのグローバルフラグに基づいて、グローバルなドメインの有無を判定する(S309)。グローバルなドメインが有る場合(S309でYES)、コンテキストスイッチ制御部114は、ステップS302において取得された、ドメイン利用表119のエントリに基づいて、グローバルなドメインのドメイン番号を特定する(S310)。すなわち、グローバルフラグが「1」であるエントリのドメイン番号が、グローバルなドメインのドメイン番号として特定される。
続いて、コンテキストスイッチ制御部114は、ステップS311〜S313を実行する。ステップS311〜S313の処理内容は、図21のステップS162〜S164と同様でよい。但し、ステップS312において、コンテキストスイッチ制御部114は、図28において説明した方法によってドメインアクセス権を決定する。続いて、コンテキストスイッチ制御部114は、動作モードの切り替え対象のゲストOS121が利用するドメインのうちグローバルなドメインのドメイン番号に関して、決定されたドメインアクセス権をMMU105に設定する(S313)。すなわち、ステップS310において特定されたドメイン番号に関して、ドメインアクセス権がMMU105に設定される。このとき、特定されたドメイン番号以外のドメインアクセス権は変更しない。
なお、ステップS310〜S313は、ステップS303においてローカルなドメインは存在しないと判定された場合も実行される。
続いて、コンテキストスイッチ制御部114は、CPU104のレジスタの入れ替えを行う(S314)。なお、ステップS309において、グローバルなドメインは存在しないと判定された場合も、ステップS314は実行される。
続いて、第三の実施の形態のフォールト処理部115の処理手順について説明する。当該処理手順は、基本的に図22において説明したものと同様でよい。但し、第三の実施の形態において、フォールト処理部115は、ステップS171の前に、フォールトに係るゲストOS121(カレントゲストOS121)に対応するドメイン利用表119を参照し、グローバルなドメインの有無を判定する。グローバルなドメインが存在する場合、フォールト処理部115は、ステップS171以降を実行する。
ステップS172において、フォールト処理部115は、有効なページテーブルにおいて、フォールトに係るグローバルなドメインに係るエントリは、カレントゲストOS121の動作モードと整合しているか否かを判定する。なお、フォールトに係るグローバルなドメインは、フォールトによって通知される仮想アドレスに基づいて特定される。当該グローバルなドメインに係るエントリが、カレントゲストOS121の動作モードと整合していない場合(S172でNO)、フォールト処理部115は、ステップS173以降を実行する。
ステップS173において、フォールト処理部115は、有効なページテーブルと、当該グローバルなドメインのエントリのみが異なるページテーブルのアドレスをカレントゲストOSに係るページテーブル対応表118において実行中のプロセスに対応するエントリより取得する。具体的には、次のようなページテーブルのアドレスが取得される。まず、当該グローバルなドメインに対応するエントリについては、有効なページテーブルのエントリと対応する動作モードが異なるページテーブルである。かつ、他のグローバルなドメインに対応するエントリ及びローカルなドメインに対応するエントリは、有効なページテーブルのエントリと対応する動作モードが同じである(共通する)ページテーブルである。
また、ステップS177において、フォールト処理部115は、図28において説明した方法によって、ドメインアクセス権を決定する。
上述したように、第三の実施の形態によれば、ローカルなドメインとグローバルなドメインとが混在する仮想アドレス空間を生成するゲストOS121に関して、第一の実施の形態よりも、TLB151のフラッシュの機会を削減させることができる。すなわち、第一の実施の形態でも、一つの仮想アドレス空間に関して、ローカルなドメインとグローバルなドメインとが混在している場合に対応可能である。第一の実施の形態は、ドメインがローカルであるかグローバルであるかを問わないからである。但し、第三の実施の形態において、有効なページテーブルのローカルなドメインに係るエントリについては、ゲストOS121の動作モードと連動して切り替わる。したがって、ローカルなドメインに関するメモリアクセスに関しては、フォールト処理部115の呼び出しの要因となるフォールトは発生しない。したがって、第三の実施の形態によれば、当該フォールトの発生機会を削減することができる。このことは、フォールト処理部115による処理(図22)が実行される機会の削減を意味する。なわち、TLB151がフラッシュされる機会の削減を意味する。
なお、第三の実施の形態を適用可能な範囲は、第二の実施の形態も包含する。すなわち、一つの仮想アドレス空間に係る全てのドメインがローカルである場合についても、第三の実施の形態は適用可能である。この場合、式(1)によって、必要なページテーブルの数は2となる。この値は、第二の実施の形態に一致する。
また、ページテーブル設定部123は、ドメインごと、かつ、ゲストOS121の動作モードごとに、ページテーブル(すなわち、ドメインの領域ごとに分割されたページテーブル)を生成し、ページテーブル管理部112に通知するようにしてもよい。この場合、コンテキストスイッチ制御部114又はフォールト処理部115は、有効なページテーブルを切り替える際に、例えば、図27のページテーブルPT1〜PT4や、図29のページテーブルPT5〜PT8のようなページテーブルを組み立てて、MMU105に設定すればよい。組み立てたページテーブルは、ページテーブル対応表118に登録するようにしてもよい。
また、予め用意するページテーブルを少なくすることも可能である。必要なページテーブルが、ページテーブル対応表118に登録されているか否かを識別可能としておく。ページテーブル対応表118に登録されていないページテーブルが必要となった場合、ハイパーバイザ11は、当該ページテーブルの登録要求をゲストOS121へ通知する。ゲストOS121のページテーブル設定部123は、要求されたページテーブルを生成し、ページテーブル管理部112に当該ページテーブルのアドレスを通知する。こうすることにより、ページテーブルによって消費される記憶領域が削減される可能性を高めることができる。
また、本実施の形態が対応可能な特権レベル(動作モード)の数は、二つに限定されない。例えば、CPU104が三つの特権レベルを有するとする。また、ページテーブルのエントリには三つの特権レベルのそれぞれのアクセス権が設定可能であるとする。このような場合において、ハイパーバイザ11に二つの特権レベルが割り当てられてしまい、残りの一つの特権レベルにおいて、ゲストOS121に関して三つの特権レベルを実現したいとする。この場合、一つのプロセスに対して三つのページテーブルが生成されればよい。また、第二又は第三の実施の形態では、一つのプロセスに対して三つのASIDが割り当てられればよい。
また、例えば、ARMアーキテクチャのように、ページテーブルを二つ同時にMMU105に設定することが可能なアーキテクチャもある。一つのページテーブルで、4GB空間全体を表し、もう一つのテーブルで4GB空間の一部分を表す。当該一部分のみを切り替えて使用することで、プロセスの切り替えを実現し、プロセス用のページテーブルの領域を削減するための仕組みである。このようなアーキテクチャに対して、本実施の形態が適用されてもよい。なお、4GB空間全体のページテーブルは、VM12に対し一つ登録するようにしても実現可能である。
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
以上の説明に関し、更に以下の項を開示する。
(付記1)
情報処理装置に、
一つの仮想アドレス空間に対して、特権レベルの異なる動作モードごとに生成され、当該動作モードに応じた第一のアクセス権が設定された各ページテーブルのアドレスを、前記仮想アドレス空間を管理するオペレーティングシステムより受け付け、該アドレスを該オペレーティングシステムに関連付けてページテーブル対応情報記憶手段に記録するページテーブル管理手順と、
前記オペレーティングシステムの前記動作モードの切り替えに応じ、前記第一のアクセス権が相対的に小さい前記動作モードに応じた前記第一のアクセス権以下の値を示す第二のアクセス権をメモリ管理ユニットに設定するコンテキストスイッチ制御手順と、
前記第二のアクセス権を超えるメモリアクセスに応じ、現在の前記動作モードに対応した前記アドレスを前記メモリ管理ユニットに設定し、トランスレーション・ルックアサイド・バッファのフラッシュを前記メモリ管理ユニットに実行させ、該アドレスに係るページテーブルに設定された前記第一のアクセス権を有効とさせる値を示す前記第二のアクセス権を前記メモリ管理ユニットに設定するフォールト処理手順とを実行させ、
前記メモリ管理ユニットは、前記第二のアクセス権を、当該メモリ管理ユニットに前記アドレスが設定されているページテーブルに係る前記第一のアクセス権に優先させてメモリアクセスの制御を行うメモリアクセス制御プログラム。
(付記2)
一つの仮想アドレス空間に対して、前記特権レベルの異なる動作モードごとに、当該動作モードに応じた前記第一のアクセス権が設定されたページテーブルを生成し、該ページテーブルのアドレスを前記ページテーブル管理手順に通知するページテーブル設定手順を前記オペレーティングシステムに実行させる付記1記載のメモリアクセス制御プログラム。
(付記3)
前記情報処理装置に、
前記仮想アドレス空間に対して前記動作モードごとに割り当てられた識別子を前記オペレーティングシステムより受け付け、前記識別子を識別子記憶手段に記録する識別子管理手順を実行させ、
前記コンテキストスイッチ制御手順は、グローバルなページを含まない仮想アドレス空間については、前記動作モードの切り替えに応じ、切り替え先の前記動作モードに対応する前記識別子及び前記ページテーブルのアドレスを前記メモリ管理ユニットに設定し、
前記メモリ管理ユニットは、当該メモリ管理ユニットに設定された前記識別子を付与して、当該メモリ管理ユニットに設定されたアドレスに係るページテーブルのエントリを前記トランスレーション・ルックアサイド・バッファにキャッシュする付記1又は2記載のメモリアクセス制御プログラム。
(付記4)
前記仮想アドレス空間に対して前記動作モードごとに前記識別子を割り当て、該識別子を前記識別子管理手順に通知する識別子設定手順を前記オペレーティングシステムに実行させる付記3記載のメモリアクセス制御プログラム。
(付記5)
前記ページテーブルのエントリの分類単位であるドメインの識別情報を前記オペレーティングシステムより受け付け、ローカルなページのみが属するローカルな前記ドメインに関して、前記第一のアクセス権を有効とさせる値を示す前記第二のアクセス権を前記メモリ管理ユニットに設定するドメイン管理手順を前記情報処理装置に実行させ、
前記ページテーブル管理手順は、前記動作モード及び前記ドメインの組み合わせごとに生成されたページテーブルのアドレスを受け付け、
前記コンテキストスイッチ制御手順は、前記動作モードの切り替えに応じ、前記メモリ管理ユニットに前記アドレスが設定されているページテーブルに対して前記ローカルなドメインに係るエントリは異なり、グローバルなページが属するグローバルな前記ドメインに係るエントリは共通するページテーブルの前記アドレスと、切り替え先の前記動作モードに対応する前記識別子とを前記メモリ管理ユニットに設定し、前記グローバルなドメインに関して前記第一のアクセス権が相対的に小さい前記動作モードに応じた前記第一のアクセス権以下の値を示す第二のアクセス権をメモリ管理ユニットに設定し、
前記フォールト処理手順は、前記第二のアクセス権を超えるメモリアクセスに応じ、前記ローカルなドメインに係るエントリは共通し、前記グローバルなドメインに係るエントリは異なるページテーブルの前記アドレスを前記メモリ管理ユニットに設定し、前記トランスレーション・ルックアサイド・バッファのフラッシュを前記メモリ管理ユニットに実行させ、前記グローバルなドメインに関して前記第一のアクセス権を有効とさせる値を示す前記第二のアクセス権を前記メモリ管理ユニットに設定し、
前記メモリ管理ユニットは、前記ローカルなドメインに係るページについては、当該メモリ管理ユニットに設定された前記識別子を付与して当該メモリ管理ユニットに設定されたアドレスに係るページテーブルのエントリを前記トランスレーション・ルックアサイド・バッファにキャッシュし、前記ドメインごとの前記第二のアクセス権を優先させてメモリアクセスを制御する付記3又は4記載のメモリアクセス制御プログラム。
(付記6)
情報処理装置が、
一つの仮想アドレス空間に対して、特権レベルの異なる動作モードごとに生成され、当該動作モードに応じた第一のアクセス権が設定された各ページテーブルのアドレスを、前記仮想アドレス空間を管理するオペレーティングシステムより受け付け、該アドレスを該オペレーティングシステムに関連付けてページテーブル対応情報記憶手段に記録するページテーブル管理手順と、
前記オペレーティングシステムの前記動作モードの切り替えに応じ、前記第一のアクセス権が相対的に小さい前記動作モードに応じた前記第一のアクセス権以下の値を示す第二のアクセス権をメモリ管理ユニットに設定するコンテキストスイッチ制御手順と、
前記第二のアクセス権を超えるメモリアクセスに応じ、現在の前記動作モードに対応した前記アドレスを前記メモリ管理ユニットに設定し、トランスレーション・ルックアサイド・バッファのフラッシュを前記メモリ管理ユニットに実行させ、該アドレスに係るページテーブルに設定された前記第一のアクセス権を有効とさせる値を示す前記第二のアクセス権を前記メモリ管理ユニットに設定するフォールト処理手順とを実行し、
前記メモリ管理ユニットは、前記第二のアクセス権を、当該メモリ管理ユニットに前記アドレスが設定されているページテーブルに係る前記第一のアクセス権に優先させてメモリアクセスの制御を行うメモリアクセス制御方法。
(付記7)
一つの仮想アドレス空間に対して、前記特権レベルの異なる動作モードごとに、当該動作モードに応じた前記第一のアクセス権が設定されたページテーブルを生成し、該ページテーブルのアドレスを前記ページテーブル管理手順に通知するページテーブル設定手順を前記オペレーティングシステムが実行する付記6記載のメモリアクセス制御方法。
(付記8)
前記仮想アドレス空間に対して前記動作モードごとに割り当てられた識別子を前記オペレーティングシステムより受け付け、前記識別子を識別子記憶手段に記録する識別子管理手順を前記情報処理装置が実行し、
前記コンテキストスイッチ制御手順は、グローバルなページを含まない仮想アドレス空間については、前記動作モードの切り替えに応じ、切り替え先の前記動作モードに対応する前記識別子及び前記ページテーブルのアドレスを前記メモリ管理ユニットに設定し、
前記メモリ管理ユニットは、当該メモリ管理ユニットに設定された前記識別子を付与して、当該メモリ管理ユニットに設定されたアドレスに係るページテーブルのエントリを前記トランスレーション・ルックアサイド・バッファにキャッシュする付記6又は7記載のメモリアクセス制御方法。
(付記9)
前記仮想アドレス空間に対して前記動作モードごとに前記識別子を割り当て、該識別子を前記識別子管理手順に通知する識別子設定手順を前記オペレーティングシステムが実行する付記8記載のメモリアクセス制御方法。
(付記10)
前記ページテーブルのエントリの分類単位であるドメインの識別情報を前記オペレーティングシステムより受け付け、ローカルなページのみが属するローカルな前記ドメインに関して、前記第一のアクセス権を有効とさせる値を示す前記第二のアクセス権を前記メモリ管理ユニットに設定するドメイン管理手順を前記情報処理装置が実行し、
前記ページテーブル管理手順は、前記動作モード及び前記ドメインの組み合わせごとに生成されたページテーブルのアドレスを受け付け、
前記コンテキストスイッチ制御手順は、前記動作モードの切り替えに応じ、前記メモリ管理ユニットに前記アドレスが設定されているページテーブルに対して前記ローカルなドメインに係るエントリは異なり、グローバルなページが属するグローバルな前記ドメインに係るエントリは共通するページテーブルの前記アドレスと、切り替え先の前記動作モードに対応する前記識別子とを前記メモリ管理ユニットに設定し、前記グローバルなドメインに関して前記第一のアクセス権が相対的に小さい前記動作モードに応じた前記第一のアクセス権以下の値を示す第二のアクセス権をメモリ管理ユニットに設定し、
前記フォールト処理手順は、前記第二のアクセス権を超えるメモリアクセスに応じ、前記ローカルなドメインに係るエントリは共通し、前記グローバルなドメインに係るエントリは異なるページテーブルの前記アドレスを前記メモリ管理ユニットに設定し、前記トランスレーション・ルックアサイド・バッファのフラッシュを前記メモリ管理ユニットに実行させ、前記グローバルなドメインに関して前記第一のアクセス権を有効とさせる値を示す前記第二のアクセス権を前記メモリ管理ユニットに設定し、
前記メモリ管理ユニットは、前記ローカルなドメインに係るページについては、当該メモリ管理ユニットに設定された前記識別子を付与して当該メモリ管理ユニットに設定されたアドレスに係るページテーブルのエントリを前記トランスレーション・ルックアサイド・バッファにキャッシュし、前記ドメインごとの前記第二のアクセス権を優先させてメモリアクセスを制御する付記8又は9記載のメモリアクセス制御方法。
(付記11)
一つの仮想アドレス空間に対して、特権レベルの異なる動作モードごとに生成され、当該動作モードに応じた第一のアクセス権が設定された各ページテーブルのアドレスを、前記仮想アドレス空間を管理するオペレーティングシステムより受け付け、該アドレスを該オペレーティングシステムに関連付けてページテーブル対応情報記憶手段に記録するページテーブル管理手段と、
前記オペレーティングシステムの前記動作モードの切り替えに応じ、前記第一のアクセス権が相対的に小さい前記動作モードに応じた前記第一のアクセス権以下の値を示す第二のアクセス権をメモリ管理ユニットに設定するコンテキストスイッチ制御手段と、
前記第二のアクセス権を超えるメモリアクセスに応じ、現在の前記動作モードに対応した前記アドレスを前記メモリ管理ユニットに設定し、トランスレーション・ルックアサイド・バッファのフラッシュを前記メモリ管理ユニットに実行させ、該アドレスに係るページテーブルに設定された前記第一のアクセス権を有効とさせる値を示す前記第二のアクセス権を前記メモリ管理ユニットに設定するフォールト処理手段とを有し、
前記メモリ管理ユニットは、前記第二のアクセス権を、当該メモリ管理ユニットに前記アドレスが設定されているページテーブルに係る前記第一のアクセス権に優先させてメモリアクセスの制御を行う情報処理装置。
(付記12)
一つの仮想アドレス空間に対して、前記特権レベルの異なる動作モードごとに、当該動作モードに応じた前記第一のアクセス権が設定されたページテーブルを生成し、該ページテーブルのアドレスを前記ページテーブル管理手段に通知するページテーブル設定手段を含む前記オペレーティングシステムを有する付記11記載の情報処理装置。
(付記13)
前記仮想アドレス空間に対して前記動作モードごとに割り当てられた識別子を前記オペレーティングシステムより受け付け、前記識別子を識別子記憶手段に記録する識別子管理手段を有し、
前記コンテキストスイッチ制御手段は、グローバルなページを含まない仮想アドレス空間については、前記動作モードの切り替えに応じ、切り替え先の前記動作モードに対応する前記識別子及び前記ページテーブルのアドレスを前記メモリ管理ユニットに設定し、
前記メモリ管理ユニットは、当該メモリ管理ユニットに設定された前記識別子を付与して、当該メモリ管理ユニットに設定されたアドレスに係るページテーブルのエントリを前記トランスレーション・ルックアサイド・バッファにキャッシュする付記11又は12記載の情報処理装置。
(付記14)
前記仮想アドレス空間に対して前記動作モードごとに前記識別子を割り当て、該識別子を前記識別子管理手段に通知する識別子設定手段を含むオペレーティングシステムを有する付記13記載の情報処理装置。
(付記15)
前記ページテーブルのエントリの分類単位であるドメインの識別情報を前記オペレーティングシステムより受け付け、ローカルなページのみが属するローカルな前記ドメインに関して、前記第一のアクセス権を有効とさせる値を示す前記第二のアクセス権を前記メモリ管理ユニットに設定するドメイン管理手段を有し、
前記ページテーブル管理手段は、前記動作モード及び前記ドメインの組み合わせごとに生成されたページテーブルのアドレスを受け付け、
前記コンテキストスイッチ制御手段は、前記動作モードの切り替えに応じ、前記メモリ管理ユニットに前記アドレスが設定されているページテーブルに対して前記ローカルなドメインに係るエントリは異なり、グローバルなページが属するグローバルな前記ドメインに係るエントリは共通するページテーブルの前記アドレスと、切り替え先の前記動作モードに対応する前記識別子とを前記メモリ管理ユニットに設定し、前記グローバルなドメインに関して前記第一のアクセス権が相対的に小さい前記動作モードに応じた前記第一のアクセス権以下の値を示す第二のアクセス権をメモリ管理ユニットに設定し、
前記フォールト処理手段は、前記第二のアクセス権を超えるメモリアクセスに応じ、前記ローカルなドメインに係るエントリは共通し、前記グローバルなドメインに係るエントリは異なるページテーブルの前記アドレスを前記メモリ管理ユニットに設定し、前記トランスレーション・ルックアサイド・バッファのフラッシュを前記メモリ管理ユニットに実行させ、前記グローバルなドメインに関して前記第一のアクセス権を有効とさせる値を示す前記第二のアクセス権を前記メモリ管理ユニットに設定し、
前記メモリ管理ユニットは、前記ローカルなドメインに係るページについては、当該メモリ管理ユニットに設定された前記識別子を付与して当該メモリ管理ユニットに設定されたアドレスに係るページテーブルのエントリを前記トランスレーション・ルックアサイド・バッファにキャッシュし、前記ドメインごとの前記第二のアクセス権を優先させてメモリアクセスを制御する付記13又は14記載の情報処理装置。