使用事件通道

原创 2015年07月06日 21:38:11
  1. 事件和中断

    事件是从Hypervisor到客户机,或者客户机之间传递消息的标准机制。从概念上类似于Unix的信号,每一个事件传递一位信息:也就是对应事件已经发生。信号传递标准方式是通过一个来自Hypervisor的向上调用(upcall),像信号一样,当另一个事件正在被处理时,消息任然能够被传递。因此在一个事件处理过程中国通常禁用事件传递。与UNIX不同的是,在传递被禁止时所发生的事件并不会发生丢失,在对应出过程被重新使用后,他们不会被传输,但是通过查询共享信息页面中的相关虚拟VCPU结构体可以检查到现有的尚未处理的事件。在很多情况下,Xen事件替代了硬件中断。中断是一种异步通信的事件,标识与机器硬件相关的一些事情发生。事件时一种异步传输的事件,标识和虚拟机相关的事件发生。一个实际的网卡在每次数据包到达的时候会发生一个信号,而虚拟接口会发送一个事件。

  2. 处理陷阱(Trap)

    除了事件之外,Xen还提供了一种异步通知的更底层形式-陷阱。和事件能够动态创建和绑定不同,Trap具有静态意义,直接对应于硬件中断。在IA32规范中将中断分为3大类:被使用的,未被是应该的,以及被保留的。最前面20个中断都是被使用的,接下来的11个中断是被保留的,剩余的则是未被是使用的。在未被使用的中断中,80h通常被用于系统调用。传递一个trap所需要的代码路径比传递时间所需的代码路径更加简单。当客户机运行在一个特定CPU上,Hypervisor为 guest Domain设置中断描述表(IDT),这意味着所有的中断都被客户机直接处理,从而中断处理路径将不再涉及Hypervisor。
    Xen guest Domain不能使用SYSCALL或SYSENTER来完成快速系统调用,应为他们将直接跳转到Hypervisor常驻的特权级0,接着必须返回guest OS kernel,而更多传统80h中断的方法被使用是通过该80h建立陷阱向量,使得guest Domain能够处理系统调用,而不需Hypervisor参与。与半虚拟化不通过,HVM guest kernel运行在ring0,而Hypervisor运行在一个新的模式中,对特权级0影藏,这意味着提供快速跳转到Ring 0功能的SYSCALL和SYSETER能够用于系统调用该。

  3. 事件类型
    事件分为3大类:域间事件(interdomain events)、物理IRQ、虚拟IRQ。
    物理IRQ:他们是实际的IRQ到事件通道的映射,与trap不同,即使Domain没有被调度运行时,事件也会别写入队列中,在Domain被调度运行时事件被传递,它们应该被用于与硬件设备通信中。
    虚拟IRQ:它们类似于物理IRQ,但是与虚拟设备相关。
    Domain间事件:它的定义更加模糊,它们由两个阶段过程创建出来,一个Domain分配一个新的未绑定通道,并允许其他Domain绑定到该通道。第二Domain分配一个新的未绑定通道到远端Domain端口处。

  4. 请求事件
    请求事件时一个相当简单的过程,所有需做的绑定一个事件通道到一个事件源。–实际的IRQ或者远端Domain的事件通道。
    一、绑定通道到一个事件源;
    二、为该事件分配一个处理程序。

  5. 绑定事件通道到VCPU上
    对于但处理器的guest Domain,事件被传递给唯一一个VCPU。对于SMP的guest Domain,可能给定事件对应的处理程序希望被绑定到特定VCPU。在非虚拟化客户机这更有用,应为这样可以更好的利用该处理器的缓冲;在虚拟化系统中同样有用,这样允许实现更加廉价的加锁操作,以及更加灵敏的调度决策。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Xen事件通道实现通讯设计及说明

在前面四篇文章介绍过Xen的事件通道机制后,设计一个简单的通讯样例,并进行原理说明 1、建立dom时完成事件通道的建立与初始化(vcpu绑定) 1.1 事件通道的初始化 domain_creat...

Xen事件通道详细介绍(一)

1、基本概念 事件通道(Event Channel)是Xen用于Dom和Xen之间、Dom和Dom之间的异步事件通知机制,事件通道的应用非常广泛,Xen体系结构上的物理中断(pIRQ)、虚拟中断(v...

Xen事件通道详细介绍(四)

4、事件通道的使用 在GOS内部,除了位于特权级1的GOS内核需要使用事件通道外,位于特权级3的应用程序也可能需要使用事件通道。为此,Xen采用了类似于特权级3使用超级调用的方式(privcmd内核...

Xen前后端分离设备驱动模型通信过程分析(包括事件通道、授权表、环缓冲区)

首先,在Xen分离设备驱动模型中,前端驱动通过事件通道、环缓冲区和授权表来和后端进行交互;        “事件通道”是类似于中断的一种机制,用于通知虚拟机对事件进行处理。当有请求等待处理,或者请求已...
  • YSBJ123
  • YSBJ123
  • 2016年08月16日 11:24
  • 609

Xen事件通道详细介绍(二)

3、事件通道的操作 Dom与事件通道相关的操作都需要通过Xen提供的超级调用HYPERVISOR_event_channel_op或HYPERVISOR_event_channel_op_compa...

VB.NET 中多个类共用一个事件通道

项目中要将C#代码(多个类共用一个事件通道)转换成VB.NET ,觉得有一定的技术含量,以供参考. C#代码示例如下:   public delegate void showMsgEventHan...

Xen 超级调用 和 事件通道

超调用

Xen事件通道详细介绍(三)

3.2 发送事件通知 事件通道的使用包含发送方和接收方两个使用者。结构上,事件通道的发送具有单向性,即只能由发送方通过事件通道发送事件通知,由接收方接收并处理事件通知。事件通知的发送,仅仅只是通过设...

4(phonegap源码分析)通道模块的事件订阅机制(channel)

channel模块式所有模块中比较核心的一个模块,它定义一个通道,在这个通道上有一个事件,你可以订阅这个事件,当这个事件被激发的时候,所有注册在这个通道上的订阅者都能收到。这里的订阅者其实就是一个函数...

Xen半虚拟化下,IO共享环、事件通道、授权表之间的联系和区别

最后的例子很有意思,文章出处: http://blog.csdn.net/qianlong4526888/article/details/7553105 初学Xen,对于DomU与Dom0之间的通信...
  • YSBJ123
  • YSBJ123
  • 2016年10月21日 16:13
  • 199
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用事件通道
举报原因:
原因补充:

(最多只允许输入30个字)