亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種基于虛擬磁盤映像邏輯分割的按需軟件分發(fā)方法

文檔序號(hào):6607754閱讀:179來(lái)源:國(guó)知局
專利名稱:一種基于虛擬磁盤映像邏輯分割的按需軟件分發(fā)方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)領(lǐng)域中的軟件分發(fā)方法,尤其指一種基于虛擬磁盤邏 輯分割的按需軟件分發(fā)方法。
背景技術(shù)
計(jì)算機(jī)軟硬件和網(wǎng)絡(luò)技術(shù)的高速發(fā)展,使得構(gòu)建大規(guī)模計(jì)算環(huán)境成為可能,并 已廣泛應(yīng)用于網(wǎng)格計(jì)算、電子商務(wù)、網(wǎng)絡(luò)教學(xué)等領(lǐng)域。大規(guī)模計(jì)算環(huán)境具有分布、異構(gòu)和 規(guī)模大的特性,使得系統(tǒng)管理變得非常困難。大規(guī)模計(jì)算環(huán)境中的軟件分發(fā)(Software Provision)就是一個(gè)突出的難點(diǎn)問題。在大規(guī)模計(jì)算環(huán)境中,需要為每個(gè)客戶端安裝和配 置多種軟件,并需要實(shí)時(shí)或定時(shí)更新。一般采用基于每用戶安裝的軟件分發(fā)方法,這種方法 是指逐一為每個(gè)用戶安裝操作系統(tǒng)以及多種應(yīng)用軟件,這種方法容易出錯(cuò)、難以自動(dòng)實(shí)施, 并需要巨大的人力物力開銷,已不適應(yīng)大規(guī)模計(jì)算環(huán)境的快速部署要求。近年來(lái),系統(tǒng)虛擬機(jī)(System Virtual Machine)因其透明性、隔離性、封裝性、可 管理性的特性,成為研究和應(yīng)用的熱點(diǎn)。而基于虛擬機(jī)實(shí)現(xiàn)快速高效的軟件分發(fā)方法成為 滿足快速部署要求的一種解決方案。典型的虛擬機(jī)系統(tǒng)主要由底層硬件平臺(tái)、虛擬機(jī)管理 器VMM (Virtual Machine Monitor)、客戶操作系統(tǒng)(Guest OS)以及運(yùn)行在其中的應(yīng)用組 成。VMM是虛擬機(jī)的關(guān)鍵組件,它為上層客戶操作系統(tǒng)提供虛擬化的硬件平臺(tái),并對(duì)客戶操 作系統(tǒng)的狀態(tài)具有完全封裝的能力。VMM通常由動(dòng)態(tài)二進(jìn)制翻譯器(DBT)、虛擬塊設(shè)備驅(qū)動(dòng) (VBD)、用戶交互(UIM)等模塊組成,用戶可通過(guò)用戶交互接口(UII)調(diào)用用戶交互模塊的 功能,以查詢和設(shè)置虛擬機(jī)的狀態(tài)以及控制虛擬機(jī)的運(yùn)行。基于虛擬機(jī)的軟件分發(fā)方法首先通過(guò)VMM將虛擬機(jī)中客戶操作系統(tǒng)的整個(gè)狀態(tài) 封裝到宿主機(jī)上的虛擬磁盤映像文件中,然后將虛擬磁盤映像文件傳輸?shù)接脩魴C(jī)器上,最 后用戶通過(guò)VMM直接運(yùn)行虛擬磁盤映像中的客戶操作系統(tǒng)和已安裝配置好的軟件,不必重 新安裝和配置軟件。這種分發(fā)方法大大降低了管理員和用戶的負(fù)擔(dān),并能加速分發(fā)過(guò)程。然而,目前這種基于虛擬機(jī)實(shí)現(xiàn)快速軟件分發(fā)的方法仍然存在如下局限性1)安 裝有操作系統(tǒng)和各種軟件的虛擬磁盤映像文件大小通常在幾個(gè)GB以上,直接傳輸整個(gè)虛 擬磁盤映像文件會(huì)導(dǎo)致較高的通信開銷;2)不同用戶有不同的軟件需求,給每個(gè)用戶分發(fā) 安裝有所有軟件的虛擬磁盤映像會(huì)帶來(lái)磁盤空間的浪費(fèi)和無(wú)謂的傳輸開銷;3)如果虛擬 磁盤中的軟件被更新,則不得不重新分發(fā)更新后的整個(gè)虛擬磁盤映像文件。斯坦福大學(xué)的C. Sapuntzakis等提出了基于COW(Copy-On-Write)機(jī)制的虛擬磁 盤映像物理分割方法來(lái)優(yōu)化虛擬機(jī)在低速網(wǎng)絡(luò)上的遷移。這種方法利用COW機(jī)制,將傳統(tǒng) 的單個(gè)大尺寸虛擬磁盤映像物理分割成多個(gè)較小尺寸的虛擬磁盤映像(cow磁盤),每個(gè) COW磁盤安裝有多種軟件,然后通過(guò)向用戶分發(fā)較小尺寸的COW磁盤以降低虛擬機(jī)在網(wǎng)絡(luò) 上遷移的開銷。對(duì)于被更新的軟件,只需向用戶分發(fā)安裝有新版本軟件的COW磁盤即可。這 種方法仍然存在如下不足^COW磁盤分發(fā)開銷為了避免生成較多的COW磁盤而導(dǎo)致較低的磁盤訪問性能,COW磁盤中通常安裝有較多種類的軟件從而生成較大尺寸的COW磁盤,進(jìn)而導(dǎo)致較高的COW 磁盤分發(fā)開銷。^COW磁盤映像管理由于軟件更新,不斷有新的COW磁盤生成。頻繁或長(zhǎng)期的軟 件更新會(huì)導(dǎo)致生成大量的COW磁盤映像,給虛擬磁盤映像的管理帶來(lái)不便。軟件更新軟件更新導(dǎo)致COW磁盤不斷地增多,從而使得虛擬磁盤的訪問性能也 不斷降低,因此難以支持持久(頻繁或長(zhǎng)期)的軟件更新。由于軟件更新而生成的大量老 版本COW磁盤在宿主機(jī)上占用的空間并未釋放,因此會(huì)造成磁盤空間的浪費(fèi)。

