我知道修改页面缓存页面后,它会被标记为脏页面并需要回写,但是在以下情况下会发生什么:
方案: 文件/ apps / EXE是可执行文件,已完全分页到页面缓存中(所有页面都在缓存/内存中),并由进程P执行
然后,连续发行版将/ apps / EXE替换为全新的可执行文件。
假设1: 我假设进程P(以及其他任何具有引用旧可执行文件的文件描述符的人)将继续使用旧的/ apps / EXE内存,并且尝试执行该路径的任何新进程都将获得新的可执行文件。
假设2: 我假设,如果不是文件的所有页面都映射到内存中,那么在出现页面错误要求文件中的页面已被替换之前,一切都会好起来的,并且可能会发生段错误?
问题1: 如果用vmtouch等文件锁定文件的所有页面,这是否会完全改变方案?
问题2: 如果/ apps / EXE位于远程NFS上,那会有什么不同吗?(我认为不是)
请更正或验证我的2个假设,并回答我的2个问题。
我们假设这是一个带有某种3.10.0-957.el7内核的CentOS 7.6盒子
更新:进一步考虑,我想知道这种情况是否与其他脏页情况没有区别。
我猜写新二进制文件的过程将进行读取并获取所有缓存页面,因为它们都已被分页,然后所有这些页面都将被标记为脏。如果它们被锁住了,则在ref计数变为零后,它们将只是无用的页面而占用核心内存。
我怀疑当前执行的程序结束时,其他任何东西都将使用新的二进制文件。假设一切正确,我猜只有在仅部分文件进入页面时才有意思。