msync中标志MS_INVALIDATE的确切含义是什么?

问题描述 投票:0回答:1

已经阅读了manualmsync,我认为MS_INVALIDATE的确切含义如下:

提供了三个进程p1p2p3

p1p2都使用mmapMAP_SHARED同时读取和写入文件/tmp/data.txt

p3使用fread读取相同的文件。

假设p1修改了文件,p2将立即看到修改。但是,不确定使用fread的[[p3。

如果

p1

在修改后用msync调用MS_INVALIDATE|MS_SYNC,则使用freadp3确定以查看修改。这就是标志MS_INVALIDATE的全部含义。我的理解正确吗?
c linux operating-system filesystems mmap
1个回答
0
投票
AFAIK,在Linux内核上,MS_INVALIDATE实际上没有做太多,这是从msync.c中来的>

唯一的用途是此检查。

/* Here vma->vm_start <= start < vma->vm_end. */ if ((flags & MS_INVALIDATE) && (vma->vm_flags & VM_LOCKED)) { error = -EBUSY; goto out_unlock; }

较早的linux系统通过I / O分别通过写/读syscall(又名缓冲区缓存)和mmap映射到的另一个(页面缓存)进入存储。但是,现在大多数基于Unix的系统都具有全局统一缓存,即,无论I / O来自何处,都将落入相同的内核内存中。当然,实现起来比看起来要复杂得多,但是在大多数基于UNIX的系统上,MS_INVALIDATE对我来说似乎是个空手。

某些链接:link1link2

© www.soinside.com 2019 - 2024. All rights reserved.