- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
已阅读 manual msync
的,我认为MS_INVALIDATE
的确切含义如下:
假设有p1、p2、p3三个进程。
p1 和 p2 都使用 mmap
和 MAP_SHARED
同时读写文件 /tmp/data.txt
。
p3 使用 fread
读取同一个文件。
假设 p1 修改了文件,p2 将立即看到修改。但是,使用 fread
的 p3 不一定能看到修改。
如果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 的系统上都是空操作。
关于c - msync 中标志 MS_INVALIDATE 的确切含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60547532/
我一直在努力了解如何正确使用这个标志,但互联网上存在相互矛盾的信息。 我的理解是这个标志目前在 linux 内核中是一个空操作。 https://github.com/tinganho/linux-k
已阅读 manual msync的,我认为MS_INVALIDATE的确切含义如下: 假设有p1、p2、p3三个进程。 p1 和 p2 都使用 mmap 和 MAP_SHARED 同时读写文件 /tm
已阅读 manual msync的,我认为MS_INVALIDATE的确切含义如下: 假设有p1、p2、p3三个进程。 p1 和 p2 都使用 mmap 和 MAP_SHARED 同时读写文件 /tm
我是一名优秀的程序员,十分优秀!