本發(fā)明涉及一種基于虛擬化技術(shù)的透明計算方法及透明計算系統(tǒng)。
背景技術(shù):計算機技術(shù)的飛速發(fā)展,使人們對信息的獲取和處理需求也越來越強烈。但目前所有計算機設(shè)備在使用之前,必須安裝支持其硬件環(huán)境的操作系統(tǒng)、支撐軟件和各種應(yīng)用程序,否則將無法正常使用。而對于用戶而言,只關(guān)心怎樣通過終端設(shè)備獲得各種所需的服務(wù),而不希望再關(guān)注設(shè)備的操作系統(tǒng)、硬件配置和網(wǎng)絡(luò)連接方式等更底層的信息。因此當(dāng)設(shè)備的這些層次出現(xiàn)問題或故障時,大多數(shù)用戶并不知道如何處理,只能請專業(yè)人員進行維修,用戶的體驗大大降低,甚至造成了損失。此外,終端設(shè)備的硬件與操作系統(tǒng)相關(guān),應(yīng)用程序又與操作系統(tǒng)相關(guān)的特性,降低了設(shè)備的遷移能力,也使得用戶的選擇余地受到限制。例如當(dāng)使用某款A(yù)ndroid應(yīng)用程序時,無法將其移植到Windows操作系統(tǒng)上繼續(xù)運行;使用蘋果公司的移動終端設(shè)備iPhone時,也無法通過iPhone獲得Android應(yīng)用的服務(wù)。作為用戶,不僅要求在任何時間獲得信息和服務(wù),還希望能在任何地點,使用不同的終端設(shè)備,獲得一致的使用環(huán)境和軟件資源。例如用戶在公司使用PC機進行辦公,回到家需要使用另一臺PC機繼續(xù)完成剩下的工作,雖然兩臺PC硬件不相同,但用戶希望看到的使用環(huán)境(所有軟件資源及用戶數(shù)據(jù))是相同的。雖然用戶數(shù)據(jù)可以通過可移動存儲設(shè)備(如U盤等)或者云盤來實現(xiàn)遷移,并由用戶或?qū)I(yè)人員保證其安全和可靠性。但對于大部分應(yīng)用程序、系統(tǒng)軟件和操作系統(tǒng)來說,這兩種方法都很難實現(xiàn)在不同終端設(shè)備上的一致性遷移和存取。越來越嚴(yán)峻的安全性問題,也困擾著用戶。幾乎所有硬件平臺、操作系統(tǒng)都不同程度地受到計算機病毒和駭客入侵的威脅。這使得用戶不得不學(xué)習(xí)安全相關(guān)知識,維護終端設(shè)備的系統(tǒng)安全,而這些顯然偏離了用戶只希望通過它來獲得服務(wù)的初衷。與透明計算相關(guān)的專利文件較多,如公開號為CN101834888A的一種通過無線局域網(wǎng)遠(yuǎn)程啟動透明計算系統(tǒng)客戶端的方法【201010139744.3】,其主要步驟為先基于網(wǎng)絡(luò)搜索獲得的透明網(wǎng)絡(luò)排序,再進一步驗證、加載操作系統(tǒng),主要是通過無線局域網(wǎng)實施的一種透明計算方法,應(yīng)用范圍較窄。另外,CN102664958A的專利公開了一種透明計算系統(tǒng),包括透明客戶端、透明服務(wù)器端及透明網(wǎng)絡(luò),透明客戶端包括硬件模塊、BIOS、TNP客戶端模塊、操作系統(tǒng)及應(yīng)用程序,硬件模塊、BIOS、TNP客戶端模塊固設(shè)在透明客戶端上;透明客戶端從透明服務(wù)器下載和加載操作系統(tǒng)以實現(xiàn)透明計算。由于BIOS、TNP客戶端模塊等固設(shè)在透明客戶端,當(dāng)用戶更改使用的透明客戶端時,需要進行透明客戶端的安裝;同時,由于計算和存儲集中在透明服務(wù)器端,當(dāng)多個透明客戶端需要從透明服務(wù)器下載和加載操作系統(tǒng)時,透明服務(wù)器端負(fù)載變大,透明計算的效率將降低。因此,有必要設(shè)計一種基于虛擬化技術(shù)的透明計算方法及透明計算系統(tǒng)。
技術(shù)實現(xiàn)要素:本發(fā)明所要解決的技術(shù)問題是提供一種基于虛擬化技術(shù)的透明計算方法及透明計算系統(tǒng),該基于虛擬化技術(shù)的透明計算方法及透明計算系統(tǒng)能支持不同硬件配置的計算機,并且允許根據(jù)需要運行各種軟件環(huán)境。發(fā)明的技術(shù)解決方案如下:一種基于虛擬化技術(shù)的透明計算實現(xiàn)方法,該方法采用虛擬化技術(shù)屏蔽不同計算機硬件的物理差異,對上提供一個統(tǒng)一的虛擬硬件平臺,使得上層運行的實例操作系統(tǒng)可以無需修改即可運行在任何硬件平臺之上。透明計算方法在由透明客戶端TC-Client、透明主服務(wù)器TC-MServer和透明軟件資源服務(wù)器TC-RServer組成的基于廣域網(wǎng)的透明計算系統(tǒng)架構(gòu)上實現(xiàn);透明客戶端TC-Client、透明主服務(wù)器TC-MServer和透明軟件資源服務(wù)器TC-Rserver均接入到廣域網(wǎng)中;透明計算操作系統(tǒng)由透明客戶端(TC-Client)、透明主服務(wù)器(TC-MServer)與透明軟件資源服務(wù)器(TC-RServer)組成。透明客戶端TC-Client是由用戶直接使用的軟件,系統(tǒng)支持多個用戶使用各自的客戶端遠(yuǎn)程接入服務(wù)器獲得所需的服務(wù)。透明客戶端被設(shè)計成獨立于硬件平臺,它可以隨身攜帶,并在任何一臺有網(wǎng)絡(luò)環(huán)境的計算機上啟動;透明主服務(wù)器(TC-MServer)的功能是管理所有客戶端和軟件資源服務(wù)器,并協(xié)調(diào)雙方的通信。此外當(dāng)透明客戶端請求連接服務(wù)器時,透明主服務(wù)器將使用負(fù)載均衡算法,為其選擇一臺透明軟件資源服務(wù)器來提供服務(wù);透明軟件資源服務(wù)器(TC-RServer)的功能較簡單,主要負(fù)責(zé)管理所有存儲的軟件資源,為用戶提供所需的數(shù)據(jù)。透明客戶端定制在移動存儲設(shè)備上,用戶通過該移動存儲設(shè)備加載透明客戶端環(huán)境,實現(xiàn)對透明計算系統(tǒng)的訪問;透明客戶端是用戶使用透明計算系統(tǒng)的平臺,采用層次結(jié)構(gòu),包括基礎(chǔ)操作系統(tǒng)BaseOS、透明客戶端管理程序TC-ClientManager和虛擬化統(tǒng)一平臺VirtualizationUnifiedPlatform;基礎(chǔ)操作系統(tǒng)完成對本地不同硬件設(shè)備的驅(qū)動支持,透明客戶端管理程序完成對使用用戶的監(jiān)控、與透明主服務(wù)器通信以及用戶身份的驗證,而虛擬化統(tǒng)一平臺提供給用戶各種實例操作系統(tǒng)無差別的硬件接口;客戶端硬件設(shè)備上不存儲有關(guān)任何用戶的私有數(shù)據(jù)和軟件資源,也無需進行任何設(shè)置,用戶通過網(wǎng)絡(luò)遠(yuǎn)程加載軟件資源至本地來執(zhí)行;基礎(chǔ)操作系統(tǒng)是一個經(jīng)過修改和裁剪過的小型操作系統(tǒng),它直接與硬件平臺進行交互,實現(xiàn)對各種不同的硬件設(shè)備管理,并支持新硬件的動態(tài)添加和更新。透明客戶端管理程序是客戶端的管理和控制中心,它向下負(fù)責(zé)與基礎(chǔ)操作系統(tǒng)進行交互,并通過它控制硬件設(shè)備,對上管理與監(jiān)控虛擬化統(tǒng)一平臺的運行。透明客戶端管理程序還負(fù)責(zé)與透明主服務(wù)器通信,交換必要信息,完成對使用用戶的監(jiān)控、與透明主服務(wù)器通信以及用戶身份的驗證。虛擬化統(tǒng)一平臺主要通過虛擬化技術(shù)來屏蔽不同硬件設(shè)備的物理差異,向上提供一個統(tǒng)一的虛擬硬件平臺。客戶端硬件設(shè)備上不存儲有關(guān)任何用戶的私有數(shù)據(jù)和軟件資源,也無需進行任何設(shè)置,用戶通過網(wǎng)絡(luò)遠(yuǎn)程加載軟件資源至本地來執(zhí)行。該平臺可以根據(jù)用戶需要運行不同的實例操作系統(tǒng),如Windows或Linux,這些實例操作系統(tǒng)本身存儲在透明軟件資源服務(wù)器內(nèi)。在每個實例操作系統(tǒng)內(nèi)部,還安裝有TcOS應(yīng)用程序,它負(fù)責(zé)給用戶提供系統(tǒng)切換等相關(guān)服務(wù)。本發(fā)明的透明客戶端與透明軟件資源服務(wù)器之間采用流塊式傳輸數(shù)據(jù)。透明客戶端在遠(yuǎn)程加載實例操作系統(tǒng)時,不將整個操作系統(tǒng)下載到本地運行,而是將透明軟件資源服務(wù)器存儲的數(shù)據(jù)劃分為大小相同的數(shù)據(jù)塊,透明客戶端僅下載所需部分的數(shù)據(jù)塊,所有數(shù)據(jù)塊以數(shù)據(jù)流的形式傳輸。對于多個透明客戶端,它們共用一份數(shù)據(jù)資源,而對數(shù)據(jù)的修改則保存在各自的本地緩存中。當(dāng)用戶啟動透明客戶端時,整個啟動步驟包括以下幾個步驟:步驟1):用戶啟動透明客戶端,配置或載入已有網(wǎng)絡(luò)設(shè)置,使得與透明主服務(wù)器和透明軟件資源服務(wù)器的網(wǎng)絡(luò)通信暢通,具體包括以下幾個步驟:步驟1.1):用戶啟動透明客戶端,透明客戶端管理程序首先發(fā)送DHCP請求包,申請網(wǎng)絡(luò)配置信息(包括IP地址等),如果成功獲得網(wǎng)絡(luò)配置信息(包括IP地址等),則轉(zhuǎn)步驟1.3),否則轉(zhuǎn)步驟1.2);步驟1.2):檢查本地透明客戶端是否存在網(wǎng)絡(luò)配置文件,如果已有配置文件,則檢測是否可用,若可用,則載入網(wǎng)絡(luò)配置文件完成網(wǎng)絡(luò)配置;若沒有,則手動設(shè)置網(wǎng)絡(luò)配置信息(包括IP地址等),并保存到BaseOS中指定的網(wǎng)絡(luò)配置文件,供下次繼續(xù)使用;步驟1.3):進一步檢測是否能連接到透明主服務(wù)器,若連接不成功,則轉(zhuǎn)入步驟1.2)重新配置,若成功,則轉(zhuǎn)入步驟1.4);步驟1.4):透明主服務(wù)器向用戶提供Web認(rèn)證網(wǎng)頁進行用戶名和密碼認(rèn)證。步驟2):用戶輸入用戶賬號與密碼,提交給透明主服務(wù)器進行驗證,若驗證通過,透明主服務(wù)器根據(jù)用戶權(quán)限,確認(rèn)可啟動的實例操作系統(tǒng)列表,并返回結(jié)果供用戶選擇需要啟動的實例操作系統(tǒng);具體的,用戶采用HTTP協(xié)議與透明主服務(wù)器進行通信,將用戶名、密碼、本透明客戶端的MAC地址和IP地址進行封裝,與透明主服務(wù)器中存儲的用戶信息進行比較驗證。步驟3):根據(jù)用戶提出的實例操作系統(tǒng)選項,透明主服務(wù)器將使用負(fù)載均衡策略,選擇一臺透明軟件資源服務(wù)器,將其連接信息封裝成Socket句柄反饋給該用戶所用的透明客戶端;具體包括:步驟3.1):對每臺軟件資源服務(wù)器,根據(jù)其Socket地址,采用哈希算法,計算其哈希值,與其對應(yīng)的連接信息記錄在主服務(wù)器中;步驟3.2):捕獲用戶提交的實例操作系統(tǒng)類型及Socket地址,采用相同哈希算法,計算其哈希值;步驟3.3):根據(jù)用戶的哈希值,在主服務(wù)器中順序查找,找到哈希值最相近的軟件資源服務(wù)器,將其對應(yīng)的連接信息取出;步驟3.4):將連接信息封裝成Socket句柄,反饋給用戶;步驟4):用戶所在的透明客戶端通過收到的Socket句柄與透明軟件資源服務(wù)器建立通信,從透明軟件資源服務(wù)器遠(yuǎn)程加載實例操作系統(tǒng)到本地執(zhí)行;具體包括:步驟4.1):捕獲用戶所選擇的實例操作系統(tǒng),下載該實例操作系統(tǒng)對應(yīng)的虛擬磁盤信息。步驟4.2):透明客戶端管理程序根據(jù)當(dāng)前物理配置創(chuàng)建虛擬機,分配CPU和內(nèi)存資源,同時掛載實例操作系統(tǒng)的虛擬磁盤信息,使該虛擬磁盤的分區(qū)表和磁盤信息與實例操作系統(tǒng)鏡像大小相同,即在虛擬化統(tǒng)一平臺中創(chuàng)建該實例操作系統(tǒng)與透明計算系統(tǒng)的磁盤I/O接口;步驟4.3):透明客戶端管理程序和虛擬化統(tǒng)一平臺捕獲所需加載實例操作系統(tǒng)的磁盤I/O請求,并將磁盤I/O請求轉(zhuǎn)換成虛擬化統(tǒng)一平臺中的虛擬磁盤文件的I/O請求隊列,順序處理;步驟4.4):虛擬化統(tǒng)一平臺根據(jù)每個I/O請求內(nèi)容,轉(zhuǎn)換成iSCSI數(shù)據(jù)包并發(fā)送到透明軟件資源服務(wù)器端;步驟4.5):透明軟件資源服務(wù)器捕獲iSCSI數(shù)據(jù)包,讀取iSCSI層協(xié)議內(nèi)容,并根據(jù)讀取的iSCSI層協(xié)議內(nèi)容判斷是讀/寫請求,如果是讀請求,則轉(zhuǎn)入步驟4.6);如果是寫請求,則轉(zhuǎn)入步驟4.7);步驟4.6):記錄數(shù)據(jù)包內(nèi)的LBA地址與扇區(qū)數(shù)量,找到實例操作系統(tǒng)鏡像,從中讀取相應(yīng)內(nèi)容,封裝成iSCSI反饋包發(fā)送給透明客戶端,轉(zhuǎn)入步驟4.8);步驟4.7):根據(jù)數(shù)據(jù)包內(nèi)LBA和數(shù)據(jù)內(nèi)容,打開增量文件,將待寫入的數(shù)據(jù)保存到增量文件中,并將LBA修改成0,數(shù)據(jù)內(nèi)容清除;轉(zhuǎn)入步驟4.9);步驟4.8):根據(jù)LBA和扇區(qū)數(shù)量,查找該用戶的增量文件,判斷是否存在需要讀取的數(shù)據(jù)內(nèi)容,若存在,則替換增量文件中的數(shù)據(jù)內(nèi)容,從而保持增量文件中的更新;步驟4.9):將讀取出的數(shù)據(jù)內(nèi)容流塊式加載到內(nèi)存并執(zhí)行,啟動并運行實例操作系統(tǒng)的各個功能或服務(wù)。步驟5):透明客戶端若檢測到當(dāng)前實例操作系統(tǒng)在本地存在快速啟動所保存的狀態(tài)數(shù)據(jù),則載入該數(shù)據(jù)實現(xiàn)快速啟動;在選擇了使用快速啟動選項時,透明客戶端管理程序根據(jù)選定的實例操作系統(tǒng),首先在指定位置檢測當(dāng)前虛擬機是否存在快速啟動所需的狀態(tài)數(shù)據(jù),若有,則檢查當(dāng)前硬件配置能否與該快速啟動數(shù)據(jù)匹配,若匹配,則利用該狀態(tài)數(shù)據(jù)恢復(fù)當(dāng)前實例操作系統(tǒng)的環(huán)境;若不匹配,則刪除該狀態(tài)數(shù)據(jù),從網(wǎng)絡(luò)正常啟動系統(tǒng)。步驟6):客戶端檢測本地計算機是否存在硬盤或其它存儲設(shè)備,若有則以磁盤形式掛載到用戶的操作系統(tǒng)內(nèi)。步驟7):實例操作系統(tǒng)啟動完成后,透明客戶端將保存當(dāng)前系統(tǒng)的狀態(tài)數(shù)據(jù),供下次快速啟動時使用。該方法還支持用戶根據(jù)需求運行不同的實例操作系統(tǒng),以及不同實例操作系統(tǒng)間的相互切換;切換實例操作系統(tǒng)時,原實例操作系統(tǒng)的一切狀態(tài)將會保存,并在切換回時被快速恢復(fù),整個過程無需透明客戶端的關(guān)機和重新啟動。切換實例操作系統(tǒng)的過程為:位于各實例操作系統(tǒng)內(nèi)部、負(fù)責(zé)給用戶提供系統(tǒng)切換服務(wù)的TcOS應(yīng)用程序?qū)⑴c透明客戶端管理程序建立SOCKET通信,發(fā)送切換指令,管理程序使用創(chuàng)建快照函數(shù)MainAPI()為當(dāng)前實例操作系統(tǒng)建立快照,然后根據(jù)待切換系統(tǒng)是否存在快照來選擇快速啟動該系統(tǒng)或者調(diào)用IProgressIConsole::powerUp()來正常啟動。該方法實現(xiàn)了快速啟動技術(shù),在實例操作系統(tǒng)啟動后保存當(dāng)前的狀態(tài)數(shù)據(jù),并在下次啟動實例操作系統(tǒng)時直接載入該數(shù)據(jù),使得系統(tǒng)啟動時間顯著縮短。有益效果:本發(fā)明的基于虛擬化技術(shù)的透明計算方法及透明計算系統(tǒng),利用虛擬化技術(shù),屏蔽透明計算系統(tǒng)中客戶端不同硬件平臺的物理差異,提供對不同硬件設(shè)備的廣泛支持,并滿足用戶移動性需求,為用戶提供跨終端設(shè)備、跨操作系統(tǒng)的應(yīng)用服務(wù)支持,而不用再關(guān)心計算機硬件設(shè)備與系統(tǒng)的管理。該方法在基于廣域網(wǎng)的透明計算系統(tǒng)中實現(xiàn),由透明計算系統(tǒng)中的客戶端(TC-Client)發(fā)起請求,通過管理客戶端及軟件資源服務(wù)器的透明主服務(wù)器(TC-MServer)確認(rèn)請求的合法性,并給出資源的連接,遠(yuǎn)程加載并運行存儲在透明軟件資源服務(wù)器(TC-RServer)中的實例操作系統(tǒng),獲得所需服務(wù),完成用戶的任務(wù)需求。與傳統(tǒng)的透明計算系統(tǒng)相比,能適應(yīng)各種不同的硬件平臺和操作系統(tǒng)平臺,在廣域網(wǎng)上啟動時間更快,管理開銷更小,安全性更高,實用性更強,具有較強的現(xiàn)實意義與使用價值。另外,用戶還能夠隨時隨地使用任何計算機設(shè)備接入該系統(tǒng),并且在系統(tǒng)運行過程中可在多個操作系統(tǒng)間進行自由切換并保證使用過程的安全性。本發(fā)明解決了用戶需要自己安裝和管理操作系統(tǒng)的問題,用戶只要選擇所需的操作系統(tǒng),即可從網(wǎng)絡(luò)遠(yuǎn)程加載到本地執(zhí)行。該實現(xiàn)方法具有可移動性,透明客戶端獨立于計算機硬件平臺,可以將其存儲在可移動存儲設(shè)備內(nèi),并在任何計算機上啟動。虛擬化技術(shù)的運用,使得不同硬件配置的計算機可以遠(yuǎn)程加載相同的實例操作系統(tǒng),而無需對其進行任何修改,并且允許多個實例操作系統(tǒng)相互切換。安全性更高,軟件資源存儲在服務(wù)器上,由系統(tǒng)統(tǒng)一管理和維護,且不允許對共用的實例操作系統(tǒng)數(shù)據(jù)進行修改,以防止被病毒或駭客篡改。附圖說明圖1是透明客戶端的結(jié)構(gòu)圖。圖2是透明客戶端啟動過程的步驟圖。圖3是實例操作系統(tǒng)鏡像加載過程圖。圖4是透明計算系統(tǒng)的總體框架圖。具體實施方式以下將結(jié)合附圖和具體實施例對本發(fā)明做進一步詳細(xì)說明:實施例1:如圖1所示,透明客戶端采用層次結(jié)構(gòu)實現(xiàn),從下至上分別為基礎(chǔ)操作系統(tǒng)BaseOS、透明客戶端管理程序TC-ClientManager和虛擬化統(tǒng)一平臺VirtualizationUnifiedPlatform。BaseOS是基于Linux內(nèi)核的一個小型定制操作系統(tǒng),其內(nèi)核版本為3.14,并在每次系統(tǒng)啟動時,將檢查內(nèi)核是否為最新,以保證對計算機硬件設(shè)備的驅(qū)動支持盡可能全面。為了保證透明客戶端上實例操作系統(tǒng)的正常運行,BaseOS還安裝了如busybox等常用軟件。TC-ClientManager由JAVA和BashShell腳本混合編寫而成,通過執(zhí)行Linux命令和調(diào)用API管理BaseOS和虛擬化統(tǒng)一平臺。TC-ClientManager在啟動階段將與透明主服務(wù)器建立SOCKET連接,以驗證用戶身份。虛擬化統(tǒng)一平臺是以免費開源的虛擬化軟件VirtualBox為基礎(chǔ),其核心是Hypervisor,控制整個虛擬化系統(tǒng)的運行并且確保無論本地計算機的狀態(tài)怎樣,其內(nèi)部運行的多個GuestOS都不會發(fā)生沖突。VirtualizationMainAPI層位于Hypervisor的上層,提供給管理程序的調(diào)用接口。這些二次開發(fā)的API完成包括創(chuàng)建、刪除、配置多個虛擬機,監(jiān)控虛擬機的狀態(tài)等幾乎所有虛擬化系統(tǒng)的功能,同時TcOS-Client管理程序利用這些API以及虛擬化統(tǒng)一平臺中的VBoxManager來管理和控制整個虛擬化統(tǒng)一平臺的。每當(dāng)用戶選擇完所需的實例操作系統(tǒng)后,虛擬化統(tǒng)一平臺將根據(jù)當(dāng)前計算機的配置情況,創(chuàng)建一個虛擬機,并從透明軟件資源服務(wù)器上遠(yuǎn)程加載該實例操作系統(tǒng)至本地來運行??焖賳邮菫榱思涌鞂嵗僮飨到y(tǒng)啟動速度而發(fā)明的一種技術(shù),主要通過調(diào)用虛擬化統(tǒng)一平臺的MainAPI來實現(xiàn)。首先檢查IMachine::currentSnapshot是否為null來判斷當(dāng)前實例操作系統(tǒng)存不存在快照,若存在的話,還需檢查當(dāng)前計算機硬件環(huán)境是否與快照符合,例如CPU數(shù)量IMachine::CPUCount和其它屬性IMachine::getCPUProperty(CPUPropertyTypeproperty,booleanvalue),以及內(nèi)存大小IMachine::memorySize等等。若當(dāng)前計算機硬件環(huán)境與快照相符合,使用API命令voidIConsole::restoreSnapshot(ISnapshotsnapshot,IProgressprogress)來恢復(fù)快照,以快速啟動實例操作系統(tǒng)。每當(dāng)實例操作系統(tǒng)啟動完成后,使用voidIConsole::takeSnapshot(wstringname,wstringdescription,IProgressprogress)來創(chuàng)建新的快照,替換本地相應(yīng)的快照,供下次啟動時使用。系統(tǒng)切換功能使得用戶需要使用另一個實例操作系統(tǒng)時,可以打開現(xiàn)有實例操作系統(tǒng)內(nèi)的輔助軟件,選擇新的實例操作系統(tǒng)進行切換。此時TcOS應(yīng)用程序?qū)⑴c透明客戶端管理程序建立SOCKET通信,發(fā)送切換指令,管理程序使用虛擬化統(tǒng)一平臺的VirtualizationMainAPI為當(dāng)前實例操作系統(tǒng)建立快照,Hypervisor保存當(dāng)前所有從系統(tǒng)啟動(或從快照啟動)時對磁盤所做修改的數(shù)據(jù)、當(dāng)前虛擬機內(nèi)CPU寄存器、內(nèi)存等一切狀態(tài)和數(shù)據(jù)信息,然后根據(jù)待切換系統(tǒng)是否存在快照來選擇快速啟動該系統(tǒng)或者調(diào)用IProgressIConsole::powerUp()來正常啟動。從用戶啟動透明客戶端,到選擇需要的實例操作系統(tǒng)的這段過程中,透明客戶端在后臺需要進行一系列初始化和準(zhǔn)備工作,以使得用戶在后續(xù)能夠正常使用。系統(tǒng)啟動過程的大致步驟如圖2所示。1)網(wǎng)絡(luò)環(huán)境配置由于透明客戶端需要與透明主服務(wù)器通信以及遠(yuǎn)程加載實例操作系統(tǒng),因此首先必須保證網(wǎng)絡(luò)連通。透明客戶端管理程序首先通過動態(tài)主機配置協(xié)議DHCP申請網(wǎng)絡(luò)配置信息(包括IP地址等),如果成功獲得DHCP服務(wù)器分配的IP地址等信息,并且可以Ping通透明主服務(wù)器與透明軟件資源服務(wù)器,則網(wǎng)絡(luò)環(huán)境配置結(jié)束。否則需要手動配置網(wǎng)絡(luò)信息。每次手動配置完網(wǎng)絡(luò)信息后,管理程序?qū)⑴渲眯畔⒈4嬖诒镜?,供下次繼續(xù)使用。因此配置網(wǎng)絡(luò)之前,管理程序?qū)z測該文件是否存在,若存在且用戶希望使用該配置文件,則直接載入該文件來配置網(wǎng)絡(luò)。否則才真正要求用戶手動配置。網(wǎng)絡(luò)配置支持兩種方法,即有線網(wǎng)絡(luò)配置IP、網(wǎng)關(guān)等信息,或者使用Wifi網(wǎng)絡(luò)。這部分的實現(xiàn)代碼使用BashShell編寫。2)用戶驗證與反饋網(wǎng)絡(luò)訪問正常以后,透明客戶端管理程序要求用戶輸入賬號密碼,然后通過HTTP協(xié)議與透明主服務(wù)器通信進行驗證,若成功,則服務(wù)器將反饋可用操作系統(tǒng)列表及相關(guān)信息。驗證階段客戶端與服務(wù)器使用Json格式傳輸數(shù)據(jù),客戶端發(fā)送的信息包含有用戶名、密碼、本機MAC地址和IP地址。服務(wù)器使用負(fù)載均衡策略,為其分配透明軟件資源服務(wù)器,其內(nèi)容有操作系統(tǒng)名、描述、服務(wù)器IP地址、iSCSI地址。3)透明客戶端更新為了保證對新硬件的支持,透明客戶端需要定期檢查是否有新驅(qū)動可以安裝。此外客戶端自身也需要進行更新,以修復(fù)漏洞或者增加新功能。系統(tǒng)的更新分成兩部分,BaseOS和透明客戶端軟件的更新。當(dāng)用戶驗證成功后,客戶端再次向透明主服務(wù)器發(fā)送自身版本信息,若不是最新版本,則服務(wù)器反饋更新包的下載地址,客戶端下載該更新包,解壓并覆蓋已有文件。BaseOS更新則有兩個內(nèi)容,第一通過更新Linuxkernel,可直接使用yum-yupdatekernel命令實現(xiàn)。第二是加載內(nèi)核模塊來增加硬件支持,方法是使用insmod命令加載更新包內(nèi)的.o文件。4)掛載本機存儲設(shè)備用戶在使用透明客戶端時可能需要利用本地存儲設(shè)備,因此BaseOS還需要掛載本地磁盤。其流程是當(dāng)系統(tǒng)更新完畢后,檢查所有磁盤以及分區(qū)的狀態(tài),對每個分區(qū),根據(jù)它的類型使用相應(yīng)的命令進行掛載,目錄以編號命名。透明客戶端首先將下載該操作系統(tǒng)對應(yīng)的VDI文件,根據(jù)VDI文件中指定的最大容量及磁盤相關(guān)信息,TcOS-Client管理程序使用虛擬化統(tǒng)一平臺VirtualizationMainAPI中的voidIVirtualBox::createMachine()函數(shù)創(chuàng)建一個新虛擬機,為其分配CPU、內(nèi)存等資源,并將下載的VDI文件掛載到該虛擬機的硬盤。接著,透明客戶端采用流塊式傳輸方式從透明軟件資源服務(wù)器上加載實例操作系統(tǒng)數(shù)據(jù),其實現(xiàn)方式是使用iSCSI協(xié)議。該協(xié)議將實例操作系統(tǒng)數(shù)據(jù)分為大小相等的數(shù)據(jù)塊,客戶端向服務(wù)器發(fā)送邏輯塊首地址LBA(LogicalBlockAddress)和所需塊數(shù)量,服務(wù)器則反饋這些數(shù)據(jù)塊的內(nèi)容。為減少網(wǎng)絡(luò)傳輸流量,當(dāng)客戶端收到數(shù)據(jù)塊時,將保存在本地,并在請求數(shù)據(jù)塊時先檢查本地是否存在所需數(shù)據(jù)塊,若有則直接從本地讀取,否則才向服務(wù)器發(fā)送請求。其加載過程如圖3所示。1)捕獲I/O請求當(dāng)GuestOS需要讀寫磁盤時,會發(fā)出I/O請求,該請求可以通過注冊對IGuestFileIOEvent這個事件類的監(jiān)聽器而捕獲到。但該事件反映的是GuestOS內(nèi)部對某文件的讀寫,而不是磁盤的讀寫,因此不能使用。GuestOS對文件的讀寫請求隨后將轉(zhuǎn)換成IMachine類對磁盤的I/O請求,此時管理程序?qū)⑼ㄟ^監(jiān)聽IMediumChangedEvent進行捕獲。虛擬化統(tǒng)一平臺內(nèi)部維護著一個事件隊列,整個虛擬機系統(tǒng)的大部分變動或操作,都將以事件的形式存儲在事件隊列中,Hypervisor負(fù)責(zé)從該隊列中依次取出事件進行分發(fā)或者處理,類似于Windows的消息隊列機制。MainAPI提供了一種方法,即通過向事件隊列中注冊監(jiān)聽器,可以捕獲自己感興趣的消息,并對其進行處理,處理完畢后根據(jù)需要決定是否重新放回到隊列中。其具體流程為:獲得事件源EventSource的實例,并在它上面注冊監(jiān)聽器IEventListener。注冊完畢后循環(huán)檢測是否有事件到來,若有的話則進行處理,處理完后調(diào)用eventProcessed函數(shù)表示已處理,整個過程結(jié)束后需要使用unregisterListener解除監(jiān)聽器的注冊。2)轉(zhuǎn)換為iSCSI數(shù)據(jù)包得到IMediumChangedEvent的對象后,通過調(diào)用其成員變量獲得讀寫請求類型和LBA、數(shù)據(jù)內(nèi)容或讀扇區(qū)長度等信息,根據(jù)這些信息轉(zhuǎn)換成iSCSI的請求包,發(fā)送給透明軟件資源服務(wù)器。3)服務(wù)器捕獲收到的iSCSI數(shù)據(jù)包對于服務(wù)器收到的iSCSI數(shù)據(jù)包,采用Netfilte進行捕獲。Netfilter是Linux下的一套數(shù)據(jù)包過濾框架,它通過在內(nèi)核中放置一系列鉤子,允許內(nèi)核模塊在網(wǎng)絡(luò)協(xié)議棧中注冊相應(yīng)的回調(diào)函數(shù)進行處理。每當(dāng)數(shù)據(jù)包通過這些鉤子時,相應(yīng)的回調(diào)函數(shù)將會被調(diào)用,執(zhí)行某些操作。根據(jù)Netfilter框架并結(jié)合當(dāng)前需要可知,此時需要在NF_IP_LOCAL_IN注冊回調(diào)函數(shù)。捕獲到數(shù)據(jù)包后,讀取其iSCSI層協(xié)議內(nèi)容,最后獲得讀寫類型等相關(guān)信息,并根據(jù)讀寫類型的不同做相應(yīng)的處理。4)服務(wù)器捕獲發(fā)送的反饋iSCSI數(shù)據(jù)包(讀操作)如果上一步捕獲的數(shù)據(jù)包請求是讀操作的話,則記錄磁盤首地址LBA和扇區(qū)的數(shù)量后,放行該數(shù)據(jù)包。然后服務(wù)器的iSCSITarget程序?qū)⑹盏皆摂?shù)據(jù)包,從操作系統(tǒng)鏡像內(nèi)讀取相應(yīng)的內(nèi)容,封裝成iSCSI反饋包發(fā)送給客戶端。此時,通過在NF_IP_LOCAL_OUT也注冊一個回調(diào)函數(shù),對其進行捕獲。5)根據(jù)增量文件替換反饋數(shù)據(jù)包的內(nèi)容(讀操作)根據(jù)在步驟4)獲得的LBA和扇區(qū)數(shù)量,查找該用戶的增量文件中,是否存在需要讀取的數(shù)據(jù)內(nèi)容,若存在的話,對于步驟5)中捕獲的iSCSI反饋數(shù)據(jù)包,替換其中在增量文件中存在的那部分?jǐn)?shù)據(jù)內(nèi)容,因為增量文件中總是最新的數(shù)據(jù)塊。替換完成后,放行該數(shù)據(jù)包。若增量文件中不存在任何需要讀取的內(nèi)容,則直接放行。6)修改增量文件和iSCSI數(shù)據(jù)包(寫操作)如果步驟3)捕獲的數(shù)據(jù)包是寫操作的話,則根據(jù)數(shù)據(jù)包內(nèi)LBA和數(shù)據(jù)內(nèi)容,打開增量文件,將待寫入的數(shù)據(jù)保存到增量文件中。然后對于數(shù)據(jù)包本身,則將LBA修改成0,并將數(shù)據(jù)內(nèi)容清除,最后放行。此時iSCSITarget收到該數(shù)據(jù)包后,將不會真正對操作系統(tǒng)鏡像進行修改,但仍然會反饋寫入成功的數(shù)據(jù)包。根據(jù)本發(fā)明介紹的方法,實現(xiàn)了該透明計算系統(tǒng)并對其進行了I/O與網(wǎng)絡(luò)流量測試。測試所用的透明客戶端配置為CPUi5-3470,內(nèi)存4GB,硬盤500GB7200rpm,1000Mbps有線網(wǎng)卡。透明主服務(wù)器與透明軟件資源服務(wù)器配置均為兩顆E5-2620的CPU,內(nèi)存24GB,1TB10000rpm機械硬盤,1000Mbps有線網(wǎng)卡。所有測試機器均放置在1000Mbps局域網(wǎng)內(nèi)。測試所用的實例操作系統(tǒng)為Windows7Ultimatex86,整個數(shù)據(jù)文件的大小為60GB。表1為透明軟件資源服務(wù)器I/O的測試結(jié)果數(shù)據(jù),其中分別對無用戶請求、1個和3個用戶請求到來時,透明軟件資源服務(wù)器I/O的負(fù)載情況進行了測試,每次測試又分為實例操作系統(tǒng)啟動和穩(wěn)定運行兩個階段。表中各字段的含義如下:r/s,每秒發(fā)出的讀請求次數(shù);w/s,每秒寫請求次數(shù);rKB/s,每秒讀數(shù)據(jù)量(單位KB);wKB/s,每秒寫數(shù)據(jù)量(單位KB);avgrq-sz,平均每次I/O請求的數(shù)據(jù)量(單位為扇區(qū),即512字節(jié));avgqu-sz,平均等待處理的I/O請求隊列長度。表1透明軟件資源服務(wù)器I/O測試數(shù)據(jù)從表1可知,無論是1個還是3個用戶,服務(wù)器I/O數(shù)據(jù)量都很小,只有幾十KB/S,并且平均等待處理的I/O請求隊列幾乎都為0,表示所有I/O請求均基本沒有等待而馬上被處理。表2是使用1個和3個用戶連接透明軟件資源服務(wù)器,并分別對實例操作系統(tǒng)正常啟動、快速啟動和穩(wěn)定運行三個階段的網(wǎng)絡(luò)流量進行測試的結(jié)果數(shù)據(jù)表,其中每個階段還記錄了所花時間。表2透明軟件資源服務(wù)器網(wǎng)絡(luò)流量測試數(shù)據(jù)由表2可知,無論什么情況下,上行流量都很小,其原因是透明客戶端將請求的數(shù)據(jù)塊緩存在本地,使得透明客戶端需要寫入到透明軟件資源服務(wù)器的數(shù)據(jù)大為減少。下行流量方面,平均每個實例操作系統(tǒng)在正常啟動時需要下載大約700MB的數(shù)據(jù)量,帶寬大約為12-15MB/s,這對于1000Mbps網(wǎng)絡(luò)環(huán)境來說,表示一臺服務(wù)器可支持大約10個用戶同時正常啟動實例操作系統(tǒng)。但如果使用快速啟動的話,則只需8MB數(shù)據(jù)量以及700KB/s的帶寬,此時可支撐180以上的用戶同時啟動。穩(wěn)定運行時,我們對5分鐘的網(wǎng)絡(luò)流量進行了測試,結(jié)果顯示每個用戶所需帶寬大約為1MB/s,即支持同時訪問的用戶數(shù)在100個以上。