zoukankan      html  css  js  c++  java
  • 第七讲:内存虚拟化

      一、内存虚拟化的产生

      内存虚拟化的产生源于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 虚拟地址到机器地址的转换,从而降低整个内存虚拟化所需的开销。

      

      

  • 相关阅读:
    论JS函数传参时:值传递与引用传递的区别
    关于 rem
    致——自己
    用CSS3写的钟表
    HTML标签marquee实现滚动效果
    手机号截取
    CSS3绘制环形进度条
    限制内容长度(CSS,jQuery)
    移动web开发中遇到的一些问题收纳
    移动平台中 meta 标签的使用
  • 原文地址:https://www.cnblogs.com/aaronax/p/5692496.html
Copyright © 2011-2022 走看看