Guest OS, Qemu, KVM工作流程

2021-06-21 15:22:04 字數 1010 閱讀 9755

這裡主要介紹基於x86平台的guest os, qemu, kvm工作流程,如圖,通過kvm apis可以將qemu的command傳遞到kvm:

1.建立vm

system_fd = open("/dev/kvm", ***);

vm_fd = ioctl(system_fd, kvm_create_vm, ***);

2.建立vcpu

vcpu_fd = kvm_vm_ioctl(vm_fd, vm_create_vcpu, ***);

3.執行kvm

status = kvm_vcpu_ioctl(vcpu_fd, kvm_run, ***);

qemu通過kvm apis進入kvm後,kvm會切入guest os,假如guest os執行執行,需要訪問io等,也就是說要訪問physical device,那麼qemu與kvm就要進行emulate。 如果是kvm emulate的則由kvm emulate,然後切回guest os。如果是qemu emulate的,則從kvm中進入qemu,等qemu中的device model執行完emulate之後,再次在qemu中呼叫kvm_vcpu_ioctl(vcpu_fd, kvm_run, ***)進入kvm執行,然後再切回guest os.

(勘誤,如果kvm can emulate那麼emulate之後應該層層返回到kvm_x86_ops->run(vcpu),然後才切入guest os,不是直接切入,圖畫完了,不好修改)

5549static int (*kvm_vmx_exit_handlers)(struct kvm_vcpu *vcpu) = ;

如果kvm中的handle_io函式可以處理,那麼處理完了再次切入guest os。如果是在qemu中emulate,那麼在kvm中的**執行完後,會再次回到qemu中,呼叫qemu中的kvm_handle_io函式,如果可以處理,那麼再次呼叫kvm_vcpu_ioctl,引數kvm_run,進入kvm,否則出錯退出。

飯工和碗工

飯工和碗工 飯工和碗工 一看這兩個名詞,你一定費解。聽過鉗工電工清潔工搬運工,或是張工王工,那聽過這個稱謂呀。甭急,這是我的發明,你聽我慢慢道來。我兒子兒媳都在天津工作,住的地方到工作單位較遠。早晨六點半出發,晚上七點後回家。若遇見堵車,回到家就八點多了。他們倆既辛苦又繁忙。我和老伴住在陝西老家,身...

飯工和碗工

飯工和碗工 飯工和碗工 一看這兩個名詞,你一定費解。聽過鉗工電工清潔工搬運工,或是張工王工,那聽過這個稱謂呀。甭急,這是我的發明,你聽我慢慢道來。我兒子兒媳都在天津工作,住的地方到工作單位較遠。早晨六點半出發,晚上七點後回家。若遇見堵車,回到家就八點多了。他們倆既辛苦又繁忙。我和老伴住在陝西老家,身...

飯工和碗工

飯工和碗工 飯工和碗工 一看這兩個名詞,你一定費解。聽過鉗工電工清潔工搬運工,或是張工王工,那聽過這個稱謂呀。甭急,這是我的發明,你聽我慢慢道來。我兒子兒媳都在天津工作,住的地方到工作單位較遠。早晨六點半出發,晚上七點後回家。若遇見堵車,回到家就八點多了。他們倆既辛苦又繁忙。我和老伴住在陝西老家,身...