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共享环中取出相应,进而处理。spa