‹ 返回视频系列: 持久内存编程入门

持久内存编程(第 4 节)事务思维方式

  • 概览
  • 资源
  • 文字稿

Andy Rudoff 是英特尔公司的非易失性内存软件架构师,也是存储网络行业协会 ( SNIA) 非易失性内存编程技术工作组的成员。在这段视频中,Andy 将讲解持久内存中的常驻队列示例,并讲解对这些数据结构进行事务性更新的必要性。

大家好,我是英特尔公司的 Andy Rudoff。这段视频将简要说明为我们的持久内存编程队列示例设计的数据结构。请务必观看播放列表中有关持久内存编程的后续视频,了解更多信息。第一步要定义我们需要的数据结构。我的示例是一个通过头指针和尾指针管理的简单队列。当头指针和尾指针是空指针时,队列为空,如屏幕所示。当向队列中添加条目时,头指针指向队列中的第一个条目,尾指针指向最后一个条目。请看屏幕,每向队列添加一个条目,就会分配一个新的 struct pmem_entry。

现在,我们考虑将这一数据结构存储到持久内存中。头指针和尾指针所在的 class pmem_queue 是我们的程序在进入队列时要访问的第一个数据结构。这个队列中的所有条目都挂接在这个主数据结构上。在持久内存中,我们将其称为根对象。您可以看到,应用程序要将一个队列保存到持久内存中必须首先找到 pmem 池中的根对象,如屏幕所示。lib pmem obj 库提供了一个用于访问根对象的接口,当我们讲到应用程序代码时,您可以在这个播放列表的其它视频中看到。

当应用程序拥有根对象时,我们就能够对队列进行添加和删除条目的操作。由于这是持久内存,数据结构原地更新,指针用于在分配的位置之间切换,这与任何其它内存常驻数据结构相似,但由于这是持久内存,必须采取事务性变更方式,从而避免添加新条目的操作在程序或机器崩溃的情况下半途而废。分配条目以及事务性添加和删除条目从编程上来说比较复杂。这种复杂编程正是我们开发 lib pmem obj 的原因。这个库提供了通用事务和持久内存分配。

在本播放列表的后续视频中,我会将这些想法转换为 c++ 代码,提供一个使用 lib pmem obj库的具体示例。感谢大家收看。如需了解更多详细信息,请查看持久内存编程播放列表,并访问下方提供的链接。请记得给本视频点赞,并订阅英特尔软件 YouTube 频道。