一、指令模拟

处理器虚拟化的关键在于正确的模拟指令行为,其中涉及到三个概念:虚拟寄存器、上下文和虚拟处理器。

虚拟寄存器

从某种程度上说,物理处理器无非包括了一些存放数据的物理寄存器,并且规定了使用这些寄存器的指令集。程序代码就是物理处理器按照一段预先写好的指令流,在给定时间点使用给定的部分物理寄存器来完成某种目的。

在没有虚拟化的环境中,操作系统直接访问物理寄存器,处在最高级权限,可以控制系统中的所有关键资源,包括寄存器、内存和I/O外设。而当虚拟机接管物理处理器之后,操作系统运行在非最高级权限后,其试图访问关键资源的指令就成为了敏感指令。虚拟机会使用各种手段,保证敏感指令的执行能够触发异常,从而陷入到虚拟机中进行模拟,防止对虚拟机运行的破坏。

所以,当客户机操作系统试图访问关键资源的时候,该请求不会真正发生在物理寄存器上。相反,虚拟机会通过准确的模拟物理处理器的行为,将其访问定位到虚拟机为其设计与物理寄存器对应的虚拟寄存器上。当然,从虚拟机的实现上来说,这样的虚拟器往往是在内存中。

上下文

在没有虚拟化的环境中,操作系统直接负责物理处理器管理,负责进程间调度和切换。但当虚拟机接管物理处理器之后,操作系统运行在虚拟机为其设计的虚拟处理器上,并在虚拟处理器上负责该操作系统内进程间调度和切换。虚拟机管理物理处理器,负责虚拟处理器的调度和切换。

不管何种调度切换,必然要涉及到保留现场,这个现场就是上下文状态。只不过,对于操作系统而言是进程上下文,对于虚拟机而言是虚拟处理器上下文。(程序运行在操作系统上以进程的形式存在,操作系统运行在虚拟机上以虚拟处理器的形式存在。虚拟机不关心虚拟处理器上运行的是操作系统还是其他的什么代码,它面对的运行单元室虚拟处理器,它只负责虚拟机理器的上下文正确。而操作系统也一样,它不管进程运行的是代码有没有longjmp,有没有信号处理程序,它只负责进程上下文正确)

虚拟处理器上下文比进程上下文更负责,因为客户操作系统本身包含许多敏感指令,会试图访问和修改物理处理器上定义的所有寄存器,而这种访问和修改会被虚拟机重定位到虚拟处理器上。所以,对于虚拟处理器,其上下文包括了更多的系统的寄存器,上下文的保存和恢复也更为复杂。(曾经看过Linux和Fiasco内核中对虚拟化的支持,有大量的数据结构定义了物理处理器定义的寄存器,通用的系统的杂的。当然,不是全部的,因为操作系统一般不会使用全部的指令和寄存器。所定义的,也只是物理处理器定义的所有寄存器的子集)

虚拟处理器

虚拟处理器是一个逻辑上虚拟机的概念,而不是物理的概念,可分别从客户操作系统和虚拟机去看待理解它。

客户操作系统角度:要求虚拟处理器与其”期望“的物理处理器一致的功能和行为。典型的”期望“包括:

1、指令集合和执行效果

2、可用寄存器集合,系统的通用的

3、运行模式(运行模式决定了指令执行效果、寻址宽度与限制、保护粒度等)

4、地址翻译系统

5、页保护机制

6、中断/异常机制

虚拟机角度:虚拟处理器是需要模拟完成的一组功能集合。虚拟处理器的功能可以由物理处理器和虚拟机共同完成。对于非敏感指令,物理处理器直接解码处理,并将相关结果直接反应到物理寄存器上;而对于敏感指令,虚拟机负责陷入再模拟,并将相关结果反应到虚拟寄存器上。从程序角度出发,虚拟机陷入再模拟的这部分也就是一组数据结构(虚拟寄存器)和相关处理代码(模拟指令)的集合。

概括来讲,虚拟机利用了处理器的保护机制来完成的,其宗旨是让敏感指令能陷入虚拟机中被模拟执行,而不是直接作用在真实硬件上。它有以下几种方式:

1、基于处理器的保护机制出发的异常

2、主动触发异常

3、异步中断

二、中断和异常的模拟及注入

