首页 > 系统相关 >Linux下KVM平台知识详解(1)——KVM基础知识

Linux下KVM平台知识详解(1)——KVM基础知识

时间:2023-10-19 21:32:59浏览次数:30  
标签:操作系统 虚拟化 虚拟机 KVM 基础知识 硬件 Linux CPU

一、虚拟化简介

(一)虚拟化概述

在计算机中,虚拟化技术是一种资源管理技术,可以将计算机的各硬件资源(包括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/,其主页面如下所示:

Linux下KVM平台知识详解(1)——KVM基础知识_虚拟化

三、QEMU简介

由于KVM使用了类似QEMU的仿模拟处理器,我们再介绍一下QEMU。QEMU是由Fabrice Bellard所编写的一款模拟处理器软件,遵循GPL协议,在Linux平台上被广泛使用。QEMU具有跨平台、高速度的特性,其运行速度能够接近真实计算机的速度。我们很多时候在Linux上安装的KVM平台,基本上都是qemu,可以通过命令去查看。


标签:操作系统,虚拟化,虚拟机,KVM,基础知识,硬件,Linux,CPU
From: https://blog.51cto.com/lifulin/7942286

相关文章

  • Java基础知识-cnblog
    Java基础知识目录Java基础知识第08章面向对象编程(中级部分)306~318多态第10章面向对象编程(高级部分)374~382static类变量和类方法383~385main386~391代码块392~393单例模式394~397final403~412接口413~424内部类第11章枚举和注解425~432Enum枚举433~436注解第12章异......
  • 计算机基础知识记录(1)
    十进制转换二进制:(要注意正数和小数的区别)正数:数字除以2然后继续将商除以2,将余数按照逆序排列即可得到二进制数;例如:28转换为2进制数,28÷2=14,余0;14÷2=7,余0;7÷2=3,余1;3÷2=1,余1;1÷2=0,余1。最后,逆序排列余数即可得到28的二进制表示,即11100。小数部分:乘以2取正数部分,再按......
  • VMware 与 NOI Linux 2.0 安装
    免责声明:考试当天不用VMware,用VituralBox,但我喜欢VMware,且系统内部使用方法基本一样。VMware下载NOILinux2.0下载一、安装VMware打开VMware-Workstation-Lite-17.0.1-21139696-精简安装注册版.exe,进入安装界面。欢迎使用VMwareWorkstationPro安装向导:下一步。......
  • linux yum安装maven
    安装mavenwgethttp://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo-O/etc/yum.repos.d/epel-apache-maven.repoyum-yinstallapache-maven查看mavenhomemvn-v 配置环境变量vi/etc/profile重载环境变量source/etc/profile......
  • SSL证书基础知识
    前言:由于个人网站域名备案快过了,过段时间需要申请SSL证书,故学习下,参考他人博客。1.0简介ssl证书是区分http和https协议的重要区分之一,利用ssl证书可以对服务器进行身份验证,确保链接目标是合法服务器,这样可以避免中间人攻击和欺骗1.1CA证书和SSL证书CA证书是由CA(证书颁发......
  • linux centos7 部署 nodejs 的 express
      链接:https://www.youtube.com/watch?v=oGbLL1_0q64 yuminstallgcc-c++openssl-develmake-ycd/tmpcurl-sLhttps://rpm.nodesource.com/setup|bash-yuminstall-ynodejsnpminstall-gexpress-generatoruseraddusernamepasswdusernamemkdirfirst_project......
  • Linux 软连接 ln -s 简单使用看这篇就够了
    全网很多文章讲源文件和目标文件,或者target和source哪个连到哪个完全没有讲清楚,一个不小心操作失误很容易造成源数据直接丢失!!! 1ln-s/A/B 这里A和B的路径要用绝对路径,执行这个命令就是在当前目录下把B指向A,也就是A是实际存在的,B是虚拟的假的......
  • Java语言基础知识全总结
    一.Java的优点1.      跨平台性。一次编译,到处运行。Java编译器会将Java代码编译成能在JVM上直接运行的字节码文件,C++会将源代码编译成可执行的二进制代码文件,所以C++执行速度快2.      纯面向对象。Java所有的代码都必须在类中书写。C++兼具面向对象和面向过程的特......
  • Linux shell编程学习笔记8:使用字符串
    一、前言字符串是大多数编程语言中最常用最有用的数据类型,这在Linuxshell编程中也不例外。本文讨论了LinuxShell编程中的字符串的三种定义方式的差别,以及字符串拼接、取字符串长度、提取字符串、查找子字符串等常用字符串操作,,以及反引号在echo和expr命令联合使用时的作用。二......
  • Linux shell编程学习笔记4:修改命令行提示符格式(内容和颜色)
    一、命令行提示符格式内容因shell类型而异Linux终端命令行提示符内容格式则因shell的类型而异,例如CoreLinux默认的shell是sh,其命令行提示符为黑底白字,内容为:tc@box:/$其中,tc为当前用户名,box为主机名,/为当前目录路径,$表示当前用户类型是普通用户 。 二、环境变量PS1存储了命令行提......