操作系统课程设计.docx

上传人:b****5 文档编号:3979665 上传时间:2022-11-26 格式:DOCX 页数:27 大小:394.58KB
下载 相关 举报
操作系统课程设计.docx_第1页
第1页 / 共27页
操作系统课程设计.docx_第2页
第2页 / 共27页
操作系统课程设计.docx_第3页
第3页 / 共27页
操作系统课程设计.docx_第4页
第4页 / 共27页
操作系统课程设计.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

操作系统课程设计.docx

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

操作系统课程设计.docx

操作系统课程设计

目录

1.课程设计的目的1

2.课程设计的要求1

3.课程设计报告内容1

3.1前言:

1

3.2课程设计的环境1

3.2.1硬件环境:

1

3.2.2软件环境:

1

3.3系统技术分析:

1

3.3.1算法设计:

1

3.3.2用户文档:

2

3.3.3技术文档:

2

3.4系统流程图及各模块2

3.5源程序代码清单3

makefile:

3

keyio:

4

print.c4

t.h5

rand.c5

main.c6

lru.c8

lfu.c9

fifo.c11

opt.c12

3.6实验结果及调试14

4.总结17

参考文献:

18

模拟内存管理

1.课程设计的目的

课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。

提高学生适应实际,实践编程的能力。

2.课程设计的要求

认真完成本课程设计的全部过程。

并以最终课程设计成果来证明其独立完成各种实际任务的能力。

从而,反映出理解和运用本课程知识的水平和能力。

3.课程设计报告内容

3.1前言:

操作系统是计算机系统中最重要的系统软件,Linux操作系统是源码公开的实用的现代操作系统,利用Linux作为操作系统实验的平台,不但可以理解操作系统原理,同时也可以作为操作系统开发实战的演练。

3.2课程设计的环境

3.2.1硬件环境:

本系统适用于Linux(RedHat)环境下的计算机,内存512M——1G,配备显示屏、键盘和鼠标等。

3.2.2软件环境:

本系统采用makefile实现模块编程,只能够在Linux环境下或使用Linux下的编程工具实现。

3.3系统技术分析:

3.3.1算法设计:

将程序分成10个模块,然后采用所编写的makefile文件指出这些模块的编译过程说明。

主要模块有程序的输入,输出以及各种页面置换算法函数,包过OPT(最佳置换算法),FIFO(先进先出置换算法),LRU(最近最少使用置换算法),LFU(最久最少使用算法),程序结构相当清晰。

t.h文件中主要是一些宏定义。

Print.c主要处理程序所用到的输出,包过用到一些简单的界面,方便用户使用。

3.3.2用户文档:

首先将户切换到文件Makefile目录下,生成一个可执行文件result,然后执行该可执行文件,进入到主界面,根据命令提示,可以简单方便的实现对内存的模拟管理,并且将管理过程输出,便于用户分析。

3.3.3技术文档:

本程序有过个.c文件,每个模块对应于一个.c文件,便于调试。

而且每个.c文件里面对代码都有详细的说明,便于阅读。

在所有的.c文件中都尽量的使得程序简洁,达到了程序设计的要求,即用最为便捷的方法,用最简单的代码达到最好的效果。

一些具体的内容查看源代码。

3.4系统流程图及各模块

模块说明:

产生随机页面:

用rand.c文件来实现,voidrand(intn,charp[])这函数是产生n个1~10的随机数放到p[]数组里面

手动输入页面:

用keyio.c文件来实现,voidkeyinput(intn,charp[])由键盘输入n个整数放到p[]数组里面,voidkeyoutput(intn,charp[]),输出刚刚由键盘输入输入的页面,用于确认是否有输入错误

OPT:

voidOptimal(charym[],intn)最佳置换算法,用opt.c实现

FIFO:

voidFIFO(charym[],intn)先进先出算法,用fifo.c实现

LRU:

voidLRU(charym[],intn)最近最久未使用算法,用lru.c实现

LFU:

voidLFU(charym[],intn)最少使用算法,用lfu.c实现

结果输出:

用print.c来实现,voiddisplay1()实现算法的选择,voiddisplay2(intselect,charym[],intn)输出显示结果的框架,并调用print(),voidPrint(),用于显示所选择算法的置换结果

Makefil:

链接程序,并指明编译的过程

3.5源程序代码清单

makefile:

obj=main.orand.okeyio.oprint.olfu.olru.oopt.ofifo.o

result:

$(obj)

g++$(obj)-o$@

main.o:

main.c

g++-cmain.c

fifo.o:

fifo.ct.h

g++-cfifo.c

keyio.o:

keyio.c

g++-ckeyio.c

lfu.o:

lfu.c

g++-clfu.c

lru.o:

lru.c

g++-clru.c

opt.o:

opt.c