异常保证了系统程序对处理器关键资源的绝对控制,而中断提供了与外设之间更有效的一种交互模式。所以,虚拟机在实现虚拟机处理器时,必须正确模拟中断与异常的行为。

异常模拟及注入

虚拟机对异常的虚拟化需要安全遵照物理处理器对于各种异常条件的定义,根据虚拟处理器当前的内容,来判断是否需要模拟一个虚拟异常,并注入到虚拟环境中。

虚拟机通常会在异常处理程序和指令模拟代码中进行异常虚拟化检查。虚拟机需要区分两种情况:

1、虚拟机异常。虚拟机自身对运行环境和上下文的设置违背了指令正确执行的条件。

2、客户代码异常。客户代码运行在非最高特权级,由于虚拟化原因触发的异常。

第二种情况是由于陷入再模拟的虚拟化方式所造成的,并不是虚拟机本身的行为。

中断模拟及注入

物理中断的触发来源于特定的物理中断源,同样,虚拟中断的触发来自于虚拟设备的模拟程序。当设备模拟器发现虚拟设备状态满足中断产生的条件,会将这个虚拟中断通知给中断控制器的模拟程序。虚拟机会在特定的时候检测虚拟中断控制器的状态,来决定是否模拟一个中断的注入。

不管怎样,当虚拟机决定向虚拟机注入一个中断或是异常时,它还需要严格模拟物理处理器的行为来改变客户指令流的路径,而且还要包括一些必需的上下文保护与恢复。

中断/异常的虚拟化由中断/异常源定义,中断/异常源与虚拟机处理器虚拟化模块间的交互机制以及最终模拟注入的过程组成。

(以前看Fiasco代码时,里面对中断的模拟就有chip数据结构。当时对中断虚拟化了解不多,对x86中断过程了解不够彻底,导致我总以为这部分代码是多余的,哈哈)

三、对称多处理器技术的模拟

虚拟机也可以为客户操作系统提供多个虚拟处理器,也就是客户对称多处理器虚拟化技术,客户操作系统与虚拟机按照自己的逻辑管理虚拟处理器。

在客户对称多处理器引入后,虚拟机面临着物理处理器以及虚拟处理器之间的同步问题。(同步锁问题,而不是内存的硬件同步,其实仔细想想,内存的硬件同步问题在这个环境中不存在)

1、对于发生在虚拟机上的同步问题,由虚拟机负责协调物理处理器之间同步问题。

2、对于发生在客户操作系统上的同步问题,虚拟机并不参与。只需要在客户操作系统发起某些特权同步操作,如刷新页表,清理cache时,正确的模拟其效果即可。

3、对于虚拟机造成的虚拟处理器之间的同步问题,仍需要虚拟机来负责。比如,当N个虚拟处理器,运行在M(N<M)个物理处理器上时,虚拟机需要负责所有M个物理处理器上的状态同步。(我理解的就是,虚拟处理器可能迁移到不同的物理处理器上,其cache不一样可能导致遗留,复用垃圾)

客户对称多处理技术需要模拟一套初始化及通信机制,以便让客户操作系统能正确的识别并管理虚拟处理器。这套方式甚至可以自定义一套简单的协议,但必须修改客户操作系统代码以适应。

