Qemu-KVM基本工作原理分析

2023-11-20

1、理解KVM与Qemu的关系

 

    我们都知道开源虚拟机KVM,并且知道它总是跟Qemu结合出现,那这两者之间有什么关系呢?

    首先,Qemu本身并不是KVM的一部分,而是一整套完整的虚拟化解决方案,它是纯软件实现的,包括处理器虚拟化、内存虚拟化以及各种虚拟设备的模拟,但因为是纯软件模拟,所以性能相对比较低。

     而广义的KVM实际上包含两部分,一部分是基于LINUX内核支持的KVM内核模块,另一部分就是经过简化和修改Qemu。

KVM内核模块模拟处理器和内存以支持虚拟机的运行,Qemu主要处理I/O以及为用户提供一个用户空间工具来进行虚拟机的管理。两者相互结合,相辅相成,构成了一个完整的虚拟化平台。

 

2、KVM运行时的三种模式

 

    在虚拟机运行时,有三种模式,分别是:

    客户模式:我们可以简单理解成客户机操作系统运行在的模式,它本身又分为自己的内核模式和用户模式。

    用户模式:为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O,Qemu运行在这个模式之下。

    内核模式:模拟CPU以及内存,实现客户模式的切换,处理从客户模式的退出。KVM内核模块运行在这个模式下。

    三种模式的层次关系我们可以用图简单描述一下:

    

3、KVM工作原理

 

         KVM的大致工作原理:用户模式的Qemu利用接口libkvm通过ioctl系统调用进入内核模式。KVMDriver为虚拟机创建虚拟CPU和虚拟内存,然后执行VMLAUNCH指令进入客户模式,装载Guest OS并运行。Guest OS运行过程中如果发生中断或者影子缺页等异常,将暂停Guest OS的运行并保存当前上下文退出到内核模式来处理这些异常。内核模式处理这些异常时如果不需要I/O则处理完成后重新进入客户模式,如果需要I/O则进入到用户模式,由Qemu来处理I/O,处理完成后进入内核模式,再进入客户模式。

         KVM的工作原理如图:

        

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qemu-KVM基本工作原理分析 的相关文章

