專利名稱:Arm 虛擬機(jī)中基于mmu 的外設(shè)訪問控制的實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于嵌入式虛擬化技術(shù)領(lǐng)域,涉及一種ARM虛擬機(jī)中基于MMU的外設(shè)訪問控制的實現(xiàn)方法,適用于底層虛擬機(jī)管理和控制運行在其上層的操作系統(tǒng)對外設(shè)的訪問, 可以滿足多個操作系統(tǒng)在同一硬件平臺下對外設(shè)的不同的訪問需求。
背景技術(shù):
近年來手機(jī)和平板電腦的普及掀起了嵌入式操作系統(tǒng)和嵌入式應(yīng)用程序的開發(fā)熱潮,市場上很快涌現(xiàn)出很多優(yōu)秀的嵌入式操作系統(tǒng)和相應(yīng)的應(yīng)用程序,而ARM處理器因為其高性能和低功耗,成為了最受歡迎的嵌入式應(yīng)用處理器。為了避免針對ARM平臺開發(fā)的應(yīng)用程序在不同嵌入式操作系統(tǒng)之間的移植而又能兼具各操作系統(tǒng)內(nèi)豐富的應(yīng)用,單一 ARM硬件平臺支持多操作系統(tǒng)運行成為熱門的解決方案。目前主流的多操作系統(tǒng)解決方案有兩種,分別是多操作系統(tǒng)獨立運行和多操作系統(tǒng)同時運行。(1)多操作系統(tǒng)獨立運行這種解決方案通過在啟動階段根據(jù)用戶的選擇,加載不同的操作系統(tǒng)鏡像,從而使用不同的操作系統(tǒng)。此方案不需要對操作系統(tǒng)的內(nèi)核和文件系統(tǒng)進(jìn)行修改,減少了開發(fā)的難度,然而此方案在運行時不能進(jìn)行多操作系統(tǒng)的實時切換,必須關(guān)閉當(dāng)前操作系統(tǒng)后才能啟動另一個操作系統(tǒng),在一定程度上造成了用戶的不便。(2)多操作系統(tǒng)同時運行這種解決方案在操作系統(tǒng)下層實現(xiàn)了一個虛擬機(jī)監(jiān)控器,通過虛擬機(jī)管理上層操作系統(tǒng)啟動和運行時的切換。此方案會少量的修改內(nèi)核代碼,并且多系統(tǒng)同時運行時,每個系統(tǒng)性能要略低于其單獨運行時的性能。然而多個系統(tǒng)的同時運行和實時切換可能會帶來更好的用戶體驗。然而同一個硬件平臺同時運行多個操作系統(tǒng)可能引發(fā)多操作系統(tǒng)之間對同一外設(shè)的訪問沖突,例如一個操作系統(tǒng)運行時如果關(guān)閉了其他操作系統(tǒng)正在使用的外設(shè),則會影響其他操作系統(tǒng)的正常運行。這個問題現(xiàn)有的公開的解決方案實現(xiàn)難度普遍較大,而且實現(xiàn)引起的整體性能損失也較大。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種ARM虛擬機(jī)中基于MMU的外設(shè)訪問控制的實現(xiàn)方法,解決多個操作系統(tǒng)同時運行時可能存在的彼此對外設(shè)的訪問沖突。該方法基于 ARM的MMU(Memory Management Unit)對頁表地址的訪問權(quán)限管理,不需要額外的刷新頁表緩沖區(qū)(Translation Lookaside Buffer,簡稱TLB)和高速緩沖存 儲器(cache),使此功能的實現(xiàn)所引起的性能損失降到最低。為解決以上技術(shù)問題,本發(fā)明采用以下技術(shù)方案ARM虛擬機(jī)中基于MMU的外設(shè)訪問控制的實現(xiàn)方法,首先對于可能出現(xiàn)訪問沖突的外設(shè),更改每一個上層操作系統(tǒng)中該外設(shè)寄存器地址所在的段頁表項映射,把對應(yīng)頁表項中的Domain位改為一個錯誤的值,同時在底層虛擬機(jī)的地址空間建立該外設(shè)正確的地址映射,且該底層虛擬機(jī)接管硬件的數(shù)據(jù)異常處理以獲得上層操作系統(tǒng)訪問寄存器的地址和數(shù)據(jù),當(dāng)所述上層操作系統(tǒng)對所述可能出現(xiàn)沖突的外設(shè)進(jìn)行訪問時,出現(xiàn)Domain Fault, 從而進(jìn)入該操作系統(tǒng)的數(shù)據(jù)異常處理模式,該行為被虛擬機(jī)捕獲后,判斷是否是Domain Fault類型,如果不是,則跳回操作系統(tǒng)的地址空間,如果是,則底層虛擬機(jī)對操作系統(tǒng)的數(shù)據(jù)進(jìn)行處理,并依據(jù)處理后的數(shù)據(jù)訪問對應(yīng)外設(shè)寄存器。作為本發(fā)明的優(yōu)選實施例,所述虛擬機(jī)為Xtimes虛擬機(jī),該Xtimes虛擬機(jī)采用地址空間共享方案,即Xtimes虛擬機(jī)占用32位CPU的4G地址空間中的高64M地址空間;作為本發(fā)明的優(yōu)選實施例,當(dāng)所述操作系統(tǒng)對可能出現(xiàn)沖突的外設(shè)進(jìn)行訪問的行為被虛擬機(jī)捕獲后,轉(zhuǎn)入虛擬機(jī)地址空間,然后虛擬機(jī)通過讀取操作系統(tǒng)的處理器的DFSR 寄存器判斷數(shù)據(jù)異常的類型;作為本發(fā)明的優(yōu)選實施例,當(dāng)判斷數(shù)據(jù)異常類型為Domain Fault類型時,虛擬機(jī)讀取操作系統(tǒng)的DFAR寄存器獲取操作系統(tǒng)試圖訪問的寄存器地址,然后讀取數(shù)據(jù)異常模式下的LR寄存器得到數(shù)據(jù)異常發(fā)生時的指令地址和對應(yīng)的數(shù)據(jù);本發(fā)明ARM虛擬機(jī)中基于MMU的外設(shè)訪問控制的實現(xiàn)方法至少具有以下優(yōu)點本發(fā)明實現(xiàn)時,首先更改每一個上層操作系統(tǒng)中指定外設(shè)寄存器地址所在的頁表映射,同時, 在虛擬機(jī)中建立該外設(shè)正確的地址映射,且該虛擬機(jī)接管硬件的數(shù)據(jù)異常處理,這樣,當(dāng)操作系統(tǒng)對該外設(shè)進(jìn)行訪問時,出現(xiàn)錯誤,進(jìn)入數(shù)據(jù)異常模式,由于虛擬機(jī)接管硬件的數(shù)據(jù)異常處理,所以,操作系統(tǒng)對該外設(shè)的訪問被虛擬機(jī)捕獲,在判斷確定是Domain Fault類型后,通過處理異常數(shù)據(jù)后對外設(shè)寄存器進(jìn)行訪問。由此可知,本發(fā)明在實現(xiàn)過程中,不會存在多個操作系統(tǒng)之間對同一外設(shè)的訪問沖突。同時,由于本發(fā)明ARM虛擬機(jī)中基于MMU的外設(shè)訪問控制的過程中,不需要額外的刷新TLB和cache,從而性能損失較小。
圖1為本發(fā)明虛擬機(jī)管理客戶操作系統(tǒng)對設(shè)備訪問示意圖;圖2為本發(fā)明Xtimes虛擬機(jī)總體架構(gòu);圖3為本發(fā)明Xtimes和GuestOS共用頁表的大致結(jié)構(gòu);圖4為本發(fā)明實現(xiàn)所需的Xtimes和GuestOS共用頁表的大致結(jié)構(gòu);圖5為本發(fā)明Xtimes虛擬機(jī)控制多操作系統(tǒng)對硬件寄存器訪問示意圖。
具體實施例方式下面結(jié)合附圖對本發(fā)明ARM虛擬機(jī)中基于MMU的外設(shè)訪問控制的實現(xiàn)方法做詳細(xì)描述首先針對可能出現(xiàn)訪問沖突的外設(shè),更改上層操作系統(tǒng)中該外設(shè)寄存器地址所在的段頁表項映射,把對應(yīng)頁表項中的Domain位改為一個錯誤的值,使上層操作系統(tǒng)對這些寄存器地址進(jìn)行訪問時,會在MMU翻譯地址時發(fā)生Domain Fault,從而引發(fā)數(shù)據(jù)訪問異常進(jìn)入系統(tǒng)的數(shù)據(jù)訪問異常處理。其次在底層虛擬機(jī)地址空間建立該外設(shè)正確的地址映射,使得底層虛擬機(jī)能夠正常訪問該外設(shè)寄存器地址。同時底層虛擬機(jī)需要接管硬件的數(shù)據(jù)異常處理,然后通過讀取數(shù)據(jù)異常時保存現(xiàn)場的特殊寄存器,獲得上層操作系統(tǒng)訪問寄存器的地址和數(shù)據(jù)。本發(fā)明實際是底層虛擬機(jī)將上層操作系統(tǒng)對外設(shè)寄存器的讀寫操作截獲,然后根據(jù)具體情況對操作數(shù)據(jù)進(jìn)行修改后由虛擬機(jī)對相應(yīng)寄存器進(jìn)行訪問,其過程如圖1所示。 下面以Xtimes虛擬機(jī)為 例說明如何利用本技術(shù)方案管理多操作系統(tǒng)對指定外設(shè)寄存器的訪問控制。Xtimes是一款基于ARM平臺的虛擬機(jī)管理系統(tǒng),其上層支持多個GuestOS同時運行,其總體結(jié)構(gòu)如圖2所示。Xtimes虛擬機(jī)采用地址空間共享方案,其中Xtimes占用32 位CPU的4G地址空間中的高64M地址空間,即Xtimes占用一級頁表的高64個段頁表項, 總的頁表結(jié)構(gòu)如圖3所示。Xtimes實現(xiàn)管理并控制上層多操作系統(tǒng)對指定外設(shè)寄存器訪問的具體流程如下首先更改每個GuestOS地址空間中指定外設(shè)寄存器地址所在的頁表映射,對其頁表項賦予錯誤的Domain位,這樣GuestOS試圖訪問這些寄存器地址時就會發(fā)生Domain Fault,從而進(jìn)入系統(tǒng)的數(shù)據(jù)異常模式。同時在Xtimes地址空間中建立對應(yīng)寄存器地址的正常的頁表映射,使得Xtimes可以正常的訪問這些外設(shè)寄存器,更改后的一級頁表如圖4 所示。GuestOS運行過程中如果發(fā)生了對前面指定寄存器地址的訪問,當(dāng)MMU翻譯這些地址時,因為對應(yīng)頁表項含有錯誤的Domain位,從而會引發(fā)了數(shù)據(jù)異常,系統(tǒng)進(jìn)入處理器的數(shù)據(jù)異常模式,同時CPU跳到數(shù)據(jù)異常處理的入口地址(OxFFFFOOlO)處執(zhí)行數(shù)據(jù)異常處理。由于Xtimes接管所有的硬件異常處理,所以這次GuestOS訪問這些寄存器的行為會被 Xtimes捕獲,從而轉(zhuǎn)入Xtimes地址空間。然后Xtimes通過讀取處理器的數(shù)據(jù)錯誤狀態(tài)寄存器(Data Fault Status Register, DFSR)判斷這次數(shù)據(jù)異常的類型,如果不是Domain Fault類型則跳回GuestOS地址空間。如果是Domain Fault則是前面預(yù)設(shè)的特殊寄存器訪問陷阱,此時讀取數(shù)據(jù)錯誤地址寄存器(Data Fault Address Register,DFAR)獲取GuestOS試圖訪問的寄存器地址,然后讀取數(shù)據(jù)異常模式下的LR寄存器(返回地址寄存器)算得數(shù)據(jù)異常發(fā)生時的指令地址和對應(yīng)的數(shù)據(jù)。最后Xtimes根據(jù)具體情況對GuestOS數(shù)據(jù)進(jìn)行處理,并依據(jù)處理后的數(shù)據(jù)訪問對應(yīng)外設(shè)寄存器。因為此時處于Xtimes執(zhí)行環(huán)境,CPU訪問的是Xtimes的地址空間內(nèi)正確的寄存器映射地址,所以這次訪問不會發(fā)生數(shù)據(jù)異常。以上Xtimes虛擬機(jī)管理多操作系統(tǒng)對指定外設(shè)寄存器訪問的具體流程如圖5所示。以上所述僅為本發(fā)明的一種實施方式,不是全部或唯一的實施方式,本領(lǐng)域普通技術(shù)人員通過閱讀本發(fā)明說明書而對本發(fā)明技術(shù)方案采取的任何等效的變換,均為本發(fā)明的權(quán)利要求所涵蓋。
權(quán)利要求
1.ARM虛擬機(jī)中基于MMU的外設(shè)訪問控制的實現(xiàn)方法,其特征在于首先對于需要監(jiān)控的外設(shè),更改每一個上層操作系統(tǒng)中該外設(shè)寄存器地址所在的段頁表項映射,把對應(yīng)頁表項中的Domain位改為一個錯誤的值,同時在底層虛擬機(jī)的地址空間建立該外設(shè)正確的地址映射,且該底層虛擬機(jī)接管硬件的數(shù)據(jù)異常處理以截獲上層操作系統(tǒng)可能出現(xiàn)的地址訪問錯誤,當(dāng)所述上層操作系統(tǒng)對上述外設(shè)進(jìn)行訪問時,出現(xiàn)Domain Fault,從而進(jìn)入處理器的數(shù)據(jù)異常處理模式,該行為被虛擬機(jī)捕獲后,判斷是否是Domain Fault類型,如果不是, 則跳回操作系統(tǒng)的地址空間,如果是,則虛擬機(jī)對操作系統(tǒng)的數(shù)據(jù)進(jìn)行處理,并依據(jù)處理后的數(shù)據(jù)訪問對應(yīng)外設(shè)寄存器。
2.如權(quán)利要求1所述的ARM虛擬機(jī)中基于MMU的外設(shè)訪問控制的實現(xiàn)方法,其特征在于所述虛擬機(jī)為Xtimes虛擬機(jī),該Xtimes虛擬機(jī)采用地址空間共享方案,即Xtimes虛擬機(jī)占用32位CPU的4G地址空間中的高64M地址空間。
3.如權(quán)利要求1所述的ARM虛擬機(jī)中基于MMU的外設(shè)訪問控制的實現(xiàn)方法,其特征在于當(dāng)所述操作系統(tǒng)對需要監(jiān)控的外設(shè)進(jìn)行訪問的行為被虛擬機(jī)捕獲后,轉(zhuǎn)入虛擬機(jī)地址空間,然后虛擬機(jī)通過讀取操作系統(tǒng)的處理器的DFSR寄存器判斷數(shù)據(jù)異常的類型。
4.如權(quán)利要求3所述的ARM虛擬機(jī)中基于MMU的外設(shè)訪問控制的實現(xiàn)方法,其特征在于當(dāng)判斷數(shù)據(jù)異常類型為Domain Fault類型時,虛擬機(jī)讀取操作系統(tǒng)的DFAR寄存器獲取操作系統(tǒng)試圖訪問的寄存器地址,然后讀取數(shù)據(jù)異常模式下的LR寄存器得到數(shù)據(jù)異常發(fā)生時的指令地址和對應(yīng)的數(shù)據(jù)。
5.ARM虛擬機(jī)中基于MMU的外設(shè)訪問控制的實現(xiàn)方法,其特征在于包括以下步驟(1)更改每個操作系統(tǒng)地址空間中指定外設(shè)寄存器地址所在的頁表映射,對其頁表賦予錯誤的Domain位,同時,在下層的虛擬機(jī)地址空間中建立對應(yīng)寄存器地址正確的頁表映射;(2)當(dāng)操作系統(tǒng)在運行過程中發(fā)生了對指定外設(shè)寄存器地址的訪問時,由于對應(yīng)頁表項含有錯誤的Domain位,因此,引發(fā)數(shù)據(jù)異常,操作系統(tǒng)進(jìn)入處理器的數(shù)據(jù)異常模式,同時 CPU跳到數(shù)據(jù)異常處理的入口地址執(zhí)行數(shù)據(jù)異常處理,這時,該操作系統(tǒng)對指定外設(shè)的訪問行為被虛擬機(jī)捕獲,并轉(zhuǎn)入虛擬機(jī)地址空間;(3)虛擬機(jī)通過讀取處理器的DFSR寄存器判斷這次數(shù)據(jù)異常的類型,如果不是Domain Fault類型,則跳回操作系統(tǒng)地址空間,如果是Domain Fault類型,則讀取DFAR寄存器獲取操作系統(tǒng)試圖訪問的寄存器地址,然后通過讀取數(shù)據(jù)異常模式下的LR寄存器獲得數(shù)據(jù)異常發(fā)生時的指令地址和對應(yīng)的數(shù)據(jù),最后虛擬機(jī)根據(jù)具體情況對操作系統(tǒng)數(shù)據(jù)進(jìn)行處理并訪問對應(yīng)外設(shè)寄存器。
全文摘要
本發(fā)明提供了一種ARM虛擬機(jī)中基于MMU的外設(shè)訪問控制的實現(xiàn)方法,首先對于虛擬機(jī)需要監(jiān)控的外設(shè),更改每一個上層操作系統(tǒng)中該外設(shè)物理寄存器地址所對應(yīng)的段頁表項映射,把對應(yīng)頁表項中的Domain位改為一個錯誤的值,同時在底層虛擬機(jī)的地址空間建立該外設(shè)正確的地址映射,且該底層虛擬機(jī)接管硬件的數(shù)據(jù)異常處理以截獲上層操作系統(tǒng)可能出現(xiàn)的地址訪問錯誤,當(dāng)上層操作系統(tǒng)訪問上述外設(shè)地址時,在MMU進(jìn)行地址翻譯時會產(chǎn)生Domain Fault,從而進(jìn)入處理器的數(shù)據(jù)異常處理模式,該行為被虛擬機(jī)捕獲后,通過讀取硬件寄存器以判斷是否是Domain Fault類型,如果不是,則跳回操作系統(tǒng)的地址空間,如果是,則底層虛擬機(jī)對操作系統(tǒng)的此次訪問數(shù)據(jù)進(jìn)行處理,并依據(jù)處理后的數(shù)據(jù)由虛擬機(jī)訪問對應(yīng)外設(shè)寄存器。本發(fā)明可以用來解決多個操作系統(tǒng)同時運行時可能存在的對同一外設(shè)的訪問沖突。
文檔編號G06F9/455GK102306108SQ20111021768
公開日2012年1月4日 申請日期2011年8月1日 優(yōu)先權(quán)日2011年8月1日
發(fā)明者張恩陽, 張瑞智, 李博良, 李國輝, 梅魁志, 蘇至釩 申請人:西安交通大學(xué)