CN116107919A - 一种针对跨架构的多地址空间虚拟化内存域隔离方法 - Google Patents
一种针对跨架构的多地址空间虚拟化内存域隔离方法 Download PDFInfo
- Publication number
- CN116107919A CN116107919A CN202310061306.7A CN202310061306A CN116107919A CN 116107919 A CN116107919 A CN 116107919A CN 202310061306 A CN202310061306 A CN 202310061306A CN 116107919 A CN116107919 A CN 116107919A
- Authority
- CN
- China
- Prior art keywords
- domain
- memory
- address space
- virtual
- thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1036—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种针对跨架构的多地址空间虚拟化内存域隔离方法,该方法基于硬件所提供的内存域原语,通过修改操作系统内核代码的方式,以多地址空间的进程架构设计,将有限数量的物理内存域虚拟化出无限数量的虚拟内存域,为上层应用程序提供足够的内存域,以支持软件建立数量可扩展的软件安全隔离架构,通过扩展地址空间的数量实现有限物理内存隔离域的虚拟化,能够为应用高效地提供无限数量的虚拟内存隔离域。本方法的设计具有通用性,可以应用在不同的处理器架构上,而无需借助内存域原语以外的特殊处理器特性。本方法能够为目标应用程序提供无限数量的内存隔离域,以支持建立数量可扩展的软件安全隔离架构。
Description
技术领域
本发明涉及软硬件协同安全领域,具体地说,是一种针对跨架构的多地址空间虚拟化内存域隔离方法。
背景技术
近些年来,主流的处理器厂商在产品中提供了内存域原语这一硬件特性,例如IntelMemoryProtectionKeys、ARMMemoryDomains、IBMPowerProtection Keys等。该特性扩展了进程对内存页面权限的控制。内存域原语为上层应用程序提供了一定数量的内存隔离域,将一个地址空间的内存分成不同的内存域。进程的每个线程可以分别控制每个内存域的访问权限。在各级页表的页表项和TLB项中,增加了一个域ID字段,用于标识内存页面从属于哪一内存域。对各个内存域的访问权限存储在一个每个硬件线程所拥有的权限寄存器中,因此对于权限的控制是线程粒度的。在线程访问内存时,处理器首先获取到虚拟地址对应的域ID,而后检查权限寄存器,查看线程是否拥有正确访问权限,如果没有则触发异常。基于内存域原语,软件可以构造软件分区或数据金库,或用于JIT代码缓存的高速权限切换等场景。
内存域原语为应用程序提供的内存域数量是有限的,在Intel和ARM上仅存在16个内存域。然而,在某些保护场景中,软件对内存隔离域的数量有较大需求,主要体现在以下三个方面:许多应用依赖于大量的第三方库,其中有许多第三方库存在CVE或敏感数据,使得这些依赖组件之间是互不信任的关系,需要为不同组件建立大量的隔离域以实现组件间的安全隔离;服务器应用中往往存在大量线程(超过16个),每个线程中可能存在私有的敏感数据,例如Apachehttpd中每个线程中都存在SSL连接所需的密钥,这需要为每个线程建立独有的内存域以实现安全数据的保护;持久化内存让大量的文件可以像内存一样访问,这需要大量的隔离域以避免内存损害造成的持久化影响。
因此,在使用内存域原语对软件进行内存隔离域划分时,仍然存在内存域数量不足的问题,即,尽管内存域原语能够提供一定数量的内存隔离域,但是其数量不足以满足现实应用建立大量隔离域的安全需求。
目前,对于虚拟化物理内存域数量这一目的,现有技术存在三种设计方案:
(1)基于硬件的方案:该方案需要修改处理器的硬件设计,但侵入性的硬件修改阻碍了该方法更广泛的使用。
(2)基于虚拟机监视器(hypervisor)的方案:该方案将Intel处理器上的IntelMPK内存域原语与IntelVMFUNC特性结合,利用扩展页表特性(Extended pagetable)虚拟化物理内存域,但该方法仅适用于IntelX86架构,且要求被保护的应用程序运行于虚拟机中,这会带来额外的虚拟化开销。
(3)基于操作页表项的方案:该方案通过操作页表项的方式,在单一地址空间上实现内存域的虚拟化,但其设计上需要频繁的TLB冲刷操作,且同一时刻仅支持有限的内存域访问,引入忙等的开销。该方案会引入高额的性能开销,失去了内存域原语原本的高效特性。
可见,现有技术中还存在许多不足之处。
发明内容
本发明的目的在于,针对内存域原语中硬件提供的物理内存域数量不足的问题,提出了一种针对跨架构的多地址空间虚拟化内存域隔离方法。
本发明是通过以下技术方案来实现的:
本发明公开了一种针对跨架构的多地址空间虚拟化内存域隔离方法,进程拥有地址空间,在硬件存在内存域原语特性的条件下,每个地址空间均包含一定数量的物理内存隔离域,通过创建有多个地址空间的进程从而支持进程建立无限数量的虚拟内存隔离域,具体包括以下步骤:
1)添加内核抽象结构模块至操作系统内核;内核抽象结构模块包括虚拟域元数据结构和地址空间结构;虚拟域元数据结构用于记录进程中每个虚拟域所保护的内存页面信息,地址空间结构用于表示进程中的一个地址空间,记录了该地址空间私有的物理内存域到虚拟内存域的映射;进程拥有的所有地址空间共享进程从虚拟地址空间到物理地址空间的内存映射关系;
2)添加虚拟域访问处理模块至操作系统内核;虚拟域访问处理模块用于处理进程中的线程访问进程所创建的虚拟域;虚拟域访问处理模块根据进程由步骤1)的内核抽象结构模块所建立的虚拟域元数据和地址空间进行条件判定,根据条件执行虚拟域映射、线程迁移、旧虚拟域驱逐、地址空间切换中的某一项操作;操作对进程的虚拟域元数据和地址空间进行相应的修改,在虚拟域数量不足时为进程创建新的地址空间,以支持进程中的线程访问进程所创建的虚拟内存域;
3)添加用户态库模块至操作系统用户空间;用户态库模块基于步骤1)的内核抽象结构模块和步骤2)的虚拟域访问处理模块所提供的功能,为应用程序提供安全的虚拟内存域使用接口;应用程序调用用户态库模块提供的函数接口来建立无限数量的虚拟内存隔离域。
作为进一步地改进,本发明所述的内存隔离域由硬件内存域原语所提供,硬件内存域原语将进程的内存分为一定数量的内存区域,进程对不同内存区域的访问可具有不同的权限,每个内存区域即为一块内存隔离域。
作为进一步地改进,本发明所述的虚拟内存隔离域为基于内存域原语所虚拟出来的、支持无限数量的内存隔离域。
作为进一步地改进,本发明所述的步骤1)中的私有的物理内存域到虚拟内存域的映射,物理内存域由硬件内存域原语所提供,每个地址空间存在数量一定的物理内存域,内存域原语为每个地址空间提供了16个物理内存域,内存页面所属的物理内存域由该内存页面的页表项中的域ID字段所标识,物理内存域的域ID为0-15,进程所拥有的虚拟域数量可实现无限多个,大于域ID所能标识的数量16个,每个地址空间提供了16个物理内存域,能容纳所有虚拟内存域当中的16个虚拟内存域,地址空间结构维护了私有的从物理内存域到虚拟内存域的映射,映射标识了当前地址空间每个物理内存域所对应的虚拟内存域。
作为进一步地改进,本发明所述的步骤2)中的条件判定为虚拟域访问处理模块根据进程当前的虚拟域元数据和地址空间的情况,进行条件判定,以决定应该执行何种操作,进程调用步骤3)的用户态库函数接口创建新的虚拟域后,操作系统内核并不会立刻操作进程的地址空间结构;
当进程中的线程访问新创建的虚拟域时,操作系统内核的虚拟域访问处理模块开始进行条件判定:
若线程所在的地址空间存在空闲的物理内存域,则执行虚拟域映射操作;
若线程所在的地址空间所在的地址空间没有空闲的物理内存域,且容纳了多个线程,则执行线程迁移操作;
若所述线程所在的地址空间所在的地址空间没有空闲的物理内存域,且该地址空间没有其它线程,且应用程序限定该线程只拥有一个地址空间,则执行旧虚拟域驱逐操作;
若所述线程所在的地址空间所在的地址空间没有空闲的物理内存域,且该地址空间没有其它线程,且应用程序限定该线程可拥有多个地址空间,则执行地址空间切换操作。
作为进一步地改进,本发明所述的步骤2)中的虚拟域映射操作具体为,若访问线程所在的地址空间存在空闲的物理内存域,则无需创建新的地址空间,所述虚拟域访问处理模块将所述线程所在地址空间中空闲的物理内存域映射到所述要访问虚拟内存域上,同时更新该虚拟域所保护内存页面对应的页表项,修改页表项中的域ID字段,将所述内存页面与所述空闲物理域绑定。
作为进一步地改进,本发明所述的步骤2)中的线程迁移操作具体为,若访问线程所在的地址空间没有空闲的物理内存域,且容纳了多个线程,则将线程迁移至其它能够容纳该线程的地址空间中,所述虚拟域访问处理模块扫描所述线程所在进程所拥有的所有地址空间,若存在能够容纳该线程的其它地址空间,则将所述线程转移到该能够容纳所述线程的地址空间;若不存在能够容纳该线程的其它地址空间,则创建新的地址空间,将所述线程转移到新创建的地址空间;所述的容纳指该地址空间存在足够的物理域映射到所述线程需访问的虚拟域。
作为进一步地改进,本发明所述的步骤2)中的旧虚拟域驱逐操作,若线程所在的地址空间没有空闲的物理内存域,该地址空间没有其它线程,且应用程序限定该线程只拥有一个地址空间,则虚拟域访问处理模块执行旧虚拟域驱逐操作,在所述线程拥有的这一个地址空间中,只有16个物理内存域能够映射到16个虚拟内存域,所述线程需要访问新创建的虚拟内存域,所述新创建的虚拟内存域在所述地址空间中暂时未映射到物理内存域上;所述虚拟域访问处理模块选择一个已映射到物理内存域的旧虚拟内存域,驱逐该旧虚拟内存域的映射,并将得到的空闲物理域用于新访问的虚拟内存域的映射;进程的每个地址空间都与一个独立的地址空间标识符(ASID)所绑定,在驱逐旧的虚拟内存域时,仅需要CPU核本地的TLB冲刷操作。
作为进一步地改进,本发明所述的步骤2)中的地址空间切换操作,若线程所在的地址空间没有空闲的物理内存域,且该地址空间没有其它线程,且应用程序限定该线程可拥有多个地址空间,则虚拟域访问处理模块执行地址空间切换操作;所述新创建的虚拟内存域在所述地址空间中暂时未映射到物理内存域上,进程所创建的新虚拟域需要在该线程所拥有的其它地址空间建立映射;所述虚拟域访问处理模块通过切换页表基地址的方式,将所述线程切换到所述新创建的虚拟域所在的地址空间下执行;进程的每个地址空间都与一个独立的地址空间标识符(ASID)所绑定,在切换地址空间时,不引入TLB冲刷操作。
作为进一步地改进,本发明所述的步骤3)中的用户态库模块,为处于用户态的动态链接库,应用程序通过调用用户态库模块所提供的函数接口,为应用程序建立无限数量的虚拟内存隔离域。
本发明的有益效果如下:
本发明针对内存域原语中硬件提供的物理内存域数量不足的问题,提出了一种针对跨架构的多地址空间虚拟化内存域隔离方法。该方法基于硬件所提供的内存域原语,通过修改操作系统内核代码的方式,以多地址空间的进程架构设计,将有限数量的物理内存域虚拟化出无限数量的虚拟内存域,为上层应用程序提供足够的内存域,以支持软件建立数量可扩展的软件安全隔离架构。
为了实现内存域的虚拟化,本方法设计并实现了一种基于多地址空间的进程架构,通过扩展地址空间的数量实现有限物理内存隔离域的虚拟化,能够为应用高效地提供无限数量的虚拟内存隔离域。本方法的设计具有通用性,可以应用在不同的处理器架构上,而无需借助内存域原语以外的特殊处理器特性。本方法能够为目标应用程序提供无限数量的内存隔离域,以支持建立数量可扩展的软件安全隔离架构。
与已有的相关解决方案相比,本方法无需修改硬件,无需借助其它如IntelVMFUNC的硬件特性,能够适用于多种架构,且为目标应用带来很小的性能开销。
实验证明,本方法能够高效地实现内存域的虚拟化,为软件提供无限的虚拟内存域,仅带来很小的性能开销。基于Linux的原型系统在真实平台上的实验表明,将本方法应用在现实服务器应用程序的多内存域保护场景中,本方法所带来的性能开销在两个处理器架构(X86和ARM)下最多仅2.65%,开销小于其它已有解决方案。具体地,使用本发明保护OpenSSL中的密钥结构,为每个密钥分配一个单独的虚拟内存域,使用Apachehttpd进行测试,在X86和ARM上分别带来小于2.18%和2.65%的性能开销;使用本发明保护MySQL中线程的栈和内存数据,为每个线程的栈分配一个单独的虚拟内存域,为内存中的数据库数据分配一个虚拟内存与,在X86和ARM上分别带来0.47%和2.59%的性能开销。另外,本发明具有兼容性,与其它Linux子系统兼容,且在X86架构上能够适配现有的IntelMPK软件沙箱架构。
附图说明
图1是使用一种针对跨架构的多地址空间虚拟化内存域隔离方法的进程架构设计图;
图2是虚拟域访问处理模块的流程图;
图3是虚拟域访问处理模块中线程迁移的一个案例流程图。
具体实施方式
下面结合说明书附图,对本发明的具体技术方案作进一步地说明:
图1是使用一种针对跨架构的多地址空间虚拟化内存域隔离方法的进程架构设计图:用户空间新增了为应用程序提供的用户态库模块,操作系统内核新增了内核抽象结构模块和虚拟域访问处理模块。一种针对跨架构的多地址空间虚拟化内存域隔离方法,包括以下步骤:
1)添加内核抽象结构模块至操作系统内核;所述的内核抽象结构模块包括虚拟域元数据结构和地址空间结构;所述的虚拟域元数据结构用于记录进程中每个虚拟域所保护的内存页面信息,所述的地址空间结构用于表示进程中的一个地址空间,记录了该地址空间私有的物理内存域到虚拟内存域的映射;进程拥有的所有地址空间共享所述进程从虚拟地址空间到物理地址空间的内存映射关系;
2)添加虚拟域访问处理模块至操作系统内核;所述的虚拟域访问处理模块用于处理进程中的线程访问所述进程所创建的虚拟域;所述的虚拟域访问处理模块根据所述进程由步骤1)的内核抽象结构模块所建立的虚拟域元数据和地址空间进行条件判定,根据条件执行虚拟域映射、线程迁移、旧虚拟域驱逐、地址空间切换中的某一项操作;所述的操作对所述进程的虚拟域元数据和地址空间进行相应的修改,在虚拟域数量不足时为所述进程创建新的地址空间,以支持所述进程中的线程访问进程所创建的虚拟内存域;
3)添加用户态库模块至操作系统用户空间;用户态库模块基于步骤1)的内核抽象结构模块和步骤2)的虚拟域访问处理模块所提供的功能,为应用程序提供安全的虚拟内存域使用接口;应用程序调用用户态库模块提供的函数接口来建立无限数量的虚拟内存隔离域。
具体地,实施例中的改造后的操作系统内核为上层应用提供与原有的内存域原语语义一致的虚拟内存域。应用程序可调用本发明的用户态库模块,构造无限数量的虚拟内存域。用户态库与内核抽象结构模块和虚拟域访问处理模块交互。操作系统内核能够根据进程对虚拟域的访问顺序,自动管理进程中的线程和地址空间,为应用程序进程创建多个地址空间,以支持进程创建无限数量的虚拟内存域。
具体地,操作系统内核基于内核抽象结构模块,为进程分配多个地址空间结构,每个地址空间各自维护了私有的物理内存域到虚拟内存域的映射。进程拥有的所有地址空间共享所述进程从虚拟地址空间到物理地址空间的内存映射关系。图1展示了某个时刻,进程在内核中的抽象结构,包括了该进程在内核中的虚拟域元数据结构和地址空间结构。此处为了描述简洁,图1假设处理器提供了4个物理内存域,在实际硬件上,内存域原语提供了16个物理内存域。受保护的多线程应用程序进程拥有3个线程,其中线程1和线程2同处于地址空间0,线程3拥有地址空间1和地址空间2两个地址空间。线程1和线程2总共只访问4个虚拟内存域,所述4个虚拟内存域一个地址空间(地址空间0)即可容纳。线程3总共访问7个虚拟内存域,此处为线程3分配了两个地址空间,从而为线程3提供额外数量的内存域。每个地址空间拥有独立的虚拟内存域到物理内存域的映射,如图1中的映射表。在地址空间0和1中,物理内存域0,1,2,3都对应了虚拟内存域0,1,2,3。在地址空间2中,物理内存域0,1,2,3对应了虚拟内存域0,4,5,6。多地址空间使得进程能够建立无限数量的虚拟内存域。
图2是虚拟域访问处理模块的流程图,展示了线程访问某个虚拟内存域后操作系统内核所需执行的一系列步骤。具体地,当进程中的一个线程访问某个虚拟内存域时,步骤2)中的虚拟域访问处理模块需要相应地对进程拥有的线程和地址空间进行操作。应用程序执行时,其所拥有的线程会访问到不同的虚拟内存域,访问的顺序决定了所产生的线程和地址空间的绑定关系,以及不同地址空间中虚拟域到物理域的映射关系。当进程中的一个线程访问一个虚拟域时,所述虚拟域访问处理模块检查所述线程所在地址空间是否已经存在该虚拟域的映射(①)。若所述线程所在地址空间已经存在该虚拟域的映射,即已经映射到一个物理内存域上,则直接访问。若不存在映射,则检查当前地址空间是否存在空闲(即未映射到虚拟域的)的物理域(②)。若存在空闲的物理域,则更新进程在内核中的抽象结构,所述更新指将要访问的虚拟域映射到该空闲物理域(③),另外,需要更新该虚拟域所保护内存页面对应的页表项,修改页表项中的域ID字段,将这些内存页面与所述空闲物理域绑定。若不存在空闲的物理域,则检查当前地址空间是否存在其它线程(④)。若当前地址空间不存在其它线程,则执行旧虚拟域驱逐或地址空间切换操作(⑤)。其中,若应用程序限定该线程只拥有一个地址空间,则执行旧虚拟域驱逐操作;若应用程序限定该线程可拥有多个地址空间,则执行地址空间切换操作。若当前地址空间存在其它线程,则扫描所述进程所拥有的所有地址空间,检查是否存在其它地址空间可以容纳当前线程(⑥)。若存在可以容纳的其它地址空间,则将当前线程迁移到可以容纳的其它地址空间(⑧)。若不存在可以容纳的其它地址空间,则创建新的地址空间(⑦),并将当前线程迁移到可以容纳的其它地址空间(⑧)。
虚拟域访问处理模块流程图的⑤中,若所述线程所在的地址空间没有空闲的物理内存域,且该地址空间没有其它线程,则执行旧虚拟域驱逐或地址空间切换操作,其中,若应用程序限定该线程只拥有一个地址空间,则执行旧虚拟域驱逐操作;若应用程序限定该线程可拥有多个地址空间,则执行地址空间切换操作。对于旧虚拟域驱逐操作,在所述线程拥有的这一个地址空间中,只有16个物理内存域能够映射到16个虚拟内存域上。所述线程需要访问新创建的虚拟内存域,所述虚拟内存域在地址空间中暂时未映射到物理内存域上。所述虚拟域访问处理模块选择一个已映射到物理内存域的旧虚拟内存域,驱逐该旧虚拟内存域的映射,并将得到的空闲物理域用于新访问的虚拟内存域的映射。本方法将进程的每个地址空间都与一个独立的地址空间标识符(ASID)所绑定,在驱逐旧的虚拟内存域时,仅需要CPU核本地的TLB冲刷操作。对于地址空间切换操作,进程所创建的新虚拟域需要在该线程所拥有的其它地址空间建立映射,所述虚拟域访问处理模块通过切换页表基地址的方式,切换到该虚拟域所在的地址空间。本方法将进程的每个地址空间都与一个独立的地址空间标识符(ASID)所绑定,在切换地址空间时,不引入TLB冲刷操作。
图3是虚拟域访问处理模块中线程迁移的一个案例流程图。图3假设底层硬件提供了10个物理内存域,物理域0为默认域,物理域1用于不可访问域。图3中,Px表示虚拟域x的访问权限,FA表示可读可写权限。在线程迁移前,地址空间0容纳了共6个线程,其中线程T与其它5个线程同属于地址空间0,线程T所使用的虚拟域0,4,14,24,30被分别映射到物理域0,5,8,2,4。线程T的线程上下文中,权限寄存器字段存储了已有映射的虚拟域对应的权限,例如,物理域0的权限物理域2的权限为虚拟域24的权限(P24)。假设新的虚拟域D在地址空间0中还未被映射。此时,由于地址空间0中已经没有空闲的物理域,且地址空间0中存在其它线程。经检查,地址空间1可以容纳线程T,因此,所述虚拟域访问处理模块需要将线程T迁移到地址空间1中。在地址空间1中,虚拟域0,24,30已经被映射到了物理域0,4,5上,物理域6,7,8,9为空闲物理域。为了实现线程迁移,所述虚拟域访问处理模块需要将地址空间1中的虚拟域4,14,D映射到物理域6,7,8,同时更新进程的虚拟域元数据结构和地址空间结构。另外,线程T的线程上下文中的权限寄存器字段需要做相应的更新。对于页表项,所述虚拟域访问处理模块需要修改地址空间1中虚拟域4,14,D对应的页表项,使其映射到物理域6,7,8,同时切换线程T线程上下文中的页表基地址以将线程T切换到地址空间1。
使用一种针对跨架构的多地址空间虚拟化内存域隔离方法,在实施例中对现实服务器应用OpenSSL、MySQL施加多内存域的保护。使用本方法保护OpenSSL中的密钥结构,为每个密钥分配一个单独的虚拟内存域,使用Apachehttpd进行测试,在X86和ARM上分别带来小于2.18%和2.65%的性能开销;使用本发明保护MySQL中线程的栈和内存数据,为每个线程的栈分配一个单独的虚拟内存域,为内存中的数据库数据分配一个虚拟内存与,在X86和ARM上分别带来0.47%和2.59%的性能开销。另外,本方法具有兼容性,与其它Linux子系统兼容,且在X86架构上能够适配现有的IntelMPK软件沙箱架构。
以上所述的仅是本发明的优选实施方式,应当指出,对于本技术领域中的普通技术人员来说,在不脱离本发明核心技术特征的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种针对跨架构的多地址空间虚拟化内存域隔离方法,其特征在于,所述的进程拥有地址空间,在硬件存在内存域原语特性的条件下,所述的每个地址空间均包含一定数量的物理内存隔离域,通过创建有多个地址空间的进程从而支持进程建立无限数量的虚拟内存隔离域,具体包括以下步骤:
1)添加内核抽象结构模块至操作系统内核;所述的内核抽象结构模块包括虚拟域元数据结构和地址空间结构;所述的虚拟域元数据结构用于记录进程中每个虚拟域所保护的内存页面信息,所述的地址空间结构用于表示进程中的一个地址空间,记录了该地址空间私有的物理内存域到虚拟内存域的映射;进程拥有的所有地址空间共享所述进程从虚拟地址空间到物理地址空间的内存映射关系;
2)添加虚拟域访问处理模块至操作系统内核;所述的虚拟域访问处理模块用于处理进程中的线程访问所述进程所创建的虚拟域;所述的虚拟域访问处理模块根据所述进程由步骤1)的内核抽象结构模块所建立的虚拟域元数据和地址空间进行条件判定,根据条件执行虚拟域映射、线程迁移、旧虚拟域驱逐、地址空间切换中的某一项操作;所述的操作对所述进程的虚拟域元数据和地址空间进行相应的修改,在虚拟域数量不足时为所述进程创建新的地址空间,以支持所述进程中的线程访问进程所创建的虚拟内存域;
3)添加用户态库模块至操作系统用户空间;用户态库模块基于步骤1)的内核抽象结构模块和步骤2)的虚拟域访问处理模块所提供的功能,为应用程序提供安全的虚拟内存域使用接口;应用程序调用用户态库模块提供的函数接口来建立无限数量的虚拟内存隔离域。
2.根据权利要求1所述的针对跨架构的多地址空间虚拟化内存域隔离方法,其特征在于,所述的内存隔离域由硬件内存域原语所提供,所述的硬件内存域原语将进程的内存分为一定数量的内存区域,进程对不同内存区域的访问可具有不同的权限,每个内存区域即为一块内存隔离域。
3.根据权利要求1所述的针对跨架构的多地址空间虚拟化内存域隔离方法,其特征在于,所述的虚拟内存隔离域为基于内存域原语所虚拟出来的、支持无限数量的内存隔离域。
4.根据权利要求1所述的针对跨架构的多地址空间虚拟化内存域隔离方法,其特征在于,所述步骤1)中的私有的物理内存域到虚拟内存域的映射,所述物理内存域由硬件内存域原语所提供,内存域原语为每个地址空间提供了16个所述的物理内存域,每个地址空间能容纳所有虚拟内存域当中的16个虚拟内存域,地址空间结构维护了私有的从物理内存域到虚拟内存域的映射,所述的映射标识了当前地址空间每个物理内存域所对应的虚拟内存域。
5.根据权利要求1或4所述的针对跨架构的多地址空间虚拟化内存域隔离方法,其特征在于,所述步骤2)中的条件判定为虚拟域访问处理模块根据进程当前的虚拟域元数据和地址空间的情况,进行条件判定,以决定应该执行何种操作,所述的进行条件判定的方法具体为:
当所述进程中的线程访问所述的新创建的虚拟域时,操作系统内核的虚拟域访问处理模块开始进行条件判定:
若所述线程所在的地址空间存在空闲的物理内存域,则执行虚拟域映射操作;
若所述线程所在的地址空间所在的地址空间没有空闲的物理内存域,且容纳了多个线程,则执行线程迁移操作;
若所述线程所在的地址空间所在的地址空间没有空闲的物理内存域,且该地址空间没有其它线程,且应用程序限定该线程只拥有一个地址空间,则执行旧虚拟域驱逐操作;
若所述线程所在的地址空间所在的地址空间没有空闲的物理内存域,且该地址空间没有其它线程,且应用程序限定该线程可拥有多个地址空间,则执行地址空间切换操作。
6.根据权利要求5所述的针对跨架构的多地址空间虚拟化内存域隔离方法,其特征在于,所述的虚拟域映射操作具体为,所述虚拟域访问处理模块将所述线程所在地址空间中空闲的物理内存域映射到所述要访问虚拟内存域上,同时更新该虚拟域所保护内存页面对应的页表项,修改页表项中的域ID字段,将所述内存页面与所述空闲物理域绑定。
7.根据权利要求5所述的针对跨架构的多地址空间虚拟化内存域隔离方法,其特征在于,所述的线程迁移操作具体为,所述虚拟域访问处理模块扫描所述线程所在进程所拥有的所有地址空间,若存在能够容纳该线程的其它地址空间,则将所述线程转移到该能够容纳所述线程的地址空间;若不存在能够容纳该线程的其它地址空间,则创建新的地址空间,将所述线程转移到新创建的地址空间;所述的容纳指该地址空间存在足够的物理域映射到所述线程需访问的虚拟域。
8.根据权利要求5所述的针对跨架构的多地址空间虚拟化内存域隔离方法,其特征在于,所述的旧虚拟域驱逐操作,在所述线程拥有的这一个地址空间中,只有16个物理内存域能够映射到16个虚拟内存域,所述线程需要访问新创建的虚拟内存域,所述新创建的虚拟内存域在所述地址空间中暂时未映射到物理内存域上;所述虚拟域访问处理模块选择一个已映射到物理内存域的旧虚拟内存域,驱逐该旧虚拟内存域的映射,并将得到的空闲物理域用于新访问的虚拟内存域的映射;进程的每个地址空间都与一个独立的地址空间标识符(ASID)所绑定,在驱逐旧的虚拟内存域时,仅需要CPU核本地的TLB冲刷操作。
9.根据权利要求6所述的针对跨架构的多地址空间虚拟化内存域隔离方法,其特征在于,所述的地址空间切换操作,所述新创建的虚拟内存域在所述地址空间中暂时未映射到物理内存域上,进程所创建的新虚拟域需要在该线程所拥有的其它地址空间建立映射;所述虚拟域访问处理模块通过切换页表基地址的方式,将所述线程切换到所述新创建的虚拟域所在的地址空间下执行;进程的每个地址空间都与一个独立的地址空间标识符(ASID)所绑定,在切换地址空间时,不引入TLB冲刷操作。
10.根据权利要求1所述的针对跨架构的多地址空间虚拟化内存域隔离方法,其特征在于,所述步骤3)中的用户态库模块,为处于用户态的动态链接库,应用程序通过调用用户态库模块所提供的函数接口,为应用程序建立无限数量的虚拟内存隔离域。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310061306.7A CN116107919A (zh) | 2023-01-18 | 2023-01-18 | 一种针对跨架构的多地址空间虚拟化内存域隔离方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310061306.7A CN116107919A (zh) | 2023-01-18 | 2023-01-18 | 一种针对跨架构的多地址空间虚拟化内存域隔离方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116107919A true CN116107919A (zh) | 2023-05-12 |
Family
ID=86262259
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310061306.7A Pending CN116107919A (zh) | 2023-01-18 | 2023-01-18 | 一种针对跨架构的多地址空间虚拟化内存域隔离方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116107919A (zh) |
-
2023
- 2023-01-18 CN CN202310061306.7A patent/CN116107919A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7409487B1 (en) | Virtualization system for computers that use address space indentifiers | |
US11210239B2 (en) | Protection key management and prefixing in virtual address space legacy emulation system | |
US7543126B2 (en) | Apparatus, system, and method for implementing protected virtual memory subcontexts | |
US6895491B2 (en) | Memory addressing for a virtual machine implementation on a computer processor supporting virtual hash-page-table searching | |
JP4237190B2 (ja) | 仮想マシン環境内でのゲスト物理アドレスの仮想化の方法およびシステム | |
US8661181B2 (en) | Memory protection unit in a virtual processing environment | |
US5560013A (en) | Method of using a target processor to execute programs of a source architecture that uses multiple address spaces | |
US7213125B2 (en) | Method for patching virtually aliased pages by a virtual-machine monitor | |
US8438363B1 (en) | Optimization of paging cache protection in virtual environment | |
CA2050834C (en) | Multiple controlled data-space facility | |
US8464022B2 (en) | Virtualization with shadow page tables | |
US20140108701A1 (en) | Memory protection unit in a virtual processing environment | |
US8135899B1 (en) | Expansion of virtualized physical memory of virtual machine | |
US20100262739A1 (en) | Identifier associated with memory locations for managing memory accesses | |
US7506096B1 (en) | Memory segment emulation model for virtual machine | |
JP2010503115A (ja) | 仮想マシン環境におけるゲスト間での情報の共有 | |
US20080005529A1 (en) | Methods, Systems, and Computer Program Products for Providing Access to Addressable Entities Using a Non-Sequential Virtual Address Space | |
EP0619898A1 (en) | Computer system with two levels of guests | |
US20080005528A1 (en) | Methods, Systems, and Computer Program Products for Using a Structured Data Storage System to Provide Access to Addressable Entities in Virtual Address Space | |
Silberschatz et al. | Operating systems | |
CN116107919A (zh) | 一种针对跨架构的多地址空间虚拟化内存域隔离方法 | |
US11200175B2 (en) | Memory accessor invailidation | |
Erlingsson et al. | Operating system protection against side-channel attacks that exploit memory latency | |
CN112585590A (zh) | 存储器访问控制 | |
JP6708860B2 (ja) | 仮想アドレス空間レガシーエミュレーションシステムにおける保護キー管理およびプレフィックス変換 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |