页面置换算法是虚拟存储管理实现的关键,其中,FIFO、LRU和OPT是几种常用的页面置换算法。
先进先出(First In First Out, FIFO)
1) 原理简述
(a) 在分配内存页面数(AP)小于进程页面数(PP)时,当然是最先的AP个页面放入内存。
(b) 这时若有需要处理新的页面,则将原来在内存中的AP个页面中最先进入的调出(所以称为FIFO),然后放入新页面。
(c) 以后如果有新页面需要调入,按(b)的规则进行。
算法特点是,所使用的内存页面构成一个队列。
2) 图表描述
假设某个进程在硬盘上被化为5个页面(PP=5),以1、2、3、4、5分别表示,而下面是处理机调用它们的顺序(这取决于进程本身)。
1、4、2、5、3、3、2、4、2、5
而内存可以控制的页面数为3(AP=3),那么在使用FIFO算法时,这3个页面的内存使用情况如图所示。
3) 算法实现提示
要得到“命中率”,必然应该有一个常量 total_instruction记录页面总共使用次数;此外需要一个变量记录总共换入页面的次数(需要换出页面,总是因为没有命中而产生的)diseffect。利用公式1-(diseffect/total_instruction)×100%可以得到命中率。
(a) 初始化。设置两个数组page[ap]和pagecontrol[pp]分别表示进程页面数和内存分配的页面数,并产生一个随机数序列main[total_instruction](当然这个序列由page[]的下标随机构成),表示待处理的进程页面顺序, diseffect置零。
(b) 观察main[]中是否有下一个元素。如果有,则由main[]中获取该页面下标,并转(c);如果没有,则转到(g)。