用于非易失性存储器的留存日志操作的制作方法_3

文档序号:8227542阅读:来源:国知局
一和第二“nvstore”指令写入的信息提交到NVM 135。如果在NVM 135中存储信息不遵循第二规则,则可能不清楚何时将由第一和/或第二 “nvstore”指令指定的信息实际写入NVM 135。例如,如果由第二“nvstore”指令指定的信息在“nvflush”指令完成执行之后被提交到NVM 135,则“nvflush”指令的执行的完成可不保证由第二“nvstore”指令写入的信息被实际提交到NVM 135。
[0037]当实现持久的事务时,重叠写入NVM的操作的执行可以是有利的。持久的事务可包含涉及将与事务关联的信息存储在持久介质(例如,NVM 135)中的事务。
[0038]例如,考虑包含可将信息存储在NVM 135中的持久事务的以下代码: begin transact1n
nvstore varName,“ John Q.,,;nvstore varSurname,“Public,,;nvstore varPhone,“555-0199” ;end transact1nnvflush
事务涉及将值“JohnQ.”、“Public”以及“555-0199”分别存储在包含在NVM 135中的名为“varName”、“varSurname”和“varPhone”的变量中。可执行遵循事务的“nvflush”指令以确保在“nvflush”完成执行之前将值提交到NVM 135中的变量,因此,可遵循“nvflush”指令的代码可依靠包含在变量中的值。
[0039]注意因为“nvstore”指令可延迟变量的留存,所以“nvstore”指令可能不指示何时将变量实际留存到NVM 135。因此,直到“nvflush”指令成功完成执行,才可认为将事务提交到NVM 135。
[0040]在涉及写入NVM 135的信息的延迟的留存方案中,如果发生阻止将信息提交到NVM 135的事件,则可产生问题。例如,假设当计算装置100丢失电力时,计算装置100执行以上事务来防止“nvflush”指令的执行。因为“nvflush”指令未被执行,所以不清楚事务中的所有数据是否都已提交到NVM 135。因此,关于事务的NVM 135的状态可能是未知的。
[0041]消除当在写入NVM 135时使用延迟的留存时可产生的问题的一个方式可以是维持日志。例如,日志可保持可用于将NVM 135的状态回退到已知状态的信息。
[0042]图3图示可用于维持可保持信息的日志的示例代码300,信息可用于回退包含在NVM 135的信息。例如,代码300可包含在APP 134和/或OS 132中来记录回退信息。例如,信息可与包含在数据138中的一个或多个变量关联。
[0043]参考图3,代码300包含名为“log”的函数310、名为“clear_log”的函数312以及名为“is_log_clear”的函数314。函数310包含是变量的地址的输入参数。如以下另外将描述的,可使用延迟的留存操作(例如上述的“nvstore”指令)将变量可存储在NVM 135中。在函数310中,使用延迟的留存操作(在此示例中“nvstore”指令)将变量的当前值和变量的地址写入日志中的条目(名为“logBuffer”)。可将日志维持在还可保持变量的NVM135中。日志中的条目由名为“ind”的变量识别,它还可包含在NVM 135中。递增“ind”的值来指向日志中的下一可用条目并且使用延迟的留存操作将递增的值写入“ind”。
[0044]应该注意的是本文描述的“nvstore”指令是延迟的留存操作的示例实施例。延迟的留存操作的其它实施例可以用不同于指令的其它方式来实现。例如,可在可能不涉及指令的硬件中实现延迟的留存操作。
[0045]此外,应该注意到可使用可不同于本文描述的“nvstore”指令而操作的指令来实现延迟的留存操作的其它实施例。例如,本文描述的“nvstore”指令将值写入NVM 135中的位置。例如,延迟的留存操作的其它实施例可包含可将多个数据值写入NVM 135中的多个位置的指令。例如,函数310可采用这样的指令来将变量的地址、变量的当前值和/或“ ind”的值写入NVM 135中。
[0046]“clear_l0g”函数312将名为“ ind”变量设置为指示日志被清除(即,日志不包含任何信息)的已知值。在此示例中,零值指示日志被清除。“clear_l0g”函数312使用延迟的留存操作将变量“ ind”设置为零。
[0047]“is_l0g_clear”函数314返回指示日志是否被清除的结果。具体地,“is_log_clear”函数314从NVM 135读取“ind”的值并且比较它与指示日志被清除(在此示例中为零)的已知值。函数314基于比较的结果来返回比较的布尔结果(例如,真、假)。
[0048]在事务中可调用以上功能来记录信息,例如,信息可用于回退使用延迟的留存操作由事务写入的包含在NVM 135中的变量的状态。记录的信息可用于从可阻止由延迟的留存操作写入的信息被提交到NVM 135的事件中恢复。
[0049]图4图示包含用于记录与事务440关联的信息的代码的示例代码400。例如,代码400可包含在APP 134和/或OS 132中。参考图4,事务400在行420处开始并且在行434处结束。在行424处,“nvstore”指令用于将字符串“JohnQ.”存储在NVM 135中的名为“varName”的变量中。在行428处,“nvstore”用于将字符串“Public”存储在NVM 135中的名为“ varSurname”的变量中,并且在行432处,“nvstore”用于将字符串“555-0199”存储在NVM 135中的名为“varPhone”的变量中。
[0050]行422、426 和 430 记录变量“varName”、“varSurname” 和 “varPhone” 的地址和值。在行424、428和432处分别执行“nvstore”指令之前,记录的值包含变量的值。
[0051]例如,假设在行424、428以及432处执行以上“nvstore”指令之前,变量“ varName ”、“ varSurname,,和“ varPhone,,包含数据 138 中的值“ Jane ”、“Doe,,和“ 555-0100 ”。在行422处的代码可使创造日志136中的条目用于包含变量“varName”的地址和值“Jane”的变量“varName”。类似地,在行426处的代码可使创造日志136中的条目用于包含变量“varSurname”的地址和值“Doe”的变量“varSurname”,并且在行430处的代码可使创造日志136中的条目用于包含变量“varPhone”的地址和值“555-0100”的变量“varPhone”。注意以上三个日志条目是使用延迟的留存操作(在此示例中它是“nvstore”指令)来创造。
[0052]在行436处,调用功能“clear_log”。如上所述,“clear_log”功能使用“nvstore”指令来将名为“ind”的变量设置为指示日志被清除的已知值。在行438处,执行“nvflush”指令。“nvflush”指令确保将由以前的“nvstore”指令指定的信息写入NVM。因此,在此不例中,在“nvflush”指令的执行之后,NVM 135中的变量“varName”、“varSurname”和“varPhone”分别包含值“JohnQ.”、“Public”和“555-0199”。此外,NVM 135 中的变量“ind”包含值“ O ”,因此指示日志被清除。
[0053]图5图示可用于将信息存储在包含在NVM中的变量中的示例动作的流程图。参考图5,在框510处,可执行第一延迟的留存操作,其涉及将关于变量的信息存储在日志中。例如,变量和日志可包含在NVM 135中。延迟的留存操作可包含上述的“nvstore”指令。执行延迟的留存操作可包含执行“nvstore”指令。存储在日志中的信息可包含NVM 135中的变量的位置(例如,变量的地址)和变量的当前值。日志可能够包含多个条目并且信息可存储在包含在日志中的条目中。
[0054]在框512处,可执行第二延迟的留存操作,其涉及将信息存储在变量中。例如,第二延迟的留存操作可包含“nvstore”指令并且执行操作可包含执行指令。执行指令可包含使用延迟的留存将信息存储在变量中。存储的信息可覆写可包含在变量中的现存信息。
[0055]在框514处,执行第三延迟的留存操作,其涉及将指示日志被清除的信息存储在NVM中。例如,第三延迟的留存操作还可以是“nvstore”操作并且执行操作可包含执行指令。执行“nvstore”指令可包含将第二变量中的值(指示日志被清除)存储在NVM 135中。此处,例如,第二变量可保持指向日志中的“下一可用的条目”的索引。将第二变量设置为指向日志中的特定条目(例如,第一条目)可提供日志被清除的指示。注意可使用其它方式来指示日志被清除。例如,第二变量可指示日志中的多个条目并且将第二变量设置为已知值(例如,零)可指示日志被清除。类似地,例如,第二变量可包含可设置为指示日志是否被清除的标记。
[0056]在框516处,执行刷新操作,其涉及提交与第一、第二或第三延迟的留存操作中的至少一个关联的信息。例如,假设第一、第二或第三延迟的留存操作包含执行将信息存储在NVM 135中的“nvstore”指令,例如以上所述的。另外,例如,假设与第一延迟的留存操作关联的信息已经被写入NVM 135但是与第二和第三延迟的留存操作关
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1