我想知道当内核运行故障处理程序以引入用户页面时,用户空间地址的页面错误是否在功能上是错误的。
操作系统是Linux 2.6.30
假设任务的两个用户地址都有效(落在vma,rw权限范围内)。
当我检查内核代码时,我发现内核不介意嵌套的错误 如果故障地址有效且故障未在原子上下文或irq处理程序中发生。
(我不认为答案是特定于cpu的,但我想补充一点,我感兴趣的是 手臂和mips)。
例如:如果我从页面错误处理程序打印堆栈数据,则可能发生这种情况。
答案 0 :(得分:1)
查看内核源代码的最后一小时表明它很好:struct vm_operations_struct的定义和handle_mm_fault()之间的代码以及{vma-> vm_ops->的调用都没有{ {3}}对此有任何谨慎的陈述,我看到的少数 - >故障处理程序似乎并不担心......
...我认为最重要的是你需要通过再次对相同的地址进行故障来避免进入无限递归,但这可能只会在内核堆栈位于你的中时发生vma,这很可能不会发生?
答案 1 :(得分:0)
绝对正确。事实上,你甚至可以睡觉。
但只有在传递line后才能执行此操作,因为您将处于非原子上下文中。