發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題在于在滿足用戶軟件使用種類和性能需求的前提下, 進(jìn)一步降低虛擬機(jī)環(huán)境下軟件部署的開銷,簡(jiǎn)化虛擬磁盤映像的管理和避免磁盤空間的浪 費(fèi),支持持久的軟件更新,滿足大規(guī)模虛擬機(jī)環(huán)境動(dòng)態(tài)構(gòu)建和快速部署的需求。本發(fā)明的技術(shù)方案為采用客戶/服務(wù)器的系統(tǒng)結(jié)構(gòu),服務(wù)器端存儲(chǔ)所有虛擬機(jī) 的虛擬磁盤映像,并通過(guò)分別記錄每種軟件安裝時(shí)占用的磁盤塊,將傳統(tǒng)的單個(gè)虛擬磁盤 映像在邏輯上分割成多個(gè)磁盤塊集合;然后服務(wù)器端的軟件分發(fā)服務(wù)程序和用戶端的客戶 程序根據(jù)用戶的軟件需求,通過(guò)客戶/服務(wù)器模式的交互按需地向用戶端分發(fā)軟件對(duì)應(yīng)的 磁盤塊集合,以降低軟件分發(fā)的開銷,加快軟件部署的速度。具體步驟為第一步,對(duì)虛擬機(jī)管理器VMM進(jìn)行功能擴(kuò)展,并將擴(kuò)展后的VMM部署到服務(wù)器端和 客戶端。1. 1在VMM的用戶交互模塊中擴(kuò)展對(duì)安裝到虛擬磁盤中的每種軟件進(jìn)行編號(hào)和命 名的模塊。對(duì)軟件進(jìn)行編號(hào)和命名的規(guī)則如下(1)軟件編號(hào)用于表示軟件安裝順序的整數(shù)編號(hào)。操作系統(tǒng)軟件是首先安裝的 軟件,VMM為其分配的默認(rèn)軟件編號(hào)為1 ;后續(xù)的編號(hào)按照安裝的順序依次由VMM分配給其 它軟件。(2)運(yùn)行態(tài)編號(hào)255 在虛擬機(jī)的非安裝軟件期間,VMM使用運(yùn)行態(tài)編號(hào)255。(3)當(dāng)前軟件編號(hào)VMM在虛擬機(jī)運(yùn)行過(guò)程中會(huì)維護(hù)一個(gè)當(dāng)前軟件編號(hào)。當(dāng)正在 安裝某種軟件時(shí),該軟件對(duì)應(yīng)的編號(hào)即為當(dāng)前軟件編號(hào);否則,當(dāng)前軟件編號(hào)為運(yùn)行態(tài)編號(hào) 255。當(dāng)前軟件編號(hào)需要變化時(shí),VMM可自動(dòng)分配或通過(guò)用戶交互接口手工設(shè)置當(dāng)前軟件編號(hào)。(4)待用軟件編號(hào)對(duì)于被卸載的軟件,其軟件編號(hào)成為待用軟件編號(hào)。VMM為新 安裝的軟件分配軟件編號(hào)時(shí),優(yōu)先從待用軟件編號(hào)中按從小到大的順序分配。(5)軟件別名除了軟件編號(hào)外,還可通過(guò)用戶交互接口為每種安裝的軟件設(shè)置 一個(gè)便于記憶的別名以便于對(duì)軟件進(jìn)行操作。對(duì)于被卸載的軟件,對(duì)應(yīng)的軟件別名會(huì)被置空。具體擴(kuò)展方法如下1. 1. 1在用戶交互模塊中增加軟件編號(hào)和別名管理子模塊,該子模塊對(duì)軟件編號(hào) 和別名進(jìn)行分配、設(shè)置、修改、刪除和查詢等操作。1. 1.2在用戶交互接口中增加軟件編號(hào)和別名管理命令,這些命令調(diào)用軟件編號(hào)
6和別名管理子模塊來(lái)實(shí)現(xiàn)對(duì)應(yīng)的軟件編號(hào)和別名管理功能。1. 1.3在用戶交互接口中增加軟件管理命令,這些命令用于設(shè)置軟件管理方式 (安裝/更新/卸載)以及每種模式下的相關(guān)參數(shù)。這些命令也會(huì)調(diào)用軟件編號(hào)和別名 管理子模塊的功能來(lái)執(zhí)行軟件編號(hào)和別名的自動(dòng)管理功能,包括軟件編號(hào)的自動(dòng)分配和設(shè) 置,以及軟件別名的置空等。1. 2在VMM的塊設(shè)備驅(qū)動(dòng)模塊中擴(kuò)展對(duì)軟件塊位圖SBB (Software Block Bitmap) 和全局塊分布位圖⑶B(Global block Distribution Bitmap)、用戶端緩存初始化功能、按 需取塊功能的支持。具體擴(kuò)展方法如下1. 2. 1在塊設(shè)備驅(qū)動(dòng)模塊中增加軟件塊位圖SBB讀寫子模塊。軟件塊位圖SBB是 宿主機(jī)上的一個(gè)文件,用于記錄虛擬磁盤上安裝的每種軟件占用的磁盤塊。其中每個(gè)字節(jié) 的每個(gè)位(bit)按順序?qū)?yīng)虛擬磁盤上的一個(gè)塊,0表示對(duì)應(yīng)的塊未被占用,1表示被占用。 在每種軟件安裝過(guò)程開始時(shí),塊設(shè)備驅(qū)動(dòng)模塊根據(jù)其軟件編號(hào),生成一個(gè)對(duì)應(yīng)的SBB ;軟件 塊位圖讀寫子模塊將軟件安裝過(guò)程中被寫的磁盤塊在SBB中對(duì)應(yīng)的位置位。1. 2. 2在塊設(shè)備驅(qū)動(dòng)模塊中增加全局塊分布位圖GDB讀寫子模塊。全局塊分布位 圖GDB是宿主機(jī)上的一個(gè)文件,用于記錄虛擬磁盤上的每個(gè)磁盤塊所屬軟件的軟件編號(hào)。 其中每個(gè)字節(jié)按照順序?qū)?yīng)虛擬磁盤上的一個(gè)塊,字節(jié)的值即是占用該塊的軟件對(duì)應(yīng)的軟 件編號(hào)。GDB在創(chuàng)建虛擬機(jī)的虛擬磁盤時(shí)生成。在軟件安裝過(guò)程中被寫的每個(gè)磁盤塊,全局 塊分布位圖讀寫子模塊將當(dāng)前軟件編號(hào)寫入GDB中被寫塊對(duì)應(yīng)的位置。1. 2. 3在塊設(shè)備驅(qū)動(dòng)模塊中增加用戶端緩存初始化子模塊。該子模塊在用戶端 虛擬機(jī)啟動(dòng)過(guò)程中通過(guò)用戶端的客戶程序scLclient從服務(wù)器端獲取可用軟件的信息, 初始化每種軟件在用戶端的緩存狀態(tài),派生工作虛擬磁盤WVD (Work Virtual Disk),詳見 3·5· Io1. 2. 4在塊設(shè)備驅(qū)動(dòng)模塊中增加按需取塊子模塊。虛擬機(jī)在用戶端運(yùn)行過(guò)程中, 當(dāng)虛擬機(jī)請(qǐng)求的塊未在本地緩存或已被更新,按需取塊子模塊向宿主機(jī)中運(yùn)行的客戶程 序scLclient發(fā)出取塊請(qǐng)求,sd_client再將取塊請(qǐng)求轉(zhuǎn)發(fā)給服務(wù)器端的服務(wù)程序sd_ server, sd_server從虛擬磁盤映像中讀取請(qǐng)求的塊,然后發(fā)送給sd_Client,sd_cIient最 后將接收到的塊交給按需取塊子模塊,以滿足虛擬機(jī)的讀請(qǐng)求。1. 2. 5在塊設(shè)備驅(qū)動(dòng)模塊中增加SHAl列表文件管理子模塊。SHAl (Secure Hash Algorithm)列表文件記錄每種軟件所占用的磁盤塊的160位SHAl哈希值,用于避免軟件分 發(fā)過(guò)程中重傳已經(jīng)在用戶端緩存的塊。該子模塊執(zhí)行創(chuàng)建、刪除、更新和查詢軟件的SHAl 列表文件的功能。第二步,服務(wù)器端對(duì)單個(gè)虛擬磁盤映像進(jìn)行邏輯分割。邏輯分割是指將軟件安裝 到單個(gè)虛擬磁盤映像中,并通過(guò)每種軟件對(duì)應(yīng)的軟件塊位圖文件SBB將單個(gè)虛擬磁盤從邏 輯上分成多個(gè)磁盤塊集合,每個(gè)磁盤塊集合中包含軟件占用的磁盤塊。具體步驟如下2. 1創(chuàng)建虛擬磁盤利用擴(kuò)展的虛擬機(jī)管理器創(chuàng)建虛擬機(jī)的單個(gè)虛擬磁盤映像 文件,并生成空的全局塊分布位圖GDB。虛擬磁盤映像文件的文件頭中包含全局塊位圖 GBB (Global Block Bitmap),每個(gè)磁盤塊在GBB中對(duì)應(yīng)一個(gè)位(bit),如果該塊被占用,則對(duì) 應(yīng)的位被置1。2. 2安裝客戶操作系統(tǒng)
(1)初始化用戶交互接口調(diào)用軟件管理命令設(shè)置軟件管理方式為軟件安裝,軟 件編號(hào)和別名管理子模塊初始化當(dāng)前軟件編號(hào)為1,設(shè)置默認(rèn)別名為os,創(chuàng)建客戶操作系 統(tǒng)的軟件塊位圖SBB。(2)安裝客戶操作系統(tǒng)在新創(chuàng)建的虛擬磁盤映像上啟動(dòng)虛擬機(jī),安裝客戶操作 系統(tǒng);安裝過(guò)程中,VMM的塊設(shè)備驅(qū)動(dòng)模塊每寫一個(gè)塊之后,首先將GBB中該塊對(duì)應(yīng)的位置 1,再調(diào)用SBB讀寫子模塊將SBB中該塊對(duì)應(yīng)的位置1,最后調(diào)用GDB讀寫子模塊將操作系統(tǒng) 的軟件編號(hào)1寫入全局塊分布位圖GDB中該塊對(duì)應(yīng)的位置。(3)操作系統(tǒng)安裝結(jié)束后,用戶交互接口調(diào)用軟件管理命令通知VMM客戶操作系 統(tǒng)安裝過(guò)程結(jié)束,軟件編號(hào)和別名管理子模塊切換當(dāng)前軟件編號(hào)至運(yùn)行態(tài)編號(hào)255。(4)重啟或關(guān)閉虛擬機(jī)。2. 3安裝、更新、卸載應(yīng)用軟件客戶操作系統(tǒng)安裝完之后再逐一安裝用戶需要的 軟件。每種軟件安裝過(guò)程中,通過(guò)用戶交互接口調(diào)用軟件管理命令設(shè)置軟件安裝的開始和 結(jié)束時(shí)間點(diǎn)。軟件編號(hào)根據(jù)軟件安裝的順序,由VMM的軟件編號(hào)和別名管理子模塊自動(dòng)遞 增和分配;軟件別名在軟件安裝開始之前通過(guò)用戶交互接口手動(dòng)設(shè)置。每種軟件的安裝包 含如下步驟(1)初始化用戶交互接口調(diào)用軟件管理命令設(shè)置軟 件管理方式為軟件安裝,軟 件編號(hào)和別名管理子模塊分配軟件編號(hào)并將該軟件編號(hào)作為當(dāng)前軟件編號(hào);調(diào)用軟件編號(hào) 和別名管理命令設(shè)置對(duì)應(yīng)的軟件別名;塊設(shè)備驅(qū)動(dòng)模塊創(chuàng)建該軟件對(duì)應(yīng)的SBB。(2)安裝軟件在虛擬機(jī)中啟動(dòng)軟件安裝程序,開始安裝軟件;安裝軟件過(guò)程中, 每寫一個(gè)塊,塊設(shè)備驅(qū)動(dòng)模塊首先將GBB中該塊對(duì)應(yīng)的位置1,再調(diào)用SBB讀寫子模塊將 SBB中該塊對(duì)應(yīng)的位置1,最后調(diào)用GDB讀寫子模塊將當(dāng)前軟件編號(hào)寫入GDB中該塊對(duì)應(yīng)的 位置。(3)結(jié)束軟件安裝結(jié)束后,用戶交互接口調(diào)用軟件管理命令通知VMM軟件安裝過(guò) 程結(jié)束,軟件編號(hào)和別名管理子模塊切換當(dāng)前軟件編號(hào)至運(yùn)行態(tài)編號(hào)255。軟件更新是虛擬機(jī)環(huán)境下一項(xiàng)常規(guī)的軟件管理任務(wù)。軟件更新分為全量更新和增 量更新兩種類型。全量更新是利用軟件完整的新版本對(duì)軟件進(jìn)行全面的更新;增量更新是 對(duì)已安裝的舊版本軟件進(jìn)行部分更新。軟件更新的具體步驟如下(1)初始化用戶交互接口調(diào)用軟件管理命令設(shè)置軟件管理方式為軟件更新,并 設(shè)置更新模式;調(diào)用軟件編號(hào)和別名管理命令設(shè)置被更新軟件的軟件別名、查詢軟件別名 對(duì)應(yīng)的軟件編號(hào),并將該軟件編號(hào)作為當(dāng)前軟件編號(hào)。若為全量更新模式,塊設(shè)備驅(qū)動(dòng)模塊 清空該軟件編號(hào)對(duì)應(yīng)的SBB。(2)更新軟件在虛擬機(jī)中啟動(dòng)軟件更新程序進(jìn)行軟件更新;軟件更新過(guò)程中,每 寫一個(gè)塊,塊設(shè)備驅(qū)動(dòng)模塊首先將GBB中該塊對(duì)應(yīng)的位置1,再調(diào)用SBB讀寫子模塊將SBB 中該塊對(duì)應(yīng)的位置1,最后調(diào)用 讀寫子模塊將當(dāng)前軟件編號(hào)寫入GDB中該塊對(duì)應(yīng)的位置。(3)結(jié)束軟件更新過(guò)程結(jié)束后,用戶交互接口調(diào)用軟件管理命令通知VMM軟件更 新過(guò)程結(jié)束,軟件編號(hào)和別名管理子模塊切換當(dāng)前軟件編號(hào)至運(yùn)行態(tài)編號(hào)255。卸載軟件的具體步驟如下(1)初始化用戶交互接口調(diào)用軟件管理命令設(shè)置軟件管理方式為軟件卸載,并調(diào)用軟件編號(hào)和別名管理命令設(shè)置要卸載軟件的軟件別名;軟件編號(hào)和別名管理子模塊查 詢軟件別名對(duì)應(yīng)的軟件編號(hào),并將該軟件編號(hào)作為當(dāng)前軟件編號(hào)。(2)卸載軟件在虛擬機(jī)中啟動(dòng)軟件卸載程序,開始卸載軟件。(3)結(jié)束軟件卸載過(guò)程結(jié)束后,用戶交互接口調(diào)用軟件管理命令通知VMM軟件卸 載過(guò)程結(jié)束,軟件編號(hào)和別名管理子模塊將對(duì)應(yīng)的軟件編號(hào)加入待用軟件編號(hào)集合,并置 空對(duì)應(yīng)的軟件別名,刪除被卸載軟件對(duì)應(yīng)的SBB,切換當(dāng)前軟件編號(hào)至運(yùn)行態(tài)編號(hào)255。2. 4生成軟件的SHAl列表文件在服務(wù)器端,除了生成每種軟件的SBB之外,還為 每種軟件生成一個(gè)SHAl列表文件。在軟件分發(fā)過(guò)程中,軟件對(duì)應(yīng)的SHAl列表文件也會(huì)部 分或全部緩存到用戶端,稱之為影子(Shadow)SHAl列表文件。SHAl列表文件包含如下內(nèi) 容(1)時(shí)標(biāo)軟件安裝的時(shí)間標(biāo)志。將用戶端的影子SHAl列表文件中的時(shí)標(biāo)和服務(wù) 器端對(duì)應(yīng)的的SHAl列表文件中的時(shí)標(biāo)進(jìn)行對(duì)比,判斷用戶端緩存的軟件是否是最新版本。(2)空標(biāo)志在服務(wù)器端,該標(biāo)志無(wú)效;在用戶端,表示對(duì)應(yīng)的軟件是否完全未緩存。(3)完整性標(biāo)志在服務(wù)器端,該標(biāo)志無(wú)效;在用戶端,該標(biāo)志用于表示軟件的最 新版本是否完全緩存到用戶端。(4)總塊數(shù)軟件占用的總塊數(shù)。(5)有效塊數(shù)在服務(wù)器端,等于總塊數(shù);在用戶端,是緩存的最新版本的塊數(shù);當(dāng) 用戶端的有效塊數(shù)和總塊數(shù)相等時(shí),將完整性標(biāo)志置1。(6)有效塊位圖在服務(wù)器端,該字段無(wú)效;在用戶端,位圖中被置的位,表明對(duì)應(yīng) 的塊是時(shí)標(biāo)所對(duì)應(yīng)版本的最新塊。(7)塊SHAl值序列記錄軟件所占用的每個(gè)塊的SHAl哈希值的序列。當(dāng)服務(wù)器端的某種軟件被更新,對(duì)應(yīng)的SHAl列表文件也需要重新生成。SHAl列表 文件的生成方法是(1) VMM的塊設(shè)備驅(qū)動(dòng)模塊中的SHAl列表文件管理子模塊創(chuàng)建空的SHAl列表文 件。(2)對(duì)于SBB中每個(gè)置位的塊,SHAl列表文件管理子模塊讀取虛擬磁盤中相應(yīng)的 塊并計(jì)算其SHAl值,然后將計(jì)算結(jié)果寫入SHAl列表文件中該塊對(duì)應(yīng)的位置。(3) SHAl列表文件管理子模塊設(shè)置SHAl列表文件中的時(shí)標(biāo)、總塊數(shù)和有效塊數(shù)字 段。第三步,按需進(jìn)行軟件分發(fā)。服務(wù)器端根據(jù)每種軟件的軟件塊位圖SBB,將用戶所 需軟件占用的磁盤塊傳輸?shù)接脩舳?,從而?shí)現(xiàn)軟件的按需分發(fā)。本發(fā)明開發(fā)的軟件分發(fā)服 務(wù)程序scLserver和客戶程序scLclient通過(guò)客戶/服務(wù)器模式的交互,協(xié)同完成軟件的 按需分發(fā)過(guò)程。scLserver運(yùn)行在服務(wù)器端,scLclient運(yùn)行在用戶端。具體分發(fā)步驟如 下3. 1用戶端的客戶程序scLclient將服務(wù)器端的全局塊分布位圖⑶B拷貝到用戶端。3. 2用戶端的scLclient查詢服務(wù)器端的可用軟件,服務(wù)器端的服務(wù)程序sd_ server返回可用軟件的軟件別名列表。
9
3. 3用戶端的scLclient向服務(wù)器端的scLserver提交用戶的軟件需求(即軟件 別名列表),同時(shí)scLclient將用戶端緩存的所請(qǐng)求軟件的影子SHAl列表文件中的時(shí)標(biāo)、空 標(biāo)志、完整性標(biāo)志發(fā)送給scLserver。3.4服務(wù)器端的8(1_%1^吐根據(jù)用戶所請(qǐng)求軟件的588,將用戶所請(qǐng)求軟件占用的 磁盤塊發(fā)送給用戶端的scLclient ;scLclient將接收到的磁盤塊保存到用戶端的影子虛 擬磁盤SVD (Shadow Virtual Disk)中,供用戶端虛擬機(jī)使用。影子虛擬磁盤是用戶端緩存 了服務(wù)器端虛擬磁盤中部分磁盤塊的虛擬磁盤映像。具體步驟如下3. 4. 1服務(wù)器端的scLserver定位用戶所請(qǐng)求軟件的SBB和SHAl列表文件,向用 戶端的scLclient發(fā)送用戶所請(qǐng)求軟件的SHAl列表文件中的的時(shí)標(biāo)、總塊數(shù)。3. 4. 2根據(jù)用戶端影子SHAl列表文件中的相關(guān)標(biāo)志,scLclient和服務(wù)器端的sd_ server通過(guò)完全推送模式或交互式推送模式將用戶所請(qǐng)求軟件占用的磁盤塊傳輸?shù)接脩?端。若scLclient發(fā)現(xiàn)用戶端的影子SHAl列表文件中的空標(biāo)志位置位,即請(qǐng)求的軟件 在用戶端完全未緩存,則scLserver和scLclient通過(guò)完全推送模式將軟件占用的磁盤塊 傳送到用戶端。完全推送模式是指scLserver除了將軟件占用的磁盤塊發(fā)送給scLclient 之外,sd_server和sd_client之間無(wú)其它交互動(dòng)作。具體步驟如下(1) sd_server和sd_client初始化進(jìn)入完全推送模式。(2) scLserver根據(jù)所請(qǐng)求軟件的SBB,從虛擬磁盤映像中讀取SBB中被置位的塊 以及從對(duì)應(yīng)的SHAl列表文件中讀取塊的SHAl值,然后發(fā)送給scLclient。(3) scLclient將接收到的每個(gè)塊保存到本地的SVD中,將影子GBB中該塊對(duì)應(yīng)的 位置1,將該塊的SHAl值保存到軟件對(duì)應(yīng)的影子SHAl列表文件中該塊對(duì)應(yīng)的位置,將影子 SHAl列表文件中的有效塊位圖中該塊對(duì)應(yīng)的位置1,遞增影子SHAl列表文件中的有效塊 數(shù)。(4) scLclient清除用戶端影子SHAl列表文件中的空標(biāo)志。若scLclient發(fā)現(xiàn)用戶端的影子SHAl列表文件中的完整性標(biāo)志和空標(biāo)志都未置 位,即請(qǐng)求的軟件在用戶端部分緩存,則scLserver和scLclient通過(guò)交互式推送模式,將 那些未緩存或已更新的塊傳輸?shù)接脩舳恕=换ナ酵扑湍J绞侵竤cLserver除了將軟件占用 的磁盤塊發(fā)送給scLclient之外,scLserver和scLclient之間還通過(guò)交互來(lái)避免傳輸已 經(jīng)在用戶端緩存的磁盤塊。具體步驟如下(1) sd_server和sd_client初始化進(jìn)入交互式推送模式。(2) scLserver將所請(qǐng)求軟件的SBB中被置位的塊號(hào)發(fā)送給scLclient。(3) scLclient將scLserver發(fā)送的塊號(hào)和軟件的影子SHAl列表文件中的有效塊 位圖中對(duì)應(yīng)的位分別進(jìn)行異或操作,將異或操作的結(jié)果發(fā)給scLserver ;(4)sd_server將異或操作結(jié)果中置1的塊(即未在用戶端緩存的塊)直接發(fā)送給 sd—client ο(5)若影子SHAl列表文件中的時(shí)標(biāo)和服務(wù)器端對(duì)應(yīng)的SHAl列表文件中的時(shí)標(biāo)不 匹配,則scLclient將同或操作的結(jié)果以及結(jié)果中置1的塊的SHAl值一起被發(fā)送給sd_ server。scLserver將scLclient發(fā)送的同或操作結(jié)果中置1的塊的SHAl值和服務(wù)器端的 對(duì)應(yīng)塊的SHAl值進(jìn)行比較。若塊的SHAl值不同,則scLserver重新從服務(wù)器端的虛擬磁盤映像中讀取塊以及從對(duì)應(yīng)的SHAl列表文件中讀取塊的SHAl值,然后發(fā)送給scLclient ; 否則,不發(fā)送。(6) scLclient將接收到的塊保存到本地的SVD中,將影子GBB中接收塊對(duì)應(yīng)的位 置1,將接收塊的SHAl值保存到對(duì)應(yīng)的影子SHAl列表文件中,將影子SHAl列表文件中的有 效塊位圖中對(duì)應(yīng)的位置1,更新影子SHAl列表文件中的有效塊數(shù)。3. 4. 3每分發(fā)完一種軟件,用戶端的scLclient將軟件對(duì)應(yīng)的影子SHAl列表文件 中的時(shí)標(biāo)和總塊數(shù)設(shè)置成和服務(wù)器端相同,并將完整性標(biāo)志置1。3. 5在用戶端,用戶啟動(dòng)虛擬機(jī),使用已在本地緩存的軟件。具體步驟如下3. 5. IVMM的塊設(shè)備驅(qū)動(dòng)模塊中的用戶端緩存初始化子模塊首先執(zhí)行用戶端緩存 初始化過(guò)程(1) scLclient從服務(wù)器端獲取所有可用軟件的軟件別名、時(shí)標(biāo)、總塊數(shù)。(2)若一種軟件對(duì)應(yīng)的影子SHAl列表文件在用戶端不存在,則塊設(shè)備驅(qū)動(dòng)模塊創(chuàng) 建對(duì)應(yīng)的影子SHAl列表文件并將其空標(biāo)志置1,刪除被卸載軟件的SHAl列表文件。(3)塊設(shè)備驅(qū)動(dòng)模塊逐一檢查每種軟件的影子SHAl列表文件。檢查其中的時(shí)標(biāo)字 段和服務(wù)器端是否相同,若時(shí)標(biāo)不相同,將影子SHAl列表文件的時(shí)標(biāo)和總塊數(shù)設(shè)置成和服 務(wù)器端相同,清除完整性標(biāo)志和有效塊數(shù),清空有效塊位圖。若空標(biāo)志置位,且有效塊數(shù)大 于總塊數(shù)的10%,清除空標(biāo)志。(4)若存在時(shí)標(biāo)不同的軟件或WVD不存在,則從SVD以COW(Copy-on-Write)模式 派生工作虛擬磁盤WVD (Work Virtual Disk)。3. 5. 2VMM從WVD啟動(dòng)虛擬機(jī),用戶從虛擬機(jī)中使用已在本地緩存或未緩存的軟 件。虛擬機(jī)運(yùn)行過(guò)程中,塊設(shè)備驅(qū)動(dòng)模塊中的按需取塊子模塊從服務(wù)器端獲取虛擬機(jī) 請(qǐng)求但未在本地緩存或在服務(wù)器端已經(jīng)被更新的塊。具體過(guò)程如下(1)按需取塊子模塊將塊號(hào)作為參數(shù)向scLclient發(fā)出取塊請(qǐng)求,sd_client向服 務(wù)器端的scLserver轉(zhuǎn)發(fā)取塊請(qǐng)求。(2) scLserver收到取塊請(qǐng)求后,從虛擬磁盤映像中讀取請(qǐng)求的塊,從⑶B中查詢 該塊所屬軟件的軟件編號(hào),再?gòu)乃鶎佘浖?duì)應(yīng)的SHAl列表文件中讀取塊的SHAl值,最后將 讀取的塊、所屬軟件的軟件編號(hào)、塊SHAl值發(fā)送給用戶端的scLclient。(3)sd_client將接收到的塊交給按需取塊子模塊,然后將該塊寫入SVD,將影子 GBB中該塊對(duì)應(yīng)的位置1,將該塊的SHAl值寫入所屬軟件對(duì)應(yīng)的影子SHAl列表文件中,將 影子SHAl列表文件中有效塊位圖中該塊對(duì)應(yīng)的位置1,遞增有效塊數(shù)。(4)若影子SHAl列表文件中的有效塊數(shù)和軟件的總塊數(shù)相等,sd_client將完整 性標(biāo)志置1 ;若空標(biāo)志置位,且有效塊數(shù)大于總塊數(shù)的10%,清除空標(biāo)志。虛擬機(jī)運(yùn)行過(guò)程中,當(dāng)請(qǐng)求讀虛擬磁盤上的塊η時(shí),塊設(shè)備驅(qū)動(dòng)模塊讀取塊的具 體過(guò)程如下(1)當(dāng)VMM接收到虛擬機(jī)對(duì)塊η的請(qǐng)求后,塊設(shè)備驅(qū)動(dòng)模塊查詢WVD的塊位圖中對(duì) 應(yīng)的位是否置位,若已置位,則直接從WVD中讀取塊η ;否則,查詢影子GBB中對(duì)應(yīng)的位是否 置位。WVD的塊位圖是和GBB相同的數(shù)據(jù)結(jié)構(gòu),用于記錄虛擬機(jī)在用戶端運(yùn)行過(guò)程中寫入 WVD中的塊。每個(gè)塊在塊位圖中對(duì)應(yīng)一個(gè)位(bit),如果WVD包含該塊,則對(duì)應(yīng)的位被置1,
11否則為0。(2)若未置位,則塊設(shè)備驅(qū)動(dòng)模塊通過(guò)按需取塊的方法獲取塊η ;否則,塊設(shè)備驅(qū) 動(dòng)模塊查詢GDB該塊所屬的軟件,設(shè)為Α。(3)塊設(shè)備驅(qū)動(dòng)模塊查詢軟件A的影子SHAl列表文件中的完整性標(biāo)志。若完整性 標(biāo)志置位,則塊設(shè)備驅(qū)動(dòng)模塊直接從SVD中讀取塊η ;否則,塊設(shè)備驅(qū)動(dòng)模塊查詢軟件A的 影子SHAl列表文件中有效塊位圖中塊η對(duì)應(yīng)的位是否置位。(4)若已置位,則塊設(shè)備驅(qū)動(dòng)模塊直接從SVD中讀取塊η ;否則,塊設(shè)備驅(qū)動(dòng)模塊從 A的影子SHAl列表文件中讀取塊η的SHAl值,并通過(guò)sd_client和服務(wù)器端該塊的SHAl 值進(jìn)行比較。(5)若SHAl值相同,則塊設(shè)備驅(qū)動(dòng)模塊直接從SVD中讀取塊n,將A的影子SHAl 列表文件中有效塊位圖中相應(yīng)的位置1,遞增有效塊數(shù);若SHAl值不相同,則塊設(shè)備驅(qū)動(dòng)模 塊通過(guò)按需取塊的方法重新獲取塊η。在虛擬機(jī)運(yùn)行過(guò)程中,所有的寫操作針對(duì)WVD進(jìn)行。當(dāng)VMM接收到虛擬機(jī)對(duì)塊η 的寫請(qǐng)求后,塊設(shè)備驅(qū)動(dòng)模塊將塊η寫入WVD,然后將WVD的塊位圖中相應(yīng)的位置1。與現(xiàn)有技術(shù)相比,采用本發(fā)明可以達(dá)到如下技術(shù)效果1.本發(fā)明對(duì)虛擬機(jī)管理器VMM進(jìn)行了擴(kuò)展,以支持針對(duì)單個(gè)大尺寸虛擬磁盤映像 的邏輯分割和軟件的按需分發(fā)。VMM中擴(kuò)展的用戶交互模塊對(duì)安裝到虛擬磁盤中的每種軟 件按照安裝順序分配唯一的軟件編號(hào)和軟件別名,并利用軟件編號(hào)和別名對(duì)安裝在虛擬磁 盤中的軟件進(jìn)行管理。VMM中擴(kuò)展的塊設(shè)備驅(qū)動(dòng)模塊通過(guò)引入了軟件塊位圖SBB,以記錄每 種軟件占用磁盤塊的信息,從而實(shí)現(xiàn)在單個(gè)軟件的基本粒度上對(duì)單個(gè)虛擬磁盤映像的邏輯 分割,避免了基于COW磁盤的物理分割方法帶來(lái)的在性能、虛擬機(jī)映像管理和軟件管理方 面的問題。塊設(shè)備驅(qū)動(dòng)模塊中擴(kuò)展的按需取塊子模塊使得VMM能夠在虛擬磁盤未完全緩存 到用戶端的情況下,保證虛擬機(jī)的正常運(yùn)行。2.本發(fā)明利用擴(kuò)展的虛擬機(jī)管理器VMM,在服務(wù)器端通過(guò)記錄每種軟件所占用的 磁盤塊的軟件塊位圖文件SBB以實(shí)現(xiàn)對(duì)傳統(tǒng)的單個(gè)虛擬磁盤映像的邏輯分割。在虛擬機(jī)安 裝過(guò)程中,用戶交互模塊按照軟件安裝的順序自動(dòng)分配軟件編號(hào),通過(guò)用戶交互接口設(shè)置 對(duì)應(yīng)的軟件別名、軟件安裝的開始和結(jié)束時(shí)間點(diǎn)。軟件安裝過(guò)程中,塊設(shè)備驅(qū)動(dòng)模塊將軟件 占用的磁盤塊的信息記錄在軟件的塊位圖文件SBB中。當(dāng)進(jìn)行軟件更新時(shí),用戶交互模塊 切換當(dāng)前軟件編號(hào)至被更新軟件對(duì)應(yīng)的軟件編號(hào),然后執(zhí)行正常的軟件更新過(guò)程。當(dāng)卸載 軟件時(shí),執(zhí)行正常的卸載過(guò)程之后,用戶交互模塊刪除對(duì)應(yīng)的SBB。3.本發(fā)明利用全局塊分布位圖⑶B和軟件的SBB,通過(guò)服務(wù)器端服務(wù)程序sd_ server和用戶端客戶程序scLclient的交互,能夠僅僅將用戶所需軟件占用的磁盤塊(SBB 中置位的塊)傳送到用戶端,從而實(shí)現(xiàn)按需地軟件分發(fā)。通過(guò)比較軟件在服務(wù)器端的SHAl 列表文件和在用戶端的影子SHAl列表文件,能夠避免傳輸那些已在用戶端緩存且未被更 新的塊,從而降低軟件分發(fā)的開銷。4.本發(fā)明在用戶端利用按需取塊和本地緩存相結(jié)合的方式透明地為用戶虛擬機(jī) 提供磁盤訪問服務(wù)。在使用從服務(wù)器端獲取的軟件之前,首先派生工作虛擬磁盤WVD以保 存虛擬機(jī)運(yùn)行期間對(duì)虛擬磁盤的修改。在虛擬機(jī)啟動(dòng)過(guò)程中,VMM的塊設(shè)備驅(qū)動(dòng)模塊檢查 和初始化用戶端緩存的狀態(tài)。在虛擬機(jī)運(yùn)行過(guò)程中,塊設(shè)備驅(qū)動(dòng)模塊直接從SVD中讀取最新版本的塊;否則,塊設(shè)備驅(qū)動(dòng)模塊中的按需取塊子模塊從服務(wù)器端獲取用戶端未緩存或 者已被更新的塊。綜上所述,本發(fā)明利用擴(kuò)展的虛擬機(jī)管理器,通過(guò)分別記錄每種軟件安裝時(shí)占用 的磁盤塊將傳統(tǒng)的單個(gè)大尺寸的虛擬磁盤映像在邏輯上分割成多個(gè)小尺寸的磁盤塊集合, 然后按需地分發(fā)給用戶,以降低軟件分發(fā)的開銷,加快軟件部署的速度。實(shí)驗(yàn)表明,本發(fā)明 支持虛擬機(jī)環(huán)境下低開銷的,按需的軟件分發(fā)。


