页面置换算法的模拟(最佳置换算法、先进先出页面置换算法、最近最久未使用算法、最少使用置换算法、Clock置换算法的模拟)

实验三*** *页面置换算法的模拟*

3.1 最佳置换算法的模拟

一、实验环境(工具、配置等)

1.硬件要求:计算机一台。

2.软件要求:Windows操作系统,使用编程语言不限,如c、c++、Java等。

二、实验内容(实验方案、实验步骤、设计思路等)

1.实验方案:将编好的代码上机进行检验,看是否与预期一样。

2.设计思路:模拟一个拥有若干个 的进程在给定的若干个实页中运行、并在缺页中断发生时使用FIFO或LRU或LRU算法进行页面置换的情形。其中虚页的个数可以事先给定(例如10个),对这些虚页访问的页地址流(其长度可以事先给定,例如20次虚页访问)可以由程序随机产生,也可以事先保存在文件中。要求程序运行时屏幕能显示出置换过程中的状态信息并输出访问结束时的页面命中率。

三、实验结果与分析:

1.算法思想:每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。

2.对于虚页的个数已预先设定为10个,动态输入系统为进程在内存分配的物理块个数,关于页面访问地址流序列,我设定有两种输入方式,一种是手动输入,另一种是随机数生成。如下图所示,系统为进程在内存分配的物理块个数为3块,随机数生成页面访问地址流序列:

1, 8, 3, 2, 0, 5, 2, 2, 6, 4, 9, 5:

在这里插入图片描述

图1 随机数生成页面访问地址流序列

3.随机数生成页面访问地址流序列之后置换过程中的状态信息如下图所示,输出访问结束时的页面命中率为25 %,缺页率为75 %

在这里插入图片描述

图2 置换过程中的状态信息

4.采取手动输入页面访问地址流序列1 8 3 2 0 5 2 2 6 4 9 5,结果如下图所示,输出访问结束时的页面命中率为25 %,缺页率为75 %

在这里插入图片描述

图3 手动输入页面访问地址流序列的结果

  1. 分析:整个过程中无论选择的是手动输入,还是随机数生成页面访问地址流序列,只要页面访问地址流序列相同,其结果就相同,在置换过程中,其发生置换的次数有6次,缺页次数9次,访问虚页的总次数为12次,缺页率:9/12 *100% = 75%,命中率为25%

  2. 实验中遇到的问题:

    (1)最大的难点就是怎么判断出哪些页以后永不使用,或者在最长时间内不再被访问

    (2)因为对python中的列表部分功能理解错误,导致错误

7.解决办法:

(1)遍历后续的地址流序列,使用if语句,找出哪些页以后永不使用,而在判断哪一页最长时间不用时,找最远不用的结点,如下图所示:
在这里插入图片描述

(2)查询书籍以及资料,补充基础知识。

五、附流程图及源程序

1.流程图如下图所示:

在这里插入图片描述

图5 OPT流程图

3.2 先进先出页面置换算法的模拟

一、实验内容
1.算法思想:每次选择淘汰的页面是最早进入内存的页面。
2.对于虚页的个数已预先设定为10个,动态输入系统为进程在内存分配的物理块个数,关于页面访问地址流序列,我设定有两种输入方式,一种是手动输入,另一种是随机数生成。如下图所示,系统为进程在内存分配的物理块个数为3块,随机数生成页面访问地址流序列:5, 9, 6, 2, 1, 6, 0, 0, 0, 2, 1, 7
在这里插入图片描述

图1 随机数生成页面访问地址流序列

3.随机数生成页面访问地址流序列之后置换过程中的状态信息如下图所示,输出访问结束时的页面命中率为41.666666666666664 %,缺页率为58.333333333333336 %
在这里插入图片描述

图2 置换过程中的状态信息

4.采取手动输入,和OPT实验选用同一页面访问地址流序列1 8 3 2 0 5 2 2 6 4 9 5,结果如下图所示,输出访问结束时的页面命中率为16.666666666666664 %,缺页率为83.33333333333334 %
在这里插入图片描述

图3 手动输入页面访问地址流序列的结果

5.分析:通过手动输入和OPT实验选用同一页面访问地址流序列,其过程是不同的,OPT的命中率是25%,比FIFO高
在这里插入图片描述

二、流程图
在这里插入图片描述

3.3 最近最久未使用算法的模拟

一、实验内容
1.算法思想:每次淘汰的页面是最近最久未使用的页面。
2.对于虚页的个数已预先设定为10个,动态输入系统为进程在内存分配的物理块个数,关于页面访问地址流序列,我设定有两种输入方式,一种是手动输入,另一种是随机数生成。如下图所示,系统为进程在内存分配的物理块个数为3块,随机数生成页面访问地址流序列:
0, 5, 3, 6, 4, 9, 8, 8, 5, 5, 2, 9
在这里插入图片描述

图1 随机数生成页面访问地址流序列

3.随机数生成页面访问地址流序列之后置换过程中的状态信息如下图所示,输出访问结束时的页面命中率为16.666666666666664 %,缺页率为:83.33333333333334 %
在这里插入图片描述

