HVM的虚拟处理器资源管理
2015-10-29 15:35
330 查看
概述
在处理器资源的管理中,HVM支持如下的机制:
细粒度的系统时钟
搁置处理器执行的能力
创建新处虚拟处理器的能力
如何访问HVM的时钟
HVM支持细粒度的时钟,我们可通过虚拟指令vmgettime以及vmsettime来进行访问:
Vmgettime指令返回一个代表当前时间的64位值
Vmsettime指令重置64位值的时钟
标注:HVM的实现可以随意定义时钟对应的是CPU时间还是时钟计时单元。举例来说,如果虚拟设备监测器定制一个虚拟CPU,如果虚拟CPU不再执行指令,那么时钟有可能不会继续增值。
如何搁置处理器
HVM上的访客模式程序可通过两种方式搁置虚拟处理器的执行:
虚拟指令vmwait
虚拟指令vmyield
Vmwait搁置执行将挂起一个中断事件。当下一个事件处理后,终结事件服务的虚拟指令vmrte将在vmwait指令后导致一个指令重新开始。
Vmyield可暂时搁置执行,独立于任何虚拟处理器事件。它导致VMM在同等或更高的优先级上安排其他虚拟处理器,不需要优先权。
标注:在试图去取得一个spinlock时,推荐使用访客操作系统的yield指令。这保证那些拥有spinlock的虚拟处理器能够有机会执行。
如何创建一个虚拟处理器
访客模式程序能够通过虚拟指令vmstart来创建一个新的虚拟处理器实例。新创建的实例可与已有的处理器实例并行运行。
新的虚拟处理器实例在访客模式下执行,从vmstart的参数中对特定的地址进行取指令。新的实例使用虚拟处理器实例的相同内存映射。
每个虚拟处理器有一个独特的32位标志位,它的范围内根据下列公式进行确定:
0 .. (max_number_of_supported_virtual_processors - 1)
一个虚拟处理器ID值不可能为-1.初始虚拟处理器实例有一个为零的虚拟处理器ID。虚拟处理器上的程序可以通过执行虚拟指令vmvpd来访问处理器ID。
Vmstart的取反是虚拟指令vmstop。当虚拟处理器执行vmstop时,如下的事件将会发生:
虚拟处理器将会被终止
Vmstop后的指令将不会被提交
虚拟处理器相关的资源将被释放,并将其对之后创建的虚拟处理器实例可用
处理器管理的虚拟器指令
下图总结了用于虚拟器资源管理的虚拟指令
在处理器资源的管理中,HVM支持如下的机制:
细粒度的系统时钟
搁置处理器执行的能力
创建新处虚拟处理器的能力
如何访问HVM的时钟
HVM支持细粒度的时钟,我们可通过虚拟指令vmgettime以及vmsettime来进行访问:
Vmgettime指令返回一个代表当前时间的64位值
Vmsettime指令重置64位值的时钟
标注:HVM的实现可以随意定义时钟对应的是CPU时间还是时钟计时单元。举例来说,如果虚拟设备监测器定制一个虚拟CPU,如果虚拟CPU不再执行指令,那么时钟有可能不会继续增值。
如何搁置处理器
HVM上的访客模式程序可通过两种方式搁置虚拟处理器的执行:
虚拟指令vmwait
虚拟指令vmyield
Vmwait搁置执行将挂起一个中断事件。当下一个事件处理后,终结事件服务的虚拟指令vmrte将在vmwait指令后导致一个指令重新开始。
Vmyield可暂时搁置执行,独立于任何虚拟处理器事件。它导致VMM在同等或更高的优先级上安排其他虚拟处理器,不需要优先权。
标注:在试图去取得一个spinlock时,推荐使用访客操作系统的yield指令。这保证那些拥有spinlock的虚拟处理器能够有机会执行。
如何创建一个虚拟处理器
访客模式程序能够通过虚拟指令vmstart来创建一个新的虚拟处理器实例。新创建的实例可与已有的处理器实例并行运行。
新的虚拟处理器实例在访客模式下执行,从vmstart的参数中对特定的地址进行取指令。新的实例使用虚拟处理器实例的相同内存映射。
每个虚拟处理器有一个独特的32位标志位,它的范围内根据下列公式进行确定:
0 .. (max_number_of_supported_virtual_processors - 1)
一个虚拟处理器ID值不可能为-1.初始虚拟处理器实例有一个为零的虚拟处理器ID。虚拟处理器上的程序可以通过执行虚拟指令vmvpd来访问处理器ID。
Vmstart的取反是虚拟指令vmstop。当虚拟处理器执行vmstop时,如下的事件将会发生:
虚拟处理器将会被终止
Vmstop后的指令将不会被提交
虚拟处理器相关的资源将被释放,并将其对之后创建的虚拟处理器实例可用
处理器管理的虚拟器指令
下图总结了用于虚拟器资源管理的虚拟指令
相关文章推荐
- APP测试要点
- 学习windows驱动(队列)
- 10个最火的iOS面试题
- Video Surveillance - POJ 1474(判断是否存在内核)
- Java程序员必看--扩展鼠标右键菜单功能
- js计算日期的相关函数
- js实现跨域的4种实用方法原理分析
- 自旋锁
- mybatis+spring cannot find *Mapper bean
- Android Menu的overflow在不同版本上的控制显示
- How to Generate a Good Word Embedding?
- 股票中5日均线连续金叉10日均线选股法
- linux mongodb3安装
- LeetCode---Convert Sorted Array to Binary Search Tree
- 【bzoj4149】[AMPPZ2014]Global Warming
- 掌握JS中的“this” (二)
- 扑克之星周日百万赛的顶尖玩家们!
- CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (四)问题汇总
- 简单的CXF实例
- window下连接hadoop集群基础超详细版