基于Linux系统对mlock原理及其性能的研究
2021-05-20苗杰
江苏通信 2021年2期
苗 杰
国家计算机网络与信息安全管理中心江苏分中心
0 引言
在一些业务的使用过程中,严格时间相关的程序,锁住物理内存,可以避免内存页频繁调出调入带来的性能损耗。对于安全性要求较高的应用程序,需要敏感数据被禁止输出到交换文件中,否则程序结束后,攻击者就可能从交换文件中恢复出这些敏感数据。Linux内核通过mlock的四个函数来实现物理内存页的锁定和解锁,虚拟化环境中也可修改虚拟机的配置文件来启用内存锁定功能,从而满足一些应用场景的需求。
1 mlock简介及其原理
mlock(memory locking)是Linux内核实现内存锁定的一种方式,用来将进程使用的部分或者全部的虚拟内存锁定到物理内存中。mlock机制主要有以下功能:(1)被锁定的物理内存在被解锁或进程退出前,不会被页回收流程处理;(2)被锁定的物理内存,不会被交换到swap设备;(3)进程执行mlock操作,立刻分配物理内存。
mlock机制提供以下四个函数供使用,如表1所示。

表1 mlock相关函数
每个进程都拥有一段连续的虚拟内存,内核实际的使用情况并不是以整个虚拟内存为管理单位,而是将整个虚拟内存划分为若干个虚拟内存区域,内核中使用vm_area_struct数据结构来管理虚拟内存区域,简称vma。vma管理虚拟内存的方式如图1所示。

图1 vma管理虚拟内存
每一个vma代表一个已映射的、连续的且属性相同(如可读/写)的虚拟内存区域。内核采用链表和AVL树形式管理vma,链表用于遍历,AVL树用来查找。mlock操作会给相应的vma的vm_flags置一个VM_LOCKED标记,而这个标记则会影响到物理内存回收和交换。……
登录APP查看全文
