编程接口指南

使用 mlockmunlock

mlock(3C) 会导致将指定地址范围内的页面锁定在物理内存中。在此进程或其他进程中引用锁定的页面不会导致需要 I/O 操作的页面错误。由于此 I/O 操作会干扰虚拟内存的正常操作,并且会降低其他进程的速度,因此仅有超级用户才能使用 mlock。内存中可锁定页数的限制取决于系统配置。如果超过此限制,则调用 mlock 将失败。

munlock 可用于释放对物理页的锁定。如果对单个映射的地址范围进行多次 mlock 调用,则一次 munlock 调用即可释放锁定。不过,如果 mlock 锁定了对相同页面的不同映射,则在释放对所有映射的锁定之前,不会解除对这些页面的锁定。

删除映射也会释放锁定,方法有两种:使用 mmap(2) 操作替换或者通过 munmap(2) 删除。

MAP_PRIVATE 映射关联的写复制事件会将对源页面的锁定传递到目标页面。这样,对包括 MAP_PRIVATE 映射的地址范围的锁定便会以透明方式与写复制重定向操作一起保留。有关此重定向操作的介绍,请参见创建和使用映射