最近我一直在研究硬件支持的虚拟化。
我读了主机cpu的3种状态,因此是最常见的用户空间,内核空间和新的Guest状态。正如我从ps命令中看到的那样,有一个vm我启动的进程,以及一些'sub' - 虚拟机拥有的每个cpu的线程。我注意到当vm运行一些io相关程序时,将在主机上创建更多线程,我想这可能是qemu对硬件仿真的响应。
所以这里出现了我的问题:对于任何特定的时间(访客状态的时间,而不是其他两个),vcpu线程是否表示正在运行的guestOS进程(我的意思是'占用'和'排他')?就像物理cpu,对于用户空间中的任何给定时间,用户进程正在其上运行。 这可能听起来有点愚蠢,我只是想把它想出来进行进一步的研究。
使这个问题变得简单: 是在任何给定时间与某些guestOS进程关联的主机上运行的vcpu线程吗?
进一步简化: 当我说guestOS进程实际上直接在主机CPU上运行并作为普通的主机进程安排时,它是正确的吗?这两种进程之间的区别就是我们所谓的虚拟化?
也许我需要另一个线程来解决有关guestOS进程切换的一些问题,但在此之前,希望你们可以帮助我解决这个问题。
真诚 MeNok
答案 0 :(得分:0)
我在LQ上发布了这个问题并得到了答案。 http://www.linuxquestions.org/questions/linux-virtualization-90/a-guestos-process-occupies-vcpu-at-any-given-time-4175419271/
答案 1 :(得分:0)
VCPU不是主机中的主题。 KVM允许guest虚拟机直接在具有较少权限访客模式的物理CPU上运行。定时器中断将导致CPU从访客模式返回到主机模式并返回KVM。由于KVM是在内核模式下调度的,因此也应该在主机中安排guest虚拟机。