欢迎来到天天文库
浏览记录
ID:6634588
大小:109.50 KB
页数:19页
时间:2018-01-20
《基于时钟策略的页面置换》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、《操作系统》综合实训项目设计文档【大纲】(不用打印,提交电子稿即可!)一、基本信息项目名称:虚拟页式存储管理系统完成日期:2017/6/6二、实验内容与目的实验目的:1.加深理解页式虚拟存储管理的概念和原理。2.掌握页式存储管理中存储分配(和回收)方法;3.深入了解页式虚拟存储管理中地址重定位(即地址映射)方法。4.深入理解段页式虚拟存储管理中缺页中断处理方法。实验内容:编写程序完成页式虚拟存储管理存储分配、地址重定位和缺页中断处理。1.为一个进程的内存申请分配内存,当一个进程(完成)结束时回收内存;2.对一个给定逻辑地址,判断其
2、是否缺页,若不不缺页,则映射出其物理地址;3.若缺页则进行缺页中断处理。假定内存64K,内存块(页框)2K,进程逻辑地址空间最大128K。假设进程运行前未预先装入任何页。进程驻留集的大小固定为16K,页面淘汰使用进程驻留集内的CLOCK策略。输出每次存储分配/回收时,内存自由块分布情况、相关进程的页表信息。一、主要设计思路和流程图1.采用链表完成设计,主要设计两个链表,一个单链表,一个循环链表,其中单链表用于存放申请的页面,循环链表用来存放在驻留集中的页面2内存为64K,页面为2K,所以用了6*6的位示图表示内存情况3.申请页面时
3、输入页表信息后,将位示图中对应的位置改为14.地址置换时,将逻辑地址除以页长,用商在页表中找到对应的块号,用余数加上块号乘以页长5.页面置换时,每次换进来的页面将其访问位置为1,下一个节点的时钟位置为1,本节点的时钟位置为0.若是遇到驻留集已经有的页面,则将此页面的访问为置为1.然后页面置换时,从时钟位开始遍历,直到遇到访问位为0的页面,将其置换出来6.撤销一个页面时,将其移出链表,并将位示图中对应的位置置为0二、主要数据结构及其说明typedefstructnode{intpage;intblock;intflag;//是否在内
4、存中intstate;//是否在驻留集中intvisit;//访问位intn;//换进的标zhistructnode*next;}LNode,*LinkList;intg[5][5];//位示图;intClock(LinkListL,LNode*p,LinkListH);//时钟调度LinkListCreate()//创建页面voidadr(LinkListL,LinkListHead)//地址转换LinkListCreateSet()//创建驻留集中的页面voidRecy(LinkListL,inta[5][5])//页面的回收
5、一、程序运行时的初值和运行结果一、源程序并附上注释【可是另一个源程序文件,在此应说明该文件名】#include#include#includetypedefstructnode//定义页表{intpage;intblock;intflag;//是否在内存中intstate;//是否在驻留集中intvisit;//访问位intn;//换进的标zhistructnode*next;}LNode,*LinkList;intg[5][5];//位示图;intClock(LinkLi
6、stL,LNode*p,LinkListH);//时钟算法LinkListCreate()//建立存放页面的链表{LinkListhead;LNode*r,*s;intp,b,f,n,i=0;r=head=(LinkList)malloc(sizeof(LNode));printf("输入申请的页数:");scanf("%d",&n);printf("请分别输入页表的页号及块号(-1表示空):");printf("页号
7、块号");while(i8、(LinkList)malloc(sizeof(LNode));s->page=p;s->block=b;s->state=0;s->flag=1;s->visit=0;s->n=0;r->next=s;r=s;i++;}if(r!=NULL)r->next=NULL;returnhead;}voidPrintfClock(LinkListL)//打印驻留集中的页面{LNode*p;p=L->next;inti=0;printf("页面:");for(i=0;i<8;i++){if(p->page!=-1){printf("%3d9、",p->page);p=p->next;}}printf("访问位:");p=L->next;for(i=0;i<8;i++){if(p->page!=-1){printf("%3d",p->visit);p=p->next;}}printf
8、(LinkList)malloc(sizeof(LNode));s->page=p;s->block=b;s->state=0;s->flag=1;s->visit=0;s->n=0;r->next=s;r=s;i++;}if(r!=NULL)r->next=NULL;returnhead;}voidPrintfClock(LinkListL)//打印驻留集中的页面{LNode*p;p=L->next;inti=0;printf("页面:");for(i=0;i<8;i++){if(p->page!=-1){printf("%3d
9、",p->page);p=p->next;}}printf("访问位:");p=L->next;for(i=0;i<8;i++){if(p->page!=-1){printf("%3d",p->visit);p=p->next;}}printf
此文档下载收益归作者所有