今天继续给大家介绍Linux运维相关知识,本文主要内容是KVM的基础知识。
一、虚拟化简介
(一)虚拟化概述
在计算机中,虚拟化技术是一种资源管理技术,可以将计算机的各硬件资源(包括CPU、内存、磁盘、网络)等予以抽象,转换后呈现出来,以供用户更好的使用。系统虚拟化可以将底层物理设备、上层操作系统和软件之间分离,可以在一台物理设备上划分出多台机器。
虚拟化技术种类有很多,包括软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化、虚拟机等等。
(二)虚拟化分类
对于在计算机上运行虚拟机而言,一个非常重要的问题时硬件的操控,计算机程序的运行离不开CPU、内存、磁盘等硬件的调用。在现代计算机体系结构中,这些对硬件的直接调用离不开操作系统的操控。一般情况下,不允许应用程序直接调用硬件。操作系统上一般运行着很多程序,当多个应用程序都要调用硬件时,为了防止之间的冲突与相互干扰,因此当应用程序向调用硬件资源服务时,必须通过操作系统。在硬件结构上,现代的CPU可以工作在两种模式上,即用户模式和内核模式,计算机操作系统和计算机应用软件在本质上都是代码,也可以称之为指令。为了区别计算机操作系统和计算机应用软件,CPU将操作系统的指令设置为内核模式,将应用软件的操作指令设置为用户模式。对于CPU而言,会拒绝处于用户模式的指令对硬件的直接调用,这是从底层硬件上实现的,CPU将运行状态分为了ring0到ring3,ring0就代表了内核模式,ring3就代表了用户模式。
那么如果应用程序在执行过程中,如果要调用硬件,就会产生中断,此时该应用程序会放弃对CPU的接管,转而由操作系统控制CPU,这样,CPU就处于内核模式下了,这样就可以调用硬件了。总之,应用程序是处于用户模式的,对应用系统的调用要通过操作系统。
虚拟机对宿主机而言,在本质上也是一种应用程序,运行在虚拟机上的程序,要调用系统硬件时,就相当于虚拟机这个应用程序要调用硬件,这就带来了虚拟化技术的一个重要问题,根据虚拟化技术对这个问题的解决,我们把虚拟化技术分为了三种:
1、仿真虚拟化
仿真虚拟化的思想是借助虚拟机这一平台,将虚拟机操作系统要执行的内核态指令进行“翻译”,最后返回到虚拟机操作系统上。这一套过程需要异常捕捉和异常处理机制,因此速度较慢。虚拟机操作系统认为自己的特权指令执行正常,并不知道自身处于一个虚拟的环境中。在全虚拟化中,虚拟机的用户态执行具有和系统指令执行一样的速度,但是内核态的指令由于要进行处理,因此要花费较多的时间。
2、半虚拟化
半虚拟化的思想是修改虚拟机操作系统,使其指令运行在用户态模式上,将原来的内核态质量采用其他的方式代替。这样一来,虚拟机操作系统就明白自己是在虚拟系统上运行。这样做的缺点是需要修改虚拟机操作系统的内核,与其原有的内核等价,但是能够在用户态模式上运行。XEN是一种典型的半虚拟化技术,但是由于微软的windows操作系统没有这种修改后的内核,因此XEN只支持Linux,不支持Windows。
3、硬件虚拟化
硬件虚拟化,这需要CPU硬件厂商的支持,例如Intel的Intel-VT技术。CPU厂商需要将自己的CPU进行改变,在用户态和内核态的基础上,增加专门用于虚拟机运行的模式,使得虚拟机运行在这种模式上,从而可以直接执行内核态的程序。KVM就是处于硬件虚拟化的模式。
二、KVM简介
KVM,Kernel Virtual Machine的简写,即基于内核的虚拟机。自Linux2.6.20后集成在Linux的各种发行版本中,现已成为学术界的主流虚拟机之一。
KVM的虚拟化实现是使用Linux自身的调度器进行管理,核心源码较少。在KVM中,每一个虚拟机都是由Linux调度程序管理的标准进程。但是KVM虚拟化的实现需要硬件支持(比如Intel的VT技术和AMD的V技术),是基于硬件的完全虚拟化。
KVM官网网址为:https://www.linux-kvm.org/,其主页面如下所示:
三、QEMU简介
由于KVM使用了类似QEMU的仿模拟处理器,因此在最后我们再介绍一下QEMU。QEMU是由Fabrice Bellard所编写的一款模拟处理器软件,遵循GPL协议,在Linux平台上被广泛使用。QEMU具有跨平台、高速度的特性,其运行速度能够接近真实计算机的速度。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200
今天的文章KVM是什么_kvm教程分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/58025.html