專利名稱:動態(tài)雙緩沖器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及在NVM寫操作期間發(fā)生電源故障時,防止NVM中的數(shù)據(jù)錯誤的方法。本發(fā)明還涉及盡可能均勻分配對整個NVM的磨損。
由于多種原因,NVM用于IPPV系統(tǒng)中的STT,例如用于保存用戶被特許收視的頻道和用戶已經(jīng)定購的事項。但是如果在數(shù)據(jù)正在被寫入任意存儲單元期間發(fā)生電源故障,正被寫的數(shù)據(jù)就可能變成錯誤的?,F(xiàn)有技術(shù)的STT試圖通過提供雙緩沖器解決這個問題。實質(zhì)上,這種裝置確保在數(shù)據(jù)被寫入NVM中別的任何位置之前,先把要被寫的數(shù)據(jù)和該數(shù)據(jù)要被寫入的存儲單元裝入緩沖器的單元中。一旦該信息已經(jīng)被寫入雙緩沖器,數(shù)據(jù)就寫入預(yù)定的存儲單元。因此,如果在寫入預(yù)定存儲單元操作期間發(fā)繚垂收希瞇畔⒈4嬖謁撼迤髦?,覇T愕鋇繚椿指詞笨梢災(zāi)叵中床僮鰲 然而NVM中一個給定的存儲單元的使用期限是有限的,因此,如果信息被連續(xù)寫入雙緩沖器的單元,雙緩沖器就會相當(dāng)快地用壞。但是一般說來,STT中的數(shù)據(jù)并不經(jīng)常變更。例如頻道特許就不經(jīng)常變更。不過在IPPV系統(tǒng)中,例如用戶連續(xù)定購事項的情況下,就需要存儲票據(jù)清單信息。因此在這種系統(tǒng)中,與雙緩沖器相關(guān)的存儲單元會被用壞。雙緩沖存儲器用壞狀態(tài)的發(fā)生會大大早于STT的使用期限,設(shè)計動態(tài)雙緩沖器就是為了解決這個問題。本發(fā)明實質(zhì)上包括移動雙緩沖器。
如果在NVM寫操作期間發(fā)生電源故障,可能產(chǎn)生兩個問題。第一個問題是可能把“無用數(shù)據(jù)”或錯誤數(shù)據(jù)寫入正被清除或?qū)懭氲拇鎯卧?。第二個問題是如果該操作需要幾個寫步驟,當(dāng)發(fā)生電源故障時,可能只執(zhí)行了其中某些步驟。如上所述,解決方案就是使用雙緩沖器。簡單地說雙緩沖器是存儲器的一個區(qū)域,軟件可以使用該區(qū)域重視被電源故障中斷的寫操作。
參看下面表1,該方法概述如下。在任何寫操作執(zhí)行之前,把足夠的信息寫入雙緩沖器,以便重視那些將在寫操作期間執(zhí)行的步驟,設(shè)置一個標(biāo)記,指示雙緩沖器中的信息是準(zhǔn)確的。接著執(zhí)行寫操作。最后清除該標(biāo)記。如下所示,4個步驟在限定的9個時間內(nèi)執(zhí)行,在這9個時間內(nèi)可能發(fā)生電源故障。
這樣,每當(dāng)把數(shù)據(jù)寫入NVM時,都可以按如下表1中所示敘述9個時間的意義。
表一 時間#1 時間#2A)把數(shù)據(jù)寫入雙緩沖器。
時間#3 時間#4B)設(shè)置標(biāo)記,指示雙緩沖器有效 時間#5 時間#6C)把數(shù)據(jù)寫入相應(yīng)的NVM單元 時間#7 時間#8D)清除標(biāo)記 時間#9 如果在時間#1發(fā)生電源故障,因為還未執(zhí)行任何操作,所以保持NVM的完整性。在時間#2內(nèi),因為指示雙緩沖器有效的標(biāo)記尚未設(shè)置,所以雙緩沖器中的信息被忽略,最后的結(jié)果與時間#1的結(jié)果相同。在時間#3,標(biāo)記仍未被設(shè)置,因此結(jié)果與時間#2的結(jié)果相同。如果在時間#4發(fā)生電源故障,并且標(biāo)記已經(jīng)被設(shè)置,雙緩沖器中的信息就是有效的,當(dāng)電源恢復(fù)時,將重現(xiàn)和執(zhí)行整個操作。如果標(biāo)記還未被設(shè)置,就不執(zhí)行任何操作,保持NVM的完整性。如果在時間#5發(fā)生電源故障,標(biāo)記已經(jīng)被設(shè)置,因此當(dāng)電源恢復(fù)時,將重現(xiàn)和執(zhí)行整個操作。在時間#6,雖然由于電源故障而使存儲單元已經(jīng)錯亂,但是當(dāng)電源恢復(fù)時,將重寫該存儲單元,因此保持存儲器的完整性。如果在時間#7發(fā)生電源故障,當(dāng)電源恢復(fù)時,將執(zhí)行整個操作,以便確保NVM數(shù)據(jù)的準(zhǔn)確性,盡管這樣做不見得是必要的。如果在時間#8發(fā)生電源故障時標(biāo)記仍未設(shè)置,就將重新執(zhí)行全部寫操作,盡管這是不必要的。在時間9整個操作已經(jīng)完成。
下述方法可以用于確定雙緩沖器是否有效,并設(shè)置標(biāo)記,該方法部分根據(jù)數(shù)據(jù)寫入NVM的方式。寫入NVM的方式包括首先把所有的1寫入存儲單元,然后寫必要的0以便產(chǎn)生預(yù)定的數(shù)據(jù)。在第一操作期間,0被變更成1,而1決不會被變更成0。在第二操作期間,1被變更成0,而0不會變更成1。在任何給定的時間內(nèi),所有變更都沿一個方向發(fā)生,低電平變成高電平,或高電平變成低電平。因此,以某個數(shù)據(jù)變成是另外某個數(shù)據(jù)的補碼方式,數(shù)據(jù)錯誤地概率是很小的。
雙緩沖器中的索引用于指示數(shù)據(jù)正被寫入NVM中的哪個存儲單元。該索引及其索引的補碼都被存儲。存儲索引的NVM單元也包含標(biāo)記。格式在圖2中示出,圖中示出10和20兩個字節(jié)。用字節(jié)10的最后4位與字節(jié)20的最后4位相比較。如果bbbb是dddd的一個補碼,就認(rèn)為該雙緩沖器是有效的。如果bbbb不是dddd的一個補碼,就認(rèn)為該雙緩沖器是無效的,其中包含的信息被忽略??赡墚a(chǎn)生這種情況,即正在寫該單元期間發(fā)生電源故障時,產(chǎn)生的錯誤數(shù)據(jù)也可能符合這種模式。假如發(fā)生這種情況,那未電源一恢復(fù),軟件就會把正確的數(shù)據(jù)寫入NVM中錯誤的單元里。一般認(rèn)為這種情況是罕見的,因為至少4位都必須錯亂,而且對于每一位1都必須變成0。在本發(fā)明的試驗期間,從未觀察到這種情況的發(fā)生。
因為NVM中任何位置的寫操作都通過雙緩沖器匯集,所以通常在其它NVM單元用壞之前,雙緩沖器就用壞了。這會把NVM的使用期限縮短成不能命人滿意的期限。在把NVM裝入使用期限相當(dāng)長的裝置的情況下,最好延長NVM的使用時間以適應(yīng)該裝置的較長使用期限,而同時又保持雙緩沖器的優(yōu)點,為了完成這個任務(wù),如下參看2和3所述,雙緩沖器是動態(tài)移動的。十六進(jìn)制記數(shù)符號用于表示地址。
表2表3 實際地址邏輯地址實際地址邏輯地址 00000000 01010101 02020202 03020303 ∷∷∷∷ 37373737
3DSTART13DSTART1 3ESTART23ESTART2 3FSTART33FSTART3 實際地址涉及數(shù)據(jù)實際在NVM中的位置,而邏輯地址涉及一個程序認(rèn)為是數(shù)據(jù)是如何被存儲的。假設(shè)一個程序正進(jìn)入存儲器,它不會“知道”雙緩沖器。該程序可以給定它需要邏輯地址38。另外一種軟件把邏輯地址轉(zhuǎn)換成實際地址。在這種情況下,該軟件就到實際地址38,得到該數(shù)據(jù),并把它傳送回到請求該數(shù)據(jù)的那個程序。
NVM包括地址00至3F各種任務(wù)進(jìn)入00至38的邏輯地址空間。雙緩沖器為4字長,并保存在單元39至3C(參看表2)。如上所述,索引包括要寫的地址和指示有效雙緩沖器的標(biāo)記。DATA0、DATA1和DATA2包含要寫入NVM的數(shù)據(jù)。所有操作中,僅有一個除外,即在最佳實施例中所有用于IPPV系統(tǒng)的操作需要至多三個NVM寫操作。假如某種操作需要的寫操作多于三個,就需要包括DATA3、DATA4……等的更大的雙緩沖器。在本實施例中,需要多于三個操作的僅僅是一個操作就是使NVM初始化的操作。電源一恢復(fù),模塊就能檢測初始化正在進(jìn)行中(由INDEX索引),并能再執(zhí)行初始化。單元3D、3E和3F(START1、START2和START3包含雙緩沖器的實際地址,在本實施例中是實際地址39。這些單元是固定的單元,以便一旦“電源恢復(fù)”,軟件可以定位雙緩沖器。通常。在NVM中至少有一個單元必須固定,以便定位雙緩沖器。因為該雙緩沖器僅周期地(例如每兩周一次)移動,所以在固定單元中的數(shù)據(jù)不會經(jīng)常變更,也就不至于產(chǎn)生用壞的問題。
表3示出了雙緩沖器已經(jīng)被移動之后的NVM。
在表3中,雙緩沖器保存在單元38至3B。當(dāng)一個任務(wù)請求NVM單元38時,軟件把該請求變址到單元3C。大約每兩周雙緩沖器移動一個位置。當(dāng)它到達(dá)始端(或末端)時,就沿另一方向移動。這樣就在整個NVM中均勻地分配了NVM寫操作。每兩次雙緩沖器移動之間的時間周期取決于多個因素,而選擇兩周的時間周期僅是舉例說明現(xiàn)在用于IPPV環(huán)境中NVM的取值。例如數(shù)據(jù)寫的量和可用存儲空間的量等因素都可以在一個特定系統(tǒng)中用于確定實際的時間周期。
把表2與表3進(jìn)行比較可以看出雙緩沖器已經(jīng)被向上移動,邏輯地址38已經(jīng)移到實際地址3C。因此,實際地址38中的信息必須移到實際地址3C,然后雙緩沖器必須上移。為了再上移雙緩沖器,實際地址37中的信息必須移到實際地址3B。下面將結(jié)合圖3中所示的簡化存儲器說明這種處理。
圖3的存儲器具有9個存儲單元。存儲單元9包含對雙緩沖器的指示字。在本實施例中,如表2和表3中所示的在存儲單元START1、START2和START3中保存該指示字的三個復(fù)制。存儲單元1至5分別包含實際數(shù)據(jù)10至50。存儲單元6至8包含雙緩沖器。存儲單元9包含號碼6指示雙緩沖器的位置。
現(xiàn)在舉例說明利用雙緩沖器的寫操作的設(shè)計思想。假設(shè)存儲單元3中的信息要從30改變成80。為了完成這個變更,如圖3a中所示,首先把數(shù)據(jù)“80”寫入雙緩沖器中的存儲單元6。存儲單元7包含一個0,在本實施例中這指示一個無效的雙緩沖器。因此,如果在這時電源發(fā)生故障而接著又被恢復(fù),軟件將判定該雙緩沖器無效,并忽略該雙緩沖器中的任何數(shù)據(jù)。然后把指示包含在雙緩沖器中的信息要被寫入位置的索引寫入存儲單元7。在本實施例中,如圖36中所示,存儲單元7指示包含在雙緩沖器中的數(shù)據(jù)要被寫入存儲單元3。如果在標(biāo)記已經(jīng)被設(shè)置之后發(fā)生電源故障,當(dāng)電源恢復(fù)時,軟件將判定數(shù)據(jù)“80”要被寫入存儲單元3,并將執(zhí)行該操作。如果正在寫“80”期間發(fā)生電源故障,導(dǎo)致把錯誤數(shù)據(jù)寫入存儲單元3,NVM完整性仍能保持,因為當(dāng)電源恢復(fù)時,軟件將再判定數(shù)據(jù)“80”要寫入存儲單元3,并將重新執(zhí)行該操作。
然后如圖3C中所示,新的數(shù)據(jù)“80”被寫入存儲單元3。最后如圖3d中所示,存儲單元7中的標(biāo)記被清除。清除存儲單元6中的數(shù)據(jù)“80”并不是關(guān)健性的,因為標(biāo)記將指出一個無效雙緩沖器,軟件將忽略該雙緩沖器中任何數(shù)據(jù)。
下面參看圖4說明雙緩沖器的動態(tài)移動。為了移動雙緩沖器,第一步先清除雙緩沖器,即,如圖4a中所示,確保雙緩沖器中每個單元都是0。然后,如圖4b中所示,把包含在存儲單元5中的數(shù)據(jù)“50”復(fù)制到存儲單元8。這時如果軟件是安排到包含雙緩沖器的存儲單元6的程序,因為存儲單元7用作INDEX,并且指示一個無效雙緩沖器,導(dǎo)致電源故障之后電源恢復(fù)時不執(zhí)行任何操作,所以數(shù)據(jù)是一致的。如果軟件是安排到包含雙緩沖器的存儲單元5的程序,因為存儲單元6用作包含INDEX,也指示一個無效雙緩沖器,同樣導(dǎo)致電源故障之后電源恢復(fù)時不執(zhí)行任何操作,所以數(shù)據(jù)也是一致的。最后如圖4c中所示,存儲單元9中的指示字變更成5,完成了執(zhí)行移動雙緩沖器的處理。雙緩沖器還可以如圖5中所示進(jìn)行移動。同樣如圖5a中所示,第一步是通過把0寫入每個雙緩沖器存儲單元,清除雙緩沖器。然后,如圖5b中所示,把包含在存儲單元4中的數(shù)據(jù)“40”復(fù)制到存儲單元7。之后如圖5c中所示,存儲單元9的指示字變更成4,完成該處理。
在預(yù)定的時間周期之后,執(zhí)行雙緩沖器的移動。在實現(xiàn)動態(tài)雙緩沖器的IPPV系統(tǒng)的最佳實施例中,大約每兩周雙緩沖器移動一次。當(dāng)雙緩沖器已經(jīng)移動到存儲器的頂部時,它就返回向下移動。當(dāng)它到達(dá)存儲器底部時,它就返回向上移動。雙緩沖器以與上述相同的方式向下移動,下面結(jié)合圖6進(jìn)行詳細(xì)說明。為了把雙緩沖器向下移動,在雙緩沖器已經(jīng)被清除之后,把存儲單元8中的數(shù)據(jù)“50”復(fù)制到存儲單元5。然后存儲單元9中的指示字變更成6,完成該處理。參看表4,通常用于最佳實施例的處理概述如下。
表4 時間#1 時間#2A)把數(shù)據(jù)復(fù)制到DATA2/DATA1(根據(jù)方向) 時間#3 時間#4B)清除DATA0/DATA1 時間#5 時間#6C)更新START1 時間#7 時間#8D)更新START2 時間#9 時間#10E)更新START3 時間#11 下面將對可能發(fā)生電源故障的11個區(qū)段進(jìn)行說明。如果在時間#1發(fā)生電源故障,因為尚未執(zhí)行任何操作,所以保持了NVM的完整性。如果在時間#2發(fā)生電源故障,因為在該操作開始時索引是0,所以電源恢復(fù)時,不執(zhí)行任何操作,因此忽略DATA0或DATA2中的任何數(shù)據(jù)。在時間#3、#4或#5發(fā)生電源故障會產(chǎn)生與在時間#2發(fā)生電源故障時相同的結(jié)果,因為索引仍然是0。在時間#6或時間#7發(fā)生電源故障之后電源恢復(fù)時,軟件檢查START1、START2和START3。如果START2和START3相同,那未就忽略START1,并用START2進(jìn)行重寫。否則,就認(rèn)為START1是正確的。對于這種情況,START2和START3將相等,因此將重寫START1,最后的結(jié)果與在時間#1發(fā)生電源故障的結(jié)果相同。在時間#8發(fā)生電源故障之后電源恢復(fù)時,軟件檢查START1、START2和START3。如果START2和START3相同,那么就忽略STAR1,并用START2進(jìn)行重寫。否則就認(rèn)為START1是正確的。如果START2剛好與START3相同,那么結(jié)果與在時間#6發(fā)生電源故障的結(jié)果相同。如果不相同,就把START1復(fù)制到START2和START3。這樣實際上移動了雙緩沖器。在移動之前,索引是現(xiàn)在的DATA0或DATA1。該單元在移動開始之前就已經(jīng)被清除。因為0不符合有效索引的要求,所以忽略該雙緩沖器。除了START2決不會與START3相同之外,在時間#9發(fā)生電源故障產(chǎn)生與在時間#8發(fā)生電源故障相同的結(jié)果。在時間#10,如果START3與START2相符,該雙緩沖器已經(jīng)被移動。如果不相符,就用START1確定START3,并在時間#11完成該操作,完成雙緩沖器的移動。
為了移動雙緩沖器,僅需移動一個存儲單元。在應(yīng)用本發(fā)明的情況下,需要同時執(zhí)行寫操作的存儲單元不超過三個。而且這三個存儲單元是相連貫的,因此僅需一個索引指示數(shù)據(jù)必須寫入的單元。
權(quán)利要求
1、一種延長具有多個存儲單元的非易失存儲器使用期限的方法,所述的方法由以下步驟組成
動態(tài)移動數(shù)據(jù)經(jīng)常寫入的任何存儲單元。
2、一種把數(shù)據(jù)寫入具有整個多個存儲單元的非易失存儲器的方法,由以下步驟組成
(a)把足夠的用于重現(xiàn)數(shù)據(jù)寫操作的信息寫入包括至少兩個存儲單元的雙緩沖器;
(b)設(shè)置一個指示所述雙緩沖器中的信息是正確的標(biāo)記;
(c)執(zhí)行寫操作;
(d)清除該標(biāo)記;
(e)在非易失存儲器中整體多個存儲單元動態(tài)移動所述的雙緩沖器。
3、根據(jù)權(quán)利要求2所述的方法,其特征是所述雙緩沖器包含要被寫的數(shù)據(jù)和所述數(shù)據(jù)要被寫入的存儲單元。
4、用于把數(shù)據(jù)寫入具有多個存儲單元的非易失存儲器的裝置,所述裝置包括
用于把足夠的信息寫入包括至少兩個存儲單元的雙緩沖器的裝置;
用于設(shè)置一個指示所述雙緩沖器中的信息是正確的標(biāo)記裝置;
用于執(zhí)行寫操作的裝置;
用于清除該標(biāo)記的裝置,
用于在非易失存儲器中,多個存儲單元動態(tài)移動所述雙緩沖器的裝置。
5、根據(jù)權(quán)利要求4所述的裝置,其特征是所述雙緩沖器包含要被寫的數(shù)據(jù)和所述數(shù)據(jù)要被寫入的存儲單元。
全文摘要
一種防止在發(fā)生電源故障時被寫入非易失存儲器的數(shù)據(jù)錯誤的方法。在寫操作執(zhí)行之前,把信息寫入雙緩沖器,以便重現(xiàn)在寫操作期間將執(zhí)行的步驟。設(shè)置一個標(biāo)記,在指示雙緩沖器中的信息是正確的。然后執(zhí)行寫操作,并清除該標(biāo)記。在整個非易失存儲器上動態(tài)移動雙緩沖器,以便盡可能均勻地分配非易失存儲器的損壞。
文檔編號G01N27/83GK1038169SQ8910379
公開日1989年12月20日 申請日期1989年5月30日 優(yōu)先權(quán)日1988年5月30日
發(fā)明者戴維·J·納達(dá), 蘭杜夫·J·肖布斯 申請人:亞特蘭大科研公司