概述:当虚拟机的Guest OS需要执行一些更高权限的操作(如:页表的更新、对物理资源的访问等)时,由于自身在非特权域无法完成这些操作,于是便通过调用Hypercall交给Xen Hypervisor来完成这些操作。与系统调用类似,Xen启用130号中断向量端口作为超调用的中断号。这一中断向量的DPL被设置为1,类型为中断门。超调用能够由处于特权级1的客户机操作系统发起,而不能从用户态发起。

    在Xen3.0版本前,通过在每个调用的封装例程中直接执行中断汇编指令(INT 0x82)来完成超级调用;而在Xen3.0版本之后,采用了调用函数的方式,通过建立超级调用页来实现超级调用的间接使用。超调用页在虚拟机启动前被初始化(HVM虚拟域的初始化、Ring0对应域的初始化、Ring1对应域的初始化),在虚拟机内核启动时,这个页被映射到在客户机操作系统的一个固定的虚拟地址上。一个超级调用页被分为128块,每块长度为32字节。在初始化时,每一块都会写入一段发起超级调用的汇编代码。第i块的汇编代码会将编号i作为参数来发起超调用。在需要发起超调用时,客户机操作系统将超调用页中每块汇编片段当作一个函数,需要调用第i号超调用就调用第i块代码片段。
   Hypercall的代码实现:
首先超级调用页中的代码通过_hypercall0()等函数进行调用,在函数中宏HYPERCALL_STR(name)即为CALL指令,用于调用超级调用页中代码。
“call hypercall_page + ("__stringfy(__HYPERVISOR_##name)" * 32)”
hypercall_page的值为超级调用页在Guest OS地址空间内的虚拟地址,与由超级调用号决定的页内位移相加的结果即为对应代码地址。
   自定义Hypercall的方法
1、注册一个新的系统调用号
     xen/include/public/xen.h
     #define __HYPERVISOR_print_op 39
2、更新系统调用号
     /xen/arch/x86/x86_64/entry.S
    ENTRY (hypercall_table)
    .long do_tmem_op
    .long do_print_string
3、定义新函数
     /xen/include/asm-x86/hypercall.h中定义新函数
     extern int
     do_print_string(
     char* message);
     /xen/arch/x86/XX.c中实现do_print_string
     int do_print_string(char *message) {...}
4、重新编译代码即可
   应用程序使用Hypercall的方法
由于3环的应用程序无权申请超级调用,即将超级调用请求先传递给1环的Guest OS内核,再由Guest OS内核申请超级调用,Xen系统提供连一个特殊的内核驱动程序privcmd来完成这个工作,privcmd的作用是将位于用户空间的超级调用请求传递到Guest OS内核中。
1、定义privcmd系统调用结构体
privcmd_hypercall_t my_hypercall={
    __HYPERVISOR_read_dom_mem,{domainId,(unsigned long long)&readBuffer,10,0,0}
   };
2、调用privcmd驱动程序

在内核驱动程序privcmd中涉及的操作都是通过file_operation数据结构中的函数指针ioctl来提供的,  
fd=open("/proc/xen/privcmd",O_RDWR);
if(fd<0){
perror("can not open /proc/xen/privcmd");
exit(1);
}
ret=ioctl(fd,IOCTL_PRIVCMD_HYPERCALL,&my_hypercall);