圖1是典型虛擬機(jī)系統(tǒng)的主要組件圖。圖2是本發(fā)明對(duì)VMM的用戶交互模塊擴(kuò)展的主要子模塊。圖3是本發(fā)明對(duì)VMM的塊設(shè)備驅(qū)動(dòng)模塊擴(kuò)展的主要子模塊。圖4是本發(fā)明的總流程圖。圖5是本發(fā)明第二步服務(wù)器端單個(gè)虛擬磁盤映像邏輯分割的流程圖。圖6是本發(fā)明第三步中基于虛擬磁盤映像邏輯分割的按需軟件分發(fā)流程圖。圖7是本發(fā)明用戶端按需使用軟件的流程圖。
具體實(shí)施例方式以下結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步詳細(xì)說(shuō)明。圖4是本發(fā)明的總流程圖。主要包括以下4個(gè)步驟1.對(duì)虛擬機(jī)管理器VMM進(jìn)行功能擴(kuò)展。對(duì)VMM的擴(kuò)展包括在VMM的用戶交互模塊 中擴(kuò)展的軟件編號(hào)和別名管理子模塊、軟件編號(hào)和別名管理命令和軟件管理命令。在VMM 的塊設(shè)備驅(qū)動(dòng)模塊中擴(kuò)展了軟件塊位圖讀寫子模塊、全局塊分布位圖讀寫子模塊、用戶端 緩存初始化子模塊、按需取塊子模塊以及SHAl列表文件管理子模塊。軟件編號(hào)和別名管理 子模塊對(duì)安裝到虛擬磁盤中的軟件按照安裝順序分配軟件編號(hào)和軟件別名;利用軟件編號(hào) 和軟件別名,VMM的用戶交互接口對(duì)安裝在虛擬磁盤中的軟件執(zhí)行安裝/更新/卸載等管 理任務(wù)。VMM的塊設(shè)備驅(qū)動(dòng)模塊通過(guò)引入軟件塊位圖SBB,以記錄每種軟件占用磁盤塊的信 息,從而實(shí)現(xiàn)在單個(gè)軟件的基本粒度上對(duì)單個(gè)虛擬磁盤映像的邏輯分割。塊設(shè)備驅(qū)動(dòng)模塊 中的按需取塊子模塊能夠在虛擬磁盤未完全緩存到用戶端的情況下,保證虛擬機(jī)的正常運(yùn) 行。2.在服務(wù)器端對(duì)單個(gè)虛擬磁盤映像進(jìn)行邏輯分割。利用擴(kuò)展的虛擬機(jī)管理器 VMM,在服務(wù)器端虛擬機(jī)安裝過(guò)程中通過(guò)記錄每種軟件安裝時(shí)占用的磁盤塊實(shí)現(xiàn)對(duì)單個(gè)虛 擬磁盤映像的邏輯分割。在虛擬機(jī)安裝過(guò)程中,首先安裝客戶操作系統(tǒng),VMM的用戶交互模 塊分配的軟件編號(hào)默認(rèn)為1。在后續(xù)其它每種軟件的安裝過(guò)程中,用戶交互模塊按照安裝的 順序自動(dòng)分配軟件編號(hào),通過(guò)用戶交互接口設(shè)置對(duì)應(yīng)的軟件別名、軟件安裝的開始和結(jié)束 時(shí)間點(diǎn)。軟件安裝過(guò)程中,塊設(shè)備驅(qū)動(dòng)模塊將軟件占用的磁盤塊記錄在軟件的SBB中,并用 軟件編號(hào)更新全局塊分布位圖GDB。軟件更新時(shí),用戶交互模塊首先切換當(dāng)前軟件編號(hào)至被 更新軟件的軟件編號(hào),然后執(zhí)行正常的軟件更新過(guò)程。卸載軟件時(shí),執(zhí)行正常的卸載過(guò)程之 后,用戶交互模塊刪除對(duì)應(yīng)的SBB。虛擬機(jī)安裝完成之后,塊設(shè)備驅(qū)動(dòng)模塊為每種軟件生成 包含其占用磁盤塊SHAl值的的SHAl列表文件,以避免軟件分發(fā)過(guò)程中重傳已經(jīng)在用戶端緩存的塊。3.按需軟件分發(fā)。利用全局塊分布位圖GDB和軟件的SBB,服務(wù)器端服務(wù)程序sd_ server和用戶端客戶程序sd_client,通過(guò)完全推送和交互式推送兩種模式,將用戶所需 軟件占用的磁盤塊傳送到用戶端,從而實(shí)現(xiàn)按需地軟件分發(fā)。通過(guò)比較塊的SHAl值以避免 傳輸那些已在用戶端緩存的塊,從而降低軟件分發(fā)的開銷。4.用戶端按需使用軟件。在用戶端,VMM的塊設(shè)備驅(qū)動(dòng)模塊通過(guò)按需取塊和本地 緩存相結(jié)合的方式透明地為用戶虛擬機(jī)提供磁盤訪問服務(wù)。首先派生工作虛擬磁盤WVD以 保存虛擬機(jī)運(yùn)行期間對(duì)虛擬磁盤的修改。在虛擬機(jī)運(yùn)行過(guò)程中,VMM的塊設(shè)備驅(qū)動(dòng)模塊直 接從SVD中讀取已在用戶端緩存且是最新版本的塊;否則,塊設(shè)備驅(qū)動(dòng)模塊中的按需取塊 子模塊從服務(wù)器端獲取未在本地緩存或者已被更新的塊。圖5是本發(fā)明中服務(wù)器端單個(gè)虛擬磁盤映像邏輯分割的流程圖。主要過(guò)程為1.創(chuàng)建虛擬磁盤。2.安裝客戶操作系統(tǒng)首先通過(guò)VMM的用戶交互接口設(shè)置軟件編號(hào)為1,軟件別名 為os ;VMM的塊設(shè)備驅(qū)動(dòng)模塊創(chuàng)建客戶操作系統(tǒng)的SBB ;啟動(dòng)虛擬機(jī),開始安裝客戶操作系 統(tǒng);安裝過(guò)程中塊設(shè)備驅(qū)動(dòng)模塊更新GBB、⑶B和SBB ;安裝完成之后,通過(guò)VMM的用戶交互 接口設(shè)置當(dāng)前軟件編號(hào)為255 ;重啟虛擬機(jī)。3.通過(guò)VMM的用戶交互接口通知VMM開始軟件安裝/更新/卸載過(guò)程。4.軟件安裝/更新/卸載。在服務(wù)器端執(zhí)行軟件安裝/更新/卸載的軟件管理任 務(wù)的同時(shí),通過(guò)分別記錄每種軟件安裝時(shí)占用的磁盤塊,實(shí)現(xiàn)對(duì)單個(gè)虛擬磁盤的基于單個(gè) 軟件粒度的邏輯分割。軟件安裝過(guò)程如下(I)VMM的用戶交互接口調(diào)用軟件編號(hào)和管理子模塊設(shè)置軟件的別名,并為安裝的 軟件分配軟件編號(hào)。(2) VMM的塊設(shè)備驅(qū)動(dòng)模塊創(chuàng)建軟件的SBB。(3)在虛擬機(jī)中執(zhí)行軟件安裝過(guò)程,同時(shí)塊設(shè)備驅(qū)動(dòng)模塊更新GBB,SBB和⑶B。軟 件更新過(guò)程如下(1)通過(guò)VMM的用戶交互接口設(shè)置被更新軟件的軟件別名以及軟件的更新模式
(全量更新/增量更新)。(2)若是全量更新,則VMM的塊設(shè)備驅(qū)動(dòng)模塊首先清空SBB。(3)更新軟件,同時(shí)塊設(shè)備驅(qū)動(dòng)模塊更新GBB,SBB以及⑶B。軟件卸載過(guò)程如下(1)通過(guò)VMM的用戶交互接口設(shè)置被卸載軟件的軟件別名。(2)卸載軟件。(3)通過(guò)VMM的用戶交互接口設(shè)置被卸載軟件的軟件編號(hào)為待用軟件編號(hào)并置空 軟件別名,塊設(shè)備驅(qū)動(dòng)模塊刪除被卸載軟件的SBB。5.軟件安裝/更新/卸載過(guò)程結(jié)束后,VMM的用戶交互接口調(diào)用軟件管理命令通 知VMM軟件安裝/更新/卸載過(guò)程結(jié)束,軟件編號(hào)和別名管理子模塊切換當(dāng)前軟件編號(hào)至 255。6.如果還有軟件安裝/更新/卸載任務(wù),轉(zhuǎn)步驟3。
14
7.生成被安裝/更新軟件的SHAl列表文件。圖6是本發(fā)明中基于虛擬磁盤映像邏輯分割的按需軟件分發(fā)流程圖。主要過(guò)程 為1.⑶B傳輸用戶端客戶程序scLclient將服務(wù)器端的⑶B傳輸?shù)接脩舳恕?.查詢服務(wù)器端可用軟件用戶端的scLclient向服務(wù)器端服務(wù)程序scLserver 查詢可用軟件,sd_server向scLclient返回可用軟件的軟件別名列表。3.用戶端的scLclient向服務(wù)器端的scLserver提交軟件請(qǐng)求;同時(shí)sd_cIient 還將用戶端緩存的用戶所請(qǐng)求軟件的影子SHAl列表文件中的時(shí)標(biāo)、空標(biāo)志和完整性標(biāo)志 發(fā)送給 sd_server04.服務(wù)器端的scLserver定位用戶所請(qǐng)求軟件的SBB和SHAl列表文件,向sd_ client發(fā)送用戶所請(qǐng)求軟件的時(shí)標(biāo)、總塊數(shù)。5.對(duì)請(qǐng)求的每一種軟件,scLclient檢查其在用戶端是否緩存過(guò)。若一種軟件在 用戶端完全未緩存,即其SHAl列表文件中的空標(biāo)志置位,則scLserver和scLclient通過(guò) 完全推送模式將用戶所請(qǐng)求軟件占用的磁盤塊發(fā)送給用戶端;否則,通過(guò)交互式推送模式 只發(fā)送未在用戶端緩存或被更新的塊。完全推送模式服務(wù)程序scLserver根據(jù)軟件的SBB,從虛擬磁盤映像中讀取軟 件占用的的塊以及從對(duì)應(yīng)的SHAl列表文件中讀取塊的SHAl值,然后發(fā)送給客戶程序sd_ client ο交互式推送模式包含如下步驟(1) sd_server和sd_client初始化進(jìn)入交互式推送模式。(2) scLserver根據(jù)軟件的SBB,將軟件占用塊的塊號(hào)發(fā)送給scLclient。(3) scLclient根據(jù)服務(wù)器端發(fā)送的塊號(hào)和軟件的影子SHAl列表文件中的有效塊 位圖,判斷哪些塊未在用戶端緩存,并通知scLserver。(4) scLserver將未在用戶端緩存的塊直接發(fā)送給scLclient。(5)若軟件的影子SHAl列表文件中的時(shí)標(biāo)和服務(wù)器端對(duì)應(yīng)的時(shí)標(biāo)不匹配,則sd_ client將該軟件在用戶端緩存塊的SHAl值發(fā)送給scLserver。(6) scLserver比較已緩存塊的SHAl值和服務(wù)器端的是否相同。若一個(gè)塊的SHAl 值不同,則重新從服務(wù)器端的虛擬磁盤中讀取該塊,并發(fā)送給用戶端;否則,不發(fā)送。6. scLclient將接收到的塊保存到SVD中,將塊的SHAl值保存到對(duì)應(yīng)的影子SHAl 列表文件中,更新GBB和影子SHAl列表文件中的有效塊位圖、有效塊數(shù)。7.每傳輸完一種軟件,scLclient將對(duì)應(yīng)的影子SHAl列表文件中的時(shí)標(biāo)和總塊數(shù) 設(shè)置成和服務(wù)器端相同,并將完整性標(biāo)志置1。8.繼續(xù)分發(fā)下一種用戶請(qǐng)求的軟件,轉(zhuǎn)步驟5。圖7是本發(fā)明用戶端按需使用軟件的流程圖。主要過(guò)程為1.用戶端啟動(dòng)虛擬機(jī),VMM的塊設(shè)備驅(qū)動(dòng)模塊通過(guò)scLclient從服務(wù)器端獲取所 有可用軟件的軟件別名、時(shí)標(biāo)、總塊數(shù)。2.塊設(shè)備驅(qū)動(dòng)模塊檢查每種軟件對(duì)應(yīng)的影子SHAl列表文件是否存在;若不存在, 則創(chuàng)建影子SHAl列表文件,并將空標(biāo)志置1 ;刪除被卸載軟件對(duì)應(yīng)的SHAl列表文件。3.塊設(shè)備驅(qū)動(dòng)模塊檢查每個(gè)影子SHAl列表文件的時(shí)標(biāo)和服務(wù)器端是否相同;若時(shí)標(biāo)不同,將影子SHAl列表文件的時(shí)標(biāo)和總塊數(shù)設(shè)置成和服務(wù)器端相同,清除完整性標(biāo) 志和有效塊數(shù),清空有效塊位圖;若空標(biāo)志置位,且有效塊數(shù)大于總塊數(shù)的10%,清除空標(biāo)
ο4.若存在時(shí)標(biāo)不同的軟件或WVD不存在,則塊設(shè)備驅(qū)動(dòng)模塊派生新的WVD。5.在虛擬機(jī)運(yùn)行過(guò)程中,若是寫塊,則塊設(shè)備驅(qū)動(dòng)模塊直接將塊寫入WVD ;若是讀 塊,則首先查詢WVD中對(duì)應(yīng)的位是否置位;若已置位,則直接從WVD中讀取塊。6.若WVD中對(duì)應(yīng)的位未置位,則塊設(shè)備驅(qū)動(dòng)模塊查詢GBB中對(duì)應(yīng)的位是否置位。 若未置位,則塊設(shè)備驅(qū)動(dòng)模塊中的按需取塊子模塊從服務(wù)器端獲取塊,轉(zhuǎn)步驟12。7.若GBB中對(duì)應(yīng)的位已置位,則塊設(shè)備驅(qū)動(dòng)模塊查詢⑶B該塊所屬的軟件。8.塊設(shè)備驅(qū)動(dòng)模塊查詢所屬軟件的SHAl列表文件中的完整性標(biāo)志。若完整性標(biāo) 志置位,則塊設(shè)備驅(qū)動(dòng)模塊直接從SVD中讀取該塊。9.若完整性標(biāo)志未置位,則塊設(shè)備驅(qū)動(dòng)模塊查詢SHAl列表文件中有效塊位圖中 對(duì)應(yīng)的位。若已置位,則塊設(shè)備驅(qū)動(dòng)模塊直接從SVD中讀取塊。10.若有效塊位圖中對(duì)應(yīng)的位未置位,則塊設(shè)備驅(qū)動(dòng)模塊通過(guò)scLclient將影子 SHAl列表文件中該塊對(duì)應(yīng)的SHAl值和服務(wù)器端該塊的SHAl值進(jìn)行比較。若SHAl值相同, 則塊設(shè)備驅(qū)動(dòng)模塊直接從SVD中讀取該塊。11.若塊的SHAl值不同,則塊設(shè)備驅(qū)動(dòng)模塊的按需取塊子模塊從服務(wù)器端獲取 塊。12.用戶端的scLclient將從服務(wù)器端獲取的塊的SHAl值寫入本地的影子SHAl 列表文件中,并置位有效塊位圖中對(duì)應(yīng)的位,遞增有效塊數(shù)。13.若還有讀/寫請(qǐng)求,轉(zhuǎn)步驟5。
1權(quán)利要求
一種基于虛擬磁盤映像邏輯分割的按需軟件分發(fā)方法,其特征在于采用客戶/服務(wù)器的系統(tǒng)結(jié)構(gòu),服務(wù)器端存儲(chǔ)所有虛擬機(jī)的虛擬磁盤映像,并通過(guò)分別記錄每種軟件安裝時(shí)占用的磁盤塊將傳統(tǒng)的單個(gè)虛擬磁盤映像在邏輯上分割成多個(gè)磁盤塊集合;然后服務(wù)器端的軟件分發(fā)服務(wù)程序和用戶端的客戶程序根據(jù)用戶的軟件需求,通過(guò)客戶/服務(wù)器模式的交互按需地向用戶端分發(fā)軟件對(duì)應(yīng)的磁盤塊集合,具體步驟為第一步,對(duì)虛擬機(jī)管理器VMM(Virtual Machine Monitor)進(jìn)行功能擴(kuò)展,并將擴(kuò)展后的VMM部署到服務(wù)器端和客戶端;1.1在VMM的用戶交互模塊中擴(kuò)展對(duì)安裝到虛擬磁盤中的每種軟件進(jìn)行編號(hào)和命名的模塊;1.2在VMM的塊設(shè)備驅(qū)動(dòng)模塊中擴(kuò)展對(duì)軟件塊位圖SBB(Software Block Bitmap)和全局塊分布位圖GDB(Global block Distribution Bitmap)、用戶端緩存初始化功能、按需取塊功能的支持;第二步,服務(wù)器端對(duì)單個(gè)虛擬磁盤映像進(jìn)行邏輯分割;邏輯分割是指將軟件安裝到單個(gè)虛擬磁盤映像中,并通過(guò)每種軟件對(duì)應(yīng)的軟件塊位圖文件SBB將單個(gè)虛擬磁盤從邏輯上分成多個(gè)磁盤塊集合,每個(gè)磁盤塊集合中包含軟件占用的磁盤塊,步驟如下2.1創(chuàng)建虛擬磁盤利用擴(kuò)展的虛擬機(jī)管理器創(chuàng)建虛擬機(jī)的單個(gè)虛擬磁盤映像文件,并生成空的全局塊分布位圖GDB;2.2安裝客戶操作系統(tǒng);2.3安裝、更新、卸載應(yīng)用軟件;2.4生成軟件的SHA1列表文件在服務(wù)器端,為每種軟件生成一個(gè)SHA1列表文件;第三步,按需進(jìn)行軟件分發(fā);服務(wù)器端根據(jù)每種軟件的軟件塊位圖SBB,將用戶所需軟件占用的磁盤塊傳輸?shù)接脩舳?,從而?shí)現(xiàn)軟件的按需分發(fā),步驟如下3.1用戶端的客戶程序sd_client將服務(wù)器端的全局塊分布位圖GDB拷貝到用戶端;3.2用戶端的sd_client查詢服務(wù)器端的可用軟件,服務(wù)器端的服務(wù)程序sd_server返回可用軟件的軟件別名列表;3.3用戶端的sd_client向服務(wù)器端的sd_server提交用戶的軟件需求,即軟件別名列表,同時(shí)sd_client將用戶端緩存的所請(qǐng)求軟件的影子SHA1列表文件中的時(shí)標(biāo)、空標(biāo)志、完整性標(biāo)志發(fā)送給sd_server;3.4服務(wù)器端的sd_server根據(jù)用戶所請(qǐng)求軟件的SBB,將用戶所請(qǐng)求軟件占用的磁盤塊發(fā)送給用戶端的sd_client;sd_client將接收到的磁盤塊保存到用戶端的影子虛擬磁盤SVD(Shadow Virtual Disk)中,供用戶端虛擬機(jī)使用。
2.根據(jù)權(quán)利要求1所述的一種基于虛擬磁盤映像邏輯分割的按需軟件分發(fā)方法,其特 征在于在VMM的用戶交互模塊中擴(kuò)展對(duì)安裝到虛擬磁盤中的每種軟件進(jìn)行編號(hào)和命名的 模塊,具體擴(kuò)展方法如下(1)在用戶交互模塊中增加軟件編號(hào)和別名管理子模塊,該子模塊對(duì)軟件編號(hào)和別名 進(jìn)行分配、設(shè)置、修改、刪除和查詢操作;(2)在用戶交互接口中增加軟件編號(hào)和別名管理命令,這些命令調(diào)用軟件編號(hào)和別名 管理子模塊來(lái)實(shí)現(xiàn)對(duì)應(yīng)的軟件編號(hào)和別名管理功能;(3)在用戶交互接口中增加軟件管理命令,這些命令用于設(shè)置軟件管理方式和每種模式下的相關(guān)參數(shù),以及調(diào)用軟件編號(hào)和別名管理子模塊的功能來(lái)執(zhí)行軟件編號(hào)和別名的自 動(dòng)管理功能。
3.根據(jù)權(quán)利要求1所述的一種基于虛擬磁盤映像邏輯分割的按需軟件分發(fā)方法,其特 征在于在VMM的塊設(shè)備驅(qū)動(dòng)模塊中擴(kuò)展對(duì)軟件塊位圖SBB (Software Block Bitmap)和全 局塊分布位圖⑶B (Global block Distribution Bitmap)、用戶端緩存初始化功能、按需取 塊功能的支持,具體擴(kuò)展方法如下(1)在塊設(shè)備驅(qū)動(dòng)模塊中增加軟件塊位圖SBB讀寫子模塊,軟件塊位圖SBB是宿主機(jī)上 的一個(gè)文件,用于記錄虛擬磁盤上安裝的每種軟件占用的磁盤塊;(2)在塊設(shè)備驅(qū)動(dòng)模塊中增加全局塊分布位圖GDB讀寫子模塊,全局塊分布位圖GDB是 宿主機(jī)上的一個(gè)文件,用于記錄虛擬磁盤上的每個(gè)磁盤塊所屬軟件的軟件編號(hào);(3)在塊設(shè)備驅(qū)動(dòng)模塊中增加用戶端緩存初始化子模塊;(4)在塊設(shè)備驅(qū)動(dòng)模塊中增加按需取塊子模塊;(5)在塊設(shè)備驅(qū)動(dòng)模塊中增加SHAl列表文件管理子模塊。
4.根據(jù)權(quán)利要求1所述的一種基于虛擬磁盤映像邏輯分割的按需軟件分發(fā)方法,其特 征在于軟件安裝、更新、卸載過(guò)程如下軟件安裝過(guò)程如下(1)VMM的用戶交互接口調(diào)用軟件編號(hào)和管理子模塊設(shè)置軟件的別名,并為安裝的軟件 分配軟件編號(hào);(2)VMM的塊設(shè)備驅(qū)動(dòng)模塊創(chuàng)建軟件的SBB ;(3)在虛擬機(jī)中執(zhí)行軟件安裝過(guò)程,同時(shí)塊設(shè)備驅(qū)動(dòng)模塊更新GBB,SBB和GDB;軟件更新過(guò)程如下(1)通過(guò)VMM的用戶交互接口設(shè)置被更新軟件的軟件別名以及軟件的更新模式,全量 更新/增量更新;(2)若是全量更新,則VMM的塊設(shè)備驅(qū)動(dòng)模塊首先清空SBB;(3)更新軟件,同時(shí)塊設(shè)備驅(qū)動(dòng)模塊更新GBB,SBB以及⑶B;軟件卸載過(guò)程如下(1)通過(guò)VMM的用戶交互接口設(shè)置被卸載軟件的軟件別名;(2)卸載軟件;(3)通過(guò)VMM的用戶交互接口設(shè)置被卸載軟件的軟件編號(hào)為待用軟件編號(hào)并置空軟件 別名,塊設(shè)備驅(qū)動(dòng)模塊刪除被卸載軟件的SBB。
5.根據(jù)權(quán)利要求1所述的一種基于虛擬磁盤映像邏輯分割的按需軟件分發(fā)方法,其特 征在于完全推送模式、交互式推送模式步驟為完全推送模式步驟服務(wù)程序scLserver根據(jù)軟件的SBB,從虛擬磁盤映像中讀取軟件占用的的塊以及從 對(duì)應(yīng)的SHAl列表文件中讀取塊的SHAl值,然后發(fā)送給客戶程序scLclient ;交互式推送模式包含如下步驟(1)sd_server和sd_client初始化進(jìn)入交互式推送模式;(2)scLserver根據(jù)軟件的SBB,將軟件占用塊的塊號(hào)發(fā)送給scLclient ;(3)scLclient根據(jù)服務(wù)器端發(fā)送的塊號(hào)和軟件的影子SHAl列表文件中的有效塊位圖,判斷哪些塊未在用戶端緩存,并通知scLserver ;(4)scLserver將未在用戶端緩存的塊直接發(fā)送給sd_cIient ;(5)若軟件的影子SHAl列表文件中的時(shí)標(biāo)和服務(wù)器端對(duì)應(yīng)的時(shí)標(biāo)不匹配,則sd_ client將該軟件在用戶端緩存塊的SHAl值發(fā)送給scLserver ;(6)sd_server比較已緩存塊的SHAl值和服務(wù)器端的是否相同。若一個(gè)塊的SHAl值不 同,則重新從服務(wù)器端的虛擬磁盤中讀取該塊,并發(fā)送給用戶端;否則,不發(fā)送。
全文摘要
本發(fā)明公開了一種基于虛擬磁盤映像邏輯分割的按需軟件分發(fā)方法。采用客戶/服務(wù)器的系統(tǒng)結(jié)構(gòu),服務(wù)器端存儲(chǔ)所有虛擬機(jī)的虛擬磁盤映像,并通過(guò)分別記錄每種軟件安裝時(shí)占用的磁盤塊將傳統(tǒng)的單個(gè)虛擬磁盤映像在邏輯上分割成多個(gè)磁盤塊集合;然后服務(wù)器端的軟件分發(fā)服務(wù)程序和用戶端的客戶程序根據(jù)用戶的軟件需求,通過(guò)客戶/服務(wù)器模式的交互按需地向用戶端分發(fā)軟件對(duì)應(yīng)的磁盤塊集合,以降低軟件分發(fā)的開銷,加快軟件部署的速度。
文檔編號(hào)G06F9/455GK101916172SQ201010254398
公開日2010年12月15日 申請(qǐng)日期2010年8月17日 優(yōu)先權(quán)日2010年8月17日
發(fā)明者肖儂, 蔡志平, 陳斌 申請(qǐng)人:中國(guó)人民解放軍國(guó)防科學(xué)技術(shù)大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1