4

仮想マシンで使用した場合、システムコールはどのように処理されるのでしょうか。仮想化カーネルを介して、(物理マシンの)「実際の」カーネルに何らかの信号を送信しますか?

件名をググったのですが、何も見つからないようです。前もって感謝します。

4

2 に答える 2

7

これを処理するための3つの一般的な戦略があり
ます。1。ハイパーバイザーがゲストからのシステムコールをトラップする:ハイパーバイザーは、特権命令(実質的にシステムコール)がゲストOS自体からのものか、ゲストOS内のユーザースペースプログラムからのものかをチェックします。前者の場合、ハイパーバイザーは、仮想化の指示を介してではありますが、実際に呼び出しをハードウェアに転送します。後者の場合、ハイパーバイザーは呼び出しをゲストOSにリダイレクトしてから、続行します。
2.バイナリ変換:ここで、ハイパーバイザーは「基本ブロック」と呼ばれるゲストOSからのコードをチェックし、特権命令をスキャンします。それらが見つかると、システムコールに対する独自のプロシージャへの呼び出しに置き換えられます。次に、これらのブロックのキャッシュに進み、最終的にそのようなブロックのセット全体を構築します。
3.準仮想化:ここでは、ゲストOS自体が変更され、ハードウェアを呼び出す代わりに、ハイパーバイザーを呼び出してハードウェアI/Oを実行するAPIが提供されます。

出典:AndrewTanenbaumによるModernOperating Systems

于 2014-08-25T11:44:07.427 に答える
0

すべてのハードウェアが仮想化されている仮想マシンでは、実際のハードウェアと同じように機能します。アーキテクチャが持つすべてのシステムコール命令を通過します。ハイパーバイザーは、仮想プロセッサ上で命令を実行します。

ただし、Wineのようなエミュレーション層では、PE実行可能ファイルのシステムコールはLinuxカーネルAPIのシステムコールにマップされます。

于 2013-01-19T17:53:02.990 に答える