摘要: 1、概念 内存映射I/O(MMIO)【统一编址】和端口映射I/O(PMIO)【独立/单独编址】是两种互为补充的I/O方法,用于设备驱动程序和设备通信,即在CPU和外部设备之间。 (1)在MMIO中,内存和I/O设备共享同一个地址空间。 MMIO是应用得最为广泛的一种IO方法,它使用相同的地址总线来处 阅读全文
posted @ 2019-03-27 16:16 前进的code 阅读(3471) 评论(0) 推荐(1) 编辑
摘要: 1、IO虚拟化的分类 (1)全虚拟化:宿主机截获客户机对I/O设备的访问请求,然后通过软件模拟真实的硬件。这种方式对客户机而言非常透明,无需考虑底层硬件的情况,不需要修改操作系统。 QEMU模拟I/O的情况下,当客户机中的设备驱动程序(device driver)发起I/O操作请求之时,KVM模块中 阅读全文
posted @ 2019-03-27 16:13 前进的code 阅读(3248) 评论(0) 推荐(0) 编辑
摘要: 1、QEMU创建虚拟机发起:kvm_ioctl(s, KVM_CREATE_VM, type); KVM中kvm_dev_ioctl判断参数-》kvm_dev_ioctl_create_vm-》kvm_create_vm该函数中创建并初始化了对应qemu模拟的内存条模型kvm->memslots【k 阅读全文
posted @ 2019-03-27 16:11 前进的code 阅读(1671) 评论(0) 推荐(0) 编辑
摘要: qemu负责模拟虚机的外设,因此虚机的线性地址空间主要由qemu进行管理,也就是确定线性地址空间中哪段地址属于哪个设备或者DRAM或者其他的什么。 1、数据结构 1、RAMBLOCK (最直接接触host内存,有hva) RAMBLOCK才是真正分配了host内存的地方,如果把它直接理解成一个内存条 阅读全文
posted @ 2019-03-27 16:10 前进的code 阅读(4825) 评论(0) 推荐(0) 编辑
摘要: kvm是一个内核模块,它实现了一个/dev/kvm的字符设备来与用户进行交互,通过调用一系列ioctl函数可以实现qemu和kvm之间的切换。 1、qemu发起KVM_CREATE_VM的ioctl创建虚拟机 qemu从vl.c/main开始,通过configure_accelerator根据当前c 阅读全文
posted @ 2019-03-27 16:02 前进的code 阅读(2836) 评论(0) 推荐(0) 编辑