欢迎来到天天文库
浏览记录
ID:58648315
大小:101.00 KB
页数:8页
时间:2020-10-16
《请求分页式存储管理程序.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、操作系统实验报告——请求页式存储管理算法班级:计1009学号:姓名:*******二零一二年十二月一、实验目的 通过一个简单的内存页面调度算法的实现,理解内存页面的机理。掌握几种页面置换算法的实现方法,通过实验比较各种调度算法的优劣。二、实验内容[问题描述]设计一个请求页式存储管理方案,为简单起见。页面淘汰算法采用FIFO页面淘汰算法,并且在淘汰一页时,只将该页在页表中修改状态位。而不再判断它是否被改写过,也不将它写回到辅存。[基本要求]页面尺寸1K,输入进程大小(例如5300bytes),对页表进行初始化,页表结构:
2、页号物理块号状态位02True(在主存)112False(在辅存)304False(在辅存)5False(在辅存)系统为进程分配3个物理块(页框),块号分别为0、1、2,页框管理表(空闲块表):物理块号是否空闲0true1true2true任意输入一个需要访问的指令地址流(例如:3635、3642、1140、0087、1700、5200、4355,输入负数结束),打印页表情况。每访问一个地址时,首先要计算该地址所在的页的页号,然后查页表,判断该页是否在主存——如果该页已在主存,则打印页表情况;如果该页不在主存且页框未满,则
3、调入该页并修改页表,打印页表情况;如果该页不在主存且页框已满,则按FIFO页面淘汰算法淘汰一页后调入所需的页,修改页表,打印页表情况;存储管理算法的流程图如下:打印页表淘汰一页后调入所需的页,修改页表调入该页并修改页表页框未满该页已是否在主存计算页号,查页表结束0<=地址<=进程大小输入要访问的地址开始输入进程大小,对页表进行初始化是是是三、程序及运行情况#include#include#definek1024//页面尺寸#defineX10#defineY10intH;//用于接收进
4、程的大小inth;typedefstructform{intpage;intpno;intstate;}Form;typedefstructPform{intpno;intstate;}PForm;Formform[X];PFormpform[Y];voidinitForm()//初始化{inti;printf("请输入进程的大小:");scanf("%d",&H);h=H/k;h--;if(h%k!=0){h=h+1;}for(i=0;i<=h;i++)//初始化页表{form[i].page=i;form[i].pno
5、=-1;//页表内物理块为-1,表示为分配物理块form[i].state=0;//页表初始状态为0,表示页表不在内存}for(i=0;i<3;i++)//初始化页框{pform[i].pno=i;pform[i].state=0;//页框初始状态为0,表示物理块空闲}}voidinput(){intb,i,n;intm=0,p=0;printf("请输入要访问的地址:");scanf("%d",&b);if((b<0)
6、
7、(b>H)){exit(0);}else{i=b/k;//求要访问的地址为第几页if(b%k==0)
8、i--;//因为页号从0开始printf("该地址所在页号为:%d",i);if(form[i].state==0)//若该页不在主存{while(m<3)//查看物理块是否有空闲{if(pform[m].state==1){m++;p++;}else{pform[m].state=1;form[i].pno=pform[m].pno;form[i].state=1;break;}}if(p==3)//若页框已满,则回收最早拥有物理块的页号所分配的物理块{for(m=0;m9、=0){form[m].pno=-1;form[m].state=0;}if(form[m].pno==1)form[m].pno=0;if(form[m].pno==2)form[m].pno=1;form[i].pno=2;form[i].state=1;}}}printf("页号物理块状态位");for(m=0;m<=h;m++){printf("%d%d%d",m,form[m].pno,form[m].state);}printf("是否继续访问?1、是2、否");scanf("%d",&n);if(10、n==1){input();}else{exit(0);}}}voidmain(){inti;initForm();printf("页表初始化:");printf("页号物理块状态位");for(i=0;i<=h;i++){printf("%d%d%d",form[i].page,form[
9、=0){form[m].pno=-1;form[m].state=0;}if(form[m].pno==1)form[m].pno=0;if(form[m].pno==2)form[m].pno=1;form[i].pno=2;form[i].state=1;}}}printf("页号物理块状态位");for(m=0;m<=h;m++){printf("%d%d%d",m,form[m].pno,form[m].state);}printf("是否继续访问?1、是2、否");scanf("%d",&n);if(
10、n==1){input();}else{exit(0);}}}voidmain(){inti;initForm();printf("页表初始化:");printf("页号物理块状态位");for(i=0;i<=h;i++){printf("%d%d%d",form[i].page,form[
此文档下载收益归作者所有