【问题标题】:Older alternatives for userfaultfd() syscall in Linux?Linux 中 userfaultfd() 系统调用的旧替代方案?
【发布时间】:2018-09-10 01:00:01
【问题描述】:

我想在 C 程序中使用 userfaultfd() 系统调用,但它不存在于较旧的 Linux 内核中。旧版本 Linux 内核中也存在 userfaultfd() 系统调用的替代方案是什么? 谢谢!

编辑:我想要的是获得 usefaultfd() 的一些主要优点的方法,主要是处理页面错误。

【问题讨论】:

  • 此 API 是 linux 4.3 中的新 API,man7.org/linux/man-pages/man2/ioctl_userfaultfd.2.html,我认为没有其他选择,这就是他们创建它的原因。
  • 我已经看到了,但是,在旧的 Linux 内核中没有处理页面错误的方法吗?感谢您的评论!
  • 您可以处理 segfault 信号,但它更传统,可能很难用线程处理。
  • 没问题。你能告诉我答案吗?我会接受的。谢谢!
  • 不,谢谢,我不确定这些信息。您应该尝试自己搜索,但是这种信息很难找到。

标签: c linux version compatibility system-calls


【解决方案1】:

mprotect(2) 带有PROT_NONE 的页面,因此所有访问错误并实现SIGSEGV 处理程序,您可以在其中处理错误。 libsigsegv 抽象出一些复杂性:

GNU libsigsegv 是一个用于在用户模式下处理页面错误的库。当程序试图访问当前不可用的内存区域时,就会发生页面错误。捕获和处理页面错误是一种有用的实现技术:

  • 可分页的虚拟内存,
  • 对持久性数据库的内存映射访问,
  • 代垃圾收集器,
  • 堆栈溢出处理程序,
  • 分布式共享内存,
  • ...

【讨论】:

    猜你喜欢
    • 2020-06-05
    • 1970-01-01
    • 2017-09-17
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 2022-07-25
    • 2012-08-18
    • 1970-01-01
    相关资源
    最近更新 更多