Linux环境下几种内存调度算法模拟.docx

上传人:b****7 文档编号:8805950 上传时间:2023-02-01 格式:DOCX 页数:14 大小:88.21KB
下载 相关 举报
Linux环境下几种内存调度算法模拟.docx_第1页
第1页 / 共14页
Linux环境下几种内存调度算法模拟.docx_第2页
第2页 / 共14页
Linux环境下几种内存调度算法模拟.docx_第3页
第3页 / 共14页
Linux环境下几种内存调度算法模拟.docx_第4页
第4页 / 共14页
Linux环境下几种内存调度算法模拟.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Linux环境下几种内存调度算法模拟.docx

《Linux环境下几种内存调度算法模拟.docx》由会员分享,可在线阅读,更多相关《Linux环境下几种内存调度算法模拟.docx(14页珍藏版)》请在冰豆网上搜索。

Linux环境下几种内存调度算法模拟.docx

Linux环境下几种内存调度算法模拟

课程设计(大作业)报告

 

课程名称:

计算机操作系统

设计题目:

Linux环境下几种内存调度算法模拟

院系:

信息技术学院

班级:

级计算机科学与技术班

设计者:

学号:

指导教师:

段玻

设计时间:

2015年1月12日-2015年1月16日

 

昆明学院

昆明学院课程设计(大作业)任务书

姓名:

院(系):

信息技术学院

专业:

计算机科学与技术学号:

任务起止日期:

2015年1月12日至2015年1月16日

课程设计题目:

Linux环境下几种内存调度算法模拟

课程设计要求及任务描述:

要求:

(1)按指定时间及地点参加课程设计。

(2)通过本次课程设计,能加深理解设计项目使用的相关原理。

(3)根据项目内容完成课程设计。

(4)在指定时间内提交设计结果及设计报告。

任务:

(1)选择其中两种算法的原理进行分析

①FIFO内存调度算法的原理

②(其他任选一个算法)内存调度算法的原理

(2)设计两种算法的流程图

①设计FIFO算法的流程图。

②其他任选一个算法设计流程图。

(3)使用Vi编写实现两种算法的程序

①FIFO内存调度算法的代码。

②(其他任选一个算法)内存调度算法的代码。

(4)结果分析

①分析设计结果是否达到预期目标。

②针对同一访问序列比较两种算法的缺页率。

 

工作计划及安排:

第一天上午:

教师讲解原理及课程设计要求和任务。

第一天下午:

原理学习、任务分析。

第二天:

流程图设计。

第三天:

代码编写。

第四天:

代码编写。

第五天:

提交设计结果及设计报告。

 

指导教师签字

年月日

课程设计(大作业)成绩

学号:

姓名:

指导教师:

段玻

课程设计题目:

Linux环境下几种内存调度算法模拟

完成情况总结:

在为期一周的实训中,在FIFO算法、以及RLU算法的编程方面出现了很大的困难,在选择语言方面,JAVA,C#,C语言之间,我最终选择了C语言来帮助我完成我接下来的试验,刚开始上手的时候,觉得只要懂得了原理,再加上自己C语言的功底应该可以应付的,但是,事实远远没有想象的那么简单,先是在写代码方面就出了问题,由于对原理的理解不是非常的深入,在编写代码时,总是停滞不前,彷徨时也曾想过放弃,但是逃避是没有用的,最终在同学的帮助下,我完成了代码的编程,在反复调试,改正之后算法终于验证成功了。

每一次的试验都是对自己所学知识的强化,都是一次难得的动手机会,在实验的每一个步骤的执行中,都要认真反复的去做,因为没一个小小的错误都会导致实验结果发生巨大的变化。

完成一次成功的实训,会让自己学会很多很多的东西,并且能够很清楚的看到自己的不足,从而查缺补漏,更加充实自己。

 

指导教师评语:

 

成绩:

 

填表时间:

指导教师签名:

课程设计(大作业)报告

一、题目分析(原理说明)

设计原理

在进程运行过程中,若其访问的页面不在内存而需要将其调入,但内存已无空闲空间时,需要从内存中调出(淘汰)一页程序或数据,送入磁盘的对换区。

用来选择淘汰哪一页的算法叫做置换算法,也称为淘汰算法。

淘汰算法是否适合某一序列直接影响系统的性能。

一个好的置换算法应具有较低的页面置换频率,置换时应将以后不再会访问,或是在较长时间内不再访问的页面淘汰。

1、先进先出算法(FIFO算法)基本思想

先进先出算法选择在内存中驻留时间最长的页面予以淘汰,即先进入内存的页面先淘汰。

其优点是算法实现简单,只须把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,使该指针总是指向最先进入内存的页面。

缺点是算法与进程的实际运行规律不相适应,因为进程中的某些页面经常被访问,但先进先出置换算法不能保证这些页面不被淘汰。

2、最近最久未使用算法(LRU算法)基本思想

最近最久未使用算法选择未被访问的页中时间最长的页予以淘汰。

该算法思想中,如果某个页面被访问,则它可能马上还要被访问,即某页面长时间未被访问,则页面在最近一段时间也不会被访问,所以选择未被访问页中时间最长的予以淘汰能降低页面置换频率。

该算法的优点是性能较好,降低置换频率。

缺点是实现复杂,需要硬件辅助,增加系统负担。

二、程序设计

1.流程图

 

 

2数据结构说明

#defineMaxWindow4//最大窗口数

#defineMaxN10//最多输入值个数

