问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

虚拟机是怎么实现的

发布网友 发布时间:2022-04-30 16:40

我来回答

2个回答

热心网友 时间:2022-04-14 00:50

1997年,斯坦福的Mendel Rosenblum带着Edouard Bugnion, Scott Devine在SOSP上发了篇论文,叫做Disco: running commodity operating systems on scalable multiprocessors (disco.pdf)。发了之后,我想他们应该是觉得这个主意太好了,就开了家公司,名叫VMWare。这篇论文起名叫Disco(迪士高)是因为虚拟机本身不是一个新的东西,大概在上世纪70年代就有了。作者们为了表示敬意,或者是显示这是一个复古的东西,就把这个项目取名为disco。这篇论文介绍了虚拟机关键技术,用来回答这个问题再合适不过了。(多年之后,OSDI上的另一篇论文(Memory Resource Management in VMware ESX Server)介绍了一些VMWare的改进。近年来论文越来越多。)当初他们为什么要做虚拟机?简单说就是,新硬件层出不穷,但是OS赶不上。当初,他们想在Stanford的ccNUMA机器上跑IRIX(一个操作系统)。可是IRIX跑不起来。他们觉得修改OS或者写一个新的OS太难了(因为一个操作系统从出生到成熟要很长的时间,无数BUG要FIX,无数的新功能要增加。。。那样人家博士要怎么毕业。。)。所以,他们决定用虚拟机。对于他们的项目,虚拟机大致有下面这些好处:只要对商业OS做简单地修改,就能让他们在多个VM(Virtual Machine)间共享内存。Flexible。除了论文里的IRIX,实际上其他的OS也能跑。扩展性好。系统可以以虚拟机为单位扩展。fault-containment。每一个VM都是一个几乎独立的个体,一个坏了,不影响另一个。新老软件可共存。比如,新的软件只能在Linux-3.15跑。你可以用两个VM,一个是Linux2.6,一个是Linux-3.15。这篇文章回答下面这几个实现虚拟技术的关键问题:VMM(Virtual Machine Monitor, 或者叫hypervisor)是怎么管住Guest OS的?或者说,皇上(VMM)是怎么防止大臣(OS)夺权的?有那么多个操作系统一起运行,内存是怎么管理的?多个VM之间是怎么分享资源的?或者说,1GB内存怎么当2GB用? VMM(Virtual Machine Monitor, 或者叫hypervisor)是怎么管住Guest OS的?或者说,皇上(VMM)是怎么防止大臣(OS)夺权的?要理解VMM是怎么工作的,我们得先了解没有VMM的时候,系统是怎么工作的。在没有VMM的时候,计算机系统中的”应用”可分为用户进程(比如VIM)和操作系统。他们分别运行在不同的模式中(mode)。我们用一个类比来解释系统中的模式(mode)。模式这个机制是用来*一段指令所在的环境的权限的,它是需要处理器的支持的。MIPS结构当时有三个模式:用户模式(user mode),长官模式(supervisor mode,原谅我的翻译…)和内核模式(kernel mode)。这三种模式分别对应于人类社会里的民宅、官衙和金銮殿。显而易见,在金銮殿里的人拥有的权限最高,民宅里的最低。我们可以说,在没有VMM时,用户进程住在民宅里,县衙空着,OS住在金銮殿里(如图)。用户可以直接做一些不用什么特权的事情(unprivileged instructions),比如计算1+1。做这些事情不经过OS。但是,有些要特权才能做的事情,一定要经过OS。比如保存正在编辑的文档到硬盘。访问硬盘是特权操作是因为硬盘是共享的资源,要有人管着,不能让人乱来。试想,要是人人都能读写档案馆的档案,那不就乱套了。VIM(用户进程)不能直接写磁盘上的文件。VIM必须请求在金銮殿里的操作系统来做。怎么请求呢?通过系统调用(system call)。系统调用的过程是这样的:比如要调用的是write(fd, buf, len, off),首先把fd, buf, len, off放到stack里,然后再把一个write()函数对应的号码(system call number)放到stack里,最后调用一个特殊的指令使CPU进入内核模式(图中的圈1)。在x86结构中,这个指令是int(中断)。在MIPS结构中,这个指令是trap。这个指令会引导CPU执行一段代码(trap handler),依照stack里的system call number 找到对应的函数(在这里是write()的实现),然后调用这个函数(函数的参数在刚才的stack里)。在这里函数里,操作系统调用文件所在的文件系统里的write()实现,文件系统使用磁盘的驱动来最终实现。所以文件的操作完成后,操作系统调用与trap功能相反的一个指令,回到VIM程序的指令里(图中的圈2)。操作系统维护自己的特权的过程大概就是这样。但是这个特权等级到底是怎么实现的呢?我们可以想像CPU里有一个特权状态(privileged state bit)。状态为开(On)的时候,CPU的特权等级高,你可以做任何事,包括转到低特权状态。关(Off)的时候,你所能做的事情就所限了。那怎么从off状态转到on状态呢?你必须到执行CPU的特殊指令,这个指令会把你带到一个特定的地方执行操作系统的指令,检查你是不是有进入高特权状态的权限。这就像是在机场,你可以很容易地从登机口到售票大厅,可是你要从售票大厅到登机口,你就得过安检。另外,为什么操作系统就能有高特权呢?Hmm…因为操作系统一开始就把那占了,之后运行的应用程序就只能听它使唤了。现在,终于要说VMM(virtual machine monitor, 或者叫hypervisor)是怎么实现的了。如下图:现在VMM进了金銮殿,有了最高的特权。操作系统被放到了官衙里(但是它自己并不知道)。用户进程还是在民宅里住着。比如,现在用户进程VIM调用write(),会发生什么?用户进程会trap到VMM(拥有kernel mode)里去。但是,VMM并不知道如何处理write()。所以,VMM接下来会调用OS的里对应的trap handler,这个handler会执行文件系统的write(),然后用驱动来写磁盘。这一切的操作都在VMM的监视下进行。怎么监视?操作系统实际上是在虚拟CPU(Virtual CPU)上运行的。VCPU有一套自己的(假的)寄存器。VMM盯着这些寄存器。在操作系统的trap handler完成之后,它会调用trap的反操作(想返回user mode)。但是,这个操作实际上回使CPU回到VMM,由VMM最后返回到用户进程。为什么VMM能够知道操作系统的trap handler在哪?系统中先有VMM。当你在VMM上安装操作系统的时候,操作系统会尝试调用特权指令安装trap handler。因为有最高特权的VMM实际上是监视着这一切的,所以它可以记录下trap handler的位置就行了。总的说来,虚拟机占据了CPU的最高特权,使得在更低特权等级的操作系统无法进行有害操作。 有那么多个操作系统一起运行,内存是怎么管理的?在没有VMM的时候,系统中有两种内存地址:虚拟地址(virtual address)和物理地址(physical address)。从虚拟地址到物理地址的转换有两种方式。方式一:在TLB(translate lookside buffer,硬件实现)查找。方式二:在页表(page table)中查找,找到之后把结果放到TLB中去。系统会先尝试方式一,要是找不到(TLB miss),就用方式二。在有了VMM之后,系统中有三种内存地址:虚拟地址(virtual address),物理地址(physical address)和机器地址(machine address)。机器地址才是真正与内存条上的地址一一对应的。物理地址只是操作系统认为的物理地址。当操作系统试着要使用特权指令来完成一个虚拟地址到物理地址的转换时(TLB miss),VMM就介入了(VMM监视着所有对特权寄存器的操作)。VMM会先使用操作系统内的代码来先完成虚拟地址到物理地址的转化(因为VMM并不知道这个映射关系)。然后,操作系统认为自己已经完成了转化,尝试去更新TLB(特权操作)。这个时候,VMM会介入,用一个叫个pmap的映射表找到物理地址对应的机器地址,用机器地址替换掉物理地址,然后把TLB更新为虚拟地址到机器地址的映射。之后,所有对这个虚拟地址的访问都会被转换为对相应机器地址的访问。 多个VM之间是怎么分享资源的?或者说,1GB内存怎么当2GB用?我们知道,每一个虚拟机都要占用大量的内存空间。在内存有限的情况下,怎么在一台机器运行更多的虚拟机?幸运的是,不用的虚拟机之间在内存中数据可能会完全一致(比如,系统文件在内存中的缓存)。如要我们可以只在内存中保留一份数据,我们就行节省很多空间。Disco使用虚拟IO设备和虚拟网络设备来节省内存空间。虚拟IO设备:当两个虚拟机从同一个磁盘上读同一个文件时,VMM会intercept DMA,然后就会发现这两个VM在使用同样的数据。这份数据只需要在机器内存里保存一份,然后修改pmap,使得两个VM的物理地址指向同一个机器地址就可以了。当任何一个VM更新这份数据,VMM会给它一份新的拷贝,原来的那份不做更改(copy on write机制)。 虚拟网络设备:当使用NFS从VM1向VM2复制文件时,文件并没有被真正地复制。虚拟网络设备会更新VM2上的pmap,使之指向在内存中的文件,使得VM2上的操作系统认为自己已经有了这个文件。虚拟机是怎么实现的

