现在我正在做一个关于 qemu-kvm 和 linux 任务调度程序的项目。我知道每个 VCPU 都是 qemu 创建到 linux 操作系统的正常任务。然后我尝试执行 qemu 命令,看看任务是如何创建的。我使用 strace 来跟踪所有的系统调用。没有像“fork”或“pthreadcreate”这样的东西。但我已经看到了:
open("/dev/kvm", O_RDWR|O_LARGEFILE) = 3
ioctl(3, KVM_GET_API_VERSION, 0) = 12
ioctl(3, KVM_CHECK_EXTENSION, 0x19) = 0
ioctl(3, KVM_CREATE_VM, 0) = 4
ioctl(3, KVM_CHECK_EXTENSION, 0x4) = 1
ioctl(3, KVM_CHECK_EXTENSION, 0x4) = 1
ioctl(4, KVM_SET_TSS_ADDR, 0xfffbd000) = 0
ioctl(3, KVM_CHECK_EXTENSION, 0x25) = 0
ioctl(3, KVM_CHECK_EXTENSION, 0xb) = 1
ioctl(4, KVM_CREATE_PIT, 0xb) = 0
ioctl(3, KVM_CHECK_EXTENSION, 0xf) = 2
ioctl(3, KVM_CHECK_EXTENSION, 0x3) = 1
ioctl(3, KVM_CHECK_EXTENSION, 0) = 1
ioctl(4, KVM_CREATE_IRQCHIP, 0) = 0
ioctl(3, KVM_CHECK_EXTENSION, 0x1a) = 0
所以看起来它打开了设备 /dev/kvm 并做了一些 ioctl 系统调用。我相信这是实际创建 VM 线程的地方。对?我是操作系统的新手,如果有人能给我一些线索,我将不胜感激:>谢谢