VM 操作系统如何在不被主机操作系统/CPU 终止的情况下发出特权操作码?

问题描述 投票:0回答:1

我的理解是主机操作系统在启动时关联并锁定某些 CPU 操作码/指令,以便只有主机操作系统可以使用它们。此外,CPU 架构也支持这一点。

如果一个程序冒犯并试图使用这些指令,CPU 将陷入陷阱并将控制权交还给操作系统,这将终止该程序。因此,一个程序使用 Syscalls() 来做这些事情。

当您虚拟化操作系统时,它不会发出系统调用(),它只会执行特权指令。按理说它会被主机操作系统终止。

操作码是如何虚拟化的?

operating-system virtual-machine cpu-architecture opcode
1个回答
1
投票

除了终止还有一个选择,那就是模拟和继续。

当硬件不支持但程序需要时,一些系统会模拟未对齐的加载和存储;类似于浮点指令和寄存器。因此,主机可以模拟一些事情,使其看起来像是硬件确实执行了该指令。仿真意味着更改程序的状态(根据需要更改 cpu 寄存器或内存),然后在错误指令后恢复程序。

处理页面错误的类似机制:加载、复制或以其他方式映射地址,然后继续程序——尽管对于这些,一旦页面可用,错误指令就会重新启动。

在那些环境中,特权指令和缺失指令故障(以硬件异常为例)至关重要,这样主机才能使用正确的语义进行仿真。硬件根据操作模式更改执行特权指令的行为,无论是用户还是管理员(或其他)。采取异常自动切换到另一种模式,从异常中恢复恢复原来的模式。

硬件方案可以帮助提高效率,例如,RISC V 为多个独立的特权级别定义了特定的指令和行为,因此可以允许某些特权操作而不会导致下一层出错。

© www.soinside.com 2019 - 2024. All rights reserved.