搜索

第 12 章 在 RHEL for Real Time 上使用 mlock ()系统调用

download PDF

用于 Real-Time 内存锁定(mlock())函数的 RHEL 支持实时调用进程锁定或解锁指定的地址空间。这个范围可防止 Linux 在交换内存空间时分页锁定的内存。将物理页面分配给页表条目后,对该页面的引用会变得快速。mlock() 系统调用包括两个功能: mlock()mlockall()。同样,munlock() 系统调用包含 munlock()munlockall() 函数。

12.1. mlock ()和 munlock ()系统调用

mlock ()mlockall () 实时系统调用锁定指定的端口范围,不允许该内存被分页。有两个 mlock () 系统调用组:

  • mlock () 调用:锁定指定的地址范围。
  • munlock () 调用:解锁指定的地址范围。

mlock () 系统调用在地址范围中调用锁定页面,从 addr 开始并继续获取 len 字节。当调用成功时,包含指定地址范围一部分的所有页面都会保留在内存中,直到稍后解锁。

使用 mlockall(),您可以将所有映射的页面锁定到指定的地址范围中。这些都是代码的页、共享内存、内存映射文件等。内存锁定不堆栈。这意味着,被多个调用锁定的任何页面将解锁指定的地址范围或具有单个 munlock() 调用的整个区域。通过 munlockall() 调用,您可以解锁整个程序空间。

特定范围中包含的页面的状态取决于 标志参数中的值标志 参数可以是 0 或 MLOCK_ONFAULT

内存锁定不会被通过 fork 继承,并在进程终止时自动删除。

注意

请谨慎使用 mlock()。过度使用可能会导致内存不足(OOM)错误。当某个应用程序较大,或者它有大的数据域时,当系统无法为其他任务分配内存时,mlock() 调用可能会导致大量内存。

当对实时进程使用 mlockall() 调用时,请确保保留了足够的堆栈页面。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.