ACM Transactions on Storage,Vol.号144、第三十四条。出版日期:2018年12月
表
1.Li
B
PM API
open
(.)
关闭
(...)
clear
(.)
删除
(...)
打开/创建容器。关闭
打开的容器。清除容
器内容物。
删除所有容器数据和元数据(持久性)。
原子地将所有挂起的更新应用到容器。
撤消对容器的所有更新
setroot
(.)
getroot
(.)
排除
(...)
将object设置为容器的根获取根
对象的地址。
在容器密封过程中,请勿遵循指针
在软件持久内存(SoftPM)[10]的工作中,我们提出了一个API,它将类似内存的
接口与
容器
抽象相结合。
建议的空气污染指数归纳于表一,并分为四个主要类别。第一类是容器管理,
处理与容器相关的操作。LIBPM库为容器提供了一个它维护足够的信息来映射容器
ID与构成容器的底层持久文件。它允许程序员通过一个简单的API调用- open来创
建或恢复容器一个容器只能由一个应用程序独占打开LIBPM在允许应用程序访问容
器之前检查容器的状态
开发人员可以关闭打开的容器或删除现有的容器,从而分别使用
close
和
delete
API调用回收容器使用的PM第二类允许开发人员使用
pmalloc
在给定的容器
中创建任意复杂的数据结构,并使用
pfree
将它们从容器中释放出来。应该注意的
是,除了托管对象之外,容器还通过存储额外的元数据来保存对象之间的关系
(指针)这些附加信息使得容器可以在保持指针正确性的同时,在任意内存位置
正确地恢复持久对象第三类实现事务模型。提交操作原子地保存对给定容器所做
的所有更改或者,可以通过发出回滚调用来中止所有更改最后一个类别定义了容
器上与注释相关的操作这允许程序员分别使用setroot和getroot设置和获取容器容器
根指定计算内存闭包时的起始点
以标识需要持久化的所有数据
2.2 核心
L
IB
PM Core管理应用程序创建的容器,以提供透明的持久内存分配和事务持久性支
持。Lib PM核心的四个互连组件
-
内存分配器、事务管理器、指针管理
器和
发现
-提供
这些
功能。这些组件一起实现了L
IB
PM API。
内存分配器
负责分配任意大小的持久对象pmalloc从
后端
组件的
页面分配器
提供
的映射页面中分配内存它实现了slab分配的一个变体[1],其中对象根据它们的大小
分组在一起,以最大限度地减少碎片。除了加速分配之外,这种基于slab的分配技
术还允许有效地实现释放持久内存。