页式虚拟存管理的实现
原理是
只需将作业的全部信息作为副本存放在磁盘上,作业被调度投入到运行时,至少把第一页信息装入主存储器,在作业执行过程中访问到不在主存储器的页的时候,再把它们装入到主存。
之后便是页面的调度
也买的调度这里有简单的几个算法:先进先出调度算法,最近最久未使用算法,最近最不常使用调度算法。
下面就这些算法分别介绍如下
(1) 先进先出算法(FIFO)
这种算法总是淘汰最先进入主存储器的那一页。该算法简单。容易实现。是把装入主存储器的那些页的页号按进
入的先后次序排成队,用指针K指示当前调入新页时应淘汰的那页在队列中的位置。最初指向队首位置。每当调入一
个新页后,在指针指示的位置上填上新页页号。然后指针K加1,指向下一个应淘汰的页
如图 指出要装入第3页时,使用FIFO算法的实例
这里的k为循环指针,假定页号队列中有N个页号,每次调出一页后,执行
K:=(K+1)mod N
如上例子中的N 就是3.因为有3个页号
下面给出一个例题
先说明指针的位置是从0开始的
某采用页式存储管理的系统接受了一个共7页的作业,该作业执行时依次访问的页面是:1,2,3,4,2,l,2,3,2,4,5,2,7,6,4。假设系统只给该作业3个主存工作块,且先将开始三页依次装入主存。当分别采用先进先出(FIFO)调度算法时,作业执行过程中会产生多少次缺页中断?并依次写出每次中断后应淘汰的页。
采用先进先出(FIFO)算法:
首先是将1,2,3 是依次装入三个页。 然后是调入第四个作业,查看调入的作业先前是否有记录,如果有,则只需要
将指平移到它后面对应的位置,如果没有则指针移动顺序按公式计算(或是指针的按顺序下移)。
对比发现4是前三个作业没有的,那么指针的计算方式为(0+1)mod 3=1,1的位置。指针下移一位(1的位置)。
也可以这样想,
如果调入的也是不在主存中,则指针按顺序移动,如果是在前页中,责指针不徐璈顺序移动,只需要平移。
再看第5个页是2 ,对比发现前面页已经有了,这里就不按顺序移动了,只需要平移就可以了。
再看1的调度,将2的位置替换为1,并且指针是下移的(因为1不在前页出现,所以是替代2的位置)以此类推。
→1 |
4 |
4 |
4 |
→4 |
3 |
3 |
3 |
→3 |
2 |
2 |
→2 |
4 |
2 |
→2 |
→2 |
1 |
1 |
→1 |
→1 |
4 |
4 |
→4 |
7 |
7 |
→7 |
3 |
3 |
3 |
→3 |
2 |
2 |
2 |
→2 |
5 |
5 |
→5 |
6 |
6 |
1 2 3 4 1 2 3 4 5 2
采用先进先出(FIFO)算法共产生10次缺页中断。(这里终端缺页的计算是按调度的顺序计算的,不算平移的次数,只
有阶梯的调度才是缺页调度)
到此这个算法就讲解完了。希望对大家有所帮助