Armv8-A虚拟化手册(4)

7. 通用定时器的虚拟化

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

Armv8-A虚拟化手册(4)

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

Armv8-A虚拟化手册(4)

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

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

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

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

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

(1)EL1物理定时器

(2)EL1虚拟定时器

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

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

Armv8-A虚拟化手册(4)

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

Armv8-A虚拟化手册(4)

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

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

上一篇:1_表单


下一篇:Angular FormControl Example | Angular 9 FormControl (理解angular formControl)