一、实验内容
1) 通过随机数产生一个指令序列,共320条指令,指令的地址按下述原则生成:
j 50%的指令是顺序执行的;
k 25%的指令是均匀分布在前地址部分。
l 25%的指令是均匀分布在后地址部分。
具体的实施办法是:
j 在[0,319]的指令地址之间随机选取一点m;
k 顺序执行一条指令,即执行地址为m+1的指令;
l 在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m';
m 顺序执行一条指令,其地址为m'+1;
n 在后地址[m'+2,319]中随机选取一条指令并执行;
o 重复上述步骤j——n,直到执行320次指令。
2) 将指令序列变换成页地址流
设:
j 页面大小为1K;
k 用户内存容量为4页到32页;
l 用户虚存容量为32K;
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:
第0条-9条指令为第0页(对应虚存地址为[0,9]);
第10条-第19条指令为第一页(对应虚存地址为[10,19]);
…………
第310条-第319条指令为第31页(对应虚存地址为[310,319]);
按以上方式,用户指令可组成32页。
3) 计算并输出下述各种算法在不同内存容量下的命中率。
j 先进先出的算法(FIFO);
k 最近最少使用算法(LRU);
l 最佳淘汰算法(OPT);
命中率=1-页面失效次数/页地址流长度
在本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。
4)实验提示
关于随机数产生办法,用TC系统提供函数RAND()产生随机数。
二、实验目的
存储管理的主要功能之一是合理地分配空间。请求页史管理是一种常用的虚拟存储管理技术。
本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法
三、实验代码
#include<stdio.h>
#include<stdlib.h>
#define total_page_address 640
#define total_page 32
int page[total_page_address];
void FIFO(int mem_frame);
void LRU(int mem_frame);
void OPT(int mem_frame);
void main()
{
int i,p,fl;
for(i=0;i<total_page_address;i++)
page[i]=-1;
for(i=0;i<total_page_address;i+=2)
{
fl=0;
while(fl==0)
{
p=rand()%total_page_address;
if(page[p]==-1)
fl=1;
}
page[p]=rand()%total_page;
}
p=0;
for(i=0;i<total_page_address;i++)
{
if(page[i]==-1)
page[i]=p;
else
p=page[i];
}
for(i=4;i<=32;i++)
{
printf("%2d page frames ",i);
FIFO(i);
LRU(i);
OPT(i);
printf("\n");
}
}
void FIFO(int mem_frame)
{
int page_message[100],i,ptr=0,j;
int invalid=0,exist;
for(i=0;i<100;i++)
page_message[i]=-1;
for(i=0;i<total_page_address;i++)
{
exist=0;
for(j=0;j<mem_frame;j++)
if(page_message[j]==page[i])
exist=1;
if(exist==0)
{
invalid++;
for(j=0;j<mem_frame;j++)
if(page_message[j]==-1)
{
page_message[j]=page[i];
break;
}
if(j>=mem_frame)
{
page_message[ptr]=page[i];
ptr=(ptr+1) % mem_frame;
}
}
}
printf("FIFO: %6.4f ",1-(float)invalid/total_page_address);
}
void LRU(int mem_frame)
{
int page_message[100],i,ptr=0,j,m,n;
int invalid=0,exist,sit1,sit2;
for(i=0;i<100;i++)
page_message[i]=-1;
for(i=0;i<total_page_address;i++)
{
exist=0;
for(j=0;j<mem_frame;j++)
if(page_message[j]==page[i])
exist=1;
if(exist==0)
{
invalid++;
for(j=0;j<mem_frame;j++)
if(page_message[j]==-1)
{
page_message[j]=page[i];
break;
}
if(j>=mem_frame)
{
exist=3333;
for(m=0;m<mem_frame;m++)
{
for(n=i-1;n>=0;n--)
if(page_message[m]==page[n])
{
sit1=n;
break;
}
if(exist>sit1)
{
exist=sit1;
sit2=m;
}
}
page_message[sit2]=page[i];
}
}
}
printf("LRU: %6.4f ",1-(float)invalid/total_page_address);
}
void OPT(int mem_frame)
{
int page_message[100],i,ptr=0,j,m,n;
int invalid=0,exist,sit1,sit2;
for(i=0;i<100;i++)
page_message[i]=-1;
for(i=0;i<total_page_address;i++)
{
exist=0;
for(j=0;j<mem_frame;j++)
if(page_message[j]==page[i])
exist=1;
if(exist==0)
{
invalid++;
for(j=0;j<mem_frame;j++)
if(page_message[j]==-1)
{
page_message[j]=page[i];
break;
}
if(j>=mem_frame)
{
exist=-1;
for(m=0;m<mem_frame;m++)
{
for(n=i+1;n<total_page_address;n++)
if(page_message[m]==page[n])
{
sit1=n;
break;
}
if(n>=total_page_address)
sit2=m;
else
if(exist<sit1)
{
exist=sit1;
sit2=m;
}
}
page_message[sit2]=page[i];
}
}
}
printf("OPT: %6.4f ",1-(float)invalid/total_page_address);
}
OS.zip_存储管理实验
版权申诉
170 浏览量
2022-09-22
21:16:26
上传
评论
收藏 2KB ZIP 举报
![avatar](https://profile-avatar.csdnimg.cn/271c0f59ce4e427783f4849fb0aeba2e_weixin_42662171.jpg!1)
林当时
- 粉丝: 103
- 资源: 1万+
最新资源
- HC32F460智能台灯上位机
- HC32F460智能台灯 立创EDA专业版工程
- 基于Matlab的2Q-FSK移频键控通信系统仿真
- 基于Node.js+MySQL开发的开源微信小程序商城
- 基于Python实现GNU Radio上的OFDM通信系统仿真及实测
- CnWizards delphi插件 变量高亮 delphi工具
- 用K210进行垃圾识别,通过串口发送不同信号给stm32,控制步进电机进行分类,并且语音播报.zip
- 基于Matlab 实现单径瑞利信道下,交织与卷积编码对误码率影响仿真
- [金融、财务数据] Wrds RepRisk (RRI指标)数据集RepRisk
- 基于PCL的平面点云格网可视化程序代码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)