//定义全局变量

intWindow=0;//实际窗口大小

intN=0;//实际输入值个数

intChoice=0;//算法选择号

intA[MaxN];//输入值数组

intb[MaxWindow+1];//窗口数组

intnum=0;//缺页数

floatans=0.0;//缺页率

voidLRU(intwin,intn,inta[]);//LRU算法函数声明

voidFIFO(intwin,intn,inta[]);//FIFO算法函数声明

voidInitFunctionA();//初始化输入值变量函数

voidInitFunctionb();//初始化其余变量

3.代码

#include

#defineMaxWindow4

#defineMaxN10

intWindow=0;

intN=0;

intChoice=0;

intA[MaxN];

intb[MaxWindow+1];

intnum=0;

floatans=0.0;

voidLRU(intwin,intn,inta[]);

voidFIFO(intwin,intn,inta[]);

voidInitFunctionA();

voidInitFunctionb();

voidInitFunctionA()

{

for(inti=0;i

{A[i]=0;}

}

voidInitFunctionb()

{

for(intj=0;j

{b[j]=0;}

ans=0.0;

num=0;

}

//LRU算法描述

voidLRU(intwin,intn,inta[])

{

InitFunctionb();

cout<<"LRU算法开始:

"<

inttemp=0,flag=0;

for(inti=0;i

{

flag=0;

cout<<"当前窗口中的值为:

"<

for(intx=1;x

{cout<<"\t"<

cout<

cout<<"下一个进入窗口的值:

"<

temp=a[i];

b[0]=temp;

for(intj=1;j

{

if(temp==b[j])

{

for(intp=j;p>0;p--)

{b[p]=b[p-1];}

flag=1;

cout<<"此页不缺失,重新调整窗口值顺序"<

cout<

break;

}

}

if(flag==0)

{

num++;

cout<<"此页缺失,缺页数加一,当前缺页总数为:

"<

cout<

for(intq=win;q>0;q--)

{b[q]=b[q-1];}

}

}

cout<

ans=(float)num/n;

cout<<"采用LRU算法的缺页总数为:

"<

num/n="<

"<

intflag=0;

inttemp=0;

for(inti=0;i

{

flag=0;

cout<<"当前窗口中的值为:

"<

for(intx=1;x

{cout<<"\t"<

cout<

cout<<"当前进入窗口的值:

"<

temp=a[i];

b[0]=temp;

for(intj=1;j

{

if(temp==b[j])

{flag=1;

cout<<"此页不缺失"<

cout<

break;

}

}

if(flag==0)

{

for(intq=win;q>0;q--)

{b[q]=b[q-1];}

num++;

cout<<"此页缺失,缺页数加一,当前缺页数目为:

"<

cout<

}

}

cout<

ans=(float)num/n;

cout<<"使用FIFO算法的缺页数为:

"<

num/n="<

(1—4)"<

cin>>Window;

if(Window!

=1&&Window!

=2&&Window!

=3&&Window!

=4)

{cout<<"输入错误,请输入1到4中一个整数!

"<

}while(Window!

=1&&Window!

=2&&Window!

=3&&Window!

=4);

do

{cout<<"请输入数值个数:

(4—10)"<

cin>>N;

if(N!

=4&&N!

=5&&N!

=6&&N!

=7&&N!

=8&&N!

=9&&N!

=10)

{cout<<"输入错误,请输入4到10的整数"<

}while(N!

=4&&N!

=5&&N!

=6&&N!

=7&&N!

=8&&N!

=9&&N!

=10);

InitFunctionA();

InitFunctionb();

cout<<"请依次输入数值:

(非0)"<

for(inti=0;i

{do

{cin>>A[i];

if(A[i]==0)

{cout<<"输入值不为0,请重新输入此值"<

}while(A[i]==0);

}

cout<<"输入的值依次为:

";

for(intj=0;j

{cout<<""<

cout<

while(true)

{

cout<

(1)使用LRU算法计算缺页率"<

cout<<"

(2)使用FIFO算法计算缺页率"<

cout<<"请输入选择的算法序号(1/2)"<

do

{cin>>Choice;

if(Choice!

=1&&Choice!

=2)

{cout<<"输入错误,请重新选择"<

}while(Choice!

=1&&Choice!

=2);

switch(Choice)

{

case1:

{LRU(Window,N,A);

break;}

case2:

{FIFO(Window,N,A);

break;}

}

}

}

三、结果分析

四、实验总结及心得体会

在为期一周的实训中,在FIFO算法、以及RLU算法的编程方面出现了很大的困难,在选择语言方面,JAVA,C#,C语言之间,我最终选择了C语言来帮助我完成我接下来的试验,刚开始上手的时候,觉得只要懂得了原理,再加上自己C语言的功底应该可以应付的,但是,事实远远没有想象的那么简单,先是在写代码方面就出了问题,由于对原理的理解不是非常的深入,在编写代码时,总是停滞不前,彷徨时也曾想过放弃,但是逃避是没有用的,最终在同学的帮助下,我完成了代码的编程,在反复调试,改正之后算法终于验证成功了。

每一次的试验都是对自己所学知识的强化,都是一次难得的动手机会,在实验的每一个步骤的执行中,都要认真反复的去做,因为没一个小小的错误都会导致实验结果发生巨大的变化。

完成一次成功的实训,会让自己学会很多很多的东西,并且能够很清楚的看到自己的不足,从而查缺补漏,更加充实自己。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1