内存管理笔记八、页面更换算法
引言:在第七篇内存管理笔记,有介绍到分页的内存管理。其克服了外部碎片、程序不能大于物理内存等缺点。本篇笔记将简单介绍常见的页面更换算法思想。
一、页面需更换的原因
在交换系统下,一个程序作为一个整体加载到内存。因此,在运行时,无需从磁盘上加载任何东西。而分页系统下,一个程序的所有页面并不一定都在内存中,因此,在执行的过程中有可能发生页面不在内存的情况。
如果访问的页面不在内存中,则系统将产生缺页中断。缺页中断服务将负责把磁盘上的数据加载到物理内存中来。如果物理内存还有空闲空间,那就直接使用空闲的页面。但如果空闲页面已满,则需要挑选某个已经使用过的页面进行替换。
二、页面更换期待达到的目标
如果挑选的页面是之后很快又要被访问的页面,那么系统将很快再次产生缺页中断。因为磁盘的访问速度远远低于内存的访问速度,缺页中断的代价是非常巨大的。因此,挑选哪个页面进行更换是有要求的。
页面更换时挑选页面的目标是什么呢?当然还降低随后发生缺页中断的次数或者频率。因此,我们选择的页面应当是随后相当长时间内不会被访问的页面。
三、常见算法的思想
3.1、随机更换算法
最不负责任的算法是随机更换算法,在需要更换页面的时候,产生一个随机页面号,而替换与该页面号对应的物理页面号。这种算法计算需要替换页面号时速度很快,但是难以最小化随后缺页中断次数。
3.2、先进先出算法(FIFO)
先进先出的实现机制是使用链表将所有在内存的页面按照进入时间的早晚,链接起来,然后每次置换链表头上的页面就行了,新加进来的页面则挂在链表的末端。在下图1中,如果下次需要寻找页面来替换,A将成为替换页面。