初识虚拟化技术「建议收藏」

初识虚拟化技术

大家好,又见面了,我是全栈君。

(一)虚拟化技术概述

虚拟化技术可针对详细应用目的创建特定目的的虚拟环境,安全、效率高,快照、克隆、备份、迁移等方便。系统虚拟化是将一台物理计算机虚拟成一台或多台虚拟计算机系统,每一个都有自己的虚拟硬件,其上的操作系统任觉得自己执行在一台独立的主机上,计算机软件在一个虚拟的平台上而不是真实的硬件平台上执行。虚拟化技术能够扩大硬件的容量。简化软件的又一次配置过程。当中CPU的虚拟化能够单CPU模拟多CPU并行执行,同意一个平台同一时候执行多个操作系统,而且应用程序能够在相互独立的空间内执行而互不影响。

虚拟化技术在减少硬件成本的同一时候。还能够显著提高系统的工作效率和安全性。

虚拟化系统的实现一般是在操作系统和硬件之间增加一个虚拟机监控程序,称为Hypervisor(如图1所看到的)。由Hypervisor主要负责各个操作系统之间的硬件资源协调。虚拟机监控程序是一种特殊操作系统,直接在裸机上执行(针对全然虚拟化技术)。虚拟机监控程序创建一个底层硬件平台抽象。一个或多个虚拟机(VM)共享这个底层硬件平台。在这样的环境中。VM 仅仅是操作系统及其应用程序的容器。一个 VM 与虚拟机监控程序上执行的其它 VMs 隔离。这支持多个操作系统或多个配置不同的相似操作系统。

    初识虚拟化技术「建议收藏」

图1  虚拟化系统结构

1。虚拟计算机系统三层含义-同质、高效、资源受控。

同质-本质上虚拟机和物理机是同样的、表现上有所差异,如一个物理核虚拟多个核。

高效-虚拟机效能接近物理机。

资源受控-虚拟机对系统资源有全然的控制能力。包含分配、管理、回收。

2,虚拟化分不同层面的虚拟化

硬件抽象层的虚拟化-客户机与宿主机硬件相似,指令集相似。

操作系统层虚拟化-内核能够提供多个相互隔离的用户态,其拥有独立的文件系统、网络、系统设置和库函数。

库函数层初始化-是不同的操作系统能够拥有共同的库函数接口,应用程序不需改动。

编程语言层虚拟化-编的程序执行在一个虚拟机上,与详细硬件无关。如Java。

3。虚拟机的长处

良好的封装,虚拟机的执行环境保持便捷。便于随时抓取状态、备份、克隆、挂起和恢复。

多实例-最大限度降低物理资源,提高利用率。便于管理。

隔离-每一个应用程序能够再独立的操作系统中执行。互不干涉。崩溃也不会影响其它任务。

硬件无关性-仅仅要拥有同样的硬件抽象层,虚拟机就能够无缝迁移,因此维护和升级简单。

安全-便于控制訪问权利,病毒入侵检測等。

4,虚拟化分类

依照虚拟化程度分全然虚拟化和类虚拟化。全然虚拟化-客户及操作系统不须要不论什么改动就可以执行,分软件辅助全然虚拟化和硬件辅助全然虚拟化,全然虚拟化可以模拟全部CPU指令。类虚拟化-操作系统须要做出适应性改动。回避那些难以模拟的指令。

依照宿主机是否存在独立操作系统分为hypervisor模型和宿主模型,前者需支持全部的物理资源管理(系统启动、内存管理、设备驱动等)。效率高、复杂。后者仅仅需调用宿主操作系统API实现虚拟化,宿主操作系统能够是windows、linux,效率低、简单。第三类是两者的混和,VMM位于硬件层之上,但让出部分IO设备管理权给一个执行在特权虚拟机上的特权操作系统。VMM负责处理器和内存虚拟化。

(二)虚拟化技术框架

虚拟环境组成:硬件、VMM、虚拟机。物理机中操作系统直接管理硬件(通过硬件抽象层HAL),虚拟环境中VMM管理硬件(会构建一个或多个逻辑HAL)。操作系统执行在VMM 逻辑HAL之上,执行在非CPU最高特权。

对物理资源虚拟的三个主要任务:处理器虚拟化、内存虚拟化和I/O虚拟化。若硬件直接支持虚拟化技术则CPU辅助完毕虚拟化过程。在CPU、芯片组以及IO设备等增加专门针对虚拟化的支持,从而高easy、高效的实现虚拟化。

    初识虚拟化技术「建议收藏」

    图2 虚拟化环境组成

1,VMM介绍

虚拟机VMM(虚拟机监控器)执行在物理CPU的最高特权级。VMM向下管理宿主机物理资源,包含处理器管理、内存管理、外设管理、中断管理、系统时间管理等。向上则管理虚拟环境资源,包含:

i 虚拟物理资源-处理器、内存、IO设备等。

ii 多个独立虚拟环境的调度-类似于进程调度。

iii 虚拟环境间的通信机制–VMM提供VMM与虚拟环境之间、虚拟环境之间的通信API。通信方式能够是共享内存、事件通知等。

iv 虚拟环境的管理-创建、删除、暂停等。

2,硬件辅助虚拟化

i 处理器虚拟化:

