【问题标题】:nested page-faulting of user-space address in LinuxLinux中用户空间地址的嵌套页面错误
【发布时间】:2011-01-29 11:23:34
【问题描述】:

我想知道当内核运行故障处理程序以引入用户页面时,对用户空间地址进行页面故障是否在功能上是错误的。

操作系统是 Linux 2.6.30

假设两个用户地址对任务都是有效的(属于 vma , rw 权限)。

当我检查内核代码时,我发现内核不介意嵌套错误 如果故障地址是有效的,并且故障没有发生在原子上下文或 irq 处理程序中。

(我不认为答案是特定于 cpu 的,但我要补充一点,我对 arm 和 mips )。

例如:如果我从页面错误处理程序打印堆栈数据,则可能会发生这种情况。

【问题讨论】:

  • 我准备回答这个问题两次,检查了自己,我仍然不确定。 +1 提出一个很好的问题。

标签: linux linux-kernel kernel


【解决方案1】:

查看最后一小时的内核源代码表明它很好:struct vm_operations_struct 的定义和handle_mm_fault() 之间的代码和__do_fault() 中对 vma->vm_ops->fault 的调用都没有任何警告声明关于这一点,我看到的少数 -> 故障处理程序似乎也不担心......

...我认为主要的是,您需要通过再次在同一地址上出错来避免进入无限递归,但这大概只有在内核堆栈位于 您的 中时才会发生vma,这很可能不会发生?

【讨论】:

    【解决方案2】:

    绝对正确。事实上,你甚至可以睡觉。

    但是你只能在 line 被传递后才可以这样做,因为你将处于非原子上下文中。

    【讨论】:

      猜你喜欢
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 2011-03-27
      • 1970-01-01
      • 2016-10-31
      • 2015-12-28
      • 1970-01-01
      相关资源
      最近更新 更多