欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于虛擬化與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的硬件資源的方法、系統(tǒng)和執(zhí)行代碼段的制作方法

文檔序號(hào):6534273閱讀:240來源:國知局
用于虛擬化與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的硬件資源的方法、系統(tǒng)和執(zhí)行代碼段的制作方法
【專利摘要】本發(fā)明涉及一種用于虛擬化與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的硬件資源的方法,該方法利用適合于插入到屬于執(zhí)行在操作系統(tǒng)上的應(yīng)用程序的進(jìn)程內(nèi)的代碼段,該操作系統(tǒng)包括至少一個(gè)執(zhí)行在計(jì)算機(jī)系統(tǒng)上的API。方法包括:對(duì)由進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)的調(diào)用進(jìn)行攔截;以及基于對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)的調(diào)用進(jìn)行攔截,對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理。
【專利說明】用于虛擬化與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的硬件資源的方法、系統(tǒng)和執(zhí)行代碼段

【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種用于虛擬化與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的硬件資源的方法,該方法利用適合于插入到屬于執(zhí)行在操作系統(tǒng)上的應(yīng)用程序的進(jìn)程內(nèi)的代碼段,該操作系統(tǒng)包括至少一個(gè)執(zhí)行在計(jì)算機(jī)系統(tǒng)上的應(yīng)用程序編程接口(API)。
[0002]本發(fā)明還涉及一種適合執(zhí)行這種方法的系統(tǒng)和執(zhí)行代碼段。

【背景技術(shù)】
[0003]數(shù)年以來,基本上因?yàn)樵朴?jì)算模型的整合,在計(jì)算機(jī)世界中已經(jīng)樹立“虛擬化”的概念。
[0004]虛擬化可以基本定義為,利用技術(shù)資源比如硬件平臺(tái)、操作系統(tǒng)、數(shù)據(jù)存儲(chǔ)設(shè)備或其它網(wǎng)絡(luò)資源的虛擬版軟件,使得該資源可以被劃分成一個(gè)或多個(gè)執(zhí)行環(huán)境。要著重指出,其中該軟件是通過硬件虛擬化技術(shù)來輔助的情況,也是可以的,比如也可以通過Intel-VT或 AMD-V(例如參見,西班牙的維基百科-http: //es.wikipedia.0rR/wiki/Virtualizaci?η)來輔助。
[0005]計(jì)算機(jī)系統(tǒng)(比如個(gè)人計(jì)算機(jī)或者服務(wù)器)是最頻繁虛擬化的技術(shù)資源之一,使得該計(jì)算機(jī)系統(tǒng)同時(shí)運(yùn)行不同操作系統(tǒng)的多個(gè)實(shí)例。以這種方式,計(jì)算機(jī)系統(tǒng)可以執(zhí)行需要不同操作系統(tǒng)的不同應(yīng)用程序。
[0006]還公知一種虛擬化的類型,其允許對(duì)計(jì)算機(jī)系統(tǒng)硬件資源進(jìn)行模擬。要做到這一點(diǎn),需要在計(jì)算機(jī)系統(tǒng)中安裝虛擬化軟件,其目的是使所有已安裝的操作系統(tǒng)可以訪問計(jì)算機(jī)系統(tǒng)的硬件資源。該虛擬化軟件的另一個(gè)目的還在于對(duì)安裝在計(jì)算機(jī)系統(tǒng)上的用于不同操作系統(tǒng)的虛擬化硬件資源進(jìn)行協(xié)調(diào)。
[0007]盡管計(jì)算機(jī)系統(tǒng)的硬件資源(雖然也可應(yīng)用于任何其它類型的虛擬化)的虛擬化具有一些優(yōu)點(diǎn)(例如上面提到的,可以在一個(gè)和相同的計(jì)算機(jī)系統(tǒng)上同時(shí)運(yùn)行多個(gè)操作系統(tǒng)),但也存在顯著數(shù)量的缺點(diǎn)。
[0008]因此,舉例來說,由于在計(jì)算機(jī)系統(tǒng)上運(yùn)行虛擬化軟件過程中的開銷超出負(fù)荷,這種虛擬化可能造成計(jì)算機(jī)系統(tǒng)性能下降。尤其可能對(duì)應(yīng)用程序的執(zhí)行產(chǎn)生影響,使該應(yīng)用程序可能比沒有虛擬化的系統(tǒng)中的應(yīng)用程序運(yùn)行得更慢。
[0009]相對(duì)于上述缺點(diǎn),在許多情況下,這種虛擬化可以對(duì)任何情況下將無需使用的或任何情況下無需虛擬化的資源進(jìn)行虛擬。因此,例如對(duì)計(jì)算機(jī)系統(tǒng)的鍵盤進(jìn)行虛擬使每個(gè)運(yùn)行的應(yīng)用程序具有虛擬鍵盤,根據(jù)現(xiàn)有技術(shù),將需要?jiǎng)?chuàng)建等于虛擬計(jì)算機(jī)系統(tǒng)(虛擬機(jī)加上操作系統(tǒng))數(shù)量的由執(zhí)行的不同應(yīng)用程序所需的虛擬鍵盤。這意味著不必要的系統(tǒng)資源消耗,如上所述,影響了系統(tǒng)性能。


【發(fā)明內(nèi)容】

