概述
内存虚拟化的目标:
两个:第一个是提供给虚拟机一个从零开始连续的物理内存空间;
第二个是对不同的虚拟机进行内存资源的共享和隔离。
至于内存虚拟化需要完成两次转换呀,客户机维持前半部分,物理机维护后半部分,这都是基础,先不说了。只说主要的,影子页表。
影子页表:
说的真的就像影子一样,一直不太懂。该下狠心了....
首先明确几个常识,这个影子页表是被物理CPU装载的。完成的是从VGA到HPA的直接转换,一次性搞定。那么这里就必须VMM要对MMU进行虚拟化,客户机看到和操作的都是虚拟MMU。
客户机使用的页表不是静态的,客户机也总在不停的修改客户机页表,在传统的物理机上,刷新TLB有三种场合:写CR3寄存器,调用INVLPG指令,然后就是操作系统修改部分页表。
这样当客户机修改了客户机虚拟地址到客户机物理地址的内存映射关系后,为了保证一致性,VMM必须对影子页表做相应的维护。所以VMM必须要能截获客户机内存的访问操作,截获之后再对影子也表和客户机页表的修改。那么这里如何修改呢?
首先CR3的写入和INVLPG都是属于特权指令,这个可以自然地被VMM捕获,比较复杂的就是客户机操作系统修改客户机页表。
下面理清思绪: 这里有两个页表,客户机中的页表,然后是影子页表中,对于影子页表项的访问权限是只读的。任何写页表的操作都会引发异常,由VMM捕获。然后在处理函数中,VMM除了代替客户及更新页表之外,还会更新影子页表。所以影子页表的建立和修改都是由VMM完成的,所以,VMM总是可以控制影子页表的页访问权限,由此,VMM也总可以控制何时和怎样截获客户机对客户机页表的修改。。。
还是不懂,普通的客户机对页表的修改,VMM为什么能截获??? 谁能告诉...
这里是说,每次客户机去访问页表的时候都会尝试去更改和影子页表的映射关系,而这个更改时没有权限的,所以会被VMM捕获。 BING GO ,暂时这样理解了。
最后
以上就是勤恳小蘑菇为你收集整理的看操作系统虚拟化原理总结篇——基于软件的完全虚拟化——内存的全部内容,希望文章能够帮你解决看操作系统虚拟化原理总结篇——基于软件的完全虚拟化——内存所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复