《操作系统课程设计说明书 --基于Linux的模拟存储器管理的设计与实现.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计说明书 --基于Linux的模拟存储器管理的设计与实现.docx(19页珍藏版)》请在第一文库网上搜索。
1、操作系统课程设计说明书学院、系:软件学院专业:软件工程设计题目:基于1in11X的模拟存储器管理的设计与实现1需求分析a)设计目的存储器管理是操作系统的重要功能之一,其中的页面置换算法是虚拟存储管理实现的关键,通过本次实验理解内存页面调度的机制,在模拟实现FIF0、1RU、NRU和OPT几种经典页面置换算法的基础上,比较各种置换算法的效率和优缺点,从而了解虚拟存储实现的过程。b)设计内容和要求1)在内存开辟两块存储空间,分别模拟内存和外存,大小分别是8M,25Mo2)给定三个文件A,B,C,大小分别是4.2M,8M和9.8M。模拟其并发执行过程。3)每个进程在内存中固定分配4个页面,缺页时分别
2、采用四种置换算法(FIFO,1RU,NUR,OPT)进行置换。4)假定页面大小为512K,进程执行时页面调度顺序要求手动输入。5)可以在屏幕上输出各进程页面置换过程(以图表形式描述)以及每种页面置换算法的缺页率和置换率,并对比各算法的优劣。6)要求在1inUX平台下,使用C语言进行开发。2 总体设计a)程序的主框架采用数组的方式来实现,每个进程在内存里分配的4个页面就是是个一个数组的4个数,然后用二维数组是,第一维表示这个数组中包含的数,而第二维则是实现了一个计数的功能,每个算法中的作用基本相同。b)输入的序列也作为一个数组来实现的(由于不会使用动态的数组,在使用的时候还需要输入序列的个数,然
3、后系统会分别提示输入序列中的第一个数)c)置换算法FIFO算法是先调入内存的页,先被置换出去。我们用数组P来代表内存中的4个块。输入的序列存放在一个数组XUIie口中,当执行一个页面的时候,先检测此页面是否在内存中,假如存在,给出提示;假如不在,将4个页面依次的调入内存中或者将4个块依次置换。定义了一个用于的计数的变量X,用x=(x+1)%4用实现4个内存块的循环置换,实现了FIFO算法。1RU算法是最佳最久未使用,即前边最近未被使用的页面优先被置换出去。我们用了二维p口2来代表内存中的4个块,p0代表页面,p1代表一个计数,4个内存块的计数初始为0,1,2,3,当执行一个页面的时候,就将代表
4、那个页面的计数总体加1,以此来标记最近最久未使用的页面OPT算法是最佳转换算法,即向后看,最将要使用的页面优先被转换出去。我们用数组P2来代表内存中的4个块,P0代表页面,P1存在两种状态0,1,初始为0,当要置换页面的时候检测后面的页面序列,当检测到其中的一个页面的时候就将那个页面的块的计数变为1直到检测出其中的三个页面或者将整个页面序列都检测完,就将最前边计数为0的页面置换出去。NUR算法。我们用数组P2来代表内存中的4个块,P0代表页面,P1存在两种状态0,1初始为0,当执行完一个一个页面后,就将此页面块的计数变为1,每执行4个页面就将其初始化为0,当置换页面时就将最前边计数为0的页面置
5、换。3 .详细设计FIFO置换算法模块voidFRun(intn,intX)(f1oatqueye1v,zhihuan1v;inti,j,x;intP4=0,0,0,0);intqueye-0;intzhihuan=O;x=0;for(i=0;in;i+)(if(PO=Xi)11(P1=xi)(P2=Xi)(P3=Xi)Printf(执行的刎号页面在内存中n,Xi);e1seif(Px=O)(Printf(将第刎号页面调入内存”,Xi);queye+;e1se(Printf(将%d号页面置换为%d号页面”,Px,Xi);zhihuan+;queye+;Px=Xi;x=(x+1)%4;print
6、f%d%d%d%dP0,P1,P2,P3);)PrinIf(本次执行过程缺页次数为%d,置换次数为%dn”,queye,zhihuan);queye1v=(f1oat)queyen;zhihuan1v=(f1oat)zhihuan/n;Prin1f(本次执行的缺页率为%f,置换率为%fn”,queye1v,zhihuan1v);)NUR置换算法模块voidNRun(intn,intX)(inti,j,cunzai;f1oatzhihuan1v,queye1v;intmange=0;intqueye=0;intzhihuan-0;inta-0;intP42=0,0),0,0,0,0),0,0;f
7、or(i=0;in;i+)(cunzai=0;if(i%4=0)P01=0;P11=0;P=0;P31=0;for(j=0;j4;j+)(if(PjO=Xi)(Printf(要执行的%d号页面在内存中n”,Xi);PjU=1;cunzai=1;)if(cunzai=0)(if(mange4)(Printf(将%d号页面调入内存中,Xi);Pmange0=Xi;Pmange1=1;mange+;queye+;)e1se(if(PO1=O)a=0;e1seif(P11=O)a=1e1seif(P21=0)a=2;e1se(if(P31=0)a=3;)Printf(将%d页置换为刎页”,Pa0,Xi
8、);Pa0=Xi;Pa1=1;queye+;ZhihUan+;)printf(*%d%d%d%dn*,P00,P10,P20,P30);)printf(“本次执行过程缺页次数为%d,置换次数为%dn”,queye,zhihuan);queye1v=(f1oat)queyen;zhihuan1v=(f1oat)zhihuann;printf(本次执行的缺页率为%f,置换率为%fn”,queye1v,zhihuan1v);)1RU置换算法模块void1Run(intn,intX)(f1oatqueye1v,zhihuan1v;itj,i,q;intqueye=O;intzhihuan=O;intP
9、42=0,0),0,1,0,2,0,3;intm=3;intcunzai;for(i=0;in;i+)(cunzai=0;for(j=0;j4;j+)(if(PjO=Xi)(Printf(要执行的外d号页面在内存中n”,Xi);m+;Pj1=m;cunzai=1;)if(cunzai=0)(q=Bijiao(P01,P11,P21,P31);if(Pq1=4)Printf(将%d号页面置换为%d号页面”,Pq0,Xi);queye+;zhihuan+;)PqO=Xi;m+;Pq1=m;printf%d%d%d%dn*,P00,P10,P20,P30);Printf(“本次执行缺页次数为%d,置
10、换次数为%dn”,queye,zhihuan);queye1v=(f1oat)queyen;zhihuan1v=(f1oat)zhihuann;printf(“本次执行的缺页率为%f,置换率为%fn”,queye1v,zhihuan1v);)intBijiao(inta,intb,intc,intd)(intm,n,x;if(ab)m=b;e1sem=a;if(cd)n=d;e1sen=c;if(mn)x=n;e1sex=m;if(x=a)return0;if(x=b)return1;if(x=c)return2;if(xd)return3;)OPT置换算法模块voidORun(intn,in
11、tX)f1oatqueye1v,zhihuan1v;inti,j,cunzai;intshu;intmange=O;inta=O;intqueye=O;intzhihan-O;intP42=0,0,0,0,0,0,0,0);for(i=0;in;i+)(P01=0;P11=0;P21=0;P31=0;shu=0;cunzai-0;if(POO=Xi)11(P1O=Xi)(P2O=Xi)I(P3O=Xi)(Printf(要执行的%d号页面在内存中n”,Xi);cunzai=1;if(cunzai=0)if(mange4)(Printf(将%d号页面调入内存中,Xi);PmangeO=Xi;man
12、ge+;queye+;j=i+1;whi1e(shu3)if(PO1=O)if(POO=Xj)PO1=bshuJif(P11=O)if(P1O=Xj)P11=bshuJif(P21=O)if(P20=Xj)P21=1jshu+jif(P=O)if(P30=Xj)P31=1;shu+;j+;if(j=n)break;if(PO1=O)a=0e1seif(P11=O)e1seif(P21=0)a=2;e1seif(P31=0)a=3;Pa0,Xi);PrinIf(将%d号页面置换为%d号页面PaO=Xi;queye+;zhihuan+;)printf(*%d%d%d%dn,P00,P10,P20,P30);)printf(本次执行缺页次数为%d,置换次数为%dn”,queye,zhihuan);queye1v=(f1oat)queyen;zhihuan1v=(f1oat)zhihuann;Printf(本次执行的缺页率为%f,置换率为%fn”,queye1v,zhihuan1v);主模块voidmain()(intg,x,z,Acaozuo,Bcaozuo,Ccaozuo,Ashu,Bshu,Cshu;intAxu1ie100,Bxu