[0010]因此,本發(fā)明的一個(gè)目的在于提供一種用于與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的某些硬件資源的虛擬化的方法,而無需對(duì)自身的全部系統(tǒng)硬件資源進(jìn)行虛擬。
[0011]該目的是根據(jù)權(quán)利要求1來實(shí)現(xiàn),其提供一種用于虛擬化與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的硬件資源的方法,該方法利用適合于插入到屬于執(zhí)行在操作系統(tǒng)上的應(yīng)用程序的進(jìn)程內(nèi)的代碼段,該操作系統(tǒng)包括至少一個(gè)執(zhí)行在計(jì)算機(jī)系統(tǒng)上的應(yīng)用程序編程接口(八?1),所述方法包括:
[0012]-對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的八?I服務(wù)的調(diào)用進(jìn)行攔截;
[0013]-通過基于對(duì)由進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的八?I服務(wù)的調(diào)用進(jìn)行攔截的代碼段,對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理。
[0014]因此,不同于現(xiàn)有技術(shù),每個(gè)在計(jì)算機(jī)系統(tǒng)的操作系統(tǒng)上運(yùn)行的使用插入的代碼段的應(yīng)用程序,能夠虛擬那些需要運(yùn)行的硬件設(shè)備,而無須虛擬所有與系統(tǒng)關(guān)聯(lián)的硬件資源。由于在將來無論如何不會(huì)使用的資源或者無論如何都不需要虛擬化的資源都不被虛擬化,這樣使系統(tǒng)資源的消耗得以降低。在本發(fā)明中實(shí)際上沒有虛擬化軟件用于依照本領(lǐng)域技術(shù)那樣對(duì)所有計(jì)算機(jī)系統(tǒng)資源進(jìn)行虛擬,相反,以插入到每個(gè)執(zhí)行在計(jì)算機(jī)系統(tǒng)上的應(yīng)用程序的代碼段,為了正確執(zhí)行應(yīng)用程序而決定或者實(shí)現(xiàn)確立哪個(gè)硬件資源是必須要虛擬化的。
[0015]以計(jì)算機(jī)系統(tǒng)的鍵盤的虛擬化例子繼續(xù)描述,本發(fā)明只需簡單地創(chuàng)建虛擬鍵盤而不是整個(gè)計(jì)算機(jī)系統(tǒng)。因此,應(yīng)用程序直接在實(shí)際的計(jì)算機(jī)而不是在虛擬機(jī)上執(zhí)行,很大程度地減少虛擬化所帶來的負(fù)荷:只在讀取鍵盤數(shù)據(jù)時(shí)候發(fā)生的非常小的負(fù)荷,代替在執(zhí)行每個(gè)程序指令時(shí)出現(xiàn)的明顯負(fù)荷。
[0016]此外,著重指出表述“數(shù)據(jù)流的管理”涉及數(shù)據(jù)流的傳輸和/或控制,從而使進(jìn)程調(diào)用的服務(wù)與數(shù)據(jù)流的管理關(guān)聯(lián)。因此,例如當(dāng)插入的代碼段攔截調(diào)用時(shí),代碼段通過發(fā)送虛擬緩存區(qū)的內(nèi)容來控制該管理。
[0017]為了實(shí)現(xiàn)上述目的,首先需要對(duì)由屬于應(yīng)用程序的進(jìn)程向服務(wù)的調(diào)用進(jìn)行攔截,該服務(wù)與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)。詞語“攔截”解析為,從進(jìn)程向八?I服務(wù)的調(diào)用使包含在代碼段中的服務(wù)重定向,從而代碼段自身接收來自進(jìn)程的調(diào)用以執(zhí)行對(duì)應(yīng)仙I服務(wù)的這個(gè)服務(wù)(即是,來自進(jìn)程的調(diào)用沒有觸及到八?I服務(wù)依照該攔截,由于代碼段在操作系統(tǒng)上起作用,當(dāng)進(jìn)程發(fā)出請(qǐng)求到操作系統(tǒng)以訪問相同內(nèi)容的時(shí)候,代碼段能夠控制進(jìn)程和硬件資源之間的數(shù)據(jù)流。
[0018]在該攔截之前,代碼段可能已經(jīng)將一個(gè)或多個(gè)與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的仙I的一個(gè)或多個(gè)服務(wù)重定向到包含在代碼段中的對(duì)應(yīng)的服務(wù),正如上面所述,從而使來自進(jìn)程的調(diào)用不再實(shí)施在八?I服務(wù)上,而是實(shí)施在包含在代碼段中的對(duì)應(yīng)的服務(wù)。
[0019]在攔截后,當(dāng)代碼段從進(jìn)程中接收調(diào)用并且對(duì)包含在代碼段中的服務(wù)進(jìn)行執(zhí)行的時(shí)候,代碼段能夠?qū)M(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理由此對(duì)硬件資源進(jìn)行虛擬,這是因?yàn)榘ㄔ诖a段的服務(wù)對(duì)此適用。
[0020]需要重要指出的是,“服務(wù)”、“仙1”、“調(diào)用”或者“硬件資源”的表述分別指代至少一個(gè)服務(wù)、至少一個(gè)仙1、至少一個(gè)調(diào)用以及/或者至少一個(gè)硬件資源。因此,例如可以將同一八?I的兩個(gè)服務(wù)重定向到包含在代碼段的兩個(gè)服務(wù)(即是,進(jìn)程發(fā)出至少兩個(gè)調(diào)用),或者將第一API的服務(wù)重定向到包含在代碼段中的第一服務(wù)以及將第二API的服務(wù)重定向到包含在代碼段中的第二服務(wù)。同樣地,根據(jù)重定向服務(wù),同一代碼段能夠根據(jù)正在執(zhí)行的應(yīng)用程序的需要虛擬一個(gè)或多個(gè)硬件資源,比如視頻卡、音頻卡、硬盤驅(qū)動(dòng)器、鍵盤或者鼠標(biāo)。
[0021]還要著重指出,將執(zhí)行代碼段插入到進(jìn)程的一種方式已被描述,例如在[題目名稱為“Windows NT System-Call Hooking”,作者為Mark Russinovich和Bryce Cogswell,1997年I月的名稱為Dr.Dobbj s Journal的雜志]中描述。
[0022]根據(jù)本發(fā)明的優(yōu)選實(shí)施例,屬于應(yīng)用程序的進(jìn)程可以在休眠狀態(tài)中啟動(dòng),并且可執(zhí)行的代碼段可以在休眠狀態(tài)期間插入到進(jìn)程中。因此,如果所述進(jìn)程在休眠狀態(tài)中啟動(dòng),根據(jù)本發(fā)明的方法必須考慮重新啟動(dòng)進(jìn)程的可能性。由此確保代碼段的正確運(yùn)作。
[0023]根據(jù)本發(fā)明另一個(gè)實(shí)施例,API服務(wù)可以是函數(shù),而將與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)重定向到對(duì)應(yīng)的包含在代碼段中的服務(wù)的步驟可包括:
[0024]■將動(dòng)態(tài)鏈接庫加載到內(nèi)存中,該動(dòng)態(tài)鏈接庫包含待重定向的API函數(shù);
[0025]■在包含在加載的動(dòng)態(tài)鏈接庫中的API函數(shù)的函數(shù)指針表中,用儲(chǔ)存有包含在代碼段中
[0026]的對(duì)應(yīng)函數(shù)的初始內(nèi)存地址代替儲(chǔ)存有待重定向的API函數(shù)的初始內(nèi)存地址。
[0027]因此代碼段能夠?qū)⒁粋€(gè)或多個(gè)API的一個(gè)或多個(gè)函數(shù)重定向到包含在代碼段中的對(duì)應(yīng)函數(shù),使得代碼段可以攔截由進(jìn)程向這些函數(shù)發(fā)出的調(diào)用,并且因此對(duì)進(jìn)程和硬件資源(或者多個(gè)硬件資源,假如應(yīng)用程序需要虛擬超過一個(gè)的硬件資源)之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理,從而允許實(shí)現(xiàn)其虛擬化。
[0028]此外,使與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)重定向到包含在代碼段中的對(duì)應(yīng)的服務(wù)的步驟,還可以包括將已儲(chǔ)存有待重定向的API函數(shù)的初始內(nèi)存地址儲(chǔ)存在第一變量中,從而在執(zhí)行應(yīng)用程序的任何有需要的情況下,可以從可執(zhí)行的代碼段自身中調(diào)用該API函數(shù)(即是原始的函數(shù))。
[0029]另一方面,API服務(wù)可以是對(duì)象方法,而使與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)重定向到包含在代碼段中的對(duì)應(yīng)的服務(wù)的步驟可包括:
[0030]■將動(dòng)態(tài)鏈接庫加載到內(nèi)存中,該動(dòng)態(tài)鏈接庫包含待重定向的對(duì)象方法;
[0031]■驗(yàn)證是否第一次創(chuàng)建與待重定向的方法關(guān)聯(lián)的對(duì)象;
[0032]■如果驗(yàn)證得出肯定結(jié)果,
[0033]〇在包含在加載的動(dòng)態(tài)鏈接庫中的對(duì)象方法的方法指針表中,用儲(chǔ)存有包含在代碼段中的對(duì)應(yīng)方法的初始內(nèi)存地址代替儲(chǔ)存有待重定向的對(duì)象方法的初始內(nèi)存地址。
[0034]同函數(shù)的情況一樣,同樣有可能將一個(gè)或多個(gè)屬于對(duì)象的方法重定向到包含在代碼段中的一個(gè)或多個(gè)方法,從而使代碼段可以攔截由進(jìn)程向這些方法發(fā)出的調(diào)用,并且因此對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理。
[0035]如上文所討論的,既然有可能重定向至少一個(gè)API的至少一個(gè)服務(wù),就有可能其中一個(gè)服務(wù)是函數(shù),而另一個(gè)服務(wù)是方法,從而上述兩個(gè)實(shí)施例在同一個(gè)執(zhí)行的應(yīng)用程序中可以互為補(bǔ)充。
[0036]此外,將與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)重定向到包含在代碼段中的對(duì)應(yīng)的服務(wù)的步驟,還可以包括將儲(chǔ)存有待重定向的對(duì)象方法的初始內(nèi)存地址儲(chǔ)存在第二變量中,從而在執(zhí)行應(yīng)用程序的任何有需要的情況下,可以從執(zhí)行代碼段自身中調(diào)用該方法(即是原始的方法)。
[0037]根據(jù)本發(fā)明另一個(gè)實(shí)施例,對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)的調(diào)用進(jìn)行攔截的步驟可以包括,對(duì)進(jìn)程向包含在代碼段的服務(wù)的調(diào)用進(jìn)行接收,該代碼段對(duì)應(yīng)與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)。根據(jù)數(shù)據(jù)流的方向(即是,進(jìn)程-資源或者資源-進(jìn)程)包含在代碼段的由進(jìn)程發(fā)出調(diào)用的服務(wù)可以不同。
[0038]優(yōu)選地,對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的步驟包括:
[0039]■驗(yàn)證是否已經(jīng)創(chuàng)建與硬件資源對(duì)應(yīng)的虛擬硬件資源;
[0040]■如果驗(yàn)證中得出否定結(jié)果,則產(chǎn)生虛擬硬件資源。
[0041]對(duì)于計(jì)算機(jī)系統(tǒng)的多數(shù)硬件資源,為了管理進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流,需要產(chǎn)生用于虛擬計(jì)算機(jī)系統(tǒng)硬件資源的硬件資源(即是產(chǎn)生虛擬硬件資源)。因此,根據(jù)計(jì)算機(jī)硬件資源,代碼段必須驗(yàn)證是否存在對(duì)應(yīng)的虛擬硬件資源。如果不存,則產(chǎn)生該虛擬硬件資源,該步驟可以包括:
[0042]〇產(chǎn)生對(duì)關(guān)聯(lián)硬件資源的緩存區(qū)進(jìn)行虛擬的緩存區(qū)和/或
[0043]〇產(chǎn)生模擬硬件資源的行為的執(zhí)行線程。
[0044]產(chǎn)生虛擬緩存區(qū)的理由在于,多數(shù)計(jì)算機(jī)系統(tǒng)硬件資源包括或者與至少一個(gè)緩存區(qū)關(guān)聯(lián)(更具體地,每個(gè)硬件資源可以具有至少一個(gè)保留的內(nèi)存區(qū)),可以在該緩存區(qū)中儲(chǔ)存數(shù)據(jù)使數(shù)據(jù)可以到達(dá)進(jìn)程(進(jìn)程通常發(fā)出請(qǐng)求來獲取數(shù)據(jù)),或者進(jìn)程可以在該緩存區(qū)中儲(chǔ)存數(shù)據(jù)使數(shù)據(jù)可以到達(dá)資源(資源通常能夠捕獲數(shù)據(jù)),即是,緩存區(qū)服務(wù)作為進(jìn)程和資源之間交換數(shù)據(jù)的工具。產(chǎn)生虛擬或虛擬化的緩存區(qū)的目的在于,使用于進(jìn)程和資源之間交換數(shù)據(jù)的保留內(nèi)存區(qū)成為一不同的區(qū)域,該區(qū)域不受操作系統(tǒng)和/或與實(shí)際的資源關(guān)聯(lián)的驅(qū)動(dòng)的控制,但是受代碼段的控制。此外,對(duì)于每個(gè)硬件資源,,具有根據(jù)本發(fā)明的插入的代碼段的每個(gè)正在執(zhí)行的應(yīng)用程序因此可以擁有至少一個(gè)自己的緩存區(qū),并且該緩存區(qū)不與屬于硬件資源的其它應(yīng)用程序共享。
[0045]在一些情況中,一旦數(shù)據(jù)已經(jīng)儲(chǔ)存在虛擬緩存區(qū)中,有必要向進(jìn)程報(bào)告已經(jīng)正確執(zhí)行所有活動(dòng)。此外,因?yàn)榫彺鎱^(qū)剩下空間,或者因?yàn)樵诰彺鎱^(qū)中不能儲(chǔ)存所有數(shù)據(jù)且需要另一步驟或者其它步驟來儲(chǔ)存數(shù)據(jù),有必要向進(jìn)程指出已經(jīng)在緩存區(qū)中寫入多少數(shù)據(jù)。
[0046]關(guān)于執(zhí)行線程,有必要首先產(chǎn)生執(zhí)行線程以模擬計(jì)算機(jī)系統(tǒng)硬件資源的行為,尤其使執(zhí)行線程通過虛擬硬件資源對(duì)代碼段產(chǎn)生的數(shù)據(jù)實(shí)施合適的管理,并且通過虛擬化緩存區(qū)對(duì)在它們之間交換的由執(zhí)行的進(jìn)程所產(chǎn)生的數(shù)據(jù)實(shí)施合適的管理,正如上面所描述的那樣。著重指出,執(zhí)行線程例如可以由至少一個(gè)包含在代碼段中的函數(shù)來表現(xiàn),使得執(zhí)行線程實(shí)際上引起該函數(shù)的執(zhí)行。
[0047]此外,對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的步驟還可以包括在虛擬緩存區(qū)中儲(chǔ)存由進(jìn)程發(fā)送到硬件資源的數(shù)據(jù)。由于數(shù)據(jù)儲(chǔ)存在虛擬緩存區(qū)中,因此代碼段能夠?qū)M(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理,這是在代碼段的控制下進(jìn)行。由進(jìn)程產(chǎn)生的數(shù)據(jù)的目的地實(shí)際為計(jì)算機(jī)系統(tǒng)硬件資源(即是實(shí)際的硬件資源),但是通過代碼段的對(duì)由進(jìn)程向某些API服務(wù)的調(diào)用的攔截允許該數(shù)據(jù)處在其控制下。
[0048]另一方面,對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的步驟包括:
[0049]■暫停所產(chǎn)生的模擬硬件資源行為的執(zhí)行線程并持續(xù)一段預(yù)設(shè)的時(shí)間;
[0050]圖獲取儲(chǔ)存在虛擬緩存區(qū)中的由進(jìn)程先前發(fā)送到硬件資源的數(shù)據(jù);
[0051]圖處理獲取的數(shù)據(jù)。
[0052]如果虛擬硬件資源具有模擬計(jì)算機(jī)系統(tǒng)硬件資源行為的執(zhí)行線程,代碼段必須暫停執(zhí)行線程一段預(yù)設(shè)的時(shí)間(通常為毫秒級(jí)),然后使執(zhí)行線程獲取進(jìn)程已在虛擬緩存區(qū)中儲(chǔ)存的數(shù)據(jù)。一旦獲得數(shù)據(jù),執(zhí)行線程必須處理它們,就像計(jì)算機(jī)系統(tǒng)硬件資源要做的那樣。因此,例如,如果硬件資源是音頻卡,對(duì)這些數(shù)據(jù)的處理需要對(duì)其轉(zhuǎn)換,例如轉(zhuǎn)換為1^3格式(根據(jù)1?郎-1音頻層III標(biāo)準(zhǔn)),然后使所述數(shù)據(jù)能被解析。
[0053]根據(jù)本發(fā)明的優(yōu)選實(shí)施例,對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的步驟可以包括發(fā)送處理的數(shù)據(jù)到第一遠(yuǎn)程計(jì)算機(jī)系統(tǒng)。假定數(shù)據(jù)處理之后,代碼段通過虛擬硬件資源繼續(xù)對(duì)其控制,該數(shù)據(jù)可以發(fā)送到實(shí)際上對(duì)其利用的遠(yuǎn)程計(jì)算機(jī)系統(tǒng)(不同于包含實(shí)際的硬件資源的計(jì)算機(jī)系統(tǒng))中,然而該數(shù)據(jù)還可以發(fā)送到在其中執(zhí)行該應(yīng)用程序的計(jì)算機(jī)系統(tǒng)本身或者任何其它本地計(jì)算機(jī)系統(tǒng)。因此,繼續(xù)音頻卡的例子,假定代碼段已經(jīng)控制音頻數(shù)據(jù),所述代碼段能夠通過遠(yuǎn)程計(jì)算機(jī)系統(tǒng)(例如,移動(dòng)裝置或者終端,比如智能手機(jī)或者平板電腦)的實(shí)際的音頻卡使該音頻數(shù)據(jù)變成可聽見,而不是通過與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的實(shí)際的音頻卡使其可聽見。一旦執(zhí)行線程處理了數(shù)據(jù)(應(yīng)注意到,其至少一個(gè)函數(shù)包含在執(zhí)行線程中),如果通過計(jì)算機(jī)系統(tǒng)音頻卡可解析該數(shù)據(jù),明顯任何其它計(jì)算機(jī)系統(tǒng)的音頻卡將要解析的數(shù)據(jù)一定不會(huì)出現(xiàn)問題,原因在于該數(shù)據(jù)已經(jīng)對(duì)其適配。
[0054]清楚地理解到,用于虛擬與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的硬件資源的方法已經(jīng)用一般的方式從上文描述到此,并且還以更具體的方式尤其基于對(duì)屬于應(yīng)用程序的進(jìn)程向硬件資源所產(chǎn)生的數(shù)據(jù)流的管理來描述,即是從上文到這里,本發(fā)明已經(jīng)描述了代碼段如何對(duì)將要從進(jìn)程至資源的數(shù)據(jù)進(jìn)行控制。當(dāng)在資源和屬于應(yīng)用程序的進(jìn)程之間產(chǎn)生數(shù)據(jù)流的時(shí)候,本發(fā)明的方法描述如下。
[0055]因此本發(fā)明的方法可以包括,對(duì)從虛擬硬件資源到屬于應(yīng)用程序的進(jìn)程所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理。
[0056]在這樣的特定方向下對(duì)數(shù)據(jù)流的管理可以包括:
[0057]圖從第二遠(yuǎn)程計(jì)算機(jī)系統(tǒng)接收數(shù)據(jù);
[0058]圖處理接收的數(shù)據(jù);
[0059]圖在虛擬緩存區(qū)中儲(chǔ)存處理的數(shù)據(jù)。
[0060]代碼段可以在任何時(shí)候從第二遠(yuǎn)程計(jì)算機(jī)系統(tǒng)接收數(shù)據(jù)(盡管第一和第二遠(yuǎn)程計(jì)算機(jī)系統(tǒng)通常將會(huì)是相同的遠(yuǎn)程計(jì)算機(jī)系統(tǒng)),必須處理該數(shù)據(jù)并且將該數(shù)據(jù)儲(chǔ)存在先前創(chuàng)建的虛擬緩存區(qū),從而使進(jìn)程能對(duì)其訪問。因此,例如被虛擬的硬件資源是計(jì)算機(jī)系統(tǒng)的鍵盤的時(shí)候,代碼段(更具體為模擬硬件資源行為的執(zhí)行線程)可以從遠(yuǎn)程計(jì)算機(jī)系統(tǒng)(例如平板電腦)接收鍵盤數(shù)據(jù),比如基于用戶通過平板電腦的觸摸屏上的鍵盤觸發(fā)而產(chǎn)生的數(shù)據(jù)。必須經(jīng)由執(zhí)行線程處理該數(shù)據(jù)并且將其儲(chǔ)存在緩存區(qū)中。
[0061]隨后,當(dāng)進(jìn)程需要獲取該數(shù)據(jù)時(shí),必須調(diào)用與數(shù)據(jù)流的管理關(guān)聯(lián)的某八?I服務(wù),該數(shù)據(jù)流是在硬件資源(因?yàn)橛布Y源的虛擬化對(duì)于進(jìn)程來說是透明的,這里理解為實(shí)際的硬件資源)和進(jìn)程之間產(chǎn)生,其中這些調(diào)用由代碼段攔截,使得代碼段提取儲(chǔ)存在虛擬緩存區(qū)中的數(shù)據(jù)(而不是儲(chǔ)存在計(jì)算機(jī)系統(tǒng)硬件資源,即是實(shí)際的硬件資源的緩存區(qū)中的數(shù)據(jù))并且使進(jìn)程可以對(duì)其訪問,并且在獲取該數(shù)據(jù)后,如果需要的話,能夠?qū)ζ涮幚怼?br> [0062]因此,對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)的調(diào)用進(jìn)行攔截,該步驟可以包括:
[0063]■對(duì)由屬于應(yīng)用程序的進(jìn)程向與從硬件資源到進(jìn)程所產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)的調(diào)用進(jìn)行攔截;
[0064]然而,對(duì)從虛擬硬件資源到屬于應(yīng)用程序的進(jìn)程所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理,該步驟包括:
[0065]■對(duì)儲(chǔ)存在虛擬緩存區(qū)的數(shù)據(jù)進(jìn)行回收;
[0066]■發(fā)送回收的數(shù)據(jù)到進(jìn)程。
[0067]如上所述,對(duì)于一般情況(即是,對(duì)于進(jìn)程和資源之間的數(shù)據(jù)流),對(duì)由進(jìn)程向與從硬件資源到進(jìn)程所產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)的調(diào)用進(jìn)行攔截,該步驟可以包括對(duì)進(jìn)程向包含在代碼段的服務(wù)的調(diào)用進(jìn)行接收,該代碼段對(duì)應(yīng)與從硬件資源到進(jìn)程所產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)。
[0068]最后,該方法還可以包括對(duì)從計(jì)算機(jī)硬件資源(即是實(shí)際的硬件資源)到進(jìn)程所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理,從而確保虛擬資源持續(xù)正確地控制應(yīng)用程序而不是控制實(shí)際的資源。為此,對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的步驟包括:
[0069]■對(duì)從硬件資源到進(jìn)程所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理,可以包括:
[0070]〇驗(yàn)證是否在緩存區(qū)中存在來自硬件資源的數(shù)據(jù);
[0071]〇如果驗(yàn)證得出肯定結(jié)果,消除該數(shù)據(jù)。
[0072]因?yàn)閷?shí)施計(jì)算機(jī)系統(tǒng)硬件資源的虛擬化對(duì)于該硬件資源是透明的,由此該硬件資源有可能繼續(xù)發(fā)送數(shù)據(jù)到與其關(guān)聯(lián)的緩存區(qū)中,使得該緩存區(qū)可以在某些點(diǎn)上最終達(dá)到飽和,在這種情況下,實(shí)際的硬件資源可以滲透到實(shí)際的計(jì)算機(jī)系統(tǒng)的操作系統(tǒng)的內(nèi)部結(jié)構(gòu),可以響應(yīng)該內(nèi)部結(jié)構(gòu)或者可以使其停止正確地工作。為了防止這種情況,代碼段可以每隔一段時(shí)間進(jìn)行驗(yàn)證,例如,如果有數(shù)據(jù)儲(chǔ)存在緩存區(qū)中并且如果驗(yàn)證得到肯定的結(jié)果,則消除該數(shù)據(jù)。
[0073]根據(jù)第二方面,本發(fā)明提供一種執(zhí)行代碼段,可以包括比如上述的用于虛擬化與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的硬件資源的方法的執(zhí)行指令,該代碼段適合于插入到一應(yīng)用程序的進(jìn)程內(nèi),當(dāng)該應(yīng)用程序在包括至少一個(gè)在計(jì)算機(jī)系統(tǒng)上執(zhí)行的應(yīng)用程序編程接口(API)的操作系統(tǒng)上執(zhí)行時(shí)。
[0074]該執(zhí)行代碼段可以存儲(chǔ)在物理存儲(chǔ)媒介上,如可記錄媒介、計(jì)算機(jī)內(nèi)存或只讀內(nèi)存,或者可以由載波實(shí)現(xiàn),如電或光載波。
[0075]根據(jù)本發(fā)明的第三方面,本發(fā)明提供一種用于虛擬化與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的硬件資源的系統(tǒng),在其上執(zhí)行包含至少一個(gè)應(yīng)用程序編程接口的操作系統(tǒng),在該操作系統(tǒng)上執(zhí)行包含一進(jìn)程的應(yīng)用程序,所述系統(tǒng)可以包括:
[0076]-對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)的調(diào)用進(jìn)行攔截的計(jì)算機(jī)設(shè)備;
[0077]-基于對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)的調(diào)用進(jìn)行攔截,通過代碼段對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的計(jì)算機(jī)設(shè)備。
[0078]優(yōu)選地,本發(fā)明還提供一種在其上執(zhí)行操作系統(tǒng)的計(jì)算機(jī)系統(tǒng),該操作系統(tǒng)可以包括至少一個(gè)應(yīng)用程序編程接口,在該操作系統(tǒng)上執(zhí)行有至少一個(gè)應(yīng)用程序,所述計(jì)算機(jī)系統(tǒng)可以包括存儲(chǔ)器和至少一個(gè)處理器,該存儲(chǔ)器儲(chǔ)存處理器執(zhí)行的指令,該指令與一可執(zhí)行代碼段對(duì)應(yīng),比如與上述的插入到屬于應(yīng)用程序的進(jìn)程的代碼段對(duì)應(yīng),該指令可以包括的函數(shù)用于:
[0079]-對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)的調(diào)用進(jìn)行攔截;
[0080]-基于由對(duì)屬于應(yīng)用程序的進(jìn)程向關(guān)聯(lián)產(chǎn)生在進(jìn)程和硬件資源之間的數(shù)據(jù)流的管理的應(yīng)用程序編程接口服務(wù)的調(diào)用進(jìn)行攔截,通過代碼段對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理。
[0081]根據(jù)本發(fā)明的實(shí)施例,在上述的計(jì)算機(jī)系統(tǒng)中至少兩個(gè)應(yīng)用程序可在操作系統(tǒng)上執(zhí)行,并且其中存儲(chǔ)器可儲(chǔ)存與每個(gè)執(zhí)行的應(yīng)用程序的代碼段對(duì)應(yīng)的處理器可執(zhí)行指令。
[0082]此外,本發(fā)明還可以提供一種執(zhí)行在操作系統(tǒng)上的應(yīng)用程序,該操作系統(tǒng)執(zhí)行在計(jì)算機(jī)系統(tǒng)上,該應(yīng)用程序包括可執(zhí)行代碼段,比如上面已經(jīng)描述的代碼段。
[0083]根據(jù)本發(fā)明的合理實(shí)施例,硬件資源可以是音頻卡,對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口(API)服務(wù)的調(diào)用進(jìn)行攔截的步驟可以包括對(duì)進(jìn)程向與從進(jìn)程到音頻卡所產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)的調(diào)用進(jìn)行攔截;以及通過代碼段對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的步驟可以包括對(duì)從進(jìn)程到音頻卡所產(chǎn)生的音頻數(shù)據(jù)流進(jìn)行管理。
[0084]更具體地,對(duì)從進(jìn)程到音頻卡所產(chǎn)生的音頻數(shù)據(jù)流進(jìn)行管理的步驟可以包括驗(yàn)證是否已經(jīng)創(chuàng)建與計(jì)算機(jī)系統(tǒng)音頻卡對(duì)應(yīng)的虛擬音頻卡;如果在驗(yàn)證得出否定結(jié)果,則產(chǎn)生虛擬的音頻卡。
[0085]所述的產(chǎn)生虛擬的音頻卡的步驟可以包括產(chǎn)生至少一個(gè)緩存區(qū),該緩存區(qū)虛擬與計(jì)算機(jī)系統(tǒng)音頻卡關(guān)聯(lián)的緩存區(qū),并且產(chǎn)生對(duì)計(jì)算機(jī)系統(tǒng)音頻卡的行為進(jìn)行模擬的執(zhí)行線程。
[0086]此外,對(duì)進(jìn)程和音頻卡之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的步驟還可以包括在虛擬緩存區(qū)中儲(chǔ)存由進(jìn)程發(fā)送到音頻卡的數(shù)據(jù)。
[0087]另一方面,對(duì)進(jìn)程和音頻卡之間產(chǎn)生的音頻數(shù)據(jù)流進(jìn)行管理的步驟可以包括:暫停所產(chǎn)生的對(duì)計(jì)算機(jī)系統(tǒng)音頻卡的行為進(jìn)行模擬的執(zhí)行線程并持續(xù)一段預(yù)設(shè)的時(shí)間;執(zhí)行線程獲取儲(chǔ)存在虛擬緩存區(qū)中的由進(jìn)程先前發(fā)送到音頻卡的音頻數(shù)據(jù);以及執(zhí)行線程處理獲取的音頻數(shù)據(jù)。
[0088]執(zhí)行線程處理從虛擬緩存區(qū)中獲取的音頻數(shù)據(jù)的步驟可以包括將從該至少一個(gè)虛擬緩存區(qū)獲取的數(shù)據(jù)進(jìn)行混合,并且轉(zhuǎn)換混合的數(shù)據(jù)為可解析的格式(例如轉(zhuǎn)換為mp3格式)。
[0089]根據(jù)本發(fā)明另一個(gè)實(shí)施例,硬件資源可以是視頻卡,對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口(API)服務(wù)的調(diào)用進(jìn)行攔截的步驟可以包括對(duì)由進(jìn)程向與進(jìn)程到視頻卡所產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)的調(diào)用進(jìn)行攔截;以及代碼段對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的步驟可以包括對(duì)從進(jìn)程到視頻卡所產(chǎn)生的視頻數(shù)據(jù)流進(jìn)行管理。
[0090]更具體地,對(duì)從進(jìn)程到視頻卡所產(chǎn)生的視頻數(shù)據(jù)流進(jìn)行管理的步驟可以包括驗(yàn)證是否已經(jīng)創(chuàng)建與計(jì)算機(jī)系統(tǒng)視頻卡對(duì)應(yīng)的虛擬視頻卡;如果在驗(yàn)證得出否定結(jié)果,則產(chǎn)生虛擬的視頻卡。
[0091]所述的產(chǎn)生虛擬的視頻卡的步驟可以包括產(chǎn)生緩存區(qū),該緩存區(qū)虛擬與計(jì)算機(jī)系統(tǒng)視頻卡關(guān)聯(lián)的緩存區(qū),并且產(chǎn)生對(duì)計(jì)算機(jī)系統(tǒng)視頻卡的行為進(jìn)行模擬的執(zhí)行線程。在視頻卡的情況中,該緩存區(qū)稱為繪圖環(huán)境(00并且可以定義為內(nèi)存區(qū),其中視頻卡將會(huì)一幀接一巾貞地儲(chǔ)存產(chǎn)生的圖像到該內(nèi)存區(qū)中并且一直與一窗口關(guān)聯(lián)。
[0092]另一方面,對(duì)進(jìn)程和視頻卡之間產(chǎn)生的視頻數(shù)據(jù)流進(jìn)行管理的步驟可以包括:暫停所產(chǎn)生的對(duì)計(jì)算機(jī)系統(tǒng)視頻卡的行為進(jìn)行模擬的執(zhí)行線程并持續(xù)一段預(yù)設(shè)的時(shí)間;執(zhí)行線程獲取儲(chǔ)存在虛擬%中的由視頻卡先前生成的視頻數(shù)據(jù)(幀);以及執(zhí)行線程處理獲取的視頻數(shù)據(jù)。
[0093]執(zhí)行線程處理從虛擬緩存區(qū)中獲取的視頻數(shù)據(jù)的步驟可以包括利用編碼比如只.264對(duì)幀進(jìn)行譯碼。
[0094]仍然根據(jù)本發(fā)明的另一個(gè)實(shí)施例,硬件資源可以是數(shù)據(jù)輸入設(shè)備,比如鍵盤或鼠標(biāo)。在這一點(diǎn)上,應(yīng)當(dāng)指出,如果執(zhí)行在計(jì)算機(jī)系統(tǒng)上的操作系統(tǒng)使用消息隊(duì)列系統(tǒng),還需要虛擬該消息隊(duì)列。
[0095]為了對(duì)消息隊(duì)列實(shí)施虛擬,還需要產(chǎn)生緩存區(qū)和模擬消息隊(duì)列系統(tǒng)的執(zhí)行線程(即是基于一些數(shù)據(jù)輸入,比如按鍵,發(fā)送消息到與應(yīng)用程序關(guān)聯(lián)的消息隊(duì)列),該執(zhí)行線程還攔截消息的查詢和處理函數(shù)(即是程序員為確定應(yīng)用程序響應(yīng)某一消息的行為而定義的函數(shù)(也稱為窗口函數(shù))),該函數(shù)如上所述包含在代碼段中,從而執(zhí)行消息隊(duì)列系統(tǒng)函數(shù)。在此情況中,代碼段必須對(duì)由進(jìn)程向查詢(從隊(duì)列取出消息以讀取它)和處理(實(shí)施某動(dòng)作)消息的函數(shù)的調(diào)用進(jìn)行攔截,該消息可以處在操作系統(tǒng)已關(guān)聯(lián)應(yīng)用程序的消息隊(duì)列中。處理消息隊(duì)列的消息的代碼段的函數(shù)因此可以消除那些不期望由應(yīng)用程序去處理的消息(即是要忽視的消息),或者可以依次調(diào)用原始的函數(shù)從而使應(yīng)用程序處理消息(即是意圖響應(yīng)所述消息來行動(dòng))。
[0096]在硬件資源是數(shù)據(jù)輸入裝置(例如鼠標(biāo)或者鍵盤)的情況中,對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口(八?〗)服務(wù)的調(diào)用進(jìn)行攔截的步驟可以包括,對(duì)由進(jìn)程向與進(jìn)程到輸入設(shè)備所產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的仙I服務(wù)的調(diào)用進(jìn)行攔截;以及代碼段對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的步驟可以包括對(duì)從輸入設(shè)備到進(jìn)程所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理。
[0097]更具體地,對(duì)從輸入設(shè)備到進(jìn)程所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的步驟可以包括驗(yàn)證是否已經(jīng)創(chuàng)建與計(jì)算機(jī)系統(tǒng)輸入設(shè)備對(duì)應(yīng)的虛擬輸入設(shè)備;如果在驗(yàn)證得出否定結(jié)果,則產(chǎn)生虛擬的輸入設(shè)備。
[0098]所述的產(chǎn)生虛擬的輸入設(shè)備的步驟可以包括產(chǎn)生至少一個(gè)緩存區(qū),該緩存區(qū)虛擬與計(jì)算機(jī)系統(tǒng)輸入設(shè)備關(guān)聯(lián)的緩存區(qū),并且產(chǎn)生對(duì)計(jì)算機(jī)系統(tǒng)輸入設(shè)備的行為進(jìn)行模擬的執(zhí)行線程。
[0099]此外,對(duì)從虛擬輸入設(shè)備到屬于應(yīng)用程序的進(jìn)程所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的步驟可以包括:從遠(yuǎn)程計(jì)算機(jī)系統(tǒng)接收數(shù)據(jù),該數(shù)據(jù)是由遠(yuǎn)程計(jì)算機(jī)系統(tǒng)的輸入設(shè)備(比如通過或者不通過觸摸屏實(shí)現(xiàn)的鍵盤、鼠標(biāo))產(chǎn)生的;處理接收的數(shù)據(jù);以及在虛擬緩存區(qū)中儲(chǔ)存處理的數(shù)據(jù)。
[0100]另一方面,對(duì)從虛擬硬件設(shè)備到屬于應(yīng)用程序的進(jìn)程所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的步驟還可以包括:收回儲(chǔ)存在虛擬緩存區(qū)中的數(shù)據(jù);發(fā)送回收的數(shù)據(jù)到進(jìn)程。
[0101]最后,根據(jù)本發(fā)明的另一個(gè)實(shí)施例,硬件資源可以是存儲(chǔ)單元,比如硬盤驅(qū)動(dòng)器;對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口(API)服務(wù)的調(diào)用進(jìn)行攔截的步驟,可以包括對(duì)由進(jìn)程向與從進(jìn)程到存儲(chǔ)單元所產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的API服務(wù)的調(diào)用進(jìn)行攔截;以及代碼段對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的步驟可以包括對(duì)從進(jìn)程到存儲(chǔ)單元所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理。
[0102]更具體地,對(duì)從進(jìn)程到硬盤驅(qū)動(dòng)器所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的步驟可以包括對(duì)儲(chǔ)存有來自進(jìn)程的數(shù)據(jù)的目錄路徑進(jìn)行改變。
[0103]如上所述,對(duì)于給定的應(yīng)用程序,代碼段必須能夠?qū)γ枋龅挠布Y源中的一個(gè)或復(fù)數(shù)個(gè)進(jìn)行虛擬。處于這個(gè)原因,代碼段必須適合并且必須包含必要的指令用于實(shí)現(xiàn)一個(gè)或多個(gè)這些設(shè)備的虛擬化。
[0104]說明書和權(quán)利要求書通篇,用語“包括”及其變型不表示排除其他技術(shù)特征、補(bǔ)充、條目或步驟。本領(lǐng)域技術(shù)人員可以從部分說明書以及本發(fā)明部分實(shí)踐推斷出本發(fā)明進(jìn)一步的目的、優(yōu)勢(shì)以及特征。文中提供的示例和附圖僅作描述目的,它們不作為本發(fā)明的限制。權(quán)利要求中涉及附圖并且位于括號(hào)內(nèi)的附圖標(biāo)記只是為了進(jìn)一步理解該權(quán)利要求,不應(yīng)該理解為限制本發(fā)明的保護(hù)范圍。此外,本發(fā)明涉及此處描述的特別及優(yōu)選實(shí)施例的所有可能的組合。