热心网友 时间:2022-04-14 02:08

虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实windows系统完全一样的功能,进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何影响 ,而且具有能够在现有系统与虚拟镜像之间灵活切换的一类操作系统。虚拟系统和传统的虚拟机(Parallels Desktop,Vmware,VirtualBox,Virtual pc)不同在于:虚拟系统不会降低电脑的性能,启动虚拟系统不需要像启动windows系统那样耗费时间,运行程序更加方便快捷;虚拟系统只能模拟和现有操作系统相同的环境,而虚拟机则可以模拟出其他种类的操作系统;而且虚拟机需要模拟底层的硬件指令,所以在应用程序运行速度上比虚拟系统慢得多。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
一般的高低床长宽多少 家用高低床尺寸一般是多少 学校高低床尺寸是多少 一般学生高低床是多少尺寸 高低床多少钱? CSGO刀和手套哪个先买?CSGO刀和手套出的概率一样吗? ...高考分是463,我有机会上西北民族大学或者是北方民族大学么?很急... 我是csgo的一个萌新想要氪一把刀求大佬推荐一款500到700的刀 您好,我的分数是437可以报预科兰州西北民族大学吗? CSGO的刀为什么这么贵?CSGO的刀会慢慢磨损吗? 虚拟设备技术是指用 ___的技术。 C.共享设备模拟独占设备 D.独占设备模拟共享设备 急急急!明天必考 什么是虚拟设备啊? 什么是虚拟设备 88L的电冰箱功率是多少 家里路由器只有这两个灯亮怎么回事? 路由器只闪两个灯,wifi有信号没网 南京市高淳县广播电视大学在哪里 路由器只亮两个灯,网络不好 高淳汇通快递在哪热心解答下! 高淳汇通快递在哪 路由器只亮两个灯,上不了网,怎么办? 高淳哪里有羽毛球厂 南京市高淳县 有没有打羽毛球就是羽毛球馆的地方? 去高淳看油菜花和老街,打算住一个晚上,请问有什么干净点的地方住宿,地点和价格都说下。 路由器只亮这两个灯 不能上网 怎么回事怎么办? 南京市高淳县 三星c27f390怎么调全屏 我电脑是惠普的,显示器是HP2009f,突然没声音了 三星C27F390FHC显示器? 我买的三星C27F391FH曲屏显示器,鲁大师检测出来型号是C27F390,我是不是上当受骗了,三 虚拟机是利用什么资源来工作 什么是虚拟设备?虚拟内存怎么设置?它采用的什么样的技术? 虚拟机是什么的 大话手游强盗王中王怎么做 怎样用手机号注册 空气开关一推闸就跳火 怎样在同一部手机上用两个微信!怎么才能下载另一个! 这种空开,断电的时候一推上去就掉下来,是不是坏了 空开每天第一次推都会跳闸,然后再推又好了是什么情况,,每天都这样 怎样用自己手机帮人申请 用自己的手机号怎么申请两个微信 家里空气开关中有一个推上去就跳闸怎么回事 我房间墙上插座没电,空气开关一推就跳闸,我把所有插座都断电了,还是推不上是为什么? 老年人呼吸时左后背疼痛为什么呢? 总空气开关跳闸推上去马上又跳拿东西顶起了有危险吗? 我母亲左后背疼,吃饭的时候背筋疼,还有点哽咽,都通了大半个月了。不知道怎么回事? 我奶奶左后背疼怎么回事啊? 我的左边后背疼是怎么回事啊 左侧后背疼痛是什么原因? 择业与理想演讲稿400字