ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:372.56KB ,
资源ID:4083813      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4083813.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统实验4请求分页存储管理模拟实验.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统实验4请求分页存储管理模拟实验.docx

1、操作系统实验4请求分页存储管理模拟实验操作系统实验4-请求分页存储管理模拟实验实验四请求分页存储管理模拟实验一:实验目的通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求分页存储管理系统的原理和实现技术的理解。二:实验内容假设每个页面可以存放10条指令,分配给进程的存储块数为4。用C语言或Pascal语言模拟一进程的执行过程。设该进程共有320条指令,地址空间为32个页面,运行前所有页面均没有调入内存。模拟运行时,如果所访问的指令已经在内存,则显示其物理地址,并转下一条指令;如果所访问的指令还未装入内存,则发生缺页,此时需要记录缺页产生次数,并将相应页面调入内存,如果4个内存块已满,则

2、需要进行页面置换。最后显示其物理地址,并转下一条指令。在所有指令执行完毕后,显示进程运行过程中的缺页次数和缺页率。页面置换算法:分别采用OPT、FIFO、LRU三种算法。进程中的指令访问次序按如下原则生成:50%的指令是顺序执行的。25%的指令是均匀分布在低地址部分。25%的指令是均匀分布在高地址部分。三:实验类别分页存储管理四:实验类型模拟实验五:主要仪器计算机六:结果OPT:LRU:FIFO:七:程序# include# include# include# define blocknum 4/页面尺寸大小int m; /程序计数器,用来记录按次序执行的指令对应的页号static int n

3、um320; /用来存储320条指令typedef struct BLOCK /声明一种新类型-物理块类型 int pagenum; /页号 int accessed; /访问量,其值表示多久未被访问BLOCK; BLOCK blockblocknum; /定义一大小为8的物理块数组void init() /程序初始化函数,对block初始化 for(int i=0;iblocknum;i+) blocki.pagenum=-1; blocki.accessed=0; m=0; int pageExist(int curpage)/查找物理块中页面是否存在,寻找该页面curpage是否在内存块

4、block中,若在,返回块号 for(int i=0; iblocknum; i+) if(blocki.pagenum = curpage ) return i; /在内存块block中,返回块号 return -1;int findSpace()/查找是否有空闲物理块,寻找空闲块block,返回其块号 for(int i=0;iblocknum;i+) if(blocki.pagenum=-1) return i; /找到了空闲的block,返回块号 return -1;int findReplace()/查找应予置换的页面 int pos = 0; for(int i=0;i block

5、pos.accessed) pos = i; /找到应该置换页面,返回BLOCK中位置 return pos;void display()/显示物理块中的页面号 for(int i=0; iblocknum; i+) if(blocki.pagenum != -1) printf( %02d ,blocki.pagenum); printf(%p |,&blocki.pagenum); printf(n);void randam()/产生320条随机数,显示并存储到num320 int flag=0; printf(请为一进程输入起始执行指令的序号(0320):n); scanf(%d,&m)

6、;/用户决定的起始执行指令 printf(*进程中指令访问次序如下:(由随机数产生)*n); for(int i=0;i320;i+) /进程中的320条指令访问次序的生成 numi=m;/当前执行的指令数, if(flag%2=0) m=+m%320;/顺序执行下一条指令 if(flag=1) m=rand()%(m-1);/通过随机数,跳转到低地址部分0,m-1的一条指令处,设其序号为m1 if(flag=3) m=m+1+(rand()%(320-(m+1);/通过随机数,跳转到高地址部分m1+2,319的一条指令处,设其序号为m2 flag=+flag%4; printf( %03d,

7、numi);/输出格式:3位数 if(i+1)%10=0) /控制换行,每个页面可以存放10条指令,共32个页面 printf(n); void pagestring() /显示调用的页面序列,求出此进程按次序执行的各指令所在的页面号并显示输出 for(int i=0;i320;i+) printf( %02d,numi/10);/输出格式:2位数 if(i+1)%10=0)/控制换行,每个页面可以存放10条指令,共32个页面 printf(n); void OPT() /最佳替换算法 int n=0;/记录缺页次数 int exist,space,position; int curpage;

