动态双缓冲器的制作方法

文档序号:5872487阅读:217来源:国知局
专利名称:动态双缓冲器的制作方法
技术领域
本发明涉及在NVM写操作期间发生电源故障时,防止NVM中的数据错误的方法。本发明还涉及尽可能均匀分配对整个NVM的磨损。
由于多种原因,NVM用于IPPV系统中的STT,例如用于保存用户被特许收视的频道和用户已经定购的事项。但是如果在数据正在被写入任意存储单元期间发生电源故障,正被写的数据就可能变成错误的。现有技术的STT试图通过提供双缓冲器解决这个问题。实质上,这种装置确保在数据被写入NVM中别的任何位置之前,先把要被写的数据和该数据要被写入的存储单元装入缓冲器的单元中。一旦该信息已经被写入双缓冲器,数据就写入预定的存储单元。因此,如果在写入预定存储单元操作期间发缭垂收希眯畔⒈4嬖谒撼迤髦校员愕钡缭椿指词笨梢灾叵中床僮鳌 然而NVM中一个给定的存储单元的使用期限是有限的,因此,如果信息被连续写入双缓冲器的单元,双缓冲器就会相当快地用坏。但是一般说来,STT中的数据并不经常变更。例如频道特许就不经常变更。不过在IPPV系统中,例如用户连续定购事项的情况下,就需要存储票据清单信息。因此在这种系统中,与双缓冲器相关的存储单元会被用坏。双缓冲存储器用坏状态的发生会大大早于STT的使用期限,设计动态双缓冲器就是为了解决这个问题。本发明实质上包括移动双缓冲器。
如果在NVM写操作期间发生电源故障,可能产生两个问题。第一个问题是可能把“无用数据”或错误数据写入正被清除或写入的存储单元。第二个问题是如果该操作需要几个写步骤,当发生电源故障时,可能只执行了其中某些步骤。如上所述,解决方案就是使用双缓冲器。简单地说双缓冲器是存储器的一个区域,软件可以使用该区域重视被电源故障中断的写操作。
参看下面表1,该方法概述如下。在任何写操作执行之前,把足够的信息写入双缓冲器,以便重视那些将在写操作期间执行的步骤,设置一个标记,指示双缓冲器中的信息是准确的。接着执行写操作。最后清除该标记。如下所示,4个步骤在限定的9个时间内执行,在这9个时间内可能发生电源故障。
这样,每当把数据写入NVM时,都可以按如下表1中所示叙述9个时间的意义。
表一 时间#1 时间#2A)把数据写入双缓冲器。
时间#3 时间#4B)设置标记,指示双缓冲器有效 时间#5 时间#6C)把数据写入相应的NVM单元 时间#7 时间#8D)清除标记 时间#9 如果在时间#1发生电源故障,因为还未执行任何操作,所以保持NVM的完整性。在时间#2内,因为指示双缓冲器有效的标记尚未设置,所以双缓冲器中的信息被忽略,最后的结果与时间#1的结果相同。在时间#3,标记仍未被设置,因此结果与时间#2的结果相同。如果在时间#4发生电源故障,并且标记已经被设置,双缓冲器中的信息就是有效的,当电源恢复时,将重现和执行整个操作。如果标记还未被设置,就不执行任何操作,保持NVM的完整性。如果在时间#5发生电源故障,标记已经被设置,因此当电源恢复时,将重现和执行整个操作。在时间#6,虽然由于电源故障而使存储单元已经错乱,但是当电源恢复时,将重写该存储单元,因此保持存储器的完整性。如果在时间#7发生电源故障,当电源恢复时,将执行整个操作,以便确保NVM数据的准确性,尽管这样做不见得是必要的。如果在时间#8发生电源故障时标记仍未设置,就将重新执行全部写操作,尽管这是不必要的。在时间9整个操作已经完成。
下述方法可以用于确定双缓冲器是否有效,并设置标记,该方法部分根据数据写入NVM的方式。写入NVM的方式包括首先把所有的1写入存储单元,然后写必要的0以便产生预定的数据。在第一操作期间,0被变更成1,而1决不会被变更成0。在第二操作期间,1被变更成0,而0不会变更成1。在任何给定的时间内,所有变更都沿一个方向发生,低电平变成高电平,或高电平变成低电平。因此,以某个数据变成是另外某个数据的补码方式,数据错误地概率是很小的。
双缓冲器中的索引用于指示数据正被写入NVM中的哪个存储单元。该索引及其索引的补码都被存储。存储索引的NVM单元也包含标记。格式在图2中示出,图中示出10和20两个字节。用字节10的最后4位与字节20的最后4位相比较。如果bbbb是dddd的一个补码,就认为该双缓冲器是有效的。如果bbbb不是dddd的一个补码,就认为该双缓冲器是无效的,其中包含的信息被忽略。可能产生这种情况,即正在写该单元期间发生电源故障时,产生的错误数据也可能符合这种模式。假如发生这种情况,那未电源一恢复,软件就会把正确的数据写入NVM中错误的单元里。一般认为这种情况是罕见的,因为至少4位都必须错乱,而且对于每一位1都必须变成0。在本发明的试验期间,从未观察到这种情况的发生。
因为NVM中任何位置的写操作都通过双缓冲器汇集,所以通常在其它NVM单元用坏之前,双缓冲器就用坏了。这会把NVM的使用期限缩短成不能命人满意的期限。在把NVM装入使用期限相当长的装置的情况下,最好延长NVM的使用时间以适应该装置的较长使用期限,而同时又保持双缓冲器的优点,为了完成这个任务,如下参看2和3所述,双缓冲器是动态移动的。十六进制记数符号用于表示地址。
表2表3 实际地址逻辑地址实际地址逻辑地址 00000000 01010101 02020202 03020303 ∷∷∷∷ 37373737
3DSTART13DSTART1 3ESTART23ESTART2 3FSTART33FSTART3 实际地址涉及数据实际在NVM中的位置,而逻辑地址涉及一个程序认为是数据是如何被存储的。假设一个程序正进入存储器,它不会“知道”双缓冲器。该程序可以给定它需要逻辑地址38。另外一种软件把逻辑地址转换成实际地址。在这种情况下,该软件就到实际地址38,得到该数据,并把它传送回到请求该数据的那个程序。
NVM包括地址00至3F各种任务进入00至38的逻辑地址空间。双缓冲器为4字长,并保存在单元39至3C(参看表2)。如上所述,索引包括要写的地址和指示有效双缓冲器的标记。DATA0、DATA1和DATA2包含要写入NVM的数据。所有操作中,仅有一个除外,即在最佳实施例中所有用于IPPV系统的操作需要至多三个NVM写操作。假如某种操作需要的写操作多于三个,就需要包括DATA3、DATA4……等的更大的双缓冲器。在本实施例中,需要多于三个操作的仅仅是一个操作就是使NVM初始化的操作。电源一恢复,模块就能检测初始化正在进行中(由INDEX索引),并能再执行初始化。单元3D、3E和3F(START1、START2和START3包含双缓冲器的实际地址,在本实施例中是实际地址39。这些单元是固定的单元,以便一旦“电源恢复”,软件可以定位双缓冲器。通常。在NVM中至少有一个单元必须固定,以便定位双缓冲器。因为该双缓冲器仅周期地(例如每两周一次)移动,所以在固定单元中的数据不会经常变更,也就不至于产生用坏的问题。
表3示出了双缓冲器已经被移动之后的NVM。
在表3中,双缓冲器保存在单元38至3B。当一个任务请求NVM单元38时,软件把该请求变址到单元3C。大约每两周双缓冲器移动一个位置。当它到达始端(或末端)时,就沿另一方向移动。这样就在整个NVM中均匀地分配了NVM写操作。每两次双缓冲器移动之间的时间周期取决于多个因素,而选择两周的时间周期仅是举例说明现在用于IPPV环境中NVM的取值。例如数据写的量和可用存储空间的量等因素都可以在一个特定系统中用于确定实际的时间周期。
把表2与表3进行比较可以看出双缓冲器已经被向上移动,逻辑地址38已经移到实际地址3C。因此,实际地址38中的信息必须移到实际地址3C,然后双缓冲器必须上移。为了再上移双缓冲器,实际地址37中的信息必须移到实际地址3B。下面将结合图3中所示的简化存储器说明这种处理。
图3的存储器具有9个存储单元。存储单元9包含对双缓冲器的指示字。在本实施例中,如表2和表3中所示的在存储单元START1、START2和START3中保存该指示字的三个复制。存储单元1至5分别包含实际数据10至50。存储单元6至8包含双缓冲器。存储单元9包含号码6指示双缓冲器的位置。
现在举例说明利用双缓冲器的写操作的设计思想。假设存储单元3中的信息要从30改变成80。为了完成这个变更,如图3a中所示,首先把数据“80”写入双缓冲器中的存储单元6。存储单元7包含一个0,在本实施例中这指示一个无效的双缓冲器。因此,如果在这时电源发生故障而接着又被恢复,软件将判定该双缓冲器无效,并忽略该双缓冲器中的任何数据。然后把指示包含在双缓冲器中的信息要被写入位置的索引写入存储单元7。在本实施例中,如图36中所示,存储单元7指示包含在双缓冲器中的数据要被写入存储单元3。如果在标记已经被设置之后发生电源故障,当电源恢复时,软件将判定数据“80”要被写入存储单元3,并将执行该操作。如果正在写“80”期间发生电源故障,导致把错误数据写入存储单元3,NVM完整性仍能保持,因为当电源恢复时,软件将再判定数据“80”要写入存储单元3,并将重新执行该操作。
然后如图3C中所示,新的数据“80”被写入存储单元3。最后如图3d中所示,存储单元7中的标记被清除。清除存储单元6中的数据“80”并不是关健性的,因为标记将指出一个无效双缓冲器,软件将忽略该双缓冲器中任何数据。
下面参看图4说明双缓冲器的动态移动。为了移动双缓冲器,第一步先清除双缓冲器,即,如图4a中所示,确保双缓冲器中每个单元都是0。然后,如图4b中所示,把包含在存储单元5中的数据“50”复制到存储单元8。这时如果软件是安排到包含双缓冲器的存储单元6的程序,因为存储单元7用作INDEX,并且指示一个无效双缓冲器,导致电源故障之后电源恢复时不执行任何操作,所以数据是一致的。如果软件是安排到包含双缓冲器的存储单元5的程序,因为存储单元6用作包含INDEX,也指示一个无效双缓冲器,同样导致电源故障之后电源恢复时不执行任何操作,所以数据也是一致的。最后如图4c中所示,存储单元9中的指示字变更成5,完成了执行移动双缓冲器的处理。双缓冲器还可以如图5中所示进行移动。同样如图5a中所示,第一步是通过把0写入每个双缓冲器存储单元,清除双缓冲器。然后,如图5b中所示,把包含在存储单元4中的数据“40”复制到存储单元7。之后如图5c中所示,存储单元9的指示字变更成4,完成该处理。
在预定的时间周期之后,执行双缓冲器的移动。在实现动态双缓冲器的IPPV系统的最佳实施例中,大约每两周双缓冲器移动一次。当双缓冲器已经移动到存储器的顶部时,它就返回向下移动。当它到达存储器底部时,它就返回向上移动。双缓冲器以与上述相同的方式向下移动,下面结合图6进行详细说明。为了把双缓冲器向下移动,在双缓冲器已经被清除之后,把存储单元8中的数据“50”复制到存储单元5。然后存储单元9中的指示字变更成6,完成该处理。参看表4,通常用于最佳实施例的处理概述如下。
表4 时间#1 时间#2A)把数据复制到DATA2/DATA1(根据方向) 时间#3 时间#4B)清除DATA0/DATA1 时间#5 时间#6C)更新START1 时间#7 时间#8D)更新START2 时间#9 时间#10E)更新START3 时间#11 下面将对可能发生电源故障的11个区段进行说明。如果在时间#1发生电源故障,因为尚未执行任何操作,所以保持了NVM的完整性。如果在时间#2发生电源故障,因为在该操作开始时索引是0,所以电源恢复时,不执行任何操作,因此忽略DATA0或DATA2中的任何数据。在时间#3、#4或#5发生电源故障会产生与在时间#2发生电源故障时相同的结果,因为索引仍然是0。在时间#6或时间#7发生电源故障之后电源恢复时,软件检查START1、START2和START3。如果START2和START3相同,那未就忽略START1,并用START2进行重写。否则,就认为START1是正确的。对于这种情况,START2和START3将相等,因此将重写START1,最后的结果与在时间#1发生电源故障的结果相同。在时间#8发生电源故障之后电源恢复时,软件检查START1、START2和START3。如果START2和START3相同,那么就忽略STAR1,并用START2进行重写。否则就认为START1是正确的。如果START2刚好与START3相同,那么结果与在时间#6发生电源故障的结果相同。如果不相同,就把START1复制到START2和START3。这样实际上移动了双缓冲器。在移动之前,索引是现在的DATA0或DATA1。该单元在移动开始之前就已经被清除。因为0不符合有效索引的要求,所以忽略该双缓冲器。除了START2决不会与START3相同之外,在时间#9发生电源故障产生与在时间#8发生电源故障相同的结果。在时间#10,如果START3与START2相符,该双缓冲器已经被移动。如果不相符,就用START1确定START3,并在时间#11完成该操作,完成双缓冲器的移动。
为了移动双缓冲器,仅需移动一个存储单元。在应用本发明的情况下,需要同时执行写操作的存储单元不超过三个。而且这三个存储单元是相连贯的,因此仅需一个索引指示数据必须写入的单元。
权利要求
1、一种延长具有多个存储单元的非易失存储器使用期限的方法,所述的方法由以下步骤组成
动态移动数据经常写入的任何存储单元。
2、一种把数据写入具有整个多个存储单元的非易失存储器的方法,由以下步骤组成
(a)把足够的用于重现数据写操作的信息写入包括至少两个存储单元的双缓冲器;
(b)设置一个指示所述双缓冲器中的信息是正确的标记;
(c)执行写操作;
(d)清除该标记;
(e)在非易失存储器中整体多个存储单元动态移动所述的双缓冲器。
3、根据权利要求2所述的方法,其特征是所述双缓冲器包含要被写的数据和所述数据要被写入的存储单元。
4、用于把数据写入具有多个存储单元的非易失存储器的装置,所述装置包括
用于把足够的信息写入包括至少两个存储单元的双缓冲器的装置;
用于设置一个指示所述双缓冲器中的信息是正确的标记装置;
用于执行写操作的装置;
用于清除该标记的装置,
用于在非易失存储器中,多个存储单元动态移动所述双缓冲器的装置。
5、根据权利要求4所述的装置,其特征是所述双缓冲器包含要被写的数据和所述数据要被写入的存储单元。
全文摘要
一种防止在发生电源故障时被写入非易失存储器的数据错误的方法。在写操作执行之前,把信息写入双缓冲器,以便重现在写操作期间将执行的步骤。设置一个标记,在指示双缓冲器中的信息是正确的。然后执行写操作,并清除该标记。在整个非易失存储器上动态移动双缓冲器,以便尽可能均匀地分配非易失存储器的损坏。
文档编号G01N27/83GK1038169SQ8910379
公开日1989年12月20日 申请日期1989年5月30日 优先权日1988年5月30日
发明者戴维·J·纳达, 兰杜夫·J·肖布斯 申请人:亚特兰大科研公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1