一种工作于内核态的进程间持久性内存保护方法技术

技术编号:21914455 阅读:26 留言:0更新日期:2019-08-21 12:34
本发明专利技术公开了一种工作于内核态的进程间持久性内存保护方法,包括初始化阶段:在内核地址空间占据内核pdg表的若干空闲表项,并构建映射到持久性内存的后三级页表;保护阶段:当用户进程需要读写持久性内存时,修改该进程的pgd表项n,使其指向初始化阶段构建的后三级页表,从而实现进程间持久性内存的保护;当没有进程要读写持久性内存时,内核代码中存在的悬挂指针无法破坏和泄露持久性内存中的数据;当某个进程在读写持久性内存时,在其他进程上下文中运行的内核代码中存在的悬挂指针无法破坏和泄露持久性内存中的数据;本发明专利技术方法是基于页表机制,而该机制普遍存在于现代处理器和操作系统之中,因此具有普适性强的特点。

A Kernel-state Interprocess Persistent Memory Protection Method

【技术实现步骤摘要】
一种工作于内核态的进程间持久性内存保护方法
本专利技术属于持久性内存保护
,具体涉及一种工作于内核态的进程间持久性内存保护方法。
技术介绍
随着云技术和大数据的迅猛发展,海量数据给计算和存储系统带来了巨大的挑战。虽然当数据位于内存时处理速度很快,但是由于内存的容量限制、易失性等问题,使得传统的数据处理解决方案,需要在内外存之间交换数据,而这已经成为了系统性能颈点之一。近年来,诸如RRAM、PCM、MRAM、STTRAM等持久性内存取得了长足进步,其持久性、大容量、高密度、低能耗、读写速度快、磨损周期长等优势,使研究人员看到了解决内外存数据交换性能瓶颈的希望。从硬件层面看,由于持久性内存读写速度近似于DRAM,因此,它可被直接连入到处理器内存子系统中,完全或部分替换DRAM。这种持久性内存使用方式,远快于通过PCI-E总线将其与CPU相连。从软件层面看,目前应用程序有两种方式使用持久性内存。一是,将持久性内存映射到应用程序地址空间中,通过访存指令直接操作。二是,通过使用文件操作接口进入内核态,由文件系统或块设备驱动程序等访问持久性内存。这两种使用方法各有优劣:前者能充分挖掘持久性内存硬件本身带来的性能提升,然而需要对已有的应用程序进行重新设计和大量的修改;后者虽然有陷入内核、存储I/O栈逻辑处理等所带来的开销,但是由于保持了接口不变,因此应用程序在使用持久性内存时,无需进行任何特殊的设计和修改。由于兼容性,这种通过传统文件操作接口,访问持久性内存的方式将会长期存在。考虑上述因素,本专利针对的持久性内存应用场景,即在硬件方面直接连入CPU内存子系统,在软件方面使用文件操作接口访问持久性内存。在上述应用场景中,持久性内存将会被文件系统、块设备驱动等工作在内核态的软件系统所访问。而在目前主流操作系统实现中,如Linux,内核态地址空间是共享的。即若无特殊处理,工作在内核中的其他任何代码都能访问持久性内存。这意味着,持久性内存上的数据很容易遭到内核代码的破坏。比如,由于某个内核程序错误,产生了一个悬挂指针,而该指针又错误地指向了持久性内存中的某个地址。这样一来,如果通过该指针进行写操作,势必会破坏持久性内存上的原有数据。由于其持久性,即掉电后数据依然存在,显然这个悬挂指针造成的错误将是永久性的。不但是写操作,读操作也存在隐患。内核代码通过这个错误的悬挂指针,可以任意读取持久性内存上的数据,极大地增加了数据泄露的风险。因此,即使只能在内核态下访问持久性内存,也需要对其进行一定程度的保护,以防止出现上述因悬挂指针而导致的隐患。目前,针对悬挂指针所带来的问题,通常有两类解决方案,一类是基于页表机制,另一类是基于非页表机制。在基于页表机制的保护方案中,目前主要存在两种方法,即将持久性内存页面设置为只读、私有页表映射。将持久性内存页面设置为只读,在一般情况下可以阻止悬挂指针对持久性内存的错误写操作。但是,当要写持久性内存时,必须将页面的只读属性修改成可读写属性。这样一来,其他内核模块在页面修改成可读写属性期间,就能写持久性内存。显然,此时对于悬挂指针而言,存在着读写持久性内存的时间窗口,即依然有可能破坏持久性内存上的数据。私有页面映射机制只有在需要读写持久性内存时,才建立映射到持久性内存的页表。并且,它为每个CPU分配不同的内核线性地址区域读写持久性内存,以避免TLB污染。然而,由于内核地址空间是共享的,一旦建立好到持久性内存的映射,其他内核代码就拥有了读写持久性内存的时间窗口。显然,即使使用私有页面映射机制,也不能完全规避悬挂指针错误导致的持久性内存数据被破坏的问题。基于非页表的保护机制,主要与特定处理器相关。例如,在x86处理器中,CR0寄存器的WP位,可用于只读页面的写操作。使用CR0/WP技术,能够阻止运行在其他CPU上的内核代码对持久性内存的写访问,在一定程度上做到了持久性内存的写保护。然而,由于持久性内存一直以只读方式映射到内核地址空间,因此通过悬挂指针是有可能读到持久性内存数据,从而增加数据泄露的风险。在性能方面,使用CR0/WP技术对持久性内存进行写操作,其性能较差,相当于在不使用任何缓存机制情况下执行写操作。另外,不是所有处理器都有WP位。在缺乏WP位支持的处理器中,无法使用上述机制。相比之下,基于页表的持久性内存保护机制更为通用。Intel近期推出的CPU开始支持PKRU(ProtectionKeyRightsforUserPages)机制,该机制可用于页面保护,但针对的是用户态页面,而本专利的目标是内核态持久性页面保护。因此,该项技术和本专利针对的是不同的场景,互不相关。由此可见,到目前为止,尚没有一种机制能在内核态,完全阻止悬挂指针对持久性内存的读、写访问。在现有的相关技术中,提供了一种基于页表读写属性的持久性内存保护机制;在现代处理器和操作系统中,物理地址通常是不能被直接使用的,而程序代码能直接使用的地址实际上是逻辑地址或线性地址。当应用程序或内核代码需要访问内存时,处理器会根据它们提供的地址,查询页表得到对应的物理地址,之后再根据该地址访问物理内存。操作系统可以在页表中设置不同的属性,以控制处理器对物理内存的访问。在这些属性中,页表项的R/W标志位可用于控制物理内存的读写权限。当R/W位等于0时,其对应的物理页面只能读不能写;当R/W位等于1时,其对应的物理页面既可以读又可以写。根据上述原理,基于页表读写属性的持久性内存保护机制,首先会在内核页表中,为持久性内存建立线性地址映射关系,以使内核代码能通过相应的线性地址访问持久性内存页。然后在内核页表中,把所有持久性内存页面对应的R/W标志位设置为0,即整个持久性内存只能读不能写。下面以构建于Intelx64CPU的64位Linux操作系统为例,说明持久性内存的映射方法,而图1则给出了映射示意。如图1所示在64位系统中,内核页表由四级页表(即pgd、pud、pmd、pt)构成,Linux内核使用swapper_pg_dir管理内核页表,它实际是指向第一级页表pgd的指针。在pgd表中,表项0~0xFF属于用户地址空间,而表项0x100~0x1ff属于内核地址空间。在映射持久性内存时,首先需要在pgd表的内核地址空间部分选择要使用的表项,而图1假设选择的表项是m。若表项m存放有有效的pud表地址信息,则在pud表中选取表项;否则,就会构建新的pud表,并在m中存放新表的地址信息。按照上述方法,依次处理其余各级页表。在处理pt表时,需要选择未使用的表项以存储持久性内存页的地址,从而完成内核线性地址区域到持久性内存的映射。图1给出了两个pt表项映射持久性内存页的示例,其中表项包含了前述的R/W位,可控制对应的持久性页面的读写属性。当上述映射建立好后,内核代码就可以访问持久性内存。对于读操作而言,无需进行其他特殊处理,在内核页表机制下直接读取即可。但是当要写持久性内存时,首先会将待写页面对应的pt表项的R/W标志位设置为1,即允许写持久性内存。之后,即可执行若干写操作。当写操作执行完毕后,再将R/W标志位改回0,即又只允许读持久性内存。虽然基于页表读写属性的持久性内存保护机制,将持久性页面设置为只读时,能够阻止悬挂指针对持久性内存上数据本文档来自技高网...

