看操作系统虚拟化原理总结篇——VMCS详解

1.VMCS的组成

有三部分:偏移0处是版本标识,偏移4处是中止指示,偏移8处是VMCS的数据域,其中第三部分才是我们要考虑的重点。它是被保存在内存中的。


2,为什么要引入VMCS

这完全是由于Intel VT_x来引起的,它主要被CPU进行操作,然后保存着VCPU的相关寄存器的信息和内容。可以这么理解,一个物理CPU通过VMCS能够获得每个虚拟CPU的各种信息。另外VT_x也提供了不少指令用于CPU去直接访问VMCS。


3,VMCS数据域的详细分析:

包含了6个域,客户机状态域,宿主机状态域,VM_ENTRY控制域,VM_EXECUTION控制域,VM_EXIT控制域,VM_EXIT信息域。

下面逐一分析:

客户机状态域用户保存在非根模式下CPU的状态,当发生VM_Entry的时候,CPU自动将客户机的状态保存和加载到CPU中,即表示从VMM的根模式进入非根模式。

当发生VM_Exit的时候 ,CPU自动将CPU的状态保存回客户机状态域。

通俗的理解,客户机状态域就是VCPU的运行的状态值,退出需要保存,运行需要加载。而这些具体的状态在代码中的表示就是 CR0,CS SS,DS等寄存器。


宿主机状态域,理解前面的客户机状态域,这个就好办了。只是这里有点不同的是,发生VM_exit的时候是被恢复,但是在VM_ENTRY的时候却不用保存,这是因为宿主机的状态一般是不需要改变的。


VM_Entry控制域是指CPU由根模式到非根模式。也即是CPU从VMM模式切换到客户机模式,在VMM发起之前,需要设置好VMCS相关域的内容,然后执行VM_entry指令。并且这个时候VMM可以通过修改VMCS中的域的信息,来给客户机注入一个虚拟中断。


VM_Exit控制域,是指CPU从非根模式切换到根模式,即从客户机模式切换到VMM模式。那么什么情况会引起这种模式的转换呢?包括之前的敏感指令,中断啊,或者对IO操作等可以引起这种转换。


VM_EXECUTION控制域,这个域控制着VCPU运行时的一些行为,如执行某些敏感指令是否会发生VM-Exit 。因此这个域的取值主要是取决于VMM对于相应敏感指令的虚拟化策略。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值