图2 置换过程中的状态信息

4.采取手动输入,和OPT实验选用同一页面访问地址流序列1 8 3 2 0 5 2 2 6 4 9 5,结果如下图所示,输出访问结束时的页面命中率为16.666666666666664 %,缺页率为83.33333333333334 %
在这里插入图片描述

图3 手动输入页面访问地址流序列的结果

5.分析:通过手动输入和OPT实验选用同一页面访问地址流序列,其过程是不同的,OPT的命中率是25%,比LRU高。由图3和图5,可以看到前5个时间段的LRU图像和OPT一样,但这不是必然的结果,因为OPT是从“向后看”的观点出发,即依据以后各页的使用情况进行判断,而LRU是“向前看”,根据各页以前的使用情况来判断,而页面的过去与未来的走向之间没有必然的联系。
在这里插入图片描述

图4 OPT页面访问地址流序列的结果

二、流程图
在这里插入图片描述

3.4 最少使用置换算法的模拟

一、实验内容
1.算法思想:LFU(算法根据数据的历史访问频率来淘汰数据,如果数据过去被访问多次,那么将来被访问的频率也更高。
2.对于虚页的个数已预先设定为10个,系统为进程在内存分配的物理块个数为3,关于页面访问地址流序列,这里是动态输入,如1 8 3 2 0 5 2 2 6 4 9 5,结果如下图所示,其中-1表示物理块里为空,没有页面。
在这里插入图片描述

图1 动态输入页面访问地址流序列

3.输入页面访问地址流序列之后置换过程中的状态信息如下图所示(发生命中时物理块内页面不变化,就不显示,但命中次数加1),输出访问结束时的页面命中率为0.0833333,缺页率为0.916667
在这里插入图片描述

图2 置换结果

4.分析:LFU的每个数据块都有一个引用计数,所有数据块按照引用计数排序,具有相同引用计数的数据块则按照时间排序,最终得到的结果如上图所示,命中率为0.0833333,缺页率为0.916667,符合预期结果。
5.实验中遇到的问题:
(1)实验的难点主要是根据数据的历史访问频率来淘汰数据。
(2)在计算命中率时因为不小心弄错数据而出错。
6.解决办法:
(1)LFU的每个数据块都有一个引用计数,所有数据块按照引用计数排序,具有相同引用计数的数据块则按照时间排序。
(2)通过调试,最终找到了错误

二、流程图
在这里插入图片描述

3.5 Clock置换算法的模拟

一、实验内容
1.算法思想:(1)简单的Clock算法:当利用简单的Clock算法的时候,需要给每一个页面添加一位访问位,再将内存中的所有页面链接成一个环形队列,方便循环访问,一开始访问位都是 0,在被访问之后,访问位设置为 1。
在进程当中,如果页面的访问位为 0,则可以将其换出,如果是 1,将其访问位变为 0,接着找下一个,。直到找到最后,循环下一次。
(2)改进型Clock置换算法:除了访问位,再添加一个修改位,具体的置换规则:
(0,0):最近没有使用使用也没有修改,最佳状态!
(0,1):修改过但最近没有使用,第二考虑的状态
(1,0):使用过但没有被修改,该页面可能再次被访问
(1,1):使用过也修改过,该页面可能再次被访问
2.简单的Clock算法:对于虚页的个数已预先设定为10个,设定系统为进程在内存分配的物理块个数为3,随机数法随机生成虚页访问地址流序列,如图所示:选择4简单的Clock算法,随机生成的虚页访问地址流序列为9 8 3 7 8 8 5 0 8 3:
在这里插入图片描述

图1 简单的Clock算法随机生成访问地址流序列

3.随机数生成页面访问地址流序列之后置换过程中的状态信息如图2所示,输出访问结束时的页面命中率为0.3,缺页率为:0.7
在这里插入图片描述

图2 简单的Clock算法的页面置换结果

4.改进型Clock算法:对于虚页的个数已预先设定为10个,设定系统为进程在内存分配的物理块个数为3,随机数法随机生成虚页访问地址流序列,如图所示:选择5改进型Clock算法,随机生成的虚页访问地址流序列为2 4 8 3 1 8 0 7 2 0:
在这里插入图片描述

图3 改进型Clock算法随机生成访问地址流序列

5.改进型Clock算法随机数生成页面访问地址流序列之后置换过程中的状态信息如图4所示,输出访问结束时的页面命中率为0.1,缺页率为:0.9
在这里插入图片描述

图4 改进型Clock算法的页面置换结果

6.分析:简单的时钟置换算法仅考虑到一个页面最近是否被访问过。事实上,如果被淘汰的页面没有被修改过,就不需要执行I/O操作写回外存。只有被淘汰的页面被修改过时,才需要写回外存。因此,除了考虑一个页面最近有没有被访问过之外,操作系统还应考虑页面有没有被修改过。在其他条件都相同时,应优先淘汰没有修改过的页面,避免I/O操作。这就是改进型Clock算法。
二、流程图
在这里插入图片描述

需要实验源码的请在评论区评论

猜你喜欢

转载自blog.csdn.net/m0_53788135/article/details/125688863
今日推荐