操作系统课程设计Word下载.docx
- 文档编号:16886595
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:27
- 大小:394.58KB
操作系统课程设计Word下载.docx
《操作系统课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
并以最终课程设计成果来证明其独立完成各种实际任务的能力。
从而,反映出理解和运用本课程知识的水平和能力。
3.课程设计报告内容
操作系统是计算机系统中最重要的系统软件,Linux操作系统是源码公开的实用的现代操作系统,利用Linux作为操作系统实验的平台,不但可以理解操作系统原理,同时也可以作为操作系统开发实战的演练。
3.2课程设计的环境
本系统适用于Linux(RedHat)环境下的计算机,内存512M——1G,配备显示屏、键盘和鼠标等。
本系统采用makefile实现模块编程,只能够在Linux环境下或使用Linux下的编程工具实现。
将程序分成10个模块,然后采用所编写的makefile文件指出这些模块的编译过程说明。
主要模块有程序的输入,输出以及各种页面置换算法函数,包过OPT(最佳置换算法),FIFO(先进先出置换算法),LRU(最近最少使用置换算法),LFU(最久最少使用算法),程序结构相当清晰。
t.h文件中主要是一些宏定义。
Print.c主要处理程序所用到的输出,包过用到一些简单的界面,方便用户使用。
首先将户切换到文件Makefile目录下,生成一个可执行文件result,然后执行该可执行文件,进入到主界面,根据命令提示,可以简单方便的实现对内存的模拟管理,并且将管理过程输出,便于用户分析。
本程序有过个.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源程序代码清单
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)
#include"
iostream"
/*键盘手动输入n个页面*/
voidkeyinput(intn,charp[])/*由键盘输入n个整数放到p[]数组里面*/
{
inti;
for(i=0;
i<
n;
i++)
scanf("
%d"
&
p[i]);
}
voidkeyoutput(intn,charp[])//输出键盘输入的页面
printf("
%d"
p[i]);
printf("
\n"
);
t.h"
externcharpblock[pNum];
voidLFU(char*,int);
voidFIFO(char*,int);
voidLRU(char*,int);
voidOptimal(char*,int);
voidPrint();
voidkeyoutput(int,char*);
voiddisplay1()
|>
-----------------------------------------------------<
|\n"
----------------
(1)最佳置换算法------------<
----------------
(2)先进先出算法------------<
----------------(3)最近最久未使用算法------------<
----------------(4)最少使用算法------------<
----------------(0)退出------------<
voiddisplay2(intselect,charym[],intn)
switch(select)
{
case1:
printf("
****************Optimal算法****************\n"
\t置换页面:
"
keyoutput(n,ym);
Optimal(ym,n);
//输出置换后的结果
break;
case2:
****************FIFO算法****************\n"
FIFO(ym,n);
case3:
****************LRU算法****************\n"
LRU(ym,n);
case4:
****************LFU算法****************\n"
LFU(ym,n);
case0:
break;
}
voidPrint()//输出环节
inti;
for(i=0;
pNum;
%3d"
pblock[i]);
printf("
t.h
#definepNum3//物理块的数目
ctime"
voidsrand();
voidrand(intn,charp[])/*这函数是产生n个1~10的随机数放到p[]数组里面*/
{
intSTART=1;
intEND=10;
intv;
srand(time(NULL));
产生的随机页面序列为:
i<
i++)
{
v=rand()%(END-START+1)+START;
p[i]=v;
}
#include<
stdio.h>
ctype.h>
time.h>
iostream>
//#definepNum3/*系统为进程分配的物理块数*/
intqynum;
/*缺页次数*/
charpblock[pNum];
floatqyl;
/*缺页率*/
voidrand(intn,char*);
voidkeyinput(int,char*);
voiddisplay1();
voiddisplay2(int,char*,int);
usingnamespacestd;
intmain()
//pNum=3;
qynum=0;
intselect,s1,s2,i;
intn;
//页面总数
charym[100];
//system("
color1f"
//system("
modecon:
cols=140lines=90"
//背景颜色
lp3:
cout<
<
endl<
endl;
----------作者:
郑杰峰学号:
081150023----------<
---------------
(1)自动随机产生--------------<
---------------
(2)键盘输入产生--------------<
---------------(0)退出--------------<
cout<
请选择产生页面走向序列的方式(选择1或2,选择0退出):
scanf("
select);
switch(select)
case1:
lp2:
要产生的随机页面总数:
"
n);
rand(n,ym);
lp1:
\n你想选择那种算法?
(请选择1~4,选0退出):
display1();
选:
s1);
display2(s1,ym,n);
for(i=0;
i++)//重新把分配的物理块置0
pblock[i]=0;
\n\n\n"
\t|>
----1.选择其他算法--------<
----2.重新产生随机页面----<
----3.退到主界面----------<
----0.直接退出------------<
ints;
选:
s);
switch(s)
case0:
exit(0);
gotolp1;
case2:
gotolp2;
//重新产生随机数
case3:
gotolp3;
//回到主界面
break;
lp22:
输入页面总数:
keyinput(n,ym);
键盘输入的页面为\n"
keyoutput(n,ym);
lp11:
\n\n你想选择那种算法?
s2);
display2(s2,ym,n);
//重新把分配的物理块置0
----2.重新输入页面--------<
选:
gotolp11;
gotolp22;
return0;
//externintpNum;
externintqynum;
externfloatqyl;
voidLRU(charym[],intn)/*最近最久未使用算法*/
intc=0,i,j,m=0;
for(j=0;
j<
j++)
if(j==0)//对第一个页面处理
pblock[0]=ym[j];
Print();
qynum++;
continue;
if(j&
&
qynum<
3)
for(i=0;
qynum;
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];
qynum++;
continue;
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<
pNum)
else
pblock[0]=pblock[1];
pblock[1]=pblock[2];
pblock[2]=ym[j];
qyl=(float)qynum/n;
|-----------------------------------------------------|\n"
|页面总数为:
%d\n"
n);
缺页次数为:
qynum);
缺页率为:
%f\n"
qyl);
externcharpblock[3];
voidLFU(charym[],intn)/*最少使用算法*/
inti,t=0,j,m=0;
intp[3]={0};
//记录每一个物理块没被使用的次数
intk;
//让p[i]=0;
其他的+1
for(k=0;
k<
k++)
if(k!
=i)
p[k]++;
else
p[k]=0;
p[i]=0;
while(i--)//让p[i]=0;
p[i]++;
intk;
for(k=0;
if(k!
p[k]++;
else
p[k]=0;
intk,max=0,sign;
for(k=0;
k++)//找出物理块中最久没有使用的
if(max<
p[k])
max=p[k];
sign=k;
if(k!
=sign)
p[k]++;
else
p[k]=0;
pblock[sign]=ym[j];
//替换掉最久没用使用的
fifo.c
voidFIFO(charym[],intn)/*先进先出算法*/
inti,j,m=0;
/*防止多次选择时qynum会累加*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计