随机推荐

  • 计算某字符出现次数

    描述 写出一个程序 接受一个由字母 数字和空格组成的字符串 和一个字符 然后输出输入字符串中该字符的出现次数 不区分大小写字母 数据范围 1 n 1000 1 le n le 1000 1 n 1000 输入描述 第一行输入一个由字母和数字
  • 深度学习系列37:CLIP模型

    1 模型说明 含义 CLIP Contrastive Language Image Pre training git地址 https github com openai CLIP paper https arxiv org abs 2103
  • SpringCloud使用Zookeeper作为服务注册发现中心

    本篇文章主要记录SpringCloud使用Zookeeper作为服务注册发现中心 通过服务提供者和消费者为例 来真正掌握zk注册中心 目录 一 搭建服务提供者 1 创建cloud provider payment8004项目 2 修改配置
  • BCrypt密码加密的简单使用

    一 BCrypt基础 在一个项目中 只要涉及用户的登陆注册 就涉及到用户密码的保护 用户的密码存在数据库是对管理员是透明的 所以为了防止管理员泄露密码 提高用户密码的安全性 我们通常会对用户密码进行加密后再存入数据库 目前MD5与Bcryp
  • 微信小程序瀑布流布局

  • Spring Boot:从入门到实践的全面指南

    文章目录 1 Spring Boot简介及特性 1 1 简介 什么是Spring Boot 1 2 特性 Spring Boot的优势与特点 1 3 四大核心 Spring Boot的核心组成 2 Spring Boot入门案例 2 1 S
  • 重启CDH服务

    找到cm的目录 cd opt cm 5 13 2 etc init d 查看sever状态 cloudera scm server status 重启server cloudera scm server restart 再次查看sever状
  • Micropython开发篇三--基于F411 CE的移植编译

    Micropython开发篇三 基于F411 CE的移植编译 最近在学操作系统 RTOS与Linux 对Micropython有些新的认知 回头又复习了一下Micropython 简直要不要这么优秀 希望通过这篇文章能带给大家不一样的Mic
  • Python - 函数注解

    Python3提供一种语法 用于为函数声明中的参数和返回值附加元数据 或者也可以称之为注释 def my function Something about your function pass 文档注释可以通过下面这种方式查看 print
  • MyBatis高级查询:一对多映射collection集合实现机构-用户-角色-菜单三级嵌套查询

    学习自MyBatis从入门到精通 嵌套查询 会执行额外的SQL语句 团队网站的结构关系我是做成了机构用户角色菜单三层嵌套查询 今天一天进行了实现 遇到的错误真的很多 我们知道association collection关联的嵌套查询这种方式
  • TCP协议、VLSM、CIDR思维导图

    ICMP 网络层协议 用来在网络设备间传递各种差错 控制 查询等信息 对于收集各种网络信息 诊断和排除各种网络故障
  • CocosCreator列表scrollview滑动速度的修改,鼠标滚动速度修改

    由于cocos creator 在pc端 使用scrollview 鼠标滚动速度太慢 原文地址 CocosCreator列表滑动速度的修改 简书CocosCreator列表滑动速度的修改 简书引擎版本 2 2 2 之后升级的2 4 0直接可
  • Android发送POST网络请求

    参考链接 Android 网络请求 网络请求 Okhttp 51CTO博客 android 网络请求 项目中需要通过发送网络请求获取需要显示的数据内容 请求地址和requestbody如上图所示 网络请求用 implementation c
  • Java顺序表

    1 顺序表的定义 顺序表是用物理地址连续存储单元依次存储元素的线性数据结构 一般底层采用数组存储 其中Arraylist也是一个动态修改的数组 于此大致相同 在计算机科学中 数组是由一组元素 值或变量 组成的数据结构 每个元素有至少一个索引
  • JSONUtils

    package com xiolift mdm common util import com alibaba druid util StringUtils import com alibaba fastjson JSON import co
  • SpringBoot 集成 Mybatis

    SpringBoot 集成 Mybatis 详细教程 只有操作 没有理论 仅供参考学习 一 操作部分 1 准备数据库 1 1 数据库版本 C WINDOWS system32 gt mysql V mysql Ver 8 0 25 for
  • Python:sklearn数据预处理中fit(),transform()与fit_transform()的区别

    一 前提 sklearn里的封装好的各种算法使用前都要fit fit相对于整个代码而言 为后续API服务 fit之后 然后调用各种API方法 transform只是其中一个API方法 所以当你调用transform之外的方法 也必须要先fi
  • 送书|入门Python之后还是搞不定面试、做不来项目,推荐读读这本书

    又到了每周三送书的时刻啦 本周送书 Python工匠 Python 能干的事情实在太多了 掰着指头数有点不够用 Web 开发 数据分析 网络爬虫 自动化运维 后台开发 机器学习 如果你知道主攻哪个方向 只需重点去学习 不过 不论哪个方向 P
  • 阿里云sls日志服务的简单监控 php实现

    欢迎加入 新群号码 99640845 由于工作需要最近接触了阿里云的sls日志服务 写了一个基于阿里云sls日志服务和SDK的简单的监控脚本 首先需要开通阿里云的日志服务并且可以通过控制台读取相应日志 这里不就不详细说了 http blog
  • Qemu-KVM基本工作原理分析

    1 理解KVM与Qemu的关系 我们都知道开源虚拟机KVM 并且知道它总是跟Qemu结合出现 那这两者之间有什么关系呢 首先 Qemu本身并不是KVM的一部分 而是一整套完整的虚拟化解决方案 它是纯软件实现的 包括处理器虚拟化 内存虚拟化以