QEMU源码分析系列
极致一流技术
积极研究机器学习、深度学习,对计算机安全方向、操作系统、计算机体系结构、计算机网络
展开
-
QEMU中的内存管理介绍
@(qemu源码阅读与分析)QEMU中的内存管理(介绍)QEMU在虚拟机启动的初始化阶段,为客户机分配了物理内存,那么客户机的物理内存如何工作呢?本篇文档,为大家介绍客户机物理内存的工作原理、相关数据结构,但不会涉及其实现细节,客户机物理内存的实现细节,会在后面的代码分析中讲述。本篇文档主要参考http://blog.vmsplice.net/2011/09/qemu-internals-vhost原创 2016-05-08 12:36:50 · 7332 阅读 · 3 评论 -
qemu中的Hbitmap数据结构
尽管unsigned long已经能够胜任bitmap的实现,但是这样实现的bitmap,当bitmap比较大的时候,它的操作效率很低。典型的,像为BlockDriver维持bitmap,磁盘文件的每个块都对应一个bit位,那么这张bitmap表是很大的。如果在热迁移过程中,需要将镜像文件热迁移到目标宿主机,每次查询bitmap的效率很低。因此,QEMU针对磁盘镜像文件设计了HBitmap数据结构。原创 2016-12-22 11:03:25 · 1306 阅读 · 0 评论 -
QEMU中如何定义所有Device的基类和BUS的基类
本文介绍QEMU如何模拟设备、总线、主板的连接关系。原创 2016-12-22 09:49:33 · 3445 阅读 · 0 评论 -
kvm:linux的虚拟机监控器(kvm: the Linux Virtual Machine Monitor)
翻译自kvm: the Linux Virtual Machine Monitor https://www.kernel.org/doc/ols/2007/ols2007v1-pages-225-230.pdf摘要虚拟化在当今操作系统领域是一个热门的话题。在许多场景中它是有用的:服务器整合、虚拟测试环境以及对于那些没有决定使用哪种发行版最好的Linux爱好者。最近,x86处理器的硬件厂商向其指令集翻译 2016-12-07 22:27:19 · 4763 阅读 · 0 评论 -
QEMU在main函数前对模块的初始化过程
QEMU中包含了大量的初始化函数,比如使用QOM模型设计的很多类(CPU、设备等都是利用QOM模型设计实现模拟的),这些类需要注册到管理类型的全局的hash表中,这个注册的过程需要在初始化函数中完成。想象一下,如果我们把这些注册过程都放到main函数里面调用,main函数中就会有非常长的一段篇幅,仅仅是用于调用大量的初始化函数,这样对于QEMU的代码维护非常不利,因此QEMU将这些初始化函数的指针保存到了链表原创 2016-12-12 12:50:20 · 1682 阅读 · 1 评论 -
QEMU,一个快速的和便捷的动态翻译器(论文译文)
摘要我们展示QEMU实现的内部原理,QEMU是一个快速的模拟器,它使用了一个原始的便捷的动态翻译器。它可以在多种主机上(x86、PowerPC、ARM、Sparc、Alpha、MIPS)拟多个CPU(x86、PowerPc、ARM、Sparc)。QEMU支持全系统的模拟,在这个模拟器中,一个完整的没有修改的操作系统可以运行在虚拟机和模拟的Linux用户空间中,一个被编译执行在一个目标CPU的Linu翻译 2016-12-06 14:23:52 · 3755 阅读 · 0 评论 -
QEMU中的对象模型——QOM(介绍篇)
QEMU提供了一套面向对象编程的模型——QOM,即QEMU Object Module,几乎所有的设备如CPU、内存、总线等都是利用这一面向对象的模型来实现的。QOM模型的实现代码位于qom/文件夹下的文件中。对于开发者而言,只要知道如何利用QOM模型创建类和对象就可以了,但是开发者只有理解了QOM的相关数据结构,才能清楚如何利用QOM模型。因此本文先对QOM的必要性展开叙述,然后说明QOM的相关数原创 2016-12-06 13:21:20 · 10656 阅读 · 6 评论 -
QEMU虚拟机源码分析概论
QEMU官网描述QEMU的官网首页上对其自身的描述如下(请特别注意标红字的部分):QEMU is a generic and open source machine emulator and virtualizer. When used as a machine emulator, QEMU can run OSes and programs made for one machine (e.g.原创 2016-12-05 22:17:08 · 11081 阅读 · 1 评论 -
qemu如何实现面向对象模型QOM(代码讲解)
1. QOM中如何将所有的类储存起来的,并且完整地呈现给使用者的。2. 面向对象编程,有三个重要的特性——封装、继承和多态。封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了代码重用。而多态则是为了实现另一个目的——接口重用。多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。本文档将对QOM中实现的封装、继承和多态三个特性分别原创 2016-12-12 12:41:11 · 4257 阅读 · 6 评论 -
QEMU中的CPU类型设计
CPU也是一种设备,因此CPU类继承自Device类。CPU这种设备相比其他设备来说种类非常繁杂。首先,CPU有着不同的架构,而对于每一种架构的CPU来说,随着时间的推移,CPU厂商也会给该架构的CPU不断地增加新特性和更新换代,这种更新换代造成该架构的CPU也有了各种不同的CPU模型。以x86 CPU为例,QEMU中可以支持的CPU的模型就包括以下几种,我们可以通过qemu-system-x86_原创 2016-12-10 16:12:26 · 10508 阅读 · 0 评论 -
QEMU中协程的实现和使用
qemu中Coroutine(协程)的实现与使用介绍原创 2017-01-04 23:23:12 · 2796 阅读 · 0 评论