没有合适的资源?快使用搜索试试~ 我知道了~
课程设计:通用请求分页调度算法演示程序.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 3 下载量 52 浏览量
2022-05-30
21:18:28
上传
评论 2
收藏 601KB DOC 举报
温馨提示
试读
37页
课程设计:通用请求分页调度算法演示程序.doc
资源推荐
资源详情
资源评论
1
摘要
操作系统是管理计算机系统的全部硬件资源包括软件资源及数据资源,控制程序运行
改善人机界面,为其它应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,
为用户提供方便的、有效的、友善的服务界面。操作系统是一个庞大的管理控制程序,大
致包括 4 个方面的管理功能:处理机管理、存储管理、设备管理、文件管理。
在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。
当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页
面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。本次课程设计应用的页面
调度算法有先进先出的算法(FIFO)、最佳置换算法(OPT)、近期最久未使用算法
(LRU)、近期最少使用算法( LFU)、 CLOCK 置换算法
2
目录
2. 课程设计任务及要求...................................................................................................................15
2.1 设计任务.............................................................................................................................15
2.1.3 分工:..............................................................................................................................15
2.2 设计要求.............................................................................................................................15
3. 算法及数据结构...........................................................................................................................17
3.1 算法的总体思想(流程).................................................................................................17
3.2 FIFO 模块...........................................................................................................................19
3.2.1 功能..........................................................................................................................19
3.2.2 数据结构..................................................................................................................19
3.2.3 算法..........................................................................................................................19
/*先进先出页面置换算法*/....................................................................................................19
void FIFO()...............................................................................................................................19
{.................................................................................................................................................19
int memery[15]={-1};/*物理块数组*/....................................................................................19
int time[15]={0}; /*记录进入物理块的时间*/......................................................................19
int i,j,k,m,z;/*局部变量*/........................................................................................................19
int max=0; /*记录换出*/.........................................................................................................19
int count1=0; /*记录置换次数变量 1*//*修改*/....................................................................19
int count=0; /*记录置换次数变量 2*/....................................................................................19
int jungle = 0;/*物理块是否置换的标记*/.............................................................................19
/*修改*/....................................................................................................................................19
int wulikuai=0;/*记录前三个物理块进入页面数*/...............................................................19
/*前三个页面字符串置换的算法*/.......................................................................................19
for(i=0;i<mSIZE;i++)..............................................................................................................19
{................................................................................................................................................19
for(z=0;z<i;z++).......................................................................................................................19
{ if(memery[z]==page[i]) { jungle=1;break;}/*判断进入物理块的页面字符串与已进入物
理块数组的页面是否相同*/....................................................................................................19
}................................................................................................................................................19
if(jungle==0)/*不相同时 进行插入*/....................................................................................19
{................................................................................................................................................19
memery[wulikuai]=page[i];/*页面字符串数组插入到物理块数组中*/..............................19
count1++;/*记录前三个物理块的置换次数*/.......................................................................19
wulikuai++;/*记录已经进入物理块数组的页面数*/...........................................................19
time[i]=wulikuai;/*记录物理块的时间*/...............................................................................19
//if(i==mSIZE-1&&wulikuai!=3){memery[i]=-1;}/*判断物理块为第三块并且物理块数组
被用数不为 3 时,使未满的物理块数组其它组员为-1*/....................................................19
}................................................................................................................................................19
else{memery[i]=-1;}/*相同时候 不进行重复插入*/............................................................19
/*将物理块数组插入辅助数组中*/.......................................................................................19
3
for(j=0;j<mSIZE;j++)..............................................................................................................19
temp[i][j]=memery[j];/*将物理块数组插入到辅助数组中*/...............................................20
jungle=0;/*使得页面插入标志置为 0*/.................................................................................20
}................................................................................................................................................20
/*后 3 个页面字符串的置换算法*/........................................................................................20
for(i=mSIZE;i<pSIZE;i++)......................................................................................................20
{................................................................................................................................................20
...................................................................................................................................................20
/*判断新页面号是否在物理块中*/.......................................................................................20
for(j=0,k=0;j<mSIZE;j++).......................................................................................................20
{................................................................................................................................................20
if(memery[j]!=page[i]) /*处理 msize 块未满的 if(memery[j]!=page[i]&&memery[j]!=-1) */
...................................................................................................................................................20
k++;..........................................................................................................................................20
// else if(memery[j]!=page[i]&&memery[j]==-1&&count1!=mSIZE){ memery[j]=page[i];
time[2]=i; count++;}.................................................................................................................20
}................................................................................................................................................20
if(k==mSIZE) /*如果不在物理块中*/...................................................................................20
{................................................................................................................................................20
count++;/*换出页面次数+1*/.................................................................................................20
/*计算换出页*/........................................................................................................................20
max=time[0]<time[1]?0:1;/*判断记录访问时间值的大小 真则为 0 假为 1 赋予记录换出
的变量*/....................................................................................................................................20
for(m=2;m<mSIZE;m++)........................................................................................................20
if(time[m]<time[max]).............................................................................................................20
max=m;.....................................................................................................................................20
memery[max]=page[i];/*页面字符串数组插入到物理块数组中*/......................................20
time[max]=i; /*记录该页进入物理块的时间*/.....................................................................20
/*将物理块数组插入辅助数组中*/.......................................................................................20
for(j=0;j<mSIZE;j++)..............................................................................................................20
temp[i][j]=memery[j];..............................................................................................................20
}................................................................................................................................................20
else............................................................................................................................................20
{ /*将物理块数组插入辅助数组中*/....................................................................................20
for(j=0;j<mSIZE;j++)..............................................................................................................20
temp[i][j]=memery[j];/*物理块数组插入到辅助数组中*/...................................................20
}................................................................................................................................................20
}................................................................................................................................................20
compute();/*计算过程延迟输出*/..........................................................................................20
print(count,count1);//*输出结果函数*/..................................................................................20
}.................................................................................................................................................20
3.3 OPT 模块.............................................................................................................................20
3.3.1 功能..........................................................................................................................20
3.3.2 数据结构..................................................................................................................21
4
3.3.3 算法..........................................................................................................................21
/*最佳置换算法*/.....................................................................................................................21
void OPT().................................................................................................................................21
{ int jungle = 0;/*置换标记*/...................................................................................................21
int count1=0; /*记录置换次数*/.............................................................................................21
int memery[15]={-1};/*物理块数组*/....................................................................................21
int next[10]={0}; /*记录下一次访问时间*/..........................................................................21
int i,j,k,l,m,z;/*局部变量*/......................................................................................................21
int max; /*记录换出页*/.........................................................................................................21
int count=0; /*记录置换次数*/...............................................................................................21
int wulikuai=0;/*记录进入物理块数*/...................................................................................21
for(i=0;i<mSIZE;i++)..............................................................................................................21
{................................................................................................................................................21
for(z=0;z<i;z++).......................................................................................................................21
{ if(memery[z]==page[i]) { jungle=1; break;}........................................................................21
}................................................................................................................................................21
if(jungle==0)............................................................................................................................21
{ memery[wulikuai]=page[i];/*页面字符串数组插入到物理块数组中*/...........................21
count1++;/*记录前三个物理块的置换次数*/.......................................................................21
wulikuai++;/*记录已经进入物理块数组的页面数*/...........................................................21
if(i==mSIZE-1&&wulikuai!=3){memery[i]=-1;}..................................................................21
}................................................................................................................................................21
else{memery[i]=-1;}/*修改*/..................................................................................................21
for(j=0;j<mSIZE;j++)..............................................................................................................21
...................................................................................................................................................21
temp[i][j]=memery[j];/*物理块数组插入到辅助数组中*/...................................................21
jungle=0;...................................................................................................................................21
}................................................................................................................................................21
/*...............................................................................................................................................21
for(i=0;i<mSIZE;i++)..............................................................................................................21
{ memery[i]=page[i];/*页面字符串数组插入到物理块数组中*/........................................21
for(j=0;j<mSIZE;j++)..............................................................................................................21
temp[i][j]=memery[j];/*物理块数组插入到辅助数组中*/...................................................21
}*/.............................................................................................................................................21
...................................................................................................................................................21
for(i=mSIZE;i<pSIZE;i++)......................................................................................................21
{ /*判断新页面号是否在物理块中*/....................................................................................22
for(j=0,k=0;j<mSIZE;j++).......................................................................................................22
{ if(memery[j]!=page[i]) //if(memery[j]!=page[i]&&memery[j]!=-1)...................................22
k++;..........................................................................................................................................22
// else if(memery[j]!=page[i]&&memery[j]==-1&&count1!=mSIZE){ memery[j]=page[i];
count++;}...................................................................................................................................22
}................................................................................................................................................22
if(k==mSIZE) /*如果不在物理块中*/ {................................................................................22
5
count++;/*得到物理快中各页下一次访问时间*/.................................................................22
for(m=0;m<mSIZE;m++)........................................................................................................22
{................................................................................................................................................22
for(l=i+1;l<pSIZE;l++)............................................................................................................22
if(memery[m]==page[l])..........................................................................................................22
break;........................................................................................................................................22
next[m]=l;.................................................................................................................................22
} /*计算换出页*/.....................................................................................................................22
max=next[0]>=next[1]?0:1;.....................................................................................................22
for(m=2;m<mSIZE;m++)........................................................................................................22
if(next[m]>next[max]) max=m;/*下一次访问时间都为 pSIZE,则置换物理块中第一个*/
...................................................................................................................................................22
memery[max]=page[i];............................................................................................................22
for(j=0;j<mSIZE;j++) temp[i][j]=memery[j]; /*物理块数组插入到辅助数组中*/}...........22
else {.........................................................................................................................................22
...................................................................................................................................................22
for(j=0;j<mSIZE;j++) temp[i][j]=memery[j];/*物理块数组插入到辅助数组中*/ } }........22
...................................................................................................................................................22
compute(); /*计算过程延迟输出*/.........................................................................................22
print(count,count1);/*输出结果函数*/...................................................................................22
}................................................................................................................................................22
3.4 LRU 模块............................................................................................................................22
3.4.1 功能..........................................................................................................................22
3.4.2 数据结构..................................................................................................................22
3.4.3 算法..........................................................................................................................22
/*最近最久未使用置换算法*/................................................................................................22
void LRU()................................................................................................................................22
{.................................................................................................................................................22
int memery[15]={0};/*物理块数组*/......................................................................................22
int flag[10]={0}; /*记录页面的访问时间*/............................................................................23
int i,j,k,m;/*局部变量*/............................................................................................................23
int max=0; /*记录换出页*/......................................................................................................23
int count=0; /*记录置换次数*/................................................................................................23
/*前 mSIZE 个数直接放入*/...................................................................................................23
for(i=0;i<mSIZE;i++)...............................................................................................................23
{.................................................................................................................................................23
memery[i]=page[i];/*页面字符串数组插入到物理块数组中*/............................................23
flag[i]=i;.....................................................................................................................................23
for(j=0;j<mSIZE;j++)...............................................................................................................23
temp[i][j]=memery[j];...............................................................................................................23
}.................................................................................................................................................23
for(i=mSIZE;i<pSIZE;i++).......................................................................................................23
{.................................................................................................................................................23
/*判断新页面号是否在物理块中*/........................................................................................23
剩余36页未读,继续阅读
资源评论
- 釉质2842022-07-08感谢大佬分享的资源,对我启发很大,给了我新的灵感。
- lier45203692023-06-10资源不错,很实用,内容全面,介绍详细,很好用,谢谢分享。
- 2301_764556282024-01-09这个资源值得下载,资源内容详细全面,与描述一致,受益匪浅。
老帽爬新坡
- 粉丝: 82
- 资源: 2万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功