運行虛擬機的控制方法和裝置制造方法
【專利摘要】本發(fā)明實施例提供一種運行虛擬機的控制方法和裝置,該方法包括:在第一虛擬機的本次運行過程中,當所述第一虛擬機需訪問控制寄存器中的第一寄存器時,讀取宿主機的狀態(tài)位,獲得宿主機的狀態(tài)值;當根據(jù)所述宿主機的狀態(tài)值確定所述宿主機處于宿主機非核心態(tài)時,則讀取所述第一虛擬機的狀態(tài)位,獲得所述第一虛擬機的狀態(tài)值;當根據(jù)所述虛擬機的狀態(tài)值確定所述第一虛擬機處于虛擬機核心態(tài)時,則控制所述第一虛擬機訪問所述第一寄存器;通過該運行虛擬機的控制方法和裝置,優(yōu)化了虛擬機訪問控制寄存器的過程,減小了虛擬機訪問控制寄存器引起的關(guān)閉重啟次數(shù),降低了宿主機的性能開銷。
【專利說明】運行虛擬機的控制方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明實施例涉及計算機【技術(shù)領(lǐng)域】,尤其涉及一種運行虛擬機的控制方法和裝置。
【背景技術(shù)】
[0002]隨著云計算的流行,系統(tǒng)虛擬化得到了越來越快的發(fā)展,越來越多的架構(gòu)推出了虛擬化的解決方案,例如MIPS架構(gòu)通常采用半虛擬化硬件規(guī)范或全虛擬化硬件規(guī)范。其中,全虛擬化硬件規(guī)范中,基于已有的精簡指令集架構(gòu)(Micropr-ocessor withoutinterlocked piped stages,簡稱MIPS),增加了額外的操作模式及相關(guān)寄存器,并且增加了雙地址翻譯及相關(guān)寄存器;而半虛擬化硬件規(guī)范中,相比與全虛擬硬件規(guī)范,只增加了額外的操作模式及相關(guān)寄存器。
[0003]具體的,虛擬機在宿主機(也稱物理機)上運行時,需要虛擬機的虛擬地址與宿主機的物理地址之間的翻譯做以運行支持,從而在全虛擬化的硬件規(guī)范中,通過使用TLB (Translat1n Lookaside Buffer,翻譯為轉(zhuǎn)換旁視緩沖器)來實現(xiàn)虛擬機的虛擬地址與宿主機的物理地址之間的翻譯,因此全虛擬化的硬件規(guī)范中,基于已有的MIPS架構(gòu)下的TLB的基礎(chǔ)上,設(shè)置了額外的TLB,以供虛擬機使用,相應(yīng)的,也設(shè)置了額外的用于控制該額外的TLB的寄存器。但半虛擬化硬件規(guī)范是為了減少MIPS架構(gòu)下全虛擬化硬件規(guī)范實現(xiàn)的復(fù)雜度而提出的一種折中方案,相比于全虛擬化方案,不具有額外的TLB,因此也不具有專門供虛擬機使用的用于控制上述額外TLB的寄存器。因此當虛擬機基于已有的MIPS架構(gòu),通過訪問控制TLB寄存器以使用TLB時,該虛擬機則被迫關(guān)閉,需要通過宿主機上的VMM (Virtual Machine Monitor,虛擬機管理器)訪問控制TLB寄存器,從而通過TLB以實現(xiàn)虛擬機的虛擬地址與宿主機的物理地址之間的翻譯,隨后上述被迫關(guān)閉的虛擬機再次啟動繼續(xù)運行。
[0004]可以理解的,虛擬機的運行會多次需要進行虛擬機的虛擬地址與宿主機的物理地址之間的翻譯,由此導(dǎo)致多次使用控制TLB寄存器以訪問TLB的事件,因此在現(xiàn)有技術(shù)中,虛擬機需要多次被迫關(guān)閉,隨后再重啟,而虛擬機的多次關(guān)閉重啟,增大了宿主機的性能開銷。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實施例提供一種運行虛擬機的控制方法和裝置,用于優(yōu)化虛擬機訪問控制寄存器的過程,減小虛擬機訪問控制寄存器引起的關(guān)閉重啟次數(shù),降低性能開銷。
[0006]第一方面,本發(fā)明實施例提供一種運行虛擬機的控制方法,包括:
[0007]在第一虛擬機的本次運行過程中,當所述第一虛擬機需訪問控制寄存器中的第一寄存器時,讀取宿主機的狀態(tài)位,獲得宿主機的狀態(tài)值;
[0008]當根據(jù)所述宿主機的狀態(tài)值確定所述宿主機處于宿主機非核心態(tài)時,則讀取所述第一虛擬機的狀態(tài)位,獲得所述第一虛擬機的狀態(tài)值;
[0009]當根據(jù)所述虛擬機的狀態(tài)值確定所述第一虛擬機處于虛擬機核心態(tài)時,則控制所述第一虛擬機訪問所述第一寄存器。
[0010]結(jié)合第一方面,在第一實施方式中,所述根據(jù)所述宿主機的狀態(tài)值確定所述宿主機處于宿主機非核心態(tài),包括:
[0011]判斷所述宿主機的狀態(tài)值是否標識為非核心狀態(tài),當所述宿主機的狀態(tài)值標識為非核心狀態(tài),確定所述宿主機處于宿主機非核心狀態(tài);
[0012]所述,根據(jù)所述虛擬機的狀態(tài)值確定所述第一虛擬機處于虛擬機核心態(tài),包括:
[0013]判斷所述虛擬機的狀態(tài)值是否標識為核心狀態(tài),當所述虛擬機的狀態(tài)值標識為核心狀態(tài),確定所述宿主機處于宿主機非核心狀態(tài)。
[0014]結(jié)合第一方面第一實施方式,在第二實施方式中,所述控制方法應(yīng)用于處理器,且所述處理器中新增有判斷邏輯,所述判斷邏輯,在執(zhí)行訪問控制寄存器指令時觸發(fā),用于判斷所述宿主機的狀態(tài)值是否標識為非核心狀態(tài),還用于判斷所述虛擬機的狀態(tài)值是否標識為核心狀態(tài)。
[0015]結(jié)合第一方面至第一方面第二實施方式中的任一種實施方式,在第三實施方式中,當所述第一虛擬機本次運行過程開始之前,所述控制方法還包括:
[0016]將所述第一虛擬機對應(yīng)的暫存空間所存儲的前次現(xiàn)場數(shù)據(jù)恢復(fù)至所述控制寄存器,以使所述第一虛擬機開始本次運行過程;
[0017]所述現(xiàn)場數(shù)據(jù)用于在虛擬機第一次運行結(jié)束之后保證該虛擬機正確進行第二次運行。
[0018]結(jié)合第一方面第三實施方式,在第四實施方式中,當所述第一虛擬機本次運行過程結(jié)束時,所述控制方法還包括:
[0019]將所述第一虛擬機的本次現(xiàn)場數(shù)據(jù)存儲至所述第一虛擬機對應(yīng)的暫存空間。
[0020]結(jié)合第一方面第四實施方式中的任一種實施方式,在第四實施方式中,所述第一寄存器為用于控制轉(zhuǎn)換旁視緩沖器TLB的寄存器。
[0021]第二方面,本發(fā)明實施例提供一種運行虛擬機的控制裝置,包括:
[0022]獲取模塊,用于在第一虛擬機的本次運行過程中,當所述第一虛擬機需訪問控制寄存器中的第一寄存器時,讀取宿主機的狀態(tài)位,獲得宿主機的狀態(tài)值;
[0023]確定模塊,用于根據(jù)所述獲取模塊獲得的所述宿主機的狀態(tài)值確定所述宿主機處于宿主機非核心態(tài),
[0024]則所述確定模塊觸發(fā)所述獲取模塊讀取所述第一虛擬機的狀態(tài)位,獲得所述第一虛擬機的狀態(tài)值;
[0025]當所述確定模塊根據(jù)所述獲取模塊獲得的所述虛擬機的狀態(tài)值確定所述第一虛擬機處于虛擬機核心態(tài)時,
[0026]則所述確定模塊觸發(fā)控制模塊,所述控制模塊用于控制所述第一虛擬機訪問所述第一寄存器。
[0027]結(jié)合第二方面,在第一實施方式中,所述確定模塊,包括:
[0028]第一判斷單元,用于判斷所述獲取模塊獲得的宿主機的狀態(tài)值是否標識為非核心狀態(tài),當所述宿主機的狀態(tài)值標識為非核心狀態(tài),確定所述宿主機處于宿主機非核心狀態(tài);
[0029]第二判斷單元,用于判斷所述獲取單元獲取的虛擬機的狀態(tài)值是否標識為核心狀態(tài),當所述虛擬機的狀態(tài)值標識為核心狀態(tài),確定所述宿主機處于宿主機非核心狀態(tài)。
[0030]結(jié)合第二方面第一或第二實施方式,在第三實施方式中,所述控制裝置還包括:
[0031]存儲模塊,用于將所述第一虛擬機對應(yīng)的暫存空間所存儲的前次現(xiàn)場數(shù)據(jù)恢復(fù)至所述控制寄存器,以使所述第一虛擬機開始本次運行過程;
[0032]所述現(xiàn)場數(shù)據(jù)用于在虛擬機第一次運行結(jié)束之后保證該虛擬機正確進行第二次運行。
[0033]結(jié)合第二方面第三實施方式,在第四實施方式中,所述存儲模塊還用于
[0034]將所述第一虛擬機的本次現(xiàn)場數(shù)據(jù)存儲至所述第一虛擬機對應(yīng)的暫存空間。
[0035]結(jié)合第二方面第四實施方式,在第五實施方式中,所述第一寄存器為用于控制轉(zhuǎn)換旁視緩沖器TLB的寄存器。
[0036]在本發(fā)明實施例提供的運行虛擬機的控制方法和裝置,當?shù)谝惶摂M機訪問控制寄存器中的第一寄存器時,即使宿主機處于非核心態(tài),但根據(jù)第一虛擬機的狀態(tài)位獲知第一虛擬機處于核心態(tài),便可控制該第一虛擬機訪問第一寄存器,不需要使第一虛擬機重啟,便可完成對第一寄存器的訪問,從而減小了宿主機上虛擬機發(fā)生重啟的次數(shù),進而可減小宿主機用于重啟虛擬機的開銷。
【專利附圖】
【附圖說明】
[0037]圖1為本發(fā)明運行虛擬機的控制方法實施例一的流程圖;
[0038]圖2為本發(fā)明運行虛擬機的控制方法實施例二的流程圖;
[0039]圖3為本發(fā)明運行虛擬機的控制裝置實施例一的結(jié)構(gòu)圖;
[0040]圖4為本發(fā)明運行虛擬機的控制裝置實施例二的結(jié)構(gòu)圖。
【具體實施方式】
[0041]圖1為本發(fā)明運行虛擬機的控制方法實施例一的流程圖。如圖1所示,本實施例的執(zhí)行主體為運行虛擬機的控制裝置,該控制裝置可以采用軟件和/或硬件的方式實現(xiàn),優(yōu)選的,該控制裝置可以設(shè)置在承載虛擬機的宿主機(也稱宿主機)上,具體的,該控制方法包括:
[0042]S101、在第一虛擬機的本次運行過程中,當?shù)谝惶摂M機需訪問控制寄存器中的第一寄存器時,讀取宿主機的狀態(tài)位,獲得宿主機的狀態(tài)值。
[0043]上述第一虛擬機為宿主機當前運行的虛擬機,可以理解的,虛擬機的運行需要宿主機作為承載的載體,因此可以將虛擬機看作宿主機上的一種進程,則虛擬機作為進程是按照進程內(nèi)的指令在宿主機上運行,當某一條指令指示該虛擬機訪問控制寄存器時,運行虛擬機的控制裝置可以訪問宿主機的狀態(tài)寄存器,以讀取宿主機的狀態(tài)位,從而獲得宿主機的狀態(tài)值。
[0044]S102、當根據(jù)宿主機的狀態(tài)值確定宿主機處于宿主機非核心態(tài)時,讀取第一虛擬機的狀態(tài)位,獲得第一虛擬機的狀態(tài)值。
[0045]基于已有的MIPS架構(gòu),宿主機上的虛擬機訪問控制寄存器的行為是不能在宿主機非核心態(tài)下發(fā)生的,若發(fā)生虛擬機在宿主機非核心態(tài)下訪問控制寄存器的特殊情況時,則由宿主機處理這種特殊情況,并且虛擬機進行重啟;在本實施例中,為了實現(xiàn)第一虛擬機不發(fā)生重啟便可訪問控制寄存器,因此,本實施例中運行虛擬機的控制裝置進一步獲取第一虛擬機的狀態(tài)值;具體的,上述控制裝置繼續(xù)訪問狀態(tài)寄存器,讀取第一虛擬機的狀態(tài)位,以獲得第一虛擬機的狀態(tài)值;其中控制裝置在本步驟所訪問的狀態(tài)寄存器與SlOl中訪問的狀態(tài)寄存器可以為同一個,但根據(jù)宿主機的系統(tǒng)架構(gòu)的不同,如虛擬機的狀態(tài)位由另一個狀態(tài)寄存器保存時,則本步驟中控制裝置所訪問的狀態(tài)寄存器與SlOl中的狀態(tài)寄存器可以不一樣。
[0046]S103、當根據(jù)虛擬機的狀態(tài)值確定第一虛擬機處于虛擬機核心態(tài)時,則控制第一虛擬機訪問第一寄存器。
[0047]可以理解的,宿主機上運行的一個虛擬機相當于在宿主機上的虛擬了一個完整的計算機系統(tǒng),則獨立的以該虛擬的計算機系統(tǒng)的角度來看,該虛擬的計算機系統(tǒng)也是具有核心態(tài)和非核心態(tài)的區(qū)分;基于已有的MIPS架構(gòu),上述第一寄存器屬于特權(quán)資源,僅能在虛擬機的核心態(tài)下被訪問,因此運行虛擬機的控制裝置只能允許第一虛擬機在虛擬機核心態(tài)下才可訪問第一寄存器。
[0048]具體的,在實際應(yīng)用中,上述控制寄存器中的第一寄存器可以為用于控制轉(zhuǎn)換旁視緩沖器TLB的寄存器,而第一虛擬機訪問第一寄存器時,根據(jù)實際應(yīng)用的不同,可能會更改第一寄存器中所存儲的數(shù)據(jù),或者查詢第一寄存器中的數(shù)據(jù)。
[0049]舉例來說,第一虛擬機需要使用TLB實現(xiàn)虛擬機的虛擬地址與宿主機的物理地址之間的翻譯時,只要根據(jù)S103確定第一虛擬機處于虛擬機核心態(tài)下,運行虛擬機的控制裝置可以控制第一虛擬機直接訪問控制TLB寄存器,從而完成對TLB的操作,例如增加或修改地址翻譯的內(nèi)容。
[0050]在本實施例中,當?shù)谝惶摂M機訪問控制寄存器中的第一寄存器時,即使宿主機處于非核心態(tài),但運行虛擬機的控制裝置根據(jù)第一虛擬機的狀態(tài)位獲知第一虛擬機處于核心態(tài),便可控制該第一虛擬機訪問第一寄存器,不需要使第一虛擬機重啟,便可完成對第一寄存器的訪問,從而減小了宿主機上虛擬機發(fā)生重啟的次數(shù),進而可減小宿主機用于重啟虛擬機的開銷。
[0051]圖2為本發(fā)明運行虛擬機的控制方法實施例二的流程圖。如圖2所示,本實施例是在圖1所示的實施例的基礎(chǔ)上,做出進一步的描述,具體的,本實施例的執(zhí)行主體仍然為運行虛擬機的控制裝置,該運行虛擬機的控制裝置集成在本實施例運行虛擬機的控制方法所應(yīng)用的處理器中,所述處理器與現(xiàn)有技術(shù)相比,新增由判斷邏輯,該判斷邏輯在運行虛擬機的控制裝置執(zhí)行訪問控制寄存器指令時觸發(fā),具體如下:
[0052]S201、將第一虛擬機對應(yīng)的暫存空間所存儲的前次現(xiàn)場數(shù)據(jù)恢復(fù)至控制寄存器,以使第一虛擬機開始本次運行過程。
[0053]可選的,本實施例中的虛擬機可以為KVM(Kernel-based Virtual Machine,基于內(nèi)核的虛擬機),其中現(xiàn)場數(shù)據(jù)用于在虛擬機第一次運行結(jié)束之后保證該虛擬機正確進行第二次運行。
[0054]如前述實施例中所述,虛擬機在每一次的運行過程中,由于運行虛擬機的控制裝置控制第一虛擬機訪問了控制寄存器,而虛擬機對控制寄存器的訪問會更改控制寄存器中的數(shù)據(jù),即虛擬機在一次運行過程中,使控制寄存器中的數(shù)據(jù)發(fā)生更新,當虛擬機完成本次運行過程后,宿主機繼續(xù)運行其他任務(wù),若前述更新后的數(shù)據(jù)仍然存儲在控制寄存器中,則會影響宿主機的正常運行,且宿主機此時的運行也會訪問控制寄存器,則會將控制寄存器中虛擬機更新的數(shù)據(jù)覆蓋或修改,則上述虛擬機再次運行時,無法正常運行,因此,通常在虛擬機結(jié)束一次運行過程的同時,將控制寄存器中所存儲的、對應(yīng)于該虛擬機本次運行過程的更新后的數(shù)據(jù),作為本次的現(xiàn)場數(shù)據(jù)(context)保存至該虛擬機對應(yīng)的暫存空間中,以便虛擬機在下次運行時進行現(xiàn)場恢復(fù)。常見的index寄存器、EntryHi寄存器等,虛擬機在一次運行過程中會訪問這些寄存器,并使這些寄存器中的數(shù)據(jù)發(fā)生更新,舉例來說,在虛擬機A的第一次運行過程中,虛擬機A訪問控制寄存器,并將用于表示翻譯地址的變量i的賦值由0001更改為0101,若虛擬機I在進行第二次運行之前,若針對虛擬機A沒有進行現(xiàn)場數(shù)據(jù)恢復(fù),則虛擬機A在控制寄存器中無法獲得正確信息“i = 0101”,從而虛擬機A無法確定正確的地址,則虛擬機A的運行會發(fā)生錯誤,不可正常運行,因此需要執(zhí)行S201,針對第一虛擬機進行現(xiàn)場數(shù)據(jù)的恢復(fù);上述“第一次”和“第二次”為相對概念,即在tl時刻運行了虛擬機A,在t2時刻再次運行虛擬機A,則對于t2時刻來說,tl時刻運行的虛擬機過程為第一次運行,而t2時刻則為第二次運行;可以理解的,當t3時刻再次運行虛擬機A時,對于t3時刻來說,t2時刻則為第一次運行,t3時刻為第二次運行;
[0055]具體的,當?shù)谝惶摂M機在前次運行結(jié)束時,便將針對第一虛擬機的前次現(xiàn)場數(shù)據(jù)存儲至該第一虛擬機對應(yīng)的暫存空間,則在第一虛擬機開始本次運行過程之前,將第一虛擬機對應(yīng)的暫存空間所存儲的前次現(xiàn)場數(shù)據(jù)恢復(fù)至控制寄存器,以使第一虛擬機開始本次運行過程;其中暫存空間是宿主機上針對該宿主機所承載的各個虛擬機對應(yīng)設(shè)置的各個存儲空間,該各個暫存空間用于存儲對應(yīng)的各個虛擬機的現(xiàn)場數(shù)據(jù)。
[0056]當然可以理解的,若該第一虛擬機是首次在宿主機上運行則上述暫存空間存儲的是運行虛擬機的初始化數(shù)據(jù),可以將該初始化數(shù)據(jù)看做第一虛擬機進行本次運行所需的現(xiàn)場數(shù)據(jù)。
[0057]S202、在第一虛擬機的本次運行過程中,當所述第一虛擬機需訪問控制寄存器中的第一寄存器時觸發(fā)判斷邏輯;
[0058]S203、判斷邏輯讀取宿主機的狀態(tài)位,獲得宿主機的狀態(tài)值。
[0059]S204判斷邏輯判斷所述宿主機的狀態(tài)值是否標識為非核心狀態(tài);若是,執(zhí)行S205 ;若否,則停止。
[0060]當所述宿主機的狀態(tài)值標識為非核心狀態(tài),判斷邏輯確定所述宿主機處于宿主機非核心狀態(tài)。
[0061]基于現(xiàn)有的MIPS架構(gòu),虛擬機不能在宿主機的核心態(tài)下運行,因此當通過S204判斷為宿主機核心態(tài),則說明當前宿主機運行的程序是非虛擬機,則本實施例不再實施,即運行虛擬機的控制裝置停止工作。
[0062]S205、判斷邏輯讀取第一虛擬機的狀態(tài)位,獲得第一虛擬機的狀態(tài)值。
[0063]S206、判斷邏輯判斷第一虛擬機的狀態(tài)值是否標識為核心狀態(tài);若是,執(zhí)行S207 ;若否,則執(zhí)行S208。
[0064]S207、基于判斷邏輯判斷第一虛擬機處于虛擬機核心態(tài),控制第一虛擬機訪問第一寄存器。
[0065]具體參照S103,且在執(zhí)行完本步驟后繼續(xù)運行該第一虛擬機,可以理解的,在隨后的運行過程中,當?shù)谝惶摂M機根據(jù)指令需要再次訪問控制寄存器時,則返回S202,直至該第一虛擬機的本次運行過程結(jié)束,則執(zhí)行S208。
[0066]S208、將第一虛擬機的本次現(xiàn)場數(shù)據(jù)存儲至所述第一虛擬機對應(yīng)的暫存空間。
[0067]上述本次現(xiàn)場數(shù)據(jù)存儲至第一虛擬機對應(yīng)的暫存空間后,若第一虛擬機需要再一次運行時,則運行虛擬機的控制裝置將上述本次現(xiàn)場數(shù)據(jù)則作為前次現(xiàn)場數(shù)據(jù),再次由前述S201開始控制第一虛擬機的下一次運行過程。
[0068]上述S208的發(fā)生情況分為兩種,一種是第一虛擬機正常運行結(jié)束,則執(zhí)行S208之后則停止,一種是第一虛擬機需要訪問第一寄存器,但根據(jù)S206的判斷,不能控制第一虛擬機直接訪問第一寄存器,則需關(guān)閉第一虛擬機,在關(guān)閉之前,需要執(zhí)行S208,隨后執(zhí)行S209。
[0069]S209、控制第一虛擬機關(guān)閉,并控制VMM代替第一虛擬機訪問第一寄存器。
[0070]基于已有的MIPS架構(gòu),宿主機上承載的虛擬機系統(tǒng)可以簡單的分為宿主機承載的虛擬機和虛擬機管理器。虛擬機在宿主機上運行時,可進行普通的操作,例如用戶程序;但虛擬機的運行過程中會出現(xiàn)特殊情況,如某些特權(quán)指令(例如上述訪問第一寄存器),執(zhí)行某些有害指令等;當發(fā)生這些特殊情況時,運行虛擬機的控制裝置關(guān)閉當前正在運行的虛擬機,并開啟虛擬機管理器,由虛擬機管理器在宿主機的核心態(tài)下處理該特殊情況,待虛擬機管理器處理完成后,再次運行該虛擬機,具體可參照現(xiàn)有技術(shù),在此不再贅述;
[0071]可以理解的,將第一虛擬機(虛擬機A)關(guān)閉,VMM代替第一虛擬機訪問第一寄存器之后,虛擬機A還需繼續(xù)運行,則將虛擬機A作為第一虛擬機,由S201處重新開始執(zhí)行。
[0072]在本實施例中,當?shù)谝惶摂M機訪問控制寄存器中的第一寄存器時,即使宿主機處于非核心態(tài),但運行虛擬機的控制裝置根據(jù)第一虛擬機的狀態(tài)位獲知第一虛擬機處于核心態(tài),便可控制該第一虛擬機訪問第一寄存器,不需要使第一虛擬機重啟,便可完成對第一寄存器的訪問,從而減小了宿主機上虛擬機發(fā)生重啟的次數(shù),進而可減小宿主機用于重啟虛擬機的開銷。
[0073]圖3為本發(fā)明一種運行虛擬機的控制裝置實施例一的結(jié)構(gòu)圖。如圖3所示,該控制裝置包括:
[0074]獲取模塊31,用于在第一虛擬機的本次運行過程中,當所述第一虛擬機需訪問控制寄存器中的第一寄存器時,讀取宿主機的狀態(tài)位,獲得宿主機的狀態(tài)值;
[0075]確定模塊32,用于根據(jù)所述獲取模塊31獲得的所述宿主機的狀態(tài)值確定所述宿主機處于宿主機非核心態(tài),
[0076]則所述確定模塊32觸發(fā)所述獲取模塊31讀取所述第一虛擬機的狀態(tài)位,獲得所述第一虛擬機的狀態(tài)值;
[0077]當所述確定模塊32根據(jù)所述獲取模塊31獲得的所述虛擬機的狀態(tài)值確定所述第一虛擬機處于虛擬機核心態(tài)時,
[0078]則所述確定模塊32觸發(fā)控制模塊33,所述控制模塊33用于控制所述第一虛擬機訪問所述第一寄存器。
[0079]在本實施例中,當?shù)谝惶摂M機訪問控制寄存器中的第一寄存器時,即使宿主機處于非核心態(tài),但運行虛擬機的控制裝置根據(jù)第一虛擬機的狀態(tài)位獲知第一虛擬機處于核心態(tài),便可控制該第一虛擬機訪問第一寄存器,不需要使第一虛擬機重啟,便可完成對第一寄存器的訪問,從而減小了宿主機上虛擬機發(fā)生重啟的次數(shù),進而可減小宿主機用于重啟虛擬機的開銷。
[0080]圖4為本發(fā)明運行虛擬機的控制裝置實施例二的結(jié)構(gòu)圖。如圖4所示,本實施例是在圖3所示的實施例的基礎(chǔ)上做出進一步描述,上述確定模塊32包括第一判斷單元321,用于判斷所述獲取模塊獲得的宿主機的狀態(tài)值是否標識為非核心狀態(tài),當所述宿主機的狀態(tài)值標識為非核心狀態(tài),確定所述宿主機處于宿主機非核心狀態(tài);第二判斷單元322,用于判斷所述獲取單元獲取的虛擬機的狀態(tài)值是否標識為核心狀態(tài),當所述虛擬機的狀態(tài)值標識為核心狀態(tài),確定所述宿主機處于宿主機非核心狀態(tài)。
[0081]進一步的,所述控制裝置還包括存儲模塊34,用于將所述第一虛擬機對應(yīng)的暫存空間所存儲的前次現(xiàn)場數(shù)據(jù)恢復(fù)至所述控制寄存器,以使所述第一虛擬機開始本次運行過程;
[0082]所述現(xiàn)場數(shù)據(jù)用于在虛擬機第一次運行結(jié)束之后保證該虛擬機正確進行第二次運行。
[0083]進一步的,所述存儲模塊34還用于
[0084]將所述第一虛擬機的本次現(xiàn)場數(shù)據(jù)存儲至所述第一虛擬機對應(yīng)的暫存空間。
[0085]進一步的,所述第一寄存器為用于控制轉(zhuǎn)換旁視緩沖器TLB的寄存器。
[0086]本實施例中的第一判斷單元321和第二判斷單元322在實際應(yīng)用中,具體可以為前述判斷邏輯,該判斷邏輯可以為軟件和/或硬件,例如該判斷邏輯包括處理器中新增的邏輯判斷電路,或者是應(yīng)用在處理器上的邏輯判斷程序,或者是邏輯判斷電路和控制邏輯判斷電路的程序。
[0087]在本實施例中,當?shù)谝惶摂M機訪問控制寄存器中的第一寄存器時,即使宿主機處于非核心態(tài),但運行虛擬機的控制裝置根據(jù)第一虛擬機的狀態(tài)位獲知第一虛擬機處于核心態(tài),便可控制該第一虛擬機訪問第一寄存器,不需要使第一虛擬機重啟,便可完成對第一寄存器的訪問,從而減小了宿主機上虛擬機發(fā)生重啟的次數(shù),進而可減小宿主機用于重啟虛擬機的開銷。
[0088]需要補充說明的是,上述各個裝置實施例中的各個模塊對應(yīng)執(zhí)行上述各個方法實施例中的各個步驟,具體的執(zhí)行過程和技術(shù)效果可參考上述各個方法實施例,在此不再贅述。
[0089]本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質(zhì)包括:R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
[0090]最后應(yīng)說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分或者全部技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。
【權(quán)利要求】
1.一種運行虛擬機的控制方法,其特征在于,包括: 在第一虛擬機的本次運行過程中,當所述第一虛擬機需訪問控制寄存器中的第一寄存器時,讀取宿主機的狀態(tài)位,獲得宿主機的狀態(tài)值; 當根據(jù)所述宿主機的狀態(tài)值確定所述宿主機處于宿主機非核心態(tài)時,則讀取所述第一虛擬機的狀態(tài)位,獲得所述第一虛擬機的狀態(tài)值; 當根據(jù)所述虛擬機的狀態(tài)值確定所述第一虛擬機處于虛擬機核心態(tài)時,則控制所述第一虛擬機訪問所述第一寄存器。
2.根據(jù)權(quán)利要求1所述的控制方法,其特征在于, 所述根據(jù)所述宿主機的狀態(tài)值確定所述宿主機處于宿主機非核心態(tài),包括: 判斷所述宿主機的狀態(tài)值是否標識為非核心狀態(tài),當所述宿主機的狀態(tài)值標識為非核心狀態(tài),確定所述宿主機處于宿主機非核心狀態(tài); 所述,根據(jù)所述虛擬機的狀態(tài)值確定所述第一虛擬機處于虛擬機核心態(tài),包括: 判斷所述虛擬機的狀態(tài)值是否標識為核心狀態(tài),當所述虛擬機的狀態(tài)值標識為核心狀態(tài),確定所述宿主機處于宿主機非核心狀態(tài)。
3.根據(jù)權(quán)利要求2所述的控制方法,其特征在于,所述控制方法應(yīng)用于處理器,且所述處理器中新增有判斷邏輯,所述判斷邏輯,在執(zhí)行訪問控制寄存器指令時觸發(fā),用于判斷所述宿主機的狀態(tài)值是否 標識為非核心狀態(tài),還用于判斷所述虛擬機的狀態(tài)值是否標識為核心狀態(tài)。
4.根據(jù)權(quán)利要求1-3任一項所述的控制方法,其特征在于,當所述第一虛擬機本次運行過程開始之前,所述控制方法還包括: 將所述第一虛擬機對應(yīng)的暫存空間所存儲的前次現(xiàn)場數(shù)據(jù)恢復(fù)至所述控制寄存器,以使所述第一虛擬機開始本次運行過程; 所述現(xiàn)場數(shù)據(jù)用于在虛擬機第一次運行結(jié)束之后保證該虛擬機正確進行第二次運行。
5.根據(jù)權(quán)利要求4所述的控制方法,其特征在于,當所述第一虛擬機本次運行過程結(jié)束時,所述控制方法還包括: 將所述第一虛擬機的本次現(xiàn)場數(shù)據(jù)存儲至所述第一虛擬機對應(yīng)的暫存空間。
6.根據(jù)權(quán)利要求5所述的控制方法,其特征在于,所述第一寄存器為用于控制轉(zhuǎn)換旁視緩沖器TLB的寄存器。
7.一種運行虛擬機的控制裝置,其特征在于,包括: 獲取模塊,用于在第一虛擬機的本次運行過程中,當所述第一虛擬機需訪問控制寄存器中的第一寄存器時,讀取宿主機的狀態(tài)位,獲得宿主機的狀態(tài)值; 確定模塊,用于根據(jù)所述獲取模塊獲得的所述宿主機的狀態(tài)值確定所述宿主機處于宿主機非核心態(tài), 則所述確定模塊觸發(fā)所述獲取模塊讀取所述第一虛擬機的狀態(tài)位,獲得所述第一虛擬機的狀態(tài)值; 當所述確定模塊根據(jù)所述獲取模塊獲得的所述虛擬機的狀態(tài)值確定所述第一虛擬機處于虛擬機核心態(tài)時, 則所述確定模塊觸發(fā)控制模塊,所述控制模塊用于控制所述第一虛擬機訪問所述第一寄存器。
8.根據(jù)權(quán)利要求7所述的控制裝置,其特征在于,所述確定模塊,包括: 第一判斷單元,用于判斷所述獲取模塊獲得的宿主機的狀態(tài)值是否標識為非核心狀態(tài),當所述宿主機的狀態(tài)值標識為非核心狀態(tài),確定所述宿主機處于宿主機非核心狀態(tài);第二判斷單元,用于判斷所述獲取單元獲取的虛擬機的狀態(tài)值是否標識為核心狀態(tài),當所述虛擬機的狀態(tài)值標識為核心狀態(tài),確定所述宿主機處于宿主機非核心狀態(tài)。
9.根據(jù)權(quán)利要求7或8所述的控制裝置,其特征在于,所述控制裝置還包括: 存儲模塊,用于將所述第一虛擬機對應(yīng)的暫存空間所存儲的前次現(xiàn)場數(shù)據(jù)恢復(fù)至所述控制寄存器,以使所述第一虛擬機開始本次運行過程; 所述現(xiàn)場數(shù)據(jù)用于在虛擬機第一次運行結(jié)束之后保證該虛擬機正確進行第二次運行。
10.根據(jù)權(quán)利要求9所述的控制裝置,其特征在于,所述存儲模塊還用于 將所述第一虛擬機的本次現(xiàn)場數(shù)據(jù)存儲至所述第一虛擬機對應(yīng)的暫存空間。
11.根據(jù)權(quán)利要求10所述的控制裝置,其特征在于,所述第一寄存器為用于控制轉(zhuǎn)換旁視緩沖 器TLB的寄存器。
【文檔編號】G06F9/455GK104050017SQ201410310784
【公開日】2014年9月17日 申請日期:2014年7月1日 優(yōu)先權(quán)日:2014年7月1日
【發(fā)明者】臺運方, 蔡萬偉, 劉奇, 張戈 申請人:龍芯中科技術(shù)有限公司