操作系统课设.docx

上传人:b****4 文档编号:4384183 上传时间:2023-05-07 格式:DOCX 页数:38 大小:219.49KB
下载 相关 举报
操作系统课设.docx_第1页
第1页 / 共38页
操作系统课设.docx_第2页
第2页 / 共38页
操作系统课设.docx_第3页
第3页 / 共38页
操作系统课设.docx_第4页
第4页 / 共38页
操作系统课设.docx_第5页
第5页 / 共38页
操作系统课设.docx_第6页
第6页 / 共38页
操作系统课设.docx_第7页
第7页 / 共38页
操作系统课设.docx_第8页
第8页 / 共38页
操作系统课设.docx_第9页
第9页 / 共38页
操作系统课设.docx_第10页
第10页 / 共38页
操作系统课设.docx_第11页
第11页 / 共38页
操作系统课设.docx_第12页
第12页 / 共38页
操作系统课设.docx_第13页
第13页 / 共38页
操作系统课设.docx_第14页
第14页 / 共38页
操作系统课设.docx_第15页
第15页 / 共38页
操作系统课设.docx_第16页
第16页 / 共38页
操作系统课设.docx_第17页
第17页 / 共38页
操作系统课设.docx_第18页
第18页 / 共38页
操作系统课设.docx_第19页
第19页 / 共38页
操作系统课设.docx_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

操作系统课设.docx

《操作系统课设.docx》由会员分享,可在线阅读,更多相关《操作系统课设.docx(38页珍藏版)》请在冰点文库上搜索。

操作系统课设.docx

操作系统课设

目录

一、课程设计目的1

二、课程设计的内容1

三、系统需求分析1

1、模块划分1

2、模块调用关系图7

3、模块盒图表示7

四、程序源代码12

五、程序测试数据和结果15

六、总结17

1、设计体会17

2、心得体会18

七、程序设计说明书19

附件23

 

一、课程设计目的

本课程设计是学生学习完《操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。

2、课程设计内容

题目:

设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问命中率。

设计要求:

主界面以灵活选择某算法,且以下算法都要实现

1、先进先出算法(FIFO)

2、最近最久未使用算法(LRU)

3、最佳置换算法(OPT)

3、设计方案介绍

1、模块划分

(1)内存赋值的函数

voidmemory1(intmsize,char*a)

