- 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/
我想使用 POSIX 共享内存,我的问题是关于调用 mmap(MAP_SHARED)msync() 和 munmap() 的用法. 在不使用 msync() 的情况下,对一个进程的共享内存段所做的更改
我刚刚学习 msync 的使用,但是我遇到了问题段错误。当我将 MAPSTEP 更改为较小的数字时,错误就消失了。这段代码有什么问题? #define MAPSTEP 1 * 4096 main(vo
当使用mmap/msync/munmap时,读/写是原子的吗? (假设磁盘将在断电时完成所有挂起的写入) 最佳答案 涉及多个页面或多个磁盘扇区的操作从来都不是精确的原子操作。 调查两个特定事物之间的一
我正在编写一个简单的 C 程序来反转文件中的字节(仅用于学习目的)。我正在打开我的文件,将其映射到内存中并反转字节顺序。所以第一个变成最后一个,最后一个变成第一个等等。 在内存中一切正常(用 gdb
我在 Linux 中使用 POSIX 函数 mmap()。但是当我执行 msync() 时,它会将缓存缓冲区完全写入文件,还是会以某种方式在某处记录哪些页面已更改,哪些页面未更改,并且写入文件仅更改
我正在对映射文件进行许多小的随机写入。我想确保一致性,因此有时会使用 msync,但我不想跟踪我所做的每一个小写入。在当前的 Linux 内核实现中,对整个文件使用 msync 是否会造成性能损失?例
Windows 中的 msync [unix sys call] 等价物是什么?我正在寻找 C、C++ 空间中的 MSDN api。有关 msync 的更多信息,请访问 http://opengrou
已阅读 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
我在使用msync时遇到一个问题。非常感谢您的帮助! 简而言之,我映射文件A,并修改它和msync,但st_mtime没有改变。即使munmap文件A并退出进程,st_mtime也不变。 以下是代码。
我有两个上下文,即 process1 和 process2 共享相同的映射区域,process1 大多数时候将数据同步到文件,而 process2 只在系统重新启动之前同步一次以确保所有数据都已同步。
是否保证在 linux 上使用 msync(MS_ASYNC) 刷新页面的顺序与写入页面的顺序相同? 如果视情况而定,我(完全服务器访问权限)是否有办法确保它们的顺序相同? 背景 我目前正在使用 Op
如果我在内存映射区域上使用 MS_ASYNC 调用 msync,同步过程将被异步处理。 但是,如果我立即对该区域调用 munmap,我是否可以假设 msync 将安全执行?或者我必须在 munmap
我在 Linux 2.6 上的应用程序中使用 msync 以确保在发生崩溃时的一致性。我需要彻底测试我对 msync 的使用,但实现似乎正在为我刷新所有相关页面。有没有一种方法可以防止将 mmap 页
我想使用 mmap 在 Linux 下运行的 C 程序中实现程序状态某些部分的持久化,方法是使用带有 MAP_SHARED 标志集的 mmap() 将固定大小的结构与众所周知的文件名相关联。出于性能原
据我所知,在大多数日志模式为“data=ordered”的ext3系统上,fsync不仅会同步fd指定的文件,还会同步文件系统上的所有文件,而且这个问题还没有被修复内核 2.6.30 之前 我有一个问
我正在使用 mmap 打开/dev/mem 以读/写 UART 寄存器。它运作良好,但我的问题是:写入后,是否真的需要带有 MS_SYNcflags的 msync 系统调用? 根据我的理解,/dev/
下午好,我们正在为 Centos Linux Release x86_32 和 Microsoft Windows 构建原型(prototype)去重器。原型(prototype)的一部分是使用 18
我通过 C API 使用 RocksDB。 我有一个测试程序,它打开数据库,执行 1,000 次写入(收集启动写入和回调之间的计时数据),执行 1,000 次读取,然后关闭。 这有效。平均写入时间约为
我是一名优秀的程序员,十分优秀!