g++-copt.c

print.o:

print.c

g++-cprint.c

rand.o:

rand.c

g++-crand.c

.PHONY:

clean

clean:

rm-f$(obj)

 

keyio:

#include"iostream"

/*键盘手动输入n个页面*/

voidkeyinput(intn,charp[])/*由键盘输入n个整数放到p[]数组里面*/

{

inti;

for(i=0;i

scanf("%d",&p[i]);

}

voidkeyoutput(intn,charp[])//输出键盘输入的页面

{

inti;

for(i=0;i

printf("%d",p[i]);

printf("\n");

}

print.c

#include"iostream"

#include"t.h"

externcharpblock[pNum];

voidLFU(char*,int);

voidFIFO(char*,int);

voidLRU(char*,int);

voidOptimal(char*,int);

voidPrint();

voidkeyoutput(int,char*);

voiddisplay1()

{

printf("|>-----------------------------------------------------<|\n");

printf("|>----------------

(1)最佳置换算法------------<|\n");

printf("|>----------------

(2)先进先出算法------------<|\n");

printf("|>----------------(3)最近最久未使用算法------------<|\n");

printf("|>----------------(4)最少使用算法------------<|\n");

printf("|>----------------(0)退出------------<|\n");

printf("|>-----------------------------------------------------<|\n");

}

voiddisplay2(intselect,charym[],intn)

{

switch(select)

{

case1:

printf("****************Optimal算法****************\n");

printf("\t置换页面:

");

keyoutput(n,ym);

printf("\n");

Optimal(ym,n);//输出置换后的结果

break;

case2:

printf("****************FIFO算法****************\n");

printf("\t置换页面:

");

keyoutput(n,ym);

printf("\n");

FIFO(ym,n);

break;

case3:

printf("****************LRU算法****************\n");

printf("\t置换页面:

");

keyoutput(n,ym);

printf("\n");

LRU(ym,n);

break;

case4:

printf("****************LFU算法****************\n");

printf("\t置换页面:

");

keyoutput(n,ym);

printf("\n");

LFU(ym,n);

break;

case0:

break;

}

}

voidPrint()//输出环节

{

inti;

for(i=0;i

printf("%3d",pblock[i]);

printf("\n");

}

t.h

#definepNum3//物理块的数目

 

rand.c

#include"iostream"

#include"ctime"

voidsrand();

voidrand(intn,charp[])/*这函数是产生n个1~10的随机数放到p[]数组里面*/

{

intSTART=1;

intEND=10;

intv;

inti;

srand(time(NULL));

printf("产生的随机页面序列为:

\n");

for(i=0;i

{

v=rand()%(END-START+1)+START;

p[i]=v;printf("%d",p[i]);

}

}

main.c

#include

#include

#include

#include

#include"t.h"

//#definepNum3/*系统为进程分配的物理块数*/

intqynum;/*缺页次数*/

charpblock[pNum];

floatqyl;/*缺页率*/

voidrand(intn,char*);

voidkeyinput(int,char*);

voidkeyoutput(int,char*);

voiddisplay1();

voiddisplay2(int,char*,int);

voidPrint();

usingnamespacestd;

intmain()

{

//pNum=3;

qynum=0;

intselect,s1,s2,i;

intn;//页面总数

charym[100];

//system("color1f");

//system("modecon:

cols=140lines=90");//背景颜色

lp3:

cout<

printf("|>-----------------------------------------------------<|\n");

printf("|>----------作者:

郑杰峰学号:

081150023----------<|\n");

printf("|>---------------

(1)自动随机产生--------------<|\n");

printf("|>---------------

(2)键盘输入产生--------------<|\n");

printf("|>---------------(0)退出--------------<|\n");

printf("|>-----------------------------------------------------<|\n");

cout<

printf("请选择产生页面走向序列的方式(选择1或2,选择0退出):

");

scanf("%d",&select);

switch(select)

{

case1:

lp2:

printf("要产生的随机页面总数:

");

scanf("%d",&n);

rand(n,ym);

lp1:

printf("\n你想选择那种算法?

(请选择1~4,选0退出):

\n");

display1();

printf("选:

");

scanf("%d",&s1);

display2(s1,ym,n);

for(i=0;i

pblock[i]=0;

printf("\n\n\n");

printf("\t|>----1.选择其他算法--------<|\n");

printf("\t|>----2.重新产生随机页面----<|\n");

printf("\t|>----3.退到主界面----------<|\n");

printf("\t|>----0.直接退出------------<|\n");

ints;

printf("选:

");

scanf("%d",&s);

switch(s)

{

printf("\n\n\n");

case0:

exit(0);

case1:

gotolp1;break;

case2:

gotolp2;break;//重新产生随机数

case3:

gotolp3;break;//回到主界面

}

break;

case2:

lp22:

printf("输入页面总数:

");

scanf("%d",&n);

keyinput(n,ym);

printf("键盘输入的页面为\n");

keyoutput(n,ym);

lp11:

printf("\n\n你想选择那种算法?

(请选择1~4,选0退出):

\n");

display1();

printf("选:

");

scanf("%d",&s2);

display2(s2,ym,n);

for(i=0;i

pblock[i]=0;//重新把分配的物理块置0

printf("\n\n\n");

printf("\t|>----1.选择其他算法--------<|\n");

printf("\t|>----2.重新输入页面--------<|\n");

printf("\t|>----3.退到主界面----------<|\n");

printf("\t|>----0.直接退出------------<|\n");

printf("选:

");

scanf("%d",&s);

switch(s)

{

printf("\n\n\n");

case0:

exit(0);

case1:

gotolp11;break;

case2:

gotolp22;break;//重新产生随机数

case3:

gotolp3;break;//回到主界面

}

break;

case0:

break;

}

return0;

}

 

lru.c

#include"iostream"

//externintpNum;

#include"t.h"

usingnamespacestd;

externintqynum;

externcharpblock[pNum];

externfloatqyl;

voidPrint();

voidLRU(charym[],intn)/*最近最久未使用算法*/

{

intc=0,i,j,m=0;

qynum=0;

for(j=0;j

{

if(j==0)//对第一个页面处理

{

pblock[0]=ym[j];

Print();

qynum++;

continue;

}

if(j&&qynum<3)

{

for(i=0;i

if(pblock[i]==ym[j])

{

if(qynum==2&&i==0)//缺页为2,再次pblock[0]相同处理

swap(pblock[0],pblock[1]);

Print();

break;

}

if(i==qynum)

{

pblock[qynum]=ym[j];

Print();

qynum++;

}

continue;

}

for(i=0;i

{

if(pblock[i]==ym[j])

{

if(i==0)

{

chartemp;

temp=pblock[0];

pblock[0]=pblock[1];

pblock[1]=pblock[2];

pblock[2]=temp;

}

if(i==1)

swap(pblock[1],pblock[2]);

Print();

break;

}

}

if(i

continue;

else

{

qynum++;

pblock[0]=pblock[1];

pblock[1]=pblock[2];

pblock[2]=ym[j];

Print();

}

}

qyl=(float)qynum/n;

printf("|-----------------------------------------------------|\n");

printf("|页面总数为:

%d\n",n);

printf("缺页次数为:

%d\n",qynum);

printf("缺页率为:

%f\n",qyl);

printf("|-----------------------------------------------------|\n");

}

 

lfu.c

#include"iostream"

//externintpNum;

externintqynum;

#include"t.h"

externcharpblock[3];

externfloatqyl;

voidPrint();

voidLFU(charym[],intn)/*最少使用算法*/

{

inti,t=0,j,m=0;

qynum=0;

intp[3]={0};//记录每一个物理块没被使用的次数

for(j=0;j

{

if(j==0)//对第一个页面处理

{

pblock[0]=ym[j];

Print();

qynum++;

continue;

}

if(j&&qynum<3)

{

for(i=0;i

if(pblock[i]==ym[j])

{

Print();

intk;//让p[i]=0;其他的+1

for(k=0;k

if(k!

=i)

p[k]++;

else

p[k]=0;

break;

}

if(i==qynum)

{

pblock[qynum]=ym[j];

Print();

qynum++;

p[i]=0;

while(i--)//让p[i]=0;其他的+1

p[i]++;

}

continue;

}

for(i=0;i

{

if(pblock[i]==ym[j])

{

Print();

intk;

for(k=0;k

if(k!

=i)

p[k]++;

else

p[k]=0;

break;

}

}

if(i

continue;

else

{

qynum++;

intk,max=0,sign;

for(k=0;k

if(max

{

max=p[k];

sign=k;

}

for(k=0;k

if(k!

=sign)

p[k]++;

else

p[k]=0;

pblock[sign]=ym[j];//替换掉最久没用使用的

Print();

}

}

qyl=(float)qynum/n;

printf("|-----------------------------------------------------|\n");

printf("|页面总数为:

%d\n",n);

printf("缺页次数为:

%d\n",qynum);

printf("缺页率为:

%f\n",qyl);

printf("|-----------------------------------------------------|\n");

}

 

fifo.c

#include"iostream"

//externintpNum;

#include"t.h"

externintqynum;

externcharpblock[pNum];

externfloatqyl;

voidPrint();

voidFIFO(charym[],intn)/*先进先出算法*/

{

inti,j,m=0;

qynum=0;/*防止多次选择时qynum会累加*/

for(j=0;j

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

当前位置:首页 > 医药卫生 > 临床医学

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

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