動(dòng)態(tài)固件更新的制作方法
【專(zhuān)利說(shuō)明】
【背景技術(shù)】
[0001]現(xiàn)代計(jì)算機(jī)和基于計(jì)算機(jī)的系統(tǒng)典型地包括平臺(tái)固件,即存儲(chǔ)在非易失性“固件”存儲(chǔ)器中并且用于初始化基于計(jì)算機(jī)的系統(tǒng)和用于基于計(jì)算機(jī)的系統(tǒng)的低級(jí)別功能性的代碼(表示指令和非指令類(lèi)型數(shù)據(jù))。典型地,將固件代碼加載到相對(duì)快速的易失性存儲(chǔ)器中以供使用。
[0002]有時(shí)合期望的是更新固件,例如以修復(fù)固件故障、添加特征或微調(diào)系統(tǒng)參數(shù)。在較陳舊的計(jì)算機(jī)系統(tǒng)中,更新固件可以牽涉換出編碼有固件的一個(gè)固件只讀存儲(chǔ)器(ROM)以被編碼有經(jīng)更新的固件的另一個(gè)取代。最近,固件存儲(chǔ)在可重寫(xiě)非易失性存儲(chǔ)器中使得固件更新可以就地更新。一旦系統(tǒng)被再初始化(即重啟),則這樣的更新可以生效。
【附圖說(shuō)明】
[0003]以下附圖表示示例并且不是本發(fā)明本身。
[0004]圖1是依照示例的系統(tǒng)的示意圖。
[0005]圖2是可實(shí)現(xiàn)在圖1的系統(tǒng)上并且依照示例的數(shù)據(jù)-對(duì)象請(qǐng)求處置過(guò)程的流程圖。
[0006]圖3是可實(shí)現(xiàn)在圖1的系統(tǒng)上并且依照示例的固件-更新過(guò)程的流程圖。
[0007]圖4是依照示例的另一系統(tǒng)的示意圖。
[0008]圖5是可實(shí)現(xiàn)在圖4的系統(tǒng)上并且依照示例的固件-更新過(guò)程的流程圖。
【具體實(shí)施方式】
[0009]在關(guān)鍵任務(wù)上下文中(例如網(wǎng)絡(luò)支持的醫(yī)療警報(bào)和其它緊急服務(wù)、金融交易和在線零售,其中計(jì)算機(jī)被預(yù)期為“高度可用”),重啟系統(tǒng)以完成固件的安裝可以是昂貴的。本文的示例允許一些固件更新在不重啟的情況下實(shí)現(xiàn)。這不僅節(jié)約與重啟相關(guān)聯(lián)的成本,而且鼓勵(lì)固件更新的更廣泛使用,例如通過(guò)動(dòng)態(tài)微調(diào)固件參數(shù)來(lái)增強(qiáng)性能。在本文中,固件更新是“動(dòng)態(tài)”的,如果它們可以在不重啟的情況下實(shí)現(xiàn)(即付諸使用,與僅僅被寫(xiě)入相對(duì))。
[0010]圖1中所示的示例系統(tǒng)100包括編碼有代碼104的存儲(chǔ)介質(zhì)102。代碼104包括固件112和數(shù)據(jù)管理器114 (其取決于變型,可以或可以不在固件中)。固件112的數(shù)據(jù)布置在動(dòng)態(tài)數(shù)據(jù)卷中,例如卷116和118。每一個(gè)數(shù)據(jù)卷包括數(shù)據(jù)-對(duì)象元數(shù)據(jù)以指定:數(shù)據(jù)-對(duì)象標(biāo)識(shí)符(ID) 120、數(shù)據(jù)-對(duì)象版本ID 122和數(shù)據(jù)對(duì)象126。數(shù)據(jù)管理器114管理來(lái)自消費(fèi)者(例如軟件實(shí)體)的針對(duì)固件數(shù)據(jù)對(duì)象的請(qǐng)求128。數(shù)據(jù)管理器保持追蹤哪些消費(fèi)者正在使用與消費(fèi)者回叫句柄134相關(guān)聯(lián)地存儲(chǔ)數(shù)據(jù)對(duì)象ID 134的數(shù)據(jù)結(jié)構(gòu)130中的哪些數(shù)據(jù)對(duì)象。
[0011]數(shù)據(jù)管理器114實(shí)現(xiàn)在圖2中示出流程圖的數(shù)據(jù)-對(duì)象請(qǐng)求處置過(guò)程200。在201處,從消費(fèi)者接收針對(duì)數(shù)據(jù)對(duì)象的請(qǐng)求。在202處,標(biāo)識(shí)所請(qǐng)求的數(shù)據(jù)對(duì)象的最新版本。在203處,與所請(qǐng)求的數(shù)據(jù)對(duì)象的身份相關(guān)聯(lián)地存儲(chǔ)針對(duì)消費(fèi)者的回叫句柄。在204處,向消費(fèi)者提供所請(qǐng)求的數(shù)據(jù)對(duì)象的最新版本使得其成為數(shù)據(jù)對(duì)象的“使用中”版本。過(guò)程200可以通過(guò)其它實(shí)體實(shí)現(xiàn),并且數(shù)據(jù)管理器114可以實(shí)現(xiàn)其它過(guò)程,如以下進(jìn)一步論述的。
[0012]數(shù)據(jù)管理器114可以實(shí)現(xiàn)在圖3中示出流程圖的數(shù)據(jù)-對(duì)象更新過(guò)程300。在301處,找到數(shù)據(jù)-對(duì)象版本的經(jīng)更新的版本。在302處,標(biāo)識(shí)數(shù)據(jù)對(duì)象的消費(fèi)者的回叫句柄。在303處,使用回叫句柄,通知數(shù)據(jù)對(duì)象的消費(fèi)者該更新。
[0013]一旦被通知更新,消費(fèi)者可以立即或在稍后的時(shí)間處請(qǐng)求經(jīng)更新的對(duì)象。例如,如果請(qǐng)求和使用經(jīng)更新的數(shù)據(jù)對(duì)象將會(huì)導(dǎo)致正在進(jìn)行的過(guò)程中的沖突或其它問(wèn)題,則消費(fèi)者可以等待更合時(shí)宜的時(shí)間來(lái)更新其數(shù)據(jù)對(duì)象的副本。在任何事件中,可以以避免任何相干性問(wèn)題并且不要求重啟(其可能干擾針對(duì)高度可用的計(jì)算機(jī)系統(tǒng)的服務(wù)水平目標(biāo))的方式管理動(dòng)態(tài)數(shù)據(jù)固件更新。
[0014]如在下一示例中所示,數(shù)據(jù)卷可以存儲(chǔ)除針對(duì)系統(tǒng)100示出的之外的數(shù)據(jù)-對(duì)象元數(shù)據(jù)。例如,數(shù)據(jù)卷可以包括可以用于確保更新來(lái)自經(jīng)授權(quán)的源并且不是錯(cuò)誤或惡意的結(jié)果的安全密鑰。
[0015]計(jì)算機(jī)系統(tǒng)400包括處理器402、通信設(shè)備404和非暫時(shí)性存儲(chǔ)介質(zhì)406。介質(zhì)406編碼有代碼408。代碼408包括固件410、消費(fèi)者412、固件更新實(shí)用程序414和更新標(biāo)志416。在另一示例中,標(biāo)志416實(shí)現(xiàn)在硬件中。固件410包括數(shù)據(jù)管理器420、更新處置器422和數(shù)據(jù)卷430,包括數(shù)據(jù)卷432、434和436。
[0016]每一個(gè)數(shù)據(jù)卷430是數(shù)據(jù)-卷數(shù)據(jù)結(jié)構(gòu)及其內(nèi)容的組合。內(nèi)容包括數(shù)據(jù)-對(duì)象ID、數(shù)據(jù)-對(duì)象屬性、數(shù)據(jù)-對(duì)象版本ID、安全密鑰、其它元數(shù)據(jù)和數(shù)據(jù)-對(duì)象。數(shù)據(jù)-對(duì)象ID可以是全局唯一標(biāo)識(shí)符(GUID)。數(shù)據(jù)-對(duì)象屬性指定給定數(shù)據(jù)對(duì)象是動(dòng)態(tài)數(shù)據(jù)對(duì)象還是靜態(tài)數(shù)據(jù)對(duì)象。可以在不重啟的情況下實(shí)現(xiàn)針對(duì)動(dòng)態(tài)數(shù)據(jù)對(duì)象的改變,而實(shí)現(xiàn)經(jīng)改變的靜態(tài)數(shù)據(jù)對(duì)象要求重啟。“其它元數(shù)據(jù)”可以包括可以用于確定數(shù)據(jù)卷的邊界或數(shù)據(jù)對(duì)象值位于哪里的位置或?qū)ο蟠笮⌒畔?。此外,“其它元?shù)據(jù)”可以包括表征對(duì)數(shù)據(jù)管理器420或消費(fèi)者412有用的數(shù)據(jù)對(duì)象的其它信息。
[0017]數(shù)據(jù)卷432包括數(shù)據(jù)-對(duì)象ID 440、屬性442、版本ID 444、有效標(biāo)志445、安全密鑰446、其它元數(shù)據(jù)447和數(shù)據(jù)-對(duì)象448。屬性442被設(shè)置成“靜態(tài)”,因此對(duì)具有數(shù)據(jù)-對(duì)象ID 440的數(shù)據(jù)-對(duì)象的改變(其將通過(guò)另一數(shù)據(jù)卷表示)將僅發(fā)生在系統(tǒng)400的重啟之后。版本ID 444是最新的版本,在這種情況下是數(shù)據(jù)卷430之中表示的數(shù)據(jù)-對(duì)象的最晚版本。數(shù)據(jù)對(duì)象448是響應(yīng)于請(qǐng)求提供給消費(fèi)者412的數(shù)據(jù)對(duì)象。
[0018]數(shù)據(jù)卷434包括數(shù)據(jù)-對(duì)象ID 450、屬性452、版本ID 454、有效標(biāo)志455、安全密鑰456、其它元數(shù)據(jù)457和數(shù)據(jù)-對(duì)象458。在該情況中,屬性452被設(shè)置成“動(dòng)態(tài)”,這指示數(shù)據(jù)對(duì)象(值)的改變可以在不重啟的情況下實(shí)現(xiàn)??梢允侵T如“4.2”之類(lèi)的數(shù)字值的版本ID碰巧對(duì)應(yīng)于針對(duì)具有ID 450的數(shù)據(jù)對(duì)象的使用中版本,因?yàn)槠洚?dāng)前被消費(fèi)者412使用中。
[0019]然而,雖然使用中數(shù)據(jù)對(duì)象458在其被消費(fèi)者412請(qǐng)求時(shí)是最新的版本,但是它在圖4中表示的時(shí)間處不是最新的版本。這是因?yàn)樽詮南M(fèi)者412請(qǐng)求數(shù)據(jù)對(duì)象458之后較新的版本已經(jīng)被寫(xiě)入到固件410。該較新的經(jīng)更新的版本表示在數(shù)據(jù)卷436中。
[0020]數(shù)據(jù)卷436包括數(shù)據(jù)對(duì)象ID 460、屬性462、版本ID 464、有效標(biāo)志465、安全密鑰466、其它元數(shù)據(jù)467和數(shù)據(jù)-對(duì)象468。數(shù)據(jù)對(duì)象468是數(shù)據(jù)對(duì)象458的經(jīng)更新的版本。因此,數(shù)據(jù)-對(duì)象ID 460等于數(shù)據(jù)-對(duì)象ID 450,并且版本ID 464 (例如版本4.3)對(duì)應(yīng)于比版本ID 454 (例如版本4.2)更晚的版本。對(duì)象的不同版本的屬性一般相同,因此屬性452和462相同,二者都設(shè)置在“動(dòng)態(tài)”處。然而,在一些情況中,更新改變用于數(shù)據(jù)對(duì)象的屬性。
[0021]數(shù)據(jù)管理器420保持追蹤哪些消費(fèi)者正在使用哪些數(shù)據(jù)對(duì)象。為此目的,數(shù)據(jù)管理器420包括數(shù)據(jù)結(jié)構(gòu),例如回叫表470,其將消費(fèi)者回叫句柄472與用于當(dāng)前被消費(fèi)者使用中的每一個(gè)數(shù)據(jù)對(duì)象的數(shù)據(jù)-對(duì)象身份474和用于使用中的數(shù)據(jù)對(duì)象的數(shù)據(jù)-對(duì)象版本ID相關(guān)聯(lián)。例如,在圖4中表示的時(shí)間中,用于數(shù)據(jù)對(duì)象458的對(duì)象身份將與回叫表470中的消費(fèi)者回叫句柄相關(guān)聯(lián)。
[0022]系統(tǒng)400提供用于圖5中示出流程圖的固件-更新過(guò)程500的實(shí)現(xiàn)。過(guò)程500包括請(qǐng)求段510和更新段520。請(qǐng)求段510包括動(dòng)作511,其中數(shù)據(jù)管理器從消費(fèi)者接收針對(duì)數(shù)據(jù)對(duì)象的請(qǐng)求。請(qǐng)求可以指定用于對(duì)象的GUID或其它標(biāo)識(shí)符。
[0023]在512處,數(shù)據(jù)管理器搜索數(shù)據(jù)卷以用于所請(qǐng)求的數(shù)據(jù)對(duì)象的適當(dāng)版本從而滿足請(qǐng)求。在513處,數(shù)據(jù)管理器找到數(shù)據(jù)對(duì)象的適當(dāng)版本。在所圖示的過(guò)程500中,適當(dāng)版本是最新的有效版本。不搜索如由其相應(yīng)有效標(biāo)志指示的無(wú)效版本。最新性可以通過(guò)比較所請(qǐng)求的數(shù)據(jù)對(duì)象的找到的有效版本的版本號(hào)來(lái)確定。
[0024]緊接在數(shù)據(jù)-對(duì)象更新之后,經(jīng)更新的版本可以不同于由消費(fèi)者使用中的任何版本。如果另一消費(fèi)者請(qǐng)求其最新版本不同于使用中版本的數(shù)據(jù)對(duì)象,為了一致性而可能合期望的是利用使用中版本而不是最新版本來(lái)滿足請(qǐng)求。在這樣的示例和場(chǎng)景中,使用中版本為利用其滿足請(qǐng)求的“適當(dāng)”版本。在過(guò)程500的所圖示的變型中,數(shù)據(jù)對(duì)象的經(jīng)更新的版本不被標(biāo)記為“有效”,直到數(shù)據(jù)管理器已經(jīng)被告知經(jīng)更新的版本。因此,數(shù)據(jù)管理器可以在利用經(jīng)更新(即最新)的版本滿足針對(duì)其的任何附加請(qǐng)求之前收回所請(qǐng)求的數(shù)據(jù)對(duì)象的使用中版本。
[0025]在514處,數(shù)據(jù)管理器檢查用于數(shù)據(jù)對(duì)象的適當(dāng)版本的“靜態(tài)”相對(duì)“動(dòng)態(tài)”屬性。在515處,如果并且僅如果(當(dāng)且僅當(dāng))屬性為“動(dòng)態(tài)”時(shí),數(shù)據(jù)管理器將回叫句柄與數(shù)據(jù)-對(duì)象身份和數(shù)據(jù)-對(duì)象版本身份相關(guān)聯(lián),例如在回叫表470中。如果屬性為“靜態(tài)”,不在回叫表中做出條目。在516處,數(shù)據(jù)管理器通過(guò)向請(qǐng)求數(shù)據(jù)對(duì)象的消費(fèi)者提供數(shù)據(jù)對(duì)象的適當(dāng)版本來(lái)滿足請(qǐng)求。
[0026]過(guò)程500的更新段520包括,在521處,更新工具將經(jīng)更新的數(shù)據(jù)對(duì)象寫(xiě)入到固件的未被使用的區(qū)域處的新卷。當(dāng)數(shù)據(jù)對(duì)象被更新時(shí),將經(jīng)更新的版本寫(xiě)入到