1:I/O设备虚拟化将设备驱动分为三个部分:前端FE,后端BE和原生驱动。其中后端驱动和原生驱动在Dom0(IDD)中。
2:前端驱动和后端驱动之间I/O请求的传递通过一个环状队列(I/O环)来实现。I/O环模型中,共有两个生产者-消费者对:前端驱动是请求生产者和响应消费者;后端驱动是请求消费者和响应生产者。实际上,I/O环是供DomU和Dom0(或IDD)访问的共享内存。
图片描述

请求生产者和响应消费者由Guest OS控制;请求消费者和响应生产者由Xen控制。
3:为了实现大量DMA数据在DomU和Dom0之间的传递,Xen采用授权表机制,直接替换页面映射关系来避免不必要的内存拷贝。每个Domain都有一个授权表,指明它的哪个页面可以被哪些Domain访问。
4:以DomU向I/O设备写入数据为例:
图片描述

(1)DomU产生I/O请求,在IO共享环中添加请求。
(2)然后将I/O数据放入授权表指向的内存中,等待Dom0来取。
(3)一切准备就绪,通过事件通道通知Dom0开始处理。
(4)Dom0收到事件通道的通知,知道有数据需要处理。
(5)Dom0从I/O共享环中取出I/O请求,分析DomU想要Dom0为他做什么。
(6)明白要做什么后,将授权表中的数据取出进行处理。
(7)数据处理完成后,Dom0将处理后信息放入I/O共享环,然后通过事件通道发送通知
给DomU,告诉他处理完成了。
(8)DomU收到事件通道的通知,从IO共享环中取出相应,进而处理。

本文固定链接: http://www.js-code.com/ios/ios_53648.html