初学Xen,对于DomU与Dom0之间的通信机制概念不清晰,现总结如下供大家参考,仅作抛砖引玉之用。找到一篇论文,《基于Xen的IO准虚拟化驱动研究》(胡冷非)讲得不错,拿来参考。
(1)I/O共享环:在不同Domain之间存在的一块固定的共享内存,用于在DomU和Dom0之间传递I/O请求和响应。I/O共享环利用生产者和消费者的机理来产生发送以及响应IO请求。
(2)授权表:在不同Dom之间高效传输IO数据的机制。通过授权表把内存映射到目的Dom或者把内存传送到目的Dom。
(3)事件通道:用于Dom和Xen之间、Dom和Dom之间异步事件通知机制。
注意上面的粗体字。
以DomainU向IO设备写入数据为例:
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共享环中取出相应,进而处理之。
总结:IO共享环的作用是具体的IO请求(如发送网络数据),是请求!事件通道是通知用的!授权表指向的内存是数据的存储地!
举个不十分恰当的例子:A(DomU)请B(Dom0)帮忙保存一些贵重物品S(数据),首先A写一张纸条(IO共享环),上面说明请求B帮忙做的事情,放到B的门口,然后敲门(事件通道)。B听到敲门(事件通道的中断)后开门看到纸条(IO共享环),分析上面的内容后,去到A固有的地点(授权表上写明的内存地址)取物品S。一切做完后写个纸条(IO共享环)贴到A门口,敲门(事件通道)。