在使用虚拟内存的操作系统中,每个进程都有一个页表。每个页表将进程的虚拟内存页映射到系统的物理内存页,并指示给定页当前是否有效(加载到内存中)。
假设内存运行不足,操作系统需要选择一个页面从物理内存中逐出。为此有不同的算法。例如,先进先出、LRU。一旦操作系统选择要驱逐的页面,它如何使对该页面的任何现有引用无效?
如果活动进程当前正在使用受害页面,则操作系统必须使当前进程的页表中的映射无效。如果受害者页面当前被另一个进程使用,操作系统必须使其他进程的页表中的映射无效。无论如何,操作系统如何确定要更新哪个页表(如果有),以及它如何知道映射在该页表中的位置而不进行线性搜索?
从本演示文稿的幻灯片 22 开始,详细描述了 x86 页表结构:
http://www.scs.stanford.edu/12au-cs140/notes/l8.pdf
我还发现了一些有用的虚拟内存概述:
http://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/9_VirtualMemory.html http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/virtual.html
没有答案的类似 Stack Overflow 问题: