Armv8-A虚拟化手册(4)

7. 通用定时器的虚拟化

        ARM架构包括通用定时器,它是每个处理器里一组标准有用的定时器。通用定时器包含一组与通用系统计数器相比较的比较器。当该值等于或小于系统计算器时,比较器产生一个中断。在下图中,我们可以看到系统中的通用定时器,它包含比较器和计数器模块。

        上图描述了一个hypervisor管理两个虚拟CPU(vCPU)的系统:

note: 在这个例子中,我们忽略了执行hypervisor在vCPU之间进行上下文切换的过度。

        在4ms的物理时间或墙上时间之后,每个vCPU运行2ms。如果vCPU0在T=0时建立起比较器,并在3ms后产生一个中断,你会期望中断已经产生了么?

        相反的,在2ms的虚拟时间后你希望产生一个中断么,vCPU经历这个时间,或在2ms的墙上时间?

        ARM架构提供能力做这两者,依赖于使用哪种虚拟化。让我们看它是怎么做的。

        执行在vCPU的软件访问两个定时器:

(1)EL1物理定时器

(2)EL1虚拟定时器

        EL1物理定时器与系统计数器模块的计数做比较。使用该定时器给出墙上时钟。

        EL1虚拟定时器与虚拟计数做比较。虚拟计数为物理计数减去一个偏移。hypervisor指明了当前调度的vCPU的寄存器中偏移。当vCPU还没有被调度时,这允许它隐藏时间。

        为了描述这个概念,我们可以扩展上面的例子,如下图:

        在6ms的周期内,每个vCPU运行3ms。hypervisor可以使用偏移寄存器呈现一个仅显示vCPU运行的虚拟计数。或者hypervisor可以保持偏移为0,这意味着虚拟时间与物理时间一样。

NOTE: 这个例子显示系统计数的频率为1ms。特别是,这个频率值不是很可能。我们建议你设置系统计数来使用一个1MHZ和50MHZ之间的频率。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值