1、操作系统课程设计目 录1. 课程设计的目的 12 课程设计的要求 13.课程设计报告内容 131 前言: 132 课程设计的环境 1321 硬件环境: 1322 软件环境: 133 系统技术分析: 1331算法设计: 1332用户文档: 2333技术文档: 234 系统流程图及各模块 235源程序代码清单 3makefile: 3keyio: 4print.c 4t.h 5rand.c 5main.c 6lru.c 8lfu.c 9fifo.c 11opt.c 123.6实验结果及调试 144.总结 17参考文献: 18模拟内存管理1. 课程设计的目的课程设计为学生提供了一个既动手又动脑,独立
2、实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。2 课程设计的要求认真完成本课程设计的全部过程。并以最终课程设计成果来证明其独立完成各种实际任务的能力。从而,反映出理解和运用本课程知识的水平和能力。3.课程设计报告内容31 前言:操作系统是计算机系统中最重要的系统软件,Linux操作系统是源码公开的实用的现代操作系统,利用Linux作为操作系统实验的平台,不但可以理解操作系统原理,同时也可以作为操作系统开发实战的演练。32 课程设计的环境321 硬件环境:本系统适用于Linux(RedHat)环境下的计算机,内存512M1
3、G,配备显示屏、键盘和鼠标等。322 软件环境: 本系统采用makefile实现模块编程,只能够在Linux环境下或使用Linux下的编程工具实现。33 系统技术分析:331算法设计: 将程序分成10个模块,然后采用所编写的makefile文件指出这些模块的编译过程说明。主要模块有程序的输入,输出以及各种页面置换算法函数,包过OPT(最佳置换算法),FIFO(先进先出置换算法),LRU(最近最少使用置换算法),LFU(最久最少使用算法),程序结构相当清晰。t.h文件中主要是一些宏定义。Print.c主要处理程序所用到的输出,包过用到一些简单的界面,方便用户使用。332用户文档:首先将户切换到文
4、件Makefile目录下,生成一个可执行文件result,然后执行该可执行文件,进入到主界面,根据命令提示,可以简单方便的实现对内存的模拟管理,并且将管理过程输出,便于用户分析。333技术文档:本程序有过个.c文件,每个模块对应于一个.c文件,便于调试。而且每个.c文件里面对代码都有详细的说明,便于阅读。在所有的.c文件中都尽量的使得程序简洁,达到了程序设计的要求,即用最为便捷的方法,用最简单的代码达到最好的效果。一些具体的内容查看源代码。34 系统流程图及各模块 模块说明:产生随机页面:用rand.c文件来实现,void rand(int n,char p)这函数是产生n个110的随机数放到
5、p数组里面手动输入页面:用keyio.c文件来实现,void keyinput(int n,char p)由键盘输入n个整数放到p数组里面,void keyoutput(int n,char p),输出刚刚由键盘输入输入的页面,用于确认是否有输入错误OPT: void Optimal(char ym,int n)最佳置换算法,用opt.c实现FIFO:void FIFO(char ym,int n)先进先出算法,用fifo.c实现LRU: void LRU(char ym,int n)最近最久未使用算法,用lru.c实现LFU: void LFU(char ym,int n)最少使用算法,用l
6、fu.c实现结果输出:用print.c来实现,void display1()实现算法的选择,void display2(int select,char ym,int n)输出显示结果的框架,并调用print(),void Print(),用于显示所选择算法的置换结果Makefil:链接程序,并指明编译的过程35源程序代码清单makefile:obj=main.o rand.o keyio.o print.o lfu.o lru.o opt.o fifo.o result:$(obj) g+ $(obj) -o $main.o:main.c g+ -c main.cfifo.o:fifo.c t
7、.h g+ -c fifo.ckeyio.o:keyio.c g+ -c keyio.clfu.o:lfu.c g+ -c lfu.clru.o:lru.c g+ -c lru.copt.o:opt.c g+ -c opt.cprint.o:print.c g+ -c print.crand.o:rand.c g+ -c rand.c.PHONY:cleanclean: rm -f $(obj)keyio:#includeiostream/*键盘手动输入n个页面*/void keyinput(int n,char p)/*由键盘输入n个整数放到p数组里面*/ int i; for(i=0;in
8、;i+) scanf(%d,&pi);void keyoutput(int n,char p)/输出键盘输入的页面 int i; for(i=0;i- (1) 最佳置换算法 - (2) 先进先出算法 - (3) 最近最久未使用算法 - (4) 最少使用算法 - (0) 退出 -|n);void display2(int select,char ym,int n) switch(select) case 1: printf( *Optimal算法*n); printf(t置换页面:); keyoutput(n,ym); printf(n); Optimal(ym,n);/输出置换后的结果 bre
9、ak; case 2: printf( *F I F O算法*n); printf(t置换页面:); keyoutput(n,ym); printf(n); FIFO(ym,n); break; case 3: printf( *L R U算法*n); printf(t置换页面:); keyoutput(n,ym); printf(n); LRU(ym,n); break; case 4: printf( *L F U算法*n); printf(t置换页面:); keyoutput(n,ym); printf(n); LFU(ym,n); break; case 0:break; void P
10、rint()/输出环节int i;for(i=0;ipNum;i+) printf( %3d ,pblocki);printf(n);t.h#define pNum 3 /物理块的数目rand.c#includeiostream#includectimevoid srand();void rand(int n,char p)/*这函数是产生n个110的随机数放到p数组里面*/ int START=1; int END=10; int v; int i; srand(time(NULL); printf(产生的随机页面序列为:n); for(i=0; in; i+) v=rand()%(END-
11、START+1)+START; pi=v;printf(%d ,pi); main.c#include#include#include #include#includet.h/#define pNum 3 /*系统为进程分配的物理块数*/int qynum;/*缺页次数*/char pblockpNum;float qyl;/*缺页率*/void rand(int n,char *);void keyinput(int ,char*);void keyoutput(int ,char*);void display1();void display2(int ,char*,int );void P
12、rint();using namespace std;int main() / pNum=3; qynum=0; int select,s1,s2,i; int n;/页面总数 char ym100;/ system(color 1f); / system(mode con: cols=140 lines=90);/背景颜色lp3:coutendlendlendl-作者:郑杰峰 学号:081150023- (1) 自动随机产生 - (2) 键盘输入产生 - (0) 退 出 -|n); coutendlendlendlendl; printf(请选择产生页面走向序列的方式(选择1或2,选择0退出
13、):); scanf(%d,&select); switch(select) case 1: lp2: printf(要产生的随机页面总数: ); scanf(%d,&n); rand(n,ym); lp1: printf(n你想选择那种算法?(请选择14,选0退出):n); display1(); printf(选: ); scanf(%d,&s1); display2(s1,ym,n); for(i=0;i-1.选择其他算法-2.重新产生随机页面-3.退到主界面-0.直接退出-|n); int s; printf(选 : ); scanf(%d,&s); switch(s) printf(
14、nnn); case 0: exit(0); case 1: goto lp1;break; case 2: goto lp2;break;/重新产生随机数 case 3: goto lp3;break;/回到主界面 break; case 2: lp22: printf(输入页面总数 : ); scanf(%d,&n); keyinput(n,ym); printf(键盘输入的页面为n); keyoutput(n,ym);lp11: printf(nn你想选择那种算法?(请选择14,选0退出):n); display1(); printf(选:); scanf(%d,&s2); displa
15、y2(s2,ym,n); for(i=0;i-1.选择其他算法-2.重新输入页面-3.退到主界面-0.直接退出-|n); printf(选 : ); scanf(%d,&s); switch(s) printf(nnn); case 0: exit(0); case 1: goto lp11;break; case 2: goto lp22;break;/重新产生随机数 case 3: goto lp3;break;/回到主界面 break; case 0:break; return 0;lru.c#includeiostream/extern int pNum;#includet.husin
16、g namespace std;extern int qynum;extern char pblockpNum;extern float qyl;void Print();void LRU(char ym,int n)/*最近最久未使用算法*/ int c=0,i,j,m=0; qynum=0; for(j=0;jn;j+) if(j=0) /对第一个页面处理 pblock0=ymj; Print(); qynum+; continue; if(j&qynum3) for(i=0;iqynum;i+) if(pblocki=ymj) if(qynum=2&i=0)/缺页为2,再次pblock0
17、相同处理 swap(pblock0,pblock1); Print(); break; if(i=qynum) pblockqynum=ymj; Print(); qynum+; continue; for(i=0;ipNum;i+) if(pblocki=ymj) if(i=0) char temp; temp=pblock0; pblock0=pblock1; pblock1=pblock2; pblock2=temp; if(i=1) swap(pblock1,pblock2); Print(); break; if(ipNum) continue; else qynum+; pbloc
18、k0=pblock1; pblock1=pblock2; pblock2=ymj; Print(); qyl=(float)qynum/n; printf(|-|n); printf(| 页面总数为:%dn,n); printf( 缺页次数为:%dn,qynum); printf( 缺页率为:%fn,qyl); printf(|-|n);lfu.c#includeiostream/extern int pNum;extern int qynum;#includet.hextern char pblock3;extern float qyl;void Print();void LFU(char
19、ym,int n)/*最少使用算法*/ int i,t=0,j,m=0; qynum=0; int p3=0;/记录每一个物理块没被使用的次数 for(j=0;jn;j+) if(j=0) /对第一个页面处理 pblock0=ymj; Print(); qynum+; continue; if(j&qynum3) for(i=0;iqynum;i+) if(pblocki=ymj) Print(); int k; /让pi=0;其他的+1 for(k=0;kqynum;k+) if(k!=i) pk+; else pk=0; break; if(i=qynum) pblockqynum=ymj
20、; Print(); qynum+; pi=0; while(i-)/让pi=0;其他的+1 pi+; continue; for(i=0;ipNum;i+) if(pblocki=ymj) Print(); int k; for(k=0;kpNum;k+) if(k!=i) pk+; else pk=0; break; if(ipNum) continue; else qynum+; int k,max=0,sign; for(k=0;kpNum;k+) /找出物理块中最久没有使用的 if(maxpk) max=pk; sign=k; for(k=0;kpNum;k+) if(k!=sign
21、) pk+; else pk=0; pblocksign=ymj;/替换掉最久没用使用的 Print(); qyl=(float)qynum/n; printf(|-|n); printf(| 页面总数为:%dn,n); printf( 缺页次数为:%dn,qynum); printf( 缺页率为:%fn,qyl); printf(|-|n);fifo.c#includeiostream/extern int pNum;#includet.hextern int qynum;extern char pblockpNum;extern float qyl;void Print();void FIFO(char ym,int n)/*先进先出算法*/ int i,j,m=0; qynum=0;/*防止多次选择时qynum会累加*/ for(j=0;jn;j+)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1