分页系统模拟实验.docx
- 文档编号:11205459
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:27
- 大小:363.56KB
分页系统模拟实验.docx
《分页系统模拟实验.docx》由会员分享,可在线阅读,更多相关《分页系统模拟实验.docx(27页珍藏版)》请在冰豆网上搜索。
分页系统模拟实验
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2013年秋季学期
操作系统原理课程设计
题目:
分页系统模拟实验
专业班级:
计算机科学与技术基地班
姓名:
孙要全
学号:
11240311
指导教师:
王旭阳
成绩:
_______________
目录
前言3
摘要4
1设计思想5
2相关的各模块的伪码算法6
3函数的调用关系图12
4调试结果14
总结17
参考文献18
致谢19
附件Ⅰ源程序代码20
前言
分页式虚拟存储系统将作业信息的副本存放在磁盘中,不把作业的程序和数据全部装入主存,仅装入立即使用的页面,在执行过程中访问到不在主存的页面时,产生缺页中断,再把它们动态地装入。
虚拟存储的基本思想是基于程序的局部性原理,仅把目前需要的部分程序加载到内存,其余暂时不用的程序及数据还保留在辅存中。
在进程运行过程中,如果所要执行的程序不在内存,系统要将要执行的程序段自动调入内存。
此时如果内存已满,则要通过置换操作将暂时不用的程序段先调出到辅存,然后将所需的程序段调入内存,继续执行该进程。
虚拟存储器的引入,实际上是利用了存储管理中逻辑地址空间和物理地址空间的关系,将计算机的内存和辅存结合起来,使得用户感觉具有大容量的内存,虚拟内存在将逻辑地址转换成物理地址时,必须通过一个内存管理单元MMU(MemoryManagementUnit)来完成。
存储管理一直是操作系统中的重要组成部分,因为冯·诺依曼体系结构就是建立在存储程序概念上的,访问存储器的操作占CPU时间的70%左右。
计算机系统中的存储器一般分为主存储器(简称主存、内存)和辅助存储器(简称辅存)。
由于CPU只能直接与内存进行通信,因此计算机系统的程序以及与该程序相关的数据,只有被装入到内存中才能有效地执行。
计算机系统能否高效地管理内存空间,不仅直接反映存储器的利用率,还会影响整个操作系统的性能。
摘要
请求分页虚拟存储系统时间作业信息的副本存放在磁盘这一类辅助存储器中当作业被调度投入运行时,并不把作业的程序和数据全部装入主存,而仅仅装入立即使用的那些页面,至少要将作业的第一页信息装入主存,在执行过程中访问到不在主存的页面时,再把它们动态装入。
分页式虚拟存储管理是请求分页,当需要执行某条指令或使用某个数据,而发现它们不再主存时,产生一个缺页中断,系统从辅存中把该指令或数据所在的页面调入内存。
关键词:
分页虚拟辅存缺页中断
1设计思想
1.1算法思想
1)先进先出法(FirstInFirstOut):
该算法总是淘汰最先进入内存的页面,既选择在内存中驻留时间最久的页面予以淘汰。
在该算法的模拟过程中,每当页面需要被置换进入内存时,最先进入内存的内容们都依次向底移一位,需要访问的内容存入数组0号单元,即最顶部,这时缺页数加1;当不需要进行页面置换,即所需访问的内容在内存中时,不需要操作,继续读下一条指令。
这样就实现了总是淘汰最先进入内存的页面,选择了在内存中驻留时间最久的页面予以淘汰。
(2)最近最久未使用(LeastRecentlyUsed):
该算法将过去最长一段时间里不曾被使用的页面置换掉。
在该算法的模拟过程中,每当页面需要被置换进入内存时,最先进入内存的内容们都依次向底移一位,需要访问的内容存入数组0号单元,即最顶部,这时缺页数加1;当不需要进行页面置换,即所需访问的内容在内存中时,将要访问的指令移到内存顶部,其他指令依次向下移一位,这样就把最久不用的指令沉到了底部,有必要时淘汰,即实现了总是淘汰最近最久未使用的指令。
1.2.功能设计:
(1)voidchangeaddr(structPagep[],intlogaddr)的功能
实现模拟请求分页虚拟存储管理中的硬件地址变化过程。
(2)chushihua()函数的功能:
先由Srand()和Rand()函数定义和随机产生指令序列,然后将指令序列变换成相应的页地址流存入地址流数组里。
(3)FIFO()的功能:
实现FIFO算法,淘汰最先进入内存的页面并根据缺页数算出命中率。
(4)LRU()的功能:
实现LRU算法,淘汰最近最久未使用的页面并根据缺页数算出命中率。
2相关的各模块的伪码算法
2.1voidchangeaddr(structPagep[],intlogaddr)//地址变换
logaddr比上64为页面号码记为j
logaddr对64取余为页面号码记为k
for{
if(找到对应的页面号码)
if(在内存中)
{
物理地址=对应页面的主存号*64+k
输出物理地址
输出此页面的对应信息
}
}
Else{
cout<<"该页不在主存,产生缺页中断"< } 详细设计如下: voidchangeaddr(structPagep[],intlogaddr)//地址变换 { intj=logaddr/64;//对应的块号 intk=logaddr%64;//对应的偏移量 intflag=0; intaddr; for(inti=0;i<8;i++) { if(p[i].pno==j)//找到对应的页号 { if(p[i].flag==1)//页面标志为1 { addr=p[i].cno*64+k; cout<<"物理地址为: "< cout<<"详细信息: "<<"\t页面号: "< 号: "< "< flag=1; break; } } } if(flag==0) cout<<"该页不在主存,产生缺页中断"< } 2.2voidchushihua()//初始化函数 { intt; srand(time(0));//随机产生指令序列 p=12+rand()%32; cout<<"地址流序列: "; cout< for(inti=0;i { t=1+rand()%9; yemianliu[i]=t;//将随机产生的指令数存入页面流 } for(i=p-1;i>=0;i--) { cout< } cout< } 2.3FIFO算法实现时: 如M=4时 进入一个页面时 If(此页面在内存中) 则fifo[32]不变 else { For循环 把fifo[k]=fifo[k-1]; 最后fifo[0]=yemianliu[e] } 详细设计如下: voidFIFO(intn)//FIFO算法,n是M的值 { inti; intq=p; inte; intqueye=0; intflag; intfifo[32]={0}; while(q--) { flag=0; e=q; for(i=0;i { if(fifo[i]==yemianliu[q]) { flag=1; break; } } if(flag==0) { intm=n-1; intk=m; while(m--) { fifo[k]=fifo[k-1]; k--; } fifo[0]=yemianliu[e]; queye++; } } cout<<"M="< "<<(1-((double)queye/p))*100<<"%"<<""; } 2.4LRU算法实现时: 如M=4时 进入一个页面时 If(此页面在内存中) 则flag=1,记录位置k else flag=0; if(flag=1) { 把k前面的依次后移一位,即: lru[k]=lru[k-1]; 最后lru[0]=yemianliu[e] } If(flag==0) { For循环 {把lru[k]=fifo[k-1];} 最后lru[0]=yemianliu[e] } 详细设计如下: voidLRU(intn)//LRU算法 { inti; intq=p; inte; intqueye=0; intflag; intflag1; inty; intlru[32]={0}; while(q--) { flag=0; e=q; for(i=0;i { if(lru[i]==yemianliu[q]) { flag=1; flag1=i; break; } } if(flag==0) { intm=n-1; intk=m; while(m--) { lru[k]=lru[k-1]; k--; } lru[0]=yemianliu[e]; queye++; } elseif(flag==1) { y=flag1; while(y--) { lru[flag1]=lru[flag1-1]; flag1--; } lru[0]=yemianliu[e]; } } cout<<"M="< "<<(1-((double)queye/p))*100<<"%"< } 3函数的调用关系图 1.FIFO()函数流程图; 2. 2.LRU()函数流程图: 4调试结果 图4-1主菜单 图4-2地址转换菜单 图4-3页面置换菜单 图4-4页面置换菜单 图4-5地址转换 图4-6地址转换 图4-7页面置换 图4-9页面置换 图4-10页面置换 图4-11页面置换 总结 在两周的课程设计中,我针对页面模拟的有关资料进行了调查,分析。 针对题目的要求我把任务先分成两大模块: 一是地址转换,二是页面置换。 地址转换: 输入一个逻辑地址,求出此地址所在的页面号码以及偏移量。 查表看其是否在表中,若在则有找到其内存地址并由内存地址和偏移量计算出物理地址,最后输出其物理地址以及页面信息。 页面置换我采用FIFO和LRU算法。 首先随即产生地址序列,然后在不同的M值下用FIFO算法和LRU算法。 FIFO算法总是淘汰最先进入内存的页面,既选择在内存中驻留时间最久的页面予以淘汰。 在该算法的模拟过程中,每当页面需要被置换进入内存时,最先进入内存的内容们都依次向底移一位,需要访问的内容存入数组0号单元,即最顶部,这时缺页数加1;当不需要进行页面置换,即所需访问的内容在内存中时,不需要操作,继续读下一条指令。 这样就实现了总是淘汰最先进入内存的页面,选择了在内存中驻留时间最久的页面予以淘汰。 LRU算法将过去最长一段时间里不曾被使用的页面置换掉。 在该算法的模拟过程中,每当页面需要被置换进入内存时,最先进入内存的内容们都依次向底移一位,需要访问的内容存入数组0号单元,即最顶部,这时缺页数加1;当不需要进行页面置换,即所需访问的内容在内存中时,将要访问的指令移到内存顶部,其他指令依次向下移一位,这样就把最久不用的指令沉到了底部,有必要时淘汰,即实现了总是淘汰最近最久未使用的指令 操作系统的发展是永无止境的,在前进的过程中必将有更多的知识需要我去学习与研究,并能将其应用到实际的问题解决之中。 由于分页系统模拟的复杂以及自己能力的有限,在论述中不可能面面俱到,同时也由于我知识水平有限,文中的不足和错误在所难免,希望老师多多指点和更正。 本课程设计是在指导教师王旭阳老师的指导下完成的,在此对老师表示感谢。 参考文献 1.汤子瀛,哲凤屏.《计算机操作系统》.西安电子科技大学学出版社. 2.王清,李光明.《计算机操作系统》.冶金工业出版社. 3.孙钟秀等.操作系统教程.高等教育出版社 4.曾明. Linux操作系统应用教程.陕西科学技术出版社. 5.张丽芬,刘利雄.《操作系统实验教程》.清华大学出版社. 6.孟静, 操作系统教程--原理和实例分析.高等教育出版社 7.周长林,计算机操作系统教程.高等教育出版社 8.张尧学,计算机操作系统教程,清华大学出版社 9.任满杰,操作系统原理实用教程,电子工业出版社 致谢 本次课程设计的顺利完成离不开老师和同学们的帮助,在我遇到疑问的时候老师及时详细的给我解答,让我学到了很多。 在此感谢操作系统王旭阳老师,您以往的基础课程为我的这次课设打下了基础。 再次感谢操作系统课程设计指导老师王旭阳老师两周来的辛勤指导,使我的这次课设能够顺利完成。 感谢同学们几天来的帮助,在他们无私的帮助下我的任务才能如此顺利的完成。 附件Ⅰ源程序代码 #include #include #include #include #include usingnamespacestd; voidchushihua();//初始化函数 voidFIFO(intn);//FIFO算法,n是M的值 voidLRU(intn);//LRU算法 voidymzh(); voidyemianzhihuan(); voidchangeaddr(structPagep[],intlogaddr); voiddizhizhuanhuan(); voidmenu(); intyemianliu[32]={0};//全局变量数组,地址流 intp; structPage{ intpno;//页号 intflag;//标志位 intcno;//主存号 intmodf;//修改位 intaddr;//外存地址 }Page; //全局变量p是一共有多少地址流 voidchushihua()//初始化函数 { intt; srand(time(0));//随机产生指令序列 p=12+rand()%32; cout<<"地址流序列: "; cout< for(inti=0;i { t=1+rand()%9; yemianliu[i]=t;//将随机产生的指令数存入页面流 } for(i=p-1;i>=0;i--) { cout< } cout< } voidFIFO(intn)//FIFO算法,n是M的值 { cout<<"M="< cout< inti; intj; intq=p; inte; intqueye=0; intflag; intfifo[32]={0}; while(q--) { flag=0; e=q; for(i=0;i { if(fifo[i]==yemianliu[q]) { flag=1; for(j=0;j =0;j++) cout< cout< break; } } if(flag==0) { intm=n-1; intk=m; while(m--) { fifo[k]=fifo[k-1]; k--; } fifo[0]=yemianliu[e]; for(j=0;j =0;j++) cout< cout< queye++; } } cout<<"M="< "<<(1-((double)queye/p))*100<<"%"<<""; cout< cout< } voidLRU(intn)//LRU算法 { cout<<"M="< cout< inti; intj; intq=p; inte; intqueye=0; intflag; intflag1; inty; intlru[32]={0}; while(q--) { flag=0; e=q; for(i=0;i { if(lru[i]==yemianliu[q]) { flag=1; flag1=i; break; } } if(flag==0) { intm=n-1; intk=m; while(m--) { lru[k]=lru[k-1]; k--; } lru[0]=yemianliu[e]; for(j=0;j =0;j++) cout< cout< queye++; } elseif(flag==1) { y=flag1; while(y--) { lru[flag1]=lru[flag1-1]; flag1--; } lru[0]=yemianliu[e]; for(j=0;j =0;j++) cout< cout< } } cout<<"M="< "<<(1-((double)queye/p))*100<<"%"< } voidymzh() { chushihua(); for(inti=3;i<5;i++) { FIFO(i); LRU(i); } yemianzhihuan(); } voidyemianzhihuan() { inta; cout<<"----------欢迎使用页面置换模拟实验系统---------"< cout<<"----------\t\t1.进入页面置换算法\t\t---------"< cout<<"----------\t\t2.返回上一级\t\t---------"< cout<<"----------欢迎使用页面置换模拟实验系统---------"< cout< "; cin>>a; switch(a) { case1: ymzh(); break; case2: menu(); break; default: cout<<"输入有误,请重新输入! "< break; } } voidchangeaddr(structPagep[],intlogaddr){//地址变换 intj=logaddr/64;//对应的块号 intk=logaddr%64;//对应的偏移量 intflag=0; intaddr; for(inti=0;i<8;i++) { if(p[i].pno==j)//找到对应的页号 { if(p[i].flag==1)//页面标志为1 { addr=p[i].cno*64+k; cout<<"物理地址为: "< cout<<"详细信息: "<<"\t页面号: "< "< "< flag=1; break; } } } if(flag==0) cout<<"该页不在主存,产生缺页中断"< } voiddizhizhuanhuan() { inta; intins;//指令逻辑地址 structPagep[8]; p[0].pno=0;p[0].flag=1;p[0].cno=5;p[0].modf=1;p[0].addr=011; p[1].pno=1;p[1].flag=1;p[1].cno=8;p[1].modf=1;p[1].addr=012; p[2].pno=2;p[2].flag=1;p[2].cno=9;p[2].modf=0;p[2].addr=013; p[3].pno=3;p[3].flag=1;p[3].cno=10;p[3].modf=0;p[3].addr=015; p[4].pno=4;p[4].flag=0;p[4].addr=017; p[5].pno=5;p[5].flag=0;p[5].addr=025; p[6].pno=6;p[6].flag=0;p[6].addr=212; p[7].pno=7;p[7].flag=0;p[7].addr=213; cout<<"----------欢迎使用硬件地址变换过程模拟系统---------"< cout<<"----------\t\t1.输入指令\t\t---------"< cout<<"----------\t\t2.返回上一级\t\t---------"< cout<<"----------欢迎使用硬件地址变换过程模拟系统---------"< cout< "; cin>>a; while(a) { cout<<"页号"<<"标记位"<<"外存地址"<<"主存号"< for(inti=0;i<8;i++) { cout<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分页 系统 模拟 实验