搜索

2.3. mlock 系统调用

download PDF

RHEL for Real Time memory lock (mlock ())系统调用可启用调用进程锁定或解锁指定的地址空间。这可防止 Linux 分页锁定的内存以 swap 空间。将物理页面分配给页表条目后,对该页面的引用相对较快。mlock() 系统调用有两个组: 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()。因此,务必要了解应用程序解锁的页面,以防止双锁定或单一锁定问题。

减少双锁定或单一锁定问题的两个最常用的方案是:

  • 跟踪已分配和锁定的内存区域,创建打包程序功能(在解锁页面之前),验证页面拥有的分配数量。这是设备驱动程序中使用的资源数原则。
  • 执行分配考虑页面大小和协调,以防止在同一页面中出现双锁定。

其他资源

  • capabilities(7) man page
  • mlock(2) man page
  • mlock(3) man page
  • mlockall(2) man page
  • mmap(2) man page
  • move_pages(2) man page
  • posix_memalign(3) man page
  • posix_memalign(3p) man page
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.