이제 qemu-kvm 및 linux task scheduler.I에 대한 프로젝트를 수행하고 있습니다. 각 VCPU는 Linux OS에 대해 qemu가 생성 한 일반적인 태스크입니다. 그런 다음 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 시스템 콜을했던 것으로 보인다. 나는 이것이 VM 스레드가 실제로 생성되는 곳이라고 생각한다. 권리? 나는 OS를 처음 접했고 누군가가 나에게 단서를 줄 수 있다면 고맙겠습니다.> 감사합니다.
VM이 스레드가 아닙니다. – duskwuff
@duskwuff 그러나 내가 배운 것에 따르면, KVM에서 VM의 각 VCPU는 호스트 리눅스가 볼 수있는 스레드입니다. –
정확하게는 아닙니다. 각 VCPU는 개별 실행 가능한 개체입니다. KVM ioctls에 대한 자세한 내용은 http://www.mjmwired.net/kernel/Documentation/kvm/api.txt를 참조하십시오. – duskwuff