menu Stephen Space
more_vert
chevron_right 首页 » 【科普】 » 正文
【科普】虚拟机的那些事儿
2020-03-27 | 【科普】 | 暂无评论 | 191 次阅读 | 1863字

    虚拟机,一个熟悉又陌生的词语。在学校电脑课上面,电脑老师肯定跟你们讲过这个东西,不过想到在那个时候每个同学们的面前都有一台电脑,谁会去听老师讲课呢?所以,今天,我就来好好地跟大家来聊一聊虚拟机的那些事儿。话不多说,正文开整!
1.gif
    虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。
    上面这段话是来自百度百科对与虚拟机的简介,相信各位同学们都看得一脸懵B吧。那么,下面就由我来给大家具体讲讲什么是虚拟机吧。请坐稳扶好,前方高能,好戏开始!
好戏开始.gif
    虚拟机,顾名思义就是虚拟的计算机。再详细一点,就是电脑中套个电脑。一台电脑里面套进去另外一台电脑,这从表面上看是不可能的,但是我们拨开表象看本质,仔细分析就会发现,这从理论上是有可能的。
    我们所熟悉的电脑,都是由硬件和软件构成的。而软件与硬件之间不能直接进行交流,需要一个东西来充当“翻译”,也就是我们所熟悉的操作系统,从严格意义来说,系统也属于软件。在一个系统上面,我们可以运行多个软件。就像这样:
system-apps.png
    刚刚我也说过,系统从严格意义上来说也是一个软件,那我们有没有办法让一个系统运行在另一个系统上面呢?答案是Yes.但是,系统相对于普通软件又有些与众不同(或鹤立鸡群),它比普通软件多了一个系统内核(Kernel)。这个系统内核会在我们每一次开机的时候自动读取到电脑的硬件信息,以便分配性能给每一个运行在这个系统上面的软件。
    举个栗子:你的系统上安装了一个chrome浏览器,那么这个chrome浏览器在加载网页的时候就需要内存和CPU空间。但是chrome又不能直接拿得到内存和CPU空间,所以他就只能向系统内核要内存和CPU空间。我们假设内存和CPU是由一个一个小格子组成的,那么就会发生以下对话:
    chrome:“我需要20个内存空间,10个CPU空间。”
    系统内核:“好,我去给你找找。”
    (然后系统内核找到了电脑硬件)
    系统内核:“我需要20个内存空间和10个CPU空间。”
    电脑硬件:“好,内存1~20号给你,CPU1~10号给你。”
    系统内核:“找到了”
    chrome:“好,谢谢。”
    系统内核:“不用谢。”
    (啊,真愉快的对话~~~)
    然而,如果说直接让一个系统(寄生系统)直接运行在另一个系统(主系统)上,然后寄生系统上面同样安装了一个chrome,那么就会发生以下情况:
    chrome:“我要20个内存空间,10个CPU空间。”
    寄生系统内核:“好,我给你找找”
    (然后寄生系统内核就会像在主系统上运行的普通软件一样找到主系统内核)
    寄生系统内核:“我要……你是谁啊?”
    主系统内核:“我是系统内核啊。”
    寄生系统内核:“我才是系统内核啊。”
    主系统内核:“不,你不是系统内核,我才是系统内核。你只是一个软件。”
    寄生系统内核:“还没有人这样骂过我,我才是!”
    主系统内核:“不,我才是!”
    寄生系统内核:“我才是!!!”
    主系统内核:“我才是!!!!”
    (然后两个系统内核就开始打起架来,chrome一直等到两个系统都打到崩溃也没有等来他要的那20给内存空间和10个CPU空间。。。)
    所以,为了不让这种情况发生,聪明的开发者们就开发出了虚拟机软件。虚拟机软件就相当于寄生系统内核和系统内核的“翻译”,他就可以解决这个问题。那么虚拟机软件是怎么运行的呢?首先,这个软件模拟出了一台真实的电脑所拥有的所有硬件,然后伪装成电脑硬件。然后当寄生系统内核要向硬件索要空间时,它就会找上“电脑硬件”,也就是虚拟机软件。我们还是假装寄生系统上有一个chrome,那么就会发生如下场景:
    chrome:“我要20个内存空间和10个CPU空间。”
    寄生系统内核:“好,我帮你去要。”
    (于是寄生系统内核找到了虚拟机软件)
    寄生系统内核:“我要20个内存空间和10个CPU空间。”
    虚拟机软件:“没问题,你是系统内核嘛。”
    (然后虚拟机软件又找上了主系统内核)
    虚拟机软件:“我需要20个内存空间和10个CPU空间。”
    主系统内核:“好,我去帮你要。”
    (再然后主系统内核又找到了真正的电脑硬件)
    主系统内核:“我要20个内存空间和10个CPU空间。”
    电脑硬件:“好,你要的的内存空间是91~110号,CPU空间是121~130号。”
    然后主系统内核告诉虚拟机软件:“那个你要的内存空间是91~110号,CPU空间是121~130号。”
    然后虚拟机软件盘算着:“我给寄生系统安排的位置好像是从70开始的。。。”
    然后虚拟机软件又找回寄生系统内核:“给你要到啦!内存空间是21~40号,CPU空间是51~60号!我就说你肯定是系统内核嘛。”
    这时寄生系统内核就开始嘟囔了:“看来我真的是系统内核,不过这台电脑怎么这么慢呢???”
    最后寄生系统内核找到chrome:“给你要到啦!内存21~40号,CPU51~60号!”
    chrome:“好,谢谢。不过好慢啊!!!”
    上面这一种方案可以用是可以用,不过缺点就是:太慢了。。。一到寄生系统有大量数据要读写的话,就很容易死机。所以,我们聪明的程序猿们又想到了一种方法:让寄生系统内核正视自己的身份,然后赋予它直接访问主系统内核的权利。简而言之就是让寄生系统内核对主系统内核甘拜下风,让他俩不打架,和谐相处,共度幸福美好的生活(好像有点说过了),这也就是现在虚拟加速技术Intel VT-X和AMD-V的加速原理。这是一种硬件层面上的加速,需要在电脑的BIOS开启。就这样,你的系统结构就会变成这样:
system-apps-system.png
    到现在,大家已经对虚拟机略知一二了吧!时间总是悄无声息地流逝,本篇文章也接近尾声。我是Stephen Zeng,如果你觉得有哪里写得不好的或者你有什么感想和建议,欢迎在评论区畅所欲言。我们下篇文章再见!!!

None
发表评论
暂无评论
textsms
account_circle
email
link