超级调用参考
RVM 使用准虚拟化技术来减小运行时间消耗和内存消耗,提供一系列超级调用 (hypercall)来提供敏感的特权级操作:控制台输出、虚拟中断控制、虚拟 中断映射、事件通道、休眠与看门狗管理。
| 超级调用 | 调用号 | 功能描述 |
|---|---|---|
| RVM_HYP_SPURIOUS | 0 | 伪超级调用,忽略(定时器中断先于请求抵达时产生) |
| RVM_HYP_PUTCHAR | 1 | 打印一个字符到控制台 |
| RVM_HYP_REBOOT | 2 | 重启当前虚拟机 |
| RVM_HYP_INT_ENA | 3 | 开启虚拟机中断 |
| RVM_HYP_INT_DIS | 4 | 关闭虚拟机中断 |
| RVM_HYP_VCT_PHYS | 5 | 将虚拟机虚拟中断与物理中断映射登记 |
| RVM_HYP_VCT_EVT | 6 | 将虚拟机虚拟中断与事件通道映射登记 |
| RVM_HYP_VCT_DEL | 7 | 删除一个虚拟中断映射 |
| RVM_HYP_VCT_LCK | 8 | 锁定虚拟机中断映射表 |
| RVM_HYP_VCT_WAIT | 9 | 休眠虚拟机直至中断到来 |
| RVM_HYP_EVT_ADD | 10 | 为虚拟机增加一个事件源的发送能力 |
| RVM_HYP_EVT_DEL | 11 | 删除虚拟机对一个事件源的发送能力 |
| RVM_HYP_EVT_SND | 12 | 向一个事件通道发送事件 |
| RVM_HYP_WDG_CLR | 13 | 启动并喂看门狗 |
说明
- 虚拟屏蔽与物理屏蔽。
CPSID/BASEPRI只屏蔽物理中断,对虚拟中断 送达没有任何作用。客机必须使用RVM_HYP_INT_ENA/RVM_HYP_INT_DIS(或其 C 封装RVM_Virt_Int_Unmask()/RVM_Virt_Int_Mask())控制虚拟 中断的送达。 - 空闲停车。 用户手册(§4.4.3)要求客机空闲线程反复调用
RVM_HYP_VCT_WAIT(超级调用 9):它挂起用户线程并将其移出运行队列, 直到下一个虚拟中断到来——这就是阻止空闲客机空转烧 CPU 的机制。该调用 是透明挂起——在调用点恢复、不改内核状态、也绝不在 RTOS 意义上阻塞。 各客机通过自己的官方空闲钩子接入(vApplicationIdleHook、OS_AppIdleTaskHookPtr、rt_thread_idle_sethook、djy_set_idle_hook、klt_set_idle_hook)。 - 事件通道。 超级调用 5/6/10/11/12 构成虚拟机间通信机制:虚拟中断 映射到事件通道,发送能力按虚拟机授予——通信设计详见 用户手册。
