VT-xとかAMD-Vとかって,なんでいるん?

VMX(VT-xとかAMD-Vとか)ってなんで必要なのか,わからなかったので,調べてた.

仮想マシンモニタは,効率的に処理したいので,仮想プロセッサで処理する内容を実プロセッサでそのまま処理したい.そうしたときに,単に加算するとかならいいとしても,レジスタとか触るとかいくつかの命令には問題があるらしい.

プロセッサのPSW触るとかは,OSがトラップして特権で動かすのでOK.

センシティブ命令ってのがヤバイらしい.例えばレジスタ触るPOP, PUSHとかの命令らしくて,CPUの状態を触るのに特権じゃなくてOKなので困る.どうヤバイかというと,仮想プロセッサなんて実はないので,あるかのようにゲストOSがCPUに命令を発行しても実行できない.しかもセンシティブ命令は特権じゃなくてOKで,ユーザモードで動くので,仮想マシンモニタがトラップできない.(仮想マシンモニタ的には,加算命令とかと区別がつかない)
なのでこれを解決しようとすると,(1)センシティブ命令を事前に書き換えるか,(2)実行時に書き換えるか,(3)センシティブ命令を特権命令にする(仮想マシンモニタでトラップしてエミュレートする)かの3択で,あとはよくある話.

結局のところ,仮想プロセッサなんて無いのに,ゲストOSがマジで存在しているかのように使ってくるので(当然のことだけれど),整合性が取れるようにしなきゃいけないので出来るようにしたって話.

と思った.


見てたページ:
Kernel/VM Advent Calendar 38日目: 仮想化可能なアーキテクチャの要件とx86 - yuyarinの日記
第4回 x86プロセッサにおけるプロセッサ仮想化:エンジニアなら知っておきたい仮想マシンのしくみ|gihyo.jp … 技術評論社
第5回 x86プロセッサの仮想化支援機能Intel VT & AMD-V:エンジニアなら知っておきたい仮想マシンのしくみ|gihyo.jp … 技術評論社