Xenハイパーバイザーはハードウェアで発生した事象を、割り込みとして受け取ります。Xen環境では、ハードウェア割り込みを幾つかの異なる目的に利用しています。
実割り込みは、事象の通知元によって3つに分類でき(図3)、これを「割り込み種別」と呼びます。
グローバル割り込みは、システム全体に対して発生する割り込みです。割り込みを受け付けるCPUは基本的にどれでも構いません。各種外部デバイスが生成する割り込みをグローバル割り込みとして受け取ります。Xen環境ではこの割り込みを、大きく分けて2種類の用途に利用しています。
1つは、Xen自体が利用する割り込みです。Xen 3.0.1では、グローバルな時計の割り込みと、コンソール割り込みに利用しています。
もう1つは、ドメインに転送する割り込みです。Xenでは、ストレージやネットワークインタフェースなどのデバイスをXenハイパーバイザーの中で管理しません。ほとんどすべてのデバイス管理を、ドメイン0と呼ばれる特別なドメインに任せています*。デバイスから割り込みを受け取ると、Xenハイパーバイザーは仮想割り込みに変換し、ドメイン0に転送します。
CPUローカル割り込みは、各CPUに独立して発生する割り込みです。各CPU固有の独立した処理を実現するために利用します。Xenでは、ドメインを再スケジューリングするためのローカルタイマー割り込み*に利用しています。
最近のアーキテクチャでは、SMPの構成を取っているときほかのプロセッサに対して割り込みを送ることができ、これを「プロセッサ間割り込み」と呼びます。プロセッサ間割り込みは、ほかのCPUが管理している資源の状態を変更してもらいたいときや、処理を依頼したいときに利用するもので、次の2つのケースで利用されています。
仮想空間の構造を変更したとき、ほかのCPUにもそのことを通知し、古い仮想空間情報を破棄してもらう必要があります。Xen 3.0では、この際にプロセッサ間割り込みを使用しています。
異なる実CPU上で動作している仮想CPUに事象を通知する際、プロセッサ間割り込みを利用します。Xen 3.0では、各ドメイン内で動作するゲストOSが事象の通知を簡単に行えるよう、仮想CPU間で通信するための汎用的な仕組みを用意しており、これを「イベントチャネル」と呼びます。
通常の割り込みは、マスクすることによってCPUが割り込みを受け取ることを抑制できますが、NMI(Non Maskable Interrupt)はマスクすることができません。CPUがどのような状態にあっても、NMIが発生すると、強制的に登録されているハンドラに制御が移ります。Xenハイパーバイザーは、この割り込みを「ハードウェアの致命的なエラーを通知する」「ウォッチドッグタイマーの実現」といった2つ目的で利用しています。
現在はドメイン0のみだが、近い将来ほかのドメインからもデバイスを制御できるようにしようとしている。
「時間管理」の回に詳しく説明。
Copyright © ITmedia, Inc. All Rights Reserved.