2.3. mlock 系统调用


内存锁定(mlock ())系统调用允许调用进程锁定或解锁指定的地址空间范围,并防止 Linux 分页锁定的内存以交换空间。将物理页面分配给页表条目后,对该页的引用相对快。内存锁定系统调用属于 mlock ()munlock () 类别。

mlock ()munlock () 系统调用锁定并解锁指定的进程地址页面范围。成功时,指定范围内的页面将保留在内存中,直到 munlock () 系统调用解锁页面。

mlock ()munlock () 系统调用采用以下参数:

  • addr: 指定地址范围的开头。
  • len :指定地址空间的长度,以字节为单位。

成功时,mlock ()munlock () 系统调用返回 0。如果出现错误,则返回 -1 并设置 errno 来指示错误。

mlockall ()munlockall () 系统调用锁定或解锁所有程序空间。

注意

mlock () 系统调用不能确保程序没有页面 I/O。它确保数据保留在内存中,但不能确保它保留在同一页面上。无论使用 mlock (),其他功能(如 move_pages 和 memory compactors)都可以移动数据。

内存锁定是以页为基础进行的,不堆栈。如果两个动态分配的内存片段通过 mlock ()mlockall () 共享同一页面,它们通过使用单个 munlock ()munlockall () 系统调用来解锁。因此,务必要了解应用程序解锁的页面,以避免出现双锁或单解锁问题。

以下是缓解双锁或单解锁问题的最常见的临时解决方案:

  • 跟踪已分配和锁定的内存区域,并创建打包程序功能,在解锁页面前验证页面分配数量。这是设备驱动程序中使用的资源计数原则。
  • 根据页大小和校准进行内存分配,以避免在页面上出现双锁定。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部