虚拟页式存储管理(时钟置换策略模拟).docx_第1页
虚拟页式存储管理(时钟置换策略模拟).docx_第2页
虚拟页式存储管理(时钟置换策略模拟).docx_第3页
虚拟页式存储管理(时钟置换策略模拟).docx_第4页
虚拟页式存储管理(时钟置换策略模拟).docx_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统综合实训项目设计文档一、 基本信息项目名称:页式虚拟存储管理系统(时钟置换策略)完成人姓名:学号:完成日期:二、 实验内容与目的(1) 加深理解页式虚拟存储管理的概念和原理。(2) 掌握页式存储管理中存储分配(和回收)方法;(3) 深入了解页式虚拟存储管理中地址重定位(即地址映射)方法。(4) 深入理解段页式虚拟存储管理中缺页中断处理方法三、 主要设计思路和流程图用结构体定义了页框有数据域、状态位、在此页框存放的页的页号,用结构体定义主存(全局变量),包含32个页框,最后用结构体定义页表项,页表用页表项的数组(全局变量)来表示。设置全局变量k用来定位clock策略的指针。用随机数将内存和页表进行初始化,使得内存中有部分页框被占用,部分没有被占用,内存分布情况占用OCCUPY表示,未被占用NULL表示。函数reserch查询页表中页号所对应的页框号。函数find用来查询页表中页号所对应的表项transfrom函数用来生成一定范围的逻辑地址并转换为所对应的物理地址。dispatch函数用来给进程中加载所需要用到的页。并用clock策略替换已满驻留集中的页。最后,用release函数释放进程所占用的空间并将页表和内存改变为初始化的状态。四、 主要数据结构及其说明typedef struct page/内存中的页框int ID;/页框中存放的页的编号int datapageMax;/页中的数据char state;/页框的状态page;typedef struct memory/主存定义page No32;/主存中有32个页memory;typedef struct info/页表项int p;/页表项修改位int ID;/在内存中页的页号int zhenhao;/内存中的页号所在的页框号info;五、 程序运行时的初值和运行结果2六、 源程序并附上注释【可是另一个源程序文件,在此应说明该文件名】#include#include#include#include# define pageMax 2048typedef struct page/内存中的页框int ID;/页框中存放的页的编号int datapageMax;/页中的数据char state;/页框的状态page;typedef struct memory/主存定义page No32;/主存中有32个页memory;typedef struct info/页表项int p;/页表项修改位int ID;/在内存中页的页号int zhenhao;/内存中的页号所在的页框号info;info pagetable8;/8项的页表全局变量memory zhaoke;/声明主存全局变量int k=0;/clock算法所用到的指针全局变量int initi()/初始化内存和页表srand(int)time(NULL);int amount=rand()%24,i;for(i=0;i32;i+)pagetablei.p=0;pagetablei.ID=-1;pagetablei.zhenhao=-1;for(i=0;i32;i+)zhaoke.Noi.state=N;for(i=0;iamount;i+)zhaoke.Norand()%32.state=Y;int print()/打印内存分配情况int i;printf(*1加载进程*2撤销进程*3转换逻辑地址*4退出*n);printf(内存页分配情况:);for(i=0;i32;i+)if(i%4=0)printf(n);printf(n|);if(zhaoke.Noi.state=N) printf(tNULL t|); if(zhaoke.Noi.state=Y) printf( OCCUPYt|);printf(n);int reserch(int yehao)/根据页号查询页表反回所对应的页框号,若没有则返回-1 int i;for(i=0;i0) s1j=buffer%2+0; buffer=buffer/2; j-; while(j=0) s1j=0; j-; s16=0; buffer=pianyiliang;j=10;while(buffer0) s2j=buffer%2+0; buffer=buffer/2; j-; while(j=0) s2j=0; j-; s211=0; printf(生成的逻辑地址为:%s %s(前六位为页号,后十一位为偏移量)所代表的页号为%dn,s1,s2,yehao);if(block!=-1)/内存中有此页号则输出转换后的逻辑地址printf(所输入的逻辑地址对应的物理地址的页框号为%d,偏移量为%dn,block,pianyiliang);printf(修改位t页号t框号n);for(j=0;j8;j+)printf(%dt%dt%dn,pagetablej.p,pagetablej.ID,pagetablej.zhenhao);else/若没有则用clock算法置换出其中的页并输出转换的物理地址 while(1) while(pagetablek.p=1) pagetablek.p-; k=(k+1)%8; pagetablek.p=1; pagetablek.ID=yehao; zhaoke.Nopagetablek.zhenhao.ID=yehao; printf(页表中第%d项被置换,逻辑地址所对应的页框号为%d,偏移量为%dn,k,pagetablek.zhenhao,pianyiliang); k=(k+1)%8; printf(修改位t页号t框号n); for(j=0;j8;j+)printf(%dt%dt%dn,pagetablej.p,pagetablej.ID,pagetablej.zhenhao);break; int find(int yehao)/根据页号查询页表并返回所找页号所对应的表项int i;for(i=0;i8;i+)if(pagetablei.ID=yehao)return i;int dispatch()/加载进程进入内存int a20;int i=0,position=0,j=0;if(pagetablei.ID!=-1) printf(内存中已有一个进程,没有建立多页表无法在内存中装载多个进程!); elsefor(i=0;i20;i+)/用随机数产生内存进程运行所需要的页号 ai=rand()%20; printf(%d ,ai);i=0;while(j8)/向内存中加载进8个页while(zhaoke.Noposition.state=Y)position+;if(reserch(ai)=-1) zhaoke.Noposition.state=Y; zhaoke.Noposition.ID=ai;pagetablej.p=1;pagetablej.ID=ai;pagetablej.zhenhao=position;j+; i+;printf(将进程的页加载到内存:n);printf(修改位t页号t框号n);for(j=0;j8;j+)printf(%dt%dt%dn,pagetablej.p,pagetablej.ID,pagetablej.zhenhao);for(;i20;i+)/后来的页用clock算法置换,若有则修改为置为1,若无找到第一个修改位为零的项换出 if(reserch(ai)=-1) while(1) while(pagetablek.p=1) pagetablek.p-; k=(k+1)%8; pagetablek.p=1;/修改位重新置为一 pagetablek.ID=ai;/页表中的页号置为被换进的页号 zhaoke.Nopagetablek.zhenhao.ID=ai;/内存相应位置上的页号也置为被换进的页号 printf(页表中第%d项被置换n,k); k=(k+1)%8; printf(修改位t页号t框号n); for(j=0;j8;j+)printf(%dt%dt%dn,pagetablej.p,pagetablej.ID,pagetablej.zhenhao);break; else pagetablefind(ai).p=1; printf(修改位t页号t框号n); for(j=0;j8;j+)printf(%dt%dt%dn,pagetablej.p,pagetablej.ID,pagetablej.zhenhao);print();int release()/释放内存中的进程所占的空间 int i; for(i=0;i8;i+) if(pagetablei.ID=-1)若内存中没有进程即页表为初始化状态则无法释放内存 system(CLS); printf(内存中没有进程!); break; zhaoke.Nopagetablei.zhenhao.ID=-1; zhaoke.Nopagetablei.zhenhao.state=N; pagetablei.p=0;pagetablei.ID=-1;printf(释放页框号为:%d的空间n,pagetablei.zhenhao);pagetablei.zhenhao=-1;/将页表和内存重新置为初始化状态 print();int main()cha

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论