VM_WRITE - 可以编写页面
VM_MAYWRITE - 允许设置VM_WRITE标志
我不明白为什么Linux需要这两个标志,而不仅仅是其中一个标志。从上面的描述中,听起来像设置VM_MAYWRITE而VM_WRITE不是。在什么情况下?在这些情况下,Linux内核的表现如何?
例如,COW机制根据其VM_MAYWRITE标志检测受COW保护的页面(请参阅source code)。设置VM_MAYWRITE时,Linux内核是否设置了VM_WRITE标志?如果是的话,为什么不用一个标志并从头开始设置?
答案 0 :(得分:1)
可以更改内存保护级别,内核使用VM_MAY%
标志来确定是否允许此类更改。
从上面的描述中,听起来像设置VM_MAYWRITE而VM_WRITE不是。在什么情况下?
在内存最初是只读的情况下,您希望使其可写。
例如,COW机制根据其VM_MAYWRITE标志检测受COW保护的页面(请参阅源代码)。在设置VM_MAYWRITE时,Linux内核是否设置了VM_WRITE标志?如果是的话,为什么不用一个标志并从头开始设置?
不,它没有。 is_cow_mapping()
没有检查内存是否可写,它正在检查内存是否可以通过mprotect()
写入。如果它不能,那么它显然不是COW映射!