系统调用mlock允许应用进程锁住某一个地址空间,这将阻止Linux内存回收进程回收这个地址空间的页面。
mlock仅仅在kernel层对给定地址范围所在的VMA增加 VM_LOCKED标记,当linux kernel进行内存回收时,会首先判断VMA是否有VM_LOCKED标记,如果存在,那么不会对这个地址范围内的页面进行回收
锁定后,这个地址范围内的物理页面,就从RECLAIMABLE状态,变为UN-RECLAIMABLE状态。 mlock并不会影响物理页面的MOVABLE特性。
注意,网上有种错误的说法,mlock结束前,这个地址空间内的物理页面已经完成映射,并锁定。这是不完全正确的,有些情况下,kernel仅在访问这个地址空间后,才通过page fault调入页面。