Windows 如何以一致的方式处理刷新修改的页面?
How does Windows deal with flushing modified pages in a consistent way?
假设有一个内存映射文件,应用程序不断地写入它。最终,Windows 可能将该页面刷新到磁盘。 Windows 如何确保将该页面的稳定快照刷新到磁盘?
可能是磁盘硬件在写入之前将内存复制到内存中。那不是原子的。如果应用程序随机写入该页面,磁盘硬件可能会复制在任何时间点都不存在的数据。
这是否意味着内存映射文件可能会在磁盘上留下一个实际上从未存在过的页面?这可能是一致性问题。
或者 Windows 是否在刷新期间锁定页面?这可能是个问题,因为写入该页面可能会导致非常高的延迟。
How does Windows ensure that a stable snapshot of that page is flushed to disk?
不需要。如果页面在刷新操作期间没有发生变化,则数据是一致的。如果页面确实在刷新操作期间发生变化,则该页面被标记为脏,因此将在适当的时候再次刷新,并忽略写入磁盘的数据。
(顺便说一句,数据内部可能没有拷贝,系统正常应该可以使用DMA直接传输到物理设备。)
假设有一个内存映射文件,应用程序不断地写入它。最终,Windows 可能将该页面刷新到磁盘。 Windows 如何确保将该页面的稳定快照刷新到磁盘?
可能是磁盘硬件在写入之前将内存复制到内存中。那不是原子的。如果应用程序随机写入该页面,磁盘硬件可能会复制在任何时间点都不存在的数据。
这是否意味着内存映射文件可能会在磁盘上留下一个实际上从未存在过的页面?这可能是一致性问题。
或者 Windows 是否在刷新期间锁定页面?这可能是个问题,因为写入该页面可能会导致非常高的延迟。
How does Windows ensure that a stable snapshot of that page is flushed to disk?
不需要。如果页面在刷新操作期间没有发生变化,则数据是一致的。如果页面确实在刷新操作期间发生变化,则该页面被标记为脏,因此将在适当的时候再次刷新,并忽略写入磁盘的数据。
(顺便说一句,数据内部可能没有拷贝,系统正常应该可以使用DMA直接传输到物理设备。)