内存虚拟化

  一、内存虚拟化的产生

  内存虚拟化的产生源于VMM与客户系统在对物理内存的认识上存在冲突,造成物理内存真正拥有者-VMM必须对系统访问的内存进行一定程度上的虚拟化。

  先看非虚拟化环境:  

  ·指令对内存的访问通过处理器来转发>>>>处理器将解码后的请求放到总线上>>>>芯片组负责转发。

  为了唯一标示,处理器将采用统一编址的方式将物理内存映射成为一个地址空间(物理地址空间)。

    1)操作系统会假定内存地址从0开始。

    2)内存是连续的或者说在一些大的粒度(比如 256M)上连续。

    在虚拟环境里,VMM就要模拟使的虚拟出来的内存仍符号客户机 OS 对内存的假定和认识,内存虚拟化要解决哪些问题呢?

    a.物理内存要被多个客户OS同时使用,但物理内存只有1个,地址0也只有一个,无法满足同时从0开始的要求。

    b.由于使用内存分区方式,物理内存分给多个系统使用,客户机OS内存连续性可解决但不灵活。

    要解决以上问题引入了一层新的地址空间---客户机物理地址空间来解决让虚拟机OS 看到一个虚拟的物理地址,让VMM 负责转化成物理地址给物理处理器执行。

  VMM需要做哪些事情呢?

  1)给定一个虚拟机,维护客户机物理地址到宿主机物理地址之间的映射关系。

  2)截获虚拟机对客户机物理地址的访问,将其转化为物理地址。

  二、内存虚拟化

  ·内存全虚拟化技术

  通过使用影子页表(Shadow Page Table)实现虚拟化。

  VMM 为每个Guest 都维护一个影子页表,影子页表维护虚拟地址(VA)到机器地址(MA)的映射关系。而Guest页表维护VA到客户机物理地址(GPA)的映射关系。

  当VMM捕获到Guest 页表的修改后,VMM 会查找负责GPA 到MA 映射的P2M 页表或者哈希函数,找到与该GPA对应的MA,再将MA填充到真正在硬件上起作用的影子页表,从而形成 VA 到 MA 的映射关系。而 Guest 的页表则无需变动。

  ·内存半虚拟化技术

  通过使用页表写入法实现虚拟化

  Guest OS 在创建一个新的页表时,会向VMM注册该页表。之后在 Guest 运行的时候,VMM 将不断的管理和维护这个表,使Guest 上面的程序能直接访问到合适的地址。

  ·内存硬件辅助虚拟化技术

  通过扩展页表EPT(extended page table)实现虚拟化。

  EPT通过使用硬件虚拟化技术,使其能在原有的页表的基础上,增加一个EPT页表,用于记录GPA到MA的映射关系。VMM预先把EPT页表设置到CPU中。

  Guest 修改Guest 页表,无需VMM干预。地址转换时,CPU 自动查找两张页表完成 Guest 虚拟地址到机器地址的转换,从而降低整个内存虚拟化所需的开销。

  

  

时间: 2024-10-08 13:33:43

内存虚拟化的相关文章

CPU 和内存虚拟化原理 - 每天5分钟玩转 OpenStack(6)

前面我们成功地把 KVM 跑起来了,有了些感性认识,这个对于初学者非常重要.不过还不够,我们多少得了解一些 KVM 的实现机制,这对以后的工作会有帮助. CPU 虚拟化 KVM 的虚拟化是需要 CPU 硬件支持的.还记得我们在前面的章节讲过用命令来查看 CPU 是否支持KVM虚拟化吗? [email protected]:~# egrep -o '(vmx|svm)' /proc/cpuinfo vmx 如果有输出 vmx 或者 svm,就说明当前的 CPU 支持 KVM.CPU 厂商 Inte

CPU,内存虚拟化技术

内容从<深度实践KVM>一书总结 CPU.内存虚拟化技术与应用场景 NUMA技术与应用1.SMP技术2.MPP模式3.NUMA技术(none Uniform memory access architecture)非一致性内存访问架构numactl --hardware :查看当前CPU硬件的情况 numastat -c qemu-kvm 关闭Linux系统的自动平衡:echo 0 > /proc/sys/kernel/numa_balancing虚拟机NUMA信息查看与配置 virsh

KVM 介绍(2):CPU 和内存虚拟化

