連載
» 2007年07月26日 08時52分 UPDATE

仮想マシンモニタ Xen 3.0解読室:ドメインのスケジューリング【後編】 (1/3)

引き続き、ドメインのスケジューリングの仕組みを見ていきます。今回は、Xen上のゲストOSとして動作するLinuxカーネルでは、プロセス切り替えをどのように実現しているのかを解説します。

[高橋浩和(VA Linux Systems Japan),ITmedia]

ゲストOSとしてのLinuxカーネル

 Xenの準仮想化ドメインで動作するLinuxカーネルは、Xenと協調動作します。Linuxカーネルは、自身のコンテキスト操作を行うときハイパーバイザー呼び出しでXenに処理を依頼します。また、Linuxカーネルがアイドル状態になったときは、実行権の放棄をハイパーバイザー呼び出しでXenに伝えます。

Linuxプロセスのコンテキスト切り替え

 ドメイン内のゲストOSとして、Linuxカーネルが動作可能です。Linuxカーネルは、その上で動作する複数のプロセスを切り替えながら実行しますが、ネイティブのLinuxカーネルでは、CPUを直接操作してプロセスのコンテキストを切り替えています。では、Xen上のゲストOSとして動作するLinuxカーネルでは、プロセス切り替えをどのように実現しているのでしょうか?

 Xenの仮想マシン内で動作するゲストOSがプロセスの切り替えを実現するためには、仮想CPU上のコンテキストを入れ替える必要があります。ゲストOSとして動作するLinuxカーネルでは、ハイパーバイザー呼び出しを通して、Xenにこの切り替え処理を依頼します。

リスト1

 ゲストOSとして動作するLinuxカーネルは、ネイティブなLinuxカーネルと同様、switch_to関数(リスト1)で浮動小数点演算レジスタ、カーネルスタック、I/Oポートへのアクセス権などを切り替えます。各処理は次のようになります。

編集部注:リスト1には多くの注釈線が含まれているため、画像として用意しました。上記アイコンをクリックいただくことでご覧いただけます
  • 浮動小数点レジスタの遅延切り替えの依頼(B1)
  • カーネルスタックの切り替え(B2)。システムコール発行時、(仮想)割り込み発生時に利用するカーネルスタックの底を設定する
  • スレッドごとの固有データ(Thread-Local Storage)にアクセスするため、ディスクリプタを切り替える(B3)
  • I/Oポートへのアクセス権の設定(B4、B5)
  • ハイパーバイザー呼び出し(B6)。複数の処理依頼をまとめて呼び出すためのマルチコールと呼ばれる仕組みを利用している。ここでは、B1〜B5の処理を1つにまとめて、Xenに対するハイパーバイザー呼び出しとしている
  • セグメントレジスタの切り替え(B7)
  • デバッグレジスタの切り替え(B8)。現在の実装では、一つ一つがハイパーバイザー呼び出しとなっている

 また、仮想空間の管理情報はswitch_mm関数で切り替えます。この情報はXenの管理下にあり、プロセス空間の操作であってもXenに操作を依頼する必要があります(図1)。これらについては、メモリ管理の回に詳しく説明します。

図1 図1 ゲストOSとプロセスの空間

関連キーワード

カーネル | Linux | オープンソース | 仮想化 | Xen


       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

ピックアップコンテンツ

- PR -

注目のテーマ

マーケット解説

- PR -