第三章 虚拟化概述(处理器虚拟化)相关推荐

  1. 虚拟化概述与虚拟化应用场景

    虚拟化.云计算.大数据.智慧城市,是近期以及将来一段时间的热点.现在虚拟化产品很多,做虚拟化的公司也很多,就是一些应用软件也在向"虚拟化"靠近.面对纷繁杂乱的市场,对于我们用户来说 ...

  2. 汤晓丹的第四版计算机操作系统--第三章总结概述

    第三章 处理机调度与死锁 在多道程序系统中,调度的实质是一种资源分配,处理机调度是对处理机资源进行分配. 处理机调度的层次:高级调度,中级调度,低级调度. 处理机调度算法的目标:资源利用率,公平性,平 ...

  3. 虚拟化之路一:虚拟化概述

    虚拟化技术定义 广义定义:将任何一种形式的资源抽象成另一种形式的技术. 在计算机中: All computer problems can be solved with another layer of ...

  4. 【KVM系列03】KVM的I/O 全虚拟化和准虚拟化

    第三章 I/O 全虚拟化和准虚拟化 1. 全虚拟化 I/O 设备 1.1 原理 1.2 QEMU 模拟网卡的实现 1.3 RedHat Linux 6 中提供的模拟设备 1.4 qemu-kvm 关于 ...

  5. 《Linux KVM虚拟化架构实战指南》——第1章 KVM虚拟化概述 1.1XEN虚拟化介绍

    本节书摘来自异步社区<Linux KVM虚拟化架构实战指南>一书中的第1章,第1.1节,作者:何坤源著,更多章节内容可以访问云栖社区"异步社区"公众号查看 第1章 KV ...

  6. 解读三种虚拟化之路连载一:x86虚拟化概述

    从1998年开始,VMware创造性的将虚拟化引入x86平台,通过二进制翻译(BT)和直接执行的模式,让x86芯片可以同时运行不同的几种操作系统,并且确保性能.稳定性和安全性. 从那时起,数以万计的企 ...

  7. 读《系统虚拟化-原理与实现》-第三章

    虚拟化概述 概念: 在虚拟环境里,虚拟机监控器(VMM)抢占了操作系统的位置,编程的物理机的管理者,同时向上层的软件呈现出虚拟的硬件平台,欺骗着上层的操作系统 虚拟机可以看做是物理机的一种高效隔离的复 ...

  8. 《VMware、Citrix和Microsoft虚拟化技术详解与应用实践》一1.1 虚拟化概述

    1.1 虚拟化概述 在了解虚拟化之前,你可能会提出以下一些问题: 什么是虚拟化? 为什么我们需要虚拟化? 虚拟化技术有哪些? 虚拟化的历史由来是怎样的? 怎么才能实现虚拟化技术? 1.1.1 虚拟化的 ...

  9. 虚拟化概述及VMware VSphere介绍

    虚拟化概述及VMware VSphere介绍: 虚拟化打破了物理硬件与操作系统及在其上运行的应用程序之间的硬性连接.操作系统和应用程序在虚拟机中实现虚拟化之后,便不再因位于单台物理计算机中而受到种种束 ...

  10. 云计算----虚拟化概述、CPU虚拟化、内存虚拟化、IO虚拟化、aSV虚拟化、aSAN等技术原理

    1.虚拟化概述 (1)虚拟化的几个概念 Guest OS:运行在虚拟机之上的操作系统 Guest Machine:虚拟出来的虚拟机 Hypervisor (Virtual Machine Monito ...

最新文章

  1. 常看 Shell: 文本文件操作
  2. 学习Java第一个月
  3. Storm单节点部署及启动
  4. MyBatis 问题(持续更新)
  5. hbase简介(大数据技术)
  6. 董明珠解释举报奥克斯初衷:这不仅是企业间的竞争 更是道德的选择
  7. 简单的网络协议:TCP/UDP HTTP/HTTPS
  8. 触控屏c语言程序,TouchWin编程软件下载_TouchWin触摸屏软件下载 2.D.2c 官网版_当载软件站...
  9. 二叉搜索树(二叉排序树)
  10. JQuery的Ajax跨域请求的解决方案
  11. python基础教程廖雪峰云-为什么看不懂廖雪峰的Python学习教程?
  12. LOJ10102旅游航道
  13. 基于51单片机交通灯控制器(东西通行_南北通行_按键启动)
  14. 阿里巴巴程序员常用的 15 款开发者工具!你知道几个?
  15. ps学习——基本工具
  16. 「写论文」“常用关联词”汇总
  17. 文本编辑器 - 同时编辑多行
  18. 安卓手机免root权限恢复微信聊天记录(以vivo手机为例)
  19. (一)SDN基本架构
  20. Matlab实现图书管理系统

热门文章

  1. 常用软件官方下载地址
  2. Spark SVN + Eclipse 3.3 + Subversive Installation Guide
  3. 未雨绸缪,数据保护之NBU介质备份
  4. MATLAB获取附加功能的方法
  5. java自动化测试面试题_自动化测试面试题
  6. 计算机无线网络连接怎么弄,Win7系统如何设置无线网络连接?
  7. TransE算法原理与案例
  8. NR LTE UMTS GSM CDMA TDS频点频率换算工具
  9. vue导出数据为excel且设置样式
  10. 全开源的固定资产设备管理系统,JAVA项目源码