论文部分内容阅读
随着计算机体系结构和内存技术的发展,非易失性内存(Non-Volatile Memory)及其相关技术正受到越来越多的关注。它不仅提供了可按字节寻址的,接近DRAM的访问速度,还提供了类似传统磁盘的数据持久性,因此被认为是下一代内存—存储体系结构的发展方向。然而,许多高级语言(如Python,JavaScript等)却缺少合理并高效的方法来利用非易失性内存处理需要持久化的对象。在过去,由这些高级语言编写的应用程序往往依赖于外部的存储系统(如文件系统,数据库系统)来处理这些数据。但是,这一方面导致了数据在内存和存储之间传递的开销,另一方面,由于对象的内存结构与存储的结构往往有所不同,这使得数据在传递的过程中往往需要进行序列化和反序列化。针对以上两个问题,本文提出了面向非易失性内存的高级语言对象持久化框架,旨在为高级语言的面向对象编程提供高效的数据持久化方案。首先,该框架使得高级语言可以像对待普通对象一样,创建和访问持久对象。另外,该框架为持久对象设计了持久内存结构,这使得程序可直接访问持久对象,而不需要数据在存储和内存中传输。另外,由于数据具有持久性,该框架能够保证这些对象中的数据可以在程序异常中断后可恢复到一致性的状态。最后,该框架还为这些持久对象设计了一套垃圾回收机制,因此被视为垃圾的持久对象可以自动地被清理。本文的主要研究内容如下:(1)提出了高级语言持久对象管理方案。本文基于高级语言中面向对象编程的特点,设计了持久对象池来管理持久对象。该对象池提供了基本基于非易失性内存的内存分配,管理,寻址,碎片处理等方法,从而为持久对象提供了存储,访问,修改和回收等基本操作。(2)提出高级语言持久数据结构设计。本文基于高级语言中原生对象的类型和结构,提出了与原生数据类型和数据结构一一对应的持久数据类型和数据结构。这使得用户可以高效地将原生对象存储在持久对象池中,从而得到对应的持久对象。(3)提出数据一致性保证策略。本文针对持久对象的持久性,提供了一套基于日志的数据一致性保证方案。由于目前非易失性内存仅支持最多8字节的原子写,本文首先为持久对象提供了高效的任意长度的原子写操作。另外,针对实际应用场景,本文还提供了基于日志的事务机制。(4)提出高级语言持久对象的垃圾回收机制。本文基于高级语言的特点,为持久对象设计了一套高效的垃圾回收机制。该回收机制使得被视为垃圾的持久对象会在合适的时间被释放,相应的内存空间也会被回收。同时,该垃圾回收机制能够经受程序的异常中断,保证了在该场景下数据的一致性。