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 準虛擬化驅動研究》胡冷非,李小勇

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章