【技术保护点】
1.一种工作于内核态的进程间持久性内存保护方法,其特征在于,包括以下步骤:S1、初始化阶段:在内核地址空间占据内核pdg表的若干空闲表项,并构建映射到持久性内存的后三级页表;S2、保护阶段:当用户进程需要读写持久性内存时,修改该进程的pgd表项n,使其指向初始化阶段构建的后三级页表,从而实现进程间持久性内存的保护;其中,当初始化阶段仅占据一个pgd表项时,该表项索引即为n。

【技术特征摘要】
1.一种工作于内核态的进程间持久性内存保护方法,其特征在于,包括以下步骤:S1、初始化阶段:在内核地址空间占据内核pdg表的若干空闲表项,并构建映射到持久性内存的后三级页表;S2、保护阶段:当用户进程需要读写持久性内存时,修改该进程的pgd表项n,使其指向初始化阶段构建的后三级页表,从而实现进程间持久性内存的保护;其中,当初始化阶段仅占据一个pgd表项时,该表项索引即为n。2.根据权利要求1所述的工作于内核态的进程间持久性内存保护方法,其特征在于,所述步骤S1具体为;S11、确定整个持久性内存的大小;S12、在内核数据结构中查找大于等于持久性内存大小且满足地址范围要求的内核线性地址区域;S13、向管理内核线性地址区域的数据结构插入元素,以占据步骤S12中查找到的内核线性地址区域;S14、计算完成到持久性内存映射所需的后三级页表的页数;其中,后三级页表依次为pud表、pmd表和pt表;S15、根据所需的pud表、pmd表和pt表的页数,向内核申请对应数量的页框,并根据映射关系填写后三级页表,完成映射到持久性内存的后三级页表的构建。3.根据权利要求1所述的工作于内核态的进程间持久性内存保护方法,其特征在于,在所述后三级页表中,所有持久性页面的读写属...

【专利技术属性】
技术研发人员:李林马乔雷瀚文
申请(专利权)人:电子科技大学
类型:发明
国别省市:四川,51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1