8、/当前指令的页面号 for(int i=0;i320;i+) m=numi; curpage=m/10; exist=pageExist(curpage); if(exist=-1) /当前指令的页面号不在物理块中 space=findSpace(); if(space != -1) /当前存在空闲的物理块 blockspace.pagenum = curpage; /将此页面调入内存 display();/显示物理块中的页面号 n+;/缺页次数+1 else /当前不存在空闲的物理块,需要进行页面置换 for(int k=0;kblocknum;k+) for(int j=i;j320;j+

9、) /找到在最长(未来)时间内不再被访问的页面 if(blockk.pagenum!= numj/10) blockk.accessed = 1000; /将来不会被访问,设置为一个很大数 else /将来会被访问,访问量设为j blockk.accessed = j; break; position = findReplace();/找到被置换的页面 ,淘汰 blockposition.pagenum = curpage;/ 将新页面调入 display(); n+; /缺页次数+1 printf(缺页次数:%dn,n); printf(缺页率:%f%n,(n/320.0)*100);voi

10、d LRU() /最近最久未使用算法 int n=0;/记录缺页次数 int exist,space,position ; int curpage;/当前指令的页面号 for(int i=0;i320;i+) m=numi; curpage=m/10; exist = pageExist(curpage); if(exist=-1) /当前指令的页面号不在物理块中 space = findSpace(); if(space != -1) /当前存在空闲的物理块 blockspace.pagenum = curpage; /将此页面调入内存 display();/显示物理块中的页面号 n+;/缺

11、页次数+1 else /当前不存在空闲的物理块,需要进行页面置换 position = findReplace(); blockposition.pagenum = curpage; display(); n+; /缺页次数+1 else blockexist.accessed = -1;/恢复存在的并刚访问过的BLOCK中页面accessed为-1 for(int j=0; jblocknum; j+) /其余的accessed+ blockj.accessed+; printf(缺页次数:%dn,n); printf(缺页率:%f%n,(n/320.0)*100);void FIFO()

12、int n=0;/记录缺页次数 int exist,space,position ; int curpage;/当前指令的页面号 int blockpointer=-1; for(int i=0;i320;i+) m=numi; curpage=m/10; exist = pageExist(curpage); if(exist=-1) /当前指令的页面号不在物理块中 space = findSpace(); if(space != -1) /当前存在空闲的物理块 blockpointer+; blockspace.pagenum=curpage; /将此页面调入内存 n+;/缺页次数+1 d

13、isplay();/显示物理块中的页面号 else / 没有空闲物理块,进行置换 position = (+blockpointer)%4; blockposition.pagenum = curpage; /将此页面调入内存 n+; display(); printf(缺页次数:%dn,n); printf(缺页率:%f%n,(n/320.0)*100); void main() int choice; printf(*请求分页存储管理模拟系统*n); randam(); printf(*此进程的页面调用序列如下*n); pagestring(); while(choice != 4) pr

14、intf(*1:OPT 2:LRU 3:FIFO 4:退出*n); printf(请选择一种页面置换算法:); scanf(%d,&choice); init(); switch(choice) case 1: printf(最佳置换算法OPT:n); printf(页面号 物理地址 页面号 物理地址 页面号 物理地址 页面号 物理地址n); OPT(); break; case 2: printf(最近最久未使用置换算法LRU:n); printf(页面号 物理地址 页面号 物理地址 页面号 物理地址 页面号 物理地址n); LRU(); break; case 3: printf(先进先出置换算法FIFO:n); printf(页面号 物理地址 页面号 物理地址 页面号 物理地址 页面号 物理地址n); FIFO(); break;

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

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