关于缺页异常的疑问: 缺页异常中可能需要读取文件或交换区到主存中,不会引起睡眠吗?在中断上下文睡眠是不允许的
VMA(vm_area_struct) 的 nopage/fault 操作是在缺页异常中被调用,如果请求的页面不在主存中而在磁盘上,就需要从磁盘上读取内容到主存中,这时就会有文件IO操作(意味着会睡眠),但如果 nopage/fault 可以睡眠,那它就不能运行在缺页异常(中断上下文)中。
如何缺页异常中需要IO操作了,内核是怎么做的?跟了一下缺页异常的代码,有些复杂,目前还没头绪。难道是当需要IO操作时就先将当前进程挂起,然后再启动一个内核线程,当缺页异常退出后再由这个内核线程完成被推后的 IO 操作并唤醒被挂起的进程?(只是猜测,在内核源码中还没找到有这样的代码)