Xen中DomU与Dom0之间的通信机制

首先介绍用于Dom0和DomU通信的相关技术

事件通道:用于Dom和Xen之间、Dom和Dom之间异步事件通知机制

I/O 共享环:I/O 共享环是在不同Domain 之间存在的一块固定的共享内存,用于在DomainU 和Domain0 之间传递I/O 请求和响应。I/O 共享环利用生产者和消费者的机理,来产生发送以及响应I/O 请求。

授权表(Grant Table):授权表(Grant Table)是在不同Domain 之间高效传输I/O 数据的机制。


以DomU 向I/O 设备写入数据为例:

  1. DomU产生IO请求,在IO共享环中添加请求。
  2. 然后将IO数据放入授权表指向的内存中,等待Dom0来取。
  3. 一切准备就绪,通过事件通道通知Dom0开始处理。
  4. Dom0收到事件通道的通知,知道有数据需要处理。
  5. 然后,Dom0从IO共享环中取出IO请求,分析下到底DomU想要Dom0为他做什么。
  6. 明白要做什么后,将授权表中的数据取出进行处理。
  7. 数据处理完成后,Dom0将处理后信息放入IO共享环,然后通过事件通道发送通知给DomU,告诉他处理完成了。
  8. DomU收到事件通道的通知,从IO共享环中取出相应,进而处理之。
详细说明:
  1. DomainU 的应用程序访问虚拟I/O 设备,DomainU 内核调用对应前端驱动。前端驱动生成I/O 请求,该请求描述了要写入数据的地址和长度等信息,将其写入共享环。
  2. 前端驱动将要写入的数据放入Grant Table , 给Domain0 访问的权限。
  3. 前端驱动通过事件通道通知Domain0。
  4. Xen 调度Domain0 运行时,检查事件,发现有新的I/O请求,调用后端驱动进行处理。
  5. 后端驱动从共享环中拿出I/O 请求,分析I/O 请求。
  6. 后端驱动通过Grant Table 的操作取得DomainU 要写入的数据。
  7. 后端驱动将I/O 请求预处理后调用真实的设备驱动执行写入操作。
  8. I/O 请求完成后,后端驱动产生I/O 响应,将其放入共享环,并通过事件通道机制通知DomainU。
  9. Xen 调度DomainU 运行时,检查事件,发现有新的I/O 响应,则为DomainU 产生模拟中断。
  10. 中断处理函数检查事件通道,并根据具体的事件调用对应前端驱动的响应处理函数。
  11. 前端驱动从共享环中读出I/O 响应,处理I/O 响应。

总结:IO共享环的作用是具体的IO请求(如发送网络数据),是请求!事件通道是通知用的!授权表指向的内存是数据的存储地!


参考自:《基于Xen 的I/O 准虚拟化驱动研究》胡冷非,李小勇

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值