linux虚拟化什么意思

linux虚拟化什么意思,第1张

虚拟化技术的应用十分广泛. 当前虚拟化技术主要关注于服务器的虚拟化, 或在单个主机上寄存多个独立的 *** 作系统. 本文首先介绍虚拟化技术的原理, 然后讨论多个虚拟化技术的实现方法. 另外介绍了一些其它的虚拟化技术, 比如Linux上 *** 作系统级的虚拟化技术.

虚拟化把事物从一种形式改变为另一种形式. 计算机的虚拟化使单个计算机看起来像多个计算机或完全不同的计算机.

虚拟化技术也可以使多台计算机看起来像一台计算机. 这叫做服务器聚合(server aggregation)或网格计算(grid computing).

首先我们回顾一下虚拟化技术的历史.

虚拟化技术的历史

虚拟化技术不是一个新的主题实际上, 它已有40年的历史. 最早使用虚拟化技术的是IBM 7044计算机, 它是基于MIT(麻省理工学院)为IBM704计算机开发的分时系统CTSS(Compatible Time Sharing System), 和曼彻斯特大学的Atlas项目(世界最早的超级计算机之一), 首次使用了请求调页和系统管理程序调用.

硬件虚拟化

IBM早在1960年就认识到虚拟化技术的重要性, 于是开发了型号为Model 67的System/360主机. Model 67主机通过虚拟机监视器(VMM, Virtual Machine Monitor)虚拟所有的硬件接口. 在早期的计算中, *** 作系统被称做Supervisor. 能够运行在其它 *** 作系统之上的 *** 作系统被称做hypervisor(名称首次出现在1970年).

VMM直接运行在底层硬件上, 允许执行多个虚拟机(VMs). 每一个VM(虚拟机)运行自己的 *** 作系统实例 -- 早期时候称为CMS, 或会话监视系统(CMS, Conversational Monitor System). 然后VM继续发展. 今天你能够在System z9主机上发现VM, 它能够向后兼容, 甚至是System/360.

处理器虚拟化

另外一个早期使 用的虚拟化技术, 仿真处理器, 也叫做P-code(or pseudo-code)机. P-code是一种机器语言, 运行在虚拟机上而不是实际的硬件. 知名的P-code语言在1970年由加州大学圣地亚哥分校的Pascal系统项目组开发. 它可以把Pascal程序编译成P-code代码, 然后在具有P-code功能的虚拟机上运行. P-code程序具有高度可移植性, 能够运行在任何具有P-code功能的虚拟机上.

1960年的BCPL语言(基本组合程序设计语言, Basic Combined Programming Language)也使用了同样的概念, 它是C语言的前身. 编译器首先把BCPL代码编译成一个中间机器代码: O-code. 然后, O-code被编译成目标机器代码. P-code模型已被广泛使用到各种编译器当中, 从而为编译器移植到新的主机架构提供了复杂性.(通过一个中间语言分成前端和后端).

Java虚拟机(JVM)

Java虚拟机也采用了P-code模型. 从而我们可以简单通过移植JVM程序到新架构的机器上来广泛发布Java程序.

指令虚拟化

近来频繁出现的虚拟化概念: 指令虚拟化, 也叫做二进制翻译. 在这个模型中, 虚拟指令被动态翻译成底层硬件的物理指令. 程序执行后, 代码一段一段地被翻译. 如果出现分支, 一套新的代码指令将被引入和翻译. 这十分类似于缓存 *** 作, 指令块从内存移动到本地的快速缓存内存中执行.

近来Transmeta公司设计的Crusoe中央处理器使用了该模型. 二进制翻译由Code Morphing专利技术实现. 类似的一个实例, 全虚拟技术通过使用动态生成代码扫描来发现和重定向特权指令(解决特殊处理指令集中的问题).

虚拟化技术的类型

现在不只存在一种虚拟化技术. 事实上有多种方法可以使用不同层次的抽象来实现同样的结果. 本章介绍Linux上三种最常用虚拟化技术的优点和弱点. 业届有时使用不同的术语来描述同一个虚拟化技术. 为了保持连续性, 下面使用的术语参考了其它的术语.

虚拟化技术和游戏

一篇虚拟化技术的文章如果没有提到复合式大型电玩模拟器(MAME)就不是一篇完整的文章. MAME, 就如名字一样, 是一个能够模拟以往arcade游戏的机器模拟器(全部). 做一个补充, 整个机器是被虚拟的, 包括声音和图形还有控制硬件. MAME是一个非常棒的应用程序, 你也可以通过仔细阅读源码来了解它是如何实现的.

硬件模拟器

无可否认, 最复杂的虚拟化技术是硬件模拟器. 在这个方法中, 首先在主机系统上创建硬件VM, 然后模拟硬件的功能, 如图1显示:

图1. 硬件模拟器: 使用VM模拟需要的硬件

正如你可能猜到, 硬件模拟器的主要问题是速度极慢. 因为每一个指令在底层硬件都需模拟, 所以速度慢了100倍. 高保真模拟还包含了循环校验, 用于模拟CPU的管道和缓存行为, 实际速度会慢了1000倍.

硬件模拟有自己的优点. 比如, 使用硬件模拟, 你能够在基于ARM处理器的主机上模拟运行基于PowerPC未经任何修改的 *** 作系统. 你甚至能在每个不同模拟处理器上运行多个虚拟机.

