專(zhuān)利名稱(chēng):用于更新壓縮只讀文件系統(tǒng)的改進(jìn)的容錯(cuò)方法及裝置的制作方法
用于更新壓縮只讀文件系統(tǒng)的改進(jìn)的容錯(cuò)方法及裝置相關(guān)申請(qǐng)本申請(qǐng)涉及2007 年 6 月 6 日提交的題為"BINARY-LEVEL UPDATE 0FC0MPRESSED READ-ONLY FILE SYSTEMS”(壓縮只讀文件系統(tǒng)的二進(jìn)制級(jí)更新)的美國(guó)專(zhuān)利申請(qǐng)?zhí)?60/933,608、以及 2008 年 6 月 6 日提交的題為 “BINARY-LEVEL UPDATE OF COMPRESSED READ-ONLY FILESYSTEMS”(壓縮只讀文件系統(tǒng)的二進(jìn)制級(jí)更新)的美國(guó)專(zhuān)利申請(qǐng)?zhí)朠CT/ US2008/066, 167,這兩個(gè)申請(qǐng)通過(guò)引用整體結(jié)合于此。
背景技術(shù):
本發(fā)明一般涉及用于更新存儲(chǔ)在具有非易失性存儲(chǔ)器的電子設(shè)備中的軟件的技 術(shù),且尤其涉及支持對(duì)比如非易失性閃存型存儲(chǔ)器之類(lèi)的電子設(shè)備的存儲(chǔ)器中的固件、軟 件、配置參數(shù)和文件系統(tǒng)的更新的處理的容錯(cuò)方法和系統(tǒng)。嵌入式電子設(shè)備有時(shí)具有存儲(chǔ)在諸如EEPROM之類(lèi)的閃存型非易失性(“閃存”) 存儲(chǔ)器中的文件系統(tǒng)。并且這些文件系統(tǒng)經(jīng)常被配置成用于閃存的最佳使用的壓縮只讀文 件系統(tǒng)。文件、可執(zhí)行碼和其它類(lèi)型的數(shù)據(jù)通常被解壓并且加載到RAM中以供主機(jī)系統(tǒng)引 用或執(zhí)行。周期性地更新這些存儲(chǔ)文件系統(tǒng)中的數(shù)據(jù)以便例如升級(jí)當(dāng)前軟件來(lái)獲得增加的 功能或者簡(jiǎn)單地修補(bǔ)軟件代碼中的隱錯(cuò)可能是非常有用的。并且,這些軟件升級(jí)或隱錯(cuò)修 補(bǔ)通常經(jīng)由無(wú)線連接或通過(guò)有線因特網(wǎng)連接發(fā)送。文件系統(tǒng)的原始版本在此被稱(chēng)為Vl (或版本1),而經(jīng)更新的版本為V2 (或版本 2)。在一些情況中,V2與Vl非常相似或與Vl相同。在該情況中,更新可通過(guò)僅發(fā)送在Vl 與V2之間改變的信息來(lái)完成。在此稱(chēng)為“生成器”的工具接受Vl和V2作為輸入,并且產(chǎn) 生電子設(shè)備中使用的信息以將版本Vl轉(zhuǎn)換或變換成版本V2。該信息可被存儲(chǔ)在此處稱(chēng)為 更新包(UP)的文件中,其可被發(fā)送到要被更新的所有嵌入式電子設(shè)備。這些電子設(shè)備的每 一個(gè)包含在此被稱(chēng)為“更新代理”的程序,其將UP應(yīng)用于版本VI,從而轉(zhuǎn)換Vl以產(chǎn)生版本 V2。最直接類(lèi)型的軟件更新是在緩存(RAM)中創(chuàng)建每個(gè)改變的閃存塊的新版本,并且 然后將該數(shù)據(jù)寫(xiě)入其在非易失性存儲(chǔ)器中的最終位置。通常,數(shù)據(jù)塊的經(jīng)更新的版本中的 數(shù)據(jù)取決于其原始版本中的數(shù)據(jù)。如果在經(jīng)更新的數(shù)據(jù)正被寫(xiě)入非易失性存儲(chǔ)器時(shí)斷電, 則這會(huì)引起問(wèn)題,因?yàn)殡S后緩存中的經(jīng)更新的版本丟失,并且創(chuàng)建新數(shù)據(jù)塊所需的原始數(shù) 據(jù)可能被破壞。一旦設(shè)備被破壞,則用戶經(jīng)常面對(duì)將該設(shè)備物理地帶到存儲(chǔ)器可被擦除并 且被完全重新制作映像的服務(wù)中心的需要。雖然以下討論主要集中于移動(dòng)電子設(shè)備,比如移動(dòng)手機(jī)、蜂窩電話、個(gè)人數(shù)字助理 (PDA)、MP3播放器、尋呼機(jī)以及手持式個(gè)人計(jì)算機(jī),但是這作為示例而不作為具體限制。在 此包含的示教還可應(yīng)用于具有處理器和包含軟件、固件、配置信息、數(shù)據(jù)文件等的非易失性 存儲(chǔ)器的各種其它電子設(shè)備,對(duì)于這些設(shè)備而言存儲(chǔ)器內(nèi)容的更新可能是合乎需要的。通過(guò)將這些系統(tǒng)與如在本申請(qǐng)的剩余部分中參考附圖所闡述的本發(fā)明的代表性 實(shí)施例進(jìn)行比較,常規(guī)和傳統(tǒng)方法的進(jìn)一步限制和缺點(diǎn)將對(duì)本領(lǐng)域的技術(shù)人員變得顯而易 見(jiàn)。
附圖簡(jiǎn)述圖IA是根據(jù)本發(fā)明的代表性實(shí)施例的支持比如移動(dòng)手機(jī)或個(gè)人數(shù)字助理之類(lèi)的 電子設(shè)備的非易失性存儲(chǔ)器的遠(yuǎn)程更新的示例性網(wǎng)絡(luò)的透視框圖。圖IB是根據(jù)本發(fā)明的代表性實(shí)施例的包括處理器的示例性計(jì)算機(jī)系統(tǒng)的透視框 圖,該處理器訪問(wèn)第一存儲(chǔ)器映像以產(chǎn)生第二存儲(chǔ)器映像,該第二存儲(chǔ)器映像被排列為多 個(gè)獨(dú)立可解壓存儲(chǔ)器塊以便存儲(chǔ)在電子設(shè)備的存儲(chǔ)器中,其中電子設(shè)備可與例如圖IA的 電子設(shè)備相對(duì)應(yīng)。圖2A和2B是根據(jù)本發(fā)明的代表性實(shí)施例在2A中示出示例性壓縮閃存以及在2B 中示出解壓版本的框圖。圖3示出說(shuō)明數(shù)據(jù)塊通常如何組織在閃存中的示例性壓縮存儲(chǔ)器布局的框圖。圖4是示出根據(jù)本發(fā)明的代表性實(shí)施例的處理第一存儲(chǔ)器映像以產(chǎn)生中間存儲(chǔ) 器映像的示例性方法的操作流程圖,該第一存儲(chǔ)器映像包括多個(gè)壓縮子塊以及未壓縮子 塊,該中間存儲(chǔ)器映像包括被排列為多個(gè)獨(dú)立壓縮存儲(chǔ)器塊的經(jīng)更新的第一存儲(chǔ)器圖像。圖5示出根據(jù)本發(fā)明的代表性實(shí)施例的一般說(shuō)明在解壓和重新壓之后的存儲(chǔ)器 的子塊的組織的框圖。圖6示出根據(jù)本發(fā)明的代表性實(shí)施例的用于處理中間存儲(chǔ)器映像以產(chǎn)生經(jīng)更新 的存儲(chǔ)器映像的壓縮格式的最終版本的示例性方法的流程圖。圖7是根據(jù)本發(fā)明的代表性實(shí)施例的示出在更新的階段1期間發(fā)生的系統(tǒng)關(guān)閉之 后將如何實(shí)現(xiàn)示例性恢復(fù)過(guò)程的流程圖。圖8示出根據(jù)本發(fā)明的代表性實(shí)施例的在存儲(chǔ)器映像的更新的初始階段期間在 系統(tǒng)關(guān)閉/電源故障期間已被部分更新和破壞的存儲(chǔ)器映像的非常小的一部分。圖9示出顯示根據(jù)本發(fā)明的代表性實(shí)施例的在存儲(chǔ)器映像的更新的階段2期間發(fā) 生的系統(tǒng)關(guān)閉之后將如何實(shí)現(xiàn)示例性恢復(fù)過(guò)程的另一流程圖。
圖10是根據(jù)本發(fā)明的代表性實(shí)施例的示出對(duì)其中一個(gè)塊已在存儲(chǔ)器映像的更新 的階段2期間被破壞的典型數(shù)據(jù)塊發(fā)生了什么的示意性示圖。圖11是根據(jù)本發(fā)明的代表性實(shí)施例的示出如果采用數(shù)據(jù)塊的分組來(lái)最小化處理 更新所需的RAM的大小則如何創(chuàng)建重疊塊的示例性過(guò)程的流程圖。詳細(xì)描述本發(fā)明的各代表性實(shí)施例可在更新期間使用有線或無(wú)線通信鏈路來(lái)使用,這些通 信鏈路比如有公共交換電話網(wǎng)、有線局域或廣域網(wǎng)、內(nèi)聯(lián)網(wǎng)、因特網(wǎng)、以及無(wú)線蜂窩、尋呼、 局域、個(gè)域、以及諸如那些稱(chēng)為Wi-Fi、IEEE 802. lla/b/g/n兼容網(wǎng)絡(luò)之類(lèi)的短程網(wǎng)絡(luò)、稱(chēng) 為藍(lán)牙的短程無(wú)線技術(shù)、以及類(lèi)似類(lèi)型的通信鏈路。諸如以上所描述的用于更新電子設(shè)備中的存儲(chǔ)器的信息使用更新包來(lái)傳遞,該更 新包包括可由電子設(shè)備中的固件和/或軟件來(lái)執(zhí)行的一組指令以將電子設(shè)備中的軟件、固 件和/或數(shù)據(jù)的現(xiàn)有版本變換或轉(zhuǎn)換成軟件、固件、和/或數(shù)據(jù)的新的或經(jīng)更新的版本。在 一些代表性實(shí)施例中,這種更新包還包含與更新有關(guān)的元數(shù)據(jù)。在示例性實(shí)施例中,使用通常稱(chēng)為“增量壓縮”的更新方法來(lái)執(zhí)行更新。圖1中的 更新包116包括由電子設(shè)備107中的“更新代理”所使用的“生成器”生成的指令序列,以通 過(guò)將版本Vl轉(zhuǎn)換或變換成V2來(lái)重新創(chuàng)建存儲(chǔ)器內(nèi)容的經(jīng)更新的版本。多個(gè)不同類(lèi)型的指
6令可被包含在更新包中。一種指令類(lèi)型是“復(fù)制”指令,其將同樣的字節(jié)從原始版本Vl移 動(dòng)到經(jīng)更新的版本V2。例如,如果10,000個(gè)連貫字節(jié)的序列對(duì)版本Vl和版本V2兩者是共 同的,則生成器可發(fā)出僅幾個(gè)字節(jié)長(zhǎng)的單復(fù)制指令來(lái)將所有10,000個(gè)字節(jié)移動(dòng)到版本V2。 其它類(lèi)型的指令可被用來(lái)明確地列出哪些字節(jié)要插入到版本V2中。生成器可為不能使用 復(fù)制命令來(lái)高效地編碼的材料使用這些其它類(lèi)型的指令。例如,短字節(jié)序列因?yàn)槭褂脧?fù)制 指令所涉及的開(kāi)銷(xiāo)而可通過(guò)逐字地發(fā)送它們來(lái)被更高效地編碼。閃存型存儲(chǔ)器(其中Vl和稍后的V2可被永久地儲(chǔ)存)是通常組織成數(shù)據(jù)塊的可 重寫(xiě)非易失性存儲(chǔ)器,數(shù)據(jù)塊對(duì)于某些類(lèi)型的閃存可以是最小的可寫(xiě)數(shù)據(jù)單元。對(duì)于某些 類(lèi)型的閃存,塊也是最小可讀數(shù)據(jù)單元并且通常必需被完整地寫(xiě)入。為此,更新閃存由一次 對(duì)一個(gè)閃存塊寫(xiě)入數(shù)據(jù)塊構(gòu)成,如以下更詳細(xì)討論的。生成器確定更新閃存塊的次序。理想地,生成器確定最佳排序以使代理僅在其中 的材料不再為V2中的任何其它內(nèi)容所需時(shí)更新閃存塊。這不總是可能的,所以通常需要如 由所謂的次序管理器所確定的折衷來(lái)為特定版本Vl和版本V2確定最佳次序。生成器的另一功能是產(chǎn)生具有最小字節(jié)數(shù)的更新包,因?yàn)閭鬏敃r(shí)間/帶寬經(jīng)常是 有限的,并且最終用戶可能在等待更新完成。很明顯,更新包越大,則下載該更新的傳輸時(shí) 間就越長(zhǎng)。生成器和更新代理一起必需支持容錯(cuò),以使如果更新過(guò)程被意外地中斷則電子 設(shè)備優(yōu)雅地恢復(fù)且沒(méi)有存儲(chǔ)器內(nèi)容的破壞。由于電子設(shè)備的可靠性完全取決于操作系統(tǒng)代 碼,所以更新過(guò)程是容錯(cuò)的以便于在文件的更新期間不破壞存儲(chǔ)器的內(nèi)容是迫切的。否則, 主機(jī)系統(tǒng)沒(méi)有底層操作系統(tǒng)代碼的完全重新映像制作的情況下可能不會(huì)工作。這不是所期 望的事件。例如,如果正被升級(jí)的電子設(shè)備中的電源或電池在更新代理處于將版本V2寫(xiě)入 閃存的更新過(guò)程的同時(shí)被中斷或耗盡,則更新代理所蓋寫(xiě)的版本Vl的一部分在用戶最終 恢復(fù)功率或?qū)﹄姵刂匦鲁潆姴⒗^續(xù)進(jìn)行更新過(guò)程時(shí)將不再是可用的。因?yàn)樵跊](méi)用過(guò)的系統(tǒng) 中,版本Vl的該部分可能已被更新代理需要來(lái)從版本Vl和更新包創(chuàng)建版本V2,所以在只讀 文件系統(tǒng)的情況下,在現(xiàn)有技術(shù)中沒(méi)有方法在沒(méi)有某種形式的文件破壞的情況下繼續(xù)更新 過(guò)程。只讀文件系統(tǒng)的一個(gè)示例是由Phillip Lougher創(chuàng)建的“squashfs” (參見(jiàn)http:// squashfs. sourceforRe. net/)。文件破壞可能不僅破壞存儲(chǔ)器單元,而且還可能導(dǎo)致電子 設(shè)備本身留在不能用的狀態(tài)。然而,根據(jù)本發(fā)明的生成器補(bǔ)償這種Vl可用性的缺乏。例 如,如果生成器檢測(cè)到版本Vl的一部分在更新過(guò)程期間的特定時(shí)間不可用,則次序管理器 可通過(guò)安排不可用材料不被引用來(lái)補(bǔ)償。圖IA是支持在比如移動(dòng)手機(jī)或PDA之類(lèi)的主機(jī)系統(tǒng)(電子設(shè)備107)內(nèi)的非易失 性存儲(chǔ)器的遠(yuǎn)程更新的示例性網(wǎng)絡(luò)105的透視框圖。電子設(shè)備107可支持可包含需要被糾 正的軟件/固件錯(cuò)誤、或者可通過(guò)更新軟件/固件來(lái)提供附加特征/益處的多個(gè)特征和/或 應(yīng)用。電子設(shè)備107可被用來(lái)使用電子設(shè)備107中的瀏覽器直接經(jīng)由客戶關(guān)懷服務(wù)器157、 或者經(jīng)由未示出的客戶服務(wù)代表(CSR)請(qǐng)求對(duì)軟件/固件的更新。CSR可使用電子設(shè)備107 通過(guò)在必要時(shí)檢索存儲(chǔ)在電子設(shè)備107的存儲(chǔ)器中的一個(gè)或多個(gè)診斷管理對(duì)象(M0)、并且 通過(guò)向電子設(shè)備107發(fā)送來(lái)自遠(yuǎn)程服務(wù)器的采用例如一個(gè)或多個(gè)UP的形式的更新信息來(lái) 向客戶提供服務(wù)。這些更新包包括可由電子設(shè)備107中的軟件/固件代碼執(zhí)行/解釋的指 令,這些指令在電子設(shè)備107中將軟件/固件的第一版本轉(zhuǎn)換或變換成軟件/固件的第二版本。在一些實(shí)施例中,(一個(gè)或多個(gè))更新包還包含元數(shù)據(jù)且優(yōu)選地包含校驗(yàn)和信息。如圖1A中所示,網(wǎng)絡(luò)105包括電子設(shè)備107、設(shè)備管理(DM)服務(wù)器109、供應(yīng)服務(wù) 器129、客戶關(guān)懷服務(wù)器157、以及下載服務(wù)器151。雖然未在圖1A中示出,但是本發(fā)明還可 包括比如診斷服務(wù)器、以及自我關(guān)懷網(wǎng)站/門(mén)戶之類(lèi)的其它應(yīng)用服務(wù)器。電子設(shè)備107能 夠分別經(jīng)由通信接口 169、以及通信路徑143、153、155和145與DM服務(wù)器109、下載服務(wù)器 151、客戶關(guān)懷服務(wù)器157、以及供應(yīng)服務(wù)器129通信。雖然通信路徑143、153、155、145通常 在圖1A中示為在設(shè)備和它們相應(yīng)的服務(wù)器之間的單獨(dú)路徑,但是這僅是為了說(shuō)明的目的。 通信路徑143、153、155、145可被組合到一個(gè)或多個(gè)路徑中,這些路徑可包括比如,僅舉數(shù) 例,局域網(wǎng)、公共交換電話網(wǎng)、無(wú)線個(gè)人、局域或廣域網(wǎng)、以及蜂窩或?qū)ず艟W(wǎng)絡(luò)等有線或無(wú)線 通信路徑。雖然未在圖1A中明確地示出,但是相關(guān)領(lǐng)域的普通技術(shù)人員將認(rèn)識(shí)到通信接口 169與(一個(gè)或多個(gè))所選類(lèi)型的通信路徑143、153、155、145兼容。還如在圖1A中所示,電子設(shè)備107包括處理器166、隨機(jī)存取存儲(chǔ)器(RAM) 165、以 及非易失性存儲(chǔ)器(NVM) 111。NVM 111可包括例如NAND或NOR型閃存或其它適當(dāng)類(lèi)型的 NVM。NVM 111可包含電子設(shè)備107的多個(gè)軟件/固件代碼組件,這些組件包括例如應(yīng)用軟 件127、設(shè)備管理(DM)客戶端163、更新包/更新包陣列116、只讀文件系統(tǒng)(R0FS) 118、供 應(yīng)客戶端123、切換(hand-off)模塊121、操作系統(tǒng)(OS) 119、固件117以及一個(gè)或多個(gè)更新 代理115。附加的軟件/固件代碼組件也可存在于RAM 165和NVM111中。術(shù)語(yǔ)“代碼”在 此可被用來(lái)表示可執(zhí)行指令、操作數(shù)數(shù)據(jù)、配置參數(shù)、以及存儲(chǔ)在電子設(shè)備107的存儲(chǔ)器中 的其它信息中的一個(gè)或多個(gè),并且術(shù)語(yǔ)“更新包目錄”可與術(shù)語(yǔ)“更新包陣列”互換地使用 以指包括多個(gè)更新包的所接收到更新信息。電子設(shè)備107還可包括接口電路(未示出)以 啟用用戶標(biāo)識(shí)模塊(SIM)卡167的可操作連接,該卡167可根據(jù)在本文中稍后描述的本發(fā) 明的各方面來(lái)使用。圖1A中的電子設(shè)備107處理由諸如下載服務(wù)器151之類(lèi)的遠(yuǎn)程服務(wù)器傳遞的更 新包(例如,更新包陣列116),以更新電子設(shè)備107的存儲(chǔ)器中的固件/軟件、數(shù)據(jù)和配置 信息。這種更新包包括更新信息,更新信息包括例如描述更新、校驗(yàn)和、以及可由例如圖1A 的更新代理115等一個(gè)或多個(gè)更新代理執(zhí)行的指令的元數(shù)據(jù)。更新代理115處理一組可執(zhí) 行指令,該組指令被用作壓縮手段來(lái)對(duì)電子設(shè)備107中的固件、軟件、數(shù)據(jù)和/或配置參數(shù) 的現(xiàn)有/第一版本VI與經(jīng)更新的/第二版本V2之間的差異進(jìn)行編碼。可執(zhí)行指令可被匯 編成要被傳送到設(shè)備以供在更新存儲(chǔ)器111時(shí)使用的一個(gè)或多個(gè)更新包。該設(shè)備中的一個(gè) 或多個(gè)更新代理115處理來(lái)自更新包的可執(zhí)行指令的相應(yīng)部分。電子設(shè)備107還可從例如 設(shè)備管理服務(wù)器109、客戶關(guān)懷服務(wù)器157、和/或供應(yīng)服務(wù)器129接收供應(yīng)信息以修補(bǔ)配 置問(wèn)題或重新配置軟件和硬件。除了以上所述的那些元件,電子設(shè)備107可包括便于遠(yuǎn)程診斷的所下載的診斷客 戶端(未示出)、以及便于俘獲設(shè)置和所收集信息的檢索的俘獲客戶端(未示出)。在這些 實(shí)施例中,DM客戶機(jī)163與DM服務(wù)器109、診斷客戶端和/或俘獲客戶端交互以從DM服務(wù) 器109接收DM命令并且在設(shè)備107中實(shí)現(xiàn)它們。下載服務(wù)器151被用來(lái)下載固件和軟件 更新(例如,更新包形式的更新信息)。下載服務(wù)器151還可被用來(lái)下載比如上述的診斷客 戶端等新的固件/軟件,其可然后被安裝到電子設(shè)備107中并被激活。如結(jié)合圖1A所簡(jiǎn)單描述的,電子設(shè)備107接收供一個(gè)或多個(gè)更新代理(例如,更新代理115)處理來(lái)轉(zhuǎn)換/變換軟件(例如,應(yīng)用軟件127)和/或固件(例如,固件117) 以在電子設(shè)備中產(chǎn)生經(jīng)更新的軟件/固件的更新信息(例如,作為更新包)。更新代理的每 一個(gè)被適當(dāng)?shù)匕才懦商幚碛糜诟码娮釉O(shè)備107的存儲(chǔ)器中的不同類(lèi)型/格式的軟件、固 件、用戶數(shù)據(jù)、以及配置參數(shù)的不同類(lèi)型的更新信息。在這種實(shí)施例中,所接收的更新包的 每一個(gè)可在設(shè)備107中由(一個(gè)或多個(gè))更新代理115中的適當(dāng)一個(gè)來(lái)處理以更新存儲(chǔ)器 111中的關(guān)聯(lián)類(lèi)型的信息。普通文件系統(tǒng)具有創(chuàng)建、修改和刪除各個(gè)文件的能力。這使得更新文件相對(duì)直截 了當(dāng),因?yàn)楦麓?15可每次修改一個(gè)文件、而不考慮其它文件。然而,一些文件系統(tǒng)是 “只讀”文件系統(tǒng)(R0FS),這意味著它們不是容易地允許各個(gè)文件被添加、刪除、或修改(并 且因此命名為“只讀”)。這些文件系統(tǒng)對(duì)于存儲(chǔ)不需要被經(jīng)常更新的文件(例如,在OS中 的系統(tǒng)文件)是有用的。此外,只讀文件系統(tǒng)借助于簡(jiǎn)化的數(shù)據(jù)結(jié)構(gòu)和壓縮通常以可能的 最緊湊方式來(lái)組織。并且,一般而言,可能沒(méi)有方法來(lái)將例如100字節(jié)添加到文件的末尾而 不移動(dòng)緊接著它的文件。圖1B是包括處理器176的示例性計(jì)算機(jī)系統(tǒng)170的透視框圖,該處理器176訪問(wèn) 第一存儲(chǔ)器映像172以產(chǎn)生第二存儲(chǔ)器映像174,該第二存儲(chǔ)器映像174被排列成多個(gè)獨(dú)立 可解壓存儲(chǔ)器塊以便存儲(chǔ)在電子設(shè)備180的存儲(chǔ)器中,電子設(shè)備180可與例如圖1A的電子 設(shè)備107相對(duì)應(yīng)。圖1B示出第一存儲(chǔ)器映像172,其可以是由例如電子設(shè)備107的制造商 或者第三方軟件開(kāi)發(fā)商生產(chǎn)的存儲(chǔ)器映像。第一存儲(chǔ)器映像172可包含固件和/或只讀文 件系統(tǒng)。第一存儲(chǔ)器映像172是比如圖1A的電子設(shè)備107的NVM 111等電子設(shè)備的非易 失性存儲(chǔ)器的副本。例如使用諸如圖1A的DM服務(wù)器109之類(lèi)的設(shè)備管理服務(wù)器對(duì)第一存 儲(chǔ)器映像172的更新可通過(guò)處理第一存儲(chǔ)器映像172來(lái)產(chǎn)生被排列成可解壓的多個(gè)存儲(chǔ)器 塊的第二存儲(chǔ)器映像174來(lái)實(shí)現(xiàn)。術(shù)語(yǔ)“獨(dú)立可解壓”在此被用來(lái)表示特定存儲(chǔ)器塊中的 數(shù)據(jù)可在不解壓來(lái)自另一存儲(chǔ)器塊的數(shù)據(jù)的情況下解壓。以此方式產(chǎn)生的存儲(chǔ)器映像的當(dāng) 前或原始版本VI可由被稱(chēng)為生成器的軟件工具與該存儲(chǔ)器映像的第二或更新版本一起處 理,以產(chǎn)生用于更新諸如圖1A的電子設(shè)備107之類(lèi)的電子設(shè)備中的存儲(chǔ)器的內(nèi)容的更新信 息。使用第一存儲(chǔ)器映像來(lái)產(chǎn)生這種第二存儲(chǔ)器映像的過(guò)程的細(xì)節(jié)在下文中提供。圖2A和2B是示例性文件系統(tǒng)安排的框圖。圖2A示出具有三個(gè)文件f 1 (212)、 f2(214)和f3(216)的文件系統(tǒng)的“原始”版本V1210,而圖2B示出該文件系統(tǒng)的示例性 “新”版本V2 (220)。如這些附圖中所示,f2文件(214和224)和f3文件(216和226)從 VI到V2未改變,除了 f2和f3的位置在存儲(chǔ)器中被上移(如圖2B中所示)以容納添加到 在V2中被示為222的H文件(212)的末尾的數(shù)據(jù)字節(jié)。用于更新只讀文件系統(tǒng)的最直接的方法是使更新代理創(chuàng)建在版本V2中保持所有 文件的完全新的文件系統(tǒng)映像,并且然后將它寫(xiě)入例如圖1A中的閃存111中。這可能是過(guò) 度耗時(shí)的,尤其是如果文件系統(tǒng)的僅一小部分已改變,但是更重要的是在有限閃存容量或 者甚至有限RAM容量的情況中經(jīng)常是不可能的。雖然RAM 165經(jīng)??捎糜谂R時(shí)保持完全新 的文件映像,但是它不能被用于該用途,因?yàn)槠鋬?nèi)容將在電源故障時(shí)被擦掉。(2008年6月 6日提交的以上引用的美國(guó)專(zhuān)利申請(qǐng)?zhí)朠CT/US2008/066,167描述了一種用于處理需要設(shè) 置特別準(zhǔn)備映像的壓縮R0FS的容錯(cuò)方法。在此所描述的本發(fā)明表示對(duì)該系統(tǒng)和方法的替 換。)
壓縮R0FS可潛在地具有壓縮數(shù)據(jù)的許多獨(dú)立區(qū)域,它們可能被未壓縮數(shù)據(jù)或填 充字節(jié)隔開(kāi)。這在圖3中示出,圖3是存儲(chǔ)在閃存中的文件系統(tǒng)320的框圖,該文件系統(tǒng)被 組織成四個(gè)壓縮數(shù)據(jù)區(qū)域仏、(、0和朽,分別為301、303、304和306,以及兩個(gè)原始(未壓 縮)數(shù)據(jù)區(qū)域(B和E),分別為302和305,或通過(guò)填充字節(jié)來(lái)組織。這些壓縮和未壓縮數(shù) 據(jù)區(qū)域被存儲(chǔ)在圖3中由閃存塊邊界FBB1、FBB2和FBB3描繪的四個(gè)單獨(dú)的閃存塊區(qū)域中。 只讀文件系統(tǒng)的每一壓縮或未壓縮區(qū)域在此被稱(chēng)為“子塊”。通常文件映像作為一個(gè)或多個(gè) 連貫子塊(如圖3中所示的A 301到F 306)來(lái)存儲(chǔ)。如果文件系統(tǒng)被存儲(chǔ)在閃存中,則通 常閃存塊邊界不必與子塊邊界重合并且通常不這樣做。結(jié)果,在該配置中更新數(shù)據(jù)具有潛 在問(wèn)題,因?yàn)橥ǔiW存塊中的數(shù)據(jù)以某一任意次序來(lái)更新。例如,在圖3中,包含子塊C和D 的部分的第二閃存塊(FBB1與FBB2之間)可以按一順序在包含僅子塊D 304的一部分的 第三閃存塊之前更新。這可能使得在第三閃存塊中檢索D的一部分變得困難。原因是許多 常用的壓縮方法是有條件的,這意味著特定字節(jié)的壓縮取決于在它之前的字節(jié)。因此,如果 子塊的早期部分因?yàn)樗幱谝迅碌拈W存塊中而被毀去,將難以解壓該子塊的稍后部分來(lái) 恢復(fù)為復(fù)制所需的VI數(shù)據(jù)。類(lèi)似地,難以在不創(chuàng)建早期部分的情況下創(chuàng)建壓縮子塊的稍后部分。這可使得創(chuàng) 建子塊的最終V2版本尤其具有挑戰(zhàn),如果該過(guò)程是容錯(cuò)的話。在以上示例中,如果用戶具 有在圖3中與包含子塊D 304的中心部分的第三閃存塊相對(duì)應(yīng)的原始數(shù)據(jù),則通常將難以 在不首先也創(chuàng)建D 304的開(kāi)始部分的壓縮版本的情況下創(chuàng)建第三閃存塊的壓縮版本。對(duì)該問(wèn)題的較早所描述的解決方案是修改映像以將跨越閃存塊邊界的任何子塊 拆分成兩個(gè)獨(dú)立部分完全在第一閃存塊內(nèi)的一部分、以及完全在第二閃存塊內(nèi)的一部分。 如此,對(duì)進(jìn)入這些子塊之一的任何字節(jié)的條件編碼永遠(yuǎn)不取決于不可用字節(jié),諸如每個(gè)子 塊的首部信息。該拆分是對(duì)映像的永久改變,并且需要更大的閃存來(lái)存儲(chǔ)新的映像。然而, 如將解釋的,僅需要改變成為作為更新的一部分的臨時(shí)映像,而非使得該改變變?yōu)橛谰?。一種較簡(jiǎn)單的解決方案是臨時(shí)地存儲(chǔ)否則不可用或不需要的數(shù)據(jù)直到它實(shí)際被 需要。能夠讀取VI中的子塊的稍后部分將意味著存儲(chǔ)該較早部分的壓縮版本。例如,在圖 3中,更新代理115可存儲(chǔ)子塊D 304的初始部分(在第二閃存塊中示為與子塊C相鄰), 這可使它能讀取第三閃存塊中的D 304的部分,即使該第二閃存塊不再可用。能夠創(chuàng)建V2 子塊的稍后部分將意味著存儲(chǔ)該子塊的較早部分的原始(未壓縮)數(shù)據(jù)。例如,在圖3中, 更新代理可存儲(chǔ)第二閃存塊中的子塊D 304的部分的原始數(shù)據(jù),這將使它能創(chuàng)建D 304的 壓縮版本,即使更新代理尚未更新第二閃存塊。雖然這是可能的,但是結(jié)果是它在閃存中需要可能不可獲得的顯著多余的存儲(chǔ)空 間。幸運(yùn)的上,一些流行的條件編碼器不需要所有的先前數(shù)據(jù)字節(jié)來(lái)壓縮和解壓當(dāng)前字節(jié)。 這使得更新代理能改為存儲(chǔ)僅必要的字節(jié),這導(dǎo)致存儲(chǔ)需求的顯著降低。類(lèi)似地,其它類(lèi) 型的條件編碼器可能不需要所有字節(jié),而是僅需要來(lái)自它們的相比字節(jié)本身占據(jù)更少空間 的有限信息量。從特定點(diǎn)重新開(kāi)始?jí)嚎s或解壓所需的該必要信息被稱(chēng)為壓縮器/解壓器狀 態(tài)。在本發(fā)明的優(yōu)選實(shí)施例中所使用的數(shù)據(jù)壓縮器(zlib)已使該狀態(tài)信息處于可訪問(wèn)形 式,并且提供停止并繼續(xù)進(jìn)行僅從這些狀態(tài)來(lái)壓縮或解壓的能力。[基本壓縮算法“zlib” 由 Jean-loup Gailly 和 Mark Adler 創(chuàng)建(參見(jiàn) http //www, zlib.net)并且是公知的通 用無(wú)損的數(shù)據(jù)壓縮庫(kù)。]zlib是公知的LZ77壓縮算法的一個(gè)實(shí)例。LZ77從壓縮流中的特
10定點(diǎn)開(kāi)始解壓所需要的信息,即解壓器狀態(tài)主要由數(shù)據(jù)中該點(diǎn)之前的解壓字節(jié)中的一些構(gòu) 成。還應(yīng)該注意,設(shè)備107經(jīng)常將采用其各自可使用不同壓縮算法來(lái)壓縮的若干文件系統(tǒng)。 在這種情況中,生成器可能需要向代理115明確地指示,原始和經(jīng)更新的映像的區(qū)域使用 哪些壓縮方法。代理115然后知道如何解壓和重新壓縮該映像的那些區(qū)域的每一個(gè)。否則 以下描述對(duì)于這些電子設(shè)備是一樣的。在接下來(lái)的優(yōu)選更新過(guò)程的討論中,概括而言,該更新過(guò)程被分成兩個(gè)不同的階 段。在初始階段中,更新代理115創(chuàng)建經(jīng)更新的V2數(shù)據(jù)映像的中間或臨時(shí)表示,并且將該中 間表示寫(xiě)回閃存111從而蓋寫(xiě)被更新的原始數(shù)據(jù)。在第二或最終階段中,更新代理115將 中間表示轉(zhuǎn)換成其最終形式并且然后將它再次寫(xiě)回閃存111從而蓋寫(xiě)該數(shù)據(jù)的先前表示。 在更新中具有兩個(gè)單獨(dú)的階段使得該解決方案的實(shí)現(xiàn)更為容易,可在可計(jì)算資源的使用方 面提供好的權(quán)衡,并且更重要的是完全容錯(cuò)的。階段1更新根據(jù)本發(fā)明的代表性實(shí)施例,圖4示出處理并更新由多個(gè)存儲(chǔ)器塊構(gòu)成的第一存 儲(chǔ)器映像的示例性方法的流程圖。存儲(chǔ)器塊本身被進(jìn)一步組織成壓縮和未壓縮子塊。此處 的過(guò)程產(chǎn)生第二存儲(chǔ)器映像,其包括根據(jù)更新包更新并被排列成另一些多個(gè)存儲(chǔ)器塊的第 一存儲(chǔ)器映像的內(nèi)容。在更新過(guò)程的以下討論中,已假設(shè)數(shù)據(jù)的原始版本(VI)中的許多(如果不是所 有)將被修改。然而,這不是通常情況,并且根本不是對(duì)在此采用的方法的要求。如將所見(jiàn) 的,該基本過(guò)程將對(duì)任何類(lèi)型的更新起作用。在需要解壓器狀態(tài)來(lái)執(zhí)行更新的情況下,在 更新包116中標(biāo)識(shí)VI閃存塊邊界(在圖3中示出)。換言之,如果特定更新僅例如需要映 像中的1000個(gè)閃存塊中的10個(gè)特定閃存塊中的數(shù)據(jù),則更新代理不一定需要通過(guò)存儲(chǔ)器 111中的整個(gè)VI映像并在RAM 165中解壓所有一切僅僅是為了獲得那10個(gè)閃存塊的解壓 狀態(tài)。所以,出于解釋的目的,假設(shè)更新包116標(biāo)識(shí)VI中的哪些數(shù)據(jù)塊是作為軟件的商業(yè) 更新的典型的特定更新所需要的。此外,如果一閃存塊中的VI映像數(shù)據(jù)在V2版本中完全 不被使用,則不需要該閃存塊的解壓狀態(tài)。還可發(fā)生進(jìn)入給定閃存塊B的子塊的較早部分 位于仍處于其VI狀態(tài)的閃存塊中。因而在閃存塊的開(kāi)始處不需要解壓狀態(tài),因?yàn)楦麓?可從其開(kāi)始來(lái)開(kāi)始讀取子塊。最終,如果壓縮子塊從VI到V2完全沒(méi)有改變,則不需要解壓 狀態(tài),因?yàn)槟菚r(shí)代理可簡(jiǎn)單地在不完全解壓的情況下將該壓縮子塊復(fù)制到V2映像。將未改 變的壓縮子塊直接復(fù)制到V2也是有用的,因?yàn)樗杉铀俑?。參考圖4,該過(guò)程中的第一步驟410是更新代理115解壓VI中跨越這些所標(biāo)識(shí)的 閃存塊邊界的每個(gè)壓縮子塊(例如,圖3中的子塊303和304)。就在每一標(biāo)識(shí)的閃存塊邊 界處,更新代理115記錄VI解壓器狀態(tài)并且將該信息寫(xiě)入閃存111中的備用區(qū)域。更新代 理可延遲將狀態(tài)寫(xiě)入閃存直到它已積累足夠數(shù)據(jù)來(lái)填充整個(gè)閃存塊。(同樣,跟蹤解壓器狀 態(tài)的目的是即使在先前的閃存塊不再可用時(shí),更新代理也可從更新過(guò)程中的任何點(diǎn)處繼續(xù) 進(jìn)行解壓縮)。當(dāng)所需閃存塊的解壓器狀態(tài)已被寫(xiě)入閃存111中的備用區(qū)域時(shí),更新代理115(在 步驟411)可開(kāi)始生成未壓縮格式的數(shù)據(jù)(V2)閃存塊的經(jīng)更新的版本。更新代理115僅在 需要時(shí)使用VI中的原始數(shù)據(jù)并應(yīng)用更新包116中的預(yù)定更新指令來(lái)創(chuàng)建每一個(gè)V2閃存塊 的原始數(shù)據(jù)。所得的V2閃存塊以未壓縮格式被連貫地寫(xiě)入RAM 165。該未壓縮數(shù)據(jù)不包
11含關(guān)于文件系統(tǒng)結(jié)構(gòu)的任何信息,并且來(lái)自閃存塊中所有子塊的數(shù)據(jù)在該階段被串接在一 起。還應(yīng)注意,在RAM中創(chuàng)建閃存塊的次序一般可能不是從映像的開(kāi)始到末尾為連貫的。例 如,如果僅存在標(biāo)號(hào)從1至10的十個(gè)閃存塊,則出于與更新過(guò)程本身的效率有關(guān)的理由,可 能是最佳的更新次序序列是{7,2,4,1,8,3,6,9,5,10}而非連貫地排序?yàn)閧1,2,3,4,5,6, 7,8,9,10} 0該次序由發(fā)生器的稱(chēng)為次序管理器(未示出)組件確定。在未壓縮格式的所有V2閃存塊在RAM 165中被處理之后,更新代理115 (在步驟 412)壓縮在步驟411生成的原始數(shù)據(jù)。然而,每一閃存塊中的原始數(shù)據(jù)獨(dú)立于每一其它閃 存塊來(lái)壓縮。通過(guò)這樣做,更新代理115可在該過(guò)程的稍后時(shí)候在需要時(shí)容易地解壓該數(shù) 據(jù),而無(wú)需訪問(wèn)相鄰數(shù)據(jù)塊。將這樣壓縮的一個(gè)閃存塊的數(shù)據(jù)稱(chēng)為V2閃存塊的“ICD”(獨(dú) 立壓縮數(shù)據(jù))形式或V格式。使ICD可用的優(yōu)點(diǎn)是當(dāng)在閃存中蓋寫(xiě)原始VI數(shù)據(jù)時(shí),甚至在 VI蓋寫(xiě)期間發(fā)生系統(tǒng)故障的情況下也能夠讀取數(shù)據(jù)。唯一的新問(wèn)題是當(dāng)一閃存塊的數(shù)據(jù)獨(dú) 立于每一其它閃存塊壓縮時(shí),中間ICD塊通常由相比原始閃存塊更多的數(shù)據(jù)字節(jié)構(gòu)成,且 結(jié)果是存在相對(duì)于原始閃存塊的額外數(shù)據(jù)。(這在使用NAND閃存的情況下尤為真實(shí)。)因 此,為了確保容錯(cuò),當(dāng)系統(tǒng)開(kāi)始蓋寫(xiě)VI數(shù)據(jù)時(shí),務(wù)必僅在多余數(shù)據(jù)已被寫(xiě)入替換閃存位置 之后才蓋寫(xiě)原始閃存塊。隨著該過(guò)程的剩余部分被解釋?zhuān)撘粚?duì)一對(duì)應(yīng)性的原因?qū)⒆兊们?楚。為參考目的,在ICD塊的創(chuàng)建期間生成的多余數(shù)據(jù)字節(jié)的量在此被稱(chēng)為“重疊”,并且在 圖5中被示為單獨(dú)的數(shù)據(jù)塊432。該重疊信息必須對(duì)更新代理保持可用以在用所需壓縮格 式寫(xiě)回V2的最終版本時(shí)完全恢復(fù)ICD塊中的所有數(shù)據(jù)。并且,出于明顯的原因,更新代理 115維護(hù)閃存塊的同一擾亂的序列。(雖然可能對(duì)閃存塊重新排序、當(dāng)在RAM 165中時(shí)重新 壓縮它們、并且將最終版本寫(xiě)入閃存111中,但是在將那些壓縮塊寫(xiě)入閃存111期間發(fā)生的 任何系統(tǒng)故障將毀去原始VI數(shù)據(jù)從而使正?;謴?fù)不可能。為了維持對(duì)系統(tǒng)故障的容許,繼 續(xù)以下步驟。)在步驟413,更新代理115使所有剛創(chuàng)建的重疊被寫(xiě)入閃存111中的另一備用/緩 存位置。由于每一重疊字節(jié)與一特定ICD塊相關(guān)聯(lián),所以必須具有一種將它們鏈接到特定 ICD塊的方式。在優(yōu)選實(shí)施例中,生成器向更新代理115發(fā)送指示在閃存中將每一重疊數(shù)據(jù) 字節(jié)存儲(chǔ)在哪里的表。實(shí)際上如果每一重疊字節(jié)是連貫地存儲(chǔ)的,則不必指定它們的位置, 因?yàn)樗鼈儍H被連貫地檢索。但是即使在該情況中,如果更新代理115在若干不同的閃存塊 中存儲(chǔ)重疊字節(jié),則至少那些閃存塊的位置應(yīng)被保存在來(lái)自生成器的表中,以使它們可被 檢索以便在以下解釋的更新過(guò)程的最終階段中處理。在步驟414中,更新代理115執(zhí)行對(duì)所有I⑶塊加上先前組(在存在分組的情況 下)的最后一個(gè)存儲(chǔ)的重疊塊的逐位異或,并且將所得的奇偶校驗(yàn)塊寫(xiě)入另一備用閃存 中。(這樣做以便在需要時(shí)幫助恢復(fù)破壞的數(shù)據(jù)塊,這還在以下結(jié)合恢復(fù)階段來(lái)討論。)在步驟415,更新代理115將I⑶塊以更新代理創(chuàng)建它們的次序?qū)懟亻W存且在這樣 做時(shí)蓋寫(xiě)被更新的原始VI數(shù)據(jù)塊。圖5是閃存111在步驟415之后可能如何使用僅三個(gè) 1〇0塊々(435)、8(436)、和((434)以及重構(gòu)這些塊所需的開(kāi)銷(xiāo)數(shù)據(jù)(奇偶校驗(yàn)塊431、重疊 區(qū)域432、以及解壓狀態(tài)433)來(lái)排列的圖示。雖然每一區(qū)域(431-436)的大小被示為近似 相同,但是這僅為了說(shuō)明閃存的結(jié)構(gòu)的目的,并且一般而言,各區(qū)域?qū)⒉皇窍嗤拇笮?,?dāng) 然也不限于僅三個(gè)I⑶塊(A、B和C)。在步驟416,更新代理115對(duì)經(jīng)更新的數(shù)據(jù)塊進(jìn)行計(jì)數(shù)來(lái)確定是否所有V2塊都已被處理。如果否,則重復(fù)先前的步驟411-415直到所有I⑶閃存塊都已被創(chuàng)建并且寫(xiě)入存 儲(chǔ)器111中。(如果特定更新按組處理數(shù)據(jù)塊,這在以下討論,則將對(duì)每一組數(shù)據(jù)塊重復(fù)步 驟411-415。)在完成將所有I⑶塊寫(xiě)入存儲(chǔ)器之后,完成了階段1并且具有分割成I⑶塊 和重疊塊的V2塊的完整的中間存儲(chǔ)器映像。該中間存儲(chǔ)器映像當(dāng)然不是設(shè)備107的高效 運(yùn)行所需的最終壓縮格式。存儲(chǔ)器中的所需數(shù)據(jù)塊的階段1更新要求存在足夠的RAM容量來(lái)處理并且保持它 們的V2ICD版本可用直到在寫(xiě)入奇偶校驗(yàn)塊之后。然而,更新所有改變的V2塊所需的可用 RAM 165的量可能不是在所有情況中都是足夠的,尤其是因?yàn)閿?shù)據(jù)塊正以未壓縮格式創(chuàng)建 并且因?yàn)樗性O(shè)備107不具有相同的RAM容量。因此,在其中RAM 165中的可用容量不足 以重新創(chuàng)建并且臨時(shí)存儲(chǔ)所有經(jīng)更新的V2閃存塊的情況中,替換方案是使更新代理115將 更新拆分成多個(gè)獨(dú)立的閃存塊組。通過(guò)在將更新提交回閃存之前將更新分組成在RAM165 中合并在一起的有限數(shù)目的閃存塊,限制了任何特定更新所需的緩存的大小。例如,前20 個(gè)閃存塊(按照來(lái)自次序管理器的次序)可能被首先更新,然后更新下20,依此類(lèi)推。通 過(guò)最初確定特定更新所需的存儲(chǔ)量的大小,更新代理115可從更新的開(kāi)始確定這種分組是 否將是任何特定更新中所需要的。但是如果更新代理115判定分組是需要的,則將不得不 寫(xiě)若干奇偶校驗(yàn)塊,在寫(xiě)入每一組之前寫(xiě)入一個(gè)奇偶校驗(yàn)塊。然后在奇偶校驗(yàn)塊被寫(xiě)入閃 存111之后,組可被寫(xiě)入,并且然后緩存將可用于下一組。當(dāng)更新開(kāi)始時(shí),更新代理115可 使用諸如它所具有的可用存儲(chǔ)器的大小和閃存塊的大小之類(lèi)的已知且恒定的量來(lái)計(jì)算一 組中的塊數(shù)。如果稍后代理需要進(jìn)行容錯(cuò)恢復(fù),則它可重復(fù)該計(jì)算以幫助它確定其中出現(xiàn) 被破壞的閃存塊的組。階段2更新在該優(yōu)選過(guò)程的第二階段中,需要用所需壓縮格式創(chuàng)建最終的存儲(chǔ)器映像。更新 代理115使用所存儲(chǔ)的I⑶塊(434、435和436)以及全部都在圖5中描述的開(kāi)銷(xiāo)數(shù)據(jù)(431、 432和433)來(lái)創(chuàng)建每一閃存塊的最終V2形式。更新代理115從每一閃存塊的開(kāi)始到結(jié)束 連貫地創(chuàng)建這些最終V2閃存塊。對(duì)于每一閃存塊,它重復(fù)僅在圖6中概括地示出的以下步
馬聚o在步驟610中,連貫地復(fù)制并解壓存儲(chǔ)在閃存中的每一 I⑶塊(它與特定更新相 關(guān)聯(lián)),同時(shí)插回與該特定數(shù)據(jù)塊相關(guān)聯(lián)的任何重疊數(shù)據(jù)432。在步驟611,未壓縮的閃存塊 被臨時(shí)存儲(chǔ)在RAM 165中的開(kāi)放緩存位置。在該步驟中,更新代理115創(chuàng)建其原始數(shù)據(jù)使 用來(lái)自更新包116的補(bǔ)丁指令被存儲(chǔ)在緩存中的每一閃存塊的最終V2形式。補(bǔ)丁指令基 本指示如何創(chuàng)建壓縮或已是未壓縮(原始)格式的子塊。如果被壓縮,則補(bǔ)丁指令指示有 多少原始字節(jié)要從該數(shù)據(jù)的未使用部分中讀取(從步驟610),并且然后將該數(shù)據(jù)壓縮為一 個(gè)單元并且將結(jié)果存儲(chǔ)回其中新的V2閃存塊正被組裝的另一 RAM緩存位置中?;蛘?,如果 子塊數(shù)據(jù)未被壓縮,則補(bǔ)丁指令指示有多少字節(jié)要僅從來(lái)自步驟610的數(shù)據(jù)塊的未使用部 分直接復(fù)制到最終V2 RAM緩存區(qū)域。并且,最終在步驟612,每一閃存塊的最終版本V2被寫(xiě)回閃存以蓋寫(xiě)存儲(chǔ)在閃存 111中的相應(yīng)的ICD塊。然而,如以上所提及的,壓縮子塊經(jīng)??缭介W存塊邊界。當(dāng)更新代 理115首先檢測(cè)這種子塊的開(kāi)始時(shí),它解壓所需的接下來(lái)的ICD塊并且將未壓縮數(shù)據(jù)存儲(chǔ) 在緩存中。然后該更新代理115在一遍中為該子塊壓縮該緩存中的所有數(shù)據(jù)。然后,在步驟611,對(duì)于其余的閃存塊,更新代理115只需將任何剩余的壓縮數(shù)據(jù)復(fù)制到該閃存塊的最 終V2緩存。在步驟613,更新代理165測(cè)試來(lái)確定是否所有的I⑶塊都已被處理。如果否,則 重復(fù)這三個(gè)步驟(610-612,直到所有閃存塊都已被更新并且寫(xiě)入閃存。當(dāng)所有閃存塊都被 更新時(shí),該過(guò)程完成,并且(431、432和433)中的所有開(kāi)銷(xiāo)數(shù)據(jù)被清除。系統(tǒng)恢復(fù)如以上所指示的,要求該整個(gè)更新過(guò)程是容錯(cuò)的。因此在系統(tǒng)更新期間的電源故 障或其它以外的系統(tǒng)中斷的情況下需要有一致且可靠的恢復(fù)方法。存在兩個(gè)可發(fā)生數(shù)據(jù)破 壞的地方,這可導(dǎo)致繼續(xù)更新時(shí)的問(wèn)題在階段1更新的中間期間或者在階段2更新的中間 期間。為了示出恢復(fù)過(guò)程,假設(shè)首先系統(tǒng)更新在圖4中所示的階段1更新的中間期間,即在 步驟413、414或415期間的某處停止。一旦電源被恢復(fù)到主機(jī)設(shè)備107,則更新代理115就 進(jìn)入恢復(fù)模式并且遵循在圖7中所示的恢復(fù)步驟,這些步驟與從普通固件更新中的故障恢 復(fù)的步驟類(lèi)似。參考圖7,在步驟710,更新代理115必須確定更新在系統(tǒng)故障的瞬間在哪里停止。 這通過(guò)將每一閃存塊(在圖4中在步驟414中存儲(chǔ)在閃存中)的校驗(yàn)和與存儲(chǔ)在用于每一 閃存塊的更新包中的校驗(yàn)和進(jìn)行比較來(lái)完成。(更新包116具有用于處于其原始VI狀態(tài)以 及處于其V2 ICD狀態(tài)的每一個(gè)閃存塊中的數(shù)據(jù)的校驗(yàn)和。如果閃存111中的實(shí)際閃存塊 中的數(shù)據(jù)的校驗(yàn)和不匹配其預(yù)計(jì)算的校驗(yàn)和中的任何一個(gè),則該閃存塊肯定是被破壞的。) 圖8非常概括地示出其中更新代理115在崩潰發(fā)生時(shí)已更新了閃存塊B的僅一部分的故障 情況。在該簡(jiǎn)單示例中,閃存塊A被示為更新到ICD V2狀態(tài),但是閃存塊C根本尚未被更 新并且仍處于原始(未更改)VI狀態(tài)。在該示例中,假設(shè)電源故障在數(shù)據(jù)塊B中的ICD數(shù) 據(jù)正被寫(xiě)入時(shí)發(fā)生從而導(dǎo)致閃存塊B的破壞。更新代理可檢測(cè)到這一情況,因?yàn)樵谠撻W存 塊中的字節(jié)的校驗(yàn)和不匹配存儲(chǔ)在更新包116中的任一校驗(yàn)和。(所有閃存塊仍處于其初 始VI狀態(tài)或處于最終V2I⑶狀態(tài)是可能的,但是在這些情況中的任何一個(gè)中,恢復(fù)是不重 要的,因?yàn)楦麓?15將簡(jiǎn)單地從它被停止的地方繼續(xù)進(jìn)行更新,即,沒(méi)有存儲(chǔ)在閃存中 的數(shù)據(jù)被破壞。)否則,更新代理必須使用以下步驟來(lái)恢復(fù)破壞的閃存塊B中的原始數(shù)據(jù)。再次參考圖7,在步驟711,必須在RAM 165中重新生成尚未更新的V2I⑶閃存塊。 更新代理115能夠重新創(chuàng)建該數(shù)據(jù),因?yàn)樯善鞔_保重構(gòu)V2I⑶塊所必要的副本僅來(lái)自原 來(lái)被存儲(chǔ)在非易失性存儲(chǔ)器111中的該同一位置中的壓縮VI塊,或者來(lái)自也在非易失性存 儲(chǔ)器111中的尚未更新的(根據(jù)次序管理器)VI塊。在圖7中的步驟713中,更新代理115使用與階段1處理相同的I⑶格式在RAM 165中簡(jiǎn)單地壓縮的每一未壓縮V2塊。為恢復(fù)被破壞的閃存塊,在步驟715,更新代理115 計(jì)算奇偶校驗(yàn)塊、所有尚未寫(xiě)入的V2 ICD塊,以及所有已寫(xiě)入的V2 ICD塊(更新代理剛順 序地讀入RAM 165中)的異或。計(jì)算的結(jié)果是被破壞的塊B的I⑶數(shù)據(jù)字節(jié)。一旦所恢復(fù) 的塊作為下一步驟被保存到閃存,更新過(guò)程就已完全從系統(tǒng)故障中恢復(fù)。在該點(diǎn),在圖4中 所示的正常階段1可從所恢復(fù)的閃存塊的點(diǎn)處繼續(xù)。為進(jìn)一步示出恢復(fù)過(guò)程,假設(shè)系統(tǒng)在階段2更新的中間失敗。一旦電源被恢復(fù)到 主機(jī)設(shè)備107,更新代理115就確定在更新的第二階段中發(fā)生故障。為了從階段2中斷中恢 復(fù),更新代理115遵循圖9中所示的恢復(fù)步驟。第一邏輯步驟是確定就在系統(tǒng)故障之前更新過(guò)程發(fā)生故障的點(diǎn)(步驟910)。這通過(guò)將每一閃存塊的校驗(yàn)和與存儲(chǔ)在更新包中的相應(yīng) 校驗(yàn)和進(jìn)行比較來(lái)完成(步驟911)。所有閃存塊或者處于其V2 ICD狀態(tài)或者處于其最終 V2狀態(tài)以使所有的校驗(yàn)和匹配是可能的。在該情況中,更新代理115只需從其被停止的地 方繼續(xù)進(jìn)行正常更新,因?yàn)闆](méi)有數(shù)據(jù)被破壞。但是如果校驗(yàn)和不匹配,則它使用以下步驟來(lái) 恢復(fù)一個(gè)破壞閃存塊。再次參考圖9,在步驟912,在更新過(guò)程在系統(tǒng)故障時(shí)已失敗的情況下,更新代理 115解壓已保存的最終V2塊以產(chǎn)生原始/未壓縮閃存塊。然而,非??赡艿氖窃撨^(guò)程在壓 縮子塊從一個(gè)閃存塊跨越到另一個(gè)的時(shí)刻失敗(如圖3中所示)。大多數(shù)標(biāo)準(zhǔn)解壓方法能 夠在無(wú)法訪問(wèn)整個(gè)子塊的情況下從這種子塊的開(kāi)始解壓。這使得更新代理115即使在數(shù)據(jù) 字節(jié)的剩余部分位于被破壞的閃存塊中時(shí)也能從這些部分子塊中獲得數(shù)據(jù)??稍诨謴?fù)期間發(fā)生的另一問(wèn)題是V2子塊表現(xiàn)為被壓縮的、但實(shí)際上不是的時(shí)候。 這在子塊可被解壓時(shí)發(fā)生,但是沒(méi)有方式來(lái)重新壓縮它以使它對(duì)子塊的原始版本是逐比特 相同的。為處理該情況,當(dāng)生成器注意到這樣的可解壓子塊時(shí),生成器產(chǎn)生補(bǔ)丁命令以將該 子塊作為原始子塊而非壓縮子塊來(lái)對(duì)待。然后在恢復(fù)過(guò)程中的圖9中的步驟912期間,更 新代理115可使用這些補(bǔ)丁命令來(lái)幫助指導(dǎo)解壓。在該情況中,補(bǔ)丁命令指示更新代理應(yīng) 不嘗試解壓不能被成功地重新壓縮的子塊。在解壓了已保存的最終V2塊來(lái)產(chǎn)生原始/未壓縮閃存塊之后,在步驟913,單獨(dú) 地重新壓縮每一閃存塊的原始數(shù)據(jù)并將其存儲(chǔ)在RAM中。這產(chǎn)生每一 V2閃存塊的I⑶形 式。在步驟914,通過(guò)計(jì)算以下各項(xiàng)的異或來(lái)恢復(fù)失效的閃存塊a)奇偶校驗(yàn)塊、b)來(lái)自步 驟913的已寫(xiě)入V2塊的所有I⑶版本、以及c)仍存儲(chǔ)在閃存中的所有I⑶V2塊。由于更 新代理115計(jì)算奇偶校驗(yàn)塊的方式,這產(chǎn)生被破壞的V2閃存塊。在步驟915中,繼續(xù)更新。 更新代理115不一定必須首先將被破壞的塊的ICD版本寫(xiě)到閃存,因?yàn)楦麓?15可簡(jiǎn) 單地在該點(diǎn)從RAM 165繼續(xù)進(jìn)行更新。為更好地說(shuō)明在階段2恢復(fù)期間發(fā)生了什么來(lái)恢復(fù)被破壞的數(shù)據(jù)塊,考慮在圖10 中所示的數(shù)據(jù)塊1000。這是示出在恢復(fù)期間數(shù)據(jù)塊1001-1006發(fā)生了什么的示意圖。在該 示例中的更新期間,數(shù)據(jù)塊1002和1003被成功地轉(zhuǎn)換成ICD格式的經(jīng)更新的版本V2。(注 意,示為塊1001的奇偶校驗(yàn)塊不經(jīng)常與其它數(shù)據(jù)塊相鄰地出現(xiàn),但是為方便起見(jiàn)以該方式 示出。)并且數(shù)據(jù)塊1005和1006被成功轉(zhuǎn)換成經(jīng)更新的V2版本,然而數(shù)據(jù)塊1004已在 系統(tǒng)故障期間被破壞。因此,塊1004中的數(shù)據(jù)不再存在于RAM中。為恢復(fù)被破壞的數(shù)據(jù), 一旦電源被成功地恢復(fù),則更新代理115將創(chuàng)建數(shù)據(jù)塊1005’和1006’,這是前兩個(gè)閃存塊 1005和1006的I⑶版本。然后,更新代理將計(jì)算這些和最后兩個(gè)閃存塊1002和1003以及 奇偶校驗(yàn)塊信息1001的逐位異或(示意性地示為X0R門(mén)1007)。這將在門(mén)1007的輸出重 新創(chuàng)建缺失的塊 1004,,因?yàn)?1001 1006’ 1005’ 1002 1003 = 1004,。重疊數(shù)據(jù)的恢復(fù)在更新期間對(duì)數(shù)據(jù)塊分組的另一副作用是它使得在更新代理115正在寫(xiě)入重疊 數(shù)據(jù)的同時(shí)進(jìn)行恢復(fù)變得更復(fù)雜。該問(wèn)題因?yàn)閱蝹€(gè)閃存塊可包含來(lái)自超過(guò)一個(gè)組的重疊數(shù) 據(jù)而產(chǎn)生,所以如果重疊塊被破壞,則先前組的重疊數(shù)據(jù)(其是更新代理115對(duì)于更新的階 段2所需要的)被永久地丟失。沒(méi)有方式來(lái)恢復(fù)重疊數(shù)據(jù),因?yàn)橐獎(jiǎng)?chuàng)建先前組的V2 I⑶塊 的數(shù)據(jù)不再存在。為解決該情況,更新代理115在更新期間分組的情況下不同地計(jì)算奇偶
15校驗(yàn)塊。該方法在圖11中概括地示出,其中在步驟1110,更新代理115從ICD閃存塊的當(dāng) 前組以及先前組的重疊塊兩者計(jì)算奇偶校驗(yàn)塊。更新代理115然后將該新的奇偶校驗(yàn)塊寫(xiě) 入閃存111。在步驟1111,更新代理115像往常一樣將當(dāng)前組的重疊數(shù)據(jù)字節(jié)連貫地寫(xiě)入閃存 塊。然后在步驟1112,更新代理115計(jì)算在該組中的每一重疊塊的校驗(yàn)和。在步驟1113, 更新代理115將校驗(yàn)和寫(xiě)入每一重疊塊的最后四個(gè)字節(jié)。更新代理在它填充重疊數(shù)據(jù)塊時(shí) 跳過(guò)這些字節(jié)。在恢復(fù)期間,更新代理115確定它是否已寫(xiě)入當(dāng)前組中的任何I⑶閃存塊。如果該 測(cè)試是肯定的,則來(lái)自當(dāng)前組的重疊以及奇偶校驗(yàn)字節(jié)肯定已被安全地存儲(chǔ)在閃存塊中, 并且更新代理115如常繼續(xù)更新。但是如果該測(cè)試是否定的,則更新代理115使用該塊中 的校驗(yàn)和來(lái)檢查來(lái)自先前組的最后一個(gè)重疊塊是否被破壞來(lái)做這一確定。如果未被破壞, 則更新代理115開(kāi)始更新來(lái)自當(dāng)前組的重疊和I⑶塊。如果來(lái)自先前組的最后一個(gè)重疊塊 被破壞,則更新代理115使用必定已在閃存中的當(dāng)前組的奇偶校驗(yàn)塊來(lái)恢復(fù)該重疊塊。然 后更新代理開(kāi)始更新當(dāng)前組。本發(fā)明的其它方面可以在計(jì)算機(jī)可讀存儲(chǔ)器設(shè)備中被看見(jiàn),在該計(jì)算機(jī)可讀存儲(chǔ) 器設(shè)備中已存儲(chǔ)了用于使處理器執(zhí)行上述方法的多個(gè)指令。因此,本發(fā)明的代表性實(shí)施例可以用硬件、軟件、或硬件和軟件的組合來(lái)實(shí)現(xiàn)。本 發(fā)明的代表性實(shí)施例可以按集中方式在至少一個(gè)計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)或者按其中不同的元 件分布在若干互連計(jì)算機(jī)系統(tǒng)上的分布方式來(lái)實(shí)現(xiàn)。適于執(zhí)行在此所述的方法的任何類(lèi)型 的計(jì)算機(jī)系統(tǒng)或其它裝置是適合的。硬件和軟件的組合可以是具有計(jì)算機(jī)程序的通用計(jì)算 機(jī)系統(tǒng),該計(jì)算機(jī)程序在被加載和執(zhí)行時(shí)控制該計(jì)算機(jī)系統(tǒng)以使它執(zhí)行在此所述的方法。雖然已參考某些實(shí)施例描述了本發(fā)明的各方面,但是本領(lǐng)域的技術(shù)人員將理解可 做出各種改變并且可用等效方案代替而不背離本發(fā)明的代表性實(shí)施例的范圍。此外,可做 出許多修改來(lái)使特定情況適于本發(fā)明的代表性實(shí)施例的示教而不背離其范圍。因此,意圖 是本發(fā)明的各實(shí)施例不被限于在此所公開(kāi)的特定實(shí)施例,而是本發(fā)明的代表性實(shí)施例包括 落在所附權(quán)利要求書(shū)的范圍內(nèi)的所有實(shí)施例。
權(quán)利要求
一種更新具有壓縮和原始數(shù)據(jù)的原始數(shù)據(jù)映像的容錯(cuò)方法,所述原始數(shù)據(jù)映像被排列成數(shù)據(jù)子塊并被存儲(chǔ)在可編程非易失性閃存中,其中所述閃存被分成帶有閃存塊邊界分的離散閃存塊,所述方法包括a)解壓由預(yù)定更新指令標(biāo)識(shí)的每一壓縮數(shù)據(jù)子塊;b)生成跨越閃存塊邊界的每一解壓數(shù)據(jù)子塊的解壓狀態(tài),并且將所生成的解壓狀態(tài)復(fù)制到閃存以供在系統(tǒng)故障之后恢復(fù)數(shù)據(jù)時(shí)使用;c)通過(guò)以下動(dòng)作在緩沖存儲(chǔ)器中創(chuàng)建中間存儲(chǔ)器映像i.在檢索和解壓由預(yù)定更新指令標(biāo)識(shí)的數(shù)據(jù)閃存塊的同時(shí)應(yīng)用所述預(yù)定更新指令,并且創(chuàng)建由未壓縮數(shù)據(jù)塊的序列構(gòu)成的中間存儲(chǔ)器映像,每一個(gè)未壓縮數(shù)據(jù)塊與單個(gè)閃存塊相對(duì)應(yīng);ii.壓縮所述中間存儲(chǔ)器映像,以使每一個(gè)閃存塊中的數(shù)據(jù)獨(dú)立于在任何其它壓縮閃存塊中的數(shù)據(jù)來(lái)壓縮;iii.使用所述中間存儲(chǔ)器映像蓋寫(xiě)所述原始數(shù)據(jù)映像中的閃存塊;d)通過(guò)以下動(dòng)作創(chuàng)建包括所需更新信息的經(jīng)更新的存儲(chǔ)器映像i.將所述中間存儲(chǔ)器映像的各部分復(fù)制到緩存并且解壓所述中間存儲(chǔ)器映像中的每一個(gè)壓縮閃存塊中的數(shù)據(jù);ii.順序地將所解壓的中間存儲(chǔ)器映像重新壓縮成離散閃存塊,從而生成所述經(jīng)更新的壓縮存儲(chǔ)器映像;以及iii.使用所述經(jīng)更新的壓縮存儲(chǔ)器映像蓋寫(xiě)所述閃存中的中間存儲(chǔ)器映像。
2.如權(quán)利要求1所述的更新方法,其特征在于,步驟(c)( )還包括限制與在所述中間存儲(chǔ)器映像中的每一個(gè)離散閃存塊相關(guān)聯(lián)的數(shù)據(jù)量,以使每一獨(dú)立 壓縮的數(shù)據(jù)閃存塊不大于所述原始數(shù)據(jù)映像中的相應(yīng)數(shù)據(jù)閃存塊的大小,從而為每一壓縮 閃存塊創(chuàng)建重疊數(shù)據(jù),以及將從以上步驟生成的所述重疊數(shù)據(jù)存儲(chǔ)在閃存中。
3.如權(quán)利要求2所述的更新方法,其特征在于,步驟(d)(i)還包括將所述重疊數(shù)據(jù)與所解壓的中間存儲(chǔ)器映像數(shù)據(jù)選擇性地組合以生成未壓縮格式的 經(jīng)更新的存儲(chǔ)器映像。
4.如權(quán)利要求3所述的更新方法,其特征在于,還包括在步驟(c) ( )之后,為所有所述獨(dú)立壓縮的數(shù)據(jù)塊計(jì)算奇偶校驗(yàn)塊并且將所述奇偶 校驗(yàn)塊復(fù)制到所述閃存以供在系統(tǒng)故障之后恢復(fù)數(shù)據(jù)時(shí)使用。
5.如權(quán)利要求3所述的方法,其特征在于,步驟(C)(i)、(C) (ii)和(C) (iii)還包括e)在檢索和解壓由預(yù)定更新指令標(biāo)識(shí)的第一組數(shù)據(jù)閃存塊的同時(shí)應(yīng)用所述預(yù)定更新 指令,并且創(chuàng)建未壓縮格式的部分中間存儲(chǔ)器映像;f)壓縮所述部分中間存儲(chǔ)器映像以使每一閃存塊的數(shù)據(jù)獨(dú)立于任何其它閃存塊中的 數(shù)據(jù)來(lái)壓縮;g)用所述部分中間存儲(chǔ)器映像蓋寫(xiě)所述原始數(shù)據(jù)映像中的數(shù)據(jù)閃存塊;以及h)順序地重復(fù)步驟(e)、(f)和(g),直到由所述預(yù)定更新指令標(biāo)識(shí)的所有數(shù)據(jù)閃存塊 都已被處理,從而創(chuàng)建所述中間存儲(chǔ)器映像。
6.如權(quán)利要求4所述的更新方法,其特征在于,所述原始數(shù)據(jù)映像包括只讀文件系統(tǒng)。
7.如權(quán)利要求4所述的更新方法,其特征在于,在當(dāng)創(chuàng)建所述中間存儲(chǔ)器映像的同時(shí) 發(fā)生電源故障的情況下,在電源恢復(fù)之后,執(zhí)行以下步驟通過(guò)將存儲(chǔ)在所述閃存中的所述中間存儲(chǔ)器映像中的每一數(shù)據(jù)閃存塊的校驗(yàn)和與 存儲(chǔ)在用于每一數(shù)據(jù)閃存塊的更新包中的校驗(yàn)和進(jìn)行比較以在所述更新過(guò)程中定位故障點(diǎn)。如果所有數(shù)據(jù)閃存塊處于未修改狀態(tài),則繼續(xù)所述更新過(guò)程中在步驟(c) (i)開(kāi)始的 所有剩余步驟;如果所述原始數(shù)據(jù)映像中的所有數(shù)據(jù)閃存塊都已使用所述中間存儲(chǔ)器映像蓋寫(xiě),則繼 續(xù)所述更新過(guò)程中在步驟(d) (i)開(kāi)始的所有剩余步驟;如果上述步驟中沒(méi)有一個(gè)是有效的,則執(zhí)行以下步驟以恢復(fù)被破壞的數(shù)據(jù)并且繼續(xù)所 述更新過(guò)程對(duì)于所述原始數(shù)據(jù)映像中在電源之前尚未被更新的那部分,在檢索并且解壓由預(yù)定更 新指令標(biāo)識(shí)的數(shù)據(jù)閃存塊的同時(shí)應(yīng)用所述更新指令并且創(chuàng)建未壓縮格式的所述中間存儲(chǔ) 器映像的一部分;重新壓縮來(lái)自前一步驟的所述中間存儲(chǔ)器映像的那部分,以使每一數(shù)據(jù)閃存塊獨(dú)立于 任何其它壓縮數(shù)據(jù)閃存塊來(lái)壓縮;將來(lái)自已被更新的閃存的中間存儲(chǔ)器映像的剩余部分復(fù)制到所述緩沖存儲(chǔ)器; 計(jì)算來(lái)自先前兩個(gè)步驟的所述奇偶校驗(yàn)塊和所有壓縮數(shù)據(jù)塊的異或,從而生成所述被 破壞的數(shù)據(jù)塊中的原始數(shù)據(jù);以及繼續(xù)所述更新過(guò)程中在(c) (iii)開(kāi)始的剩余步驟的每一個(gè)。
8.—種被配置成具有用于更新操作系統(tǒng)軟件的完全容錯(cuò)過(guò)程的操作軟件系統(tǒng)的移動(dòng) 電子設(shè)備,所述電子設(shè)備包括緩沖存儲(chǔ)器;計(jì)算機(jī)可讀閃存,其中存儲(chǔ)了被配置為第一存儲(chǔ)器映像的所述操作系統(tǒng)軟件,所述第 一存儲(chǔ)器映像由壓縮和不可壓縮數(shù)據(jù)塊構(gòu)成,并且被分成離散數(shù)據(jù)閃存塊;處理器,其被編程為根據(jù)預(yù)定更新指令通過(guò)以下動(dòng)作更新所述第一存儲(chǔ)器映像 解壓由所述預(yù)定更新指令標(biāo)識(shí)的每一壓縮數(shù)據(jù)子塊;生成跨越閃存塊邊界的每一解壓的數(shù)據(jù)子塊的解壓狀態(tài),并且將所生成的解壓狀態(tài)復(fù) 制到閃存以供在系統(tǒng)故障之后恢復(fù)數(shù)據(jù)時(shí)使用;通過(guò)以下動(dòng)作在緩沖存儲(chǔ)器中創(chuàng)建中間存儲(chǔ)器映像在檢索并解壓來(lái)自由預(yù)定更新指令標(biāo)識(shí)的閃存的數(shù)據(jù)閃存塊的同時(shí)應(yīng)用所述預(yù)定更 新指令,并且創(chuàng)建由未壓縮數(shù)據(jù)塊的序列構(gòu)成的中間存儲(chǔ)器映像,所述未壓縮數(shù)據(jù)塊的每 一個(gè)與單個(gè)閃存塊相對(duì)應(yīng);壓縮所述中間存儲(chǔ)器映像,以使與每一閃存塊相對(duì)應(yīng)的數(shù)據(jù)獨(dú)立于任何其它閃存塊中 的數(shù)據(jù)來(lái)壓縮,并且限制所述中間存儲(chǔ)器映像中的每一離散閃存塊中的數(shù)據(jù)量以使每一獨(dú) 立壓縮的閃存塊適合在相應(yīng)的閃存塊內(nèi),并且如果不適合,則將重疊數(shù)據(jù)保存到閃存; 使用所述中間存儲(chǔ)器映像來(lái)蓋寫(xiě)所述原始數(shù)據(jù)映像中的每一閃存塊中的數(shù)據(jù); 通過(guò)以下動(dòng)作創(chuàng)建包括所需更新消息的經(jīng)更新的存儲(chǔ)器映像 將所述中間存儲(chǔ)器映像復(fù)制到所述緩存并且在使用存儲(chǔ)在閃存中的重疊數(shù)據(jù)的同時(shí)解壓所述中間存儲(chǔ)器映像中的每一壓縮數(shù)據(jù)子塊;將所解壓的中間存儲(chǔ)器映像順序地重新壓縮成不同的數(shù)據(jù)子塊序列,從而生成經(jīng)更新 的壓縮存儲(chǔ)器映像;以及使用所述經(jīng)更新的壓縮存儲(chǔ)器映像來(lái)蓋寫(xiě)所述閃存中的中間存儲(chǔ)器映像。
9.如權(quán)利要求8所述的移動(dòng)電子設(shè)備,其特征在于,所述設(shè)備還包括蜂窩電話。
全文摘要
一種用于使用兩步驟方法來(lái)更新嵌入式設(shè)備中的壓縮只讀文件系統(tǒng)的容錯(cuò)方法。在第一階段,更新包創(chuàng)建中間存儲(chǔ)器映像,其中數(shù)據(jù)塊被獨(dú)立地壓縮以使如果需要?jiǎng)t其中的數(shù)據(jù)可在不訪問(wèn)任何其它周?chē)鷶?shù)據(jù)塊的情況下被解壓并讀取。然后在第二階段中,該中間存儲(chǔ)器映像在緩存中被解壓,以使它可在被重新壓縮并寫(xiě)回非易失性存儲(chǔ)器從而蓋寫(xiě)該中間存儲(chǔ)器映像之前被重新制作映像成其最終格式和次序。
文檔編號(hào)H04M1/725GK101930387SQ20091015054
公開(kāi)日2010年12月29日 申請(qǐng)日期2009年6月19日 優(yōu)先權(quán)日2009年6月19日
發(fā)明者L·麥吉, M·斯萊茲, 吳照明, 文立 申請(qǐng)人:上?;萜沼邢薰?惠普發(fā)展公司,有限責(zé)任合伙企業(yè)