Fly Higher's Blog
Do one thing and do it well
-
QEMU/KVM 原理综述
QEMU 工作原理简介 QEMU是一款开源的模拟器和虚拟机监视器(Virtual Machine Monitor, VMM)。QEMU主要提供两个功能给用户使用: 作为用户态模拟器:通过动态代码翻译机制来执行不同架构的代码,例如在X86平台上模拟ARM平台下执行环境。 作为虚拟机监视器:模拟全系统,利用其它VMM(Xen,KVM等等)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。 QEMU虚拟化的主要原理 系统虚拟化最重要的就是虚拟化出计算机系统中最重要的三大组件:CPU、内存和IO设备。QEMU虚拟出来的CPU成为vCPU,为了提升vCPU执行Guest OS中指令的效率,通过KVM、Xen等虚拟化技术,直接利用CPU硬件虚拟化的支持,在主机上安全地执行虚拟机代码(需要BIOS中CPU开启对应的硬件虚拟化支持)。 在x86平台上最常见的虚拟化组合就是QEMU/KVM的组合了,其中利用QEMU来模拟IO外设,通过KVM来捕获Guest OS中运行的指令并将其中非特权指令在物理CPU上直接运行,达到硬件加速的目的。 KVM内核模块对用户空间只暴露出一个/dev/kvm的设备文件,然后通过ioctl命令与QEMU进程进行通信,KVM利用硬件扩展直接将虚拟机代码运行于主机之上,当vCPU需要执行访问IO设备寄存器的指令时,vCPU就会停止从退回到QEMU进程中,由QEMU去模拟操作的结果。 KVM 虚拟化原理简介 KVM是Linux内核的一个虚拟化特性,由一组内核模块文件组成,它可以让QEMU中运行的Guest OS的指令直接在Host OS上的CPU中执行,前提是Guest OS和Host...
-
Android 系统图形栈(二):OpenGL ES 库和 EGL 库加载过程
1. OpenGL ES 和 OpenGL ES 库的区别 OpenGL ES : 它本身只是一个协议规范,定义了一套可以供上层应用程序进行调用的 API,它抽象了 GPU 的功能,使应用开发者不必关心底层的 GPU 类型和具体实现。 OpenGL ES 库:OpenGL ES...
-
Android 系统图形栈(一): OpenGL ES 和 EGL 介绍
OpenGL ES 什么是 OpenGL ES? OpenGL ES(OpenGL for Embedded Systems)是 OpenGL 三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计,各显卡制造商和系统制造商来实现这组 API。1 OpenGL 基本概念 因为 OpenGL ES 是 OpenGL...
-
Linux I/O 模型详解
Linux I/O 模型 在 Linux/Unix 系统环境下进行 I/O 编程时,我们经常会遇到这些似懂非懂的名词: Synchronous I/O Asynchronous I/O Blocking I/O Non-blocking I/O 首先,这里讲的 I/O 指的是用户空间的 I/O,并且主要侧重于网络编程中的...
-
Linux 内核加载启动过程分析
本文是基于 Linux Kernel 4.4.49 版本内核源码中的 x86 32 位体系结构进行分析。 BIOS 传统模式下的 X86 PC 启动过程 什么是 BIOS? 简单来说 BIOS 也是一段程序代码,但是它比较特殊,它是 CPU 启动后执行的第一段代码,存储在...