專(zhuān)利名稱(chēng):一種虛擬機(jī)系統(tǒng)及其顯卡訪問(wèn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,特別是涉及一種虛擬機(jī)系統(tǒng)及其顯卡訪問(wèn)方法。
技術(shù)背景隨著計(jì)算機(jī)系統(tǒng)的發(fā)展,虛擬化技術(shù)在計(jì)算機(jī)領(lǐng)域得到廣泛應(yīng)用?,F(xiàn)代 計(jì)算機(jī)已經(jīng)具有能力來(lái)利用虛擬化技術(shù)在一臺(tái)計(jì)算機(jī)上支持多個(gè)虛擬機(jī),并在每個(gè)虛擬機(jī)上各自運(yùn)行單獨(dú)的客戶操作系統(tǒng)(GOS)。將包括有虛擬機(jī)的計(jì)算機(jī)系統(tǒng)稱(chēng)為虛擬機(jī)系統(tǒng)。在虛擬機(jī)系統(tǒng)中,各操 作系統(tǒng)都需要對(duì)硬件進(jìn)行訪問(wèn),其中對(duì)顯卡的訪問(wèn)相對(duì)來(lái)說(shuō)是一個(gè)比較復(fù)雜 的的問(wèn)題,對(duì)顯卡的不同使用方法是影響用戶體驗(yàn)的一個(gè)重要因素。目前, VMWare, Virtual PC以及Xen等主流虛擬化技術(shù)所采用的方案大同小異,都 是為客戶操作系統(tǒng)提供一個(gè)虛擬化了的顯卡。該虛擬顯卡是一個(gè)通用的顯卡, 只能實(shí)現(xiàn)基本的顯示功能,與真實(shí)的顯卡差別很大。圖l為現(xiàn)有技術(shù)中虛擬機(jī)系統(tǒng)的示意圖。如圖1所示,該虛擬機(jī)系統(tǒng)包 括虛擬機(jī)監(jiān)視器(VMM)、服務(wù)操作系統(tǒng)(SOS)、至少一個(gè)GOS,及顯卡, 其中,VMM包括通信模塊,VMM通過(guò)所述通信模塊和SOS及各個(gè)GOS進(jìn) 行通信,SOS包括真實(shí)顯卡驅(qū)動(dòng)和設(shè)備模型(DM), GOS包括虛擬顯卡驅(qū)動(dòng)?,F(xiàn)參照?qǐng)D1描述GOS對(duì)顯卡的訪問(wèn)過(guò)程。在GOS訪問(wèn)顯卡之前,SOS和GOS要為顯卡分配資源,具體如下 SOS在啟動(dòng)時(shí),掃描周邊元件擴(kuò)展接口 (PCI)總線,發(fā)現(xiàn)真實(shí)顯卡,在 獲取真實(shí)顯卡信息后,為真實(shí)顯卡分配資源,包括中斷請(qǐng)求(IRQ)資源、 輸入輸出(10)資源和存儲(chǔ)器映射輸入輸出(MMIO)資源,這樣,SOS就 可以通過(guò)真實(shí)顯卡驅(qū)動(dòng)對(duì)顯卡進(jìn)行訪問(wèn)。SOS中的DM為每個(gè)GOS分配一個(gè) 虛擬顯卡,GOS在啟動(dòng)時(shí),掃描虛擬PCI總線,發(fā)現(xiàn)虛擬顯卡,在獲取虛擬 顯卡信息后,為虛擬顯卡分配資源,包括IRQ資源、IO資源、MM0資源, 這樣,GOS就可以通過(guò)虛擬顯卡驅(qū)動(dòng)對(duì)虛擬顯卡進(jìn)行訪問(wèn)。 GOS通過(guò)虛擬顯卡驅(qū)動(dòng)訪問(wèn)虛擬顯卡時(shí),虛擬顯卡驅(qū)動(dòng)將GOS的顯卡 訪問(wèn)數(shù)據(jù)通過(guò)VMM中的通信模塊發(fā)送到DM; DM對(duì)顯卡訪問(wèn)數(shù)據(jù)進(jìn)行轉(zhuǎn) 換后,通過(guò)真實(shí)顯卡驅(qū)動(dòng)發(fā)送到顯卡,從而實(shí)現(xiàn)了GOS對(duì)顯卡的訪問(wèn)??梢钥闯?,GOS直接訪問(wèn)的是由DM提供的虛擬顯卡,利用的是虛擬顯 卡驅(qū)動(dòng)。由于虛擬顯卡只是一個(gè)通用的顯卡,只能實(shí)現(xiàn)基本的顯示功能,這 樣,真實(shí)顯卡的硬件加速特性無(wú)法被用戶使用,不支持2D、 3D動(dòng)畫(huà)等功能, 顯示性能很差。 發(fā)明內(nèi)容本發(fā)明的目的在于提供一種虛擬機(jī)系統(tǒng)。本發(fā)明的另一目在于提供一種虛擬機(jī)系統(tǒng)顯卡訪問(wèn)方法。在本發(fā)明的虛擬機(jī)系統(tǒng)中VMM進(jìn)一步包括資源轉(zhuǎn)換模塊,SOS進(jìn)一步包括顯示切換驅(qū)動(dòng),GOS 進(jìn)一步包括顯示切換驅(qū)動(dòng)和真實(shí)顯卡驅(qū)動(dòng);GOS中的真實(shí)顯卡驅(qū)動(dòng)用于將GOS的顯卡訪問(wèn)數(shù)據(jù)發(fā)送到VMM中的 資源轉(zhuǎn)換模塊;VMM中的資源轉(zhuǎn)換模塊用于存儲(chǔ)SOS為顯卡分配的資源與GOS為顯卡 分配的資源二者之間的對(duì)應(yīng)關(guān)系,并根據(jù)所述對(duì)應(yīng)關(guān)系對(duì)來(lái)自GOS的顯卡訪 問(wèn)數(shù)據(jù)的10地址以及MMIO地址進(jìn)行轉(zhuǎn)換后發(fā)送到顯卡;SOS中的顯示切換驅(qū)動(dòng)用于在接收到顯示切換消息時(shí),通過(guò)VMM中的 通信模塊發(fā)送切換到前臺(tái)的消息到要切換到前臺(tái)的GOS中的顯示切換驅(qū)動(dòng);GOS中的顯示切換驅(qū)動(dòng)用于在接收到包含切換到后臺(tái)的指令的消息時(shí), 啟用虛擬顯卡驅(qū)動(dòng),并禁用真實(shí)顯卡驅(qū)動(dòng);以及在接收到SOS中的顯示切換 驅(qū)動(dòng)通過(guò)VMM中的通信模塊發(fā)送來(lái)的切換到前臺(tái)的消息時(shí),禁用虛擬顯卡 驅(qū)動(dòng),并啟用真實(shí)顯卡驅(qū)動(dòng)-,GOS中的虛擬顯卡驅(qū)動(dòng)用于將GOS的顯卡訪問(wèn)數(shù)據(jù)通過(guò)所述通信模塊 發(fā)送到DM。虛擬機(jī)系統(tǒng)中的DM進(jìn)一步用于在接收到虛擬顯卡驅(qū)動(dòng)通過(guò)VMM中的 通信模塊發(fā)送來(lái)的顯卡訪問(wèn)數(shù)據(jù)時(shí),丟棄該顯卡訪問(wèn)數(shù)據(jù)。所述VMM中的資源轉(zhuǎn)換模塊進(jìn)一步用于接收顯卡的中斷請(qǐng)求IRQ,并 根據(jù)所存儲(chǔ)的對(duì)應(yīng)關(guān)系將所述IRQ轉(zhuǎn)換為GOS的中斷號(hào)后發(fā)送給GOS中的 真實(shí)顯卡驅(qū)動(dòng);所述GOS中的真實(shí)顯卡驅(qū)動(dòng)進(jìn)一步用于對(duì)所述IRQ進(jìn)行相 應(yīng)的處理。所述SOS中的顯示切換驅(qū)動(dòng)接收到的顯示切換消息為外部觸發(fā)的切換消 息;SOS中的顯示切換驅(qū)動(dòng)進(jìn)一步用于通過(guò)VMM中的通信模塊發(fā)送切換到 后臺(tái)的消息到要切換到后臺(tái)的GOS。所述GOS中的顯示切換驅(qū)動(dòng)接收到的包含切換到后臺(tái)的指令的消息為 GOS中的應(yīng)用程序發(fā)送來(lái)的顯示切換消息;GOS中的顯示切換驅(qū)動(dòng)進(jìn)一步 用于將該顯示切換消息通過(guò)VMM中的通信模塊發(fā)送到SOS中的顯示切換驅(qū) 動(dòng)。本發(fā)明的虛擬機(jī)系統(tǒng)顯卡訪問(wèn)方法,包括將真實(shí)顯卡分配給GOS,且為所述GOS分配虛擬顯卡,并加載相應(yīng)的 真實(shí)顯卡驅(qū)動(dòng)和虛擬顯卡驅(qū)動(dòng);在進(jìn)行顯示切換時(shí),禁用后臺(tái)GOS的真實(shí)顯卡驅(qū)動(dòng),并啟用后臺(tái)GOS 的虛擬顯卡驅(qū)動(dòng),以及禁用前臺(tái)GOS的虛擬顯卡驅(qū)動(dòng),并啟用前臺(tái)GOS的 真實(shí)顯卡驅(qū)動(dòng);后臺(tái)GOS通過(guò)虛擬顯卡驅(qū)動(dòng)訪問(wèn)虛擬顯卡,并由SOS丟棄GOS的顯卡 訪問(wèn)數(shù)據(jù);前臺(tái)GOS通過(guò)真實(shí)顯卡驅(qū)動(dòng)訪問(wèn)真實(shí)顯卡,具體為-a) 前臺(tái)GOS的顯卡訪問(wèn)數(shù)據(jù)通過(guò)真實(shí)顯卡驅(qū)動(dòng)發(fā)送到VMM;b) VMM根據(jù)SOS為顯卡分配的資源與前臺(tái)GOS為顯卡分配的資源二 者之間的對(duì)應(yīng)關(guān)系,對(duì)所述顯卡訪問(wèn)數(shù)據(jù)的IO地址以及MMIO地址進(jìn)行轉(zhuǎn) 換后發(fā)送到顯卡。進(jìn)一步,在步驟b)后還包括步驟-VMM接收顯卡的IRQ,根據(jù)所述對(duì)應(yīng)關(guān)系將該IRQ轉(zhuǎn)換為前臺(tái)GOS的 中斷號(hào)后發(fā)送給前臺(tái)GOS中的真實(shí)顯卡驅(qū)動(dòng),并由所述真實(shí)顯卡驅(qū)動(dòng)對(duì)所述 IRQ進(jìn)行相應(yīng)的處理。與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是為每個(gè)GOS分配兩個(gè)顯卡, 一個(gè)為真實(shí)顯卡, 一個(gè)為虛擬顯卡,對(duì)于位
于前臺(tái)的GOS,其通過(guò)真實(shí)顯卡驅(qū)動(dòng)直接訪問(wèn)真實(shí)顯卡,可以用到真實(shí)顯卡 的硬件加速特性,保證了顯示性能;對(duì)于位于后臺(tái)的GOS,其通過(guò)虛擬顯卡 驅(qū)動(dòng)訪問(wèn)虛擬顯卡,并由DM丟棄顯卡訪問(wèn)數(shù)據(jù),這樣既保證了后臺(tái)系統(tǒng)中 需要訪問(wèn)顯卡的應(yīng)用程序的正常運(yùn)行,又保證了不千擾前臺(tái)系統(tǒng)的正常顯示。
圖1為現(xiàn)有技術(shù)中虛擬機(jī)系統(tǒng)的示意圖; 圖2為本發(fā)明虛擬機(jī)系統(tǒng)的示意圖; 圖3為對(duì)圖2所示的虛擬機(jī)系統(tǒng)的改進(jìn)的示意圖。
具體實(shí)施方式
以下將結(jié)合附圖對(duì)本發(fā)明進(jìn)行詳細(xì)描述。如圖2所示,本發(fā)明的虛擬機(jī)系統(tǒng)包括VMM、 SOS、至少一個(gè)GOS,及 顯卡,其中,VMM包括通信模塊和資源轉(zhuǎn)換模塊,SOS包括真實(shí)顯卡驅(qū)動(dòng)、 DM和顯示切換驅(qū)動(dòng),GOS包括真實(shí)顯卡驅(qū)動(dòng)、虛擬顯卡驅(qū)動(dòng)和顯示切換驅(qū)動(dòng)。其中,VMM通過(guò)所述通信模塊和SOS及各個(gè)GOS進(jìn)行通信。VMM通過(guò) 通信模塊的中斷或事件通道(EventChannel)向SOS或GOS發(fā)送數(shù)據(jù),SOS 通過(guò)通信模塊的hypercall向與VMM發(fā)送數(shù)據(jù),GOS通過(guò)通信模塊的vmcall向 VMM發(fā)送數(shù)據(jù)。GOS中的真實(shí)顯卡驅(qū)動(dòng)用于將GOS的顯卡訪問(wèn)數(shù)據(jù)發(fā)送到VMM中的 資源轉(zhuǎn)換模塊。由于GOS對(duì)顯卡的資源配置與SOS對(duì)顯卡的資源配置不一致,GOS若 要直接訪問(wèn)真實(shí)顯卡,就需要先進(jìn)行資源轉(zhuǎn)換,這一工作由資源轉(zhuǎn)換模塊來(lái) 完成。資源轉(zhuǎn)換模塊中存儲(chǔ)有資源轉(zhuǎn)換表,資源轉(zhuǎn)換表中包括SOS為顯卡分 配的資源與GOS為顯卡分配的資源二者之間的對(duì)應(yīng)關(guān)系,具體包括SOS和 GOS分別對(duì)顯卡分配的10的對(duì)應(yīng)關(guān)系和MMIO的對(duì)應(yīng)關(guān)系。資源轉(zhuǎn)換模塊 根據(jù)資源轉(zhuǎn)換表對(duì)來(lái)自GOS的顯卡訪問(wèn)數(shù)據(jù)的IO地址以及MMIO地址進(jìn)行 轉(zhuǎn)換后發(fā)送到顯卡。資源轉(zhuǎn)換表中進(jìn)一步包括SOS和GOS分別對(duì)顯卡分配的IRQ的對(duì)應(yīng)關(guān) 系。在顯卡對(duì)GOS的訪問(wèn)進(jìn)行響應(yīng)時(shí),需要向GOS發(fā)送IRQ。資源轉(zhuǎn)換模 塊根據(jù)資源轉(zhuǎn)換表將VMM接收到的顯卡的IRQ轉(zhuǎn)換成GOS的中斷號(hào)后發(fā) 送給GOS中的真實(shí)顯卡驅(qū)動(dòng),并由所述真實(shí)顯卡驅(qū)動(dòng)對(duì)所述IRQ進(jìn)行相應(yīng) 的處理。資源轉(zhuǎn)換表是在對(duì)顯卡的資源配置過(guò)程中產(chǎn)生的。SOS和GOS啟動(dòng)時(shí), 分別對(duì)顯卡進(jìn)行資源配置,DM獲取SOS對(duì)顯卡的資源配置信息和GOS對(duì)顯 卡的資源配置信息,根據(jù)所述資源配置信息生成資源轉(zhuǎn)換表,并將該資源轉(zhuǎn) 換表通過(guò)通信模塊發(fā)送到資源轉(zhuǎn)換模塊。這樣,通過(guò)DM和VMM的協(xié)助,GOS可以通過(guò)真實(shí)顯卡驅(qū)動(dòng)直接訪問(wèn) 到顯卡硬件,因而能夠利用真實(shí)顯卡的硬件加速特性,保證了顯示性能。GOS中的虛擬顯卡驅(qū)動(dòng)用于將GOS的顯卡訪問(wèn)數(shù)據(jù)通過(guò)所述通信模塊 發(fā)送到DM。在本發(fā)明中,GOS中的真實(shí)顯卡驅(qū)動(dòng)和虛擬顯卡驅(qū)動(dòng)同一時(shí)刻只有一個(gè) 起作用,即GOS位于前臺(tái)時(shí),真實(shí)顯卡驅(qū)動(dòng)起作用,GOS位于后臺(tái)時(shí),虛 擬顯卡驅(qū)動(dòng)起作用。這是通過(guò)SOS以及GOS中的顯示切換驅(qū)動(dòng)來(lái)實(shí)現(xiàn)的。 其中,顯示切換有兩種觸發(fā)方式, 一種為SOS接收外部的觸發(fā)消息,例如用 戶通過(guò)熱鍵切換; 一種為前臺(tái)GOS的應(yīng)用程序發(fā)送切換消息到前臺(tái)GOS的 顯示切換驅(qū)動(dòng)來(lái)觸發(fā)。在外部觸發(fā)的情況下,SOS中的顯示切換驅(qū)動(dòng)在接收到外部觸發(fā)的顯示 切換消息時(shí),通過(guò)VMM中的通信模塊發(fā)送切換到后臺(tái)的消息到要切換到后 臺(tái)的GOS中的顯示切換驅(qū)動(dòng),以及發(fā)送切換到前臺(tái)的消息到要切換到前臺(tái)的 GOS中的顯示切換驅(qū)動(dòng)。GOS中的顯示切換驅(qū)動(dòng)在接收到切換到后臺(tái)的消息 時(shí),啟用虛擬顯卡驅(qū)動(dòng),并禁用真實(shí)顯卡驅(qū)動(dòng)。GOS中的顯示切換驅(qū)動(dòng)在接 收到切換到前臺(tái)的消息時(shí),啟用真實(shí)顯卡驅(qū)動(dòng),并禁用虛擬顯卡驅(qū)動(dòng)。在應(yīng)用程序觸發(fā)的情況下,前臺(tái)GOS中的顯示切換驅(qū)動(dòng)接收到本GOS 中的應(yīng)用程序發(fā)送來(lái)的顯示切換消息時(shí),啟用虛擬顯卡驅(qū)動(dòng),并禁用真實(shí)顯 卡驅(qū)動(dòng)。前臺(tái)GOS進(jìn)一步通過(guò)VMM中的通信模塊將該顯示切換消息發(fā)送到 SOS中的顯示切換驅(qū)動(dòng),SOS中的顯示切換驅(qū)動(dòng)進(jìn)一步通過(guò)VMM中的通信 模塊發(fā)送切換到前臺(tái)的消息到要切換到前臺(tái)的GOS中的顯示切換驅(qū)動(dòng)。GOS 中的顯示切換驅(qū)動(dòng)在接收到切換到前臺(tái)的消息時(shí),啟用真實(shí)顯卡驅(qū)動(dòng),并禁 用虛擬顯卡驅(qū)動(dòng)。
本發(fā)明的虛擬機(jī)系統(tǒng),有可能會(huì)出現(xiàn)多個(gè)GOS同時(shí)寫(xiě)顯卡的情況,從而 造成顯示器的顯示混亂。這是因?yàn)榍芭_(tái)GOS通過(guò)真實(shí)顯卡驅(qū)動(dòng)直接訪問(wèn)顯 卡;后臺(tái)GOS通過(guò)虛擬顯卡驅(qū)動(dòng)訪問(wèn)虛擬顯卡,其顯卡訪問(wèn)數(shù)據(jù)由DM轉(zhuǎn)換 后通過(guò)SOS的真實(shí)顯卡驅(qū)動(dòng)也會(huì)發(fā)送到顯卡。因此,本發(fā)明的虛擬機(jī)系統(tǒng)中 的DM進(jìn)一步用于在接收到GOS中的虛擬顯卡驅(qū)動(dòng)通過(guò)VMM中的通信模塊 發(fā)送來(lái)的顯卡訪問(wèn)數(shù)據(jù)時(shí),丟棄該顯卡訪問(wèn)數(shù)據(jù)。這樣,就解決了多個(gè)操作 系統(tǒng)共同寫(xiě)顯卡的問(wèn)題,同時(shí),后臺(tái)操作系統(tǒng)中的需要訪問(wèn)顯卡的應(yīng)用程序 也能繼續(xù)正常運(yùn)行。圖2所示的虛擬機(jī)系統(tǒng),GOS位于前臺(tái)時(shí),有可能對(duì)顯卡寄存器的值進(jìn) 行了修改,從而改變了顯示模式,導(dǎo)致在后臺(tái)GOS切換到前臺(tái)時(shí),需要重新 設(shè)置顯示模式。并且,在顯示切換后,如果還沒(méi)有進(jìn)行屏幕刷新,由于顯存 的內(nèi)容沒(méi)有更新,顯示器顯示的內(nèi)容為顯示切換前的內(nèi)容。這些都給使用帶 來(lái)了不便。有鑒于此,以下提出一種改進(jìn)方案。圖3是圖2所示的虛擬機(jī)系統(tǒng)的改進(jìn),在該虛擬機(jī)系統(tǒng)中,SOS進(jìn)一步 包括顯卡寄存器保存/恢復(fù)模塊和/或顯存保存/恢復(fù)模塊。SOS中的顯示切換驅(qū)動(dòng)接收到顯示切換消息時(shí),發(fā)送顯卡寄存器保存/ 恢復(fù)信號(hào)到顯卡寄存器保存/恢復(fù)模塊,由顯卡寄存器保存/恢復(fù)模塊將當(dāng)前顯 卡寄存器的值進(jìn)行保存;以及在當(dāng)前顯卡寄存器的值保存成功后,將要切換 到前臺(tái)的GOS對(duì)應(yīng)的顯卡寄存器的值進(jìn)行恢復(fù),即將所述對(duì)應(yīng)的顯卡寄存器 的值寫(xiě)入顯卡寄存器。這樣,在進(jìn)行顯示切換時(shí),不需要重新設(shè)置顯示模式。進(jìn)一步,SOS中的顯示切換驅(qū)動(dòng)接收到顯示切換消息時(shí),發(fā)送顯存保存/ 恢復(fù)信號(hào)到顯存保存/恢復(fù)模塊,由顯存保存/恢復(fù)模塊將當(dāng)前顯存的內(nèi)容進(jìn)行 保存;以及在當(dāng)前顯存的內(nèi)容保存成功后,將要切換到前臺(tái)的GOS對(duì)應(yīng)的顯 存的內(nèi)容進(jìn)行恢復(fù),即將所述對(duì)應(yīng)的顯存的內(nèi)容寫(xiě)入顯存。這樣,在進(jìn)行顯 示切換時(shí),不需要進(jìn)行屏幕刷新,就能保證顯示正確的內(nèi)容。在本發(fā)明中,GOS中的顯示切換驅(qū)動(dòng)進(jìn)一步用于在本GOS位于前臺(tái),且 需要進(jìn)行顯示切換時(shí),判斷是否滿足切換條件。只有在滿足切換條件時(shí),才 進(jìn)行正常的切換。如果切換條件不滿足,則不進(jìn)行切換。前臺(tái)GOS中的顯示 切換驅(qū)動(dòng)進(jìn)一步提示用戶當(dāng)前切換條件不滿足的原因和解決方法,比如可以
關(guān)閉相應(yīng)的應(yīng)用程序,在用戶將不滿足切換的條件原因消除后,再進(jìn)行正常 的切換。其中,切換條件可以是本GOS沒(méi)有應(yīng)用程序獨(dú)占使用顯卡;和域本GOS沒(méi)有應(yīng)用程序用到虛擬顯卡所不支持的顯示特性;和/或 本GOS中的虛擬顯卡驅(qū)動(dòng)已經(jīng)正確加載。在本發(fā)明中,為保證直接存儲(chǔ)器訪問(wèn)(DMA),讓VMM運(yùn)行在高端內(nèi) 存,GOS運(yùn)行在低端內(nèi)存。這樣GOS的物理內(nèi)存地址與機(jī)器的內(nèi)存地址一致, GOS不需要修改就能滿足DMA的需要,并且,SOS本身就是修改過(guò)的系統(tǒng), 也能滿足DMA的需要。本領(lǐng)域的普通技術(shù)人員應(yīng)該容易理解,GOS也可以不 運(yùn)行在低端內(nèi)存,特別是同時(shí)運(yùn)行多個(gè)GOS時(shí),可以通過(guò)在VMM中攔截DMA 指令,修改內(nèi)存地址來(lái)解決DMA問(wèn)題,或者直接修改GOS中關(guān)于內(nèi)存的處理。根據(jù)如上對(duì)本發(fā)明的虛擬機(jī)系統(tǒng)的描述,以下介紹本發(fā)明的虛擬機(jī)系統(tǒng) 顯卡訪問(wèn)方法。本發(fā)明的虛擬機(jī)系統(tǒng)顯卡訪問(wèn)方法包括將真實(shí)顯卡分配給GOS,且為所述GOS分配虛擬顯卡,并加載相應(yīng)的 真實(shí)顯卡驅(qū)動(dòng)和虛擬顯卡驅(qū)動(dòng);在進(jìn)行顯示切換時(shí),禁用后臺(tái)GOS的真實(shí)顯卡驅(qū)動(dòng),并啟用后臺(tái)GOS 的虛擬顯卡驅(qū)動(dòng),以及禁用前臺(tái)GOS的虛擬顯卡驅(qū)動(dòng),并啟用前臺(tái)GOS的 真實(shí)顯卡驅(qū)動(dòng);前臺(tái)GOS通過(guò)真實(shí)顯卡驅(qū)動(dòng)訪問(wèn)真實(shí)顯卡;后臺(tái)GOS通過(guò)虛擬顯卡驅(qū)動(dòng)訪問(wèn)虛擬顯卡。為避免多個(gè)GOS同時(shí)寫(xiě)顯卡,后臺(tái)GOS通過(guò)虛擬顯卡驅(qū)動(dòng)訪問(wèn)虛擬顯 卡時(shí),由SOS丟棄GOS的顯卡訪問(wèn)數(shù)據(jù)。其中,前臺(tái)GOS通過(guò)真實(shí)顯卡驅(qū)動(dòng)訪問(wèn)真實(shí)顯卡具體包括以下步驟a) 前臺(tái)GOS的顯卡訪問(wèn)數(shù)據(jù)通過(guò)真實(shí)顯卡驅(qū)動(dòng)發(fā)送到VMM;b) VMM根據(jù)SOS為顯卡分配的資源與前臺(tái)GOS為顯卡分配的資源二 者之間的對(duì)應(yīng)關(guān)系,對(duì)所述顯卡訪問(wèn)數(shù)據(jù)的IO地址以及MMIO地址進(jìn)行轉(zhuǎn) 換后發(fā)送到顯卡。
進(jìn)一步,在步驟b)后還包括步驟-VMM接收顯卡的IRQ,根據(jù)所述對(duì)應(yīng)關(guān)系將該IRQ轉(zhuǎn)換為前臺(tái)GOS的 中斷號(hào)后發(fā)送給前臺(tái)GOS中的真實(shí)顯卡驅(qū)動(dòng),并由所述真實(shí)顯卡驅(qū)動(dòng)對(duì)所述 IRQ進(jìn)行相應(yīng)的處理。其中,所述對(duì)應(yīng)關(guān)系具體包括SOS和GOS分別對(duì)顯卡分配的10的對(duì)應(yīng) 關(guān)系、MMIO的對(duì)應(yīng)關(guān)系和\或IRQ的對(duì)應(yīng)關(guān)系。為保證顯示切換后,不需要重新進(jìn)行顯示模式調(diào)整,在步驟a)之前,還 包括步驟前臺(tái)GOS切換到后臺(tái)時(shí),保存該前臺(tái)GOS對(duì)應(yīng)的顯示模式,后臺(tái)GOS 切換到前臺(tái)時(shí),恢復(fù)該后臺(tái)GOS對(duì)應(yīng)的顯示模式。為保證顯示切換后,不需要進(jìn)行屏幕刷新,在步驟a)之前,還包括步驟:前臺(tái)GOS切換到后臺(tái)時(shí),保存該前臺(tái)GOS對(duì)應(yīng)的顯存內(nèi)容,后臺(tái)GOS 切換到前臺(tái)時(shí),恢復(fù)該后臺(tái)GOS對(duì)應(yīng)的顯存內(nèi)容。本發(fā)明的虛擬機(jī)系統(tǒng)及其顯卡使用方法,GOS可以訪問(wèn)真實(shí)的物理顯卡, 顯示器顯示的內(nèi)容由VMM根據(jù)系統(tǒng)的切換控制,始終顯示切換到前臺(tái)的系 統(tǒng)內(nèi)容,并可以使用硬件加速特性,保證了顯示性能。最后應(yīng)當(dāng)說(shuō)明的是,以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非限制, 本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對(duì)本發(fā)明的技術(shù)方案進(jìn)行修改或者等 同替換,而不脫離本發(fā)明技術(shù)方案的精神范圍,其均應(yīng)涵蓋在本發(fā)明的權(quán)利 要求范圍當(dāng)中。
權(quán)利要求
1.一種虛擬機(jī)系統(tǒng),其特征在于虛擬機(jī)系統(tǒng)中的虛擬機(jī)監(jiān)視器VMM進(jìn)一步包括資源轉(zhuǎn)換模塊,服務(wù)操作系統(tǒng)SOS進(jìn)一步包括顯示切換驅(qū)動(dòng),客戶操作系統(tǒng)GOS進(jìn)一步包括顯示切換驅(qū)動(dòng)和真實(shí)顯卡驅(qū)動(dòng);GOS中的真實(shí)顯卡驅(qū)動(dòng)用于將GOS的顯卡訪問(wèn)數(shù)據(jù)發(fā)送到VMM中的資源轉(zhuǎn)換模塊;VMM中的資源轉(zhuǎn)換模塊用于存儲(chǔ)SOS為顯卡分配的資源與GOS為顯卡分配的資源二者之間的對(duì)應(yīng)關(guān)系,并根據(jù)所述對(duì)應(yīng)關(guān)系對(duì)來(lái)自GOS的顯卡訪問(wèn)數(shù)據(jù)的輸入輸出IO地址以及存儲(chǔ)器映射輸入輸出MMIO地址進(jìn)行轉(zhuǎn)換后發(fā)送到顯卡;SOS中的顯示切換驅(qū)動(dòng)用于在接收到顯示切換消息時(shí),通過(guò)VMM中的通信模塊發(fā)送切換到前臺(tái)的消息到要切換到前臺(tái)的GOS中的顯示切換驅(qū)動(dòng);GOS中的顯示切換驅(qū)動(dòng)用于在接收到包含切換到后臺(tái)的指令的消息時(shí),啟用虛擬顯卡驅(qū)動(dòng),并禁用真實(shí)顯卡驅(qū)動(dòng);以及在接收到SOS中的顯示切換驅(qū)動(dòng)通過(guò)VMM中的通信模塊發(fā)送來(lái)的切換到前臺(tái)的消息時(shí),禁用虛擬顯卡驅(qū)動(dòng),并啟用真實(shí)顯卡驅(qū)動(dòng)。
2. 如權(quán)利要求1所述的虛擬機(jī)系統(tǒng),其特征在于 虛擬機(jī)系統(tǒng)中的設(shè)備模型DM進(jìn)一步用于在接收到虛擬顯卡驅(qū)動(dòng)通過(guò)VMM中的通信模塊發(fā)送來(lái)的顯卡訪問(wèn)數(shù)據(jù)時(shí),丟棄該顯卡訪問(wèn)數(shù)據(jù)。
3. 如權(quán)利要求1或2所述的虛擬機(jī)系統(tǒng),其特征在于所述VMM中的資源轉(zhuǎn)換模塊進(jìn)一步用于接收顯卡的中斷請(qǐng)求IRQ,并 根據(jù)所存儲(chǔ)的對(duì)應(yīng)關(guān)系將所述IRQ轉(zhuǎn)換為GOS的中斷號(hào)后發(fā)送給GOS中的 真實(shí)顯卡驅(qū)動(dòng);所述GOS中的真實(shí)顯卡驅(qū)動(dòng)進(jìn)一步用于對(duì)所述IRQ進(jìn)行相應(yīng)的處理。
4. 如權(quán)利要求1或2所述的虛擬機(jī)系統(tǒng),其特征在于所述SOS中的顯示切換驅(qū)動(dòng)接收到的顯示切換消息為外部觸發(fā)的切換消息; SOS中的顯示切換驅(qū)動(dòng)進(jìn)一步用于通過(guò)VMM中的通信模塊發(fā)送切換到 后臺(tái)的消息到要切換到后臺(tái)的G0S。
5. 如權(quán)利要求1或2所述的虛擬機(jī)系統(tǒng),其特征在于-所述GOS中的顯示切換驅(qū)動(dòng)接收到的包含切換到后臺(tái)的指令的消息為 GOS中的應(yīng)用程序發(fā)送來(lái)的顯示切換消息;GOS中的顯示切換驅(qū)動(dòng)進(jìn)一步用于將該顯示切換消息通過(guò)VMM中的通 信模塊發(fā)送到SOS中的顯示切換驅(qū)動(dòng)。
6. 如權(quán)利要求1或2所述的虛擬機(jī)系統(tǒng),其特征在于SOS進(jìn)一步包括顯卡寄存器保存/恢復(fù)模塊,用于在接收到顯卡寄存器保 存/恢復(fù)信號(hào)時(shí),保存當(dāng)前顯卡寄存器的值,以及恢復(fù)由要切換到前臺(tái)的GOS 對(duì)應(yīng)的顯卡寄存器的值;SOS中的顯示切換驅(qū)動(dòng)進(jìn)一步用于在接收到顯示切換消息時(shí),發(fā)送顯卡 寄存器保存/恢復(fù)信號(hào)到顯卡寄存器保存/恢復(fù)模塊。
7. 如權(quán)利要求1或2所述的虛擬機(jī)系統(tǒng),其特征在于SOS進(jìn)一步包括顯存保存/恢復(fù)模塊,用于在接收到顯存保存/恢復(fù)信號(hào) 時(shí),保存當(dāng)前顯存的內(nèi)容,以及恢復(fù)要切換到前臺(tái)的GOS對(duì)應(yīng)的顯存的內(nèi)容;SOS中的顯示切換驅(qū)動(dòng)進(jìn)一步用于在接收到顯示切換消息時(shí),發(fā)送顯存 保存/恢復(fù)信號(hào)到顯存保存/恢復(fù)模塊。
8. 如權(quán)利要求1或2所述的虛擬機(jī)系統(tǒng),其特征在于 GOS中的顯示切換驅(qū)動(dòng)進(jìn)一步用于在本GOS位于前臺(tái),且需要進(jìn)行顯示切換時(shí),判斷是否滿足切換條件,在滿足切換條件時(shí),進(jìn)行正常的切換;以 及在切換條件不滿足時(shí),不進(jìn)行切換。
9. 一種虛擬機(jī)系統(tǒng)顯卡訪問(wèn)方法,其特征在于,包括 將真實(shí)顯卡分配給GOS,且為所述GOS分配虛擬顯卡,并加載相應(yīng)的真實(shí)顯卡驅(qū)動(dòng)和虛擬顯卡驅(qū)動(dòng);在進(jìn)行顯示切換時(shí),禁用后臺(tái)GOS的真實(shí)顯卡驅(qū)動(dòng),并啟用后臺(tái)GOS 的虛擬顯卡驅(qū)動(dòng),以及禁用前臺(tái)GOS的虛擬顯卡驅(qū)動(dòng),并啟用前臺(tái)GOS的 真實(shí)顯卡驅(qū)動(dòng);后臺(tái)GOS通過(guò)虛擬顯卡驅(qū)動(dòng)訪問(wèn)虛擬顯卡,并由SOS丟棄GOS的顯卡 訪問(wèn)數(shù)據(jù);前臺(tái)GOS通過(guò)真實(shí)顯卡驅(qū)動(dòng)訪問(wèn)真實(shí)顯卡,具體為-a) 前臺(tái)GOS的顯卡訪問(wèn)數(shù)據(jù)通過(guò)真實(shí)顯卡驅(qū)動(dòng)發(fā)送到VMM;b) VMM根據(jù)SOS為顯卡分配的資源與前臺(tái)GOS為顯卡分配的資源二 者之間的對(duì)應(yīng)關(guān)系,對(duì)所述顯卡訪問(wèn)數(shù)據(jù)的10地址以及MMIO地址進(jìn)行轉(zhuǎn) 換后發(fā)送到顯卡。
10. 如權(quán)利要求9所述的方法,其特征在于,在步驟b)后還包括步驟 VMM接收顯卡的IRQ,根據(jù)所述對(duì)應(yīng)關(guān)系將該IRQ轉(zhuǎn)換為前臺(tái)GOS的中斷號(hào)后發(fā)送給前臺(tái)GOS中的真實(shí)顯卡驅(qū)動(dòng),并由所述真實(shí)顯卡驅(qū)動(dòng)對(duì)所述 IRQ進(jìn)行相應(yīng)的處理。
11. 如權(quán)利要求9或10所述的方法,其特征在于,在步驟a)之前,還 包括步驟-前臺(tái)GOS切換到后臺(tái)時(shí),保存該前臺(tái)GOS對(duì)應(yīng)的顯示模式,后臺(tái)GOS 切換到前臺(tái)時(shí),恢復(fù)該后臺(tái)GOS對(duì)應(yīng)的顯示模式。
12. 如權(quán)利要求9或10所述的方法,其特征在于,在步驟a)之前,還 包括步驟前臺(tái)GOS切換到后臺(tái)時(shí),保存該前臺(tái)GOS對(duì)應(yīng)的顯存內(nèi)容,后臺(tái)GOS 切換到前臺(tái)時(shí),恢復(fù)該后臺(tái)GOS對(duì)應(yīng)的顯存內(nèi)容。
13. 如權(quán)利要求9或10所述的方法,其特征在于-在進(jìn)行顯示切換之前,進(jìn)一步包括前臺(tái)GOS判斷是否滿足切換條件,在滿足切換條件時(shí),進(jìn)行正常的切換;在切換條件不滿足時(shí),不進(jìn)行切換。
14. 如權(quán)利要求13所述的方法,其特征在于,所述切換條件為-本GOS沒(méi)有應(yīng)用程序獨(dú)占使用顯卡;禾口/或 本GOS沒(méi)有應(yīng)用程序用到虛擬顯卡所不支持的顯示特性;和/或 本GOS中的虛擬顯卡驅(qū)動(dòng)已經(jīng)正確加載。
全文摘要
本發(fā)明公開(kāi)了一種虛擬機(jī)系統(tǒng)及其顯卡訪問(wèn)方法。該方法包括將真實(shí)顯卡分配給GOS,且為所述GOS分配虛擬顯卡,并加載相應(yīng)的真實(shí)顯卡驅(qū)動(dòng)和虛擬顯卡驅(qū)動(dòng);前臺(tái)GOS通過(guò)真實(shí)顯卡驅(qū)動(dòng)訪問(wèn)真實(shí)顯卡;后臺(tái)GOS通過(guò)虛擬顯卡驅(qū)動(dòng)訪問(wèn)虛擬顯卡。對(duì)于位于前臺(tái)的GOS,其通過(guò)真實(shí)顯卡驅(qū)動(dòng)直接訪問(wèn)真實(shí)顯卡,可以用到真實(shí)顯卡的硬件加速特性,保證了顯示性能;對(duì)于位于后臺(tái)的GOS,其通過(guò)虛擬顯卡驅(qū)動(dòng)訪問(wèn)虛擬顯卡,并由DM丟棄顯卡訪問(wèn)數(shù)據(jù),這樣既保證了后臺(tái)系統(tǒng)中需要訪問(wèn)顯卡的應(yīng)用程序的正常運(yùn)行,又保證了不干擾前臺(tái)系統(tǒng)的正常顯示。
文檔編號(hào)G06F9/455GK101154166SQ200610139360
公開(kāi)日2008年4月2日 申請(qǐng)日期2006年9月25日 優(yōu)先權(quán)日2006年9月25日
發(fā)明者劉春梅, 劉永鋒, 克 柯, 軍 陳 申請(qǐng)人:聯(lián)想(北京)有限公司