Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 指令集模拟背后的基本思想是什么?_Assembly_Virtual Machine_Linux Device Driver_Kvm_Powerpc - Fatal编程技术网

Assembly 指令集模拟背后的基本思想是什么?

Assembly 指令集模拟背后的基本思想是什么?,assembly,virtual-machine,linux-device-driver,kvm,powerpc,Assembly,Virtual Machine,Linux Device Driver,Kvm,Powerpc,我不熟悉虚拟化,并试图理解指令集仿真背后的基本思想 我正在关注e500核心指令集仿真 内核代码中的这个特殊的“kvmppc_core_emulate_mtspr()”正在模拟powerpc core的mtspr指令 我想知道我们在这个函数中到底在做什么来模拟mtspr,以及为什么根据e500_emulate只模拟两条指令(mtspr和mfspr)。c是直接执行目标程序中尽可能多的指令的艺术,而无需模拟。支持硬件辅助虚拟化的处理器的设计使得只有少数特权指令不能直接执行。由于处理器直接执行目标代码

我不熟悉虚拟化,并试图理解指令集仿真背后的基本思想

我正在关注e500核心指令集仿真

内核代码中的这个特殊的“kvmppc_core_emulate_mtspr()”正在模拟powerpc core的mtspr指令

我想知道我们在这个函数中到底在做什么来模拟mtspr,以及为什么根据e500_emulate只模拟两条指令(mtspr和mfspr)。c是直接执行目标程序中尽可能多的指令的艺术,而无需模拟。支持硬件辅助虚拟化的处理器的设计使得只有少数特权指令不能直接执行。由于处理器直接执行目标代码,因此当其中一条指令出现时,它必须有一种机制将控制权转移回虚拟机监控程序,虚拟机监控程序可能希望在软件中模拟特权指令应该产生的效果 使其看起来像是直接执行的目标程序。这是 如何在虚拟机监控程序中运行未经修改的操作系统(不是为此而设计的)


只模拟两条指令,因为只需要模拟这两条指令。其他的由处理器直接全速执行,无需仿真。

感谢Pascal的快速响应,这很有帮助。下面是几个后续查询,我们如何决定需要模拟哪些特定指令,以及如何非常具体地知道特定的powerpc内核提供了硬件辅助虚拟化?另外,如果我理解正确,每当来宾执行这些特权模拟指令控制时,这些特权模拟指令控制将传输回运行在其上的虚拟机监控程序host?@amitsightomar对于第一个问题,需要模拟的指令尝试访问硬件,因此虚拟机监控程序必须介入并模拟该硬件。或者,指令可能会命令MMU更改物理地址和逻辑地址之间的映射,而虚拟机监控程序可能会回答“好的,映射已更改,据您所知”,而只有目标代码的视图。我很惊讶你居然只找到了两条模拟指令。关于第二个问题,我对PowerPC了解不够:你也许应该作为一个新问题提问。好的@Pascal,我觉得第一个问题的答案有点让我难以理解,可能是因为我对这个问题的理解有限。如果不占用你太多时间,您能给我举一个关于任何体系结构的例子吗?@amitsightomar如果您将模拟所有指令的指令模拟器与只模拟部分指令并尽可能使用硬件加速的源代码进行比较,应该会更清楚