《云计算虚拟化技术基础与实践》课件第六章 QEMU虚拟化原理.pptx
《《云计算虚拟化技术基础与实践》课件第六章 QEMU虚拟化原理.pptx》由会员分享,可在线阅读,更多相关《《云计算虚拟化技术基础与实践》课件第六章 QEMU虚拟化原理.pptx(30页珍藏版)》请在文库网上搜索。
1、本章重点1.理解QEMU的运行模式。2.了解QEMU的软件构成。3.理解QEMU的内存模型。4.理解QEMU的PCI总线与设备。QEMU运行模式0 1QEMU运行模式QEMU作为一个开源的硬件模拟器项目,除了支持x86体系架构之外,还支持ARM、MIPS、PowerPC、IA64等多种CPU硬件架构。QEMU除了支持KVM之外,还支持全虚拟机和kqemu加速模块等方式QEMU的三种模块架构QEMU软件构成1.QEMU源码架构2.QEMU线程事件模型3.Libkvm模块4.Virtio组件0 2QEMU软件构成QEMU的软件架构QEMU主要由以下几个部分组成:Hypervisor控制仿真。Tin
2、y Code Generator(TCG)在虚拟机器代码和宿主机代码之间进行转换。软件内存管理单元(MMU)处理内存访问。磁盘子系统处理不同的磁盘映像格式。设备子系统处理网卡和其他硬件设备。1.QEMU源码架构QEMU源码的获取可以访问QEMU的官方网站:https:/www.qemu.org/download/。QEMU的源码总体上分为指令翻译(位于tcg目录下的文件)、硬件模拟(位于hw目录下的文件)、网络传输(位于slirp目录下的文件)和文件系统(block前缀文件)四个部分,其主程序涉及的相关文件有vl.c、cpu-exec.c、exec.c、translate-all.c、thun
3、k.c、disas.c。1.QEMU源码架构1.代码结构QEMU中有一个模块叫做微型代码生成器(TCG,Tiny Code Generator),它用来将客户机代码翻译成宿主机代码。QEMU指令动态翻译过程1.QEMU源码架构QEMU的主要功能就是不断提取客户机代码并且转化成宿主机指定架构的代码。整个翻译任务分为两个部分:第一个部分将客户机代码转化成TCG中间代码,然后再将中间代码转化成宿主机代码。1.开始执行:比较重要的C语言文件有:vl.c、cpus.c、exec-all.c、exec.c和cpu-exec.c。2.硬件模拟:所有的硬件设备都在/hw/目录下面,所有的设备都有独自的文件,包
4、括总线,串口,网卡,鼠标等等。3.目标机器:现在QEMU可以模拟的CPU架构有:Alpha,ARM,Cris,i386,Mips,MicroBlaze,S390X和SH4等。4.主机:使用TCG代码生成主机的代码,存放在/tcg/目录中。1.代码结构1.QEMU源码架构2.TCG动态翻译TCG代码转换过程1.QEMU源码架构3.TB链在QEMU中,从代码CACHE到静态代码再回到代码CACHE,这个过程比较耗时,所以在QEMU中涉及了一个TB链将所有TB连在一起,可以让一个TB执行完以后直接跳到下一个TB,而不用每次都返回到静态代码部分。TB链的执行流程1.QEMU源码架构4.QEMU的TCG
5、代码分析main_loop(.)/vl.c:函数main_loop 初始化qemu_main_loop_start()然后进入无限循环cpu_exec_all(),这个是QEMU的一个主要循环。qemu_main_loop_start(.)/cpus.c:函数设置系统变量qemu_system_ready=1,然后重启所有的线程并且等待一个条件变量。cpu_exec(.)/cpu-exec.c:是CPU指令执行的主函数。disas_insn()/target-arch/translate.c:真正的实现将客户机代码翻译成TCG代码。tcg_gen_code(.)/tcg/tcg.c:将TCG的
6、代码转化成主机代码1.QEMU源码架构5.QEMU中的ioctl创建KVM在/vl.c中通过kvm_init()将会创建各种KVM的结构体变量,并且通过ioctl与已经初始化好的KVM模块进行通讯,创建虚拟机,然后创建vCPU等等。KVM_RUN当KVM需要QEMU处理一些指令和I/O时,就会通过这个ioctl退回到QEMU进行处理,否则会一直在KVM中执行。KVM_IRQ_LINE当设备有中断时,通过ioctl调用KVM里面的kvm_set_irq将中断注入到虚拟的中断控制器。2.QEMU线程事件模型1.QEMU的事件驱动核心一个事件驱动的架构是以派发一个事件到处理函数的循环为核心的。QEM
7、U的主事件循环是main_loop_wait(),它主要完成以下工作:1)等待文件描述符变成可读或可写。文件描述符是一个关键角色,因为files、sockets、pipes以及其他各种各样的资源都使用文件描述符(file descriptors)。文件描述符的增加使用qemu_set_fd_handler()函数。2)处理到期的定时器(timer)。定时器的添加使用qemu_mod_timer()函数。3)执行bottom-halves(BHs),它和定时器类似会立即过期。BHs用来放置回调函数的重入和溢出。2.QEMU线程事件模型2.QEMU的线程分类主线程执行循环,主要做三件事情:1)执行
8、select操作,查询文件描述符有无读写操作。2)执行定时器回调函数。3)执行下半部(BHs)回调函数。采用BHs的原因主要是避免可重入性和调用栈溢出。执行客户机代码的线程:只讨论KVM执行客户机代码情况(不考虑TCG,TCG采用动态翻译技术),如果有多个vCPU,就意味着存在多个线程。异步I/O文件操作线程:提交I/O操作请求到队列中,该线程从队列取请求,并进行处理。主线程与执行客户机代码同步线程:主线程与执行客户机代码线程不能同时运行,要通过一个全局互斥锁实现。3.Libkvm模块但是考虑到未来的扩展性,KVM开发小组提供了Libkvm模块,此模块包装了针对设备文件/dev/kvm的具体i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 云计算虚拟化技术基础与实践 云计算虚拟化技术基础与实践课件第六章 QEMU虚拟化原理 计算 虚拟 技术 基础 实践 课件 第六 QEMU 原理