操作系统实验3--请求分页式存储管理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

请求分页式存储管理

一、问题描述

设计一个请求页式存储管理方案,为简单起见。页面淘汰算法采用FIFO页面淘汰算法,并且在淘汰一页时,只将该页在页表中修改状态位。而不再判断它是否被改写过,也不将它写回到辅存。

二、基本要求

页面尺寸1K,输入进程大小(例如5300bytes),对页表进行初始化

页表结构如下:

系统为进程分配:

任意输入一个需要访问的指令地址流(例如:3635、3642、1140、0087、1700、5200、4355,输入负数结束),打印页表情况。

每访问一个地址时,首先要计算该地址所在的页的页号,然后查页表,判断该页是否在主存——如果该页已在主存,则打印页表情况;如果该页不在主存且页框未满(查空闲块表,找到空闲块),则调入该页并修改页表,打印页表情况;如果该页不在主存且页框已满,则按FIFO页面淘汰算法淘汰一页后调入所需的页,修改页表,打印页表情况。

存储管理算法的流程图见下页。

三、实验要求

完成实验内容并写出实验报告,报告应具有以下内容:

1、实验目的。

2、实验内容。

3、程序及运行情况。

4、实验过程中出现的问题及解决方法。

#include

#include

int PUB[20][3];

int ABC[3][2]={{0,1},{1,1},{2,1}};//物理块

int key=0;

void output(int size){

//打印

int i,j;

printf("页号\t\t物理块号\t\t状态位\n\n");

for(i=0;i

{

printf(" %d\t\t%d\t\t\t%d\n\n",PUB[i][0],PUB[i][1],PUB[i][2]);

}

printf("物理块号\t\t是否空闲\n\n");

for(i=0;i<3;i++)

{

printf(" %d\t\t\t%d\n\n",ABC[i][0],ABC[i][1]);

}

}

void main(){

int size;

int i,j;

int address=0;

int select=0;

printf("请输入进程大小\n");

scanf("%d",&size);

if(size<=0 || size>20000)

{

printf("进程大小超出范围\n");

exit(0);

}

size%1000==0 ? size=size/1000 : size=size/1000+1;

for(i=0;i

{

PUB[i][0]=i; //页号

PUB[i][1]=0; //物理块号

PUB[i][2]=0; //状态位

}

output(size);

while(1)

{

printf("输入指令地址\n");

scanf("%d",&address);

if(address<0 || address>20000)

{

printf("地址超出范围\n");

exit(0);

}

address%1000==0 ? address=address/1000 : address=address/1000;

if(PUB[address][2]==0) //不在主存

{

if(ABC[2][1]==0) //满了

{

printf("满了\n");

if(select!=address) key++;

for(i=0;i

{

if(PUB[i][1]==key)

{

PUB[i][1]=0;

PUB[i][2]=0;

}

}

PUB[address][1]=key;

PUB[address][2]=1;

key++;

if(key>3) key=1;

}

if(ABC[2][1]==1) //没满

{

printf("没满\n");

for(i=0;i<3;i++)

{

if(ABC[i][1]==1)

{

ABC[i][1]=0;

PUB[address][1]=i+1;

PUB[address][2]=1;

break;

}

}

}

output(size);

}

else

{

printf("该页已在内存\n");

output(size);

}

select=address;

}

}

相关文档
最新文档