模拟器和开发

硬件模拟器最有意思的一个应用是firmware(固件)和硬件协作开发. firmware开发人员无需等待最新硬件的推出, 他们可以使用目标硬件的虚拟机来验证实际代码中的许多概念.

全虚拟化

全虚拟化(Full virtualization), 也称为原始虚拟化技术, 是另一种虚拟化方法. 该模型使用虚拟机协调客户 *** 作系统和原始硬件(见图2). 这里"协调"是一个关键词, 因为VMM在客户 *** 作系统和裸硬件之间用于工作协调. 一些受保护的指令必须由Hypervisor(虚拟机管理程序)来捕获和处理. 因为 *** 作系统是通过Hypervisor来分享底层硬件.

图2. 全虚拟化: 使用Hypervisor分享底层硬件

全虚拟化的运行速度要快于硬件模拟, 但是性能方面不如裸机, 因为Hypervisor需要占用一些资源. 全虚拟化最大的优点是 *** 作系统没有经过任何修改. 它的唯一限制是 *** 作系统必须能够支持底层硬件(比如, PowerPC).

老机器上的Hypervisors

一些老的硬件如x86, 全虚拟化遇到了问题. 比如, 一些敏感的指令需要由VMM来处理(VMM不能设置陷阱). 因此, Hypervisors必须动态扫描和捕获特权代码来处理问题.

半虚拟化

半虚拟化(Paravirtualization)是另一种类似于全虚拟化的热门技术. 它使用Hypervisor(虚拟机管理程序)分享存取底层的硬件, 但是它的客户 *** 作系统集成了虚拟化方面的代码. 该方法无需重新编译或引起陷阱, 因为 *** 作系统自身能够与虚拟进程进行很好的协作.

图3. 半虚拟化: 通过客户 *** 作系统分享进程

上面提到过, 半虚拟化需要客户 *** 作系统做一些修改(配合Hypervisor), 这是一个不足之处. 但是半虚拟化提供了与原始系统相近的性能. 与全虚拟化一样, 半虚拟化可以同时能支持多个不同的 *** 作系统.

*** 作系统级的虚拟化

最后一个我们需要了解的虚拟化技术是 *** 作系统级的虚拟化(Operating system-level virtualization), 它使用不同于上面的虚拟化方法. 该技术在 *** 作系统之上虚拟多个服务器, 支持在单个 *** 作系统上简单隔离每一个虚拟服务器(见图4).

图4. *** 作系统级的虚拟化: 隔离单个服务器

*** 作系统级的虚拟化需要修改 *** 作系统内核, 它的优点是具有原始主机的性能.

为什么虚拟技术如此重要?

在了解当今主流的linux虚拟化技术之前, 我们先来看虚拟化技术的优点.

从商业角度来看, 使用虚拟化技术有非常多的原因. 不过大多是用于服务器加固. 简单来说, 如果你能够在单个服务上虚拟多个系统, 这样少数的几台计算机显然能够节省耗电, 空间, 冷却和管理开支. 考虑到确定服务器利用状况的困难, 虚拟化技术支持动态迁移(Live Migration). 动态迁移允许 *** 作系统能够迁移到另一台全新的服务器上, 从而减少当前主机的负载.

虚拟化技术对开发人员来说 也非常重要. Linux内核占用了一个单一的地址空间, 这意味内核或任何驱动程序错误都能导致整个 *** 作系统停止工作. 而通过虚拟化你可以运行多个 *** 作系统, 如果其中一个系统由于错误而宕机, Hypervisor和其它的 *** 作系统不会受到任何影响. 这对调试内核来说就如同调试用户空间程序一样.

各种虚拟化技术 服务器虚拟化 物理资源抽象成逻辑资源 一台服务器变成多台,相互独立的虚拟服务器 不局限物理的界限 让硬件变成动态管理的资源池 提高利用率,简化系统管理 桌面虚拟化 将计算机的终端系统进行虚拟化 达到桌面使用的安全性和灵活性 任何设备时间地方都能通过网络访问属于个人的桌面系统 并非本地 *** 作系统提供的桌面 应用程序虚拟化 将应用程序与 *** 作系统解耦 为应用程序提供了一个虚拟的环境(可执行文件+运行环境) 本质是把应用程序对底层的系统和硬件的依赖抽象出来,可以解决程序版本不兼容的问题 也在后台的数据中心里面 存储虚拟化 将异构的存储资源组成一个巨大的存储池 对于用户,透明化了底层的磁盘磁带,直接使用存储资源即可 管理变得方便,根据需要把存储资源分配给各个应用 网络虚拟化 一个物理网络支持多个逻辑网络 保留了网络设计中原有的层次结构、数据通道和所能提供的服务 使得最终用户的体验和独享物理网络一样 提高了网络资源的利用率 虚拟化技术的两种类型 Type1:直接在物理硬件上运行,它控制硬件并管理虚拟机,又叫裸机虚拟机管理程序 Linux KVM:开源的虚拟化平台,是为x86机器开发的基于内核的虚拟机,将Linux内核转变成虚拟机管理程序,因此虚拟机可以直接访问硬件,是一种全虚拟化的裸机虚拟化技术。 Vmware ESXi:直接安装在底层物理硬件上的全虚拟化技术


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7670987.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-08
下一篇2023-04-08

发表评论

登录后才能评论

评论列表(0条)

    保存