{inti;

for(i=0;i

a[i]='0';//把memory数组中的值赋为0

}

说明:

该函数实现了内存赋值的功能,在这个题目中这个函数实现了内存中值赋为0。

(2)先进先出算法

voidFIFO(intmsize,intqsize)

{intflag[100]={0};//用来记录内存中数据时间先后,数越大数据内存表示进入时间越长

inti=0,j=0;//i表示随机队列的下标;j表示内存队列的下标

intm=-1;//m用来记录内存空闲的物理块;

intn=-1;//n用来记录内存与队列进程相同的内存下标

intmax=-1;//max记录队列中进入内存时间最长的下标;

maxtime=0;//maxtime记录flag[]中数据进入内存时间最长的

intcount=0;//count表示命中的次数

for(i=0;i

{for(j=0;j

{if(memory[j]=='0'){m=j;break;}

}

for(j=0;j

{if(memory[j]==queue[i])

{n=j;count++;}

}

for(j=0;j

{if(flag[j]>maxtime)

{maxtime=flag[j];max=j;}

}

if(n==-1)//不存在相同进程

{if(m!

=-1)//存在空闲的内存物理块

{memory[m]=queue[i];//空闲的内存物理块赋值

flag[m]=0;//赋值的内存物理块的时间块赋值为0

for(j=0;j<=m;j++)

{flag[j]++;//把空闲的内存物理块前面的时间块的值加1}

m=-1;//空闲的物理的标志去除

}

else//不存在空闲物理块

{memory[max]=queue[i];//把queue[i]中的值赋给最早进入内存的值

flag[max]=0;//把最早进入内存的时间调度的值赋为0

for(j=0;j

{flag[j]++;//把内存中时间调度的值都加1.}

max=-1;//把内存中进入时间最长的下标的标志去掉

maxtime=0;//把时间最长的标志去掉

}

}

else//存在相同的进程

{for(j=0;j

{flag[j]++;}

n=-1;//把存在相同进程的标志去掉

}

for(j=0;j

{cout<

cout<

}

cout<<"页面命中的次数为:

"<

cout<<"页面的命中率为:

"<

}

说明:

FIFO()函数实现的是先进先出算法,根据随机生成的页面标号完成先进先出算法的调度,并计算出命中率。

(3)最近最久未使用算法

voidLRU(intmsize,intqsize)

{

intflag[100]={0};//记录内存中最近最久未使用的时间长度

inti=0,j=0;//i用来记录队列的下表;j用来记录内存的下标

intm=-1,n=-1;//m记录内存中空闲物理块的下标;n记录内存中与进程相同的数的下表

intmax=-1,maxflag=0;//max记录flag[]中最大的数的下标;maxflag记录flag[]中最大的数

intcount=0;//命中的次数

for(i=0;i

{for(j=0;j

{if(memory[j]=='0')

{m=j;break;}

}

for(j=0;j

{if(memory[j]==queue[i]){n=j;}

}

for(j=0;j

{if(flag[j]>maxflag){maxflag=flag[j];max=j;}

}

if(n==-1)//不存在相同进程

{if(m!

=-1)//存在空闲物理块

{memory[m]=queue[i];//空闲的内存物理块赋值

flag[m]=1;//赋值的内存物理块的时间块赋值为1

for(j=0;j

{flag[j]++;//把flag[m]中的数加1}

m=-1;//空闲的物理的标志去除

}

else//不存在空闲物理块

{memory[max]=queue[i];//把queue[i]中的值赋给最早进入内存的值

flag[max]=0;//把最早进入内存的时间调度的值赋为0

for(j=0;j

{flag[j]++;//把内存中时间调度的值都加1}

max=-1;//把内存中进入时间最长的下标的标志去掉

maxflag=0;//把时间最长的标志去掉

}

}

else//存在相同的进程

{count++;//命中自增

flag[n]=0;

if(m!

=-1)//若存在空闲物理块

{flag[m]=0;}

for(j=0;j

max=-1;

maxflag=0;

n=-1;

}

for(j=0;j

{cout<

}

printf("页面命中次数为:

%d\n",count);cout<

cout<<"页面的命中率为:

"<

}

说明:

LRU()函数实现的是最近最久未使用算法的功能,根据生成的随机数列完成最近最久未使用算法对他们的调度,并计算出命中率。

(4)最佳置换算法

voidOPT(intmsize,intqsize)

{intflag[100]={0};//用来记录内存中数据时间先后,数越大数据内存表示进入时间越长

inti=0,j=0;//i表示随机队列的下标;j表示内存队列的下标

intm=-1,n=-1;//m记录内存空闲的物理块,n用来记录内存与队列进程相同的内存下标

intmax=-1;//max记录队列中进入内存时间最长的下标;

maxtime=0;//maxtime记录flag[]中数据进入内存时间最长的

intcount=0;//count表示命中的次数

inta=0,b;

for(i=0;i

{for(j=0;j

{if(memory[j]=='0'){m=j;break;}

}

for(j=0;j

{if(memory[j]==queue[i]){n=j;count++;//命中,count加1}

}

for(j=0;j

{if(flag[j]>maxtime){maxtime=flag[j];max=j;}

}

if(n==-1)//不存在相同进程

{if(m!

=-1)//存在空闲的内存物理块

{memory[m]=queue[i];//空闲的内存物理块赋值

for(b=i+1;b

{if(memory[m]==queue[b]){a=b;break;}

}

if(a==0)flag[m]=100000;

elseflag[m]=a;//把flag[m]的值赋为a

m=-1;//空闲的物理的标志去除

}

else//不存在空闲物理块

{memory[max]=queue[i];//把queue[i]中的值赋给最早进入内存的值

for(b=i+1;b

{if(memory[max]==queue[b]){a=b;break;}}

if(a==0)flag[max]=100000;

elseflag[max]=a;

}

}

else//存在相同的进程

{memory[n]=queue[i];

for(b=i+1;b

{if(memory[n]==queue[b]){a=b;break;}

}

if(a==0)flag[n]=100000;

elseflag[n]=a;

n=-1;//把存在相同进程的标志去掉

}

for(j=0;j

{cout<

}

cout<<"页面命中的次数为"<

cout<<"页面的命中率为:

"<

}

说明:

OPT()函数实现的是最佳置换算法的功能,根据随机生成的数列来实现对他们的调度并计算出命中率。

(5)主函数

voidmain()

{cout<

cout<<"×××××××××××********欢迎使用本系统********×××××××××××××"<

inta,b,c,k;//a表示是否对数据进行修改;b对应内存的数据;c对应队列的长度,,

chard,e;//d表示是否对队列进行修改,e表示对算法的选择

intmsize=3,f;//内存中的长度,f表示对循环使用的标志

intqsize=8;//队列的长度

L:

printf("对队列进行赋值,1:

随机产生一个队列;2:

手动输入一个队列:

");

cin>>d;cout<

if(d!

='1'&&d!

='2')

{cout<<"输出的选项错误,请重新输入!

"<

switch(d)

{case'1':

//随机产生的数组

{cout<<"随机产生队列为:

";

for(inti=0;i<8;i++)cout<

cout<

}break;

case'2':

//手动产生的数组

{inti;

printf("默认长度内存为3,队列为8,你是否想对其长度进行修改(0:

N;1:

Y):

");

cin>>a;cout<

if(a==1)

{printf("请依次输入内存、队列的长度:

");cin>>b>>c;

msize=b;

qsize=c;

}

printf("请输入你想要的队列:

");cin>>queue;

for(i=0;i

{charm;

m=queue[i];

if(m<'0'||m>'9')

{cout<<"第"<

";cin>>queue[i];}

}

for(i=0;i

cout<

}

}

K:

cout<<"请输入您想选择的算法:

"<

for(inti=0;i<8;i++)cout<<"*********";cout<

cout<<"1:

先进先出算法;2:

最近最久未使用算法;3:

最佳置换算法;

4:

以上三种算法都有"<

for(intj=0;j<8;j++)cout<<"*********";cout<

cin>>e;cout<

if(e!

='1'&&e!

='2'&&e!

='3'&&e!

='4')

{cout<<"输入的算法错误,请重新输入!

"<

switch(e)

{case'1':

memory1(msize,memory);//对memory数组进行赋值,消除以前的记忆

cout<<"先进先出(FIFO)页面置换算法"<

case'2':

memory1(msize,memory);

cout<<"最近最久未使用算法如下:

"<

case'3':

memory1(msize,memory);

cout<<"最佳置换算法如下:

"<

case'4':

memory1(msize,memory);

cout<<"先进先出(FIFO)页面置换算法"<

memory1(msize,memory);

cout<<"最近最久未使用算法如下:

"<

memory1(msize,memory);

cout<<"最佳置换算法如下:

"<

}

cout<<"是否对出系统(0:

N;1:

Y)?

";cin>>f;cout<

if(f==0)

{cout<<"是否想创建新的队列(0:

N;1:

Y)?

";cin>>k;cout<

if(k==1)gotoL;

if(k==0)gotoK;

}cout<

cout<<"××××××××××********退出本系统,谢谢使用********××××××××××××"<

}

说明:

主函数main()实现了对界面自动和的设计和对各个算法的调用

2、模块调用关系图

Main()函数

OPT()函数

LRU()函数

FIFO()函数

Memory1函数

3、模块盒图表示

(1)voidmemory1(intmsize,char*a)函数模块

Inti=0;

for(i=0;i

a[i]='0'

 

 

(2)voidFIFO(intmsize,intqsize)函数模块

intflag[100]={0}inti=0,j=0;;intm=-1,n=-1;

intmax=-1,maxtime=0;intcount1=0;

 

for(i=0;i

for(j=0;j

Fif(memory[j]=='0'T

-----m=j;break;

for(j=0;j

Fif(memory[j]==queue[i])T

---------n=j;count++;

for(j=0;j

Fif(flag[j]>maxtime)T

---------maxtime=flag[j];max=j;

Fif(n==-1)T

for(j=0;j

=-1)

FT

flag[j]++;memory[max]=queue[i];memory[m]=queue[i]

flag[max]=0;flag[m]=0;

for(j=0;j

flag[j]++;flag[j]++;

n=-1;

max=-1;m=-1;

maxtime=0;

for(j=0;j

cout<

cout<

cout<<"页面命中的次数为:

"<

cout<<"页面的命中率为:

"<

 

(3)LRU()函数模块

(3)voidLRU(intmsize,intqsize)函数模块

intflag[100]={0};inti=0,j=0;intm=-1,n=-1;

intmax=-1,maxtime=0;intcount=0;

for(i=0;i

for(j=0;j

Fif(memory[j]=='0')T

---------m=j;break;

for(j=0;j

if(memory[j]==queue[i])

FT

-------n=j;count++;

for(j=0;j

Fif(flag[j]>maxtime)T

--------maxtime=flag[j];max=j;

Fif(n==-1)T

if(m!

=-1)if(m!

=-1)

FTFT

-------flag[m]=0;memory[max]=queue[i];memory[m]=queue[i]

flag[max]=0;flag[m]=1;

for(j=0;j

flag[j]++;flag[j]++;flag[j]++;

max=-1;

maxflag=0;max=-1;

n=-1;maxtime=0;m=-1;

for(j=0;j

cout<

cout<

printf("页面命中次数为:

%d\n",count);

cout<

cout<<"页面的命中率为:

"<

(4)OPT(intmsize,intqsize)函数模块

intflag[100]={0};inti=0,j=0;intm=-1,n=-1;

intmax=-1,maxtime=0;intcount=0;inta=0,b;

for(i=0;i

for(j=0;j

Fif(memory[j]=='0')T

-------------m=j;break;

for(j=0;j

Fif(memory[j]==queue[i])T

---------------n=j;count++;

for(j=0;j

Ff(flag[j]>maxtime)T

maxtime=flag[j];

-------max=j;

Fif(n==-1)T

memory[n]=queue[i];Fif(m!

=-1)T

for(b=i+1;b

if(memory[n]for(b=i+1;b

F==queue[b])Tif(memory[max]if(memory[m]

F==queue[b])TF==queue[b])T

------a=b;break;------a=b;break;-----a=b;break;

a==0

FTFa==0TFif(a==0)T

flag[m]

flag[n]=a;flag[n]=100000;fflag[max]flag[m]=a;=100000;

n=-1;lag[max]=a=10000

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

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2