操作系统实验4请求分页存储管理模拟实验Word格式文档下载.docx

上传人:b****2 文档编号:14845676 上传时间:2022-10-25 格式:DOCX 页数:13 大小:372.24KB
下载 相关 举报
操作系统实验4请求分页存储管理模拟实验Word格式文档下载.docx_第1页
第1页 / 共13页
操作系统实验4请求分页存储管理模拟实验Word格式文档下载.docx_第2页
第2页 / 共13页
操作系统实验4请求分页存储管理模拟实验Word格式文档下载.docx_第3页
第3页 / 共13页
操作系统实验4请求分页存储管理模拟实验Word格式文档下载.docx_第4页
第4页 / 共13页
操作系统实验4请求分页存储管理模拟实验Word格式文档下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

操作系统实验4请求分页存储管理模拟实验Word格式文档下载.docx

《操作系统实验4请求分页存储管理模拟实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验4请求分页存储管理模拟实验Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。

操作系统实验4请求分页存储管理模拟实验Word格式文档下载.docx

三:

实验类别

分页存储管理

四:

实验类型

模拟实验

五:

主要仪器

计算机

六:

结果

OPT:

LRU:

 

FIFO:

七:

程序

#include<

stdio.h>

stdlib.h>

conio.h>

#defineblocknum4//页面尺寸大小

intm;

//程序计数器,用来记录按次序执行的指令对应的页号

staticintnum[320];

//用来存储320条指令

typedefstructBLOCK//声明一种新类型--物理块类型

{

intpagenum;

//页号

intaccessed;

//访问量,其值表示多久未被访问

}BLOCK;

BLOCKblock[blocknum];

//定义一大小为8的物理块数组

voidinit()//程序初始化函数,对block初始化

for(inti=0;

i<

blocknum;

i++)

{

block[i].pagenum=-1;

block[i].accessed=0;

m=0;

}

}

intpageExist(intcurpage)//查找物理块中页面是否存在,寻找该页面curpage是否在存块block中,若在,返回块号

{

i<

i++)

if(block[i].pagenum==curpage)

returni;

//在存块block中,返回块号

return-1;

intfindSpace()//查找是否有空闲物理块,寻找空闲块block,返回其块号

i++)

if(block[i].pagenum==-1)

//找到了空闲的block,返回块号

}

intfindReplace()//查找应予置换的页面

intpos=0;

if(block[i].accessed>

block[pos].accessed)

pos=i;

//找到应该置换页面,返回BLOCK中位置

returnpos;

voiddisplay()//显示物理块中的页面号

{

if(block[i].pagenum!

=-1)

{

printf("

%02d"

block[i].pagenum);

%p|"

&

block[i].pagenum);

}

printf("

\n"

);

voidrandam()//产生320条随机数,显示并存储到num[320]

intflag=0;

请为一进程输入起始执行指令的序号(0~320):

scanf("

%d"

m);

//用户决定的起始执行指令

******进程中指令访问次序如下:

(由随机数产生)*******\n"

320;

{//进程中的320条指令访问次序的生成

num[i]=m;

//当前执行的指令数,

if(flag%2==0)

m=++m%320;

//顺序执行下一条指令

if(flag==1)

m=rand()%(m-1);

//通过随机数,跳转到低地址部分[0,m-1]的一条指令处,设其序号为m1

if(flag==3)

m=m+1+(rand()%(320-(m+1)));

//通过随机数,跳转到高地址部分[m1+2,319]的一条指令处,设其序号为m2

flag=++flag%4;

printf("

%03d"

num[i]);

//输出格式:

3位数

if((i+1)%10==0)//控制换行,每个页面可以存放10条指令,共32个页面

voidpagestring()//显示调用的页面序列,求出此进程按次序执行的各指令所在的页面号并显示输出

{

%02d"

num[i]/10);

2位数

if((i+1)%10==0)//控制换行,每个页面可以存放10条指令,共32个页面

voidOPT()//最佳替换算法

intn=0;

//记录缺页次数

intexist,space,position;

intcurpage;

//当前指令的页面号

m=num[i];

curpage=m/10;

exist=pageExist(curpage);

if(exist==-1)

{//当前指令的页面号不在物理块中

space=findSpace();

if(space!

{//当前存在空闲的物理块

block[space].pagenum=curpage;

//将此页面调入存

display();

//显示物理块中的页面号

n++;

//缺页次数+1

}

else

{//当前不存在空闲的物理块,需要进行页面置换

for(intk=0;

k<

k++)

{

for(intj=i;

j<

j++)

{//找到在最长(未来)时间不再被访问的页面

if(block[k].pagenum!

=num[j]/10)

{

block[k].accessed=1000;

}//将来不会被访问,设置为一个很大数

else

{//将来会被访问,访问量设为j

block[k].accessed=j;

break;

}

}

}

position=findReplace();

//找到被置换的页面,淘汰

block[position].pagenum=curpage;

//将新页面调入

//缺页次数+1

缺页次数:

%d\n"

n);

缺页率:

%f%%\n"

(n/320.0)*100);

voidLRU()//最近最久未使用算法

intexist,space,position;

exist=pageExist(curpage);

space=findSpace();

else

block[exist].accessed=-1;

//恢复存在的并刚访问过的BLOCK中页面accessed为-1

for(intj=0;

j<

j++)

{//其余的accessed++

block[j].accessed++;

voidFIFO()

intblockpointer=-1;

blockpointer++;

block[space].pagenum=curpage;

{//没有空闲物理块,进行置换

position=(++blockpointer)%4;

voidmain()

intchoice;

************请求分页存储管理模拟系统**********

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1