内存那些事儿(下)

文章翻译自 http://landley.net/writing/memory-faq.txt ,已有部分译文在 内存那些事儿(上)内存那些事儿(中)

写时复制如何工作?

如果两个页表项指向同个物理页,那么当读取这两个页表项就会得到同样的内容。物理页有相关的引用计数记录有多少页表项指向了它,每个指向它的页表项只有读权限,没有写权限。

如果写这个页面则会触发 page fault,page fault 处理程序会分配一个新页面,将其内容拷贝到新页面,将页表项更新到这个新页面,设置页表项可写,将旧页面的引用计数减一,最后返回到产生 page fault 的指令处重新执行,这次将写到新的页面中。

写时复制是一种延时分配(lazy allocation)机制,将内存分配推迟到真正需要的时候才进行。

什么是干净页面?

干净页面拥有存储在交换空间或文件中的数据副本,因此可以通过将其从相关的页表项中剥离回收其内存用于其它用途,当再次需要该页面的内容时,再分配一个新页面,然后将其内容从副本中读出来。

什么是活跃页面?