VMM最核心部分,内存、IO虚拟化都赖于处理器虚拟化的正确实现。处理器的虚拟化就是模拟处理器的全部关键环节-指令集、内存訪问。

三个关键概念:虚拟寄存器、虚拟上下文、虚拟CPU,当中虚拟CPU与物理CPU具有一致的功能,其功能由物理CPU和VMM共同完毕(非敏感指令直接物理CPU完毕。敏感指令VMM陷入后再模拟)。处理器虚拟化包含:

(a)指令集模拟:正确模拟指令的行为。操作系统试图訪问关键资源时,VMM会将訪问定位在VMM的虚拟寄存器上。操作系统运行操作时(进程切换等),通过VMM“陷入”再模拟进行。陷入手段包含:处理器保护机制触发异常、VMM主动通过陷阱调用、异步中断(处理器内部中断源和外部中断)。

(b)中断和异常的模拟:模拟硬件中断和软件异常的运行。

(c)对称多处理器的模拟:虚拟处理器个数与物理CPU没有必定联系,向操作系统呈现SMP的存在。

ii 内存虚拟化:核心要求是每一个客户机物理地址从0開始、大粒度地址连续(如256M),基本做法在于引入一层新的地址空间-客户机物理地址空间,使用时由VMM将地址转化为实际物理地址。

iii IO虚拟化:截获客户机操作系统对设备的訪问请求。通过软件模拟真实物理效果,“欺骗客户机”

3,基于软件的全然虚拟化

若硬件在虚拟化支持存在缺陷。可通过软件弥补。两种可行方案-模拟运行(全然虚拟化)和直接源码改写(类虚拟化)。

软件模拟技术是在一种硬件平台上通过软件模拟出第二种硬件平台,从而能够运行其上的操作系统、应用程序。模拟的核心是模拟指令集的运行效果,可模拟同样的硬件体系结构,也可模拟不同的。

i 基于软件的CPU虚拟化

(a)模拟技术最简单的就是解释运行-取指、模拟运行效果、再取指,缺点是性能差。如java即为解释型运行,具有硬件平台无关性。

(b)扫描和修补-大部分指令直接由物理CPU运行,部分操作系统敏感指令通过陷阱陷入到VMM模拟运行。

(c)二进制代码翻译-物理CPU不能直接运行客户机操作系统操作。待运行代码都在VMM缓冲区里。

ii 内存虚拟化:为了实现客户机物理地址到宿主机物理地址的映射,VMM维护了一张映射表。VMM截获客户机内存操作指令,并映射到VMM分配给该客户机的对应宿主机物理地址。翻译过程通过影子页表实现,直接翻译到宿主机物理地址。

iii IO虚拟化:虚拟机中侦測出来的设备是VMM虚拟的设备。能够多于或少于真实设备,功能和型号也可同可不同,模拟设备与操作系统交互的API就可以。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116073.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • tomcat重启会重新解压war包吗_tomcat解压版

    tomcat重启会重新解压war包吗_tomcat解压版tomcat解压war包的一点例外

  • 排列组合公式的原理_有序排列组合公式

    排列组合公式的原理_有序排列组合公式绪论:加法原理、乘法原理#分类计数原理:做一件事,有n类办法,在第1类办法中有m1种不同的方法,在第2类办法中有m2种不同的方法,…,在第n类办法中有mn种不同的方法,那么完成这件事共有N=m1+m2+…+mn种不同的方法。分步计数原理:完成一件事,需要分成n个步骤,做第1步有m1种不同的方法,做第2步有m2种不同的方法,…,做第n步有mn种不同的方法,那么完成这件事共有N=m1×m2×⋯×mn种不同的方法。区别:分类计数原理是加法原理,不同的类加起来就是我要得到的总数;分步计数原理是乘法原理,是同一

    2022年10月21日
  • Java虚拟机:对象创建过程与类加载机制、双亲委派模型

    Java虚拟机:对象创建过程与类加载机制、双亲委派模型

  • 【Flume】batchSize和transactionCapacity区别

    batchSize是针对Source和Sink提出的一个概念,它用来限制source和sink对event批量处理的。即一次性你可以处理batchSize个event,这个一次性就是指在一个事务中。当你处理的event数量超出了batchSize,那么事务就会提交了。注意,这里有一个隐晦的地方,就是batchSize一定不能大于transactionCapacitytransactionC…

  • logback日志文件路径_mysql的日志文件在哪里

    logback日志文件路径_mysql的日志文件在哪里mysql日志文件在哪如何修改MySQL日志文件位置(2013-01-2415:57:13)标签:itMySQL日志文件相信大家都有很多的了解,MySQL日志文件一般在:/var/log/mysqld.log,下面就教您修改MySQL日志文件位置的方法,供您参考。今天需要改MySQL日志文件的位置,发现在/etc/my.cnf中怎么也改不了。后来发现MySQL日志位是指定的:[root@loc…

    2022年10月14日
  • java中timer怎么用_java out of memory

    java中timer怎么用_java out of memory当我通过按BACK按钮(调用onBackPressed())关闭应用程序时,CountDownTimer它不会停止,直到完成计数为止。我怎样才能把CountDownTimercancel();在我的onBackPressed()?因为,当我退出应用程序时(如下面的说明所示),我不再想要在屏幕上进行举杯了。在我的代码之上:booleannetwork_connected=false;我的是什…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号