(58)【調査した分野】(Int.Cl.,DB名)
記憶装置と、当該記憶装置に接続されたプロセッサと、当該プロセッサ上で実行され、当該プロセッサに複数の仮想計算機の実行制御をさせるハイパーバイザとを備える仮想計算機システムであって、
前記ハイパーバイザは、
プログラムの起動要求を受け付けるための起動要求受付部と、
前記起動要求受付部により受け付けられた起動要求に係るプログラムを実行するための仮想計算機を生成するための仮想計算機生成部とを含み、
前記仮想計算機生成部は、前記起動要求受付部により受け付けられた起動要求に係るプログラムの種別を特定し、当該特定したプログラムの種別に基づいて、生成した仮想計算機を管理し、
さらに、前記仮想計算機システムは、仮想計算機からの、前記記憶装置の記憶領域へのアクセスを制御するアクセス制御部を備え、
前記プログラムは、第1種プログラムと第2種プログラムとを含み、
前記記憶装置は、第1種プログラムを格納する第1記憶領域と、第2種プログラムを格納する第2記憶領域とを含み、
前記仮想計算機生成部は、第1種プログラムの起動要求を受け付けた場合に、当該第1種プログラムを実行するための仮想計算機を生成して、当該生成した仮想計算機を第1種仮想計算機として管理し、
前記アクセス制御部は、前記アクセスの制御を、前記仮想計算機生成部によって前記第1種仮想計算機として管理されている仮想計算機からの前記第2記憶領域へのアクセスが禁止されるように行う
ことを特徴とする仮想計算機システム。
前記仮想計算機生成部は、第2種プログラムの起動要求を受け付けた場合に、当該第2種プログラムを実行するための仮想計算機を生成して、当該生成した仮想計算機を第2種仮想計算機として管理し、
前記アクセス制御部は、前記アクセスの制御を、前記仮想計算機生成部によって前記第2種仮想計算機として管理されている仮想計算機からの前記第1記憶領域へのアクセスが禁止されるように行う
ことを特徴とする請求項1記載の仮想計算機システム。
前記記憶装置は、プログラムを特定する情報と、プログラムの種別を特定する情報とを対応付けるプログラム対応情報を記憶するためのプログラム対応情報記憶領域を含み、
前記仮想計算機生成部は、
前記起動要求受付部によってプログラムの起動要求が受け付けられた場合に、当該プログラムが、いずれの種別のプログラムであるかを、前記プログラム対応情報記憶領域に記憶されているプログラム対応情報に基づいて特定するためのプログラム種特定部を含み、
前記仮想計算機生成部は、前記プログラム種特定部によって特定されたプログラムの種別に基づいて、前記生成した仮想計算機を異なる種別の仮想計算機として管理する
ことを特徴とする請求項1記載の仮想計算機システム。
前記仮想計算機生成部は、前記プロセッサによって実行される前記起動要求受付部が、仮想計算機から、プログラムの起動要求を受け付けた場合において、仮想計算機を生成するときに、当該生成する仮想計算機に対する、前記記憶装置における記憶領域の割り当てを、前記起動要求の要求元である仮想計算機に割り当てられている、前記記憶装置における記憶領域に基づくフォーク方式で行う
ことを特徴とする請求項1記載の仮想計算機システム。
記憶装置と、当該記憶装置に接続されたプロセッサと、当該プロセッサ上で実行され、当該プロセッサに複数の仮想計算機の実行制御をさせるハイパーバイザとを備える仮想計算機システムを制御する仮想計算機制御方法であって、
前記ハイパーバイザが、プログラムの起動要求を受け付ける起動要求受付ステップと、
前記ハイパーバイザが、前記起動要求受付ステップにより受け付けられた起動要求に係るプログラムを実行するための仮想計算機を生成する仮想計算機生成ステップとを含み、
前記仮想計算機生成ステップは、前記起動要求受付ステップにより受け付けられた起動要求に係るプログラムの種別を特定し、当該特定したプログラムの種別に基づいて、生成した仮想計算機を管理し、
さらに、前記仮想計算機制御方法は、仮想計算機からの、前記記憶装置の記憶領域へのアクセスを制御するアクセス制御ステップを含み、
前記プログラムは、第1種プログラムと第2種プログラムとを含み、
前記記憶装置は、第1種プログラムを格納する第1記憶領域と、第2種プログラムを格納する第2記憶領域とを含み、
前記仮想計算機生成ステップは、第1種プログラムの起動要求を受け付けた場合に、当該第1種プログラムを実行するための仮想計算機を生成して、当該生成した仮想計算機を第1種仮想計算機として管理し、
前記アクセス制御ステップは、前記アクセスの制御を、前記仮想計算機生成ステップによって前記第1種仮想計算機として管理されている仮想計算機からの前記第2記憶領域へのアクセスが禁止されるように行う
ことを特徴とする仮想計算機制御方法。
記憶装置と、当該記憶装置に接続されたプロセッサと、当該プロセッサ上で実行され、当該プロセッサに複数の仮想計算機の実行制御をさせるハイパーバイザとを備える仮想計算機システムを制御するための仮想計算機制御プログラムであって、
前記ハイパーバイザが、プログラムの起動要求を受け付ける起動要求受付ステップと、
前記ハイパーバイザが、前記起動要求受付ステップにより受け付けられた起動要求に係るプログラムを実行するための仮想計算機を生成する仮想計算機生成ステップとを含み、
前記仮想計算機生成ステップは、前記起動要求受付ステップにより受け付けられた起動要求に係るプログラムの種別を特定し、当該特定したプログラムの種別に基づいて、生成した仮想計算機を管理し、
さらに、前記仮想計算機制御プログラムは、仮想計算機からの、前記記憶装置の記憶領域へのアクセスを制御するアクセス制御ステップを含み、
前記プログラムは、第1種プログラムと第2種プログラムとを含み、
前記記憶装置は、第1種プログラムを格納する第1記憶領域と、第2種プログラムを格納する第2記憶領域とを含み、
前記仮想計算機生成ステップは、第1種プログラムの起動要求を受け付けた場合に、当該第1種プログラムを実行するための仮想計算機を生成して、当該生成した仮想計算機を第1種仮想計算機として管理し、
前記アクセス制御ステップは、前記アクセスの制御を、前記仮想計算機生成ステップによって前記第1種仮想計算機として管理されている仮想計算機からの前記第2記憶領域へのアクセスが禁止されるように行う
ことを特徴とする仮想計算機制御プログラム。
記憶装置と、当該記憶装置に接続されたプロセッサと、当該プロセッサ上で実行され、当該プロセッサに複数の仮想計算機の実行制御をさせるハイパーバイザとを備える半導体集積回路であって、
前記ハイパーバイザは、
プログラムの起動要求を受け付けるための起動要求受付部と、
前記起動要求受付部により受け付けられた起動要求に係るプログラムを実行するための仮想計算機を生成するための仮想計算機生成部とを含み、
前記仮想計算機生成部は、前記起動要求受付部により受け付けられた起動要求に係るプログラムの種別を特定し、当該特定したプログラムの種別に基づいて、生成した仮想計算機を管理し、
さらに、前記半導体集積回路は、仮想計算機からの、前記記憶装置の記憶領域へのアクセスを制御するアクセス制御部を備え、
前記プログラムは、第1種プログラムと第2種プログラムとを含み、
前記記憶装置は、第1種プログラムを格納する第1記憶領域と、第2種プログラムを格納する第2記憶領域とを含み、
前記仮想計算機生成部は、第1種プログラムの起動要求を受け付けた場合に、当該第1種プログラムを実行するための仮想計算機を生成して、当該生成した仮想計算機を第1種仮想計算機として管理し、
前記アクセス制御部は、前記アクセスの制御を、前記仮想計算機生成部によって前記第1種仮想計算機として管理されている仮想計算機からの前記第2記憶領域へのアクセスが禁止されるように行う
ことを特徴とする半導体集積回路。
【発明を実施するための形態】
【0017】
<実施の形態1>
<概要>
以下、本発明に係る仮想計算機システムの一実施形態として、アプリケーションプログラムを実行するユーザーモードと、ユーザーモードより上位のスーパーバイザモードとの2つのプログラム実行モードを有するプロセッサを備え、プロセッサのスーパーバイザモードで実行される複数のオペレーティングシステムを、プロセッサのスーパーバイザモードで実行されるハイパーバイザが時分割実行制御する仮想計算機システムについて説明する。
【0018】
この仮想計算機システムは、プロセッサに加えて、仮想計算機からメモリの記憶領域へのアクセス制御を行うメモリ保護ユニットを備える。そして、プロセッサによって実行されるハイパーバイザとメモリ保護ユニットとが協働して動作することで、仮想計算機それぞれについて、メモリの記憶領域へのアクセスを、それぞれ所定の領域へのアクセスが禁止されるように制御する。
【0019】
従って、この仮想計算機システムで実行される仮想計算機のそれぞれは、アクセスが禁止されている領域に格納されているプログラム、データ等にアクセスすることができなくなっている。
【0020】
以下、本実施の形態1に係る仮想計算機システムの構成について図面を参照しながら説明する。
【0021】
<ハードウエア構成>
図1は、仮想計算機システム100の主要なハードウエア構成を示すブロック図である。
【0022】
同図に示す通り、仮想計算機システム100は、ハードウエアとしてはコンピュータ装置であり、集積回路110と入力装置131と出力装置132とから構成される。
【0023】
集積回路110は、プロセッサ101とメモリ102とキャッシュメモリ105とMMU(Memory Management Unit)106とメモリ保護ユニット107とタイマ108とDMAC(Direct Memory Access Controller)109と内部バス120と第1インタフェース121と第2インタフェース122と第3インタフェース123とを集積した半導体集積回路であって、入力装置131と出力装置132と外部の集積回路等とに接続する。そして、メモリ102は、ROM(Read Only Memory)103とRAM(Random Access Memory)104とから構成されている。
【0024】
プロセッサ101は、キャッシュメモリ105とMMU106とに接続され、ROM103又はRAM104に記憶されているプログラムを実行することで、ROM103、RAM104、キャッシュメモリ105、MMU106、メモリ保護ユニット107、タイマ108、入力装置131、出力装置132を制御して、様々な機能を実現する。
【0025】
図2は、プロセッサ101の備える動作モードを示す動作モード図である。
【0026】
同図に示されるように、プロセッサ101は、アプリケーションプログラム(図中のタスクA231、タスクK232、タスクL233等)を実行するユーザーモード230と、オペレーティングシステム(図中の第1OS(Operating System)221、第2OS222、第3OS223等)とハイパーバイザを実行する特権モード(以下、「スーパーバイザモード」と呼ぶ。)220とを有する。
【0027】
ユーザーモード230で実行されるアプリケーションプログラムは、スーパーバイザモード220で実行されるオペレーティングシステムによって時分割実行制御され、スーパーバイザモード220で実行されるオペレーティングシステムは、同じくスーパーバイザモード220で実行されるハイパーバイザによって時分割実行制御される。
【0028】
再び
図1に戻って、仮想計算機システム100の構成についての説明を続ける。
【0029】
ROM103は、メモリ保護ユニット107に接続され、プロセッサ101の動作を規定するプログラムと、プロセッサ101が利用するデータとを記憶している。
【0030】
RAM104は、メモリ保護ユニット107に接続され、プロセッサ101の動作を規定するプログラムと、プロセッサ101が利用するデータとを記憶する。
【0031】
キャッシュメモリ105は、プロセッサ101とMMU106と内部バス120とに接続され、プロセッサ101によって利用される。
【0032】
MMU106は、プロセッサ101とキャッシュメモリ105と内部バス120とに接続され、メモリ102の物理記憶領域のアドレスを指定する物理アドレスと、プロセッサ101の利用する論理記憶領域のアドレスを指定する論理アドレスとの変換機能を有する。
【0033】
メモリ保護ユニット107は、メモリ102と内部バス120とに接続され、内部にメモリ保護テーブルとメモリ保護情報とを記憶する機能と、記憶するメモリ保護テーブルとメモリ保護情報とを参照して、内部バス120のバスマスタ(ここでは、プロセッサ101、DMAC109)からのメモリ102の記憶領域へのアクセスを制御する機能とを有する。
【0034】
図3は、メモリ保護ユニット107によって記憶されるメモリ保護テーブル300のデータ構造を示すデータ構造図である。
【0035】
同図に示されるように、メモリ保護テーブル300は、領域ID310と開始アドレス320とサイズ330とが対応付けられて構成されている。
【0036】
領域ID310は、メモリ102の記憶領域の中の、所定の記憶領域を識別するための識別子である。
【0037】
開始アドレス320は、対応する領域ID310によって識別される所定の記憶領域の開始アドレスである。
【0038】
サイズ330は、対応する領域ID310によって識別される所定の記憶領域のサイズをメガバイト単位で示すものである。
【0039】
このメモリ保護テーブル300によると、例えば、領域ID310が“1”となる所定の記憶領域は、開始アドレスが“0x8000_0000”であって、そのサイズが2MB(Mega Byte)となる記憶領域であることを示している。
【0040】
図4は、メモリ保護ユニット107によって記憶されるメモリ保護情報400のデータ構造を示すデータ構造図である。
【0041】
同図に示されるように、メモリ保護情報400は、領域ID410とアクセス情報420とが対応付けられて構成されている。
【0042】
領域ID410は、領域ID310と同様に、メモリ102の記憶領域の中の、所定の記憶領域を識別するための識別子である。
【0043】
アクセス情報420は、対応する領域ID410によって識別される所定の記憶領域に対して行われるアクセスの制限を示す情報であって、(1)読出し、書込み共に可の旨を示す情報(以下、「R/W」と呼ぶ。)と(2)読出し可、書込み不可の旨を示す情報(以下、「RO」と呼ぶ。)と(3)読出し不可、書込み可の旨を示す情報(以下、「WO」と呼ぶ。)と(4)読出し、書込み共に不可の旨を示す情報(以下、「NA」と呼ぶ。)との4つの情報のうちのいずれか1つの情報となる。
【0044】
このメモリ保護情報400によると、例えば、領域ID410が“1”となる所定の領域は、読出し、書込み共に不可であり、領域ID410が“2”となる所定の領域は、読出し、書込み共に可であり、領域ID410が“3”となる所定の領域は、読出し可、書込み不可であり、領域ID410が“4”となる所定の領域は、読出し、書込み共に不可であること等を示している。
【0045】
図5は、メモリ保護ユニット107による、メモリ102の記憶領域へのアクセスの制御が、複数の所定の領域に区分されて行われることを示す、メモリ102の記憶領域図である。
【0046】
同図に示される通り、メモリ102の記憶領域は、メモリ保護ユニット107によってメモリ保護テーブルを参照されることで、領域ID310が“1”となる領域A501、領域ID310が“2”となる領域B502、領域ID310が“3”となる領域C503、領域ID310が“4”となる領域D504等に区分される。
【0047】
なお、メモリ保護ユニット107の行うメモリ102の記憶領域へのアクセス制御動作についてのより詳細な内容については、後程<メモリアクセス処理>の項目の部分で、フローチャートを用いて説明する。
【0048】
再び
図1に戻って、仮想計算機システム100の構成についての説明を続ける。
【0049】
タイマ108は、内部バス120に接続され、プロセッサ101によって制御される。
【0050】
DMAC109は、内部バス120に接続され、第1インタフェース121に接続される入力装置131、第2インタフェース122に接続される出力装置132、及び第3インタフェース123に接続される外部の集積回路等と、メモリ102との間のデータ転送を、プロセッサ101を介さずに行う機能を有する。
【0051】
内部バス120は、MMU106とキャッシュメモリ105とメモリ保護ユニット107とタイマ108と第1インタフェース121と第2インタフェース122と第3インタフェース123とDMAC109とに接続され、これら接続される回路間の信号を伝達する機能を有する。
【0052】
第1インタフェース121と第2インタフェース122と第3インタフェース123とは、それぞれ内部バス120に接続され、それぞれ内部バス120と入力装置131との間の信号のやり取りを仲介する機能、内部バス120と出力装置132との間の信号のやり取りを仲介する機能、外部の集積回路等との間の信号のやり取りを仲介する機能を有する。
【0053】
入力装置131は、キーボード、マウス、カメラ、センサー等を含み、第1インタフェース121に接続され、プロセッサ101によって制御され、キーボード、マウス、カメラ、センサー等を通じてユーザー操作等に応じたデータを生成し、ユーザー操作等が発生したこと示す通知や、生成したデータをプロセッサ101に送る機能を有する。
【0054】
出力装置132は、ディスプレイ、スピーカー等を含み、第2インタフェース122に接続され、プロセッサ101によって制御され、ディスプレイ、スピーカー等を用いて文字列、画像、音声等を表示、出力する機能を有する。
【0055】
上述の仮想計算機システム100は、プロセッサ101が、ROM103、RAM104に記憶されているプログラムを実行することによって、様々な機能を実現する。
【0056】
<プログラムモジュール構成>
図6は、ある時刻t0において、プロセッサ101上で実行対象となるプログラムモジュール(以下、単に「モジュール」と呼ぶ。)を示すブロック図である。
【0057】
同図において、モジュール群600は、プロセッサ101において実行対象となっているモジュールの集合であって、モジュール群600に含まれるモジュールのそれぞれは、対応するプログラムが、メモリ102の記憶領域に格納されている。
【0058】
タスク1A611、タスク2A612、タスク3A613、タスク2B614、タスク3C615のそれぞれは、プロセッサ101のユーザーモードで実行されるタスクである。
【0059】
OS1A621、OS1B622、OS1C623のそれぞれは、プロセッサ101のスーパーバイザモードにおいて実行されるマルチタスク対応オペレーティングシステムである。
【0060】
ハイパーバイザ630は、プロセッサ101のスーパーバイザモードで実行されるハイパーバイザである。
【0061】
仮想計算機システム100において、アプリケーションプログラムは、スーパーバイザモードで実行されるマルチタスク対応オペレーティングシステムによって実行制御され、ユーザーモードで実行される。また、オペレーティングシステムは、ハイパーバイザによって実行制御され、スーパーバイザモードで実行される。
【0062】
アプリケーションプログラムは、予め用意されたオペレーティングステム呼び出しルーチンを呼び出すことで、オペレーティングシステムに対して所定の処理を依頼することができる。また、オペレーティングシステムは、予め用意されたハイパーバイザ呼び出しルーチンを呼び出すことで、ハイパーバイザに対して所定の処理を依頼することができる。
【0063】
また、仮想計算機システムの実行に際して発生した例外や、外部装置から発生した割込みは、ハイパーバイザで処理し、必要に応じて仮想計算機上のオペレーティングシステムに対して再配送する。
【0064】
OS1A621は、タスク1A611とタスク2A612とタスク3A613とを実行制御し、OS1A621とタスク1A611とタスク2A612とタスク3A613とからなるシステムを第1仮想計算機601として機能させている。
【0065】
OS1B622は、タスク2B614を実行制御し、OS1B622とタスク2B614とからなるシステムを第2仮想計算機602として機能させている。
【0066】
OS1C623は、タスク3C615を実行制御し、OS1C623とタスク3C615とからなるシステムを第3仮想計算機603として機能させている。
【0067】
ここで、第2仮想計算機602は、第1仮想計算機601を親仮想計算機として、フォーク方式で生成された子仮想計算機であり、第3仮想計算機603は、第1仮想計算機601を親仮想計算機として、フォーク方式で生成された子仮想計算機である。フォーク方式での仮想計算機の生成については後述する。
【0068】
ハイパーバイザ630は、内部に、VM(Virtual Machine)管理テーブル保持部640とVM実行制御部650とVMメモリ管理部660との3つのモジュールを含み、VM実行制御部650は、さらに、VM起動部651とVM実行部652とVM終了部653と要求受付部654との4つのモジュールを含み、VMメモリ管理部は、さらに、保護設定情報保持部661と保護設定部662とCOW(Copy On Write)処理部663との3つのモジュールを含む。
【0069】
VM管理テーブル保持部640は、予め定められたアプリグループ管理テーブルと、予め定められた仮想計算機管理テーブルと、VM実行部652によって生成される仮想計算機状態テーブルとを記憶する機能を有する。
【0070】
図7は、VM管理テーブル保持部640によって記憶されるアプリグループ管理テーブル700のデータ構造を示すデータ構造図である。
【0071】
同図に示されるように、アプリグループ管理テーブル700は、アプリグループID710とアプリケーションプログラム名720とが対応付けられて構成されている。
【0072】
アプリケーションプログラム名720は、アプリケーションプログラムを特定するアプリケーションプログラムの名前である。
【0073】
アプリグループID710は、対応するアプリケーションプログラム名720で特定されるアプリケーションプログラムが属するアプリケーションプログラムグループを識別するための識別子である。
【0074】
このアプリグループ管理テーブル700によると、例えば、メモ帳、電卓、端末設定という名前のアプリケーションプログラムは、アプリグループIDが“1”であるアプリケーションプログラムグループに属し、DTV(Digital Television)アプリという名前のアプリケーションプログラムは、アプリグループIDが“2”であるアプリケーションプログラムグループに属することを示している。
【0075】
図8は、VM管理テーブル保持部640によって記憶される仮想計算機管理テーブル800のデータ構造を示すデータ構造図である。
【0076】
同図に示されるように、仮想計算機管理テーブル800は、VMID810とアプリグループID820とが対応付けられて構成されている。
【0077】
アプリグループID820は、アプリグループID710と同様の識別子である。
【0078】
VMID810は、対応するアプリグループID820によって識別されるアプリケーションプログラムグループに属するアプリケーションプログラムを実行するための仮想計算機を識別するための識別子である。
【0079】
この仮想計算機管理テーブル800によると、例えば、VMID810が“1”で識別される仮想計算機は、アプリグループID820が“1”で特定されるアプリケーションプログラムグループに属するアプリケーションプログラムと、“4”で特定されるアプリケーションプログラムグループに属するアプリケーションプログラムとを実行するための仮想計算機であることを示している。
【0080】
図9は、VM管理テーブル保持部640によって記憶される仮想計算機状態テーブル900のデータ構造を示すデータ構造図である。
【0081】
同図に示されるように、仮想計算機状態テーブル900は、VMID910と実行状態920とが対応付けられて構成されている。
【0082】
VMID910は、仮想計算機を識別するための識別子である。
【0083】
実行状態920は、対応するVMID910によって識別される仮想計算機の実行状態を示す情報であって、(1)仮想計算機が起動されて時分割実行処理の対象となっており、新たなタスク処理を行うことができる状態の旨を示す情報(以下、「実行中」と呼ぶ。)と(2)仮想計算機が起動されていない状態の旨を示す情報(以下、「未起動」と呼ぶ。)と(3)仮想計算機が起動されて時分割実行処理の対象となっているが、その仮想計算機を終了させるための終了処理が実行中であり、新たなタスク処理を行うことができない状態の旨を示す情報(以下、「終了処理中」と呼ぶ。)との3つの情報のうちのいずれか1つの情報となる。ここで、仮想計算機を終了させるための終了処理とは、その仮想計算機を実行するために、ハイパーバイザと仮想計算機自身によって確保した記憶領域を解放する処理のことをいう。
【0084】
再び
図6に戻って、プロセッサ101上で実行対象となるモジュールの説明を続ける。
【0085】
要求受付部654は、実行中の仮想計算機のオペレーティングシステムから、新たなアプリケーションプログラムの起動要求を受け付け、起動要求を受け付けた旨の信号をVM起動部651へ送る機能を有する。
【0086】
VM起動部651は、以下の3つの機能を有する。
【0087】
機能1:新たなアプリケーションプログラムを実行させるために、親となる仮想計算機を基にして、フォーク方式で新たな子仮想計算機を生成する機能。
【0088】
ここで、フォーク方式での仮想計算機の生成とは、親となる仮想計算機に割り当てられている全ての記憶領域と、新たに生成する仮想計算機に割り当てる全ての記憶領域とが、1対1に対応するように、親となる仮想計算機に割り当てられている記憶領域を、新たに生成する仮想計算機の記憶領域にマッピングすることによって、新たな仮想計算機を生成することである。なお、新たに仮想計算機が生成された後は、親となる仮想計算機の記憶領域と、新たに生成された仮想計算機の記憶領域とは、COW処理部663によってコピーオンライト方式で管理されることとなる。このCOW処理部663による記憶領域のコピーオンライト方式による管理についての詳細については後述する。
【0089】
機能2:新たなアプリケーションプログラムを実行させるために新たな子仮想計算機を生成した場合に、VM管理テーブル保持部640に記憶されている、アプリグループ管理テーブル700と仮想計算機管理テーブル800とを参照して、その新たな子仮想計算機を識別するための識別子であるVMIDを、その新たな仮想計算機に付与して、VM管理テーブル保持部640に記憶されている仮想計算機状態テーブル900を、付与したVMIDに対応付けられている実行状態920が“実行中”となるように更新する機能。
【0090】
機能3:プロセッサ101が初期化されることで、VM起動部651が起動された場合に、他の全ての仮想計算機の親となる仮想計算機を生成し、生成した仮想計算機を識別するためのVMIDを“0”とする機能。
【0091】
VM実行部652は、タイマ108を用いて、複数の仮想計算機を、時分割実行制御方式で実行制御する機能を有する。
【0092】
VM終了部653は、仮想計算機から、その仮想計算機を終了させる要求である終了要求を受け付ける機能と、終了要求を受け付けた場合に、対象となる仮想計算機に対して前述の終了処理を実行し、その仮想計算機を終了させる機能を有する。
【0093】
保護設定情報保持部661は、アクセス許可情報を記憶する機能を有する。
【0094】
図10は、保護設定情報保持部661によって記憶されるアクセス許可情報1000のデータ構造を示すデータ構造図である。
【0095】
同図に示されるように、アクセス許可情報1000は、領域ID1010とVMID1020とアクセス情報(図中のNA、R/W、RO等)とが対応付けられて構成されている。
【0096】
このアクセス許可情報1000は、予め定められたオリジナルアクセス情報の部分(領域ID1010が1〜6に対応する部分)と、COW処理部663によって、予め定められたオリジナルアクセス情報に対して追記された部分(領域ID1010が1〜6以外の領域ID1010に対応する部分)とによって構成される。
【0097】
領域ID1010は、領域ID310と同様に、メモリ102の記憶領域の中の、所定の記憶領域を識別するための識別子である。
【0098】
VMID1020は、VMID910と同様に、仮想計算機を識別するための識別子である。
【0099】
アクセス情報は、対応するVMID1020によって識別される仮想計算機についての、対応する領域ID1010によって識別される所定の記憶領域に対して行われるアクセスの制限を示す情報であって、アクセス情報420と同様に、R/WとROとWOとNAとの4つの情報のうちのいずれか1つの情報となる。
【0100】
このアクセス許可情報1000によると、例えば、VMID1020が“1”で識別される仮想計算機について、領域ID1010が“1”となる所定の領域は、読出し、書込み共に不可であり、領域ID1010が“2”となる所定の領域は、読出し可、書込み不可であり、領域ID1010が“3”となる所定の領域は、読出し可、書込み不可であり、領域ID1010が“4”となる所定の領域は、読出し、書込み共に不可であること等が示されている。
【0101】
保護設定部662は、以下の2つの機能を有する。
【0102】
機能1:VM実行部652が実行する仮想計算機を切り替える場合に、保護設定情報保持部661によって記憶されているアクセス許可情報1000から、切り替え先となる仮想計算機のVMID1020についての、領域ID1010それぞれについて対応付けられているアクセス情報を読み出して、メモリ保護情報400(
図4参照)を生成し、生成したメモリ保護情報400で、メモリ保護ユニット107が記憶するメモリ保護情報400を更新する機能。
【0103】
機能2:COW処理部663が保護設定情報保持部661によって記憶されているアクセス許可情報1000を更新する場合に、保護設定情報保持部661によって記憶されているアクセス許可情報1000から、現在実行中となっている仮想計算機のVMIDについての、領域ID1010それぞれについて対応付けられているアクセス情報を読み出して、メモリ保護情報400を生成し、生成したメモリ保護情報400で、メモリ保護ユニット107が記憶するメモリ保護情報400を更新する機能。
【0104】
COW処理部663は、以下の2つの機能を有する。
【0105】
機能1:仮想計算機からの記憶領域へのアクセスについて、コピーオンライト方式によるアクセス管理を行う機能。
【0106】
ここで、コピーオンライト方式によるアクセス管理とは、親仮想計算機の記憶領域と、子仮想計算機の記憶領域とについて、いずれの仮想計算機によっても書き換えられていないページは、双方の仮想計算機によって共用させ、いずれかの仮想計算機によって書き換えられたページは、親仮想計算機が利用するページと、子仮想計算機が利用するページとを、互いに異なる記憶領域に割り当てて利用させるアクセス管理方法のことである。
【0107】
機能2:コピーオンライト方式によるアクセス管理を行うことで、仮想計算機に新たな記憶領域を割り当てた場合に、保護設定情報保持部661が保持するアクセス許可情報1000を更新する機能。
【0108】
この際、アクセス許可情報1000の更新が、新たに割り当てた記憶領域に対応する領域ID1010について、対象となる仮想計算機を識別するVMID1020に対応するアクセス情報がR/Wとなり、対象となる仮想計算機以外の全ての仮想計算機を識別するVMID1020に対応するアクセス情報がNAとなるように行う。
【0109】
なお、対象となる仮想計算機が未認証アプリケーションプログラムを実行する仮想計算機である場合に、親仮想計算機または認証アプリケーションプログラムを実行する仮想計算機から、その仮想計算機および未認証アプリケーションプログラムの実行を監視する等の目的で、新たに割り当てるメモリ領域のアクセス情報をRO、または、R/Wとしても良い。
【0110】
ここで、
図6に戻り、第2仮想計算機602と第3仮想計算機603とについての説明を補足する。
【0111】
第2仮想計算機602は、タスク2B614を実行させるために、VM起動部651によって、第1仮想計算機601を親仮想計算機としてフォーク方式で生成された仮想計算機である。
【0112】
また、第3仮想計算機603は、タスク3C615を実行させるために、VM起動部651によって、第1仮想計算機601を親仮想計算機としてフォーク方式で生成された仮想計算機である。
【0113】
タスク2B614は、第2仮想計算機602の生成に伴って、タスク2A612を基に生成されたタスクであって、タスク2A612の利用する記憶領域とタスク2Bの利用する記憶領域とは、COW処理部663によってコピーオンライト方式で管理されている。
【0114】
タスク3C615は、第3仮想計算機603の生成に伴って、タスク3A613を基に生成されたタスクであって、タスク3A613の利用する記憶領域とタスク3Cの利用する記憶領域とは、COW処理部663によってコピーオンライト方式で管理されている。
【0115】
OS1B622とOS1C623とは、第1仮想計算機601のOS1A621に対応するオペレーティングシステムであって、OS1B622は、第2仮想計算機602の生成に伴って生成され、OS1C623は、第3仮想計算機603の生成に伴って生成され、OS1A621の利用する記憶領域とOS1B622の利用する記憶領域とOS1C623の利用する記憶領域とは、COW処理部663によってコピーオンライト方式で管理されている。
【0116】
以上のように構成される仮想計算機システム100は、以下に示すメモリ102の記憶領域の利用方法に従って、メモリ102の記憶領域を利用する。
【0117】
<メモリ102の記憶領域の利用方法>
ここでは、仮想計算機システム100における、メモリ102の記憶領域の利用方法について、図面を用いて説明する。
【0118】
図11は、時刻t0において、メモリ102の記憶領域における、所定の領域に区分された記憶領域それぞれについての利用方法を示す、メモリ102の記憶領域図である。
【0119】
同図において、ハイパーバイザ割当領域1101は、領域ID310(
図3参照)が“1”となる所定の記憶領域であって、
図5における領域A501に対応している。そして、この領域が、ハイパーバイザ630のコードが格納される領域となるように、又ハイパーバイザ630によって利用される記憶領域となるように、予め設定されている。さらに、保護設定情報保持部661によって記憶されるアクセス許可情報1000のうちのオリジナルアクセス情報の部分によって、全ての仮想計算機について、読出し、書込み共に不可の領域と予め設定されている。
【0120】
オペレーティングシステム割当領域1102は、領域ID310が“2”となる所定の記憶領域であって、
図5における領域B502に対応している。そして、この領域が、プロセッサ101の実行対象となるオペレーティングシステムのコードが格納される領域となるように、又プロセッサ101の実行対象となるオペレーティングシステムによって利用される記憶領域となるように、予め設定されている。また、この領域は、スーパーバイザモード220のプロセッサ101によってのみアクセス可能な領域として予め設定されている。さらに、保護設定情報保持部661によって記憶されるアクセス許可情報1000のうちのオリジナルアクセス情報の部分によって、VMID1020が“0”となる仮想計算機(すなわち、他の仮想計算機全ての親仮想計算機である第1仮想計算機601)について、読出し、書込み共に可の領域、この仮想計算機以外の全ての仮想計算機について、読出し可、書込み不可の領域と予め設定されている。
【0121】
第1種プログラム割当領域1103は、領域ID310が“3”となる所定の記憶領域であって、
図5における領域C503に対応している。そして、この領域が、アプリグループIDが“1”であるアプリケーションプログラムグループに属するプログラム(以後、「第1種プログラム」と呼ぶ。)が格納される領域となるように、又第1種プログラムによって利用される記憶領域となるように、予め設定されている。さらに、保護設定情報保持部661によって記憶されるアクセス許可情報1000のうちのオリジナルアクセス情報の部分によって、VMID1020が“0”となる仮想計算機について、読出し、書込み共に可の領域、VMID1020が“1”となる仮想計算機について、読出し可、書込み不可の領域、これら以外の全ての仮想計算機について、読出し、書込み共に不可の領域と予め設定されている。
【0122】
第2種プログラム割当領域1104は、領域ID310が“4”となる所定の記憶領域であって、
図5における領域D504に対応している。そして、この領域が、アプリグループIDが“2”であるアプリケーションプログラムグループに属するプログラム(以後、「第2種プログラム」と呼ぶ。)が格納される領域となるように、又第2種プログラムによって利用される記憶領域となるように、予め設定されている。さらに、保護設定情報保持部661によって記憶されるアクセス許可情報1000のうちのオリジナルアクセス情報の部分によって、VMID1020が“0”となる仮想計算機について、読出し、書込み共に可の領域、VMID1020が“2”となる仮想計算機について、読出し可、書込み不可の領域、これら以外の全ての仮想計算機について、読出し、書込み共に不可の領域と予め設定されている。
【0123】
第3種プログラム割当領域1105は、領域ID310が“5”となる所定の記憶領域であって、
図5における領域E505に対応している。そして、この領域が、アプリグループIDが“3”であるアプリケーションプログラムグループに属するプログラム(以後、「第3種プログラム」と呼ぶ。)が格納される領域となるように、又第3種プログラムによって利用される記憶領域となるように、予め設定されている。さらに、保護設定情報保持部661によって記憶されるアクセス許可情報1000のうちのオリジナルアクセス情報の部分によって、VMID1020が“0”となる仮想計算機について、読出し、書込み共に可の領域、VMID1020が“3”となる仮想計算機について、読出し可、書込み不可の領域、これら以外の全ての仮想計算機について、読出し、書込み共に不可の領域と予め設定されている。
【0124】
IO領域1106乃至1108は、領域ID310が“K”、“L”、“M”、となる所定の記憶領域であって、
図5における領域K506、L507、M508に対応している。この領域は、仮想計算機間でデバイス制御を共有するための一方式である、共有するI/Oレジスタに対して、アプリケーションプログラムやオペレーティングシステムからのI/O操作要求時に例外を発生させるアクセス設定を行い、発生した例外をハイパーバイザで受信し、該当するI/O操作の調停および代理をハイパーバイザ行うI/Oエミュレーションを実現するための領域となるように、予め設定されている。さらに、保護設定情報保持部661によって記憶されるアクセス許可情報1000のうちのオリジナルアクセス情報の部分によって、VMID1020が“0”となる仮想計算機について、IO領域1106乃至1108は、読出し、書込み共に可の領域、この仮想計算機以外の全ての仮想計算機については、IO領域1106を、読出し、書込み共に共有を実現するための領域となるように、読出し、書込み共に不可の領域として、IO領域1107を、書込みのみ共有を実現するための領域となるように、読出し可、書込み不可の領域として、IO領域1108を読出しのみ共有を実現するための領域となるように、読出し不可、書込み可の領域として、予め設定されている。
【0125】
第2種プログラムの第1仮想計算機用割当領域1111は、領域ID310が“N”となる所定の記憶領域であって、
図5における領域N511に対応している。この領域は、COW処理部663が、第2種プログラムに係るコピーオンライト方式によるアクセス管理を行うことで、第1仮想計算機601に新たに割り当てることとなった領域であって、COW処理部663によって、保護設定情報保持部661によって記憶されるアクセス許可情報1000が更新されることで設定されている。
【0126】
第2種プログラムの第2仮想計算機用割当領域1112は、領域ID310が“N+1”となる所定の記憶領域であって、
図5における領域N+1(512)に対応している。この領域は、COW処理部663が、第2種プログラムに係るコピーオンライト方式によるアクセス管理を行うことで、第2仮想計算機602に新たに割り当てることとなった領域であって、COW処理部663によって、保護設定情報保持部661によって記憶されるアクセス許可情報1000が更新されることで設定されている。
【0127】
第3種プログラムの第1仮想計算機用割当領域1113は、領域ID310が“N+2”となる所定の記憶領域であって、
図5における領域N+2(513)に対応している。この領域は、COW処理部663が、第3種プログラムに係るコピーオンライト方式によるアクセス管理を行うことで、第1仮想計算機601に新たに割り当てることとなった領域であって、COW処理部663によって、保護設定情報保持部661によって記憶されるアクセス許可情報1000が更新されることで設定されている。
【0128】
第3種プログラムの第3仮想計算機用割当領域1114は、領域ID310が“N+3”となる所定の記憶領域であって、
図5における領域N+3(514)に対応している。この領域は、COW処理部663が、第3種プログラムに係るコピーオンライト方式によるアクセス管理を行うことで、第3仮想計算機603に新たに割り当てることとなった領域であって、COW処理部663によって、保護設定情報保持部661によって記憶されるアクセス許可情報1000が更新されることで設定されている。
【0129】
以下、図面を参照しながら、仮想計算機システム100の行う動作について説明する。
【0130】
<動作>
ここでは、仮想計算機システム100の行う動作のうち、特徴的な動作である、仮想計算機切替処理とメモリアクセス処理とアプリケーションプログラム実行処理とについて説明する。
【0131】
<仮想計算機切替処理>
仮想計算機切替処理は、プロセッサ101に実行させる仮想計算機を切り替える処理である。
【0132】
図12は、仮想計算機切替処理のフローチャートである。
【0133】
仮想計算機切替処理は、仮想計算機の時分割実行処理を行っているVM実行部652が、タイマ108を用いて計測している時間が所定時間を経過した場合、プロセッサ101が、プロセッサ101の外部から、現在実行されていない仮想計算機への割込み要求を受け付けた場合等に、VM実行部652によって開始される。
【0134】
仮想計算機切替処理が開始されると、VM実行部652は、切り替え先となる仮想計算機を特定する(ステップS1200)。
【0135】
ステップS1200の処理が終わると、VM実行部652は、プロセッサ101のレジスタ値を、現在実行中となっている仮想計算機に対応付けられた所定の記憶領域に退避して、現在実行中となっている仮想計算機を中断させる(ステップS1220)。ここで、この所定の記憶領域は、メモリ102の記憶領域のうちの、ハイパーバイザ102によってのみアクセス可能となるハイパーバイザ割当て領域1101に設けられている。
【0136】
ステップS1220の処理が終わると、VM実行部652は、キャッシュメモリ105に記憶されているデータについて、ライトバック処理した後にフラッシュする(ステップS1230)。なお、キャッシュフラッシュによる実行速度の低下を回避するために、仮想計算機毎に利用できるキャッシュ領域を制限し、ステップS1230を省略しても良い。
【0137】
ステップS1230の処理が終わると、保護設定部662は、ステップS1200の処理においてVM実行部652によって特定された切り替え先となる仮想計算機を識別するVMID1020(
図10参照)についての、領域ID1010それぞれについて対応付けられているアクセス情報を読み出して、メモリ保護情報400(
図4参照)を生成し、生成したメモリ保護情報400で、メモリ保護ユニット107が記憶するメモリ保護情報400を更新する(ステップS1240)。
【0138】
ステップS1240の処理が終わると、VM実行部652は、切り替え先となる仮想計算機に対応付けられた所定の記憶領域に退避されている、プロセッサ101のレジスタ値を、プロセッサ101のレジスタに復旧して(ステップS1250)、その仮想計算機を起動する(ステップS1260)。なお、仮想計算機毎に利用できるキャッシュ領域の制限し、ステップS1230を省略している場合、本ステップS1260において、キャッシュ領域を切り替える。
【0139】
VM実行部652がステップS1260の処理を終了すると、仮想計算機システム100は、その仮想計算機切替処理を終了する。
【0140】
<メモリアクセス処理>
メモリアクセス処理は、メモリ保護ユニット107の行うメモリ102の記憶領域へのアクセス制御動作である。
【0141】
図13は、メモリアクセス処理のフローチャートである。
【0142】
メモリアクセス処理は、メモリ保護ユニット107が、内部バス120を介してプロセッサ101からのメモリ102の記憶領域へのアクセス要求を受けることによって開始される。
【0143】
メモリアクセス処理が開始されると、メモリ保護ユニット107は、記憶しているメモリ保護テーブル300(
図3参照)を参照して、受けたアクセス要求のアドレスが、領域ID310によって識別される所定の領域のうちの、いずれの所定の領域に含まれているかを特定する(ステップS1300)。
【0144】
ステップS1300の処理が終わると、メモリ保護ユニット107は、記憶しているメモリ保護情報400(
図4参照)を参照して、受けたアクセス要求のアクセス種(書込みと読出しとのいずれか)と、特定された領域を識別する領域ID410に対応付けられているアクセス情報420とを比較して(ステップS1310)、受けたアクセス要求のアクセス種が、特定された領域を識別する領域ID410に対応付けられているアクセス情報420を満たしているか否かを調べる(ステップS1320)。
【0145】
ステップS1320の処理において、受けたアクセス要求のアクセス種が、特定された領域を識別する領域ID410に対応付けられているアクセス情報420を満たしている場合には(ステップS1320:Yes)、メモリ保護ユニット107は、受けたアクセス要求を実行する(ステップS1330)。
【0146】
ステップS1320の処理において、受けたアクセス要求のアクセス種が、特定された領域を識別する領域ID410に対応付けられているアクセス情報420を満たしていない場合には(ステップS1320:No)、メモリ保護ユニット107は、受けたアクセス要求を実行せずに、プロセッサ101に対して、メモリ領域へのアクセスを実行できなかった旨の例外通知を行う(ステップS1340)。
【0147】
メモリ保護ユニット107がステップS1330の処理を終了した場合、又はステップS1340の処理を終了した場合には、仮想計算機システム100は、そのメモリアクセス処理を終了する。
【0148】
<アプリケーションプログラム実行処理>
アプリケーションプログラム実行処理は、要求受付部654が実行中の仮想計算機のオペレーティングシステムから、新たなアプリケーションプログラムの起動要求を受け付けた場合に、VM起動部651が、その新たなアプリケーションプログラムを実行させる仮想計算機を特定し、特定した仮想計算機に、その新たなアプリケーションプログラムの実行を指示する処理である。
【0149】
仮想計算機のオペレーティングシステムが、要求受付部654に新たなアプリケーションプログラムの起動要求を行う場合の例としては、例えば、仮想計算機システム100を利用するユーザーから、入力装置131が操作されることで、オペレーティングシステムによって実行制御されているタスクが、オペレーティングシステムに、新たなアプリケーションプログラムの起動の要求を依頼した場合等がある。
【0150】
図14は、アプリケーションプログラム実行処理のフローチャートである。
【0151】
アプリケーションプログラム実行処理は、要求受付部654が実行中の仮想計算機のオペレーティングシステムから、新たなアプリケーションプログラムの起動要求を受け付けることによって開始される。
【0152】
要求受付部654は、新たなアプリケーションプログラムの起動要求を受け付けると、起動要求を受け付けた旨の信号をVM起動部651へ送る。
【0153】
VM起動部651は、起動要求を受け付けた旨の信号を受けると、VM管理テーブル保持部640によって記憶されるアプリグループ管理テーブル700(
図7参照)を参照して、そのアプリケーションプログラムが属するアプリケーションプログラムグループを特定し(ステップS1400)、さらに、VM管理テーブル保持部640によって記憶される仮想計算機管理テーブル800(
図8参照)を参照して、特定したアプリケーショングループに属するアプリケーションプログラムを実行するための仮想計算機を特定する(ステップS1410)。
【0154】
ステップS1410の処理が終了すると、VM起動部651は、VM管理テーブル保持部640によって記憶される仮想計算機状態テーブル900(
図9参照)を参照して、特定した仮想計算機が実行中であるか否かを調べる(ステップS1420)。
【0155】
ステップS1420の処理において、特定した仮想計算機が実行中でない場合に(ステップS1420:No)、VM起動部651は、さらに、VM管理テーブル保持部640によって記憶される仮想計算機状態テーブル900を参照して、特定した仮想計算機が終了処理中であるか否かを調べる(ステップS1430)。
【0156】
ステップS1430の処理において、特定した仮想計算機が終了処理中である場合には(ステップS1430:Yes)、VM起動部651は、特定した仮想計算機が終了処理中でなくなるまで待機する(ステップS1430:Yesの処理を繰り返す)。
【0157】
ステップS1430の処理において、特定した仮想計算機が終了処理中でない場合には(ステップS1430:No)、VM起動部651は、特定した仮想計算機をフォーク方式で生成する(ステップS1440)。
【0158】
ステップS1420の処理において、特定した仮想計算機が実行中の場合(ステップS1420:Yes)と、ステップS1440の処理が終了した場合とに、VM起動部651は、特定した仮想計算機のオペレーティングシステムに、対象となるアプリケーションの実行を開始させる旨の信号を送る(ステップS1450)。
【0159】
VM起動部651がステップS1450の処理を終了すると、仮想計算機システム100は、そのアプリケーションプログラム実行処理を終了する。
【0160】
<考察>
以下、具体例を用いて、仮想計算機システム100の動作について考察する。
【0161】
具体例として、アプリケーションプログラム名720(
図7参照)が「メモ帳」となるアプリケーションプログラム(以下、単に「メモ帳」と呼ぶ。)、及びメモ帳によって利用されるデータが、領域ID1010(
図10参照)が“3”となる所定の領域に格納され、アプリケーションプログラム名720が「メーラ」となるアプリケーションプログラム(以下、単に「メーラ」と呼ぶ。)、及びメーラによって利用されるデータが、領域ID1010が“5”となる所定の領域に格納されている場合において、メモ帳に、メーラを起動してアドレス帳に記録されている個人情報を外部に流出させるというマルウエアが含まれているときを考える。
【0162】
仮想計算機システム100において、メモ帳は、アプリグループID710が“1”となるアプリケーションプログラムグループに属するため(アプリグループ管理テーブル700(
図7参照)を参照)、VMID810が“1”となる仮想計算機(以下、「仮想計算機1」と呼ぶ。)によって実行される(仮想計算機管理テーブル800(
図8参照)を参照)。
【0163】
メモ帳を実行する仮想計算機1において、メモ帳に含まれるマルウエアが実行されてしまった場合に、このマルウエアは、メーラを起動させようと試みる。
【0164】
しかしながら、メーラ、及びメーラによって利用されるデータは、領域ID1010が“5”となる所定の領域に格納されており、メモリ保護ユニット107によって、仮想計算機1からのアクセスが禁止されている(
図10のアクセス許可情報1000を参照)。このため、マルウエアは、メーラを起動させること、メーラを改竄すること、及びメーラによって利用されるデータにアクセスすることができない。よって、マルウエアはアドレス帳に記録されている個人情報を外部に流出させることはない。
【0165】
このように、本実施の形態1に係る仮想計算機システム100は、仮想計算機が実行対象とするアプリケーションプログラムの中にマルウエアが含まれてしまっている場合であっても、そのマルウエアによって、マルウエアによって攻撃されたくないアプリケーションプログラムが攻撃されてしまう危険性を、従来よりも低く抑えることができる。
<実施の形態2>
<概要>
以下、本発明に係る仮想計算機システムの一実施形態として、実施の形態1における仮想計算機システム100の一部を変形した仮想計算機システム1500について説明する。
【0166】
実施の形態2に係る仮想計算機システム1500は、そのハードウエア構成が、実施の形態1に係る仮想計算機システム100から一部変形されており、また、実行されるソフトウエアの一部が、実施の形態1に係る仮想計算機システム100から一部変形されている。
【0167】
実施の形態1に係る仮想計算機システム100は、メモリ102の記憶領域へのアクセスを制御するメモリ保護ユニット107を備える構成の例であったが、実施の形態2に係る仮想計算機システム1500は、ハードウエアとしてのメモリ保護ユニットを備えず、プロセッサによって実行されるハイパーバイザが、メモリ102の記憶領域へのアクセスを制御する機能を有している場合の例である。
【0168】
以下、本実施の形態2に係る仮想計算機システム1500の構成について、図面を参照しながら、実施の形態1に係る仮想計算機システム100の構成との相違点を中心に説明する。
【0169】
<ハードウエア構成>
図15は、仮想計算機システム1500の主要なハードウエア構成を示すブロック図である。
【0170】
同図に示す通り、仮想計算機システム1500は、仮想計算機システム100と同様に、ハードウエアとしてはコンピュータ装置であり、実施の形態1に係る仮想計算機システム100から、集積回路110が集積回路1510に変形されたものである。
【0171】
<プログラムモジュール構成>
図16は、ある時刻t0において、プロセッサ101上で実行対象となるモジュールを示すブロック図である。
【0172】
同図において、モジュール群1600は、プロセッサ101において実行対象となっているモジュールの集合であって、モジュール群1600に含まれるモジュールのそれぞれは、対応するプログラムが、メモリ102の記憶領域に格納されている。
【0173】
仮想計算機システム1500におけるモジュール群1600は、実施の形態1に係る仮想計算機システム100におけるモジュール群600から、ハイパーバイザ630がハイパーバイザ1630に変更されたものとなっている。
【0174】
ハイパーバイザ1630は、実施の形態1に係るハイパーバイザ630から、VMメモリ管理部660がVMメモリ管理部1660に変更されるように変形されている。
【0175】
VMメモリ管理部1660は、実施の形態1に係るVMメモリ管理部660に対して、仮想MMU1670とメモリ保護部1680とが追加されるように変形されている。
【0176】
仮想MMU1670は、MMU106と協働して、メモリ102の物理記憶領域のアドレスを指定する物理アドレスと、プロセッサ101の利用する論理記憶領域のアドレスを指定する論理アドレスとの変換機能を有する。
【0177】
仮想計算機システム1500は、仮想計算機毎に個別に論理記憶領域を割り当てて仮想計算機を実行させる(以下、この仮想計算機毎に個別に割り当てる論理記憶領域のことを、「一次論理記憶領域」と呼び、一次論理記憶領域のアドレスを、「一次論理アドレス」と呼ぶ。)ように設定されており、この一次論理アドレスは、MMU106によって、メモリ102の利用する物理アドレスに変換されるように設定されている。
【0178】
この仮想MMU1670の有する機能は、各仮想計算機が、自仮想計算機内で利用している論理記憶アドレス(以下、この仮想計算機が自仮想計算機内で利用する論理記憶領域のことを「二次論理記憶領域」と呼び、二次論理記憶領域のアドレスを、「二次論理アドレス」と呼ぶ。)を、上述の一次論理アドレスに変換する機能である。
【0179】
メモリ保護部1680は、内部にメモリ保護テーブル300(
図3参照)とメモリ保護情報400(
図4参照)とを記憶する機能と、記憶するメモリ保護テーブル300とメモリ保護情報400とを参照して、仮想計算機が一次論理アドレスを用いて行うメモリ102の物理記憶領域へのアクセスを制御する機能とを有する。
【0180】
ここで、メモリ保護部1680の、メモリ保護テーブル300とメモリ保護情報400とを参照して行うメモリ102の記憶領域へのアクセス制御は、実施の形態1に係るメモリ保護ユニット107の行うメモリ102の記憶領域へのアクセスの制御(実施の形態1における、<メモリアクセス処理>項目参照)と同様のものであり、メモリ保護ユニット107をメモリ保護部1680と置き換えたものである。よって、ここではその説明を省略する。
【0181】
上述の構成の仮想計算機システム1500は、実施の形態1に係る仮想計算機システム100と同様に、仮想計算機が実行対象とするアプリケーションプログラムの中に、マルウエアが含まれてしまっている場合であっても、本来実行されたくないアプリケーションプログラムが実行されてしまう危険性を、従来よりも低く抑えることができる。
<実施の形態3>
<概要>
以下、本発明に係る仮想計算機システムの一実施形態として、実施の形態1における仮想計算機システム100の一部を変形した変形仮想計算機システムについて説明する。
【0182】
実施の形態3に係る変形仮想計算機システムは、そのハードウエア構成が、実施の形態1に係る仮想計算機システム100と同一であるが、実行されるソフトウエアの一部が、実施の形態1に係る仮想計算機システム100から一部変形されている。
【0183】
この変形仮想計算機システムは、仮想計算機が複数実行されている場合であっても、実行している仮想計算機の中の1つの仮想計算機のみ(ここでは、第1仮想計算機)がディスプレイ、キーボード等のデバイスを直接制御し、それ以外の仮想計算機は、第1仮想計算機にデバイスの制御を依頼することで、間接的にデバイスを制御するという構成の仮想計算機システムの例である。
【0184】
以下、本実施の形態3に係る変形仮想計算機システムの構成について、図面を参照しながら、実施の形態1に係る仮想計算機システム100の構成との相違点を中心に説明する。
【0185】
図17は、ある時刻t0において、プロセッサ101上で実行対象となるモジュールを示すブロック図である。
【0186】
同図において、モジュール群1700は、プロセッサ101において実行対象となっているモジュールの集合であって、モジュール群1700に含まれるモジュールのそれぞれは、対応するプログラムが、メモリ102の記憶領域に格納されている。
【0187】
変形仮想計算機システムにおけるモジュール群1700は、実施の形態1に係る仮想計算機システム100におけるモジュール群600から、第1仮想計算機601が第1仮想計算機1701に変更され、第2仮想計算機602が第2仮想計算機1702に変更され、第3仮想計算機603が第3仮想計算機1703に変更されている。
【0188】
第1仮想計算機1701は、VMID1020が“0”となる、他の全ての仮想計算機の親仮想計算機であって、実施の形態1における第1仮想計算機601から、OS1A621が、デバイスドライバ1731を含むOS1A1721に変更されるように変形されている。
【0189】
第2仮想計算機1702は、タスク2B614を実行させるために、VM起動部651によって、第1仮想計算機1701を親仮想計算機としてフォーク方式で生成された仮想計算機であって、実施の形態1における第2仮想計算機602から、OS1B622が、デバイスドライバ1732を含むOS1B1722に変更されるように変形されている。
【0190】
第3仮想計算機1703は、タスク3C615を実行させるために、VM起動部651によって、第1仮想計算機1701を親仮想計算機としてフォーク方式で生成された仮想計算機であって、実施の形態1における第3仮想計算機603から、OS1C623が、デバイスドライバ1733を含むOS1C1723に変更されるように変形されている。
【0191】
デバイスドライバ1731は、フロントエンド部1741とバックエンド部1742とネイティブ部1743とから構成されている。なお、デバイスドライバとは、いわゆるデバイスを制御するプログラムのことであるが、ここでは、デバイス制御処理、ファイルシステム処理、プロセス間通信処理、仮想計算機間通信処理等の、仮想計算機の入出力機能を実現するプログラムをも含んでいる。
【0192】
ネイティブ部1743は、対象となるデバイスを直接制御するための命令コード等によって構成され、デバイスを制御する機能を有する。
【0193】
このプログラムが格納されているメモリ102の記憶領域は、保護設定情報保持部661によって記憶されるアクセス許可情報1000(
図10参照)によって、第1仮想計算機1701対してのみアクセス情報がR/Wとなり、他の仮想計算機に対してアクセス情報がNAとなるように設定されている。これにより、ネイティブ部1743は、第1仮想計算機1701以外の仮想計算機によって実行されることはない。
【0194】
バックエンド部1742は、自らを含む仮想計算機に含まれるフロントエンド部、及び、自らを含む仮想計算機以外の仮想計算機に含まれるフロントエンド部とサーバクライアントモデルで通信する機能と、通信するフロントエンド部から、ネイティブ部1743の操作コマンドを受け取り、受け取ったネイティブ部1743の操作コマンドをネイティブ部1743に出力する機能と、ネイティブ部1743から出力されたデータを受け取り、通信するフロントエンド部へ、受け取ったデータを出力する機能とを有する。
【0195】
このプログラムが格納されているメモリ102の記憶領域は、保護設定情報保持部661によって記憶されるアクセス許可情報1000によって、第1仮想計算機1701対してのみアクセス情報がR/Wとなり、他の仮想計算機に対してアクセス情報がNAとなるように設定されている。これにより、バックエンド部1742は、第1仮想計算機1701以外の仮想計算機によって実行されることはない。
【0196】
フロントエンド部1741は、バックエンド部1742とサーバクライアントモデルで通信する機能と、通信するバックエンド部1742へ、ネイティブ部1743の操作コマンドを送る機能と、通信するバックエンド部から出力されたデータを受け取る機能とを有する。
【0197】
このプログラムが格納されているメモリ102の記憶領域は、保護設定情報保持部661によって記憶されるアクセス許可情報1000によって、第1仮想計算機1701対してのみアクセス情報がR/Wとなり、他の仮想計算機に対してアクセス情報がROとなるように設定されている。これにより、フロントエンド部は、全ての仮想計算機によって実行されることができる(
図17中のフロントエンド部1741、フロントエンド部1744、フロントエンド部1745に対応)。また、複数の仮想計算機によってフロントエンド部が実行される場合には、フロントエンド部が格納されているメモリ102の記憶領域は、COW処理部663によってコピーオンライト方式で管理されることとなる。
【0198】
デバイスドライバ1732は、第2仮想計算機1702の生成に伴って、デバイスドライバ1731を基に生成されたものであって、フロントエンド部1741を基に生成されたフロントエンド部1744を含んでいる。
【0199】
デバイスドライバ1732は、ネイティブ部とバックエンド部とを含んでいないが、これは、ネイティブ部1743が格納されているメモリ102の記憶領域とバックエンド部1742が格納されているメモリ102の記憶領域とは、第2仮想計算機1702から読出し、書込み共に不可となっているため、デバイスドライバ1732は、ネイティブ部とバックエンド部とを実行することができなくなっているためである。
【0200】
デバイスドライバ1733は、第3仮想計算機1703の生成に伴って、デバイスドライバ1731を基に生成されたものであって、フロントエンド部1741を基に生成されたフロントエンド部1745を含んでいる。
【0201】
デバイスドライバ1733は、ネイティブ部とバックエンド部とを含んでいないが、これは、ネイティブ部1743が格納されているメモリ102の記憶領域とバックエンド部1742が格納されているメモリ102の記憶領域とは、第3仮想計算機1703から読出し、書込み共に不可となっているため、デバイスドライバ1733は、ネイティブ部とバックエンド部とを実行することができなくなっているためである。
【0202】
<デバイス制御例>
ここでは、ネイティブ部1743を含まない仮想計算機、例えば第2仮想計算機1702が、デバイスを間接的に制御する場合について説明する。
【0203】
第2仮想計算機1702は、デバイスを間接的に制御する場合に、まずフロントエンド部1744にネイティブ部1743の操作コマンドを出力する。フロントエンド部1744は、ネイティブ部1743の操作コマンドを受けると、サーバクライアントモデルでバックエンド部1742と通信し、ネイティブ部1743の操作コマンドをバックエンド部1742に送る。バックエンド部1742は、ネイティブ部1743の操作コマンドを受けると、ネイティブ部1743に、ネイティブ部1743の操作コマンドを出力する。これにより、第2仮想計算機は、デバイスを操作することとなる。
【0204】
このように、本実施の形態3に係る変形仮想計算機システムによれば、複数の仮想計算機が実行対象となっている場合であっても、第1仮想計算機1701のネイティブ部1743のみがデバイスを直接制御することとなり、デバイス制御を排他的に行うことができる。
<補足>
以上、本発明に係る仮想計算機システムの一実施形態として、実施の形態1、実施の形態2、実施の形態3において、3つの仮想計算機システムの例について説明したが、以下のように変形することも可能であり、本発明は上述した実施の形態で示した通りの仮想計算機システムに限られないことはもちろんである。
(1)実施の形態1において、仮想計算機システム100が1つのプロセッサを備える場合の例について説明したが、ハイパーバイザが複数の仮想計算機の実行制御をすることができれば、必ずしもプロセッサの数は1つに限られる必要はなく、例えば、2つ、3つといった複数個であっても構わない。プロセッサの数が複数個の場合には、ハイパーバイザは、仮想計算機の実行を必ずしも時分割で行う構成である必要はなく、複数の仮想計算機を並列に実行させる構成であっても構わない。
(2)実施の形態1において、プロセッサ101とメモリ102とキャッシュメモリ105とMMU106とメモリ保護ユニット107とタイマ108とDMAC109と内部バス120と第1インタフェース121と第2インタフェース122と第3インタフェース123とが1つの集積回路110に集積されている場合の例について説明したが、これらの回路が必ずしも1つの集積回路に集積されている必要はない。例えば、プロセッサ101とキャッシュメモリ105とが第1の集積回路に集積され、その他の回路が第2の集積回路に集積される構成されていても構わないし、例えば、各回路がそれぞれ互いに異なる集積回路に集積される構成であっても構わない。
(3)実施の形態1において、プロセッサ101が2つの動作モードを備える構成の場合を例として説明したが、アプリケーションプログラムを実行するモードとオペレーティングシステムを実行するモードとよりも高い特権モードでハイパーバイザを実行することができる構成であれば、必ずしも動作モードの数は2つに限られる必要はなく、例えば、3つ以上であっても構わない。その場合、ハイパーバイザを実行する動作モードを、オペレーティングシステムを実行するよりも高い特権モードとすることができ、ハイパーバイザにおける仮想MMU処理や、I/Oエミュレーション処理のオーバーヘッドを大幅に軽減することができる。
(4)実施の形態1において、第1仮想計算機601が、他の全ての仮想計算機の親となる構成の場合を例として説明したが、生成される子仮想計算機のそれぞれついて、メモリ102の記憶領域へのアクセス制限を実現することができれば、必ずしも親となる仮想計算機が第1仮想計算機601に限られる必要はなく、例えば、ある仮想計算機の子仮想計算機となっている仮想計算機が、他の仮想計算機の親となり得る構成であっても構わない。
(5)実施の形態1において、仮想計算機の生成をフォーク形式で行う構成の場合を例として説明した。これは、仮想計算機の生成をフォーク形式で行うことによって、メモリ102の記憶領域が効率的に利用されることとなるためである。
【0205】
しかしながら、メモリ102の記憶領域の利用効率の非効率性を許容することができれば、親となる仮想計算機を元にして子仮想計算機を生成する場合に、必ずしもフォーク形式で行う必要はない。
【0206】
一例として、親となる仮想計算機に割り当てられている全ての記憶領域と、新たに生成する仮想計算機に割り当てる全ての記憶領域とが、1対1に対応するように、親となる仮想計算機に割り当てられている記憶領域を、新たに生成する仮想計算機の記憶領域にコピーすることによって、新たな仮想計算機を生成する形式等が考えられる。
【0207】
また、このように、子仮想計算機の記憶領域が親仮想計算機の記憶領域からコピーされたものである場合等には、これらの記憶領域は、必ずしもコピーオンライト方式で管理される必要はなくなる。
(6)実施の形態2において、二次論理アドレスと一次論理アドレスとの変換を行う機能を有する仮想MMU1670が、ハイパバイザ1630の内部に含まれている構成の場合を例として説明したが、二次論理アドレスと一次論理アドレスとの変換を行う機能を実現することができれば、必ずしもハイパバイザ1630の内部に仮想MMU1670が含まれている必要はなく、例えば、集積回路1510内に、二次論理アドレスと一次論理アドレスとの変換を行う機能を有するハードウエアを備える構成であっても構わない。
(7)以下、さらに本発明の一実施形態に係る仮想計算機システムの構成及びその変形例と各効果について説明する。
【0208】
(a)本発明の一実施形態に係る仮想計算機システムは、記憶装置と、当該記憶装置に接続されたプロセッサと、当該プロセッサ上で実行され、当該プロセッサに複数の仮想計算機の実行制御をさせるハイパーバイザとを備える仮想計算機システムであって、仮想計算機からの、前記記憶装置の記憶領域へのアクセスを制御するアクセス制御部を備え、前記記憶装置は、第1種プログラムを格納する第1記憶領域と、第2種プログラムを格納する第2記憶領域とを含み、前記ハイパーバイザは、仮想計算機から、第1種プログラム又は第2種プログラムの起動要求を受け付けるための起動要求受付部と、前記プロセッサによって実行される前記起動要求受付部が、第1種プログラムの起動要求を受け付けた場合に、当該第1種プログラムを実行するための仮想計算機を生成して、当該生成した仮想計算機を第1種仮想計算機として管理し、第2種プログラムの起動要求を受け付けた場合に、当該第2種プログラムを実行するための仮想計算機を生成して、当該生成した仮想計算機を第2種仮想計算機として管理するための仮想計算機生成部とを含み、前記アクセス制御部は、前記アクセスの制御を、前記プロセッサによって実行される前記仮想計算機生成部によって前記第1種仮想計算機として管理されている仮想計算機からの前記第2記憶領域へのアクセスが禁止されるように行うことを特徴とする。
【0209】
上述の構成を備える本実施形態に係る仮想計算機システムによると、未認証アプリケーションプログラムを第1種プログラムとして第1記憶領域に格納し、認証済アプリケーションプログラムを第2種プログラムとして第2記憶領域に格納することで、未認証アプリケーションプログラムを実行する仮想計算機は、認証済アプリケーションプログラムにアクセスすることができなくなる。
【0210】
従って、仮想計算機が実行対象とするアプリケーションプログラムの中に、認証済アプリケーションプログラムと、未認証アプリケーションプログラムとが混在している場合であっても、未認証アプリケーションプログラムに含まれるマルウエアが実行されてしまうことで、認証済アプリケーションプログラムが攻撃されてしまう危険性を従来よりも低く抑えることができる。
【0211】
図18は上記変形例における仮想計算機システム1800の概略構成図である。
【0212】
同図に示されるように、仮想計算機システム1800は、プロセッサ1801とアクセス制御部1802と記憶装置1803とから構成される。そして、記憶装置1803は、第1記憶領域1811と第2記憶領域1812とを含み、ハイパーバイザ1813がロードされている。また、ハイパーバイザ1813は、起動要求受付部1822と仮想計算機生成部1822とを含んでいる。
【0213】
プロセッサ1801は、アクセス制御部1802を介して、記憶装置1803に接続されるプロセッサである。一例として、実施の形態1におけるプロセッサ101(
図1参照)として実現される。
【0214】
記憶装置1803は、第1記憶領域1811と第2記憶領域1812とを含む。一例として、実施の形態1におけるメモリ102(
図1参照)として実現される。
【0215】
第1記憶領域1811は、第1種プログラムを格納する記憶領域である。この第1記憶領域1811は、一例として、実施の形態1における領域C503(
図5参照)として実現される。また、第1種プログラムは、一例として、実施の形態1におけるメモ帳(
図7参照)として実現される。
【0216】
第2記憶領域1812は、第2種プログラムを格納する記憶領域である。この第2記憶領域1812は、一例として、実施の形態1における領域E505(
図5参照)として実現される。また、第2種プログラムは、一例として実施の形態1におけるメーラ(
図7参照)として実現される。
【0217】
ハイパーバイザ1813は、プロセッサ1801上で実行され、プロセッサ1801に複数の仮想計算機の実行制御をさせるハイパーバイザであって、起動要求受付部1822と仮想計算機生成部1822とを含む。このハイパーバイザ1813は、一例として、実施の形態1におけるハイパーバイザ630(
図6参照)として実現される。
【0218】
起動要求受付部1822は、仮想計算機から、第1種プログラム又は第2種プログラムの起動要求を受け付けるためのコード群である。一例として、実施の形態1における要求受付部654として実現される。
【0219】
仮想計算機生成部1823は、1801プロセッサによって実行される起動要求受付部1822が、第1種プログラムの起動要求を受け付けた場合に、当該第1種プログラムを実行するための仮想計算機を生成して、当該生成した仮想計算機を第1種仮想計算機として管理し、第2種プログラムの起動要求を受け付けた場合に、当該第2種プログラムを実行するための仮想計算機を生成して、当該生成した仮想計算機を第2種仮想計算機として管理するためのコード群である。一例として、実施の形態1におけるVM起動部651とVM実行部652として実現される。
【0220】
アクセス制御部1802は、仮想計算機からの、記憶装置1803の記憶領域へのアクセスを、プロセッサ1801によって実行される仮想計算機生成部1823によって前記第1種仮想計算機として管理されている仮想計算機からの前記第2記憶領域へのアクセスが禁止されるように制御する機能を有する。一例として、実施の形態1におけるメモリ保護ユニット107(
図1参照)として実現される。
【0221】
(b)また、前記アクセス制御部は、前記第2記憶領域のアドレスを特定する第2領域特定情報を記憶するための第2領域特定情報記憶部を有し、前記アクセスの制御を、前記第2領域特定情報記憶部に記憶されている前記第2領域特定情報を参照して行うとしてもよい。
【0222】
このような構成にすることによって、アクセス制御部は、第2記憶領域のアドレスを、アクセス制御部の外部を参照することなく特定することができるようになる。
【0223】
(c)また、前記記憶装置は、プログラムを特定する情報と、プログラムの種別を特定する情報とを対応付けるプログラム対応情報を記憶するためのプログラム対応情報記憶領域を含み、前記仮想計算機生成部は、前記プロセッサによって実行される前記起動要求受付部が、仮想計算機から、プログラムの起動要求を受け付けた場合に、当該プログラムが、いずれの種別のプログラムであるかを、前記プログラム対応情報記憶領域に記憶されているプログラム対応情報に基づいて特定するためのプログラム種特定部を含み、前記プロセッサによって実行される前記起動要求受付部が、第1種プログラムの起動要求を受け付けた場合に行う、前記生成した仮想計算機に対する第1種仮想計算機としての管理と、前記プロセッサによって実行される前記起動要求受付部が、第2種プログラムの起動要求を受け付けた場合に行う、前記生成した仮想計算機に対する第2種仮想計算機としての管理とを、前記プログラム種特定部によって特定されたプログラムの種別に基づいて行うとしてもよい。
【0224】
このような構成にすることによって、仮想計算機生成部は、プログラム対応情報記憶領域に記憶されているプログラム対応情報に基づいて、仮想計算機の種別管理を行うことができるようになる。
【0225】
(d)また、前記仮想計算機生成部は、前記プロセッサによって実行される前記起動要求受付部が、仮想計算機から、第1種プログラム又は第2種プログラムの起動要求を受け付けた場合において、仮想計算機を生成するときに、当該生成する仮想計算機に対する、前記記憶装置における記憶領域の割り当てを、前記起動要求の要求元仮想計算機に割り当てられている、前記記憶装置における記憶領域に基づくフォーク方式で行うとしてもよい。
【0226】
このような構成にすることによって、新たな仮想計算機の生成をフォーク方式で行われることとなるため、記憶装置の記憶領域の利用効率を向上することができるようになる。
【0227】
(e)また、前記ハイパーバイザは、前記プロセッサによって実行される前記仮想計算機生成部が、第1の仮想計算機に対する記憶領域の割り当てを、第2の仮想計算機に割り当てられている、前記記憶装置における記憶領域に基づくフォーク方式で行った場合に、前記第1の仮想計算機と前記第2の仮想計算機とによって行われる、前記記憶装置における記憶領域へのアクセスが、コピーオンライト方式で行われるように、仮想計算機からの、前記記憶装置における記憶領域へのアクセスを制御するためのコピーオンライト実行制御部を含むとしてもよい。
【0228】
このような構成にすることによって、親仮想計算機による記憶領域へのアクセスと、親仮想計算機を元にしてフォーク方式で生成された子仮想計算機による記憶領域への管理とがコピーオンライト方式で行われることとなるため、記憶装置の記憶領域の利用効率を向上することができるようになる。
【0229】
(f)また、前記第1記憶領域は、さらに、前記第1種プログラムが仮想計算機に実行されることで利用されるデータを記憶する記憶領域を含み、前記第2記憶領域は、さらに、前記第2種プログラムが仮想計算機に実行されることで利用されるデータを記憶する記憶領域を含むとしてもよい。
【0230】
このような構成にすることによって、第1種プログラムを実行する仮想計算機に、第2種プログラムを実行する仮想計算機が利用するデータを、利用させないようにすることができるようになる。
【0231】
(g)また、前記記憶装置は、デバイスドライバを記憶するデバイスドライバ記憶領域と、前記デバイスドライバ記憶領域に記憶されている前記デバイスドライバを実行する仮想計算機以外の仮想計算機によって実行されることで、前記デバイスドライバを実行する仮想計算機と通信し、前記デバイスドライバを実行する仮想計算機に、デバイスの制御をさせるためのデバイス制御プログラムを記憶するデバイス制御プログラム記憶領域とを含み、前記アクセス制御部は、前記アクセスの制御を、実行制御対象である仮想計算機の中の1つの仮想計算機に限って、前記デバイスドライバ記憶領域へのアクセスが許可されるように行うとしてもよい。
【0232】
このような構成にすることによって、複数の仮想計算機によるデバイス制御を排他的に行うことができる。