本帖最后由 conmajia 于 2012-09-14 07:44:44 编辑

解决方案 »

  1.   

    你可以认为这是丑陋版的VMWare或者VirtualPC之类的东西。。他们实现了虚拟x86 CPU,这个实现了一个极其简单的自制CPU。。
      

  2.   

    理论上来说,无论你实现了什么计算机,只要能把gcc一类的东西移植过来,就可以交叉编译出操作系统了。
      

  3.   

    最近.net 版玩一玩系列越来越高端了~~~顺带求该系列文章传送门 俺也去弄一个玩儿玩儿~~~
      

  4.   

    记得学《计算机组成原理》的最后有一个实验课。有一个大箱子,里面有一个不记得什么型号的16位cpu,然后自己插管子,组一台16位x86机器,最后执行一个加减法神马的。楼主又让我们来复习基础知识了。
      

  5.   

    我去野比君已经跑到这么底去了,哥还在撸API
      

  6.   

    俺刚毕业时自己也写过汇编器,能将源代码转成.com。
      

  7.   

    需要设计的东西很多啊 虚拟内存结构,硬盘,CPU,设计指令。康夫设计的这个适合于正在学习组成原理的童鞋,确实是“玩一玩”的。不过个人觉得还是虚拟个x86的CPU更实在。
      

  8.   

    这东西和VMWare或者VirtualPC没有可比性,应该和qemu bochs之类的比。前者是虚拟化(原生cpu执行),后者才是模拟。
      

  9.   

    新版的才是虚拟化,而且需要CPU硬件支持。。
      

  10.   

    个人觉得如果不用CPU的Virtualization功能,虚拟和模拟没什么本质区别。。当然这两者又和JVM,CLR之类的运行时不一样
      

  11.   


    你理解错了。“新版”只是支持了对硬件虚拟化的支持。所谓硬件虚拟化,主要是增加硬件的虚拟机监控特权级别,以及对虚拟化内存的管理。判断虚拟还是模拟其实很简单。以下是它们的对比:
    虚拟化无法多层嵌套,也就是虚拟机内再运行虚拟机,模拟器可以。
    虚拟化无法实现异构环境,比如arm上的虚拟机无法运行x86程序,反之也是,模拟器可以,所以你能看到用模拟器让非x86的手机运行win95。
    虚拟化中,你用cpu检测软件看,看到的是host的cpu型号,模拟器可以是任意型号——事实上,在bochs中,有一个叫cpuid的源代码文件,就是模拟cpuid指令的,你可以随意修改cpu型号字符串。
    虚拟化性能远远超过模拟器,虚拟化的性能大约和主机在同一数量级上,好的模拟器低1~2数量级。
    虚拟化中CPU特性不能超过物理CPU特性。你不能在PIII上通过VMware模拟sse3,模拟器可以。
    开源的虚拟机代码不是很多,xen是一个,你不能在其中找到对cpu指令的模拟,但是你看bochs完全是和cpu对应的,cpu有什么指令,就能看到软件的实现,这是显而易见的。
    没有一种模拟器需要硬件虚拟化支持——也就是模拟器不能从硬件的虚拟化中得到收益。
      

  12.   

    虚拟机运行虚拟机操作系统和模拟器模拟运行的关系有点像操作系统调用程序和解释器解释脚本的关系。只要稍微想象下也不难理解,模拟器根本不可能像虚拟机那样达到物理机80%的性能运行程序一样。“新版”虚拟机要求硬件支持很大程度上是噱头,一个很可笑的事实是,在Win7 XP Mode推出一年后,因为厂家的抱怨,Microsoft做出妥协,允许让非硬件虚拟化支持的CPU也可以运行——事实上性能几乎是一样的。这说明是否支持硬件虚拟化,对虚拟机的实现来说是无关紧要的事情。vmware就不强制这样的支持。“新版”虚拟机还有一个很重要的改进就是,它支持操作系统的“启蒙”,为了解释这一点,我们需要说说在没有硬件虚拟化支持和操作系统启蒙的系统上虚拟机是怎么工作的。它的原理其实很简单,就是拦截操作系统的那些“顶级调用”,让它们在沙箱中运行——这一点和hook api没有什么不同,只是更加底层。这些“顶级调用”就是那些特权指令。虚拟机监控程序会驻留在特权层,捕获来自虚拟机操作系统的调用,并且处理,保证各个虚拟机的独立性。而虚拟机启蒙就是,虚拟机直接替换掉操作系统内核(对于微软Windows+Hyper-V来说,你可以说是Windows为虚拟化优化了,因为它们是一家搞出来的)。被“启蒙”的操作系统不需要再次拦截系统调用,相反,它自己就能够向它更高层的API做出区隔。显而易见的是,它更节约内存和提高性能。一个启蒙的操作系统上运行虚拟机,更接近单一操作系统多个用户的运作模式(而不是在虚拟机管理器上运行了多个操作系统)。这种模式也叫做“多租户”模式。
      

  13.   

    顺便讲下,模拟器的实现是比较复杂的,一个最大的难题是性能问题。毫无优化的程序(比如lz找的这个),目测性能至少要下降4~6个数量级。这大约可以让Core i7变成386。不知道lz有没有《架构之美》这本书,书中有一章是一个牛人介绍他在JVM上实现一个完整x86模拟器的例子。然而他搞了半天,也只能运行少数Linux发行版和dos,至今也没有引导起来Windows。
      

  14.   

    一直很好奇VT到底是干嘛用的,为什么Win7的KB958559挑CPU,但是以前的VPC2004/2007就可以随便玩呢?
      

  15.   

    其实一般说的“模拟器”应该叫做“仿真器”(Emulator),“模拟器”一词(Simulator)是指在一个环境中模仿另一个环境,模仿者A虽然类似于被模仿者B,但并非是B本身,而“仿真器”(Emulator)则是在一个环境中运行另一个环境,比如在PC上运行NES、PS2之类的游戏,这些游戏是真实游戏机上的游戏。
    虚拟机在实现上有两种类型,一种主要使用原生代码,象VMWare、VirtualPC、VirtualBox,优点是运行速度快,缺点是要求原生硬件;另一种是解释执行的,象DosBox、qemu,速度慢,但是不要求被运行的环境所要求的硬件条件,比如DosBox可以在基于ARM的手机上运行DOS游戏,qemu能在龙芯3机器上运行win2000。
      

  16.   

    另外,楼主写的(或者说修改的)应该只是虚拟机的CPU部分,MEM、IO、Video、HDD之类的都没有,是不能叫虚拟机的。
      

  17.   

    Virtual Machine, simulator, emulator...概念容易搞混。。不过无所谓了,反正玩玩而已。。
      

  18.   


    Emulator应该是Virtual Machine的一种,无论如何它符合虚拟机的定义,Simulator则是另外一回事了,就象沙盘推演和实战的区别。
      

  19.   

    及时雨,单位正在做POWERPC的开发。
      

  20.   


    DosBox(虽然叫DosBox,其实是可以运行win3.x和win9x的),开源的。
      

  21.   

    这个 bochs 不是公开代码了吗??  比你那个汇编代码解析更正规的多。。