特权指令与虚拟化

    CPU发展到x86的时代,其工作模式已经不是简单的只有实时模式(real mode)了。现在用的CPU都支持四种保护级别,分别对应这不同的CPU模式,即ring0,ring1,ring2,ring3。windows只使用了ring0和ring3.操作系统核心使用ring0,其他应用的应用程序基本都是在ring3级别上。

    虚拟化技术中,操作系统将安装在虚拟机中。那么就有个问题需要关注:虚拟机中的操作系统的特权指令(即运行在ring0级别的内容)怎么处理的呢?

    先说特权指令为什么要区别对待。特权指令顾名思义就是重要性很大的指令,这些指令的胡乱使用会造成系统的紊乱,系统需要严格的控制特权指令的使用。这就是为什么特权指令需要区别对待的原因。

    我所知道的虚拟化中特权指令的处理有两种方法:

    1.在宿主机应用中重写虚拟机中系统的特权指令;

    2.提供一套模拟的特权指令集供虚拟机中的系统使用;

    先说第一种方法,在宿主机中重写虚拟机中系统的特权指令意思是说,虚拟机安装在宿主机中,宿主机中的应用(这个应用一般就是虚拟机,当然也可以是其他的)在捕获到虚拟机中的系统需要运行特权指令的时候就截止这个指令,然后将这个指令交由宿主机去执行(local implemenation)。这样的替换策略,使得虚拟机中可以直接运行不用修改的系统,现在的VMware,Workstation,Parallels Workstation和VirtualBox虚拟机就是采用的这种策略。所以我们这些虚拟软件虚拟出来的虚拟机中可以直接安装我们在物理机中安装的系统。

    再说第二种方法,提供一套模拟的特权指令集供虚拟机中的系统使用意思是说,虚拟软件提供一组API,这组API提供特权指令服务,当需要使用特权指令的时候,只需要调用这个API即可,这样避免了特权指令的胡乱使用。这里需要注意,为了执行特权指令,必须调用这组API,顾名思义,虚拟机中的系统需要执行特权指令的时候也要调用这个API。这样引入了新的问题,那就是原系统不一定支持这组API,这样一来就需要修改系统了。Xen和ESX Server就是采用的这种策略处理特权指令的。

    在Xen中,Xen的Hypervisor运行在ring0,注意就是说Hypervisor是有执行特权指令的权限的,Xen拥有一组虚拟的AP(其实就是虚拟设备接口)I,当虚拟机需要执行特权指令时,直接调用API完成。这样保证了系统的稳定。这里说明一点,虚拟机的系统的CPU等级是低于Xen的。

   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值