学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O 虚拟化 (4)virtio 介绍 (5)libvirt 介绍 (6)OpenStack 和 KVM 1. 为什么需要 CPU 虚拟化 X86 操作系统是设计在直接运行在裸硬件设备上的,因此它们自动认为它们完全占有计算机硬件.x86 架构提供四个特权级别给操作系统和应用程序来访问硬件. Ring 是指 CPU 的运行级别,Ring 0是最高级别,Ring1次之,Ring2更次之…… 就 Linux+x86 来

qemu-kvn 内存虚拟化---ept

qemu-kvm内存虚拟化 内存虚拟化实际就是进行地址转换从客户机虚拟地址-->客户机物理地址-->宿主机的物理地址,转换实现有两种硬件内存虚拟化和软件影子页表方式, 下面主要分析基于intel ept硬件内存虚拟化实现,此实现主要做两件事情 1.开启ept功能2.构造转换页表.注意该页表构造采用动态方式(常说懒惰方式),就是不到完不得以情况不创建.此页表创建实现就是采用ept violation捕获,一步一步创建起来的,对人觉得十分费劲,但是机器喜欢做费劲事情. 我们还得从vcpu_ente

虚拟化的理论-内存和IO虚拟化

这部分只要介绍下虚拟化技术中的内存虚拟化和IO虚拟化两个部分 内存虚拟化: 上图中的做伴部分是正常情况下内存的使用情况,线性地址到物理地址的一个转换,通常应用程序使用的内存地址是线性地址,需要通过MMU地址转换的一个硬件来实现线性地址到物理地址的一个转换.上图的有半部分是虚拟化情况下内存是如何实现线性地址到物理地址的转换,虚拟机中的OS获得是有Host OS分配的线性地址,Guest OS中的应用程序获取的是相对于Guest os来说的线性地址,那么对于这个线性地址来说最终只能转换成线性地址,无

虚拟化技术原理(CPU、内存、IO)

本文来自:http://www.ywnds.com/?p=5856 虚拟化 云计算现在已经非常成熟了,而虚拟化是构建云计算基础架构不可或缺的关键技术之一. 云计算的云端系统, 其实质上就是一个大型的分布式系统. 虚拟化通过在一个物理平台上虚拟出更多的虚拟平台, 而其中的每一个虚拟平台则可以作为独立的终端加入云端的分布式系统. 比起直接使用物理平台, 虚拟化在资源的有效利用. 动态调配和高可靠性方面有着巨大的优势. 利用虚拟化, 企业不必抛弃现有的基础架构即可构建全新的信息基础架构,从而更加充分地

(七)计算机体系结构/内存层次

计算机体系结构/内存层次 内容摘要 计算机体系结构/内存层次 计算机体系结构 内存层次 操作系统的内存管理方式 地址空间 & 地址生成 连续内存分配 伙伴系统 内存层次 CPU中有两级缓存 L1缓存,L2缓存(高速缓存未命中) , 这部分由硬件在做 内存,使用操作系统控制(如果没有,可能是存到外存里,虚拟内存) 操作系统的内存管理 内存(以字节为单位访问,每个字节有自己的一个地址-物理地址) 外存(磁盘),有扇区编号(每个扇区512字节最小单位) 期望:有若干个进程,每个进程都有共同的一部分的地

虚拟化简述

虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU.内存.IO 硬件资源,但逻辑上虚拟机之间是相互隔离的. 物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest).Hypervisor是统载虚拟机的全称,像kvm.xen.vmware.hyper-v都属于Hypervisor. Host通过Hypervisor将自己的硬件资源虚拟化,并提供给 Guest 使用. 虚拟化分为两种: 1.全虚拟化 Hypervisor直接安装在物理机上,然后Hype

虚拟化——影子页表

内存虚拟化的目的: 1.提供给虚拟机一个从0地址开始的连续物理内存空间: 2.在虚拟机之间有效隔离,调度以及共享内存资源. 客户机操作系统所维护的页表负责实现客户机虚拟地址(GVA)到客户机物理地址(GPA)的转化,而这个GPA地址是不能直接发送到系统总线上去 的.还需要实现GPA到宿主机虚拟地址(HVA),宿主机虚拟地址(HVA)到宿主机物理地址(HPA)的转化,总的转换关系如下: GVA --> GPA  -->  HVA  --> HPA 1. GVA到GPA的转化是由客户机的页表