实验五:页面调度算法模拟实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算机操作系统》实验报告
实验五:页面调度算法模拟
学校:╳╳╳
院系:╳╳╳
班级:╳╳╳
姓名:╳╳╳
学号:╳╳╳
指导教师:╳╳╳
目录
一、实验题目 (3)
二、实验学时 (3)
三、指导老师 (4)
四、实验日期 (4)
五、实验目的 (4)
六、实验原理 (4)
6.1页面的含义 (4)
6.2 页面置换算法的含义 (4)
6.3 置换算法 (4)
6.3.1最佳置换算法(Optimal) (4)
6.3.2先进先出(FIFO)页面置换算法 (5)
6.3.3 LRU置换算法 (5)
七、实验步骤及结果 (5)
7.1 验证最佳置换算法 (5)
7.1.1 实验截图 (5)
7.1.2 实验分析 (5)
7.2 验证先进先出(FIFO)页面置换算法 (6)
7.2.1 实验截图 (6)
7.2.2 实验分析 (6)
7.3 验证LRU置换算法 (7)
7.3.1 实验截图 (7)
7.3.2 实验分析 (8)
八、报告书写人 (8)
附录一最佳置换算法(Optimal) (9)
附录二先进先出(FIFO)页面置换算法 (14)
附录三 LRU置换算法 (18)
实验五:页面调度算法模拟
一、实验题目
页面调度算法模拟
二、实验学时
2学时
三、指导老师
╳╳╳
四、实验日期
2018年12月10日星期一
五、实验目的
(1)熟悉操作系统页面调度算法
(2)编写程序模拟先进先出、LRU等页面调度算法,体会页面调度算法原理
六、实验原理
6.1页面的含义
分页存储管理将一个进程的逻辑地址空间分成若干大小相等的片,称为页面或页。
6.2 页面置换算法的含义
在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。但应将哪个页面调出,须根据一定的算法来确定。通常,把选择换出页面的算法称为页面置换算法(Page_Replacement Algorithms)。
6.3 置换算法
一个好的页面置换算法,应具有较低的页面更换频率。从理论上讲,应将那些以后不再会访问的页面换出,或将那些在较长时间内不会再访问的页面调出。
6.3.1最佳置换算法(Optimal)
它是由Belady于1966年提出的一种理论上的算法。其所选择的被淘汰页面,将是以后永不使用的或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。但由于人目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是
无法实现的,便可以利用此算法来评价其它算法。
6.3.2先进先出(FIFO)页面置换算法
这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。
6.3.3 LRU置换算法
LRU置换算法是选择最近最久未使用的页面予以淘汰。
七、实验步骤及结果
7.1 验证最佳置换算法
7.1.1 实验截图
7.1.2 实验分析
in 7 2 7 7 1 0 4 4 0 8 0 4 b1 7 7 7 7 4 4
b2 2 2 2 2 8
b3 1 1 1 1
b4 0 0 0
out 7 2
7.2 验证先进先出(FIFO)页面置换算法
7.2.1 实验截图
7.2.2 实验分析
7.3 验证LRU置换算法7.3.1 实验截图
7.3.2 实验分析
in 9 6 8 7 7 3 7 1 2 6 7 0
b1 9 9 9 9 3 3 3 6 6 b2 6 6 6 6 1 1 1 0 b3 8 8 8 8 2 2 2 b4 7 7 7 7 7 7
out 9 6 8 3 1
八、报告书写人
╳╳╳
附录一最佳置换算法(Optimal)
#include
#include
#include
#define N 12 /*随机数列的长度*/
#define B 4 /*内存页面数*/
int IsInBuf(int buf[],int list[],int num)
{
int i,j=-1;
int max_p;
int max_d=0;
for(i=0;i
{
if(buf[i]==list[num]) //当x在buf中,返回-1
return -1;
else if(buf[i]==-1) //当x不在buf中,且buf[i]为空,则把x 填入buf,并返回-1
{
buf[i]=list[num];
return -2;
}
}
for(i=0;i
{
for(j=num+1;j { if(buf[i]==list[j]){ if(max_d max_d=j;//buf[i]在list[]中的最近距离 max_p=i;//list[j]在buf[]的位置 } break; } } if(j==N) //如果buf满,并且buf[i]不在list[]的后半部分,返回位置i return i; } return max_p;//返回距离最远的buf[]的位置 } int main() { int list[N];//={4,3,2,1,4,3,5,4,3,2,1,5}; int buf[B],i,f[N],j,m,bufuse=0,tmp;