本發(fā)明涉及移動透明計算領(lǐng)域,特別是一種移動透明計算環(huán)境下客戶端塊級緩存優(yōu)化方法。
背景技術(shù):
::移動透明計算客戶端可以是日常生活中普及的移動終端,如手機,平板,也可以是具有網(wǎng)絡(luò)功能的感應(yīng)器,還可以是逐漸興起的智能可穿戴式設(shè)備如手表,智能眼鏡等,多樣式的異構(gòu)移動客戶端設(shè)備在處理器,內(nèi)存等硬件性能上十分受限。傳統(tǒng)移動客戶端不存儲與操作系統(tǒng)相關(guān)的軟件,每次啟動過程,都需要向服務(wù)器請求操作系統(tǒng),由于無線環(huán)境下的網(wǎng)絡(luò)帶寬及穩(wěn)定性的限制,在啟動系統(tǒng)過程中耗時比較長,且產(chǎn)生大量的重復(fù)網(wǎng)絡(luò)流量,影響用戶體驗。技術(shù)實現(xiàn)要素:本發(fā)明所要解決的技術(shù)問題是,針對現(xiàn)有技術(shù)不足,提供一種移動透明計算環(huán)境下客戶端塊級緩存優(yōu)化方法。為解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案是:一種移動透明計算環(huán)境下客戶端塊級緩存優(yōu)化方法,包括以下步驟:1)讀取磁盤首扇區(qū);所述磁盤既包括本地磁盤和虛擬磁盤;2)判斷所述首扇區(qū)標志位是否符合緩存結(jié)構(gòu),若是,則判斷系統(tǒng)緩存是否存在,若存在則截獲虛擬磁盤IO訪問本地磁盤緩存,若不存在,則進入步驟3);否則,硬盤初始化后建立緩存結(jié)構(gòu),進入步驟3);3)訪問虛擬磁盤重定向服務(wù)器,獲取數(shù)據(jù);4)更新本地磁盤緩存。更新本地磁盤緩存的具體實現(xiàn)過程包括以下步驟:1)在引導(dǎo)操作系統(tǒng)獲取第一塊數(shù)據(jù)之前,查找BIOS數(shù)據(jù)區(qū)的確定磁盤數(shù)目,其中至少有一個磁盤為標號為0x80的虛擬磁盤,虛擬磁盤保存著操作系統(tǒng)數(shù)據(jù);2)在找到本地磁盤后,調(diào)用INT13服務(wù)讀取所述本地磁盤的首扇區(qū)的數(shù)據(jù),并將首扇區(qū)的數(shù)據(jù)映射為自定義的一個本地緩存結(jié)構(gòu)頭部信息,即startup_sector結(jié)構(gòu);3)對于startup_sector結(jié)構(gòu),檢查標志signature的值是否為0x55aa,如果標志signaturesignature的值不為0x55aa,則將本地磁盤首次用作緩存設(shè)備,開始初始化startup_sector結(jié)構(gòu),并建立system_table_entry中第一條系統(tǒng)緩存記錄:id=1,hash=操作系統(tǒng)的標志,offset=0x1,并將初始化的startup_sector數(shù)據(jù)寫回本地磁盤,跳轉(zhuǎn)執(zhí)行5),更新緩存;4)如果緩存標志signature值等于0x55aa,說明已經(jīng)在本地磁盤建立了緩存結(jié)構(gòu),則在sys_table_entry數(shù)組中查找啟動的操作系統(tǒng)的哈希值,如果查找成功,保存緩存系統(tǒng)信息在本地磁盤的偏移量,啟動操作系統(tǒng),并在操作系統(tǒng)啟動過程中調(diào)用INT13服務(wù)訪問虛擬磁盤獲取數(shù)據(jù)時,產(chǎn)生磁盤中斷重定向至服務(wù)器,向服務(wù)器的請求數(shù)據(jù)被攔截,修改請求數(shù)據(jù)符合從本地磁盤獲取相同的數(shù)據(jù),及請求數(shù)據(jù)在本地磁盤存儲的偏移量,最后再次調(diào)用INT13服務(wù)獲取本地磁盤數(shù)據(jù),保證操作系統(tǒng)繼續(xù)執(zhí)行;所述偏移量記錄緩存在本地磁盤所存儲的具體位置;如果查找失敗,則在system_table_entry表增加一條數(shù)據(jù):id,name=hash,offset=1+i*0x1000000,跳轉(zhuǎn)執(zhí)行步驟5),更新緩存;5)如果需要更新緩存,引導(dǎo)操作系統(tǒng)在啟動過程中,首先調(diào)用INT13服務(wù)訪問虛擬磁盤,獲取服務(wù)器返回的數(shù)據(jù)后,利用返回的數(shù)據(jù)構(gòu)造一個本地磁盤的寫數(shù)據(jù)包,調(diào)用INT13服務(wù)將同步的數(shù)據(jù)更新至本地磁盤,作為緩存數(shù)據(jù);所述更新緩存是指講操作系統(tǒng)緩存從服務(wù)器中加載到本地磁盤。與現(xiàn)有技術(shù)相比,本發(fā)明所具有的有益效果為:本發(fā)明采用移動客戶端本地存儲設(shè)備作為緩存介質(zhì),通過在網(wǎng)絡(luò)引導(dǎo)模塊程序中創(chuàng)建一個虛擬系統(tǒng)盤,修改BIOS服務(wù)中磁盤中斷中斷處理程序,同時利用客戶端級緩存模塊建立緩存機制,極大的提高了客戶端的啟動速度,減少了網(wǎng)絡(luò)的負載,提高了用戶體驗。附圖說明圖1為移動客戶端的結(jié)構(gòu)模塊組成示意圖;圖2為實模式下的1M內(nèi)存分配圖;圖3為緩存磁盤的數(shù)據(jù)存儲邏輯圖;圖4為本地緩存查找及更新流程圖;圖5緩存磁盤首扇區(qū)結(jié)構(gòu)示意圖;圖6緩存系統(tǒng)數(shù)據(jù)結(jié)構(gòu)示意圖。具體實施方式移動客戶端由移動客戶端由硬件層,預(yù)置模塊層,及運行數(shù)據(jù)層組成,其結(jié)構(gòu)如圖1所示。其中硬件層是移動客戶端的基礎(chǔ),包括如處理器,內(nèi)存,網(wǎng)卡等硬件設(shè)備,最上層的運營數(shù)據(jù)層是運行的操作系統(tǒng)及運行軟件,為用戶提供服務(wù)。而中間的預(yù)置模塊層主要是由網(wǎng)絡(luò)引導(dǎo)模塊及本地緩存模塊組成,具體功能如下:網(wǎng)絡(luò)引導(dǎo)模塊:作為移動客戶端的智能設(shè)備沒有預(yù)置操作系統(tǒng)相關(guān)的軟件,僅在只讀存儲器(ROM)中內(nèi)置了網(wǎng)絡(luò)啟動引導(dǎo)的功能模塊,支持無操作系統(tǒng)下的網(wǎng)絡(luò)訪問。網(wǎng)絡(luò)啟動引導(dǎo)的功能模塊主要功能是創(chuàng)建虛擬磁盤、修改BIOS服務(wù)、截獲I/O指令、引導(dǎo)網(wǎng)絡(luò)操作系統(tǒng),以及和服務(wù)器交換獲取其他信息等功能。緩存模塊:由于在無線環(huán)境下,網(wǎng)絡(luò)的帶寬及穩(wěn)定性的限制,在啟動系統(tǒng)過程中耗時比較長,且需要從服務(wù)器上加載大量的數(shù)據(jù)。透明計算理念對客戶端本身沒有要求存儲模塊的,但在實際中目前很多移動終端智能設(shè)備會內(nèi)嵌入一塊小容量的本地存儲設(shè)備?;谝陨显?,在客戶端中增加了緩存模塊,能根據(jù)硬件設(shè)備及用戶的需要,緩存一部分的操作系統(tǒng)底層與用戶無關(guān)的數(shù)據(jù)。通過客戶端的緩存模塊能對本地存儲設(shè)備按塊進行管理,并將數(shù)據(jù)塊的讀寫映射為本地存儲的地址的讀寫,提高系統(tǒng)啟動速度,減少網(wǎng)絡(luò)的流量。本發(fā)明中移動客戶端的啟動原理,首先網(wǎng)絡(luò)引導(dǎo)模塊程序中創(chuàng)建一個虛擬系統(tǒng)盤,修改BIOS服務(wù)中磁盤中斷處理程序,能保留傳統(tǒng)方案中對本地磁盤的I/O處理同時具有對虛擬磁盤I/O訪問重定向到服務(wù)器。同時利用客戶端塊級緩存模塊建立緩存機制,也就是將虛擬磁盤訪問中的數(shù)據(jù)根據(jù)需要在本地存儲設(shè)備做一個緩存,特別是操作系統(tǒng)引導(dǎo)啟動過程中的共享數(shù)據(jù),能極大提高客戶端的啟動速度。其具體的系統(tǒng)引導(dǎo)過程描述如下:(1)移動客戶端通電,客戶端進行POST自檢并進行硬件初始化。這個階段檢查關(guān)鍵設(shè)備是否能正常工作,比如CPU,內(nèi)存及顯卡等。自檢功能完成之后,客戶端設(shè)備處于實模式之下,對內(nèi)存的有效訪問空間為1M,其分布大致結(jié)構(gòu)如圖2所示。(2)客戶端自檢后,跳轉(zhuǎn)到只讀存儲器上執(zhí)行網(wǎng)絡(luò)引導(dǎo)模塊,網(wǎng)絡(luò)引導(dǎo)模塊會獲取內(nèi)存的分配狀態(tài),檢查內(nèi)存的BIOS數(shù)據(jù)區(qū),加載無線網(wǎng)卡驅(qū)動,并配置網(wǎng)絡(luò)協(xié)議棧。支持網(wǎng)絡(luò)訪問功能后,初始化虛擬磁盤及修改BIOS服務(wù)進行I/O重定向。BIOS的磁盤讀寫服務(wù)主要提供對本地磁盤的讀寫訪問,包括基本讀寫服務(wù),以及擴展的讀寫服務(wù)。BIOS服務(wù)能對磁盤進行修復(fù)獲取參數(shù)讀寫復(fù)位等操作。BIOS中斷服務(wù)可以直接通過匯編或者結(jié)合C語言嵌入式匯編用調(diào)用。在實模式下,匯編程序通過設(shè)置CPU內(nèi)寄存器的狀態(tài)然后調(diào)用相應(yīng)的功能號,直接使用BIOS服務(wù)。比如基本磁盤I/O功能INT13中斷服務(wù),調(diào)用INT13各個功能時,需要將寄存器參數(shù)按照一定的要求設(shè)置[6]:AH=功能號,AL=讀/寫的扇區(qū)數(shù),DL=磁盤驅(qū)動器號ES:BX=讀/寫時數(shù)據(jù)的緩沖區(qū)地址,CH=磁道柱面號低8位;CL=高2位為柱面號高2位,低6位為扇區(qū)號;DH=磁頭號。而對大容量的磁盤I/O訪問是INT13提供擴展功能,其調(diào)用規(guī)范是:AH=擴展功能號;DS:SI=虛擬磁盤邏輯塊地址包指針;DL=磁盤驅(qū)動器號,其中DS:SI的指針指向的是一個塊結(jié)構(gòu)里面包括如讀寫的塊數(shù),讀寫是數(shù)據(jù)存儲的地址指針,以及如讀寫的邏輯塊起始地址。在磁盤訪問中邏輯地址和柱面/磁頭/扇區(qū)組成的地址是可以相互轉(zhuǎn)換的如:LBA=(((CX&0x00c0)<<2)|((CX&0xff00)>>8))*HEADS*SECTORS+((DX&0xff00)>>8)*SECTORS+(CX&0x003f)–1在網(wǎng)絡(luò)引導(dǎo)模塊中,虛擬磁盤是一個塊設(shè)備,初始化虛擬磁盤如分配磁盤號,塊的大小,磁盤的容量,磁盤扇區(qū)數(shù),磁頭數(shù)及柱面數(shù)等,同時調(diào)用網(wǎng)絡(luò)功能實現(xiàn)數(shù)據(jù)包的網(wǎng)絡(luò)發(fā)送及接受。網(wǎng)絡(luò)引導(dǎo)模塊需要修改內(nèi)存的BIOS數(shù)據(jù)區(qū),將虛擬磁盤的磁盤號(0x80)增加在數(shù)據(jù)區(qū),并加入設(shè)備引導(dǎo)列表。對虛擬磁盤的訪問重定向則是通過改寫B(tài)IOS的磁盤訪問中斷服務(wù)實現(xiàn)的,也就是在內(nèi)存的中斷向量表中用新的重定向功能地址代替原有的磁盤中斷功能程序地址,根據(jù)實模式下的內(nèi)存分配,可以知道在在新的磁盤中斷服務(wù)功能中保存了原有的磁盤中斷向量表地址,提供對本地磁盤直接調(diào)用原磁盤中斷向量表地址,當(dāng)訪問虛擬磁盤,將中斷請求封裝為數(shù)據(jù)包,能調(diào)用網(wǎng)絡(luò)協(xié)議發(fā)送數(shù)據(jù)到服務(wù)器,由服務(wù)器將處理的結(jié)果放回給客戶端。(3)用戶登錄并選擇要運行的操作系統(tǒng),查找緩存并啟動操作系統(tǒng)??蛻舳说木W(wǎng)絡(luò)引導(dǎo)模塊在創(chuàng)建虛擬磁盤和修改中斷后,獲取用戶的賬號與服務(wù)器交互,獲取可啟動的操心系統(tǒng)列表。在選擇相應(yīng)的系統(tǒng)后,判斷是否存在本地磁盤,且在本地磁盤是是否建立的緩存結(jié)構(gòu)。如果存在緩存記錄,則在本地磁盤中進行緩存查找本次要啟動的系統(tǒng)。如果查找到緩存,則利用磁盤緩存啟動,讀取磁盤相應(yīng)位置的數(shù)據(jù),加載到內(nèi)存的0x7c00地址,開始引導(dǎo)系統(tǒng)啟動。如果沒找到緩存或者要啟動的系統(tǒng),則讀取遠程要啟動操作系統(tǒng)的虛擬磁盤第一塊扇區(qū)數(shù)據(jù),加載到0x7c00處,并在如果存在本地存儲設(shè)備的情況下更新緩存,同時開始的引導(dǎo)網(wǎng)絡(luò)操作系統(tǒng)啟動。在引導(dǎo)操作系統(tǒng)的過程中,會反復(fù)調(diào)用BIOS服務(wù)進行磁盤讀寫,產(chǎn)生中斷事件。在本發(fā)明中,客戶端在網(wǎng)絡(luò)引導(dǎo)模塊在引導(dǎo)操作系統(tǒng)之前,為減少網(wǎng)絡(luò)的負載及提高啟動速度,充分利用本地存儲的作用,會將該用戶首次在本客戶端啟動的操作系統(tǒng)進行一個緩存。在首次引導(dǎo)網(wǎng)絡(luò)操作系統(tǒng)緩存成功的情況下,在第二次以后的重復(fù)引導(dǎo)操作系統(tǒng),能直接從本地的緩存加載,則能大大的加快啟動速度。在本方法中,我們用大小64G的本地磁盤設(shè)備作為緩存為例。在緩存中可以存儲多個用戶的多個操作系統(tǒng)內(nèi)核,操作系統(tǒng)內(nèi)核是指大多數(shù)操作系統(tǒng)的核心部分。它由操作系統(tǒng)中用于管理存儲器、文件、外設(shè)和系統(tǒng)資源的那些部分組成。操作系統(tǒng)內(nèi)核通常運行進程,并提供進程間的通信。為將不同操作系統(tǒng)的內(nèi)核進行區(qū)分,將硬盤按順序劃為不同的區(qū)域,每個操作系統(tǒng)在某個特定的區(qū)域存儲。緩存的磁盤的邏輯圖如圖3所示。本地磁盤緩存存儲查找及更新過程流程圖4,在本地緩存的啟動過程中的查找及更新算法描述如下:1).網(wǎng)絡(luò)引導(dǎo)模塊在引導(dǎo)操作系統(tǒng)獲取第一塊數(shù)據(jù)之前,通過查找BIOS數(shù)據(jù)區(qū)的(內(nèi)存地址0x475的字節(jié)值)確定磁盤數(shù)目,其中至少有一個存儲設(shè)備為標號為0x80的虛擬磁盤。2).在找到本地磁盤(默認標號為0x81)的情況下,調(diào)用INT13服務(wù)讀取本地磁盤(0x81)的第一塊扇區(qū)也就是0號物理扇區(qū)的數(shù)據(jù),并將這塊扇區(qū)的數(shù)據(jù)映射為自定義的一個本地緩存結(jié)構(gòu)頭部信息startup_sector結(jié)構(gòu)。緩存頭部信息結(jié)構(gòu)中記錄了緩存的基本信息具體定義如圖5。在startup_sector結(jié)構(gòu)中total_sys_num表示存在緩存的個數(shù);sys_version_num表示存儲結(jié)構(gòu)的版本;Structsystem_table_entry代表每一條緩存記錄組成的數(shù)據(jù)結(jié)構(gòu);signature則是存儲標志。3).對startup_sector檢查標志signature的值是否為0x55aa,如果緩存結(jié)構(gòu)標示的值不是0x55aa,則說明本地磁盤還沒有建立自定義的緩存結(jié)構(gòu),需要進行首次初始化磁盤扇區(qū)數(shù)據(jù),實現(xiàn)本地存儲磁盤的緩存初始化,具體步驟如下描述。步驟1,如果signature標志值不對(不是0x55aa),則將磁盤首次用作緩存設(shè)備。開始初始化startup_sector結(jié)構(gòu),并建立system_table_entry中第一條系統(tǒng)緩存記錄(id=1,hash=系統(tǒng)的標志offset=0x1),其緩存記錄的結(jié)構(gòu)定義如圖6表示,并將初始化的startup_sector數(shù)據(jù)寫回磁盤,跳轉(zhuǎn)執(zhí)行(4)更新緩存。System_table_entry結(jié)構(gòu)中id代表緩存的需要,flag代表緩存是否有效,hash代表本系統(tǒng)的網(wǎng)絡(luò)的唯一標志,offset代表本條緩存記錄在磁盤上的存儲起始偏移量。步驟2,如果緩存標志signature值等于0x55aa,說明已經(jīng)在本地磁盤建立了緩存結(jié)構(gòu),則把要啟動的系統(tǒng)的hash值在sys_table_entry數(shù)組中查找,如果查找成功,保存緩存系統(tǒng)信息特別是待啟動數(shù)據(jù)在本地存儲設(shè)備的偏移量;如果查找失敗,在system_table_entry表增加一條數(shù)據(jù)(id,name=hash,offset=1+i*0x1000000)并更新到磁盤中。步驟3,通過緩存的查詢,找到啟動系統(tǒng)緩存的情況下,在系統(tǒng)啟動過程中調(diào)用INT13服務(wù)訪問虛擬磁盤獲取數(shù)據(jù)時,產(chǎn)生的磁盤中斷重定向至服務(wù)器,向服務(wù)器的請求數(shù)據(jù)會被攔截,就是修改請求數(shù)據(jù)符合從本地磁盤獲取相同的數(shù)據(jù),主要是修改寄存器值如AL寄存器狀態(tài)值,及請求數(shù)據(jù)在本地磁盤的存儲的偏移量,最后再次調(diào)用INT13服務(wù)獲取本地磁盤數(shù)據(jù),保證系統(tǒng)繼續(xù)執(zhí)行。4).如果需要創(chuàng)建新的緩存或者更新緩存,引導(dǎo)操作系統(tǒng)在啟動過程中,首先調(diào)用INT13服務(wù)訪問虛擬磁盤,獲取服務(wù)器返回的數(shù)據(jù)后,還要利用返回數(shù)據(jù)構(gòu)造一個對本地存儲的寫數(shù)據(jù)包,調(diào)用INT13服務(wù)將同步的將數(shù)據(jù)更新至磁盤,作為緩存數(shù)據(jù)。5).在客戶端的操作系統(tǒng)引導(dǎo)過程中,當(dāng)對讀數(shù)據(jù)請求的操作根據(jù)是否有緩存分別做不同的數(shù)據(jù)處理。但無論是否有緩存,虛擬磁盤產(chǎn)生的寫請求都會向服務(wù)器發(fā)送,同時構(gòu)造新的寫數(shù)據(jù)包會更新本地磁盤數(shù)據(jù)。在實施例中,服務(wù)器和客戶端工作在同一局域網(wǎng),通過一個路由器相連。用戶通過客戶端,在身份驗證成功后,引導(dǎo)加載服務(wù)器上的操作系統(tǒng)實例,并在客戶端上運行。移動客戶端使用的是x86結(jié)構(gòu)的平板。各部分配置具體如下。如表1。表1實驗設(shè)備的配置表通過對比客戶端在否存儲本地的緩存的不同狀態(tài)下的開機啟動不同操作系統(tǒng)的時間作對比,其中啟動的兩種操作系統(tǒng)CentOS,RedHat。將兩種操作系統(tǒng)的啟動過程分為3個階段:分別是從開機到內(nèi)核加載階段,啟動到登錄界面,登錄成功后進入桌面。表2表示沒有客戶端緩存的移動客戶端的啟動時間。表2沒有本地緩存啟動兩種系統(tǒng)的各個階段時間表3帶本地緩存啟動兩種系統(tǒng)的各個階段時間通過對比數(shù)據(jù),可以看出本地客戶端緩存對系統(tǒng)的啟動速度有非常大的影響。本地緩存在本地的數(shù)據(jù)大小為50M左右,也就與用戶無關(guān)的操作系統(tǒng)內(nèi)核數(shù)據(jù)。通過網(wǎng)絡(luò)加載內(nèi)核需要占整個系統(tǒng)啟動時間的50%以上,而具有本地緩存的情況下,加載內(nèi)核的時間只有15%左右。所以,具有本地緩存的客戶端能大大提高用戶的體驗。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3