(57)【要約】【課題】複数のＯＳから共有されるＩ／Ｏ仮想化対応デバイスに使用効率を高くする。【解決手段】受信手段511が、ＯＳから送られてくるアクセス可否問い合わせであって、Ｉ／Ｏ仮想化対応デバイスに対するアクセスの可否を問い合わせるアクセス可否問い合わせを受信する。判定手段512が、受信手段５１１で受信したアクセス可否問い合わせに応答して上記Ｉ／Ｏ仮想化対応デバイスに対するアクセスが可能か否かを、管理しているＩ／Ｏ仮想化デバイスに対するアクセス状況に基づいて判定する。そして、アクセス可能と判定した場合には問い合わせ元のＯＳに対してアクセス許可を通知し、アクセス不可能と判定した場合には問い合わせ元のＯＳに対してアクセス不可を通知する。【選択図】図４
2011248551.tif 000002
【特許請求の範囲】
【請求項１】
Ｉ／Ｏ仮想化対応デバイスを共有するＯＳから送られてくるアクセス可否問い合わせであって、前記Ｉ／Ｏ仮想化対応デバイスに対するアクセスの可否を問い合わせるアクセス可否問い合わせを受信する受信手段と、
該受信手段で受信したアクセス可否問い合わせに応答して前記Ｉ／Ｏ仮想化対応デバイスに対するアクセスが可能か否かを、自装置で管理している前記Ｉ／Ｏ仮想化対応デバイスに対するアクセス状況に基づいて判定し、アクセス可能と判定した場合には問い合わせ元の前記ＯＳに対してアクセス許可を通知し、アクセス不可能と判定した場合には問い合わせ元の前記ＯＳに対してアクセス不可を通知する判定手段とを備えたことを特徴とするアクセス制御装置。
【請求項２】
請求項１記載のアクセス制御装置において、
前記Ｉ／Ｏ仮想化対応デバイスに対するアクセス状況を示すアクセス状況情報が記録されたアクセス状況記憶部を備え、且つ、
前記判定手段は、前記アクセス状況記憶部に記録されているアクセス状況情報に基づいて前記Ｉ／Ｏ仮想化対応デバイスに対するアクセスが可能か否かを判定することを特徴とするアクセス制御装置。
【請求項３】
請求項２記載のアクセス制御装置において、
前記受信手段は、前記ＯＳから送られてくるアクセス開始通知あるいはアクセス終了通知を受信し、
前記判定手段は、前記受信手段が前記アクセス開始通知を受信することにより、前記アクセス状況記憶部に記録されているアクセス状況情報を、アクセス中であることを示すものに変更し、前記受信手段が前記アクセス終了通知を受信することにより、前記アクセス状況記憶部に記録されているアクセス状況情報をアクセス中でないことを示すものに変更することを特徴とするアクセス制御装置。
【請求項４】
請求項２記載のアクセス制御装置において、
前記受信手段は、前記ＯＳから送られてくるアクセス終了通知を受信し、
前記判定手段は、前記アクセス状況記憶部に記録されているアクセス状況情報に基づいて前記Ｉ／Ｏ仮想化対応デバイスに対するアクセスが可能と判定することにより、前記アクセス状況情報をアクセス中であることを示すものに変更し、前記受信手段が前記アクセス終了通知を受信することにより、前記アクセス状況記憶部に記録されているアクセス状況情報をアクセス中でないことを示すものに変更することを特徴とするアクセス制御装置。
【請求項５】
請求項２乃至４の何れか１項に記載のアクセス制御装置において、
前記受信手段、前記判定手段、及び、前記アクセス状況記憶部は、前記Ｉ／Ｏ仮想化対応デバイスが接続されているPCI Expressスイッチに実装されることを特徴とするアクセス制御装置。
【請求項６】
受信手段が、Ｉ／Ｏ仮想化対応デバイスを共有するＯＳから送られてくるアクセス可否問い合わせであって、前記Ｉ／Ｏ仮想化対応デバイスに対するアクセスの可否を問い合わせるアクセス可否問い合わせを受信し、
判定手段が、前記受信手段で受信したアクセス可否問い合わせに応答して前記Ｉ／Ｏ仮想化対応デバイスに対するアクセスが可能か否かを、管理している前記Ｉ／Ｏ仮想化対応デバイスのアクセス状況に基づいて判定し、アクセス可能と判定した場合には問い合わせ元の前記ＯＳに対してアクセス許可を通知し、アクセス不可能と判定した場合には問い合わせ元の前記ＯＳに対してアクセス不可を通知することを特徴とするアクセス制御方法。
【請求項７】
コンピュータを、
Ｉ／Ｏ仮想化対応デバイスを共有するＯＳから送られてくるアクセス可否問い合わせであって、前記Ｉ／Ｏ仮想化対応デバイスに対するアクセスの可否を問い合わせるアクセス可否問い合わせを受信する受信手段、
該受信手段で受信したアクセス可否問い合わせに応答して前記Ｉ／Ｏ仮想化対応デバイスに対するアクセスが可能か否かを、管理している前記Ｉ／Ｏ仮想化対応デバイスのアクセス状況に基づいて判定し、アクセス可能と判定した場合には問い合わせ元の前記ＯＳに対してアクセス許可を通知し、アクセス不可能と判定した場合には問い合わせ元の前記ＯＳに対してアクセス不可を通知する判定手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入出力仮想化(I/O仮想化)に対応したI/Oデバイスを有するコンピュータシステムに関し、特に、複数のオペレーティングシステム(OS)からI/Oデバイスを共有する際のアクセス制御技術に関する。
【背景技術】
【０００２】
プロセッサ(CPU)やメモリなどから構成される物理的には１台のコンピュータを、仮想マシンモニタやハイパーバイザなどの仮想化ソフトウェアを利用して論理的に分割し、複数台のコンピュータに見せかけるということは従来から行われている（例えば、特許文献１参照）。なお、１台のコンピュータを論理的に分割することにより得られるコンピュータのことを、ここでは仮想ハードウェアと呼ぶ。
【０００３】
仮想ハードウェアにはそれぞれ異なるOS（仮想OS）が搭載され、各OSはそれぞれ独立してI/Oデバイスをアクセスする。その際、複数の仮想OSから同一のI/Oデバイスを共用できるようにするため、ハイパーバイザなどの仮想化ソフトウェアにおいて、I/Oデバイスの管理処理や、アクセス要求に対する調停処理が行われる。即ち、複数の仮想OS上では、それぞれが持つメモリ空間上に同一のI/Oデバイスをマップすることはできても、同一のI/Oデバイスに複数のアドレスを重複して割り振ることはできないため、各仮想OSが認識する上記I/Oデバイスのアドレスにズレが生じる。I/Oデバイスの管理処理では、このアドレスのズレを補正する処理を行う。また、アクセス要求に対する調停処理では、各仮想OSからの同一I/Oデバイスに対するアクセス処理を一本化するための処理が行われる。
【０００４】
また、近年、仮想化ソフトウェアが備えていたI/Oデバイスの管理機能や、アクセス要求に対する調停機能などのI/Oデバイスを共有するための支援機能をI/Oデバイス自身に搭載することで、物理的には１つのI/Oデバイスを、複数の仮想OSからあたかもそれ自身の持つI/Oデバイスと認識できるようにしたI/Oデバイスが提案されている。このようなI/Oデバイスは、I/O仮想化対応のI/Oデバイスと呼ばれる。なお、PCI(Peripheral Component Interconnect)デバイス側で仮想化をサポートする規格として、Single Root I/O Virtualization(SR-IOV)が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２６９１７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
複数の仮想OSから１つのI/Oデバイスを共有する方法の内、仮想化ソフトウェアを介してI/Oデバイスを共有する方法は、仮想化ソフトウェアのオーバヘッドが大きく、I/Oデバイスを効率的に使用できないという問題がある。また、I/O仮想化対応のI/Oデバイスを利用する方法は、ハードウェアによる処理であるため、仮想化ソフトウェアを利用する場合に比較してI/Oデバイスを効率的に使用することができる。しかし、この方法は、I/Oデバイス自身でアクセス要求に対する調停処理を行っており、調停処理を行っている間、I/Oデバイス本来の処理である入出力処理を行うことができないため、I/Oデバイスの利用効率を十分に高いものにすることが難しいという問題がある。つまり、I/Oデバイスが使用されていない状態であっても、アクセス要求があった場合、常に調停処理が実施されるため、その間、I/Oデバイス本来の処理を行うことができなくなってしまう。
【０００７】
［発明の目的］
そこで、本発明の目的は、複数のOSからI/Oデバイスを共有する際、I/Oデバイスの利用効率を十分に高くすることが難しかったという課題を解決したアクセス制御装置を提供することにある。
【課題を解決するための手段】
【０００８】
本発明にかかる第１のアクセス制御装置は、
Ｉ／Ｏ仮想化対応デバイスを共有するＯＳから送られてくるアクセス可否問い合わせであって、前記Ｉ／Ｏ仮想化対応デバイスに対するアクセスの可否を問い合わせるアクセス可否問い合わせを受信する受信手段と、
該受信手段で受信したアクセス可否問い合わせに応答して前記Ｉ／Ｏ仮想化対応デバイスに対するアクセスが可能か否かを、自装置で管理している前記Ｉ／Ｏ仮想化対応デバイスに対するアクセス状況に基づいて判定し、アクセス可能と判定した場合には問い合わせ元の前記ＯＳに対してアクセス許可を通知し、アクセス不可能と判定した場合には問い合わせ元の前記ＯＳに対してアクセス不可を通知する判定手段とを備える。
【０００９】
本発明に係るアクセス制御方法は、
受信手段が、Ｉ／Ｏ仮想化対応デバイスを共有するＯＳから送られてくるアクセス可否問い合わせであって、前記Ｉ／Ｏ仮想化対応デバイスに対するアクセスの可否を問い合わせるアクセス可否問い合わせを受信し、
判定手段が、前記受信手段で受信したアクセス可否問い合わせに応答して前記Ｉ／Ｏ仮想化対応デバイスに対するアクセスが可能か否かを、管理している前記Ｉ／Ｏ仮想化対応デバイスのアクセス状況に基づいて判定し、アクセス可能と判定した場合には問い合わせ元の前記ＯＳに対してアクセス許可を通知し、アクセス不可能と判定した場合には問い合わせ元の前記ＯＳに対してアクセス不可を通知する。
【００１０】
本発明にかかるプログラムは、
コンピュータを、
Ｉ／Ｏ仮想化対応デバイスを共有するＯＳから送られてくるアクセス可否問い合わせであって、前記Ｉ／Ｏ仮想化対応デバイスに対するアクセスの可否を問い合わせるアクセス可否問い合わせを受信する受信手段、
該受信手段で受信したアクセス可否問い合わせに応答して前記Ｉ／Ｏ仮想化対応デバイスに対するアクセスが可能か否かを、管理している前記Ｉ／Ｏ仮想化対応デバイスのアクセス状況に基づいて判定し、アクセス可能と判定した場合には問い合わせ元の前記ＯＳに対してアクセス許可を通知し、アクセス不可能と判定した場合には問い合わせ元の前記ＯＳに対してアクセス不可を通知する判定手段として機能させる。
【発明の効果】
【００１１】
本発明によれば、複数のＯＳによって共有されるＩ／Ｏ仮想化対応デバイスの利用効率を高いものにすることができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施の形態としてのPCI Expressシステムの構成例を示すブロック図である。
【図２】PCI Expressスイッチ500の構成例を示すブロック図である。
【図３】コンフィグレーション情報記憶部520の内容例を示す図である。
【図４】アクセス制御部510の構成例を示す図である。
【図５】アクセス可否問い合わせ、アクセス終了通知、シーケンスアクセス開始通知の構成例を示す図である。
【図６】実施の形態の動作を説明するための図である。
【図７】仮想OS#2がEP600に対してシーケンスアクセスを行う際の動作を示す図である。
【図８】PCI Expressスイッチ500aの構成例を示すブロック図である。
【発明を実施するための形態】
【００１３】
次に、本発明の実施の形態について図面を参照して詳細に説明する。
【００１４】
図１を参照すると、本発明の一実施の形態としてのPCI
Express（PCIe）システムが示されている。
【００１５】
同図に示すように、PCI Expressシステムは、CPU(Central Processing Unit)100と、CPU100上に仮想化された複数の仮想OS200-1〜200-Nと、ルートコンプレックス(Root complex)300と、PCI Expressスイッチ400,500と、EP(End Point)600,700とを備えている。なお、以下の説明では、仮想OS200-1〜200-Nを仮想OS#1〜#Nと記す場合もある。また、同図では図示していないが、CPU100上には、仮想OS#1〜#Nを制御するホストOSも搭載されている。
【００１６】
PCI Expressシステムに設けられている２つのEP600,700の内、EP600はI/O仮想化に対応したI/Oデバイスであり、EP700はI/O仮想化に対応していない一般的なI/Oデバイスである。I/O仮想化に対応しているEP600は、PF部（物理機能部）800と、複数のVF部（仮想機能部）900-1〜900-Nとを備えている。
【００１７】
EP600内のＮ個のVF部900-1〜900-N（VF部#1〜#Nと記す場合もある）は、それぞれ仮想OS#1〜#Nに対応しており、対応する仮想OS#1〜＃Nが認識している自EP600のアドレスを保持している。言い換えれば、対応している仮想OS#1〜#Nが、それ自身に割り当てられているアドレス空間内のどの部分にEP600をマップしているのかを示す情報（アドレス情報）を保持している。そして、PCI
Expressスイッチ500を介して仮想OSから一連の命令が或るアドレス宛てに送られてきた際には、上記アドレスと自VF部#1〜#Nで保持しているアドレス情報とを比較し、両者が一致する場合にはそれをPF部800に渡し、不一致の場合には破棄する。PF部800は、VF部#1〜#Nから渡された一連の命令に従った処理を行う。なお、各VF部#1〜#Nには、システムを起動した際に行われるコンフィグレーション処理によって対応する仮想OS#1〜#Nが認識している自EP600のアドレス情報が記録される。また、仮想OSからの一連の命令とは、次のようなものである。コンピュータにおいて、仮想OSがI/Oデバイス（EP）を動作させるためには、デバイスドライバが必要である。デバイスドライバは、仮想OSからのI/Oデバイスに対する、ある要求（例えば、プリンタに対する印刷要求など）を、I/Oデバイスを要求通り動作させるための命令列に変換する。ここでは、デバイスドライバによって変換された命令列を、仮想OSからの一連の命令列といっている。また、この一連の命令列を使用してEPをアクセスすることをシーケンスアクセスと呼ぶことにする。
【００１８】
また、２つのPCI Expressスイッチ400,500の内、PCI Expressスイッチ400は、一般的なPCI Expressのデバイスである。これに対して、PCI Expressスイッチ500は、本発明に係るアクセス制御機能を備えたPCI Expressスイッチである。
【００１９】
図２を参照すると、PCI Expressスイッチ500は、アクセス制御部510と、コンフィグレーション情報記憶部520と、PCI Expressポート530〜532と、PCI-PCIブリッジ540〜542と、PCIバス550とを備えている。なお、PCI Expressポート530にはPCI
Expressスイッチ400が接続され、PCI Expressポート531にはEP600が接続されている。
【００２０】
コンフィグレーション情報記憶部520には、PCI Expressスイッチ500に関するデバイス情報が記録されている。より具体的には、図３に示すように、自デバイスのPCIコンフィグレーション空間521に関する情報と、PCI Express拡張コンフィグレーション空間522に関する情報とが記録されている。本実施の形態は、PCI Express拡張コンフィグレーション空間522にアクセス制御レジスタ機能部523を備えていることを特徴としている。このアクセス制御レジスタ機能部523には、EP600に対するアクセス制御を実施するアクセス制御部510の所在を示す情報が記録されている。本実施の形態では、アクセス制御部510の所在を示す情報として、PCI Expressポート530の所在を示す情報が記録されているとする。このコンフィグレーション情報記憶部520に記録されている情報は、システム起動時に、仮想OS#1〜#N及びホストOSによって読み取られる。
【００２１】
図４を参照すると、アクセス制御部510は、受信手段511と、判定手段512と、アクセス状況記憶部513とを備えている。
【００２２】
受信手段511は、PCI Expressポート530の所在を示す情報を宛先にしたアクセス可否問い合わせ、アクセス終了通知、あるいは、シーケンスアクセス開始通知を受信した場合には、受信したアクセス可否問い合わせ、アクセス終了通知、あるいは、シーケンスアクセス開始通知を判定手段512に渡し、他の情報（シーケンスアクセスを行うための一連の命令など）を受信した場合には、それをPCI-PCIブリッジ５４０に渡す機能を有する。なお、アクセス可否問い合わせは、図５（Ａ）に示すように、仮想OSがアクセス対象にするEPのデバイス番号（コンフィグレーション時に上記EPに付与された番号）と、アクセス可否問い合わせの宛先を示す情報（コンフィグレーション時にアクセス制御レジスタ機能部523から読み取ったアクセス制御部510の所在を示す情報）と、アクセス可否問い合わせの問い合わせ元を示す情報（例えば、問い合わせ元の仮想OSの識別子）とを含む。また、アクセス終了通知には、図５（Ｂ）に示すように、アクセスを終了するEPのデバイス番号と、アクセス終了通知の宛先と、アクセス終了通知の通知元を示す情報（例えば通知元の仮想OSの識別子）を含む。また、シーケンスアクセス開始通知には、図５（Ｃ）に示すように、シーケンスアクセスを開始するEPのデバイス番号と、シーケンスアクセス開始通知の宛て先と、シーケンスアクセス開始通知の通知元を示す情報とを含む。
【００２３】
アクセス状況記憶部513には、PCI Expressスイッチ500に接続されているEP毎の領域が設けられ、各領域には対応するEPのアクセス状況を示すアクセス状況情報が記録される。より具体的には、アクセス状況記憶部513内の各領域には、対応するEPがアクセス状況を示す情報が記録される（アクセス中の場合には「アクセス中」が、アクセス中でない場合には「未アクセス」が記録される。なお、本実施の形態では、アクセス状況記憶部513の第１番目の領域（アドレスが最も小さい領域）には、PCI Expressスイッチ500に接続されているEPの内、付与されているデバイス番号が最も小さいEPが対応付けられ、第２番目の領域（アドレスが２番目に小さい領域）には、付与されているデバイス番号が２番目に小さいEPが対応付けられるというように、デバイス番号が小さいEPほどアドレスが小さい領域に対応付けられている。但し、この例では、PCI Expressスイッチ500には１個のEP600しか接続されていないので、アクセス状況記憶部513の第１番目の領域だけにEP600が対応付けられている。また、初期状態においては、アクセス状況記憶部513の各領域には「未アクセス」が記録される。
【００２４】
判定手段512は、受信手段511からアクセス可否問い合わせが渡された場合は、アクセス状況記憶部513に設けられているEP毎の領域の内の、上記アクセス可否問い合わせ中のデバイス番号に対応するEPに割り当てられている領域を参照する。そして、参照した領域に、アクセス状況情報として「アクセス不可」が記録されている場合には、問い合わせ元の仮想OSに対してアクセス不可を通知する。これに対して、参照した領域にアクセス状況情報として「未アクセス」が記録されている場合には、問い合わせ元の仮想OSに対してアクセス許可を通知する。
【００２５】
なお、判定手段512は、或る仮想OSにアクセス許可を通知してから所定時間が経過するまでの間に他の仮想OSからアクセス可否問い合わせが送られてきた場合には、該当するアクセス状況情報が「未アクセス」であっても上記他の仮想OSに対してはアクセス不可を通知する。これは、２つの仮想OSに同時にアクセス許可を与えないようにするためである。また、判定手段512は、アクセス可否問い合わせ中のデバイス番号に対応する領域が、アクセス状況記憶部513に設けられているEP毎の領域の内の何番目の領域であるかは、コンフィグレーション情報記憶部520を参照することにより認識できる。即ち、コンフィグレーション情報記憶部520には、システム起動時のコンフィグレーション処理によってPCI Expressスイッチ500に接続されている各EPに付与されたデバイス番号が記録されており、これを参照することにより、アクセス可否問い合わせ中のデバイス番号が上記各EPに付与されているデバイス番号の内で何番目に大きなものなのかを認識することができるので、アクセス可否問い合わせ中のデバイス番号に対応する領域が、アクセス状況記憶部513中の何番目の領域であるかを認識することができる。
【００２６】
また、判定手段512は、シーケンスアクセス開始通知が渡された場合には、アクセス状況記憶部513に設けられているEP毎の領域の内の、上記シーケンスアクセス開始通知に含まれているデバイス番号と対応する領域に記録されているアクセス状況情報を「アクセス中」に変更する。
【００２７】
また、判定手段512は、受信手段511からアクセス終了通知が渡された場合には、アクセス状況記憶部513に設けられているEP毎の領域の内の、上記アクセス終了通知中のデバイス番号と対応する領域に記録されているアクセス状況情報を「未アクセス」に変更する。
【００２８】
なお、アクセス制御部510内の受信手段511及び判定手段512は、布線論理で実現しても良いし、CPUによって実現してもよい。CPUによって実現する場合には、CPUを受信手段511および判定手段512として機能させるためのプログラムを記録した半導体メモリなどの記録媒体を用意し、CPUに上記プログラムを読み取らせる。CPUは、読み取ったプログラムに従って自身の動作を制御することにより、自CPU上に受信手段511および判定手段512を実現する。
【００２９】
［動作の説明］
次に、図６を参照し、仮想OSがPCI Expressスイッチ500経由でEP600に対してシーケンスアクセスを行う場合の動作について説明する。なお、図６は図１中のシーケンスアクセスに関与する部分を抜き出したものである。また、EP600は出力ポートを備え、そこからシーケンスアクセスに従ったデータを出力するものとする。また、図中の１〜18は、以下に記述する１〜18の動作と対応している。
【００３０】
１．仮想OS#1において、I/O仮想化に対応したEP600に対するアクセス要求が発生する。これにより、仮想OS#1は、先ず、EP600が接続されているPCI Expressスイッチ500に設けられているアクセス制御部510に対してアクセス可否問い合わせを送信する。このアクセス可否問い合わせには、アクセス対象にするEP600のデバイス番号と、アクセス可否問い合わせの宛て先となるアクセス制御部510の所在を示す情報（この例の場合は、PCI Expressスイッチ530の所在を示す情報）と、問い合わせ元が自仮想OS#1であることを示す情報とが含まれる。なお、EP600のデバイス番号や、アクセス制御部510の所在を示す情報は、システム起動時に行ったコンフィグレーション処理において得た情報に基づいて設定する。
【００３１】
２．PCI Expressスイッチ500内のアクセス制御部510は、EP600に対するアクセス状況を判定し、判定結果に応じた応答を問い合わせ元の仮想OS#1に返す。より具体的には、アクセス制御部510内の受信手段511は、仮想OS#1からのアクセス可否問い合わせを受信すると、それを判定手段512に渡す。判定手段512は、アクセス状況記憶部513に設けられている、PCI Expressスイッチ500に接続されている各EPに対応する領域の内の、アクセス可否問い合わせ中のデバイス番号に対応するEPに割り当てられている領域を参照する。そして、上記領域に「アクセス中」が記録されている場合には、問い合わせ元の仮想OS#1に対してアクセス不可を通知する。これに対して、「未アクセス」が記録されている場合には、問い合わせ元の仮想OS#1に対してアクセス許可を通知する。この例の場合、EP600をアクセスしている仮想OSが存在せず、上記領域の記憶内容が「アクセス可」になっているので、判定手段512は、仮想OS#1に対してアクセス許可を通知することになる。なお、前述したように、該当するアクセス状況情報が「未アクセス」であっても、仮想OS#1に対してアクセス許可を通知してから所定時間が経過するまでの間は、他の仮想OSからアクセス可否問い合わせがあった場合、問い合わせ元にアクセス不可を通知する。
【００３２】
３．アクセス許可を受け取った仮想OS#1は、アクセス制御部510に対してシーケンスアクセス開始通知を送信する。アクセス制御部510内の判定手段512は、アクセス状況記憶部513に設けられているEP毎の領域の内の、EP600に対応する領域に記録されているアクセス状況情報を「アクセス中」に変更する。これ以降は、仮想OS#1からアクセス終了通知が送られてくるまで、他の仮想OSからアクセス可否問い合わせが送られてきても、アクセス制御部510は問い合わせ元の仮想OSに対してアクセス不可を通知することになる。
【００３３】
４．仮想OS#1は、EP600に対するシーケンスアクセスを開始する。より具体的には、仮想OS#1は、アクセス要求内容に応じてデバイスドライバが生成した一連の命令に、宛先として自仮想OS#1で認識しているEP600のアドレスを付加して送信する。宛て先として仮想OS#1が認識しているEP1のアドレスが付加された一連の命令は、PCI Expressスイッチ500を介してI/O仮想化に対応しているEP600に渡される。EP600内のVF#1〜#Nの内、問い合わせ元の仮想OS#1に対応するVF#1は、自身が保持しているアドレス情報と上記宛先アドレスとが一致するので、上記一連の命令をPF800に渡す。PF800は、渡された一連の命令に従ったデータを出力ポートから出力する。
【００３４】
５．仮想OS#1がシーケンスアクセスを実施している間に、他の仮想OS#2においてEP600に対するアクセス要求が発生すると、仮想OS#2においても仮想OS#1と同様に、アクセス制御部510に対してアクセス可否問い合わせを送信する。
【００３５】
６．アクセス制御部510内の判定手段512は、仮想OS#2からのアクセス可否問い合わせを受信手段511を介して受け取ると、アクセス状況記憶部513に設けられているEP毎の領域の内、EP600に対応する領域を参照する。この例の場合、上記領域には「アクセス中」が記録されているので、判定手段512は問い合わせ元の仮想OS#2に対してアクセス不可を通知する。この通知を受けた仮想OS#2は、一定の時間をおいて再びアクセス可否問い合わせをアクセス制御部510に対して送信する。尚、仮想OS#2は、アクセス不可が通知された場合、EP600に対してシーケンスアクセスを行う際に利用する一連の命令をデバイスドライバを利用して生成しておき、それを自身のアドレス空間に保存しておくようにしても良い。そして、アクセス制御部510からアクセス許可が通知されている場合には、上記保存してある一連の命令を利用してEP600に対するシーケンスアクセスを行うようにしても良い。
【００３６】
７．仮想OS#1によるEP600に対するシーケンスアクセスは、仮想OS#2のアクセス可否問い合わせが行われた後も継続して行われる。
【００３７】
８．仮想OS#1は、EP600に対するシーケンスアクセスが終了すると、アクセス制御部510に対してアクセス終了通知を送信する。このアクセス終了通知には、シーケンスアクセスを終了するEP600のデバイス番号が含まれている。アクセス制御部510内の判定手段512は、受信手段511を介して上記アクセス終了通知を受け取ると、アクセス状況記憶部513に設けられているEP毎の領域の内の、上記アクセス終了通知中のデバイス番号に対応するEPに割り当てられている領域の記憶内容を「未アクセス」に変更する。これにより、EP600は他の仮想OSからアクセス可能な状態になる。
【００３８】
９．仮想OS#2は、アクセス不可通知を受信してから一定時間が経過すると、再び、EP600をアクセス対象EPにしたアクセス可否問い合わせをアクセス制御部510に対して送信する。
【００３９】
10．仮想OS#2からのアクセス可否問い合わせを受信したアクセス制御部510内の判定手段512は、この時点では、アクセス状況記憶部513中のEP600に対応する領域には、アクセス状況情報とした「未アクセス」が記録されているので、問い合わせ元の仮想OS#2に対してアクセス許可を通知する。
【００４０】
11．アクセス許可を受け取った仮想OS#2は、アクセス制御部510に対してシーケンスアクセス開始通知を送信する。アクセス制御部510内の判定手段512は、アクセス状況記憶に記録されている、EP600についてのアクセス状況情報を「アクセス中」に変更する。
【００４１】
12．仮想OS#2は、EP600に対するシーケンスアクセスを開始する。これにより、EP600では、シーケンスアクセスの内容に応じた処理が行われる。
【００４２】
13．仮想OS#2は、EP600に対するシーケンスアクセスが終了すると、アクセス制御部510に対してアクセス終了通知を送信する。このアクセス終了通知には、シーケンスアクセスを終了するEP600のデバイス番号が含まれる。アクセス制御部510内の判定手段512は、受信手段511を介して上記アクセス終了通知を受信すると、アクセス状況記憶部513中のEP600に対応する領域の記憶内容を「未アクセス」に変更する。
【００４３】
14．その後、仮想OS#Nにおいて、EP600に対するアクセス要求が発生すると、仮想OS#Nはアクセス制御部510に対してアクセス可否問い合わせを送信する。
【００４４】
15．アクセス制御部510内の判定手段512は、受信手段511を介して仮想OS#Nからのアクセス可否問い合わせを受信すると、アクセス状況記憶部513に設けられているEP毎の領域の内、仮想OS#Nがアクセス対象にしているEP600に対応する領域を参照する。この時点では、上記領域には「未アクセス」が記録されているので、判定手段512は、問い合わせ元の仮想OS#Nに対してアクセス許可を通知する。
【００４５】
16．アクセス許可を受け取った仮想OS#Nは、アクセス制御部510に対してシーケンスアクセス開始通知を送信する。アクセス制御部510内の判定手段512は、アクセス情報記憶部513のEP600に対応する領域に記録されているアクセス状況情報を「アクセス中」に変更する。
【００４６】
17．仮想OS#Nは、EP600に対するシーケンスアクセスを開始する。これにより、EP600では、シーケンスアクセスの内容に応じた処理が行われる。
【００４７】
18．仮想OS#Nは、EP600に対するシーケンスアクセスが終了すると、アクセス制御部510に対してアクセス終了通知を送信する。このアクセス終了通知には、シーケンスアクセスを終了するEPを示す情報としてEP600のデバイス番号が含まれている。アクセス制御部510内の判定手段512は、受信手段511を介して上記アクセス終了通知を受信すると、アクセス状況記憶部513中のEP600に対応する領域に記憶されているアクセス状況情報を「未アクセス」に変更する。
【００４８】
以上の一連のシーケンスアクセスにより、EP600は、先ず、仮想OS#1からのシーケンスアクセスの内容に従ったデータ1-1〜1-3を連続して出力し、次に、仮想OS#2からのシーケンスアクセスの内容に従ったデータ2-1を出力し、最後に、仮想OS#Nからのシーケンスアクセスの内容に従ったデータ3-1を出力することになる。
【００４９】
次に、図７と図１とを照らし合わせて、仮想OS#2がI/O仮想化に対応したEP600に対してシーケンスアクセスを行う場合の動作について説明する。なお、図７中の実線矢印S1〜S4は、以下に記述するS1〜S4に対応している。
【００５０】
S1.仮想OS#2においてEP600に対するアクセス要求が発生すると、仮想OS#2は、ルートコンプレックス300、PCI Expressスイッチ400を介して、EP600が接続されているPCI Expressスイッチ500内のアクセス制御部510にアクセス可否問い合わせを送信する。
【００５１】
S2.PCI Expressスイッチ500内のアクセス制御部510は、EP600に対するアクセス状況を判定し、判定結果に応じた応答を問い合わせ元の仮想OS#2に返す。今、例えば、EP600に対するアクセスを許可している仮想OSが存在していないとすると、アクセス制御部510は、アクセス許可を仮想OS#2に返す。
【００５２】
S3.アクセス許可を受け取った仮想OS#2では、アクセス制御部510に対してシーケンスアクセス開始通知を送信する。
【００５３】
S4.その後、仮想OS#2は、EP600に対するシーケンスアクセスを実行する。
【００５４】
なお、上述した説明では、アクセス制御手段510内の判定手段512は、仮想OSからシーケンスアクセス開始通知が送られてきたタイミングで、アクセス状況記憶部513に記録されているアクセス状況情報の内、シーケンスアクセスを開始するEPに関するアクセス状況情報を「アクセス中」に変更するようにしたが、アクセス状況記憶部513に記録されている情報に基づいて、問い合わせ元の仮想OSに対してEPに対するアクセスを許可すると判定した時点においてアクセス状況情報を「アクセス中」に変更するようにしても良い。このようにした場合には、シーケンスアクセス開始通知は不要になる。但し、このようにした場合には、問い合わせ元の仮想OSに対してアクセス許可を通知した後、上記仮想OSに不具合が発生した場合、他の仮想OSがEP600をアクセスできなくなってしまう。そこで、このようなことを防ぐため、上記したようにした場合には、アクセス許可を問い合わせ元の仮想OSに通知した後、所定時間が経過してもEP600に対するシーケンスアクセスが開始されなかったら、アクセス状況情報を「未アクセス」に変更するようにする。
【００５５】
図８を参照すると、図２に示したPCI Expressスイッチ500の代わりに実装可能なPCI Expressスイッチ500aが示されている。PCI Expressスイッチ500との相違点は、PCI-PCIブリッジ542の代わりに内部EP560を備えている点と、PCI Expressポート532を備えていない点と、コンフィグレーション情報記憶部520のアクセス制御レジスタ機能部523には、アクセス制御部510の所在を示す情報として、内部EP560の所在を示す情報が記録されている点と、アクセス制御部510内の受信手段511では、宛先が内部EP560を指し示すものになっているアクセス可否問い合わせ、アクセス終了通知およびシーケンスアクセス開始通知を判定手段512に渡す点である。
【００５６】
また、上述した説明では、同一のコンピュータ上に搭載されている複数の仮想OS200-1〜200-NでI/O仮想化に対応しているEP600を共有する場合について説明したが、ハードウェア的には完全に分かれている複数のコンピュータに搭載されているOSからEP600を共有するようにすることもできる。
【００５７】
[実施の形態の効果]
本実施の形態によれば、Ｉ／Ｏ仮想化に対応したEP600の利用効率を高いものにすることができる。その理由は、PCI Expressスイッチ500に設けられているアクセス制御部510が各仮想OS#1〜＃Nからのアクセス可否問い合わせを調停し、EP600では、一切調停処理を行う必要がないからである。
【符号の説明】
【００５８】
100  CPU
200-1〜200-N  仮想OS
300  ルートコンプレックス
400,500  PCI Expressスイッチ
510  アクセス制御部
511  受信手段
512  判定手段
513  アクセス状況記憶部
520  コンフィグレーション情報記憶部
521  PCIコンフィグレーション空間
522  PCI Express拡張コンフィグレーション空間
523  アクセス制御レジスタ機能部
530〜532  PCI
Expressスイッチ
540〜542  PCI-PCIブリッジ
550  PCIバス
560  内部EP
【図１】
2011248551.tif 000003
【図２】
2011248551.tif 000004
【図３】
2011248551.tif 000005
【図４】
2011248551.tif 000006
【図５】
2011248551.tif 000007
【図６】
2011248551.tif 000008
【図７】
2011248551.tif 000009
【図８】
2011248551.tif 000010