Xen的超级调用.pdf

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Xen的超级调用

Xen 的超级调用 By Echoa 一、超级调用的背景知识 Xen位于操作系统和硬件之间,如图 1所示,为其上运行的Guest OS 内核提供虚拟化的硬 件环境,因而Xen具有最高特权级,而Guest OS被迫迁移到相对低的特权级中,称为特权解 除。xen通常分为半虚拟化(PV)和全虚拟化(HVM)。xen的PV需要操作系统(os)做适当的 修改,这适用于开源os,如linux等。HVM不需要os做修改,适用于windows等版权操作系 统,但它需要得到硬件的支持。由于 xen最初基于32 位X86 平台而设计开发,之后移植到其 它平台,本文将重点关注x86平台。 图1xen 的体系结构 1.xen的半虚拟化(PV)与x86平台的特权模式 x86-32平台提供了四种特权模式,ring 0到ring 3特权逐渐降低。在没有虚拟化的环境 中,通常默认操作系统(如linux,windows等)在ring 0模式,应用程序在ring 3模式;在 泛虚拟化中,xen在ring 0模式,操作系统在ring 1模式,应用程序在ring 3模式。以上情 况如图2所示。然而x86-64平台仅提供了两种特权模式给操作系统,操作系统使用0/3环特 权。在xen的PV 中,xen位于0环,而os和应用程序均位于3环,具体如图3所示。 图2 x86-32平台的特权模式 图3 x86-64平台的特权模式 2.Xen的全虚拟化(HVM)与x86平台的特权模式 在HVM 中由于运行的是未经修改的os,因此对于x86-32平台和x86-64平台,内核和应用 程序运行在0/3环。由于xen具有最高特权级,所以需要硬件辅助技术,目前的硬件支持为 Intel VT (vmx)和AMD SVM技术,这两种技术都新增了一些指令以支持虚拟化。使用技硬件辅 助术时,客户机(xen 中为Domain)可以使用独立的执行模式(称为客户机模式),xen运行 在根(root)模式(相当于新增了-1环)。只要不涉及到关键指令,客户机运行在客户机模 式,当涉及关键指令时,客户机会退出客户机模式(VM exit),进入root模式。在root模式 中执行完相应的关键指令后又会进入客户机模式(VM entry)。Intel Vt技术中的VMCALL指 令会调用VM monitor (即xen 的hypervisor),并且引起VM exit。AMD 的VMMCALL指令会使 客户机可以和VMM (xen中即为hypervisor)通信。 3.超级调用(hypercall)的引入 为了使os使用xen所拥有的特权指令,xen提供了超级调用(hypercall)接口给os。半 虚拟化中,超级调用和操作系统提供给应用程序使用的系统调用概念类似。不同之处在于,xen 使用82中断号,而系统调用使用80中断号。图4为没有虚拟化的os和半虚拟化中系统调用和 超级调用的位置。在xen的Domain支持类型中除了PV和HVM外,还存在一种管理模式内核 (supervisor model kernel),目前还不清楚它的用途。在这种Domain 中,xen和os 同处在 0环,应用程序在3环。由于超级调用和系统调用概念很类似,我们首先回顾一下未虚拟化的 linux操作系统中系统调用的知识。 二、系统调用 系统调用是用户空间应用程序和内核提供的服务之间的一个接口。由于服务在内核中,因 此需要一个进程跨越内核和用户空间。Linux 中实现该功能的方式会根据不同体系有所变化, 甚至同一体系实现方式也会有差异。在x86体系中除了中断方式实现系统调用外,有的硬件还 引入了快速系统调用(sysenter和sysexit),用于快速在0环和3环之间切换。我们将重点 关注i386体系的系统调用。 系统调用的实质是函数调用。用户在调用时向内核传递一个系统调用号,然后系统调用处 理程序通过此号从系统调用表找到相应的内核函数执行(系统调用服务例程),最后返回。 图5:linux系统中实现的系统调用过程 为了唯一的标识每一个系统调用,Linux为每一个系统调用定义了一个唯一的编号,此编号 称为系统调用号。进入内核后,不同的系统调用会找到各自对应的内核函数,这些内核函数被 称为系统

文档评论(0)

ranfand + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档