現在我正在做一個關於qemu-kvm和linux任務調度程序的項目。我知道每個VCPU是由qemu創建到linux操作系統的正常任務。然後我嘗試執行qemu命令以查看該任務是如何創建的。我使用strace來跟蹤所有的系統調用。還有像「叉」或「pthreadcreate」沒有的事。但我已經看到了這一點:qemu-kvm如何在內部創建VM線程?
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系統調用。我相信這是虛擬機線程實際創建的地方。對?我對操作系統的東西很陌生,如果有人能給我一些線索,我會很感激:>謝謝
虛擬機不是一個線程。 – duskwuff
@duskwuff但是從我所瞭解到的情況來看,在KVM中,虛擬機中的每個VCPU都是主機所看到的線程linux –
不完全是這樣。每個VCPU只是一個單獨的可運行對象。有關KVM ioctl的詳細信息,請參閱http://www.mjmwired.net/kernel/Documentation/kvm/api.txt。 – duskwuff