一、 实验目的
1、用C语言编写OPT、FIFO、LRU,LFU四种置换算法。
2、熟悉内存分页管理策略。
3、了解页面置换的算法。
4、掌握一般常用的调度算法。
5、根据方案使算法得以模拟实现。
6、锻炼知识的运用能力和实践能力。
二、 实验仪器设备
Microsoft Visual C++ 6.0
三、 实验原理或算法
- OPT基本思想:
是用一维数组page[pSIZE]存储页面号序列,memery[mSIZE]是存储装入物理块中的页面。数组next[mSIZE]记录物理块中对应页面的最后访问时间。每当发生缺页时,就从物理块中找出最后访问时间最大的页面,调出该页,换入所缺的页面。 - FIFO基本思想:
是用队列存储内存中的页面,队列的特点是先进先出,与该算法是一致的,所以每当发生缺页时,就从队头删除一页,而从队尾加入缺页。或者借助辅助数组time[mSIZE]记录物理块中对应页面的进入时间,每次需要置换时换出进入时间最小的页面。 - LRU基本思想:
是用一维数组page[pSIZE]存储页面号序列,memery[mSIZE]是存储装入物理块中的页面。数组flag[10]标记页面的访问时间。每当使用页面时,刷新访问时间。发生缺页时,就从物理块中页面标记最小的一页,调出该页,换入所缺的页面。
四、 程序代码及验证过程
实验代码调试:
- 程序模拟演示
程序初始化:
载入相关数据;
进入选择置换算法界面:
进入选择置换算法界面:
选择先进先出算法,得出缺页次数、缺页率、置换次数以及访问命中率:
- 根据模拟过程计算教材书课后习题13:
在一个请求分页系统中,采用FIFO页面置换算法时,加入一个作业的页面走向为4、3、2、1、4、3、5、4、3、2、1、5,当分配给该作业的物理块数M分别为3和4时,试计算在访问过程中所发生的缺页次数和缺页率,并比较所得结果:
(1)当分配3个物理块时:
程序初始化,由题载入相关数据:
进入选择置换算法界面,选择先进先出算法,得出缺页次数9、缺页率9/12、置换次数6以及访问命中率25%:
(2)当分配4个物理块时:
重新运行程序,由题载入相关数据:
进入选择置换算法界面,选择先进先出算法,得出缺页次数10、缺页率10/12、置换次数6以及访问命中率16%:
(3) 通过不同物理块数所得缺页次数和缺页率,比较两次程序运行结果:
M=3,M=4表格:
缺页次数9、缺页率9/12、置换次数6以及访问命中率25%
缺页次数10、缺页率10/12、置换次数6以及访问命中率16%
结论:
在页面走向为4、3、2、1、4、3、5、4、3、2、1、5的一个作业中,采用FIFO页面置换算法时,分配3个物理块时的缺页次数和缺页率,效果更理想。由此可见,增加分配给作业的内存块数,反而增加了缺页次数,提高了缺页率,这种线性被称为Belady现象。
五、 实验总结
- 在进程运行过程中,若其访问的页面不在内存而需把它们调入内存,但内存以无空闲空间时,为了保证该进程能正常的运行,系统必须从内存中调出一页程序或数据送磁盘的兑换区中,但应将哪个页面调出,需根据一定的算法来确定。通常,把选择换成页面的算法称为页面置换算法。
- 页面置换算法主要有以下置换算法:OPT(最佳置换算法)、FIFO(先进先出置换算法)、LRU(最近最久未使用算法)。每种算法都有各自的优缺点,OPT算法是实际中不能实现的,但是可以利用该算法去评价其它算法;FIFO算法与进程实际运行的规律不相适用因为在进程中,有些页面经常被访问:LRU算法是根据页面调入内存后的使用情况进行决策的。