Xen超级调用详细实现相关推荐

  1. Xen设计的理念--超级调用

    针对x86体系结构,Xen使用超级调用来替换被监控的操作,其中包括x8架构下的临界指令.Xen所采用的超级替换的方法是一种全新的设计理念:它将问题的中心,由VMM移向Gust os自身,通过主动的方式 ...

  2. Liunx实现超级签名详细攻略(一)超级签名简介

    本文将从零开始详细讲解在Liunx中完全自动化实现超级签名流程. iOS超级签名: 主要目的: 把开发的APP不通过App Store安装到用户手机中. 优点: 不用上架App Store,稳定不掉签 ...

  3. SpringBoot 自动配置原理(超级无敌详细)-2

    SpringBoot 自动配置原理(超级无敌详细)-1 2.自动配置的实现 刚刚我们整体的过了一下主配置文件是如何实现的,但我们还没深入的研究如何实现自动装配功能.我们回到这个文件下,找一个具体的自动 ...

  4. hadoop +hbase+zookeeper 伪分布安装(超级无敌详细)

    hadoop +hbase+zookeeper 伪分布安装(超级无敌详细) hadoop 配置 图片打不开的可以点击下方链接直接去图床查看,辣鸡CSDN 安装jdk sudo apt update// ...

  5. HTML_超级链接详细讲解

    HTML 超级链接详细讲解: http://www.jb51.net/web/10637.html 以上这篇简单易懂,30min全部看完,很好的html入门,主要讲了超级链接,以下是练习部分代码: & ...

  6. 【超级无敌详细的黑马前端笔记!即时更新~】

    [超级无敌详细的黑马前端笔记!即时更新~] 这个笔记,是我自己在同步学习黑马前端使用的,不可以商用哦 学习路径 基础概念铺垫(了解) 认识网页 五大浏览器和渲染引擎 Web标准 HTML初体验 HTM ...

  7. 在html中超链接_HTML 超级链接详细讲解

    超级链接 超级链接是网站中使用比较频繁的HTML元素,因为网站的各种页面都是由超级链接串接而成,超级链接完成了页面之间的跳转.超级链接是浏览者和服务器的交互的主要手段,在后面的技术中会逐步深化学习. ...

  8. HTML 超级链接详细讲解

    超级链接 超级链接是网站中使用比较频繁的HTML元素,因为网站的各种页面都是由超级链接串接而成,超级链接完成了页面之间的跳转.超级链接是浏览者和服务器的交互的主要手段,在后面的技术中会逐步深化学习. ...

  9. 【c++】——函数的堆栈调用详细过程

    文章目录 1.main函数中的前期执行过程 2.sum函数中的执行过程 2.1函数{之间的指令执行过程 2.2 sum函数内部代码执行过程 2.3函数}之前执行的指令 3.总结 这篇文章,主要在汇编的 ...

最新文章

  1. 超越99.9%人类玩家,微软专业十段麻将AI论文细节首次公布
  2. Python3 与 C# 面向对象之~封装
  3. python手机版iphone-Python编程狮下载
  4. ai模仿声音软件_如何开发人工智能类的软件?人工智能让我们的生活更加便捷!...
  5. 简单的一阶低通滤波器
  6. [云炬mysql数据库笔记] Work2
  7. arthas jvm相关命令使用示例:jvm、sysprop
  8. 粉色温馨——HTML框架示例
  9. 音视频技术开发周刊 82期
  10. 实战GraphQL+express+mysql项目完整demo
  11. 赋予用户最高权限的一点“挫折”
  12. Hive 基础及安装
  13. 掘金企服:ICP经营许可证和ICP备案的区别
  14. 文件分片_文件分片上传原理解析
  15. AdaBoost--从原理到实现
  16. Spring Cloud Alibaba Sentinel之服务熔断篇
  17. 拖拉机大战更新了,更多新功能
  18. Spring AOP Introductions
  19. APP开发定制开发语言
  20. 马尔可夫毯/马尔科夫链/因果图/贝叶斯网络

热门文章

  1. installation of package ‘ ‘ had non-zero exit status
  2. 水星路由器wan口ip显示0_wan口状态ip地址为0.0.0.0
  3. [面试日记] 1,时隔五年再次开始面试
  4. “打工与创业”普通人该怎么选择;唯有创业才能改变命运实现财务自由。丨国仁网络资讯
  5. 使用 Docker 和 Nginx 打造高性能的二维码服务
  6. mysql数据库的原则_mysql数据库的表设计原则
  7. html图片靠右浮动 文字左侧环绕,关于html:将图片浮动到右下角,文字环绕
  8. 2021年第十二届蓝桥杯软件类省赛python组试题及其解析。
  9. select下拉框添加搜索功能
  10. 【DEBUG】2021-06-27 不定期的自我检讨002