熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Javascript >> 正文

全面介紹Xen虛擬機 深入學習Xen新起點

2013-11-23 17:56:19  來源: Javascript 

  本文主要是寫給新接觸Xen的開發者及想深入了解Xen的人
  
  Xen VMM(virtual machine monitor)是由劍橋大學計算機實驗室開發的一個開源項目它能夠讓我們創建更多的虛擬機每一個虛擬機都是運行在同一個操作系統上的實例
  
  這些客戶OS可以是修補過的Linux內核也可以是修補過的NetBSD/FreeBSD內核用戶應用程序就運行在這些客戶OS上並不需要修改任何代碼
  
  我曾經緊密跟蹤Xen項目一年多對Xen產生興趣是在讀了年的OLS(Ottawa Linux Symposium)論文集之後
  
  完全虛擬化已經被一些硬件仿真程序實現了硬件仿真器的不利因素是它們的性能
  
  Xen項目(半虛擬化)的思想已經不是很新鮮了性能度量和它達到的高效性能夠被看作是一個突破運行Xen的系統開銷確實非常小大約占
  
  就像剛才所說的那樣現在的Xen要為內核打補丁但是將來的處理器能支持虛擬化內核也就不需要打補丁了比如說Intel的VT和AMD的Pacifica處理器都將包括這種支持
  
  XenSource公司月在Intel開發者論壇(IDF)上發表聲明說它已經利用Intel的VTEnabled平台和Xen技術虛擬化了Linux和Windows XP SP
  
  如果沒有其它虛擬化方法的話Intel的VT和AMD的Pacifica將會在對Xen的支持上展開競爭
  
  同時參與競爭的還有VMWare公司的ESX Server它不是基於Xen的虛擬化解決方案VMWare公司月初聲明他將通過一個叫VMware Community Source的計劃允許他的合作伙伴使用VMware ESX Server的源代碼和接口
  
  VMware的一個顯著優勢就是它不需要在客戶OS上打補丁VMware可能比Xen運行地慢一些因為它使用影子頁表(shadow page tables)而Xen同時使用直接和影子頁表
  
  Xen已經在像Fedora Core Debian和SuSE Professional 這些產品中捆綁發行了它也將被包含在RHEL
  
  針對其它處理器的支持正在有條不紊地進行著Xen小組致力於x_ port同時IBM著手於提供Power 芯片的支持
  
  保護環
  
  在Xen中一個系統管理程序運行在客戶OS運行在應用程序運行在這種關系對於x/有一點不同就是客戶內核和應用程序都運行在環上
  
  Xen自身被稱為系統管理程序是因為它比客戶OS的系統管理代碼運行所需的特權級還高
  
  當系統引導的時候Xen被裝載到環的內存中它在環上啟動修補過的內核這被稱作是domain (譯者注domain是指一個運行中的虛擬機在其上有一個guest OS在執行)從這個domain開始你可以創建更多的domain也可以銷毀它們可以進行domain的遷移設置參數等等你創建的那些domain也運行在環它們的內核中用戶應用程序運行在
  
 

  目前修補過的Linux內核可以作為domain 據Xen開發者所說將來domain 僅支持的內核補丁構造domain 的大部分工作是在xen/arch/x/domain_buildc中的construct_dom()方法中實現的
  
  物理設備驅動程序只能運行在特權級也就是domain Xen依靠Linux或其它修補過的OS內核對它所有的設備提供虛擬化支持這樣的好處就是Xen的開發者不必再去開發設備驅動程序
  
  在一個有標簽TLB的處理器上使用Xen能夠大大提高性能標簽TLB能夠把ASID(address space identifier)放在TLB入口處有了這個特性當處理器在系統管理程序和客戶OS之間切換時就不需要刷新TLB了這大大減少了系統開銷
  
  Xend Deamon
  
  首先我們介紹一下Xend它是Xen控制器daemon意思是說它負責處理創建銷毀遷移以及其它許多domain管理的任務它很大一部分動作是基於一個HTTP服務器的大量對domain的控制請求都是通過發送HTTP請求來實現的
  
  我們在引導進入Xen後通過命令行命令xend start來啟動Xend daemon它需要Python的支持
  
  Xend daemon的工作是建立在與XCS server(the control Switch)的交互上所以當我們啟動Xend daemon時需要檢查一下XCS是否已經啟動和運行了如果沒有我們將試著去啟動它
  
  Srv Daemon是Xend的主要程序啟動Xend daemon就會創建一個Srv Daemon類的實例
  
  接下來在createFactories()方法中創建一個Channel FactoryChannel Factory有一個隱含的notifier對象Xend daemon的大量工作都是基於這個notifier接收的消息的這個factory創建一個線程在一個無限循環中讀取這個notifier
  
  創建domain
  
  創建一個domain是通過使用一個hypercall(DOM_CREATEDOMAIN)來完成的Hypercall是Linux內核中的一個系統調用通過它用戶空間可以調用內核中的方法它通過一個中斷(Int x)來完成在Xen中類似的系統調用就是hypervisor通過它domain 調用hypervisor中的方法它也是通過中斷(Int x)來完成的hypervisor通過它的虛擬CPU訪問每一個domain
  
  XendDomain類和XendDomainInfo類在創建和銷毀domain中扮演著非常重要的角色我們通過調用XendDomain中的domain_create()方法創建一個新的domain
  
  XendDomainInfo類和它的方法主要用於一個domain的實際構造
  
  XCS Server
  
  XCS server有兩個TCP套接字分別是控制連接和數據連接它們不同的地方在於前者是同步的後者是異步的前面提到的notifier對象就是XCS服務器的一個客戶端
  
  創建虛擬設備
  
  XendDomainInfo中的create()方法啟動一個創建domain的動作鏈首先被創建的是這個domain的虛擬設備這個create()方法調用create_blkif()創建一個塊設備接口(blkif)即使VM不需要磁盤它也是必須被創建的另一個虛擬設備通過create_configured_devices()創建
  
  所有的設備類都從Dev繼承Dev是一個聯系設備控制器的抽象類它的attach()抽象方法在每一個Dev類的子類中實現這個方法把前端和後端聯系了起來展示了設備的層次展示了設備控制器的層次
  
 

  

  Domain 運行後端驅動同時最新創建domain運行前端驅動許多消息在後端和前端驅動之間傳送前端驅動感覺上是虛擬的它不需要使用特定硬件的詳細信息
  
  聯系虛擬設備的中斷是虛擬中斷
  
  結論
  
  Xen項目是一個很有趣同時充滿了希望的項目它的代碼很復雜特別是虛擬內存管理活動域合並工具和授權表機制本文僅僅是介紹性的並不涉及這些話題然而我希望它能夠成為想要了解和深入研究代碼的一個出發點
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25389.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.