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

更新时间:2023-10-19 08:05:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

请求分页式存储管理

一、问题描述

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

二、基本要求

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

页号 0 1 2 3 4 5 物理块号 2 1 0 物理块号 0 1 2 状态位 True (在主存) False (在辅存) False (在辅存) False (在辅存) 是否空闲 true true true 系统为进程分配3个物理块(页框),块号分别为0、1、2,页框管理表(空闲块表):

任意输入一个需要访问的指令地址流(例如: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

void main(){ int size; int i,j; int address=0; int select=0; printf(\请输入进程大小\\n\ scanf(\ if(size<=0 || size>20000) { printf(\进程大小超出范围\\n\ exit(0); } size00==0 ? size=size/1000 : size=size/1000+1; for(i=0;i

printf(\输入指令地址\\n\scanf(\

if(address<0 || address>20000) { printf(\地址超出范围\\n\ exit(0); }

address00==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;i3) 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;

开始 输入进程大小,对页表进行初始化 输入要访问的地址 0<=地址<=进程大小 结束 是 计算页号, 查页表 是 该页已是否在主存 页框未满 是 调入该页并修改页表 淘汰一页后调入所需的页,修改页表 打印页表

本文来源:https://www.bwwdw.com/article/afof.html

Top