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

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

请求分页式存储管理

为简单起见。页面淘汰算法采用 FIFO 页面淘汰算法, 只将该页在页表中修改状态位。

而不再判断它是否被改写过, 也不

将它

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

系统为进程分配3个物理块(页框),块号分别为0、1、2,页框管理表(空闲块表)

任意输入一个需要访问的指令地址流(例如:

4355,输入负数结束),打印页表情况。

每访问一个地址时, 首先要计算该地址所在的页的页号, 然后查页表,判断该页是否在

主存 ——如果该页已在主存,则打印页表情况;如果该页不在主存且页框未满 (查空闲块表, 找到空闲块),则调入该页并修改页表,打印页表情况;如果该页不在主存且页框已满,则 按FIFO 页面淘汰算法淘汰一页后调入所需的页,修改页表,打印页表情况。

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

三、实验要求

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

1、 实验目的。

2、 实验内容。

3、 程序及运行情况。

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

#in clude

#in clude int P UB[20][3];

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

一、 问题描述

设计一个请求页式存储管理方案, 并且在淘汰一页时, 写回到辅存。

二、 基本要求 页面尺寸1K , 页表结

构如下:

3635、 3642、 1140、 0087、 1700、 5200、

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");

key++;

if(select!=address)

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;

相关文档
最新文档