專利名稱:使用內(nèi)存和臨時(shí)存儲器的補(bǔ)丁方法及補(bǔ)丁服務(wù)器和客戶端的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及補(bǔ)丁技術(shù),并且更具體地,涉及一種能夠更快速并且更可靠地補(bǔ)丁大量數(shù)據(jù)的使用內(nèi)存和臨時(shí)存儲器的補(bǔ)丁方法以及使用該補(bǔ)丁方法的補(bǔ)丁服務(wù)器和
客戶端。
背景技術(shù):
隨著計(jì)算環(huán)境的發(fā)展,硬件的性能已經(jīng)變得很高并且在硬件上運(yùn)行的軟件已經(jīng)變得能夠使用很多資源。因此,存在的趨勢是,軟件的容量逐漸增加。此外,隨著網(wǎng)絡(luò)環(huán)境的發(fā)展,通過網(wǎng)絡(luò)傳輸和分發(fā)軟件已經(jīng)變得非常流行。特別地,軟件的內(nèi)容由于各種原因(例 如,軟件的新版本的發(fā)布)而頻繁地改變或者擴(kuò)展。改變或者擴(kuò)展的內(nèi)容被提供給用戶從而對軟件進(jìn)行更新,這被稱為打補(bǔ)丁或更新。傳統(tǒng)的補(bǔ)丁技術(shù)包括使用關(guān)于補(bǔ)丁的版本的信息的補(bǔ)丁方法。例如,存在一種方法,即補(bǔ)丁客戶端訪問補(bǔ)丁服務(wù)器,將當(dāng)前補(bǔ)丁版本與補(bǔ)丁服務(wù)器的補(bǔ)丁版本進(jìn)行比較,并且如果需要打補(bǔ)丁,則下載并且存儲對應(yīng)的內(nèi)容。傳統(tǒng)的補(bǔ)丁方法的問題在于補(bǔ)丁服務(wù)器和補(bǔ)丁客戶端的資源的使用效率低并且由于如果在關(guān)于補(bǔ)丁的版本的信息中存在錯(cuò)誤或者部分地執(zhí)行了打補(bǔ)丁則會發(fā)生補(bǔ)丁冗余,因此在服務(wù)器上發(fā)生瓶頸。為了解決該問題,開發(fā)了下述技術(shù)提供關(guān)于將要打補(bǔ)丁的文件的被改變的內(nèi)容的信息并且基于該信息執(zhí)行打補(bǔ)丁。然而,在該技術(shù)中,算法本身一次或連續(xù)地將補(bǔ)丁數(shù)據(jù)存儲在單個(gè)內(nèi)存中并且然后執(zhí)行打補(bǔ)丁。因此,雖然與傳統(tǒng)的補(bǔ)丁技術(shù)相比,該技術(shù)略微地減少了補(bǔ)丁數(shù)據(jù),但是用于分配內(nèi)存并且執(zhí)行打補(bǔ)丁的算法沒有得到改進(jìn)。由于該原因,存在下述問題如果在下載用于打補(bǔ)丁的文件時(shí)發(fā)生了錯(cuò)誤則需要再次下載用于打補(bǔ)丁的所有數(shù)據(jù);當(dāng)正在對較大的文件進(jìn)行打補(bǔ)丁時(shí)補(bǔ)丁處理較慢;以及硬件資源的使用效率低。此外,還存在的問題是由于補(bǔ)丁客戶端的低效操作導(dǎo)致對補(bǔ)丁服務(wù)器施加了較重的負(fù)擔(dān)。
發(fā)明內(nèi)容
因此,鑒于現(xiàn)有技術(shù)中發(fā)生的上述問題已經(jīng)做出了本發(fā)明,并且本發(fā)明的目的在于通過使用改進(jìn)的補(bǔ)丁算法最大化補(bǔ)丁客戶端的資源的利用來更快速和高效地施加補(bǔ)丁。本發(fā)明的另一目的在于快速且可靠地執(zhí)行具有高容量的補(bǔ)丁文件的打補(bǔ)丁。本發(fā)明的又一目的在于根據(jù)用于打補(bǔ)丁的數(shù)據(jù)的大小使用優(yōu)化的補(bǔ)丁算法更快速地施加補(bǔ)丁。本發(fā)明的又一目的在于如果在補(bǔ)丁處理過程中發(fā)生錯(cuò)誤則通過僅修改錯(cuò)誤部分而不是用于打補(bǔ)丁的整個(gè)文件來以資源有效且可容忍錯(cuò)誤的方式施加補(bǔ)丁。為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種補(bǔ)丁方法,該補(bǔ)丁方法在補(bǔ)丁客戶端中執(zhí)行,該補(bǔ)丁客戶端可連接到補(bǔ)丁服務(wù)器并且包括存儲裝置和內(nèi)存,補(bǔ)丁方法包括下述步驟
(a)訪問補(bǔ)丁服務(wù)器并且從補(bǔ)丁服務(wù)器接收補(bǔ)丁數(shù)據(jù);(b)計(jì)算內(nèi)存的可用空間;(c)如果補(bǔ)丁數(shù)據(jù)的大小小于或等于內(nèi)存的可用空間,則使用內(nèi)存的可用空間執(zhí)行打補(bǔ)?。灰约?d)如果補(bǔ)丁數(shù)據(jù)的大小大于內(nèi)存的可用空間,則對于存儲裝置分配對應(yīng)于補(bǔ)丁數(shù)據(jù)的大小的容量的臨時(shí)存儲器,并且使用分配的臨時(shí)存儲器執(zhí)行打補(bǔ)丁。為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種補(bǔ)丁方法,該補(bǔ)丁方法在補(bǔ)丁客戶端中執(zhí)行,該補(bǔ)丁客戶端可連接到補(bǔ)丁服務(wù)器并且包括存儲裝置和內(nèi)存,該補(bǔ)丁方法包括下述步驟(a)訪問補(bǔ)丁服務(wù)器并且從補(bǔ)丁服務(wù)器接收包括用于打補(bǔ)丁的多個(gè)文件的補(bǔ)丁數(shù)據(jù);
(b)計(jì)算內(nèi)存的可用空間;(c)如果用于打補(bǔ)丁的多個(gè)文件中的至少一個(gè)文件小于內(nèi)存的可用空間,則使用內(nèi)存的可用空間執(zhí)行該至少一個(gè)文件的打補(bǔ)丁 ;以及(d)如果用于打補(bǔ)
丁的多個(gè)文件中的至少一個(gè)文件大于內(nèi)存的可用空間,則使用對于存儲裝置分配的臨時(shí)存儲器執(zhí)行該至少一個(gè)文件的打補(bǔ)丁。為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種補(bǔ)丁服務(wù)器,該補(bǔ)丁服務(wù)器被連接到補(bǔ)丁客戶端并且提供補(bǔ)丁數(shù)據(jù),補(bǔ)丁服務(wù)器包括內(nèi)存;哈希生成單元,該哈希生成單元被構(gòu)造為生成用于接收到的數(shù)據(jù)的至少一個(gè)哈希值;以及控制單元,該控制單元被構(gòu)造為將原始文件和補(bǔ)丁文件加載到內(nèi)存中,控制哈希生成單元,從而哈希生成單元將加載的原始文件與加載的補(bǔ)丁文件進(jìn)行比較并且生成用于差異的至少一個(gè)哈希值,生成包括生成的哈希值的補(bǔ)丁表,并且生成包括生成的補(bǔ)丁表的補(bǔ)丁數(shù)據(jù)。為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種補(bǔ)丁客戶端,該補(bǔ)丁客戶端能夠使用內(nèi)存和存儲裝置,并且訪問補(bǔ)丁服務(wù)器,接收補(bǔ)丁數(shù)據(jù)并且執(zhí)行打補(bǔ)丁,補(bǔ)丁客戶端包括控制單元,該控制單元用于比較接收到的補(bǔ)丁數(shù)據(jù)的大小與內(nèi)存的可用空間,如果存儲器的可用空間等于或大于接收到的補(bǔ)丁數(shù)據(jù)的大小則使用內(nèi)存執(zhí)行打補(bǔ)丁,并且如果內(nèi)存的可用空間小于接收到的補(bǔ)丁數(shù)據(jù)的大小,則對于存儲裝置分配對應(yīng)于補(bǔ)丁數(shù)據(jù)的大小的容量的臨時(shí)存儲器并且然后使用分配的臨時(shí)存儲器執(zhí)行打補(bǔ)丁。
結(jié)合附圖,根據(jù)下面的詳細(xì)描述,將更清楚地理解本發(fā)明的以上和其它目的、特征和優(yōu)點(diǎn),在附圖中圖I是示出可以應(yīng)用所公開的技術(shù)的補(bǔ)丁系統(tǒng)的實(shí)施方式的構(gòu)造的圖;圖2是示出圖I的補(bǔ)丁服務(wù)器的實(shí)施方式的構(gòu)造的圖;圖3是示出在圖2的控制單元中執(zhí)行的生成補(bǔ)丁數(shù)據(jù)的處理的參考圖;圖4示出根據(jù)所公開的技術(shù)的補(bǔ)丁客戶端的實(shí)施方式的構(gòu)造的圖;圖5是示出使用內(nèi)存執(zhí)行的補(bǔ)丁的實(shí)施方式的參考圖;圖6是示出使用臨時(shí)存儲器執(zhí)行的打補(bǔ)丁的實(shí)施方式的參考圖;圖7是示出由圖4的補(bǔ)丁客戶端執(zhí)行的補(bǔ)丁方法的實(shí)施方式的流程圖;圖8是示出由圖4的補(bǔ)丁客戶端執(zhí)行的補(bǔ)丁方法的另一實(shí)施方式的流程圖;圖9是示出由圖4的補(bǔ)丁客戶端執(zhí)行的補(bǔ)丁方法的又一實(shí)施方式的流程圖;以及圖10是示出由圖4的補(bǔ)丁客戶端執(zhí)行的補(bǔ)丁方法的又一實(shí)施方式的流程圖。
具體實(shí)施例方式僅為了結(jié)構(gòu)或功能性描述的目的而示出了所公開的技術(shù)的描述。所公開的技術(shù)的范圍不應(yīng)理解為限于下述實(shí)施方式。即,可以以各種方式修改實(shí)施方式并且所公開的技術(shù)的范圍應(yīng)該理解為覆蓋還能夠?qū)崿F(xiàn)實(shí)施方式的技術(shù)精神的等效物。同時(shí),應(yīng)如下地理解在本申請中描述的術(shù)語的含義。詞語“第一”、“第二”等等均用于區(qū)分元件,并且這些元件不應(yīng)受到這些詞語的限制。例如,在不偏離本發(fā)明的范圍和技術(shù)精神的情況下,第一元件可以被稱為第二元件,或者類似地,第二元件可以被稱為第一元件。
當(dāng)元件被描述為“耦合到”或“連接到”另一元件時(shí),應(yīng)了解的是,前面的元件可以直接耦合或連接到后一元件,但是它們可以經(jīng)由一個(gè)或多個(gè)中間元件耦合或連接在一起。相反地,當(dāng)元件被描述為“直接耦合到”或“直接連接到”另一元件時(shí),應(yīng)了解的是,它們在沒有插入其它元件的情況下耦合或連接在一起。同時(shí),應(yīng)以相同的方式來理解描述元件之間的關(guān)系的其它表述(例如,在…之間和“直接位于…之間”或者“與…相鄰”和“與…直接相鄰”)。除非另有所述,單數(shù)表述可以包括復(fù)數(shù)表述。應(yīng)理解的是,在該申請中,術(shù)語“包括”或“具有”表示包括本申請中提及的特征、數(shù)字、步驟、操作、組件、部件或其組合,但是不表示排除任何其它特征、數(shù)字、步驟、操作、組件、部件或其組合中的一個(gè)或多個(gè)。在步驟中,符號(例如,“a”、“b”和“c”)用于方便描述,并且這些符號沒有描述步驟的順序??梢砸圆煌谒枋龅捻樞虻捻樞騺韴?zhí)行這些步驟,除非在上下文中清楚地描述了特定順序。即,這些步驟可以以所描述的順序來執(zhí)行,可以基本上同時(shí)地執(zhí)行,并且可以以相反的順序來執(zhí)行。除非另有所述,這里使用的所有術(shù)語具有與本發(fā)明所屬于的技術(shù)領(lǐng)域中本領(lǐng)域技術(shù)人員所公知的含義。通常使用的字典中定義的術(shù)語應(yīng)被理解為具有與現(xiàn)有技術(shù)的背景中理解的含義一致的含義,并且不應(yīng)被理解為具有理想或過度字面的含義,除非在本申請中有明確的定義。在下面的描述中,原始文件是指在施加補(bǔ)丁之前的文件,并且補(bǔ)丁文件是已經(jīng)對其執(zhí)行了打補(bǔ)丁的文件。補(bǔ)丁數(shù)據(jù)是執(zhí)行打補(bǔ)丁所需的數(shù)據(jù),并且根據(jù)實(shí)施方式可以包括補(bǔ)丁文件或者關(guān)于補(bǔ)丁文件和原始文件之間的差異的信息。圖I是示出可以應(yīng)用所公開的技術(shù)的補(bǔ)丁系統(tǒng)的實(shí)施方式的構(gòu)造的圖。參考圖1,補(bǔ)丁系統(tǒng)可以包括補(bǔ)丁服務(wù)器100和補(bǔ)丁客戶端200。補(bǔ)丁服務(wù)器100可以生成補(bǔ)丁數(shù)據(jù),并且當(dāng)補(bǔ)丁客戶端200訪問補(bǔ)丁服務(wù)器100時(shí),該補(bǔ)丁服務(wù)器100可以將補(bǔ)丁數(shù)據(jù)提供給補(bǔ)丁客戶端200。這里,補(bǔ)丁服務(wù)器100是指在與補(bǔ)丁客戶端200聯(lián)合操作時(shí)執(zhí)行打補(bǔ)丁的服務(wù)器功能,并且不限于特定的實(shí)施。例如,補(bǔ)丁服務(wù)器100可以實(shí)施為單個(gè)服務(wù)器或者服務(wù)器群,或者可以實(shí)施為通用服務(wù)器的一個(gè)功能。將在下面參考圖2描述補(bǔ)丁服務(wù)器100的詳細(xì)構(gòu)造或功能。補(bǔ)丁客戶端200可以通過網(wǎng)絡(luò)訪問補(bǔ)丁服務(wù)器100,并且通過執(zhí)行將在下面描述的特定補(bǔ)丁處理在其上正在運(yùn)行補(bǔ)丁客戶端200的終端上執(zhí)行打補(bǔ)丁。這里,補(bǔ)丁客戶端200是指在與補(bǔ)丁服務(wù)器100聯(lián)合操作時(shí)執(zhí)行打補(bǔ)丁的終端功能,并且不限于特定實(shí)施。例如,補(bǔ)丁客戶端200可以實(shí)施為在終端中執(zhí)行的軟件,或者實(shí)施為邏輯設(shè)計(jì)的硬件。將在下面參考圖4至6描述補(bǔ)丁客戶端的詳細(xì)構(gòu)造或功能。補(bǔ)丁服務(wù)器100和補(bǔ)丁客戶端200可以通過網(wǎng)絡(luò)連接。這里,網(wǎng)絡(luò)不限于基于特定標(biāo)準(zhǔn)的網(wǎng)絡(luò)。補(bǔ)丁客戶端200可以通過有線或無線網(wǎng)絡(luò)或者有線和無線網(wǎng)絡(luò)的組合連接到補(bǔ)丁服務(wù)器100。例如,如果補(bǔ)丁客戶端200運(yùn)行在個(gè)人計(jì)算機(jī)(PC)上,則可以使用有線或Wi-Fi通信網(wǎng)絡(luò)作為網(wǎng)絡(luò)。或者,如果補(bǔ)丁客戶端200是智能手機(jī)或者平板PC,則可以經(jīng)由移動通信網(wǎng)絡(luò)3G或4G來構(gòu)造網(wǎng)絡(luò)。圖2是示出圖I的補(bǔ)丁服務(wù)器100的實(shí)施方式的構(gòu)造的圖。參考圖2,補(bǔ)丁服務(wù)器100可以包括通信單元110、內(nèi)存120、哈希生成單元130、補(bǔ)丁數(shù)據(jù)存儲單元140和控制單元150。在實(shí)施方式中,補(bǔ)丁服務(wù)器100可以進(jìn)一步包括客戶端管理單元160。通信單元110可以響應(yīng)于來自控制單元150的請求建立或保持與補(bǔ)丁客戶端200的通信線路。內(nèi)存120可以包括生成補(bǔ)丁數(shù)據(jù)所需的存儲空間。內(nèi)存120可以被分區(qū)為特定空間以在控制單元150的控制下存儲不同的數(shù)據(jù)。 哈希生成單元130可以生成用于接收到的數(shù)據(jù)的哈希值。哈希生成單元130可以在控制單元150的控制下生成用于原始數(shù)據(jù)或補(bǔ)丁數(shù)據(jù)的哈希值,并且可以將生成的哈希值提供到控制單元150。補(bǔ)丁數(shù)據(jù)存儲單元140可以存儲補(bǔ)丁數(shù)據(jù)。如上所述,補(bǔ)丁數(shù)據(jù)是執(zhí)行打補(bǔ)丁所需的數(shù)據(jù),并且根據(jù)實(shí)施方式可以包括關(guān)于補(bǔ)丁文件和原始文件之間的差異的信息。補(bǔ)丁數(shù)據(jù)存儲單元140可以存儲由控制單元150提供的補(bǔ)丁數(shù)據(jù)或者關(guān)于補(bǔ)丁數(shù)據(jù)的信息(例如,關(guān)于補(bǔ)丁的版本、補(bǔ)丁數(shù)據(jù)的總大小和每個(gè)文件的大小(在補(bǔ)丁數(shù)據(jù)包括多個(gè)文件的情況下)的信息)??刂茊卧?50可以總體地控制補(bǔ)丁服務(wù)器100的元件,從而使得補(bǔ)丁服務(wù)器100執(zhí)行打補(bǔ)丁。將在下面對于控制單元150的每個(gè)功能詳細(xì)地描述控制單元150。控制單元150可以比較原始文件和補(bǔ)丁文件,并且生成補(bǔ)丁數(shù)據(jù)。在實(shí)施方式中,控制單元150可以將補(bǔ)丁文件和原始文件加載到內(nèi)存120,并且請求哈希生成單元130比較原始文件和補(bǔ)丁文件并且生成用于其之間的差異的哈希值??刂茊卧?50可以生成包括生成的哈希值和與生成的哈希值相關(guān)聯(lián)的索引的補(bǔ)丁表,生成包括補(bǔ)丁表和補(bǔ)丁文件的補(bǔ)丁數(shù)據(jù),并且將生成的補(bǔ)丁數(shù)據(jù)存儲在補(bǔ)丁數(shù)據(jù)存儲單元140中。在另一實(shí)施方式中,控制單元150可以使用用于補(bǔ)丁文件的哈希值生成補(bǔ)丁數(shù)據(jù)。即,控制單元150可以生成包括用于整個(gè)補(bǔ)丁文件的哈希值和用于哈希值的索引的補(bǔ)丁表,并且生成包括補(bǔ)丁表和補(bǔ)丁文件的補(bǔ)丁數(shù)據(jù)??刂茊卧?50可以將補(bǔ)丁數(shù)據(jù)提供到補(bǔ)丁客戶端200。在實(shí)施方式中,控制單元150可以控制通信單元110從而保持與補(bǔ)丁客戶端200的通信線路,基于關(guān)于存儲在補(bǔ)丁數(shù)據(jù)存儲單元140中的補(bǔ)丁數(shù)據(jù)的信息確定是否需要打補(bǔ)丁,并且然后將補(bǔ)丁數(shù)據(jù)提供到補(bǔ)丁客戶端200。在另一實(shí)施方式中,當(dāng)通信單元110在控制單元150的控制下建立與補(bǔ)丁客戶端200的通信線路時(shí),控制單元150可以請求關(guān)于連接到客戶端管理單元160的補(bǔ)丁客戶端200的信息,基于響應(yīng)于請求接收到的信息確定補(bǔ)丁數(shù)據(jù),并且然后將補(bǔ)丁數(shù)據(jù)提供到補(bǔ)丁客戶端200??蛻舳斯芾韱卧?60可以管理補(bǔ)丁客戶端200。在實(shí)施方式中,客戶端管理單元160可以對補(bǔ)丁客戶端200執(zhí)行驗(yàn)證。在實(shí)施方式中,客戶端管理單元160可以管理關(guān)于對補(bǔ)丁客戶端200執(zhí)行的打補(bǔ)丁的信息(例如,補(bǔ)丁時(shí)間和關(guān)于補(bǔ)丁的版本的信息)。圖3是示意性地示出由圖2的控制單元150執(zhí)行的生成補(bǔ)丁表的處理的示例的參考圖。參考圖3,原始 文件和補(bǔ)丁文件被分別加載到內(nèi)存120。由于原始文件和補(bǔ)丁文件已經(jīng)被加載到內(nèi)存120,因此控制單元150可以使用內(nèi)存120更快速地執(zhí)行比較。原始文件和補(bǔ)丁文件的4位二進(jìn)制數(shù)指示內(nèi)存120中的地址。原始文件和補(bǔ)丁文件的內(nèi)容的2位二進(jìn)制數(shù)指示對應(yīng)數(shù)據(jù)的索引。在示出的示例中,原始文件和補(bǔ)丁文件中的每一個(gè)包括四個(gè)數(shù)據(jù)。這四個(gè)數(shù)據(jù)可以是四個(gè)不同的文件,或者是至少一個(gè)文件的一部分??刂茊卧?50可以比較原始文件和補(bǔ)丁文件。S卩,控制單元150可以比較加載到內(nèi)存120的原始文件的每個(gè)數(shù)據(jù)的內(nèi)容與加載到內(nèi)存120的補(bǔ)丁文件的每個(gè)數(shù)據(jù)的內(nèi)容。如附圖中所示,控制單元150可以確定索引01的內(nèi)容和索引11的內(nèi)容彼此不同,并且構(gòu)造補(bǔ)丁表300。補(bǔ)丁表300可以包括索引310、哈希值320和補(bǔ)丁文件地址330。哈希值320可以表示對應(yīng)于索引01和11的補(bǔ)丁文件的哈希值,并且補(bǔ)丁文件地址330可以表示實(shí)際存儲補(bǔ)丁文件的內(nèi)容的地址。例如,補(bǔ)丁文件地址330可以表示存儲補(bǔ)丁文件的補(bǔ)丁數(shù)據(jù)存儲單元140的地址或位置。圖3中所示的實(shí)施方式示出了下述示例原始文件被與補(bǔ)丁文件進(jìn)行比較并且基于對應(yīng)于差異的補(bǔ)丁文件的內(nèi)容和用于該內(nèi)容的哈希值生成補(bǔ)丁數(shù)據(jù)。在該示例中,補(bǔ)丁客戶端200可以將補(bǔ)丁文件覆寫在原始文件上,計(jì)算哈希值,比較計(jì)算出的哈希值與補(bǔ)丁數(shù)據(jù)的哈希值,并且然后執(zhí)行打補(bǔ)丁。圖4是示出根據(jù)所公開的技術(shù)的補(bǔ)丁客戶端200的實(shí)施方式的構(gòu)造的圖,并且圖5和圖6是示出由補(bǔ)丁客戶端200執(zhí)行的補(bǔ)丁方案的實(shí)施方式的參考圖。參考圖4,補(bǔ)丁客戶端200可以包括通信單元210、內(nèi)存220、臨時(shí)存儲器230和控制單元240。在實(shí)施方式中,補(bǔ)丁客戶端200可以進(jìn)一步包括補(bǔ)丁數(shù)據(jù)存儲單元250和哈希生成單元260中的至少一個(gè)。通信單元210可以在控制單元240請求時(shí)建立或保持與補(bǔ)丁服務(wù)器100的通信線路。內(nèi)存220是用于提供存儲空間的存儲器件。使用存儲裝置(例如,HDD、RAID或SSD)來分配臨時(shí)存儲器230。臨時(shí)存儲器230執(zhí)行與內(nèi)存220相同的功能(B卩,提供存儲空間),但是由于在數(shù)據(jù)的加載過程中發(fā)生I/O處理使得其性能低于內(nèi)存220。控制單元240控制補(bǔ)丁客戶端200的元件從而對終端執(zhí)行打補(bǔ)丁??刂茊卧?40可以使用內(nèi)存220執(zhí)行打補(bǔ)丁。在實(shí)施方式中,控制單元240可以通過將內(nèi)存220的可用空間分區(qū)為至少兩個(gè)區(qū)域并且將原始文件和補(bǔ)丁數(shù)據(jù)加載到各自分區(qū)來執(zhí)行打補(bǔ)丁。例如,控制單元240可以通過對于內(nèi)存220分配三個(gè)區(qū)域并且將原始文件、補(bǔ)丁文件和補(bǔ)丁數(shù)據(jù)加載到各自區(qū)域(或在區(qū)域中生成)來執(zhí)行打補(bǔ)丁。圖5是示出該實(shí)施方式的參考圖。參考圖5,控制單元240可以對于內(nèi)存220分配三個(gè)區(qū)域,并且使用這三個(gè)區(qū)域作為用于原始文件的區(qū)域510、用于補(bǔ)丁文件的區(qū)域520和用于補(bǔ)丁數(shù)據(jù)的區(qū)域530??刂茊卧?40可以將將被打補(bǔ)丁的原始文件加載到原始文件區(qū)域510,將從補(bǔ)丁服務(wù)器100接收的補(bǔ)丁數(shù)據(jù)加載到補(bǔ)丁數(shù)據(jù)區(qū)域530,并且然后在補(bǔ)丁文件區(qū)域520中生成補(bǔ)丁文件。例如,控制單元240可以分析補(bǔ)丁數(shù)據(jù)區(qū)域530的補(bǔ)丁表,確定對應(yīng)于索引01和11的內(nèi)容用于打補(bǔ)丁,確定對應(yīng)的補(bǔ)丁內(nèi)容存儲在地址11001和11010處,并且基于加載到原始文件區(qū)域510的數(shù)據(jù)和加載到補(bǔ)丁數(shù)據(jù)區(qū)域530的數(shù)據(jù)在補(bǔ)丁文件區(qū)域520中生成補(bǔ)丁文件。即,控制單元240可以從原始文件讀取對應(yīng)于補(bǔ)丁表中沒有包括的索引的數(shù)據(jù),并且基于讀取的數(shù)據(jù)生成補(bǔ)丁文件。控制單元240可以針對對應(yīng)于補(bǔ)丁表中包括的索引的數(shù)據(jù)搜索補(bǔ)丁數(shù)據(jù),并且通過將找到的補(bǔ)丁數(shù)據(jù)寫入到補(bǔ)丁文件中來生成補(bǔ)丁文件。這里,控制單元240可以生成原始文件、補(bǔ)丁文件和補(bǔ)丁數(shù)據(jù),并且使用不同的方法將其加載到內(nèi)存220。例如,可以使用內(nèi)存池方法將原始文件加載到內(nèi)存220,可以使用緩沖器重疊池方法將補(bǔ)丁文件加載到內(nèi)存220,并且可以使用內(nèi)存文件映射方法將補(bǔ)丁數(shù)據(jù)加載到內(nèi)存220。其原因在于,如果使用相同的方法將數(shù)據(jù)加載到內(nèi)存220,則其它的加載處理可能受到在特定加載處理中發(fā)生的錯(cuò)誤的影響。此外,控制單元240可以在根據(jù)圖5中所公開的實(shí)施方式執(zhí)行從內(nèi)存220讀取原 始文件、補(bǔ)丁文件和補(bǔ)丁數(shù)據(jù)的處理或者將原始文件、補(bǔ)丁文件和補(bǔ)丁數(shù)據(jù)寫入到內(nèi)存220的處理時(shí)以不同的方式改變偏移。例如,當(dāng)讀取原始文件時(shí),控制單元240可以使用任意偏移移位方法。當(dāng)寫入補(bǔ)丁文件時(shí),控制單元240可以使用順序偏移增加方法。此外,當(dāng)讀取補(bǔ)丁數(shù)據(jù)時(shí),控制單元240可以使用順序偏移增加方法。如果如上所述地以不同的方式改變偏移,則其它處理不會受到在特定處理中發(fā)生的錯(cuò)誤的影響并且可以增加處理器的操作效率。在另一實(shí)施方式中,控制單元240可以使用臨時(shí)存儲器230執(zhí)行打補(bǔ)丁。圖6是示出使用臨時(shí)存儲器230打補(bǔ)丁的實(shí)施方式的參考圖。圖6中所示的實(shí)施方式對應(yīng)于改變原始文件數(shù)據(jù)的順序的打補(bǔ)丁的示例。參考圖6,控制單元240可以預(yù)先通過比較原始文件和補(bǔ)丁數(shù)據(jù)來測量原始文件的將被改變的部分的大小,并且在臨時(shí)存儲器230中分配對應(yīng)于測量的大小的空間。參考圖6中所示的示例,作為分析補(bǔ)丁數(shù)據(jù)的補(bǔ)丁表的結(jié)果,控制單元240確定需要改變原始文件的三個(gè)塊,請求臨時(shí)存儲器230中的對應(yīng)于這三個(gè)塊的大小的大小的空間,并且對于臨時(shí)存儲器230分配請求的大小的空間??刂茊卧?40可以使用分配的臨時(shí)存儲器230改變原始文件的數(shù)據(jù),并且基于改變后的數(shù)據(jù)生成補(bǔ)丁文件。這里,控制單元240可以使用輸出緩沖器內(nèi)存池方法將改變后的數(shù)據(jù)加載到臨時(shí)存儲器230。輸出緩沖器內(nèi)存池方法在從補(bǔ)丁錯(cuò)誤恢復(fù)方面是容易和快速的,這是因?yàn)楫?dāng)打補(bǔ)丁失敗時(shí),關(guān)于失敗的打補(bǔ)丁的信息被自動地記錄在文件上。圖6中所示的使用臨時(shí)存儲器230的補(bǔ)丁方法在存在大量用于打補(bǔ)丁的數(shù)據(jù)時(shí)是高效的。即,在參考圖5描述的補(bǔ)丁方法中,加載可以更快速地執(zhí)行,并且因此,整個(gè)補(bǔ)丁處理由于使用了內(nèi)存220而變得快速。然而,當(dāng)由于內(nèi)存220的實(shí)際容量有限而導(dǎo)致用于打補(bǔ)丁的數(shù)據(jù)的量超過內(nèi)存220的容量時(shí),不能夠使用圖5的補(bǔ)丁方法。相反地,在圖6中所示的補(bǔ)丁方法中,由于對于存儲裝置分配了臨時(shí)存儲器230并且然后執(zhí)行打補(bǔ)丁,因此能夠容易地執(zhí)行具有較大的大小的數(shù)據(jù)文件(例如,具有等于或大于IG的大的大小的補(bǔ)丁文件)的打補(bǔ)丁。在又一實(shí)施方式中,控制單元240可以確定用于打補(bǔ)丁的數(shù)據(jù)的大小,并且使用內(nèi)存220和臨時(shí)存儲器230中的至少一個(gè)來執(zhí)行打補(bǔ)丁。即,控制單元240可以使用圖5和圖6中所示的實(shí)施方式的組合來執(zhí)行打補(bǔ)丁。更具體地,當(dāng)接收到補(bǔ)丁數(shù)據(jù)時(shí),控制單元240可以檢查用于打補(bǔ)丁的數(shù)據(jù)的大小,并且檢查內(nèi)存220的當(dāng)前可用大小。如果數(shù)據(jù)的大小等于或小于內(nèi)存220的當(dāng)前可用大小,則控制單元240可以使用內(nèi)存220執(zhí)行打補(bǔ)丁。相反地,如果數(shù)據(jù)的大小大于內(nèi)存220的當(dāng)前可用大小,則控制單元240可以使用臨時(shí)存儲器230執(zhí)行打補(bǔ)丁。將在下面參考圖9更詳細(xì)地描述該實(shí)施方式。補(bǔ)丁數(shù)據(jù)存儲單元250可以暫時(shí)地存儲從補(bǔ)丁服務(wù)器100接收的補(bǔ)丁數(shù)據(jù)。例如,如果從補(bǔ)丁服務(wù)器100下載了補(bǔ)丁數(shù)據(jù),則控制單元240可以將該補(bǔ)丁數(shù)據(jù)存儲在補(bǔ)丁數(shù)據(jù)存儲單元250中,并且基于存儲的補(bǔ)丁數(shù)據(jù)使用內(nèi)存220和臨時(shí)存儲器230執(zhí)行打補(bǔ)丁。在實(shí)施方式中,補(bǔ)丁數(shù)據(jù)存儲單元250可以存儲關(guān)于執(zhí)行的打補(bǔ)丁的信息。例如,在執(zhí)行打補(bǔ)丁之后,控制單元240可以生成關(guān)于打補(bǔ)丁的信息(例如,關(guān)于補(bǔ)丁的版本、補(bǔ)丁日期和補(bǔ)丁容量的信息)并且將生成的信息提供給補(bǔ)丁數(shù)據(jù)存儲單元250。補(bǔ)丁數(shù)據(jù)存儲單元250可以存儲生成的信息。
哈希生成單元260可以生成用于接收到的數(shù)據(jù)的哈希值。例如,控制單元240可以控制哈希生成單元260從而在已經(jīng)完成打補(bǔ)丁之后,哈希生成單元260生成用于打補(bǔ)丁的數(shù)據(jù)的哈希值以便于檢查是否已經(jīng)正確地執(zhí)行了打補(bǔ)丁。控制單元240可以比較由哈希生成單元260生成的哈希值與補(bǔ)丁表中包括的哈希值,并且確定是否已經(jīng)正確地執(zhí)行了打補(bǔ)丁。圖7是示出由圖4的補(bǔ)丁客戶端200執(zhí)行的補(bǔ)丁方法的實(shí)施方式的流程圖。圖7中公開的補(bǔ)丁方法的實(shí)施方式表不使用內(nèi)存220執(zhí)行的打補(bǔ)丁的實(shí)施方式??刂茊卧?40可以在步驟S710從補(bǔ)丁服務(wù)器100接收數(shù)據(jù)并且在步驟S720分配用于打補(bǔ)丁的內(nèi)存220。這里,控制單元240可以將內(nèi)存220分區(qū)為用于原始文件、補(bǔ)丁數(shù)據(jù)和補(bǔ)丁文件的三個(gè)區(qū)域并且然后分配內(nèi)存220。控制單元240可以在步驟S730將原始文件和補(bǔ)丁數(shù)據(jù)加載到內(nèi)存220的區(qū)域。這里,控制單元240可以使用不同方法將原始文件和補(bǔ)丁數(shù)據(jù)加載到內(nèi)存220。例如,如果已經(jīng)使用內(nèi)存池方法將原始文件加載到內(nèi)存220,則可以使用文件映射內(nèi)存方法將補(bǔ)丁數(shù)據(jù)加載到內(nèi)存220。如果如上所述使用不同的方法加載數(shù)據(jù),則不需要執(zhí)行整個(gè)加載處理并且即使當(dāng)在特定加載方法中發(fā)生錯(cuò)誤時(shí)也能夠防止錯(cuò)誤的傳播??刂茊卧?40在步驟S740檢查是否已經(jīng)成功地執(zhí)行了加載。如果在特定數(shù)據(jù)中已經(jīng)發(fā)生了錯(cuò)誤(在步驟S740處為否),則控制單元240可以執(zhí)行僅加載對應(yīng)數(shù)據(jù)的處理。雖然在圖7的流程圖中,內(nèi)存220被示出為在步驟S720處進(jìn)行重分配并且錯(cuò)誤數(shù)據(jù)被示出為在步驟S730處被重加載,但是在一個(gè)實(shí)施方式中,能夠僅重加載數(shù)據(jù)而沒有分配內(nèi)存220。如果已經(jīng)成功地執(zhí)行了加載,則控制單元240可以在步驟S750處基于加載到內(nèi)存220的原始文件和補(bǔ)丁數(shù)據(jù)生成補(bǔ)丁文件。例如,控制單元240可以分析補(bǔ)丁數(shù)據(jù)的補(bǔ)丁表,將原始文件分為一個(gè)或多個(gè)部分(其內(nèi)容將在沒有改變的情況下進(jìn)行移動并且將基于補(bǔ)丁數(shù)據(jù)對該一個(gè)或多個(gè)部分執(zhí)行打補(bǔ)丁),并且在基于劃分分配給補(bǔ)丁文件的區(qū)域中生成補(bǔ)丁文件。這里,控制單元240可以逐個(gè)連續(xù)地或者一次全部地生成補(bǔ)丁文件。S卩,控制單元240可以在從分配給補(bǔ)丁文件的起點(diǎn)的內(nèi)存單元到分配給補(bǔ)丁文件的終點(diǎn)的內(nèi)存單元的范圍中從原始文件或補(bǔ)丁數(shù)據(jù)順序地讀取對應(yīng)的內(nèi)容,并且讀取內(nèi)容,從而生成補(bǔ)丁文件。在實(shí)施方式中,控制單元240可以針對其內(nèi)容將在沒有改變的情況下移動的一個(gè)或多個(gè)部分檢查原始文件,從原始文件讀取這些部分,一次寫入讀取到補(bǔ)丁文件的至少一部分中的這些部分,并且將補(bǔ)丁文件的內(nèi)容將移動到的一個(gè)或多個(gè)部分一次寫入補(bǔ)丁文件的至少一部分??刂茊卧?40可以在步驟S760針對錯(cuò)誤檢查獲得的補(bǔ)丁文件。這里,控制單元240可以使用補(bǔ)丁數(shù)據(jù)中包括的補(bǔ)丁表針對錯(cuò)誤檢查生成的補(bǔ)丁文件。例如,假設(shè)補(bǔ)丁表中包括用于補(bǔ)丁數(shù)據(jù)的哈希值,則控制單元240可以通過計(jì)算用于補(bǔ)丁文件的被補(bǔ)丁的部分的哈希值并且將被補(bǔ)丁的部分的哈希值與補(bǔ)丁表的哈希值進(jìn)行比較來運(yùn)行錯(cuò)誤檢查。如果不存在任何錯(cuò)誤(在步驟S770處為否),則控制單元240終止補(bǔ)丁處理。如果存在錯(cuò)誤(在步驟S770處為是),則控制單元240可以在步驟S780執(zhí)行錯(cuò)誤處理過程。例如,如果如上所述分配給內(nèi)存220的數(shù)據(jù)已經(jīng)丟失,則控制單元240可以重復(fù)再次分配內(nèi)存220并且再次加載數(shù)據(jù)的步驟S720至S760以便于再次執(zhí)行具有不同哈希值的部分的打補(bǔ)丁。作為另一示例,如果分配給內(nèi)存220的原始文件和補(bǔ)丁數(shù)據(jù)剩余在內(nèi)存中,則控制單元240可以基于原始文件和補(bǔ)丁數(shù)據(jù)執(zhí)行僅覆寫與錯(cuò)誤關(guān)聯(lián)的部分并且執(zhí)行錯(cuò)誤處理的步驟 S750 和 S760。雖然在上面的描述中,已經(jīng)參考圖7描述了內(nèi)存220被分區(qū)為三個(gè)區(qū)域并且執(zhí)行打補(bǔ)丁的示例,但是內(nèi)存220可以被分區(qū)為兩個(gè)區(qū)域并且可以執(zhí)行打補(bǔ)丁的另一示例也是可能的。即,控制單元240可以將內(nèi)存220分區(qū)為用于原始文件的區(qū)域和用于補(bǔ)丁數(shù)據(jù)的區(qū)域,從補(bǔ)丁數(shù)據(jù)讀取對應(yīng)于原始文件中需要改變的一個(gè)或多個(gè)部分的內(nèi)容,并且通過覆寫讀取的內(nèi)容來改變原始文件,從而生成補(bǔ)丁文件。圖8是示出由圖4的補(bǔ)丁客戶端執(zhí)行的補(bǔ)丁方法的另一實(shí)施方式的流程圖。圖8中公開的補(bǔ)丁方法的實(shí)施方式涉及使用臨時(shí)存儲器230執(zhí)行的打補(bǔ)丁的實(shí)施方式。控制單元240可以在步驟S810從補(bǔ)丁服務(wù)器100讀取數(shù)據(jù),并且在步驟S820測量用于打補(bǔ)丁的數(shù)據(jù)(即,原始文件中需要改變的數(shù)據(jù))的大小。在實(shí)施方式中,控制單元240可以基于補(bǔ)丁數(shù)據(jù)的補(bǔ)丁表測量數(shù)據(jù)的大小??刂茊卧?40可以在步驟S830分配對應(yīng)于將改變的數(shù)據(jù)的大小的容量的臨時(shí)存儲器230,并且在步驟S840將將改變的數(shù)據(jù)加載到分配的臨時(shí)存儲器中。在實(shí)施方式中,控制單元230可以分配臨時(shí)存儲器230,并且使用輸出緩沖器內(nèi)存池方法將將被改變的數(shù)據(jù)加載到分配的臨時(shí)存儲器。在輸出緩沖器內(nèi)存池方法中,當(dāng)打補(bǔ)丁失敗時(shí),在文件中自動地記錄關(guān)于失敗的補(bǔ)丁的信息。因此,錯(cuò)誤處理步驟S870至S890的執(zhí)行可以是很簡單的。
控制單元240在步驟S850檢查加載是否成功。如果已經(jīng)發(fā)生錯(cuò)誤(在步驟S850為否),則控制單元240可以執(zhí)行再次加載數(shù)據(jù)的步驟。雖然在圖8的流程圖中,臨時(shí)存儲器230被示出為在步驟S830被重分配并且將改變的數(shù)據(jù)被示出為在步驟S840進(jìn)行重加載,但是在實(shí)施方式中,可以僅重加載將改變的數(shù)據(jù)而沒有分配臨時(shí)存儲器230??刂茊卧?40可以在步驟S860基于加載到臨時(shí)存儲器230的數(shù)據(jù)生成補(bǔ)丁文件,并且在步驟S870對生成的補(bǔ)丁文件運(yùn)行錯(cuò)誤檢查。如果已經(jīng)發(fā)生了錯(cuò)誤(在步驟S880為是),則控制單元240可以在步驟S890執(zhí)行錯(cuò)誤處理過程。圖9是示出由圖4的補(bǔ)丁客戶端200執(zhí)行的補(bǔ)丁方法的又一實(shí)施方式的流程圖。圖9中所示的實(shí)施方式是基于圖7和圖8的實(shí)施方式的組合執(zhí)行的補(bǔ)丁方法的實(shí)施方式。參考圖9,控制單元240可以在步驟S910從補(bǔ)丁服務(wù)器100接收補(bǔ)丁數(shù)據(jù)并且檢查補(bǔ)丁數(shù)據(jù)。例如,控制單元240可以接收補(bǔ)丁數(shù)據(jù)并且然后檢查補(bǔ)丁數(shù)據(jù)的整體大小。
在檢查補(bǔ)丁數(shù)據(jù)之后,控制單元240可以在步驟S920計(jì)算內(nèi)存220的當(dāng)前可用空間。之后,控制單元240在步驟S930比較內(nèi)存220的可用空間和補(bǔ)丁數(shù)據(jù)的大小。如果內(nèi)存220的可用空間足夠,則使用內(nèi)存220執(zhí)行打補(bǔ)丁。相反地,如果內(nèi)存220的可用空間不夠,則使用臨時(shí)存儲器230執(zhí)行打補(bǔ)丁。在實(shí)施方式中,控制單元240可以在計(jì)算內(nèi)存220的可用空間時(shí)考慮將要返還的內(nèi)存空間。這可以由下面的等式I來表示內(nèi)存_總=內(nèi)存_允許+ (內(nèi)存_返還Xt)(I)參考等式1,在打補(bǔ)丁時(shí)可以使用的可用內(nèi)存空間“內(nèi)存_總”可以是當(dāng)前可用內(nèi)存空間“內(nèi)存_允許”和在特定時(shí)間內(nèi)將要返還的內(nèi)存空間“內(nèi)存_返還xt”的和。這里,特定時(shí)間內(nèi)將要返還的內(nèi)存空間可以由預(yù)計(jì)特定時(shí)間內(nèi)將要返還的內(nèi)存空間乘以特定幾率值t來表示。例如,假設(shè)預(yù)計(jì)在接收到補(bǔ)丁數(shù)據(jù)之后施加整個(gè)補(bǔ)丁所要花費(fèi)的時(shí)間是大約I分鐘,則如果確定了預(yù)計(jì)返還的內(nèi)存空間,那么控制單元240可以將預(yù)計(jì)I分鐘之內(nèi)將要返還的內(nèi)存空間設(shè)置為預(yù)計(jì)要返還的內(nèi)存空間“內(nèi)存_返還”。這里,幾率值t可以與預(yù)·計(jì)的返還時(shí)間成比例。例如,預(yù)計(jì)10秒鐘之內(nèi)將要返還的內(nèi)存空間“內(nèi)存_返還A”的幾率值t可以高于預(yù)計(jì)40秒內(nèi)將要返還的內(nèi)存空間“內(nèi)存_返還B”的幾率值。如果可用內(nèi)存空間等于或大于補(bǔ)丁數(shù)據(jù)的大小(在步驟S930為是),則控制單元240可以在步驟S940至S970使用內(nèi)存220來執(zhí)行打補(bǔ)丁。這里,由于已經(jīng)參考圖7描述了使用內(nèi)存220執(zhí)行打補(bǔ)丁的步驟,因此省略了其詳細(xì)描述。如果可用內(nèi)存空間小于補(bǔ)丁數(shù)據(jù)的大小(在步驟S930為否),則控制單元240可以在步驟S941至S971使用臨時(shí)存儲器230來執(zhí)行打補(bǔ)丁。這里,由于已經(jīng)參考圖8在上面描述了使用臨時(shí)存儲器230執(zhí)行打補(bǔ)丁的步驟,因此省略了其詳細(xì)描述。雖然已經(jīng)從圖9的流程圖中省略了錯(cuò)誤處理過程,但是可以與上述實(shí)施方式中一樣地執(zhí)行錯(cuò)誤處理過程?;谑褂脙?nèi)存220的圖7的補(bǔ)丁方法與使用臨時(shí)存儲器230的圖8的補(bǔ)丁方法執(zhí)行圖9中所示的實(shí)施方式。圖9中所示的實(shí)施方式指示首先執(zhí)行使用內(nèi)存220的補(bǔ)丁方法。即,如果所有補(bǔ)丁文件都被分配給內(nèi)存220,則使用內(nèi)存220快速地執(zhí)行打補(bǔ)丁。如果內(nèi)存220的容量小于補(bǔ)丁數(shù)據(jù)的總大小,則使用臨時(shí)存儲器230來執(zhí)行打補(bǔ)丁。因此,可以更快速地進(jìn)行大量補(bǔ)丁數(shù)據(jù)的打補(bǔ)丁操作。圖10是示出圖4的補(bǔ)丁客戶端200中執(zhí)行的補(bǔ)丁方法的又一實(shí)施方式的流程圖。圖10的實(shí)施方式對應(yīng)于基于圖7和圖8的實(shí)施方式的組合執(zhí)行的補(bǔ)丁方法的另一實(shí)施方式,并且涉及當(dāng)補(bǔ)丁數(shù)據(jù)包括多個(gè)文件時(shí)根據(jù)優(yōu)化的方法執(zhí)行用于打補(bǔ)丁的多個(gè)文件中的每一個(gè)文件的打補(bǔ)丁的實(shí)施方式。即,在圖9的實(shí)施方式中,基于整個(gè)補(bǔ)丁數(shù)據(jù)確定使用內(nèi)存220還是臨時(shí)存儲器230。在圖10的實(shí)施方式中,對于每個(gè)文件使用內(nèi)存220和臨時(shí)存儲器230中的任一個(gè)執(zhí)行包括多個(gè)文件的補(bǔ)丁文件的打補(bǔ)丁。參考圖10,控制單元240可以在步驟S1010從補(bǔ)丁服務(wù)器100接收補(bǔ)丁數(shù)據(jù),并且檢查補(bǔ)丁數(shù)據(jù)。在實(shí)施方式中,在接收包括用于打補(bǔ)丁的多個(gè)文件的補(bǔ)丁數(shù)據(jù)之后,控制單元240可以檢查多個(gè)文件中的每個(gè)文件的大小。在另一實(shí)施方式中,補(bǔ)丁數(shù)據(jù)可以包括關(guān)于多個(gè)文件的大小的信息,并且控制單元240可以基于該信息針對多個(gè)文件中的每個(gè)文件的大小檢查多個(gè)文件中的每個(gè)文件。
控制單元240可以在步驟S1020計(jì)算內(nèi)存220的當(dāng)前可用空間。在該情況下,控制單元240可以比較內(nèi)存220的可用空間與補(bǔ)丁數(shù)據(jù)中包括的每個(gè)文件的大小。相反地,控制單元240可以使用內(nèi)存220執(zhí)行具有等于或小于內(nèi)存220的可用容量的大小的文件的打補(bǔ)丁??刂茊卧?40可以使用臨時(shí)存儲器230執(zhí)行具有大于內(nèi)存220的可用容量的大小的文件的打補(bǔ)丁。這里,由于可以如圖9中所示地執(zhí)行內(nèi)存220的可用空間的計(jì)算,因此省略了其詳細(xì)描述??刂茊卧?40在步驟S1030檢查是否存在具有等于或小于內(nèi)存220的可用空間的大小的文件。如果存在這樣的文件(在步驟S1030為是),則控制單元24可以在步驟S1040至S1070使用內(nèi)存220執(zhí)行補(bǔ)丁數(shù)據(jù)中的這些文件的打補(bǔ)丁。這里,可以對于每個(gè)文件使用內(nèi)存220執(zhí)行補(bǔ)丁數(shù)據(jù)中的一些文件的打補(bǔ)丁的步驟。如果內(nèi)存220的可用空間大于兩個(gè)文件的大小,則控制單元240可以同時(shí)執(zhí)行兩個(gè)或更多文件的打補(bǔ)丁。由于已經(jīng)在上面參考圖7描述了使用內(nèi)存220執(zhí)行打補(bǔ)丁的詳細(xì)方法,因此將省略其詳細(xì)描述??刂茊卧?40可以在步驟S1041至S1071使用臨時(shí)存儲器230執(zhí)行均具有大于內(nèi)存220的可用空間的大小的補(bǔ)丁數(shù)據(jù)中的剩余文件的打補(bǔ)丁。例如,控制單元240可以計(jì)·算補(bǔ)丁數(shù)據(jù)的剩余文件的大小的總和,并且分配對應(yīng)于該總和的臨時(shí)存儲器230。由于已經(jīng)在上面參考圖8描述了使用分配的臨時(shí)存儲器230執(zhí)行打補(bǔ)丁的詳細(xì)方法,因此省略了其詳細(xì)描述。在圖10的實(shí)施方式中,使用內(nèi)存220和臨時(shí)存儲器230中的至少一個(gè)執(zhí)行包括多個(gè)文件的補(bǔ)丁數(shù)據(jù)的打補(bǔ)丁。因此,可以更快速地執(zhí)行打補(bǔ)丁。這里,控制單元240可以根據(jù)其計(jì)算性能并行地使用內(nèi)存220和臨時(shí)存儲器230執(zhí)行打補(bǔ)丁。即,控制單元240可以使用內(nèi)存220執(zhí)行均具有小于內(nèi)存220的可用空間的大小的一些文件的打補(bǔ)丁,并且同時(shí)使用臨時(shí)存儲器230執(zhí)行剩余的文件的打補(bǔ)丁。如果并行地執(zhí)行打補(bǔ)丁,則能夠顯著地減小執(zhí)行打補(bǔ)丁所花費(fèi)的時(shí)間。在所公開的技術(shù)中,通過最大化補(bǔ)丁客戶端的資源的利用能夠更快速且更高效地執(zhí)行打補(bǔ)丁。在所公開的技術(shù)中,能夠快速且可靠地執(zhí)行具有高容量的補(bǔ)丁文件的打補(bǔ)丁。在所公開的技術(shù)中,能夠根據(jù)用于打補(bǔ)丁的數(shù)據(jù)的大小使用優(yōu)化的補(bǔ)丁算法更快速地執(zhí)行打補(bǔ)丁。在所公開的技術(shù)中,如果在補(bǔ)丁處理中存在錯(cuò)誤,則通過僅修改錯(cuò)誤的部分,而不是修改用于打補(bǔ)丁的整個(gè)文件,能夠以資源有效且可容許錯(cuò)誤的方式執(zhí)行打補(bǔ)丁。雖然為了示出性目的而公開了本發(fā)明的優(yōu)選實(shí)施方式,但是本領(lǐng)域技術(shù)人員將了解的是,在不偏離如所附權(quán)利要求中公開的本發(fā)明的精神和范圍的情況下,能夠進(jìn)行各種修改、添加和替換。
權(quán)利要求
1.一種補(bǔ)丁方法,所述補(bǔ)丁方法在補(bǔ)丁客戶端中執(zhí)行,所述補(bǔ)丁客戶端能夠連接到補(bǔ)丁服務(wù)器并且包括存儲裝置和內(nèi)存,所述補(bǔ)丁方法包括下述步驟 (a)訪問所述補(bǔ)丁服務(wù)器并且從所述補(bǔ)丁服務(wù)器接收補(bǔ)丁數(shù)據(jù); (b)計(jì)算所述內(nèi)存的可用空間; (C)如果所述補(bǔ)丁數(shù)據(jù)的大小小于或等于所述內(nèi)存的所述可用空間,則使用所述內(nèi)存的所述可用空間執(zhí)行打補(bǔ)丁;以及 (d)如果所述補(bǔ)丁數(shù)據(jù)的所述大小大于所述內(nèi)存的所述可用空間,則對于所述存儲裝置分配對應(yīng)于所述補(bǔ)丁數(shù)據(jù)的所述大小的容量的臨時(shí)存儲器,并且使用分配的所述臨時(shí)存儲器執(zhí)行打補(bǔ)丁。
2.根據(jù)權(quán)利要求I所述的補(bǔ)丁方法,其中,所述補(bǔ)丁數(shù)據(jù)包括用于至少一個(gè)補(bǔ)丁文件的哈希值。
3.根據(jù)權(quán)利要求I所述的補(bǔ)丁方法,其中,步驟(b)包括 (bl)檢查所述內(nèi)存的當(dāng)前可用空間; (b2)計(jì)算在特定時(shí)間內(nèi)將返還的內(nèi)存空間;以及 (b3)通過計(jì)算所述當(dāng)前可用空間與所述將返還的內(nèi)存空間的和來計(jì)算所述內(nèi)存的所述可用空間。
4.根據(jù)權(quán)利要求3所述的補(bǔ)丁方法,其中,步驟(b2)包括下述步驟通過將所述將返還的內(nèi)存空間與幾率值相乘來計(jì)算所述特定時(shí)間內(nèi)將返還的內(nèi)存空間,其中,所述幾率值與所述將返還的內(nèi)存空間的預(yù)計(jì)返還時(shí)間成比例。
5.根據(jù)權(quán)利要求I所述的補(bǔ)丁方法,其中,步驟(c)包括下述步驟 (c-Ι)將所述內(nèi)存的所述可用空間分區(qū)為用于原始文件的第一區(qū)域,用于所述補(bǔ)丁數(shù)據(jù)的第二區(qū)域和用于補(bǔ)丁文件的第三區(qū)域,然后將所述第一區(qū)域、所述第二區(qū)域以及所述第三區(qū)域分別分配給所述原始文件、所述補(bǔ)丁數(shù)據(jù)和所述補(bǔ)丁文件; (c-2)分別將所述原始文件和所述補(bǔ)丁數(shù)據(jù)加載到所述第一區(qū)域和所述第二區(qū)域;以及 (c-3)使用加載的所述原始文件和所述補(bǔ)丁數(shù)據(jù)在所述第三區(qū)域中生成所述補(bǔ)丁文件。
6.根據(jù)權(quán)利要求5所述的補(bǔ)丁方法,其中,步驟(c-2)包括下述步驟使用不同的內(nèi)存加載方法加載所述原始文件和所述補(bǔ)丁數(shù)據(jù)。
7.根據(jù)權(quán)利要求5所述的補(bǔ)丁方法,其中,步驟(c)進(jìn)一步包括下述步驟 檢查是否已經(jīng)成功地執(zhí)行了所述步驟(c-2);以及 如果僅在特定數(shù)據(jù)中發(fā)生了錯(cuò)誤,則僅再次加載所述特定數(shù)據(jù)。
8.根據(jù)權(quán)利要求5所述的補(bǔ)丁方法,其中,所述步驟(c-3)包括 分析所述補(bǔ)丁數(shù)據(jù)中包括的補(bǔ)丁表;以及 將所述原始文件的至少一部分與所述原始文件的將打補(bǔ)丁的至少一部分區(qū)分開。
9.根據(jù)權(quán)利要求I所述的補(bǔ)丁方法,其中,步驟(d)包括下述步驟基于輸出緩沖器內(nèi)存池方法使用分配的所述臨時(shí)存儲器執(zhí)行打補(bǔ)丁。
10.根據(jù)權(quán)利要求I所述的補(bǔ)丁方法,其中,步驟(d)包括下述步驟 (dl)計(jì)算所述原始文件中將被改變的數(shù)據(jù)的大小;以及(d2)分配容量對應(yīng)于所述數(shù)據(jù)的計(jì)算的大小的所述臨時(shí)存儲器。
11.一種補(bǔ)丁服務(wù)器,所述補(bǔ)丁服務(wù)器被連接到補(bǔ)丁客戶端并且提供補(bǔ)丁數(shù)據(jù),所述補(bǔ)丁服務(wù)器包括 內(nèi)存; 哈希生成單元,所述哈希生成單元被構(gòu)造為生成用于接收到的數(shù)據(jù)的至少一個(gè)哈希值;以及 控制單元,所述控制單元被構(gòu)造為將原始文件和補(bǔ)丁文件加載到所述內(nèi)存,控制所述哈希生成單元,使得所述哈希生成單元將加載的所述原始文件與加載的所述補(bǔ)丁文件進(jìn)行比較并且生成用于差異的至少一個(gè)哈希值,生成包括生成的哈希值的補(bǔ)丁表,并且生成包括生成的所述補(bǔ)丁表的所述補(bǔ)丁數(shù)據(jù)。
12.根據(jù)權(quán)利要求11所述的補(bǔ)丁服務(wù)器,所述補(bǔ)丁服務(wù)器進(jìn)一步包括 關(guān)于所述補(bǔ)丁數(shù)據(jù)的信息,所述信息包括下述信息中的至少一種關(guān)于所述補(bǔ)丁數(shù)據(jù)的補(bǔ)丁版本的信息、關(guān)于所述補(bǔ)丁數(shù)據(jù)的總大小的信息以及關(guān)于所述補(bǔ)丁數(shù)據(jù)中包括的多個(gè)文件中的每個(gè)文件的大小的信息;以及 補(bǔ)丁數(shù)據(jù)存儲單元,所述補(bǔ)丁數(shù)據(jù)存儲單元被構(gòu)造為存儲所述補(bǔ)丁數(shù)據(jù)。
13.一種補(bǔ)丁客戶端,所述補(bǔ)丁客戶端能夠使用內(nèi)存和存儲裝置,并且訪問補(bǔ)丁服務(wù)器,接收補(bǔ)丁數(shù)據(jù)并且執(zhí)行打補(bǔ)丁,所述補(bǔ)丁客戶端包括 控制單元,所述控制單元用于將接收到的所述補(bǔ)丁數(shù)據(jù)的大小與所述內(nèi)存的可用空間進(jìn)行比較,如果所述存儲器的所述可用空間等于或大于接收到的所述補(bǔ)丁數(shù)據(jù)的大小,則使用所述內(nèi)存執(zhí)行打補(bǔ)丁,而如果所述內(nèi)存的所述可用空間小于接收到的所述補(bǔ)丁數(shù)據(jù)的大小,則對于所述存儲裝置分配對應(yīng)于所述補(bǔ)丁數(shù)據(jù)的大小的容量的臨時(shí)存儲器,然后使用分配的所述臨時(shí)存儲器執(zhí)行打補(bǔ)丁。
14.根據(jù)權(quán)利要求13所述的補(bǔ)丁客戶端,其中,如果所述內(nèi)存的所述可用空間等于或大于接收到的所述補(bǔ)丁數(shù)據(jù)的大小,則所述控制單元將所述內(nèi)存的所述可用空間分區(qū)為至少兩個(gè)區(qū)域,將原始文件和所述補(bǔ)丁數(shù)據(jù)加載到各自的分區(qū)后的區(qū)域,并且執(zhí)行打補(bǔ)丁。
15.根據(jù)權(quán)利要求13所述的補(bǔ)丁客戶端,其中,如果所述內(nèi)存的所述可用空間小于接收到的所述補(bǔ)丁數(shù)據(jù)的大小,則所述控制單元比較原始文件的大小與所述補(bǔ)丁數(shù)據(jù)的大小,預(yù)先測量所述原始文件中將被改變的至少一部分的大小,并且對于所述存儲裝置分配對應(yīng)于測量的大小的容量的臨時(shí)存儲器。
全文摘要
本發(fā)明提供了一種使用內(nèi)存和臨時(shí)存儲器的補(bǔ)丁方法及補(bǔ)丁服務(wù)器和客戶端。這里公開一種補(bǔ)丁方法。該補(bǔ)丁方法在補(bǔ)丁客戶端中執(zhí)行。補(bǔ)丁客戶端能夠連接到補(bǔ)丁服務(wù)器并且包括存儲裝置和內(nèi)存。補(bǔ)丁方法包括下述步驟(a)訪問補(bǔ)丁服務(wù)器并且從補(bǔ)丁服務(wù)器接收補(bǔ)丁數(shù)據(jù);(b)計(jì)算內(nèi)存的可用空間;(c)如果補(bǔ)丁數(shù)據(jù)的大小小于或等于內(nèi)存的可用空間,則使用內(nèi)存的可用空間執(zhí)行打補(bǔ)?。灰约?d)如果補(bǔ)丁數(shù)據(jù)的大小大于內(nèi)存的可用空間,則對于存儲裝置分配對應(yīng)于補(bǔ)丁數(shù)據(jù)的大小的容量的臨時(shí)存儲器,并且使用分配的臨時(shí)存儲器執(zhí)行打補(bǔ)丁。
文檔編號G06F9/445GK102945170SQ20121033303
公開日2013年2月27日 申請日期2012年9月10日 優(yōu)先權(quán)日2011年12月30日
發(fā)明者張星國, 劉光喜, 成周弦, 陳譓瑱, 李允珩 申請人:新游游戲株式會社