开个技术blog-开篇:虚拟化技术小结

    我的口号是:拒绝转载,创新万岁!yy是创新之母,实践是创新之父!我会尽量写入自己的思考,也许不一定对。但自己思考的东西,哪怕有不足之处,也要好于单纯的转载。


    开篇:虚拟化技术小结

    虚拟化技术越来越热了,小结+yy一把:

    特定语言的虚拟机:对字节码的模拟。条件,OS不同。主要针对动态语言,可以实现跨平台。如JVM。关心OS

    最原始的办法:指令级模拟。条件:指令集不同,无OS。每读一条指令,就转化为目标机子上的指令。寄存器之类的在内存中。一般用于模拟嵌入式芯片。如WuKong模拟器。关心指令集。

    快一点的办法:用户态函数级模拟。条件:指令集相同。OS不同。用宿主机子上OSAPI实现目标应用程序所需的API。在用户态模拟。比如wine。关心API

    再快一点的办法:内核态函数级模拟。条件:指令集相同。OS不同。用宿主机子上OS的内核函数实现目标应用程序所需的系统调用。在内核态模拟。比如unified kernel。关心系统调用。

    虚拟硬件模式:大部分机器代码直接执行。条件:指令集相同,OS不同。当然要作一些钩子。加减乘除的指令不用改。内存相关指令?内核态怎么处理?硬件被虚拟化。一块虚拟的内存。例如:256M。内存物理地址要重新映射,因此MMU要虚拟。在虚拟的256M内存里,每个“进程”都有自己的页表。同样有内核态地址1G,这个任务交给MMU。但是这个内核态与真正的内核态不同。在宿主电脑看来,这个“内核态”仍然是用户态。所有“进程”都是在vmware的地址空间里运行。vmware4G地址空间有1G是真正的内核态,1G是虚拟的“内核态”。剩下2G用户态空间所有进程分享。如果不够,就把某块地址先rob过来,让其他进程对应的页失效。至于真正的内核态和虚拟的“内核态”的区分,要靠intel x86的四个ring了。把真正的内核态设置为ring0,虚拟的内核态设置为ring1,用户态设置为ring3。总线地址也经过了重新映射。“虚拟OS”对显存的操作,对鼠标键盘的操作,对网卡的操作,都变成单一进程对设备的操作。所以要发扬分身术。重新定义总线地址的操作。比如VMWare。关心硬件操作。

    还有虚拟操作系统模式Xen模式,就不仔细研究了。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值