(57)【特許請求の範囲】
【請求項１】
デバイスにアクセスする複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が動作する計算機であって、
前記デバイスを前記複数のＯＳのいずれかのＯＳに先着順で割り付けるためのデバイス割り付けテーブルを記憶するデバイス割り付け記憶部と、
前記デバイスへのアクセスが発生した場合、前記デバイスが前記複数のＯＳのいずれのＯＳに割り付けられているか前記デバイス割り付けテーブルに基づいて判定し、前記デバイスがいずれのＯＳにも割り付けられていない場合、前記デバイスをアクセス元のＯＳに割り付けるために前記デバイス割り付けテーブルを更新して前記デバイスへのアクセスを許可し、前記デバイスが前記アクセス元のＯＳ以外のＯＳに割り付けられている場合、前記デバイスへのアクセスを拒否するアクセス管理部とを備え、
前記アクセス管理部は、動作が終了する場合に前記デバイス割り付けテーブルを保存割り付けテーブルとして保存し、動作が開始する場合に前記保存割り付けテーブルを用いて新たなデバイス割り付けテーブルを生成する
ことを特徴とする計算機。
【請求項２】
前記デバイス割り付けテーブルは、前記デバイスの物理アドレス空間と前記デバイスが割り付けられたＯＳとを対応付けて示すデータであり、
前記アクセス管理部は、前記デバイスがいずれのＯＳにも割り付けられていない場合、さらに、前記デバイス割り付けテーブルが示す前記デバイスの物理アドレス空間を前記アクセス元のＯＳの仮想アドレス空間にマッピングする
ことを特徴とする請求項１記載の計算機。
【請求項３】
前記アクセス管理部は、前記デバイスのＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  ｂｕｓ）コンフィグレーションレジスタへのアクセスが発生した場合、前記デバイスが割り付けられているＯＳを前記デバイス割り付けテーブルに基づいて判定し、前記デバイスがアクセス元のＯＳに割り付けられている場合、前記アクセスを許可し、前記デバイスが前記アクセス元のＯＳに割り付けられていない場合、前記アクセスを拒否する
ことを特徴とする請求項２記載の計算機。
【請求項４】
前記アクセス管理部は、前記ＰＣＩコンフィグレーションレジスタへのアクセスがベースアドレスの変更であり、前記デバイスが前記アクセス元のＯＳに割り付けられている場合、変更後のベースアドレスに基づいて前記デバイス割り付けテーブル内の前記デバイスの物理アドレス空間の情報を更新し、更新後の前記情報が示す前記デバイスの物理アドレス空間を前記アクセス元のＯＳの仮想アドレス空間にマッピングする
ことを特徴とする請求項３記載の計算機。
【請求項５】
前記アクセス管理部は、所定の種類のデバイスのＰＣＩコンフィグレーションレジスタへ書き込みのアクセスが発生した場合、前記書き込みのアクセスを拒否し、前記所定の種類のデバイスのＰＣＩコンフィグレーションレジスタへ読み取りのアクセスが発生した場合、前記読み取りのアクセスを許可する
ことを特徴とする請求項４記載の計算機。
【請求項６】
前記アクセス管理部は、前記所定の種類のデバイスのＰＣＩコンフィグレーションレジスタへ書き込みのアクセスが前記複数のＯＳ以外の所定の管理ＯＳから発生した場合、前記書き込みのアクセスを許可する
ことを特徴とする請求項５記載の計算機。
【請求項７】
デバイスにアクセスする複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が動作する計算機によって実行するアクセス管理方法であって、
前記計算機は、前記デバイスを前記複数のＯＳのいずれかのＯＳに先着順で割り付けるためのデバイス割り付けテーブルを記憶するデバイス割り付け記憶部と、アクセス管理部とを備え、
前記アクセス管理部が、前記デバイスへのアクセスが発生した場合、前記デバイスが前記複数のＯＳのいずれのＯＳに割り付けられているか前記デバイス割り付けテーブルに基づいて判定し、前記デバイスがいずれのＯＳにも割り付けられていない場合、前記デバイスをアクセス元のＯＳに割り付けるために前記デバイス割り付けテーブルを更新して前記デバイスへのアクセスを許可し、前記デバイスが前記アクセス元のＯＳ以外のＯＳに割り付けられている場合、前記デバイスへのアクセスを拒否し、
前記アクセス管理部が、動作が終了する場合に前記デバイス割り付けテーブルを保存割り付けテーブルとして保存し、動作が開始する場合に前記保存割り付けテーブルを用いて新たなデバイス割り付けテーブルを生成する
ことを特徴とするアクセス管理方法。
【請求項８】
デバイス割り付けテーブルを用いるアクセス管理プログラムであって、
前記デバイス割り付けテーブルは、デバイスにアクセスする複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のいずれかのＯＳに前記デバイスを先着順で割り付けるためのテーブルであり、
前記デバイスへのアクセスが発生した場合、前記デバイスが前記複数のＯＳのいずれのＯＳに割り付けられているか前記デバイス割り付けテーブルに基づいて判定し、前記デバイスがいずれのＯＳにも割り付けられていない場合、前記デバイスをアクセス元のＯＳに割り付けるために前記デバイス割り付けテーブルを更新して前記デバイスへのアクセスを許可し、前記デバイスが前記アクセス元のＯＳ以外のＯＳに割り付けられている場合、前記デバイスへのアクセスを拒否するアクセス管理処理と、
コンピュータが動作を終了する場合に前記デバイス割り付けテーブルを保存割り付けテーブルとして保存し、動作が開始する場合に前記保存割り付けテーブルを用いて新たなデバイス割り付けテーブルを生成する処理と
をコンピュータに実行させるためのアクセス管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）からデバイスへのアクセスを管理する計算機、アクセス管理方法およびアクセス管理プログラムに関するものである。
【背景技術】
【０００２】
仮想計算機システムは、複数のＯＳを動作させるシステムである。例えば、Ｘｅｎ（登録商標）やＫＶＭ（Ｋｅｒｎｅｌ−ｂａｓｅｄ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）（登録商標）などの仮想計算機システムが存在する。【０００３】
従来の仮想計算機システムは、複数のＯＳそれぞれに対して占有させるＩ／Ｏデバイスを事前に設定してから複数のＯＳを起動する。そして、仮想計算機モニタ（ＶＭＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ）は、各ＯＳから当該ＯＳが占有するＩ／Ｏデバイスのメモリやレジスタへのアクセスを許可し、各ＯＳから他のＯＳが占有するＩ／Ｏデバイスのメモリやレジスタへのアクセスを拒否する。Ｉ／ＯデバイスがＰＣＩデバイス（ＰＣＩ  Ｅｘｐｒｅｓｓデバイスを含む。以下同様）である場合、仮想計算機モニタは、ＰＣＩコンフィグレーションレジスタへのアクセスを許可または拒否する。このようにして、各ＯＳに対するＩ／Ｏデバイスの排他的な割り付けが行われていた。
例えば、ＸｅｎではＯＳに占有させるＩ／Ｏデバイスを設定ファイルに指定する。また、ＫＶＭではＯＳの起動オプションで占有させるＩ／Ｏデバイスを指定する。【０００４】
ＸｅｎやＫＶＭなどの従来の仮想計算機システムは、ＯＳごとに占有させるＩ／Ｏデバイスの事前設定が必要である。このため、多数のＯＳが動作して各ＯＳが多数のＩ／Ｏデバイスを占有する場合、事前設定が煩雑になってしまう。【０００５】
特許文献１は、以下のようにして、Ｉ／Ｏデバイスを占有するＯＳを実行中に切り替える仮想計算機システムを開示している。
特許文献１の仮想計算機システムにおいて、ＶＭＭはＯＳによるＩ／Ｏデバイス占有要求やＶＭＭによるイベント検知を要因としてＯＳにＩ／Ｏデバイスの占有許可を出す。そして、ＯＳはＩ／Ｏデバイスの占有許可が出た場合にのみＩ／Ｏデバイスに対する入出力を行う。このため、Ｉ／ＯデバイスをいずれかのＯＳに占有させるための事前設定が不要である。
しかし、Ｉ／Ｏデバイスのメモリやレジスタの保護は行われないため、Ｉ／Ｏデバイスを占有中でないＯＳから当該Ｉ／Ｏデバイスのメモリやレジスタにアクセスすることが可能である。そのため、あるＯＳが占有中のＩ／Ｏデバイスのメモリやレジスタの内容を他のＯＳが破壊してしまう可能性がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−２２００８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明は、例えば、複数のＯＳからデバイスへのアクセスを正しく管理できるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
本発明の計算機は、デバイスにアクセスする複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が動作する。
前記計算機は、
デバイスとデバイスが割り付けられたＯＳとを対応付けるためのデバイス割り付けテーブルを記憶するデバイス割り付け記憶部と、
前記デバイスへのアクセスが発生した場合、前記デバイスが割り付けられているＯＳを前記デバイス割り付けテーブルに基づいて判定し、前記デバイスがいずれのＯＳにも割り付けられていない場合、前記デバイスとアクセス元のＯＳとを対応付けるために前記デバイス割り付けテーブルを更新して前記デバイスへのアクセスを許可し、前記デバイスが前記アクセス元のＯＳ以外のＯＳに割り付けられている場合、前記デバイスへのアクセスを拒否するアクセス管理部とを備える。
【発明の効果】
【０００９】
本発明によれば、例えば、複数のＯＳからデバイスへのアクセスを正しく管理することができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１における仮想計算機システム１００の構成図。
【図２】実施の形態１における仮想計算機システム１００の動作を示すフローチャート。
【図３】実施の形態１における仮想計算機システム１００のメモリマップを表す図。
【図４】実施の形態１におけるＩ／Ｏ割り付けテーブル２２９の初期状態を示す図。
【図５】実施の形態１におけるＩ／Ｏ割り付けテーブル２２９の初期化処理を示すフローチャート。
【図６】実施の形態１における初期化処理後のＩ／Ｏ割り付けテーブル２２９を示す図。
【図７】実施の形態１におけるＩ／Ｏデバイス１１０の割り付け処理を示すフローチャート。
【図８】実施の形態１におけるＩ／Ｏデバイス１１０ａ・ｂを割り付けた後のＩ／Ｏ割り付けテーブル２２９を示す図。
【図９】実施の形態１におけるＩ／Ｏデバイス１１０ａ・ｂを割り付けた後の仮想メモリマップ３２０ａ・ｂを示す図。
【図１０】実施の形態１におけるＰＣＩコンフィグレーションレジスタへのアクセス処理を示すフローチャート。
【図１１】実施の形態１におけるＢＡＲ変更判定処理（Ｓ５００）を示すフローチャート。
【図１２】実施の形態２におけるＩ／Ｏ割り付けテーブル２２９を示す図。
【図１３】実施の形態２における仮想計算機システム１００のメモリマップを表す図。
【図１４】実施の形態２におけるＩ／Ｏ割り付けテーブル２２９の初期化処理を示すフローチャート。
【図１５】実施の形態２におけるＩ／Ｏデバイス１１０の割り付け処理を示すフローチャート。
【図１６】実施の形態２におけるＰＣＩコンフィグレーションレジスタへのアクセス処理を示すフローチャート。
【図１７】実施の形態３における仮想計算機システム１００の構成図。
【図１８】実施の形態３におけるＩ／Ｏ割り付けテーブル２２９の初期化処理を示すフローチャート。
【発明を実施するための形態】
【００１１】
実施の形態１．
仮想計算機のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）にデバイスを割り付けて仮想計算機のＯＳにデバイスを占有させる仮想計算機システムについて説明する。仮想計算機システムは複数のＯＳが動作するシステムの一例である。
【００１２】
図１は、実施の形態１における仮想計算機システム１００の構成図である。
実施の形態１における仮想計算機システム１００のハードウェア構成および機能構成について、図１に基づいて説明する。
【００１３】
仮想計算機システム１００は、物理計算機２００と、物理計算機２００に接続する複数のＩ／Ｏデバイス１１０ａ−ｃ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔデバイス）とを備える。Ｉ／Ｏデバイス１１０の数は２つまたは４つ以上であっても構わない。
実施の形態において、Ｉ／Ｏデバイス１１０ａ−ｃがＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  ｂｕｓ）をインタフェースとして用いるＰＣＩデバイスであるものとして説明を行う。但し、物理計算機２００に接続するＩ／ＯデバイスはＰＣＩデバイス以外のデバイスであっても構わない。
ＰＣＩデバイスは、ＢＡＲ（ベースアドレスレジスタ）を含んだＰＣＩコンフィグレーションレジスタを記憶する。ＰＣＩコンフィグレーションレジスタのＢＡＲは、ＰＣＩデバイスに割り当てられたメモリ空間またはレジスタ空間（共に記憶領域）のベースアドレス（先頭アドレス）とサイズとを示す。
ディスプレイ装置、キーボード、マウス、プリンタ、通信ボード、外部記憶装置などは、Ｉ／Ｏデバイス１１０の一例である。
【００１４】
物理計算機２００（計算機、コンピュータの一例）は、プロセッサ２１１ａ・ｂ、メインメモリ２１２、補助記憶装置２１３および割込みコントローラ２１４などのハードウェア２１０を備えるコンピュータである。
プロセッサ２１１ａ・ｂは物理計算機２００を制御する処理装置であり、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）はプロセッサ２１１ａ・ｂの一例である。プロセッサ２１１の数は１つまたは３つ以上であっても構わない。
メインメモリ２１２は一次記憶装置とも呼ばれる記憶装置であり、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）やＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）はメインメモリ２１２の一例である。
補助記憶装置２１３は二次記憶装置とも呼ばれる記憶装置であり、磁気ディスク装置やフラッシュメモリは補助記憶装置２１３の一例である。
割込みコントローラ２１４はＩ／Ｏデバイス１１０ａ−ｃからの割り込みを制御する装置である。例えば、割込みコントローラ２１４はＩ／Ｏデバイス１１０ａ−ｃからの割り込みをプロセッサ２１１ａ・ｂに通知する。
【００１５】
物理計算機２００は、さらに、ハードウェア２１０を用いて動作するＶＭＭ部２２０および複数のＶＭ部２３０ａ・ｂを備える。ＶＭ部２３０の数は３つ以上であっても構わない。
【００１６】
ＶＭ部２３０ａは、ＯＳ２３１ａ、デバイスドライバ２３２ａおよびＰＣＩドライバ２３３ａを実行し、仮想計算機（ＶＭ）として動作する。同様に、ＶＭ部２３０ｂは、ＯＳ２３１ｂ、デバイスドライバ２３２ｂおよびＰＣＩドライバ２３３ｂを実行し、仮想計算機として動作する。仮想計算機は後述する仮想計算機モニタ（ＶＭＭ）によって仮想的に構築される計算機である。ＶＭ部２３０ａはプロセッサ２１１ａを用いて動作し、ＶＭ部２３０ｂはプロセッサ２１１ｂを用いて動作するものとする。
ＯＳ２３１ａ・ｂは、仮想計算機のＯＳ（または仮想計算機のＯＳを実行する実行部）である。ＯＳ２３１ａ・ｂは仮想アドレス空間をサポートしない。また、ＯＳ２３１ａ・ｂはシングルプロセッサまたはマルチプロセッサで動作する。実施の形態ではシングルプロセッサで動作するＯＳ２３１ａ・ｂを例にして説明する。但し、ＯＳ２３１ａ・ｂはマルチプロセッサで動作するＯＳであっても構わない。また、ＯＳ２３１ａ・ｂは、メモリ管理部２２４によって構築される仮想アドレス空間を物理アドレス空間として認識して動作する。
デバイスドライバ２３２ａ・ｂは、Ｉ／Ｏデバイス１１０ａ−ｃのメモリやレジスタにアクセスしてＩ／Ｏデバイス１１０ａ−ｃを個別に制御するためのソフトウェア（またはソフトウェアを実行する実行部）である。アクセスとは、主に、データの読み取りまたはデータの書き込みを意味する（以下同様）。
ＰＣＩドライバ２３３ａ・ｂは、Ｉ／Ｏデバイス１１０ａ−ｃのＰＣＩコンフィグレーションレジスタにアクセスするためのソフトウェア（またはソフトウェアを実行する実行部）である。
【００１７】
ＶＭＭ部２２０（デバイス割り付け記憶部、アクセス管理部の一例）は、仮想計算機モニタ（ＶＭＭ）を実行して複数の仮想計算機（ＶＭ部２３０ａ・ｂ）を制御する。仮想計算機モニタはハードウェア資源（例えば、プロセッサ２１１、メインメモリ２１２の記憶領域）を各仮想計算機に割り当てて複数の仮想計算機を構築するためのソフトウェアである。
ＶＭＭ部２２０は、ＰＣＩエミュレーション部２２１と、Ｉ／Ｏエミュレーション部２２２と、Ｉ／Ｏ割り付け部２２３と、メモリ管理部２２４と、制御部２２８とを備える。
【００１８】
ＰＣＩエミュレーション部２２１は、ＰＣＩドライバ２３３ａ・ｂからＰＣＩコンフィグレーションレジスタへのアクセスをエミュレーションする。つまり、ＰＣＩエミュレーション部２２１は、ＰＣＩコンフィグレーションレジスタへのアクセスを横取りし、ＰＣＩドライバ２３３ａ・ｂの代わりにＰＣＩコンフィグレーションレジスタにアクセスする。
【００１９】
Ｉ／Ｏエミュレーション部２２２は、デバイスドライバ２３２ａ・ｂからＩ／Ｏデバイスのメモリやレジスタへのアクセスをエミュレーションする。つまり、Ｉ／Ｏエミュレーション部２２２は、Ｉ／Ｏデバイスのメモリやレジスタへのアクセスを横取りし、デバイスドライバ２３２ａ・ｂの代わりにＩ／Ｏデバイスのメモリやレジスタにアクセスする。
【００２０】
Ｉ／Ｏ割り付け部２２３は、後述するＩ／Ｏ割り付けテーブル２２９を参照し、アクセスが発生したＩ／Ｏデバイス１１０に割り付けられているＯＳ２３１を判定し、Ｉ／Ｏ割り付けテーブル２２９を更新する。
【００２１】
メモリ管理部２２４は、ＶＭ部２３０ａ・ｂ（ＯＳ２３１ａ・ｂ）用の仮想アドレス空間を定義する。例えば、メモリ管理部２２４は、仮想アドレス空間内の記憶領域を示す仮想アドレスと物理アドレス空間内の記憶領域を示す物理アドレスとを対応付けるマッピングテーブルを生成する。つまり、メモリ管理部２２４は仮想アドレス空間と物理アドレス空間とをマッピングテーブルを用いてマッピングする。マッピングとは、主に、仮想アドレス空間の仮想アドレスと物理アドレス空間の物理アドレスとを対応付けることを意味する（以下同様）。
【００２２】
制御部２２８は、ＶＭ部２３０ａ・ｂの制御や後述するＩ／Ｏ割り付けテーブル２２９の初期化を行う。
【００２３】
図２は、実施の形態１における仮想計算機システム１００の動作を示すフローチャートである。
実施の形態１における仮想計算機システム１００の動作について、図２に基づいて説明する。
【００２４】
Ｓ１１０において、物理計算機２００が起動する。物理計算機２００が起動する場合、物理計算機２００の起動処理部（図示省略）はＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）やブートローダなどの所定のソフトウェアを実行する（物理計算機２００の起動処理）。
例えば、物理計算機２００の起動処理において、物理アドレス空間の初期設定やＰＣＩコンフィグレーションレジスタの初期設定が行われる。
【００２５】
図３は、実施の形態１における仮想計算機システム１００のメモリマップを表す図である。
実施の形態１における仮想計算機システム１００のメモリマップについて、図３に基づいて説明する。
【００２６】
物理メモリマップ３１０のデータは、プロセッサ２１１やメインメモリ２１２によって記憶管理される。
物理アドレス空間には、ＶＭ用メモリ空間３１１、Ｉ／Ｏ用メモリ空間３１２、Ｉ／Ｏ用レジスタ空間３１３などが確保される。ＶＭ用メモリ空間３１１は、ＶＭＭやＯＳ２３１用に割り当てる記憶領域である。Ｉ／Ｏ用メモリ空間３１２は、Ｉ／Ｏデバイス１１０ａ−ｃのメモリ用に割り当てる記憶領域である。Ｉ／Ｏ用レジスタ空間３１３は、Ｉ／Ｏデバイス１１０ａ−ｃのレジスタ用に割り当てる記憶領域である。
【００２７】
物理計算機２００の起動処理（図２のＳ１１０）において、以下のような物理アドレス空間の初期設定が行われる。
物理アドレス空間にＶＭ用メモリ空間３１１、Ｉ／Ｏ用メモリ空間３１２、Ｉ／Ｏ用レジスタ空間３１３などが確保される。
ＶＭ用メモリ空間３１１にＶＭＭ部２２０用の記憶領域が確保され、ＶＭＭ部２２０用の記憶領域にＶＭＭのプログラムやデータが補助記憶装置２１３からロード（読み込み）される。後述するＩ／Ｏ割り付けテーブル２２９はＶＭＭ部２２０用の記憶領域にロードされるデータの一例である。
Ｉ／Ｏ用メモリ空間３１２にＩ／Ｏデバイス１１０ａ−ｃそれぞれのメモリ空間が確保される。Ｉ／Ｏデバイス１１０ａ−ｃのメモリ空間にアクセスすることにより、Ｉ／Ｏデバイス１１０ａ−ｃのメモリにアクセスすることができる。
Ｉ／Ｏ用レジスタ空間３１３にＩ／Ｏデバイス１１０ａ−ｃそれぞれのレジスタ空間が確保される（図３ではＩ／Ｏデバイス１１０ｂのレジスタ空間のみを示す）。Ｉ／Ｏデバイス１１０ａ−ｃのレジスタ空間にアクセスすることにより、Ｉ／Ｏデバイス１１０ａ−ｃのレジスタにアクセスすることができる。
【００２８】
仮想メモリマップ３２０ａはＯＳ２３１ａ用の仮想アドレス空間の用途を表す図またはデータであり、仮想メモリマップ３２０ｂはＯＳ２３１ｂ用の仮想アドレス空間の用途を表す図またはデータである。仮想メモリマップ３２０ａ・ｂのデータはＶＭＭ部２２０のメモリ管理部２２４によって記憶管理される。ＯＳ２３１ａ・ｂ用の仮想アドレス空間については後述する。
【００２９】
図４は、実施の形態１におけるＩ／Ｏ割り付けテーブル２２９の初期状態を示す図である。
実施の形態１におけるＩ／Ｏ割り付けテーブル２２９について、図４に基づいて説明する。
【００３０】
Ｉ／Ｏ割り付けテーブル２２９（デバイス割り付けテーブルの一例）は、Ｉ／Ｏデバイス１１０（のメモリやレジスタ）とＩ／Ｏデバイス１１０が割り当てられたＯＳ２３１とを対応付けるためのデータである。
Ｉ／Ｏ割り付けテーブル２２９は、「デバイス識別子」と「割り付け先」と「領域（０から５）」とを含む。「領域ｎ（ｎは０から５）」が示す記憶領域はＰＣＩコンフィグレーションレジスタのＢＡＲｎが示す記憶領域に対応している。１つの「領域ｎ」を用いて３２ビットの記憶領域を表す代わりに、ＰＣＩコンフィグレーションレジスタのＢＡＲと同様に２つの「領域ｎ」を用いて６４ビットの記憶領域を表しても構わない。
【００３１】
「領域（０から５）」は「ベースアドレス」「サイズ」「属性」を含む。初期状態ではいずれの項目も設定されていない。また、「領域（０から５）」にその他の情報（例えば、プリフェッチ可否フラグ）を含めてもよい。
【００３２】
後に設定される各項目は、以下のように機能する。
「デバイス識別子」は、Ｉ／Ｏデバイス１１０の識別子を示す。例えば、ＰＣＩデバイスの場合、ドメイン番号、バス番号、デバイス番号、ファンクション番号の組をデバイス識別子として使用する。
「割り付け先」は、Ｉ／Ｏデバイス１１０が割り付けられたＯＳ２３１の識別子を示す。「割り付け先」に設定される「ＮＵＬＬ」はＩ／Ｏデバイス１１０がいずれのＯＳ２３１にも割り付けられていないことを意味する。
「ベースアドレス」は、Ｉ／Ｏデバイス１１０用に割り当てられた記憶領域の先頭の物理アドレスを示す。「領域ｎ（ｎは０から５）」の「ベースアドレス」にはＰＣＩコンフィグレーションレジスタのＢＡＲｎが示すベースアドレスが設定される。
「サイズ」は、割り当てられた記憶領域の大きさを示す。「領域ｎ」の「サイズ」にはＰＣＩコンフィグレーションレジスタのＢＡＲｎが示すサイズが設定される。
「属性」は、割り当てられた記憶領域の用途を示す。「属性」に設定される「メモリ」は割り当てられた記憶領域がメモリ空間であることを意味し、「属性」に設定される「レジスタ」は割り当てられた記憶領域がレジスタ空間であることを意味する。
【００３３】
図２に戻り、仮想計算機システム１００の動作について説明を続ける。
【００３４】
Ｓ１２０において、ＶＭＭ部２２０が起動する。ＶＭＭ部２２０が起動した場合、ＶＭＭ部２２０の制御部２２８は、Ｉ／Ｏ割り付けテーブル２２９（図４参照）の初期化処理を実行する。Ｉ／Ｏ割り付けテーブル２２９の初期化処理については後述する。
さらに、ＶＭＭ部２２０の制御部２２８は、ＶＭ用メモリ空間３１１（図３参照）にＯＳ２３１ａ・ｂ用の記憶領域を確保し、ＯＳ２３１ａ・ｂ用の記憶領域にＶＭのプログラムやデータを補助記憶装置２１３からロード（読み込み）する。ＯＳ２３１ａ・ｂ、デバイスドライバ２３２ａ・ｂおよびＰＣＩドライバ２３３ａ・ｂは、ＯＳ２３１ａ・ｂ用の記憶領域にロードされるプログラムの一例である。ＯＳ２３１ａ・ｂ用の記憶領域の確保およびＶＭのプログラムやデータのロードは物理計算機２００の起動処理（Ｓ１１０）で実行してもよい。
また、ＶＭＭ部２２０のメモリ管理部２２４は、ＯＳ２３１ａ・ｂ用の仮想アドレス空間を定義し、仮想アドレス空間にＯＳ２３１ａ・ｂ用の記憶領域をマッピングする（図３の仮想メモリマップ３２０ａ・ｂ参照）。このとき、メモリ管理部２２４は、物理アドレス空間の物理アドレスと仮想アドレス空間の仮想アドレスとを対応付けるマッピングテーブルを生成する。
そして、ＶＭＭ部２２０の制御部２２８はＶＭ部２３０ａ・ｂを起動する。
【００３５】
Ｓ１３０において、ＶＭ部２３０ａ・ｂが動作を開始する。ＶＭ部２３０ａ・ｂが動作を開始した場合、Ｉ／Ｏデバイス１１０ａ−ｃのメモリやレジスタへのアクセスおよびＰＣＩコンフィグレーションレジスタへのアクセスが発生する。アクセスが発生した場合の処理については後述する。
【００３６】
図２のフローチャートに示すような仮想計算機システム１００の動作によって、物理計算機２００でＶＭ部２３０ａ・ｂが稼働する。
【００３７】
図５は、実施の形態１におけるＩ／Ｏ割り付けテーブル２２９の初期化処理を示すフローチャートである。
実施の形態１におけるＩ／Ｏ割り付けテーブル２２９の初期化処理について、図５に基づいて説明する。
【００３８】
ＶＭＭ部２２０の制御部２２８は、物理計算機２００で使用されるＩ／Ｏデバイス１１０別にＳ２１０からＳ２３０の処理を実行する。つまり、制御部２２８は、Ｉ／Ｏデバイス１１０ａ−ｃそれぞれについてＳ２１０からＳ２３０の処理を実行する。
【００３９】
Ｓ２１０において、制御部２２８は、Ｉ／Ｏデバイス１１０のメモリ空間およびレジスタ空間がページ境界に整列しているか否かを判定する。
このとき、制御部２２８は、Ｉ／Ｏデバイス１１０のＰＣＩコンフィグレーションレジスタ内の各ＢＡＲを参照する。各ＢＡＲにはＩ／Ｏデバイス１１０のメモリ空間またはレジスタ空間のベースアドレスおよびサイズが設定されている。制御部２２８は、各ＢＡＲに設定されているベースアドレスがページ境界のアドレス（ページサイズ（例えば、４Ｋバイト）単位のアドレス）であるか否かを判定する。各ＢＡＲに設定されているベースアドレスがページ境界のアドレスである場合、Ｉ／Ｏデバイス１１０のメモリ空間およびレジスタ空間はページ境界に整列している。
Ｉ／Ｏデバイス１１０のメモリ空間およびレジスタ空間がページ境界に整列している場合（ＹＥＳ）、処理はＳ２３０に進む。
Ｉ／Ｏデバイス１１０のメモリ空間およびレジスタ空間がページ境界に整列していない場合（ＮＯ）、処理はＳ２２０に進む。
【００４０】
Ｓ２２０において、制御部２２８は、ページ境界のアドレスでないベースアドレスが設定されているＢＡＲに当該ベースアドレスの前後いずれかのページ境界のアドレスを設定する。
これにより、Ｉ／Ｏデバイス１１０のメモリ空間およびレジスタ空間をページ境界に整列させることができる。
Ｓ２２０の後、処理はＳ２３０に進む。
【００４１】
Ｓ２３０において、制御部２２８は、Ｉ／Ｏデバイス１１０のＰＣＩコンフィグレーションレジスタの設定値を用いてＩ／Ｏ割り付けテーブル２２９にＩ／Ｏデバイス１１０の「デバイス識別子」「ベースアドレス」「サイズ」「属性」を設定する。また、制御部２２８は、Ｉ／Ｏ割り付けテーブル２２９の「割り付け先」には「ＮＵＬＬ（割り付けられているＯＳ２３１が無い）」を設定する。
【００４２】
図６は、実施の形態１における初期化処理後のＩ／Ｏ割り付けテーブル２２９を示す図である。初期化処理後のＩ／Ｏ割り付けテーブル２２９の一例を図６に示す。
【００４３】
図７は、実施の形態１におけるＩ／Ｏデバイス１１０の割り付け処理を示すフローチャートである。
実施の形態１におけるＩ／Ｏデバイス１１０の割り付け処理について、図７に基づいて説明する。
【００４４】
いずれのＯＳ２３１ａ・ｂにも割り付けられていないＩ／Ｏデバイス１１０のメモリ空間またはレジスタ空間にアクセスが発生した場合、以下のようにＩ／Ｏデバイス１１０の割り付け処理が実行される。
以下、ＯＳ２３１ａからＩ／Ｏデバイス１１０ａのメモリ空間にアクセスが発生した場合について説明する。但し、ＯＳ２３１ａからＩ／Ｏデバイス１１０ａのレジスタ空間にアクセスが発生した場合、およびＯＳ２３１ａからＩ／Ｏデバイス１１０ｂまたはｃのメモリ空間またはレジスタ空間にアクセスが発生した場合も処理内容は以下と同様である。さらに、ＯＳ２３１ｂからＩ／Ｏデバイス１１０ａ−ｃのいずれかのメモリ空間またはレジスタ空間にアクセスが発生した場合も処理内容は以下と同様である。
【００４５】
Ｓ３１０において、ＯＳ２３１ａのデバイスドライバ２３２ａは、Ｉ／Ｏデバイス１１０ａのメモリ空間にアクセスする。例えば、デバイスドライバ２３２ａは、Ｉ／Ｏデバイス１１０ａのメモリ空間の物理アドレスを指定してアクセス命令をプロセッサ２１１ａに出力する。
Ｓ３１０の後、処理はＳ３２０に進む。
【００４６】
Ｓ３２０において、プロセッサ２１１ａは、ＶＭＭ部２２０の起動時にメモリ管理部２２４によって生成されたマッピングテーブルを参照する。このとき、Ｉ／Ｏデバイス１１０ａのメモリ空間の物理アドレスに対応する仮想アドレスはマッピングテーブルに設定（マッピング）されていない。そのため、プロセッサ２１１ａは、ページフォルト例外（またはＴＬＢミス例外。以下同様）を発生させてＶＭＭ部２２０を呼び出す。ページフォルト例外の情報（データ）には、アクセス先の物理アドレスが含まれる。
例えば、ページフォルト例外の発生時のＶＭＭ部２２０の呼び出しをＯＳ２３１ａ・ｂの例外ハンドラに設定しておいてもよい。または、物理計算機２００の仮想化支援機能の一部である例外横取り機能を用いてＶＭＭ部２２０を呼び出してもよい。または、ＯＳ２３１ａ・ｂを非特権モードで動作させ、ページフォルト例外（特権違反の一例）の発生時のＶＭＭ部２２０の呼び出しをＯＳ２３１ａ・ｂの例外ベクタに設定しておいてもよい。
Ｓ３２０の後、処理はＳ３３０に進む。
【００４７】
Ｓ３３０において、ＶＭＭ部２２０のＩ／Ｏ割り付け部２２３は、Ｉ／Ｏ割り付けテーブル２２９を参照し、ページフォルト例外の原因がＩ／Ｏデバイス１１０ａのメモリ空間またはレジスタ空間へのアクセスであるか否かを判定する。
このとき、Ｉ／Ｏ割り付け部２２３は、Ｉ／Ｏ割り付けテーブル２２９に登録された各Ｉ／Ｏデバイスの各「領域（０から５）」にアクセス先の物理アドレスが含まれるか否かを判定する。アクセス先の物理アドレスがいずれかのＩ／Ｏデバイスの「領域（０から５）」に含まれる場合、ページフォルト例外の原因は該Ｉ／Ｏデバイス１１０のメモリ空間またはレジスタ空間へのアクセスである。
ページフォルト例外の原因がＩ／Ｏデバイス１１０ａのメモリ空間またはレジスタ空間へのアクセスである場合（ＹＥＳ）、処理はＳ３３１に進む。
ページフォルト例外の原因がＩ／Ｏデバイス１１０ａのメモリ空間またはレジスタ空間へのアクセスでない場合（ＮＯ）、処理はＳ３５０に進む。
【００４８】
Ｓ３３１において、ＶＭＭ部２２０のＩ／Ｏ割り付け部２２３は、Ｉ／Ｏ割り付けテーブル２２９を参照し、アクセス先のＩ／Ｏデバイス１１０ａが他のＯＳ２３１ｂに占有されているか否かを判定する。
このとき、Ｉ／Ｏ割り付け部２２３は、Ｉ／Ｏ割り付けテーブル２２９でアクセス先（Ｉ／Ｏデバイス１１０ａ）の「デバイス識別子」に対応付けられた「割り付け先」に他のＯＳ２３１ｂの識別子が設定されているか否かを判定する。「割り付け先」に他のＯＳ２３１ｂの識別子が設定されている場合、アクセス先のＩ／Ｏデバイス１１０ａは他のＯＳ２３１ｂに占有されている。
アクセス先のＩ／Ｏデバイス１１０ａが他のＯＳ２３１ｂに占有されている場合（ＹＥＳ）、処理はＳ３５０に進む。
アクセス先のＩ／Ｏデバイス１１０ａが他のＯＳ２３１ｂに占有されていない場合（ＮＯ）、処理はＳ３４０に進む。
【００４９】
Ｓ３４０において、ＶＭＭ部２２０のＩ／Ｏ割り付け部２２３は、Ｉ／Ｏ割り付けテーブル２２９の設定を行う。このとき、Ｉ／Ｏ割り付け部２２３は、アクセス先（Ｉ／Ｏデバイス１１０ａ）の「デバイス識別子」に対応付けられた「割り付け先」にアクセス元（ＯＳ２３１ａ）の識別子を設定する。
Ｓ３４０の後、処理はＳ３４１に進む。
【００５０】
Ｓ３４１において、ＶＭＭ部２２０のメモリ管理部２２４は、Ｉ／Ｏ割り付けテーブル２２９を参照し、アクセス先（Ｉ／Ｏデバイス１１０ａ）の「デバイス識別子」に対応付けられた「領域（０から５）」が示す全てのメモリ空間およびレジスタ空間をアクセス元のＯＳ２３１ａの仮想アドレス空間にマッピングする。つまり、メモリ管理部２２４は、当該「領域（０から５）」の物理アドレスとＯＳ２３１ａの仮想アドレス空間の仮想アドレスとを対応付けてマッピングテーブルに設定する。
Ｓ３４１の後、処理はＳ３４２に進む。
【００５１】
Ｓ３４２において、ＶＭＭ部２２０のＩ／Ｏエミュレーション部２２２は、Ｉ／Ｏデバイス１１０ａのメモリ空間へのアクセスをエミュレーションする。つまり、Ｉ／Ｏエミュレーション部２２２は、ＯＳ２３１ａのデバイスドライバ２３２ａの代わりにＩ／Ｏデバイス１１０ａのメモリ空間にアクセスする。例えば、Ｉ／Ｏエミュレーション部２２２がアクセス命令をプロセッサ２１１ａに出力し、プロセッサ２１１ａがＩ／Ｏデバイス１１０ａのメモリ空間にアクセスする。
Ｓ３４２の後、処理はＳ３６０に進む。
【００５２】
Ｓ３５０において、ＶＭＭ部２２０の制御部２２８は、ページフォルト例外用の所定の異常処理を実行する。例えば、制御部２２８は、ＯＳ２３１ａにエラー通知を行い、またはページフォルト例外をエミュレーションして実行する。
Ｓ３５０の後、処理はＳ３６０に進む。
【００５３】
Ｓ３６０において、ＶＭＭ部２２０の制御部２２８はＯＳ２３１ａに制御を戻す。
Ｓ３６０により、Ｉ／Ｏデバイス１１０の割り付け処理は終了する。
【００５４】
ＯＳ２３１ａにＩ／Ｏデバイス１１０ａが割り付けられ、Ｉ／Ｏデバイス１１０ａのメモリ空間とＯＳ２３１ａの仮想アドレス空間とがマッピングされた場合、プロセッサ２１１ａはＯＳ２３１ａからＩ／Ｏデバイス１１０ａのメモリ空間へアクセスが発生してもページフォルト例外を発生させず、アクセス命令に従ってＩ／Ｏデバイス１１０ａのメモリ空間にアクセスする。この場合、ＶＭＭ部２２０はＩ／Ｏデバイス１１０ａのメモリ空間へのアクセスをエミュレートしない。
【００５５】
図８は、実施の形態１におけるＩ／Ｏデバイス１１０ａ・ｂを割り付けた後のＩ／Ｏ割り付けテーブル２２９を示す図である。
Ｉ／Ｏデバイス１１０ａのメモリにアクセスしたＯＳ２３１ａにＩ／Ｏデバイス１１０ａを割り付け、Ｉ／Ｏデバイス１１０ｂのメモリまたはレジスタにアクセスしたＯＳ２３１ｂにＩ／Ｏデバイス１１０ｂを割り付けた場合のＩ／Ｏ割り付けテーブル２２９を図８に示す。
【００５６】
図９は、実施の形態１におけるＩ／Ｏデバイス１１０ａ・ｂを割り付けた後の仮想メモリマップ３２０ａ・ｂを示す図である。
Ｉ／Ｏデバイス１１０ａのメモリ空間をＯＳ２３１ａの仮想アドレス空間にマッピングした場合の仮想メモリマップ３２０ａと、Ｉ／Ｏデバイス１１０ｂのメモリ空間とレジスタ空間とをＯＳ２３１ｂの仮想アドレス空間にマッピングした場合の仮想メモリマップ３２０ｂとを図９に示す。
【００５７】
図１０は、実施の形態１におけるＰＣＩコンフィグレーションレジスタへのアクセス処理を示すフローチャートである。
ＯＳ２３１ａのＰＣＩドライバ２３３ａがＩ／Ｏデバイス１１０ａのＰＣＩコンフィグレーションレジスタにアクセスした場合の処理について、図１０に基づいて説明する。但し、ＯＳ２３１ａのＰＣＩドライバ２３３ａがＩ／Ｏデバイス１１０ｂ・ｃのＰＣＩコンフィグレーションレジスタにアクセスした場合も処理内容は以下と同様である。さらに、ＯＳ２３１ｂのＰＣＩドライバ２３３ｂがＩ／Ｏデバイス１１０ａ−ｃのＰＣＩコンフィグレーションレジスタにアクセスした場合も処理内容は以下と同様である。
【００５８】
Ｓ４１０において、ＯＳ２３１ａのＰＣＩドライバ２３３ａがＩ／Ｏデバイス１１０ａのＰＣＩコンフィグレーションレジスタにアクセスする。例えば、ＰＣＩドライバ２３３ａは、Ｉ／Ｏデバイス１１０ａのＰＣＩコンフィグレーションレジスタ内のアドレスやレジスタ番号を指定してアクセス命令をプロセッサ２１１ａに出力する。
Ｓ４１０の後、処理はＳ４２０に進む。
【００５９】
Ｓ４２０において、ＶＭＭ部２２０は、Ｉ／Ｏデバイス１１０ａのＰＣＩコンフィグレーションレジスタへのアクセスを横取りする。
例えば、ＰＣＩコンフィグレーション空間へのアクセス用のレジスタ（ＣＯＮＦＩＧ＿ＡＤＤＲレジスタおよびＣＯＮＦＩＧ＿ＤＡＴＡレジスタ）が配置されているページをＯＳ２３１ａ・ｂからアクセスできないページとしてプロセッサ２１１ａ・ｂに設定しておく。そして、ＯＳ２３１ａ・ｂから当該ページへのアクセス（ＰＣＩコンフィグレーションレジスタへのアクセス）が発生した場合、プロセッサ２１１ａ・ｂはページフォルト例外（またはＴＬＢミス例外。以下同様）を発生してＶＭＭ部２２０を呼び出す。また、ＯＳ２３１ａ・ｂが、ＰＣＩコンフィグレーション空間へのアクセス用のレジスタにアクセスするために、ＶＭＭ部２２０を呼び出してもよい。また、ＰＣＩコンフィグレーション空間へのアクセス用のレジスタがメモリ空間ではなくＩ／Ｏアドレス空間にマップされる場合、Ｉ／Ｏアドレス空間の保護機能によってＶＭＭ部２２０を呼び出すようにしてもよい。
Ｓ４２０の後、処理はＳ４３０に進む。
【００６０】
Ｓ４３０において、ＶＭＭ部２２０のＰＣＩエミュレーション部２２１は、Ｉ／Ｏ割り付けテーブル２２９を参照し、アクセス先のＩ／Ｏデバイス１１０ａ（ＰＣＩデバイス）がアクセス元のＯＳ２３１ａに割り付けられているか否かを判定する。アクセス先（Ｉ／Ｏデバイス１１０ａ）の「デバイス識別子」に対応付けられた「割り付け先」にアクセス元（ＯＳ２３１ａ）の識別子が設定されている場合、アクセス先のＩ／Ｏデバイス１１０ａはアクセス元のＯＳ２３１ａに割り付けられている。
アクセス先のＩ／Ｏデバイス１１０ａがアクセス元のＯＳ２３１ａに割り付けられている場合（ＹＥＳ）、処理はＳ４４０に進む。
アクセス先のＩ／Ｏデバイス１１０ａがアクセス元のＯＳ２３１ａに割り付けられていない場合（ＮＯ）、処理はＳ４５０に進む。
【００６１】
Ｓ４４０において、ＶＭＭ部２２０のＰＣＩエミュレーション部２２１は、アクセス内容がＰＣＩコンフィグレーションレジスタのＢＡＲの変更を含むか否かを判定する。
アクセス内容がＰＣＩコンフィグレーションレジスタのＢＡＲの変更を含む場合（ＹＥＳ）、処理はＢＡＲ変更判定処理（Ｓ５００）に進み、その後、Ｓ４４１に進む。ＢＡＲ変更判定処理（Ｓ５００）については別途説明する。
アクセス内容がＰＣＩコンフィグレーションレジスタのＢＡＲの変更を含まない場合（ＮＯ）、処理はＳ４４２に進む。
【００６２】
Ｓ４４１において、ＢＡＲ変更判定処理（Ｓ５００）の処理結果が「ＯＫ」である場合、処理はＳ４４２に進む。また、ＢＡＲ変更判定処理（Ｓ５００）の処理結果が「ＮＧ」である場合、処理はＳ４５０に進む。
【００６３】
Ｓ４４２において、ＶＭＭ部２２０のＰＣＩエミュレーション部２２１は、ＰＣＩコンフィグレーションレジスタへのアクセスをエミュレーションする。このとき、ＰＣＩエミュレーション部２２１は、ＰＣＩドライバ２３３ａの代わりにＰＣＩコンフィグレーションレジスタにアクセスする。例えば、ＰＣＩエミュレーション部２２１がアクセス命令をプロセッサ２１１ａに出力し、プロセッサ２１１ａがＰＣＩコンフィグレーションレジスタにアクセスする。
Ｓ４４２の後、処理はＳ４６０に進む。
【００６４】
Ｓ４５０において、ＶＭＭ部２２０のＰＣＩエミュレーション部２２１は、ＰＣＩコンフィグレーションレジスタへのアクセス時の所定の異常処理を実行する。例えば、ＰＣＩエミュレーション部２２１は、ＯＳ２３１ａにエラー通知を行う。
Ｓ４５０の後、処理はＳ４６０に進む。
【００６５】
Ｓ４６０において、ＶＭＭ部２２０のＰＣＩエミュレーション部２２１はＯＳ２３１ａに制御を戻す。
Ｓ４６０により、ＰＣＩコンフィグレーションレジスタへのアクセス処理は終了する。
【００６６】
図１１は、実施の形態１におけるＢＡＲ変更判定処理（Ｓ５００）を示すフローチャートである。
ＰＣＩコンフィグレーションレジスタへのアクセス処理（図１０参照）に含まれるＢＡＲ変更判定処理（Ｓ５００）について、図１１に基づいて説明する。
【００６７】
Ｓ５１０において、ＶＭＭ部２２０のＰＣＩエミュレーション部２２１は、変更後のＢＡＲが示す記憶領域が正しい記憶領域であるか否かを判定する。例えば、ＰＣＩエミュレーション部２２１は、変更後のＢＡＲのベースアドレスがページ境界のアドレスと一致する場合に変更後のＢＡＲが示す記憶領域が正しい記憶領域であると判定する。さらに、ＰＣＩエミュレーション部２２１は、変更後のＢＡＲが示す記憶領域がＩ／Ｏ用メモリ空間３１２やＩ／Ｏ用レジスタ空間３１３に収まることを判定する。
変更後のＢＡＲが示す記憶領域が正しい記憶領域である場合（ＹＥＳ）、処理はＳ５１１に進む。
変更後のＢＡＲが示す記憶領域が正しい記憶領域でない場合（ＮＯ）、ＢＡＲ変更判定処理（Ｓ５００）の処理結果は「ＮＧ」である（Ｓ５３０）。
【００６８】
Ｓ５１１において、ＶＭＭ部２２０のＰＣＩエミュレーション部２２１は、Ｉ／Ｏ割り付けテーブル２２９を参照し、変更後のＢＡＲが示す記憶領域が他のＯＳ２３１ｂに占有されているか否かを判定する。
このとき、ＰＣＩエミュレーション部２２１は、アクセス元以外のＯＳ２３１ｂの識別子が設定されている「割り付け先」に対応付けられた「領域（０から５）」に変更後のＢＡＲが示す記憶領域の一部または全部が含まれているか否かを判定する。
変更後のＢＡＲが示す記憶領域が他のＯＳ２３１ｂに占有されている場合（ＹＥＳ）、ＢＡＲ変更判定処理（Ｓ５００）の処理結果は「ＮＧ」である（Ｓ５３０）。
変更後のＢＡＲが示す記憶領域が他のＯＳ２３１ｂに占有されていない場合（ＮＯ）、処理はＳ５２０に進む。
【００６９】
Ｓ５２０において、ＶＭＭ部２２０のＰＣＩエミュレーション部２２１は、Ｉ／Ｏ割り付けテーブル２２９のアクセス先（Ｉ／Ｏデバイス１１０ａ）の「デバイス識別子」に対応付けられた「領域（０から５）」のうち、変更したＢＡＲに対応する「領域（０から５のいずれか）」の「ベースアドレス」および「サイズ」を変更する。
Ｓ５２０の後、処理はＳ５２１に進む。
【００７０】
Ｓ５２１において、ＶＭＭ部２２０のメモリ管理部２２４は、ＢＡＲの変更に応じてＩ／Ｏデバイス１１０ａのマッピングテーブルを変更する。つまり、メモリ管理部２２４は、変更前のＢＡＲが示す記憶領域をＩ／Ｏデバイス１１０ａの仮想アドレス空間からアンマップし、変更後のＢＡＲが示す記憶領域をＩ／Ｏデバイス１１０ａの仮想アドレス空間にマッピングする。
ＢＡＲ変更判定処理（Ｓ５００）の処理結果は「ＯＫ」である（Ｓ５２２）。
【００７１】
ここで、実施の形態における仮想計算機システム１００のハードウェアについて補足する。
プロセッサ２１１ａ・ｂは、バス（図示省略）を介してメインメモリ２１２、補助記憶装置２１３、割込みコントローラ２１４、Ｉ／Ｏデバイス１１０ａ−ｃおよびその他のハードウェアと接続され、これらのハードウェアを制御する。
【００７２】
メインメモリ２１２または補助記憶装置２１３には、プログラム群やファイル群が記憶されている（図示省略）。
プログラム群には、実施の形態において「〜部」として説明した機能を実行するプログラムが含まれる。プログラム（例えば、アクセス制御プログラム、仮想計算機プログラム）は、プロセッサ２１１により読み出され実行される。すなわち、プログラムは、「〜部」としてコンピュータを機能させるものであり、また「〜部」の手順や方法をコンピュータに実行させるものである。
ファイル群には、実施の形態において説明する「〜部」で使用される各種データ（入力、出力、判定結果、計算結果、処理結果など）が含まれる。
【００７３】
実施の形態において構成図およびフローチャートに含まれている矢印は主としてデータや信号の入出力を示す。
フローチャートなどに基づいて説明する処理はハードウェア２１０（例えば、プロセッサ２１１）を用いて実行される。
【００７４】
実施の形態において「〜部」として説明するものは「〜回路」、「〜装置」、「〜機器」であってもよく、また「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ファームウェア、ソフトウェア、ハードウェアまたはこれらの組み合わせのいずれで実装されても構わない。
【００７５】
実施の形態１における仮想計算機のＯＳ２３１ａ・ｂは物理計算機２００で動作する複数のＯＳの一例である。物理計算機２００にマルチオペレーティングシステムを実装し、仮想計算機のＯＳ以外の複数のＯＳを物理計算機２００が動作させても構わない。
【００７６】
実施の形態１において、物理計算機２００は、ＰＣＩデバイスのレジスタ空間がメモリ空間にマップされている。但し、物理計算機２００は、ＰＣ／ＡＴ互換機のように、ＰＣＩデバイスのレジスタ空間がＩ／Ｏアドレス空間にマップされても構わない（ＰＣ／ＡＴは登録商標）。例えば、Ｉｎｔｅｌ  ｘ８６  ＣＰＵの場合、Ｉ／Ｏアドレス空間にマップされたＰＣＩデバイスのレジスタ空間の保護は、Ｉ／Ｏ特権レベルやＩ／Ｏ許可ビットマップ、あるいは、ハードウェアの仮想化支援機能のＩ／Ｏアクセス横取り機能を用いることにより実現可能である（Ｉｎｔｅｌは登録商標）。
【００７７】
実施の形態１において、物理計算機２００は、ＯＳ２３１ａ・ｂに対するＩ／Ｏデバイス１１０ａ−ｃの事前割り付けを行わない。その代りに、物理計算機２００は、ＯＳ２３１ａによるＩ／Ｏデバイス１１０ａのメモリ空間やレジスタ空間へのアクセスが発生した際に、先着順で、該ＯＳ２３１ａに該Ｉ／Ｏデバイス１１０ａを割り付ける。これにより、物理計算機２００は、該Ｉ／Ｏデバイス１１０ａのメモリ空間とレジスタ空間とＰＣＩコンフィグレーションレジスタとを該ＯＳ２３１ａ以外のＯＳ２３１ｂから保護する。つまり、物理計算機２００は該Ｉ／Ｏデバイス１１０ａを割り付けたＯＳ２３１ａ以外のＯＳ２３１ｂから該Ｉ／Ｏデバイス１１０ａにアクセスできないようにする。
実施の形態１により、Ｉ／Ｏデバイス１１０ａ−ｃの割り付けの事前設定が不要になり、かつ、ＯＳ２３１ａに割り付けられたＩ／Ｏデバイス１１０ａのメモリ空間とレジスタ空間とＰＣＩコンフィグレーションレジスタとを他のＯＳ２３１ｂから保護することが可能となる。
【００７８】
実施の形態１において、例えば、以下のような計算機（物理計算機２００）について説明した。
計算機は、デバイス（Ｉ／Ｏデバイス１１０ａ−ｃ）にアクセスする複数のＯＳ（ＯＳ２３１ａ・ｂ）を動作させる。
計算機は、デバイス割り付け記憶部とアクセス管理部（ＶＭＭ部２２０）とを備える。
デバイス割り付け記憶部は、前記デバイスと前記デバイスが割り付けられたＯＳとを対応付けるためのデバイス割り付けテーブル（Ｉ／Ｏ割り付けテーブル２２９）を記憶する。
アクセス管理部は、前記デバイスへのアクセスが発生した場合、前記デバイスが割り付けられているＯＳを前記デバイス割り付けテーブルに基づいて判定する。アクセス管理部は、前記デバイスがいずれのＯＳにも割り付けられていない場合、前記デバイスとアクセス元のＯＳとを対応付けるために前記デバイス割り付けテーブルを更新して前記デバイスへのアクセスを許可する。アクセス管理部は、前記デバイスが前記アクセス元のＯＳ以外のＯＳに割り付けられている場合、前記デバイスへのアクセスを拒否する。
【００７９】
前記デバイス割り付けテーブルは、前記デバイスの物理アドレス空間と前記デバイスが割り付けられたＯＳとを対応付けて示すデータである。
前記アクセス管理部は、前記デバイスがいずれのＯＳにも割り付けられていない場合、さらに、前記デバイス割り付けテーブルが示す前記デバイスの物理アドレス空間を前記アクセス元のＯＳの仮想アドレス空間にマッピングする。
【００８０】
前記アクセス管理部は、前記デバイスのＰＣＩコンフィグレーションレジスタへのアクセスが発生した場合、前記デバイスが割り付けられているＯＳを前記デバイス割り付けテーブルに基づいて判定する。前記アクセス管理部は、前記デバイスがアクセス元のＯＳに割り付けられている場合、前記ＰＣＩコンフィグレーションレジスタへのアクセスを許可する。前記アクセス管理部は、前記デバイスが前記アクセス元のＯＳに割り付けられていない場合、前記ＰＣＩコンフィグレーションレジスタへのアクセスを拒否する。
【００８１】
前記アクセス管理部は、前記ＰＣＩコンフィグレーションレジスタへのアクセスがベースアドレスの変更であり、前記デバイスが前記アクセス元のＯＳに割り付けられている場合、以下のように動作する。前記アクセス管理部は、変更後のベースアドレスに基づいて前記デバイス割り付けテーブル内の前記デバイスの物理アドレス空間の情報を更新する。前記アクセス管理部は、更新後の前記情報が示す前記デバイスの物理アドレス空間を前記アクセス元のＯＳの仮想アドレス空間にマッピングする。
【００８２】
実施の形態２．
アクセスするデバイスの種類によってデバイスのメモリやレジスタからのデータの読み込みを複数のＯＳ（または全てのＯＳ）に許可する形態について説明する。
以下、実施の形態１と異なる事項について主に説明する。説明を省略する事項については実施の形態１と同様である。
【００８３】
仮想計算機システム１００の構成は、実施の形態１と同様である（図１参照）。
但し、Ｉ／Ｏ割り付けテーブル２２９の構成が一部異なる。
【００８４】
図１２は、実施の形態２におけるＩ／Ｏ割り付けテーブル２２９を示す図である。
実施の形態２におけるＩ／Ｏ割り付けテーブル２２９について、図１２に基づいて説明する。
【００８５】
Ｉ／Ｏ割り付けテーブル２２９は、実施の形態１で説明した項目（図４，６，８参照）に加えて、「デバイス種別」を有する。
「デバイス種別」は、Ｉ／Ｏデバイス１１０のデバイス種別（例えば、ブリッジ）を示す。
図１２のＩ／Ｏ割り付けテーブル２２９は、Ｉ／Ｏデバイス１１０ｃが「ブリッジ」であることを示している。Ｉ／Ｏデバイス１１０ｃ（ブリッジ）はいずれのＯＳ２３１ａ・ｂにも割り付けられていない。
【００８６】
ＰＣＩ  ＥｘｐｒｅｓｓスイッチやＰＣＩブリッジ（いずれもブリッジの一例）のＰＣＩコンフィグレーションレジスタはツリー構造によって他のＰＣＩデバイスと関連付けられているため、複数のＯＳ２３１ａ・ｂから参照される場合がある。
そこで、実施の形態２では、割り付け種別が「ブリッジ」であるＩ／Ｏデバイス１１０ｃをいずれのＯＳ２３１ａ・ｂにも割り付けず、各ＯＳ２３１ａ・ｂからＰＣＩコンフィグレーションレジスタへのアクセスをリードオンリー（読み取り専用）で許可する。また、Ｉ／Ｏデバイス１１０ｃのＰＣＩコンフィグレーションレジスタへの書き込みは、第３のＶＭ部のＯＳ（図示省略）や物理計算機２００のＯＳ（図示省略）などの特定の管理ＯＳだけに許可する。但し、ブリッジ以外のＩ／Ｏデバイス１１０ａ・ｂのメモリ、レジスタまたはＰＣＩコンフィグレーションレジスタをＯＳ２３１ａ・ｂに対してリードオンリーにしてもよい。
【００８７】
図１３は、実施の形態２における仮想計算機システム１００のメモリマップを表す図である。
図１３に示すように、Ｉ／Ｏデバイス１１０ｃのメモリ空間はＯＳ２３１ａとＯＳ２３１ｂとの両方の仮想メモリマップ３２０（仮想アドレス空間）にマッピングする。このとき、メモリ管理部２２４は、Ｉ／Ｏデバイス１１０ｃのメモリ空間がリードオンリーであることを示すアクセス属性をマッピングテーブルに設定する。また、メモリ管理部２２４は、必要に応じて管理ＯＳの仮想アドレス空間にＩ／Ｏデバイス１１０ｃのメモリ空間をマッピングし、Ｉ／Ｏデバイス１１０ｃのメモリ空間が書き込み可能であることを示すアクセス属性をマッピングテーブルに設定する。
【００８８】
図１４は、実施の形態２におけるＩ／Ｏ割り付けテーブル２２９の初期化処理を示すフローチャートである。
実施の形態２におけるＩ／Ｏ割り付けテーブル２２９の初期化処理について、図１４に基づいて説明する。
【００８９】
Ｉ／Ｏ割り付けテーブル２２９の初期化処理は、実施の形態１で説明した処理（図５参照）に加えて、Ｓ２４０とＳ２４１とを含む。以下、Ｓ２４０とＳ２４１とについて説明する。
【００９０】
Ｓ２４０において、ＶＭＭ部２２０の制御部２２８は、Ｉ／Ｏデバイス１１０のＰＣＩコンフィグレーションレジスタ（デバイス種別の情報を含む）を参照し、Ｉ／Ｏデバイス１１０がＰＣＩ  ＥｘｐｒｅｓｓスイッチまたはＰＣＩブリッジであるか判定する。
Ｉ／Ｏデバイス１１０がＰＣＩ  ＥｘｐｒｅｓｓスイッチまたはＰＣＩブリッジである場合（ＹＥＳ）、処理はＳ２４１に進む。
Ｉ／Ｏデバイス１１０がＰＣＩ  ＥｘｐｒｅｓｓスイッチとＰＣＩブリッジとのいずれでもない場合（ＮＯ）、当該Ｉ／Ｏデバイス１１０に対する処理は終了する。
【００９１】
Ｓ２４１において、ＶＭＭ部２２０の制御部２２８は、Ｉ／Ｏ割り付けテーブル２２９に対して、Ｉ／Ｏデバイス１１０の「デバイス識別子」に対応付けられた「デバイス種別」に「ブリッジ」を設定する。
Ｓ２４１により、当該Ｉ／Ｏデバイス１１０に対する処理は終了する。
【００９２】
図１５は、実施の形態２におけるＩ／Ｏデバイス１１０の割り付け処理を示すフローチャートである。
実施の形態２におけるＩ／Ｏデバイス１１０の割り付け処理について、図１５に基づいて説明する。
【００９３】
Ｉ／Ｏデバイス１１０の割り付け処理は、実施の形態１で説明した処理（図７参照）に加えて、Ｓ３３２およびＳ３３３を含む。以下、Ｓ３３２について説明する。
【００９４】
Ｓ３３２において、ＶＭＭ部２２０のＩ／Ｏ割り付け部２２３は、ＯＳ２３１ａ・ｂからのアクセスがブリッジ（Ｉ／Ｏデバイス１１０ｃ）のメモリ空間またはレジスタ空間への書き込みまたは読み込みであるか否かを判定する。
このとき、Ｉ／Ｏ割り付け部２２３は、アクセス命令の内容が「書き込み」または「読み込み」であるか否かを判定する。また、Ｉ／Ｏ割り付け部２２３は、Ｉ／Ｏ割り付けテーブル２２９を参照し、アクセス先のＩ／Ｏデバイス１１０の「デバイス識別子」に対応付けられた「デバイス種別」が「ブリッジ」であるか否かを判定する。アクセス命令の内容が「書き込み」または読み込みであって「デバイス種別」が「ブリッジ」である場合、ＯＳ２３１ａ・ｂからのアクセスはブリッジ（Ｉ／Ｏデバイス１１０ｃ）のメモリ空間またはレジスタ空間への書き込みまたは読み込みである。
ＯＳ２３１ａ・ｂからのアクセスがブリッジ（Ｉ／Ｏデバイス１１０ｃ）のメモリ空間またはレジスタ空間への書き込みである場合（ＹＥＳ［書き込み］）、処理はＳ３５０に進む。
ＯＳ２３１ａ・ｂからのアクセスがブリッジ（Ｉ／Ｏデバイス１１０ｃ）のメモリ空間またはレジスタ空間への読み込みである場合（ＹＥＳ［読み込み］）、処理はＳ３３３に進む。
ＯＳ２３１ａ・ｂからのアクセスがブリッジ（Ｉ／Ｏデバイス１１０ｃ）のメモリ空間またはレジスタ空間への書き込みおよび読み込みでない場合（ＮＯ）、処理はＳ３３１に進む。
【００９５】
Ｓ３３３において、Ｉ／Ｏ割り付け部２２３は、Ｉ／Ｏ割り付けテーブル２２９への登録は行わず、仮想アドレス空間に該Ｉ／Ｏデバイス１１０ｃのメモリ空間およびレジスタ空間をリードオンリーでマップする。
Ｓ３３３の後、処理はＳ３４２に進む。
【００９６】
図１６は、実施の形態２におけるＰＣＩコンフィグレーションレジスタへのアクセス処理を示すフローチャートである。
実施の形態２におけるＰＣＩコンフィグレーションレジスタへのアクセス処理について、図１６に基づいて説明する。
【００９７】
ＰＣＩコンフィグレーションレジスタへのアクセス処理は、実施の形態１で説明した処理（図１０参照）に加えて、Ｓ４２１を含む。以下、Ｓ４２１について説明する。
【００９８】
Ｓ４２１において、ＶＭＭ部２２０のＰＣＩエミュレーション部２２１は、ＯＳ２３１ａ・ｂからのアクセスがブリッジ（Ｉ／Ｏデバイス１１０ｃ）のＰＣＩコンフィグレーションレジスタへの書き込みまたは読み込みであるか否かを判定する。
ＯＳ２３１ａ・ｂからのアクセスがブリッジ（Ｉ／Ｏデバイス１１０ｃ）のＰＣＩコンフィグレーションレジスタへの書き込みである場合（ＹＥＳ［書き込み］）、処理はＳ４５０に進む。
ＯＳ２３１ａ・ｂからのアクセスがブリッジ（Ｉ／Ｏデバイス１１０ｃ）のＰＣＩコンフィグレーションレジスタへの読み込みである場合（ＹＥＳ［読み込み］）、デバイスが自ＯＳに割り付けられているかどうかの検査を省略し、Ｓ４４２に進む。
ＯＳ２３１ａ・ｂからのアクセスがブリッジ（Ｉ／Ｏデバイス１１０ｃ）のＰＣＩコンフィグレーションレジスタへの書き込みおよび読み込みでない場合（ＮＯ）、処理はＳ４３０に進む。
【００９９】
Ｓ４２１において、ＰＣＩエミュレーション部２２１は、ブリッジ（Ｉ／Ｏデバイス１１０ｃ）のＰＣＩコンフィグレーションレジスタへの書き込みのアクセスが所定の管理ＯＳからのアクセスであるか否かを判定してもよい。ブリッジ（Ｉ／Ｏデバイス１１０ｃ）のＰＣＩコンフィグレーションレジスタへの書き込みのアクセスが所定の管理ＯＳからのアクセスである場合、Ｓ４５０ではなくＳ４３０に進む。つまり、ＰＣＩエミュレーション部２２１はＰＣＩコンフィグレーションレジスタへの書き込みを許可する。
【０１００】
実施の形態２により、あるＯＳ２３１ａが勝手にＰＣＩブリッジ（所定の種類のデバイスの一例）を占有したり、勝手にＰＣＩブリッジのＰＣＩコンフィグレーションレジスタを変更したりしてしまうことによる不具合を防止することができる。例えば、他のＯＳ２３１ｂが該ＰＣＩブリッジにアクセス不能となり、該ＰＣＩブリッジ以下のＰＣＩのツリー構造をたどれなくなってしまう、という不具合を防止することができる。
【０１０１】
実施の形態２において、例えば、以下のような計算機（物理計算機２００）について説明した。
アクセス管理部（ＶＭＭ部２２０）は、所定の種類のデバイス（例えば、ブリッジ）のＰＣＩコンフィグレーションレジスタへ書き込みのアクセスが発生した場合、前記書き込みのアクセスを拒否する。アクセス管理部は、前記所定の種類のデバイスのＰＣＩコンフィグレーションレジスタへ読み取りのアクセスが発生した場合、前記読み取りのアクセスを許可する。
アクセス管理部は、前記所定の種類のデバイスのＰＣＩコンフィグレーションレジスタへ書き込みのアクセスが所定の管理ＯＳから発生した場合、前記書き込みのアクセスを許可する。
【０１０２】
実施の形態３．
前回のＩ／Ｏデバイス１１０ａ−ｃの割り付け結果を次回の仮想計算機システム１００で使用する形態について説明する。
以下、実施の形態１、２と異なる事項について主に説明する。説明を省略する事項については実施の形態１、２と同様である。
【０１０３】
図１７は、実施の形態３における仮想計算機システム１００の構成図である。
実施の形態３における仮想計算機システム１００の構成について、図１７に基づいて説明する。
【０１０４】
物理計算機２００のＶＭＭ部２２０は、実施の形態１で説明した構成（図１参照）に加えて、テーブル保存部２２５を備える。
【０１０５】
テーブル保存部２２５は、ＶＭＭ部２２０の実行終了時（またはＶＭ部２３０ａ・ｂの実行終了時）にＩ／Ｏ割り付けテーブル２２９（図１２参照）を補助記憶装置２１３に保存する。保存されたＩ／Ｏ割り付けテーブル２２９は、物理計算機２００の次回以降の起動時のＩ／Ｏ割り付けテーブル２２９の初期化処理で使用される。
【０１０６】
図１８は、実施の形態３におけるＩ／Ｏ割り付けテーブル２２９の初期化処理を示すフローチャートである。
実施の形態３におけるＩ／Ｏ割り付けテーブル２２９の初期化処理について、図１８に基づいて説明する。
【０１０７】
Ｉ／Ｏ割り付けテーブル２２９の初期化処理は、実施の形態２で説明した処理（図１４参照）に加えて、Ｓ２５０からＳ２５３を含む。以下、Ｓ２５０からＳ２５３について説明する。
【０１０８】
Ｓ２４０でＩ／Ｏデバイス１１０がＰＣＩ  ＥｘｐｒｅｓｓスイッチとＰＣＩブリッジとのいずれでもない場合（ＮＯ）、処理はＳ２５０に進む。
また、実施の形態１のＩ／Ｏ割り付けテーブル２２９の初期化処理（図５参照）に実施の形態３を適用する場合はＳ２３０の後にＳ２５０に進む。
【０１０９】
Ｓ２５０において、ＶＭＭ部２２０の制御部２２８は、テーブル保存部２２５によって保存された前回（または過去）のＩ／Ｏ割り付けテーブル２２９を利用するモード（以下、「引き継ぎモード」という）でＶＭＭ部２２０が起動したか否かを判定する。例えば、ユーザが引き継ぎモードか否かを示すモード種別を起動オプションとして指定してＶＭＭ部２２０を起動し、制御部２２８は起動オプションのモード種別によって判定する。また、ユーザが物理計算機２００のディップスイッチによってモードを切り替えてもよい。以下、前回（または過去）のＩ／Ｏ割り付けテーブル２２９を「保存割り付けテーブル」という。
ＶＭＭ部２２０が引き継ぎモードで起動した場合（ＹＥＳ）、処理はＳ２５１に進む。
ＶＭＭ部２２０が引き継ぎモードで起動しなかった場合（ＮＯ）、当該Ｉ／Ｏデバイス１１０に対する処理は終了する。
【０１１０】
Ｓ２５１において、制御部２２８は、補助記憶装置２１３の保存割り付けテーブルを参照し、当該Ｉ／Ｏデバイス１１０がいずれかのＯＳ２３１ａ・ｂに割り付けられていたか否かを判定する。つまり、制御部２２８は、保存割り付けテーブルを参照し、当該Ｉ／Ｏデバイス１１０の「デバイス識別子」に対応付けられた「割り付け先」にいずれかのＯＳ２３１ａ・ｂが設定されているか否かを判定する。
当該Ｉ／Ｏデバイス１１０がいずれかのＯＳ２３１ａ・ｂに割り付けられていた場合（ＹＥＳ）、処理はＳ２５２に進む。
当該Ｉ／Ｏデバイス１１０がいずれかのＯＳ２３１ａ・ｂにも割り付けられていなかった場合（ＮＯ）、当該Ｉ／Ｏデバイス１１０に対する処理は終了する。
【０１１１】
Ｓ２５２において、制御部２２８は、当該Ｉ／Ｏデバイス１１０が割り付けられていたＯＳ２３１（ａまたはｂ）に当該Ｉ／Ｏデバイス１１０を割り付ける。つまり、制御部２２８は、Ｉ／Ｏ割り付けテーブル２２９に対して、Ｉ／Ｏデバイス１１０の「デバイス識別子」に対応付けられた「割り付け先」に当該Ｉ／Ｏデバイス１１０が割り付けられていたＯＳ２３１の識別子を設定する。
Ｓ２５２の後、処理はＳ２５３に進む。
【０１１２】
Ｓ２５３において、制御部２２８（またはメモリ管理部２２４）は、Ｉ／Ｏ割り付けテーブル２２９を参照し、当該Ｉ／Ｏデバイス１１０が割り付けられていたＯＳ２３１の仮想アドレス空間に当該Ｉ／Ｏデバイス１１０のメモリ空間およびレジスタ空間（物理アドレス空間）をマッピングする。
Ｓ２５３により、当該Ｉ／Ｏデバイス１１０に対する処理は終了する。
【０１１３】
実施の形態３により、補助記憶装置２１３に保存されたＩ／Ｏ割り付けテーブル２２９を利用し、各ＯＳ２３１ａ・ｂに対するＩ／Ｏデバイス１１０ａ−ｃの割り付けおよびマッピングに要するオーバヘッドを削減することができる。
【０１１４】
実施の形態３において、例えば、以下のような計算機（物理計算機２００）について説明した。
アクセス管理部（ＶＭＭ部２２０）は、動作が終了する場合にデバイス割り付けテーブル（Ｉ／Ｏ割り付けテーブル２２９）を保存割り付けテーブルとして保存し、動作が開始する場合に前記保存割り付けテーブルを用いて新たなデバイス割り付けテーブルを生成する。
【符号の説明】
【０１１５】
１００  仮想計算機システム、１１０  Ｉ／Ｏデバイス、２００  物理計算機、２１０  ハードウェア、２１１  プロセッサ、２１２  メインメモリ、２１３  補助記憶装置、２１４  割込みコントローラ、２２０  ＶＭＭ部、２２１  ＰＣＩエミュレーション部、２２２  Ｉ／Ｏエミュレーション部、２２３  Ｉ／Ｏ割り付け部、２２４  メモリ管理部、２２５  テーブル保存部、２２８  制御部、２２９  Ｉ／Ｏ割り付けテーブル、２３０  ＶＭ部、２３１  ＯＳ、２３２  デバイスドライバ、２３３  ＰＣＩドライバ、３１０  物理メモリマップ、３１１  ＶＭ用メモリ空間、３１２  Ｉ／Ｏ用メモリ空間、３１３  Ｉ／Ｏ用レジスタ空間、３２０  仮想メモリマップ。
【図１】
0005925288.tif 000002
【図２】
0005925288.tif 000003
【図３】
0005925288.tif 000004
【図４】
0005925288.tif 000005
【図５】
0005925288.tif 000006
【図６】
0005925288.tif 000007
【図７】
0005925288.tif 000008
【図８】
0005925288.tif 000009
【図９】
0005925288.tif 000010
【図１０】
0005925288.tif 000011
【図１１】
0005925288.tif 000012
【図１２】
0005925288.tif 000013
【図１３】
0005925288.tif 000014
【図１４】
0005925288.tif 000015
【図１５】
0005925288.tif 000016
【図１６】
0005925288.tif 000017
【図１７】
0005925288.tif 000018
【図１８】
0005925288.tif 000019