linux - 操作系统如何知道映射内存中的页面是脏的?

标签 linux windows memory-mapped-files

我的意思是直接在内存中更新数据,而不使用 write()。

在 linux 中,我认为在 msync 调用中指定的所有数据都已刷新。

但在 Windows 中,FlushViewOfFile 的文档说“写入脏页”,因此操作系统以某种方式知道哪些页面已更新。

这是如何运作的?我们必须使用 WriteFile 来更新映射内存吗? 如果我们在 linux 中使用 write() 是否 msync 只同步脏页?

最佳答案

在大多数(也许是所有)运行 Linux 或 Windows 的现代计算机上,CPU 代表操作系统跟踪脏页。此信息存储在 page table 中.

(例如,参见 Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A 的第 4.8 节和 AMD64 Architecture Programmer's Manual, Volume 2 的第 5.4.2 节。)

如果该功能在特定 CPU 上不可用,则操作系统可以改为使用页面错误来检测对页面的首次写入,如 datenwolf 的回答中所述。

关于linux - 操作系统如何知道映射内存中的页面是脏的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41433299/

相关文章:

windows - 内存映射文件 : how to monitor memory usage

c - 为什么C中的全局数组(已初始化)不完全算作PSS

c# - 与 MemoryMappedFile 并行读写

c++ - 通过 Git Bash 在 Windows 7 上安装 GCC 编译器?

c - libusb 设备描述符 : bcdUSB possible values

linux - 从 bash 创建多个用户命名和编号的文件而不循环

c - Waitpid 和 fork/exec 相对于系统调用的非阻塞优势?

java - 我们是否需要再为 Java 更新设置 Windows 环境变量?

c++ - Windows 如何处理加载两个不同版本的 DLL?

php - 使用 Web 表单 (PHP) 重置 Linux 密码