gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:58:31 30 4
gpt4 key购买 nike

已阅读 manual msync的,我认为MS_INVALIDATE的确切含义如下:

假设有p1p2p3三个进程。

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

p3 使用 fread 读取同一个文件。

假设 p1 修改了文件,p2 将立即看到修改。但是,使用 freadp3 不一定能看到修改。

如果p1在修改后使用MS_INVALIDATE|MS_SYNC调用msync,那么p3使用fread SURE 可以看到修改。这就是标志 MS_INVALIDATE 的所有含义。

我的理解正确吗?

最佳答案

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 系统有单独的存储区,用于通过写/读系统调用(又名缓冲区缓存)和 mmap 映射到的另一个(页面缓存)传入的 I/O。然而,现在大多数基于 unix 的系统都有一个全局统一的缓存,即无论 I/O 来自哪里,它都会落在同一个内核内存缓冲区上。当然,实现比看起来要复杂得多,但在我看来,MS_INVALIDATE 在大多数基于 UNIX 的系统上都是空操作。

一些链接: link1 link2

关于c - msync 中标志 MS_INVALIDATE 的确切含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60547532/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com