【專利附圖】

【附圖說明】
[0105]為了更好地理解上面已經(jīng)描述的內(nèi)容,通過非限制性的方式附上綱要地描述實(shí)際的實(shí)施例的附圖。
[0106]附圖中:
[0107]圖1所示為根據(jù)現(xiàn)有技術(shù)狀況的計(jì)算機(jī)系統(tǒng)上的應(yīng)用程序執(zhí)行層的框圖;
[0108]圖2所示為進(jìn)一步與插入到屬于應(yīng)用程序的進(jìn)程中的代碼段的層進(jìn)行結(jié)合的計(jì)算機(jī)系統(tǒng)上的應(yīng)用程序執(zhí)行層的框圖,根據(jù)本發(fā)明該代碼段意圖用于對(duì)至少一個(gè)與執(zhí)行應(yīng)用程序的計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的硬件資源進(jìn)行虛擬。

【具體實(shí)施方式】
[0109]下面將提供根據(jù)本發(fā)明的用于虛擬化與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的硬件資源的方法說明和執(zhí)行代碼段說明。在該計(jì)算機(jī)系統(tǒng)上安裝包括至少一個(gè)應(yīng)用程序編程接口(API)的操作系統(tǒng)。描述的執(zhí)行代碼段適合插入到屬于應(yīng)用程序的進(jìn)程中,該應(yīng)用程序正在所述的操作系統(tǒng)上執(zhí)行。
[0110]圖1所示為根據(jù)現(xiàn)有技術(shù)狀況,在計(jì)算機(jī)系統(tǒng)(例如個(gè)人計(jì)算機(jī)、服務(wù)器等)上的應(yīng)用程序(例如游戲)執(zhí)行層的描述圖。
[0111]圖中,最低級(jí)別層10代表計(jì)算機(jī)硬件資源,比如微處理器(CPU)、內(nèi)存、圖像處理單元(GPU)、鍵盤、鼠標(biāo)、視頻卡、音頻卡和硬盤驅(qū)動(dòng)器等。
[0112]在配置為更高級(jí)別的第二層11中設(shè)置操作系統(tǒng),該第二層11具有與低層10的資源雙向通信和交互所需的驅(qū)動(dòng)(能夠發(fā)送和/或接收與這些資源有關(guān)的信息,比如控制信號(hào)14或數(shù)據(jù)15)。
[0113]在代表操作系統(tǒng)的層11上面配置的第三層12中,設(shè)置有應(yīng)用程序編程接口(更好地稱之為API),包括那些包含在操作系統(tǒng)中的應(yīng)用程序編程接口,以及那些經(jīng)由低層10的資源的驅(qū)動(dòng)的安裝來實(shí)現(xiàn)的應(yīng)用程序編程接口。不管使用任何操作系統(tǒng),這些API通常以動(dòng)態(tài)鏈接庫的形式實(shí)現(xiàn)。在包含多個(gè)API的層12和代表操作系統(tǒng)的層11之間的通信也是雙向通信,該雙向通信都能夠交換控制信號(hào)14和數(shù)據(jù)15。
[0114]最后,圖1還示出了第四層或最高級(jí)別層13,描述執(zhí)行中的應(yīng)用程序。在執(zhí)行過程中,該應(yīng)用程序?qū)Υ矶鄠€(gè)API的層12進(jìn)行訪問,交換控制信號(hào)和數(shù)據(jù)。
[0115]因此,根據(jù)該配置,例如,正在執(zhí)行的應(yīng)用程序13需要在執(zhí)行該應(yīng)用程序的計(jì)算機(jī)系統(tǒng)的顯示屏上生成窗口,該應(yīng)用程序必須訪問某些用于生成窗口的多個(gè)API 12的服務(wù)(函數(shù)或方法)。為了能夠在屏幕上生成窗口,這些服務(wù)需要用操作系統(tǒng)11交換信息(控制信號(hào)和數(shù)據(jù)),該操作系統(tǒng)具有必需的工具(即驅(qū)動(dòng))用于與屏幕10通信,從而生成想要的窗口。
[0116]這種配置的主要缺點(diǎn)在于每個(gè)計(jì)算機(jī)系統(tǒng)硬件資源只可用于單個(gè)應(yīng)用程序,是指在前景(即活動(dòng)窗口)中用戶具有(或者操作系統(tǒng)已選擇為)活動(dòng)的應(yīng)用程序,即是說,如果硬件資源為音頻卡,從那時(shí)執(zhí)行的全部應(yīng)用程序中,只有在前景中具有用戶活動(dòng)的應(yīng)用程序能夠使用那個(gè)資源,因此僅該應(yīng)用程序能夠發(fā)送音頻數(shù)據(jù)到音頻卡從而對(duì)其重現(xiàn)。
[0117]也可能是一種情況,其中硬件資源能夠從不同的執(zhí)行應(yīng)用程序中接收數(shù)據(jù),但在該情況下,數(shù)據(jù)將會(huì)混合。因此,繼續(xù)音頻卡的例子,如果該資源可以從一個(gè)以上的執(zhí)行的應(yīng)用程序中接收音頻數(shù)據(jù),音頻卡重現(xiàn)其接收到的不同音頻數(shù)據(jù)的混合。
[0118]為了克服這些缺點(diǎn),本發(fā)明提供一種執(zhí)行代碼段,在執(zhí)行初始化時(shí)必須插入到每個(gè)應(yīng)用程序中(例如,屬于在休眠狀態(tài)中啟動(dòng)的應(yīng)用程序的進(jìn)程),能夠執(zhí)行一種用于虛擬化一個(gè)或多個(gè)硬件資源的方法,該硬件資源與執(zhí)行應(yīng)用程序的計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)。因此,該代碼段的主要目的是,對(duì)應(yīng)用程序運(yùn)行所需的來自計(jì)算機(jī)系統(tǒng)的硬件資源進(jìn)行虛擬,使其能夠僅通過已插入該代碼段的應(yīng)用程序生成有用的虛擬化硬件資源,并且管理在屬于應(yīng)用程序的進(jìn)程和硬件資源之間的數(shù)據(jù)流。因此,每個(gè)執(zhí)行的應(yīng)用程序擁有自己的虛擬硬件設(shè)備以及工具(代碼段),該工具能夠管理它們和進(jìn)程之間所產(chǎn)生的數(shù)據(jù)流。
[0119]圖2所示為基于圖1的圖形,但其進(jìn)一步包括代表執(zhí)行代碼段的層16,當(dāng)插入到與應(yīng)用程序關(guān)聯(lián)的進(jìn)程后,該代碼段被配置為在應(yīng)用程序?qū)?3和代表多個(gè)API的層12之間的邏輯層,使得代碼段可以攔截從應(yīng)用程序?qū)δ矨PI服務(wù)(例如函數(shù)和方法)的調(diào)用,由此實(shí)現(xiàn)硬件資源10’的虛擬化。
[0120]如圖2所示,代表代碼段的層16的主函數(shù)對(duì)屬于應(yīng)用程序的進(jìn)程向API服務(wù)所作出的不同的調(diào)用進(jìn)行攔截,該API服務(wù)與進(jìn)程和計(jì)算機(jī)系統(tǒng)硬件資源之間產(chǎn)生的數(shù)據(jù)流相關(guān),然后基于這些調(diào)用的攔截,對(duì)進(jìn)程和計(jì)算機(jī)系統(tǒng)硬件資源之間以及上述的進(jìn)程和虛擬硬件資源10’之間所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理。
[0121]更具體地,通過代碼段執(zhí)行的方法如下。必須基于初始的情況來描述,其中當(dāng)用戶執(zhí)行應(yīng)用程序時(shí),屬于應(yīng)用程序的進(jìn)程在休眠狀態(tài)中啟動(dòng)。在該休眠狀態(tài)過程中,將執(zhí)行代碼段插入到進(jìn)程中。
[0122]一旦代碼段插入到進(jìn)程中,該代碼段會(huì)使所有那些包含應(yīng)用程序編程接口(API)的以及執(zhí)行應(yīng)用程序時(shí)將會(huì)需要的動(dòng)態(tài)鏈接庫加載到內(nèi)存中,這些應(yīng)用程序編程接口包含與進(jìn)程和不同的計(jì)算機(jī)系統(tǒng)硬件資源之間的數(shù)據(jù)流管理相關(guān)的服務(wù)(函數(shù)或者方法然后,在操作系統(tǒng)根據(jù)儲(chǔ)存有這些服務(wù)的初始內(nèi)存地址為裝載在內(nèi)存中的不同的仙I的服務(wù)填充服務(wù)指針表之后,它將指針表中的每個(gè)應(yīng)用程序在執(zhí)行過程中可能或者會(huì)需要的服務(wù)的初始內(nèi)存地址替換為包含在該代碼段的每一對(duì)應(yīng)的服務(wù)所在的初始內(nèi)存地址。因此,在執(zhí)行重定向的基礎(chǔ)上,代碼段能夠?qū)M(jìn)程為了執(zhí)行服務(wù)而對(duì)這些相關(guān)服務(wù)的調(diào)用進(jìn)行攔截,即由于指針并不指向仙I服務(wù),而是指向包含在該代碼段的對(duì)應(yīng)的服務(wù),代碼段接收到該進(jìn)程對(duì)不同的八?I的不同的相關(guān)服務(wù)的調(diào)用。
[0123]基于所述攔截,代碼段獲取在進(jìn)程和計(jì)算機(jī)系統(tǒng)的硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理的能力,即是,該代碼段按照對(duì)進(jìn)程透明的方式,對(duì)進(jìn)程和計(jì)算機(jī)系統(tǒng)的硬件資源之間產(chǎn)生的數(shù)據(jù)流實(shí)施控制。
[0124]更具體地,當(dāng)進(jìn)程嘗試?yán)谜{(diào)用使計(jì)算機(jī)系統(tǒng)硬件資源接入某些仙I服務(wù)時(shí),該段代碼執(zhí)行其擁有的服務(wù)(即是,實(shí)現(xiàn)這些調(diào)用的攔截基于該攔截,如果先前沒有產(chǎn)生虛擬硬件資源10’,而為了控制數(shù)據(jù)流則需要產(chǎn)生虛擬硬件資源10’,該虛擬硬件資源10’與進(jìn)程嘗試訪問的計(jì)算機(jī)系統(tǒng)硬件資源對(duì)應(yīng)。
[0125]產(chǎn)生虛擬硬件資源10’可能需要多個(gè)動(dòng)作。
[0126]第一動(dòng)作可以產(chǎn)生至少一個(gè)緩存區(qū),用于虛擬至少一個(gè)與計(jì)算機(jī)系統(tǒng)硬件資源關(guān)聯(lián)的緩存區(qū),即是,代碼段保留特定的代表虛擬的緩存區(qū)的內(nèi)存區(qū),進(jìn)程必須在其中儲(chǔ)存數(shù)據(jù),該數(shù)據(jù)正開始發(fā)送到計(jì)算機(jī)系統(tǒng)硬件資源時(shí)就已經(jīng)被代碼段攔截。
[0127]將要實(shí)施的第二動(dòng)作可以產(chǎn)生模擬計(jì)算機(jī)系統(tǒng)硬件資源行為的執(zhí)行線程。基本上,該執(zhí)行線程可以是包含在代碼段自身中的函數(shù)。
[0128]一旦創(chuàng)建虛擬硬件資源10’ (如果它之前不存在),代碼段在虛擬緩存區(qū)中儲(chǔ)存由進(jìn)程發(fā)送的數(shù)據(jù),并且產(chǎn)生上述的執(zhí)行線程(如果需要代碼段暫停執(zhí)行線程(這是包含在相同的代碼段中的函數(shù),因此代碼段具有控制權(quán))并持續(xù)一段預(yù)設(shè)的時(shí)間(約幾毫秒),繼而讀取儲(chǔ)存在虛擬的緩存區(qū)的數(shù)據(jù)(應(yīng)注意,所述數(shù)據(jù)來自進(jìn)程)并進(jìn)行處理。處理該數(shù)據(jù)后,代碼段能夠發(fā)送數(shù)據(jù)到第一遠(yuǎn)程計(jì)算機(jī)系統(tǒng),而該實(shí)施例將在后面描述。
[0129]重要的是,如果硬件資源不是虛擬硬件資源而是計(jì)算機(jī)系統(tǒng)硬件資源本身時(shí),通常有必要使代碼段與進(jìn)程進(jìn)行通信以確保數(shù)據(jù)已被正確地接收。
[0130]此外,產(chǎn)生的執(zhí)行線程也可能從第二遠(yuǎn)程計(jì)算機(jī)系統(tǒng)接收數(shù)據(jù)(盡管第一和第二遠(yuǎn)程計(jì)算機(jī)系統(tǒng)通常是相同的遠(yuǎn)程計(jì)算機(jī)系統(tǒng))。在這種情況下,執(zhí)行線程處理接收的數(shù)據(jù)并且在處理后儲(chǔ)存在虛擬硬件資源10’的一部分的虛擬緩存區(qū)中。
[0131]在應(yīng)用程序的執(zhí)行的期間,進(jìn)程調(diào)用某個(gè)八?I服務(wù)來驗(yàn)證計(jì)算機(jī)系統(tǒng)硬件資源是否產(chǎn)生用于應(yīng)用數(shù)據(jù)的數(shù)據(jù)。因?yàn)榕c進(jìn)程和系統(tǒng)硬件資源之間的數(shù)據(jù)流的管理相關(guān)的所有八?I服務(wù)已被重定向,代碼段(更具體為包含在代碼段中的服務(wù))接收和處理調(diào)用。為此,代碼段對(duì)虛擬緩存區(qū)中包含的數(shù)據(jù)進(jìn)行回收(應(yīng)注意,遠(yuǎn)程計(jì)算機(jī)系統(tǒng)的執(zhí)行線程已接收與虛擬緩存區(qū)中包含的數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)(即是由執(zhí)行線程處理和接收的數(shù)據(jù))),并發(fā)送該數(shù)據(jù)到進(jìn)程中以供使用。
[0132]通常地,鑒于計(jì)算機(jī)系統(tǒng)硬件資源能夠產(chǎn)生用于應(yīng)用程序的數(shù)據(jù)(應(yīng)注意,代碼段只在數(shù)據(jù)流級(jí)別而不是在控制信號(hào)級(jí)別上干預(yù)),代碼段必須經(jīng)常驗(yàn)證是否在硬件資源的緩存區(qū)中存有數(shù)據(jù),如果得到肯定的結(jié)果,則將這些數(shù)據(jù)刪除。因此,避免在應(yīng)用程序的執(zhí)行過程中出現(xiàn)問題。
[0133]下面將描述本發(fā)明一個(gè)優(yōu)選實(shí)施例,其中操作系統(tǒng)可以是Windows系列中的任何一個(gè),例如Windows 7 ;計(jì)算機(jī)系統(tǒng)為應(yīng)用程序服務(wù)器,更具體為游戲服務(wù)器;待執(zhí)行的應(yīng)用程序?yàn)槎鄠€(gè)游戲和/或同一個(gè)游戲的多個(gè)不同實(shí)例;以及使執(zhí)行的游戲?qū)崿F(xiàn)訪問請(qǐng)求的硬件資源為游戲服務(wù)器的音頻卡。在本發(fā)明的一個(gè)實(shí)施例中硬件資源為視頻卡,在本發(fā)明的一個(gè)實(shí)施例中硬件資源為數(shù)據(jù)輸入設(shè)備(例如鍵盤或者鼠標(biāo)),以及在本發(fā)明的一個(gè)實(shí)施例中硬件資源為硬盤驅(qū)動(dòng)器,這些實(shí)施例在下面描述。
[0134]更具體地,本實(shí)施例具有以下操作。游戲服務(wù)器的目的在于,使服務(wù)的用戶在他們的移動(dòng)終端或遠(yuǎn)程計(jì)算機(jī)系統(tǒng)上,比如在智能手機(jī)或平板電腦上,玩不同的游戲甚至是相同的游戲(例如PC游戲或主機(jī)游戲)??梢岳昧髅襟w技術(shù)將每個(gè)游戲或者同一游戲的每個(gè)實(shí)例的執(zhí)行從游戲服務(wù)器發(fā)送到用戶的移動(dòng)設(shè)備。因此,用戶可以從屬于所述用戶的移動(dòng)設(shè)備中選擇要玩的游戲,通過在用戶移動(dòng)終端屏幕上顯示的圖形用戶界面上出現(xiàn)的控制元件(例如代表游戲的圖標(biāo))的觸發(fā)來請(qǐng)求執(zhí)行游戲。由用戶在控制元件上的觸發(fā),產(chǎn)生控制信號(hào)發(fā)送到游戲服務(wù)器并使得在服務(wù)器上執(zhí)行所選的游戲。
[0135]鑒于請(qǐng)求執(zhí)行游戲的用戶數(shù)量可能較大(即是可能存在大量正在執(zhí)行的游戲),本發(fā)明的目的在于對(duì)每個(gè)游戲,基于插入其中的代碼段,能夠?qū)?zhí)行中所需的游戲服務(wù)器硬件資源進(jìn)行虛擬,從而在獨(dú)占的基礎(chǔ)上使它們可用。
[0136]當(dāng)用戶從他的/她的移動(dòng)端請(qǐng)求執(zhí)行游戲時(shí),在休眠狀態(tài)中,在游戲服務(wù)器中創(chuàng)建執(zhí)行的應(yīng)用程序(即是游戲)的主進(jìn)程。為此,使用Create Process函數(shù),分配CREATE_SUSPENDED值到創(chuàng)建模式參數(shù)(Create Flags)。一旦進(jìn)程在休眠狀態(tài)中啟動(dòng),使根據(jù)本發(fā)明的執(zhí)行代碼段插入到進(jìn)程中,其目的在于對(duì)游戲服務(wù)器硬件資源進(jìn)行虛擬。
[0137]對(duì)此需要著重注意的是,表述“對(duì)硬件資源進(jìn)行虛擬”意味著不僅產(chǎn)生與計(jì)算機(jī)系統(tǒng)硬件資源對(duì)應(yīng)的虛擬硬件資源,而且還包括完全管理在后產(chǎn)生的數(shù)據(jù)流。
[0138]在進(jìn)程的執(zhí)行恢復(fù)前(應(yīng)注意到,該進(jìn)程在休眠狀態(tài)中啟動(dòng)),插入的代碼段重定向與數(shù)據(jù)流有關(guān)的API函數(shù),該數(shù)據(jù)流在應(yīng)用程序(或更具體的屬于應(yīng)用程序的進(jìn)程)和不同的游戲服務(wù)器硬件資源之間產(chǎn)生(在本實(shí)施例中,至少加載那些計(jì)劃用于管理應(yīng)用程序和音頻卡之間的數(shù)據(jù)流的函數(shù))。因此,例如在本實(shí)施例中可能讓人感興趣的函數(shù)為IAud1 Client 或者 I Aud1 Render Client。
[0139]鑒于在本實(shí)施例中,執(zhí)行在游戲服務(wù)器上的操作系統(tǒng)是來自Windows家族的成員(更具體為Windows 7),這些描述的API通常以多個(gè)動(dòng)態(tài)鏈接庫(DLL)的方式來實(shí)現(xiàn)。因此,代碼段利用Load Library函數(shù)加載庫或者加載含有讓人感興趣的函數(shù)的庫,該函數(shù)例如是 dxg1.dll 庫中的 I Aud1 Render Client API 的 Get Buffer 和 Release Buffer?;旧希琇oad Library將庫加載在內(nèi)存中,并且操作系統(tǒng)以API函數(shù)的內(nèi)存中的初始地址填充索引地址表(IAT),該表是用于API函數(shù)的函數(shù)指針表。利用Redirect I AT函數(shù),代碼段修改必要的指針,使它們與包含在插入到進(jìn)程中的代碼段中的函數(shù)對(duì)應(yīng)。同時(shí),如果代碼段必須隨時(shí)調(diào)用任何重定向的原始函數(shù),將表的原始內(nèi)容,即將指針的修改前的初始值儲(chǔ)存在變量中。
[0140]當(dāng)攔截結(jié)束,即是當(dāng)所有必須的API的所有函數(shù)已重定向,代碼段恢復(fù)執(zhí)行已在休眠狀態(tài)中啟動(dòng)的進(jìn)程。
[0141]另一方面,當(dāng)進(jìn)程請(qǐng)求利用I Aud1 CLient接口的Get Service方法來創(chuàng)建IAud1 Render Client類型的接口(一種COM類型的接口),代碼段驗(yàn)證該接口是否已被代碼段修改(即是重定向)。如果在驗(yàn)證中得到否定結(jié)果,需要修改接口的指針表,用以代替將被攔截的方法,例如 I Aud1 Render Client 的 Get Buffer 和 Release Buffer。用特定的代碼對(duì)用于COM類型接口方法的方法指針表進(jìn)行修改。例如,Get Buffer與I Aud1Render Client接口的方法表的位置4對(duì)應(yīng),并且必須對(duì)其修改,使其指向包含在插入的代碼段中的函數(shù)。同時(shí),如果需要調(diào)用原始的方法,在變量中儲(chǔ)存該位置的原始內(nèi)容。正如已經(jīng)提及到,COM類型接口的指針表的修改僅必須在該類型對(duì)象首次創(chuàng)建時(shí)實(shí)施。
[0142]一旦插入到嘗試訪問音頻卡的游戲中的代碼段已經(jīng)對(duì)接口 I Aud1 RenderClient進(jìn)行創(chuàng)建和攔截,代碼段返回相應(yīng)的I Aud1 Render Client對(duì)象到進(jìn)程。
[0143]當(dāng)屬于應(yīng)用程序的進(jìn)程調(diào)用I Aud1 Render Client Get Buffer方法來請(qǐng)求可寫入音頻卡的音頻數(shù)據(jù)的緩存區(qū)(更具體地,該進(jìn)程需要內(nèi)存區(qū)地址以寫入音頻數(shù)據(jù))的時(shí)候,代碼段攔截該調(diào)用(應(yīng)注意到,Get Buffer方法重定向到對(duì)應(yīng)的包含在代碼段中的方法,因此該進(jìn)程實(shí)際上調(diào)用包含在代碼段中的對(duì)應(yīng)方法)。包含在代碼段中的對(duì)應(yīng)方法調(diào)用API的原始方法(然而代碼段可包含整個(gè)方法)并且產(chǎn)生對(duì)關(guān)聯(lián)音頻卡的緩存區(qū)進(jìn)行虛擬的緩存區(qū),即是,該方法傳送將要寫入音頻數(shù)據(jù)的內(nèi)存區(qū)地址到進(jìn)程。因此,進(jìn)程不會(huì)在游戲服務(wù)器音頻卡的緩存區(qū)儲(chǔ)存音頻數(shù)據(jù),而是在對(duì)應(yīng)實(shí)際音頻卡緩存區(qū)的虛擬緩存區(qū)中儲(chǔ)存音頻數(shù)據(jù)。
[0144]一旦應(yīng)用程序?qū)⑺幸纛l數(shù)據(jù)寫入到虛擬緩存區(qū)內(nèi),實(shí)施對(duì)Release Buffer函數(shù)的調(diào)用來指示其已經(jīng)完成音頻數(shù)據(jù)寫入和寫入多少數(shù)據(jù)。代碼段再次攔截該調(diào)用,從而能夠知道所有音頻數(shù)據(jù)在什么時(shí)候?qū)懭氲教摂M的緩存區(qū)并且寫入了多少音頻數(shù)據(jù)。
[0145]此外,由于涉及通過音頻卡控制應(yīng)用程序的問題,代碼段將相同大小的只包含靜音的緩存區(qū)發(fā)送到音頻卡。因此,代碼段確定音頻卡持續(xù)正確地控制應(yīng)用程序。
[0146]平行于上面的描述,代碼段產(chǎn)生模擬游戲服務(wù)器音頻卡的行為的執(zhí)行線程。著重指出,該執(zhí)行線程只是包含在相同代碼段中的函數(shù)。代碼段同步或者異步地暫停執(zhí)行線程約數(shù)毫秒。暫停后,執(zhí)行線程從進(jìn)程讀取儲(chǔ)存在虛擬緩存區(qū)的音頻數(shù)據(jù),對(duì)該音頻數(shù)據(jù)處理并發(fā)送到移動(dòng)終端以重現(xiàn)。
[0147]對(duì)音頻數(shù)據(jù)的處理可以包括混合不同的音頻數(shù)據(jù)(例如,在執(zhí)行游戲時(shí)聽得到的背景音樂以及用戶在游戲中介入(例如射擊、汽車引擎、刀劍等)所產(chǎn)生的聽得到的聲音),并且可以將其轉(zhuǎn)換為合適的音頻格式,比如mp3(根據(jù)MPEG-1音頻層III標(biāo)準(zhǔn))。一旦音頻數(shù)據(jù)格式正確,代碼段經(jīng)由任意的通信網(wǎng)絡(luò)(例如互聯(lián)網(wǎng))將其發(fā)送到移動(dòng)終端,從而在用戶享受游戲的時(shí)候進(jìn)行音頻重現(xiàn)。
[0148]在本實(shí)施例中,描述了游戲?qū)υL問音頻卡的請(qǐng)求。實(shí)際上,可以在游戲服務(wù)器上執(zhí)行多個(gè)游戲和/或一個(gè)且相同游戲的多個(gè)實(shí)例,因此它們中的每一個(gè)需要包含插入的代碼段用于執(zhí)行已描述的方法。
[0149]如果游戲要虛擬的硬件資源是游戲服務(wù)器視頻卡,并且基于游戲的主進(jìn)程即將在休眠狀態(tài)中啟動(dòng),并且其中的代碼段已經(jīng)插入到進(jìn)程中,那么用于虛擬視頻卡的方法如下描述。
[0150]在其它硬件資源的情況下,在恢復(fù)執(zhí)行進(jìn)程之前,插入的代碼段重定向必要的八?I函數(shù),在該情況中例如是011*6。!: X八?I的函數(shù)3110? 1111(10?或者06511:6 06^1000接著,該方法的主要目的在于,使代碼段以透明的方式接管在視頻卡和屬于應(yīng)用程序的進(jìn)程之間產(chǎn)生的數(shù)據(jù)流的管理。
[0151]如上所述,這些八?I在動(dòng)態(tài)鏈接庫中實(shí)現(xiàn)(在本實(shí)施例中,操作系統(tǒng)為1111(1(^8家族的一員,這些庫為多個(gè)01)。因此,代碼段利用1x^(1 “匕犯'7函數(shù)加載庫或者加載包含待重定向的函數(shù)的庫,例如是11861^32.(111庫中的311(頂1111(10?函數(shù)。一旦加載,并且基于儲(chǔ)存了這些函數(shù)的初始內(nèi)存地址,在操作系統(tǒng)已經(jīng)用仙I函數(shù)的函數(shù)指針填充索引地址表(1八10后,代碼段利用八II'函數(shù)修改那些能令人感興趣用于虛擬視頻卡的函數(shù)的指針。因此,用儲(chǔ)存了包含在代碼段中的相應(yīng)函數(shù)的初始內(nèi)存地址代替儲(chǔ)存了這些仙I函數(shù)的初始內(nèi)存地址。可選地,如果需要,還可以用特定的代碼來修改I八丁。
[0152]另一方面,為了重定向(1)1類型接口的服務(wù),比如I30 06^1(369,需要修改接口的指針表來代替相關(guān)的方法。用特定的代碼對(duì)用于¢:01類型接口方法的方法指針表進(jìn)行修改。例如,?1*6861^與I 01^6(^ 30 06^1069接口的方法表的位置18對(duì)應(yīng),并且必須對(duì)其修改,使其指向包含在插入的代碼段中的函數(shù)。同時(shí),該位置的原始內(nèi)容儲(chǔ)存在變量中,以備需要從代碼段調(diào)用原方法。對(duì)¢:01類型接口的指針表的修改只有在該類型的對(duì)象第一次創(chuàng)建的時(shí)候需要修改。當(dāng)攔截結(jié)束,即是當(dāng)所有必須用于實(shí)施資源虛擬化的八?I的所有函數(shù)已重定向時(shí),代碼段負(fù)責(zé)恢復(fù)執(zhí)行應(yīng)用程序的進(jìn)程。
[0153]當(dāng)進(jìn)程利用011*6(^1: X八?I的06社6 06^1(36函數(shù)請(qǐng)求將要繪制示出圖形的窗口或者請(qǐng)求創(chuàng)建I30 06^1069類型的接口時(shí),對(duì)這些調(diào)用進(jìn)行攔截,從而對(duì)繪圖環(huán)境(00進(jìn)行捕獲或者虛擬(在這種情況中可以用原始的IX:或者虛擬的IX:來完成來提供)。IX:可以定義為內(nèi)存區(qū),其中視頻卡將會(huì)一幀接一幀地儲(chǔ)存產(chǎn)生的圖像到該內(nèi)存區(qū)中,并且在評(píng)化如舊系統(tǒng)中一直與一窗口關(guān)聯(lián)。因此,對(duì)于游戲服務(wù)器視頻卡的虛擬化,必須利用86七IX:函數(shù)來訪問該內(nèi)存區(qū)。對(duì)IX:的訪問是互斥的,即是,如果視頻卡正訪問該內(nèi)存區(qū),不能有任何進(jìn)程的線程去訪問它。
[0154]一旦應(yīng)用程序已經(jīng)創(chuàng)建I 011*6(^1: 30 06^1(369接口或者至少顯示了將會(huì)顯現(xiàn)圖形的窗口,則開始發(fā)送必要的數(shù)據(jù)到視頻卡,從而開始處理該信息并且創(chuàng)建結(jié)果幀。這個(gè)過程不依賴于代碼段。
[0155]幾乎每隔一段時(shí)間,視頻虛擬化線程捕獲IX:的內(nèi)容。該過程可以用應(yīng)用程序采用同步的方式或者異步的方式來實(shí)施。
[0156]以同步的方式指的是,進(jìn)程通過喚起I 011*6(^1: 30 06^1(369接口的?1*686111:方法發(fā)出請(qǐng)求訪問視頻卡從而顯示所產(chǎn)生的幀,此時(shí)代碼段攔截該方法。在那個(gè)時(shí)候,執(zhí)行線程訪問0(:(在本情況中稱為811打610從而捕獲所產(chǎn)生的幀。隨后,如果需要的話,代碼段調(diào)用接口的原始?1~686社方法。該方法是同步發(fā)生的,因?yàn)榇嬖谟幸稽c(diǎn),在調(diào)用?1~686社方法時(shí),代碼段優(yōu)選地知道為了繪制幀而進(jìn)行的工作已經(jīng)在該點(diǎn)處結(jié)束。
[0157]異步的方式包括直接訪問窗口(在其中,視頻卡的輸出結(jié)果是產(chǎn)生幀)的%來訪問內(nèi)容。必須考慮到以互斥的方式來訪問該IX:。為此,執(zhí)行線程嘗試通過調(diào)查來獲取對(duì)該互斥的區(qū)域的訪問。在執(zhí)行時(shí),其訪問IX:內(nèi)存以捕獲所產(chǎn)生的幀的結(jié)果。該方法是異步進(jìn)行的,因?yàn)閹蹲降乃俣群蛶a(chǎn)生的速度不需要相同。
[0158]在任意的這兩種方法中,只要已經(jīng)捕獲DC內(nèi)容,即是幀,則開始處理該信息,并且可以基于利用合適的編碼比如H.264來進(jìn)行譯碼,并且可以通過互聯(lián)網(wǎng)發(fā)送該譯碼。
[0159]如果硬件資源為數(shù)據(jù)輸入元件,比如鼠標(biāo)或者鍵盤,具體的方法描述如下。不同于已經(jīng)從上面描述到此的內(nèi)容,該方法管理從數(shù)據(jù)輸入元件輸出到屬于應(yīng)用程序的進(jìn)程的數(shù)據(jù)流,即是,該方法尋求將來自享受游戲的用戶的指令(例如,通過觸摸屏或從移動(dòng)終端的鍵盤)發(fā)送到正執(zhí)行于游戲服務(wù)器上的游戲。
[0160]因此,基于代碼段已經(jīng)插入到進(jìn)程(即插入到游戲)的情況下,代碼段已重定向相關(guān)的服務(wù)并且產(chǎn)生虛擬的硬件資源(即是,已經(jīng)產(chǎn)生對(duì)數(shù)據(jù)輸入單元的緩存區(qū)進(jìn)行虛擬的緩存區(qū),以及對(duì)數(shù)據(jù)輸入單元的行為進(jìn)行模擬的執(zhí)行線程),代碼段(更具體地,對(duì)數(shù)據(jù)輸入單元的行為進(jìn)行模擬的執(zhí)行線程)從用戶的移動(dòng)終端接收數(shù)據(jù),必須將該數(shù)據(jù)發(fā)送到進(jìn)程以便對(duì)例如涉及音頻和視頻的數(shù)據(jù)進(jìn)行修改,然后發(fā)送到移動(dòng)終端。為此,代碼段根據(jù)從中接收數(shù)據(jù)的輸入單元,將接收的數(shù)據(jù)儲(chǔ)存在對(duì)應(yīng)的虛擬緩存區(qū)中(任一與虛擬的鍵盤對(duì)應(yīng)的緩存區(qū)或者與虛擬的鼠標(biāo)對(duì)應(yīng)的緩存區(qū))。
[0161]當(dāng)進(jìn)程發(fā)出對(duì)相應(yīng)服務(wù)的調(diào)用以從輸入元件(實(shí)際的鍵盤鼠標(biāo),即是與游戲服務(wù)器關(guān)聯(lián)的鍵盤鼠標(biāo))中獲取數(shù)據(jù),代碼段攔截該調(diào)用并且觸發(fā)包含在代碼段中的相應(yīng)服務(wù)的執(zhí)行,使得該服務(wù)讀取儲(chǔ)存在虛擬緩存區(qū)中的數(shù)據(jù)而不是讀取在實(shí)際輸入單元的緩存區(qū)中的數(shù)據(jù)。
[0162]考慮到本優(yōu)選實(shí)施例的操作系統(tǒng)是來自Windows家族中的一員,有必要考慮Windows消息。在此情況中,對(duì)消息隊(duì)列進(jìn)行模擬的執(zhí)行線程通過網(wǎng)絡(luò)(例如互聯(lián)網(wǎng))從遠(yuǎn)程系統(tǒng)(即是移動(dòng)終端)接收數(shù)據(jù)輸入(例如鍵盤或者鼠標(biāo))。該數(shù)據(jù)可以是用戶從移動(dòng)終端發(fā)送的指令和/或事件。因此,執(zhí)行線程在與應(yīng)用程序窗口關(guān)聯(lián)的消息隊(duì)列中為每個(gè)數(shù)據(jù)輸入(利用user 32.dll庫的Send Message和Post Message函數(shù))引入一消息。該消息隊(duì)列利用操作系統(tǒng)提供的消息排隊(duì)系統(tǒng)機(jī)制自動(dòng)地查詢應(yīng)用程序。此外,為了完成消息隊(duì)列的虛擬化,可能需要(利用user 32.dll庫的Set Window Long Ptr函數(shù))改變消息隊(duì)列的查詢和處理函數(shù),從而執(zhí)行代碼段的函數(shù),以代替執(zhí)行消息隊(duì)列的原始消息處理函數(shù)(也稱為窗口函數(shù)或方法,其是程序員對(duì)確定應(yīng)用程序響應(yīng)某一消息的行為而定義的函數(shù))。換句話說,與應(yīng)用程序?qū)?yīng)的窗口的窗口函數(shù)和方法被攔截。代碼段的函數(shù)可以:消除應(yīng)用程序窗口的原始函數(shù)不會(huì)處理的那些消息(即,不執(zhí)行任何動(dòng)作來響應(yīng)該消息),由此使應(yīng)用程序忽略所述消息,此后原函數(shù)實(shí)際上不會(huì)對(duì)它們進(jìn)行處理;或者,基于移動(dòng)終端發(fā)送的指令,為模擬虛擬硬件資源(鍵盤或鼠標(biāo))錄入數(shù)據(jù)行為,代碼段的執(zhí)行線程引入這些信息,同時(shí)這些消息不會(huì)從移動(dòng)終端用戶的角度去改變應(yīng)用程序行為(窗口已經(jīng)在實(shí)際的計(jì)算機(jī)系統(tǒng)的屏幕上移動(dòng),但對(duì)于遠(yuǎn)程系統(tǒng)用戶,其位置是完全不相關(guān)的),因此應(yīng)用程序響應(yīng)這些消息,由此從代碼段的函數(shù)調(diào)用原始的消息處理函數(shù)。
[0163]最后,使進(jìn)程在其中為訪問發(fā)出請(qǐng)求的硬件資源是存儲(chǔ)單元比如硬盤驅(qū)動(dòng)器的時(shí)候,方法描述如下。在此情況中,假設(shè)代碼段已經(jīng)插入到進(jìn)程中。
[0164]在恢復(fù)執(zhí)行進(jìn)程之前(應(yīng)注意到在本優(yōu)選實(shí)施例中的進(jìn)程在休眠狀態(tài)中啟動(dòng)),插入的代碼段重定向所有必需的的API函數(shù),例如Create File和Create Directory。主要目的是為了使代碼段獲得對(duì)進(jìn)程和硬盤驅(qū)動(dòng)器之間的數(shù)據(jù)流的控制。
[0165]正如所討論的其余硬件資源,因?yàn)檫@些API是以動(dòng)態(tài)鏈接庫的形式實(shí)施,代碼段必須利用Load Library函數(shù)將它們加載到內(nèi)存中。因此,Load Library加載包含待重定向的函數(shù)的庫,例如kernel 32.dll庫的Create File和Create Directory。然后操作系統(tǒng)用儲(chǔ)存每個(gè)API函數(shù)的初始內(nèi)存地址填充IAT。利用Redirect I AT函數(shù)修改必要的指針,使該指針指向包含在代碼段中的對(duì)應(yīng)函數(shù)。當(dāng)代碼段完成與進(jìn)程和硬盤驅(qū)動(dòng)器之間的數(shù)據(jù)流管理有關(guān)的函數(shù)的重定向時(shí),代碼段本身負(fù)責(zé)恢復(fù)對(duì)屬于在休眠狀態(tài)中啟動(dòng)的應(yīng)用程序的進(jìn)程的執(zhí)行。
[0166]當(dāng)進(jìn)程想要利用CreateFile函數(shù)創(chuàng)建和/或打開文件時(shí),代碼段攔截該請(qǐng)求并且執(zhí)行相應(yīng)的包含在代碼段中的函數(shù)?;跀r截,該函數(shù)驗(yàn)證將要由進(jìn)程打開的文件是否是用于游戲回合的文件或者是任意的其它文件。如果它是用于游戲回合的文件,有需要的話,該函數(shù)利用任意類型的算法修改要?jiǎng)?chuàng)建和/或打開的文件路徑。一旦修改了路徑,用新創(chuàng)建的路徑執(zhí)行原始的CreateFile函數(shù),然而可能還執(zhí)行包含在代碼段中的相應(yīng)的函數(shù)。利用Create Directory函數(shù)創(chuàng)建目錄的方法等同于已描述的對(duì)應(yīng)Create File函數(shù)的方法。
[0167]明顯地,在本優(yōu)選實(shí)施例中,已分別描述每個(gè)硬件資源的虛擬化。如果一個(gè)和相同的代碼段能夠虛擬多個(gè)硬件資源,方法的第一個(gè)步驟,例如,在內(nèi)存中加載不同的動(dòng)態(tài)鏈接庫的步驟或者對(duì)服務(wù)替換指針的步驟可以是通用的,即是,能夠同時(shí)將所有包含API的動(dòng)態(tài)鏈接庫加載到內(nèi)存中,該動(dòng)態(tài)鏈接庫帶有代碼段能夠進(jìn)行虛擬的所有硬件資源的相關(guān)服務(wù),并且可以替換所有待重定向的服務(wù)的指針,使得代碼段可以虛擬所有能夠進(jìn)行虛擬化的硬件資源。
[0168]盡管已經(jīng)描述并描繪了本發(fā)明的特定實(shí)施例,但非常明顯的是,本領(lǐng)域技術(shù)人員可以進(jìn)行變型和修改,或者將細(xì)節(jié)替換為其他技術(shù)上等同的細(xì)節(jié),都不會(huì)超出權(quán)利要求保護(hù)的范圍。
[0169]雖然文中參考附圖描述的實(shí)施例包括計(jì)算機(jī)系統(tǒng)以及在計(jì)算機(jī)系統(tǒng)中執(zhí)行的進(jìn)程,但本發(fā)明還覆蓋計(jì)算機(jī)程序,更具體地,適于將本發(fā)明用于實(shí)踐的載體媒體的計(jì)算機(jī)程序。計(jì)算機(jī)程序可以是源代碼、目標(biāo)代碼或者介于源代碼和目標(biāo)代碼之間的中間代碼的形式,如部分編譯形式,或者適于實(shí)現(xiàn)本發(fā)明進(jìn)程的其他形式。該載體媒體可以是任何實(shí)體或者可以執(zhí)行該方案的設(shè)備。
[0170]例如,載體媒體可以包括存儲(chǔ)介質(zhì),如R0M,例如⑶ROM或者半導(dǎo)體R0M,或者磁記錄介質(zhì),例如軟盤或硬盤。此外,載體媒體還可以是可傳送載體媒體,如可以利用無線電或其他方式通過電線或光纖進(jìn)行傳輸?shù)碾娀蛘吖庑盘?hào)。
[0171]當(dāng)計(jì)算機(jī)程序包含在可直接通過電纜或其他工具或裝置傳播的信號(hào)中時(shí),該載體媒體可以通過所述電纜或其他設(shè)備或裝置形成。
[0172]或者,載體媒體可以為內(nèi)嵌計(jì)算機(jī)程序的集成電路,所述集成電路適于執(zhí)行或者用于執(zhí)行相關(guān)進(jìn)程。
【權(quán)利要求】
1.一種用于虛擬化與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的硬件資源的方法,利用適合于插入到屬于執(zhí)行在操作系統(tǒng)上的應(yīng)用的進(jìn)程內(nèi)的可執(zhí)行代碼段,該操作系統(tǒng)包括至少一個(gè)執(zhí)行在計(jì)算機(jī)系統(tǒng)上的應(yīng)用程序編程接口,所述方法包括: -對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)的調(diào)用進(jìn)行攔截; -基于對(duì)由進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)的調(diào)用進(jìn)行攔截,對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理。
2.根據(jù)權(quán)利要求1所述的方法,包括: -使與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)重定向到對(duì)應(yīng)的包含在代碼段中的服務(wù)。
3.根據(jù)權(quán)利要求2所述的方法,其中應(yīng)用程序編程接口服務(wù)是函數(shù),并且其中使與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)重定向到對(duì)應(yīng)的包含在代碼段中的服務(wù),包括: 圖將動(dòng)態(tài)鏈接庫加載到內(nèi)存中,該動(dòng)態(tài)鏈接庫包含待重定向的應(yīng)用程序接口函數(shù); 圖在包含在加載的動(dòng)態(tài)鏈接庫中的應(yīng)用程序接口函數(shù)的函數(shù)指針表中,用儲(chǔ)存有包含在代碼段中的對(duì)應(yīng)函數(shù)的初始內(nèi)存地址代替儲(chǔ)存有待重定向的應(yīng)用程序編程接口函數(shù)的初始內(nèi)存地址。
4.根據(jù)權(quán)利要求3所述的方法,其中使與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)重定向到對(duì)應(yīng)的包含在代碼段中的服務(wù),包括: 圖將已儲(chǔ)存有待重定向的應(yīng)用程序編程接口函數(shù)的初始內(nèi)存地址儲(chǔ)存在第一變量中。
5.根據(jù)權(quán)利要求2至4中任一項(xiàng)所述的方法,其中應(yīng)用程序編程接口服務(wù)是對(duì)象方法,并且其中使與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)重定向到對(duì)應(yīng)的包含在代碼段中的服務(wù),包括: 圖將動(dòng)態(tài)鏈接庫加載到內(nèi)存中,該動(dòng)態(tài)鏈接庫包含待重定向的對(duì)象方法; 圖驗(yàn)證是否第一次創(chuàng)建與重定向的方法關(guān)聯(lián)的對(duì)象; 圖如果驗(yàn)證得出肯定結(jié)果, 〇在包含在加載的動(dòng)態(tài)鏈接庫中的對(duì)象方法的方法指針表中,用儲(chǔ)存有包含在代碼段中的對(duì)應(yīng)方法的初始內(nèi)存地址代替儲(chǔ)存有待重定向的對(duì)象方法的初始內(nèi)存地址。
6.根據(jù)權(quán)利要求5所述的方法,其中使與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)重定向到對(duì)應(yīng)的包含在代碼段中的服務(wù),包括: 圖將已儲(chǔ)存有待重定向的目標(biāo)方法的初始內(nèi)存地址儲(chǔ)存在第二變量中。
7.根據(jù)權(quán)利要求2至6中任一項(xiàng)所述的方法,其中對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)的調(diào)用進(jìn)行攔截,包括: 圖對(duì)從進(jìn)程向包含在代碼段的服務(wù)的調(diào)用進(jìn)行接收,該代碼段對(duì)應(yīng)與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)。
8.根據(jù)權(quán)利要求1至7中任一項(xiàng)所述的方法,其中屬于應(yīng)用程序的進(jìn)程在休眠狀態(tài)中啟動(dòng),并且該方法包括: 圖恢復(fù)執(zhí)行屬于在休眠狀態(tài)中的應(yīng)用程序的進(jìn)程。
9.根據(jù)權(quán)利要求1至8中任一項(xiàng)所述的方法,其中對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理,包括: 圖驗(yàn)證是否已經(jīng)生成與硬件資源對(duì)應(yīng)的虛擬硬件資源; I如果驗(yàn)證得出否定結(jié)果,則生成虛擬硬件資源。
10.根據(jù)權(quán)利要求9所述的方法,其中生成虛擬硬件資源包括: 〇生成對(duì)關(guān)聯(lián)硬件資源的緩存區(qū)進(jìn)行虛擬的緩存區(qū)。
11.根據(jù)權(quán)利要求9或10所述的方法,其中生成虛擬硬件資源包括: 〇生成模擬硬件資源的行為的執(zhí)行線程。
12.根據(jù)權(quán)利要求10或11所述的方法,其中對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理,包括: 圖在虛擬緩存區(qū)中儲(chǔ)存由進(jìn)程發(fā)送到硬件資源的數(shù)據(jù)。
13.根據(jù)權(quán)利要求12所述的方法,其中對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理,包括: 圖暫停所生成的模擬硬件資源行為的執(zhí)行線程并持續(xù)一段預(yù)設(shè)的時(shí)間; 圖獲取儲(chǔ)存在虛擬緩存區(qū)中的由進(jìn)程先前發(fā)送到硬件資源的數(shù)據(jù); 圖處理獲取的數(shù)據(jù)。
14.根據(jù)權(quán)利要求13所述的方法,其中對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理,包括: 圖發(fā)送處理的數(shù)據(jù)到第一遠(yuǎn)程計(jì)算機(jī)系統(tǒng)。
15.根據(jù)權(quán)利要求9所述的方法,包括: -對(duì)從虛擬硬件資源到屬于應(yīng)用程序的進(jìn)程所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理。
16.根據(jù)權(quán)利要求10至14中任一項(xiàng)所述的方法,包括: -對(duì)從虛擬硬件資源到屬于應(yīng)用程序的進(jìn)程所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理,包括: 圖從第二遠(yuǎn)程計(jì)算機(jī)系統(tǒng)接收數(shù)據(jù); 圖處理接收的數(shù)據(jù); 圖在虛擬緩存區(qū)中儲(chǔ)存處理的數(shù)據(jù)。
17.根據(jù)權(quán)利要求16所述的方法,其中對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)的調(diào)用進(jìn)行攔截,包括: 圖對(duì)由屬于應(yīng)用程序的進(jìn)程向與從硬件資源到進(jìn)程所產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)的調(diào)用進(jìn)行攔截; 并且其中對(duì)從虛擬硬件資源到屬于應(yīng)用程序的進(jìn)程所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理,包括: 圖對(duì)儲(chǔ)存在虛擬緩存區(qū)的數(shù)據(jù)進(jìn)行回收; 圖發(fā)送回收的數(shù)據(jù)到進(jìn)程。
18.根據(jù)權(quán)利要求17所述的方法,其中對(duì)由進(jìn)程向與從硬件資源到進(jìn)程所產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)的調(diào)用進(jìn)行攔截,包括: 圖對(duì)進(jìn)程向包含在代碼段的服務(wù)的調(diào)用進(jìn)行接收,該代碼段對(duì)應(yīng)與產(chǎn)生自硬件資源到進(jìn)程的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)。
19.根據(jù)權(quán)利要求17或18所述的方法,其中對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理,包括: 圖對(duì)硬件資源到進(jìn)程所產(chǎn)生的數(shù)據(jù)流進(jìn)行管理,包括: 〇驗(yàn)證是否在緩存區(qū)中存在來自硬件資源的數(shù)據(jù); 〇如果驗(yàn)證得出肯定結(jié)果,消除該數(shù)據(jù)。
20.一種執(zhí)行代碼段,包括根據(jù)權(quán)利要求1至19中任一項(xiàng)所述的用于虛擬化與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的硬件資源的方法的執(zhí)行指令,該代碼段適合于插入到屬于執(zhí)行在操作系統(tǒng)時(shí)的應(yīng)用程序的進(jìn)程內(nèi),該操作系統(tǒng)包括至少一個(gè)執(zhí)行在計(jì)算機(jī)系統(tǒng)上的應(yīng)用程序編程接口(八?1)。
21.根據(jù)權(quán)利要求20所述的執(zhí)行代碼段儲(chǔ)存在存儲(chǔ)媒介中。
22.根據(jù)權(quán)利要求20所述的執(zhí)行代碼段是由載波傳送。
23.一種用于虛擬化與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián)的硬件資源的系統(tǒng),在該計(jì)算機(jī)系統(tǒng)上執(zhí)行包含至少一個(gè)應(yīng)用程序編程接口的操作系統(tǒng),該操作系統(tǒng)執(zhí)行包含進(jìn)程的應(yīng)用程序,所述系統(tǒng)包括: -對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)的調(diào)用進(jìn)行攔截的計(jì)算機(jī)設(shè)備; -基于對(duì)由進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)的調(diào)用進(jìn)行攔截,通過代碼段對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理的計(jì)算機(jī)設(shè)備。
24.一種在其中執(zhí)行操作系統(tǒng)的計(jì)算機(jī)系統(tǒng),該操作系統(tǒng)包括至少一個(gè)應(yīng)用程序編程接口,其中在該操作系統(tǒng)上執(zhí)行至少一個(gè)應(yīng)用程序,所述計(jì)算機(jī)系統(tǒng)包括存儲(chǔ)器和至少一個(gè)處理器,該存儲(chǔ)器儲(chǔ)存處理器執(zhí)行的指令,該指令與插入到屬于應(yīng)用程序的進(jìn)程的根據(jù)權(quán)利要求20至22中任一項(xiàng)所述的可執(zhí)行代碼段對(duì)應(yīng),該指令包含以下功能: -對(duì)由屬于應(yīng)用程序的進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)的調(diào)用進(jìn)行攔截; -基于對(duì)由進(jìn)程向與進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流的管理關(guān)聯(lián)的應(yīng)用程序編程接口服務(wù)的調(diào)用進(jìn)行攔截,通過代碼段對(duì)進(jìn)程和硬件資源之間產(chǎn)生的數(shù)據(jù)流進(jìn)行管理。
25.根據(jù)權(quán)利要求24所述的計(jì)算機(jī)系統(tǒng),其中至少兩個(gè)應(yīng)用程序在操作系統(tǒng)上執(zhí)行,并且其中存儲(chǔ)器儲(chǔ)存與每個(gè)執(zhí)行的應(yīng)用程序的代碼段對(duì)應(yīng)的處理器執(zhí)行的指令。
26.一種執(zhí)行在操作系統(tǒng)上的應(yīng)用程序,該操作系統(tǒng)執(zhí)行在計(jì)算機(jī)系統(tǒng)上,該應(yīng)用程序包括根據(jù)權(quán)利要求20至22中任一項(xiàng)所述的執(zhí)行代碼段。
【文檔編號(hào)】G06F9/455GK104380256SQ201380031256
【公開日】2015年2月25日 申請(qǐng)日期:2013年4月18日 優(yōu)先權(quán)日:2012年4月19日
【發(fā)明者】A·帕胡埃洛·岡薩雷斯, J·韋爾迪·穆拉 申請(qǐng)人:加泰羅尼亞理工大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
江都市| 徐州市| 溧水县| 潜山县| 台中县| 民县| 屯留县| 西贡区| 固原市| 长汀县| 木兰县| 冀州市| 本溪市| 云阳县| 宁南县| 鸡东县| 高安市| 高要市| 彝良县| 革吉县| 湘西| 扶风县| 钟祥市| 团风县| 吉安县| 本溪市| 长子县| 丁青县| 来安县| 天柱县| 牙克石市| 拉萨市| 昌吉市| 南丰县| 谷城县| 新郑市| 准格尔旗| 河间市| 兴安县| 绥滨县| 三门峡市|