引き続き、ドメインのスケジューリングの仕組みを見ていきます。今回は、Xen上のゲストOSとして動作するLinuxカーネルでは、プロセス切り替えをどのように実現しているのかを解説します。
Xenの準仮想化ドメインで動作するLinuxカーネルは、Xenと協調動作します。Linuxカーネルは、自身のコンテキスト操作を行うときハイパーバイザー呼び出しでXenに処理を依頼します。また、Linuxカーネルがアイドル状態になったときは、実行権の放棄をハイパーバイザー呼び出しでXenに伝えます。
ドメイン内のゲストOSとして、Linuxカーネルが動作可能です。Linuxカーネルは、その上で動作する複数のプロセスを切り替えながら実行しますが、ネイティブのLinuxカーネルでは、CPUを直接操作してプロセスのコンテキストを切り替えています。では、Xen上のゲストOSとして動作するLinuxカーネルでは、プロセス切り替えをどのように実現しているのでしょうか?
Xenの仮想マシン内で動作するゲストOSがプロセスの切り替えを実現するためには、仮想CPU上のコンテキストを入れ替える必要があります。ゲストOSとして動作するLinuxカーネルでは、ハイパーバイザー呼び出しを通して、Xenにこの切り替え処理を依頼します。
ゲストOSとして動作するLinuxカーネルは、ネイティブなLinuxカーネルと同様、switch_to関数(リスト1)で浮動小数点演算レジスタ、カーネルスタック、I/Oポートへのアクセス権などを切り替えます。各処理は次のようになります。
また、仮想空間の管理情報はswitch_mm関数で切り替えます。この情報はXenの管理下にあり、プロセス空間の操作であってもXenに操作を依頼する必要があります(図1)。これらについては、メモリ管理の回に詳しく説明します。
Copyright © ITmedia, Inc. All Rights Reserved.