操作系统如何知道页面在映射内存中是否脏?

Sim*_*mon 1 linux windows memory-mapped-files

我的意思是在不使用write()的情况下直接在内存中更新数据.

在linux中我认为在msync调用中指定的所有数据都被刷新了.

但是在Windows中,FlushViewOfFile的文档说"写脏页",所以操作系统知道哪些页面已被更新.

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

Har*_*ton 5

在运行Linux或Windows的大多数(也许是全部)现代计算机上,CPU代表操作系统跟踪脏页.该信息存储在页面表中.

(例如,参见" 英特尔®64和IA-32架构软件开发人员手册"第3,4 第4.8节和" AMD64架构程序员手册第2 卷"第5.4.2节.)

如果特定CPU上没有该功能,则操作系统可以使用页面错误来检测对页面的第一次写入,如datenwolf的回答中所述.