![](http://4i-bird.com/wp-content/uploads/2020/12/image-6-400x260.png)
持久内存编程指南—乱译连载 (6. libpmem: 低层次持久内存支持)
本章演示了libpmem提供的API的一个很小集。该库不会为你改变,不会提供电源失效-安全事务,不提供分配器。像libpmemobj库(下章描述)提供了所有这些任务,并内部使用libpmem以简单化flush和copy操作。
![](http://4i-bird.com/wp-content/uploads/2020/12/PMDK-400x260.png)
持久内存编程指南—乱译连载 (5. PMDK介绍)
本章给出了PMDK中可用的库和工具简要列表,以及简要说明了什么时候使用它们。现在你应该知道使用这些库和工具能干什么了。后面的章节,将介绍如何使用这些库和工具开发软件。
![](http://4i-bird.com/wp-content/uploads/2020/12/transaction-400x260.jpg)
持久内存编程指南—乱译连载 (4. 持久内存编程基础概念)
本章是持久内存编程概念概览。当开发使用持久内存的应用时,必须考虑下面几方面:1) 原子更新;2) FLUSH不是事务的;3) 应用启动时的职责;4) 硬件配置调优。在一个产品级应用中应对好以上挑战,需要更复杂的编程、广泛的测试,以及性能分析。
![](http://4i-bird.com/wp-content/uploads/2020/12/image-20-392x260.png)
持久内存编程指南—乱译连载 (3. 操作系统对持久内存的支持)
本章展示了操作系统持久内存接口完整视图。应用可以把持久内存当前快速SSD,直接通过持久内存感知文件系统,或者直通过DAX接映射到应用内存空间。DAX有效利用了操作系统的内存映射文件服务,并利用硬件能力直接映射持久内存到应用地址空间。这避免了在主存和存储之间移动数据。
![](http://4i-bird.com/wp-content/uploads/2020/12/image-7.png)
持久内存编程指南—乱译连载 (2.持久内存架构)
本章定义了持久内存及其特性,概述了CPU缓存的工作方式,并描述了为什么直接访问持久内存的应用程序必须承担冲刷CPU缓存的责任。我们主要关注硬件实现。用户库(如随PMDK提供的用户库)承担体系结构和硬件特定操作的责任,并允许开发人员使用简单的API来实现它们。后面的章节将更详细地描述PMDK库,并展示如何在应用程序中使用它们。