XenStore: 使用,結構和原理(2. XenStore的結構和通訊流程)

來源:互聯網
上載者:User
文章目錄
  • 2.     xenstore結構和通訊資料流程
2.     xenstore結構和通訊資料流程

XenStore結構

 

XenStore包含兩個模組:Dom0使用者空間的xenstored服務主模組,和Dom*裡的XenBus核心模組;此外,還有各種通訊介面。各個部分的功能如下:

Xenstored:Dom0使用者空間的一個服務,負責管理xenstore的資料(tdb),並且處理所有的請求。

XenBus:核心模組,提供Dom*核心訪問xenstore的API,提供使用者空間的xenfs介面(/proc/xen/xenbus)。Dom0的Xenbus還要初始化xenstored的運行環境。

共用頁面:每一個Domain(包括Dom0自身)都有一個與Dom0通訊的共用頁面(共用環),這個頁面同時被映射到了xenstored的記憶體空間。也就是說這個頁面可以同時被xenstored、dom0核心、和對應的DomU核心讀寫。Xenstored會隨時監控頁面,只要環被任意一方更新,xenstored就會直接處理訊息,不需要核心模組幹預。

Xenstore特殊檔案:

檔案

路徑

功能

xenbus

/proc/xen

XenBus使用者介面。使用者把請求寫入該檔案,經由核心發送到共用環

以下只在dom0中

 

 

tdb

/var/lib/xenstored

xenstore的資料庫,存放在dom0的/var/lib/xenstored/tdb,可以用tdbtool開啟

socket, socket_ro

/var/run/xenstored

Dom0直接操縱xenstored的介面

xsd_port, xsd_kva

/proc/xen

用於Dom0初始化

 

XenStore的通訊協定:

Xenstore各個模組間的通訊內容——請求和回複——都封裝成為一種資料包,格式定義在檔案xs_wire.h中。

[cpp]
view plaincopyprint?
  1. struct xsd_sockmsg  
  2. {  
  3.      uint32_t type;  /* XS_??? */  
  4.    uint32_treq_id;/* Request identifier, echoed in daemon's response.  */  
  5.      uint32_ttx_id; /* Transaction id (0 if not related to a transaction). */  
  6.      uint32_t len;   /* Length of data following this. */  
  7.    
  8.      /* Generally followed bynul-terminated string(s). */  
  9. };  

而共用頁面上定義了一個環結構xenstore_domain_interface:

[cpp] view plaincopyprint?
 
  1. #define XENSTORE_RING_SIZE 1024  
  2. typedef uint32_t XENSTORE_RING_IDX;  
  3. #define MASK_XENSTORE_IDX(idx) ((idx) & (XENSTORE_RING_SIZE-1))  
  4. struct xenstore_domain_interface {  
  5.      char req[XENSTORE_RING_SIZE]; /* Requests to xenstore daemon. */  
  6.      char rsp[XENSTORE_RING_SIZE]; /* Replies and async watch events. */  
  7.      XENSTORE_RING_IDX req_cons, req_prod;  
  8.      XENSTORE_RING_IDX rsp_cons, rsp_prod;  
  9. };  

DomU通訊流程

DomU的核心將請求放入共用環,這時Dom0的xenstored會直接檢測到這個改變並執行操作,最後把結果返回共用頁面。DomU的使用者空間需要通過/proc/xen/xenbus來操作xenstore。

DomU向XenStore寫入資料的xs_write函數調用流程:

DomU的核心調用流程:

 

Dom0 User、Kernel 通訊流程

Dom0的流程和DomU類似。但是在客戶空間,可以通過socket方式直接連接xenstored進行操作,不需要通過xenbus繞圈子。這也就是老版本Xen裡面,xs_domain_open和xs_daemon_open的區別。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.