资源简介
本实验使用一下算法
使用rand()函数随机产生页面号,用数组装入页面号,模拟页面调入内存中发生页面置换的过程。
整个过程,都是使用数组来实现每个算法,模拟队列,模拟堆栈的功能,实现每一个置换算法。
页面置换算法
最佳置换算法(OPT):选择永不使用或是在最长时间内不再被访问(即距现在最长时间才会被访问)的页面淘汰出内存。用于算法评价参照。
随机置换算法 (S):产生一个取值范围在0和N-1之间的随机数,该随机数即可表示应被淘汰出内存的页面。
先进先出置换算法(FIFO):选择最先进入内存即在内存驻留时间最久的页面换出到外存。
最近最久未使用置换算法(LRU): 以“最近的过去”作为“最近的将来”的近似,选择最近一段时间最长时间未被访问的页面淘汰出内存
Clock置换算法:为进入内存的页面设置一个访问位,当内存中某页被访问,访问位置一,算法在选择一页淘汰时,只需检查访问位,若为0,则直接换出,若为1,置该访问位为0,检测内存中的下一个页面的访问位。
改进型Clock置换算法:
①从查寻指针当前位置起扫描内存分页循环队列,选择A=0且M=0的第一个页面淘汰;若未找到,转②
② 开始第二轮扫描,选择A=0且M=1的第一个页面淘汰,同时将经过的所有页面访问位置0;若不能找到,转①
代码片段和文件信息
#include
#include
using namespace std;
int const InsideCount = 6;//内存中存放的页面数
int count = 0;
int Inside[InsideCount];
int const PageCount =10;//总的页面数
int Page[PageCount];
int insert = 0;//先到先出置换算法fcfo中表示 当内存满的时候,新进入的页号放的位置
int suiji = 0; //随机置换算法randchange 当内存满的时候,新进入的页号放的位置
int state[InsideCount];//clock置换算法中,内存中的每个页面号对应的状态
int state2[InsideCount][2];// 二维数组,第一行第一列为访问位,第一行的第二列为修改位
double lost = 0.0;
bool isInside(int num)//检测页号是否在内存中
{
for(int i = 0; i < InsideCount; i++)
{
if(Inside[i] == Page[num])
{
state[i] = 1;
return true;
}
}
return false;
}
bool change() //判断页面是否已经被修改
{
if((rand()%2+1) == 1 )
{
cout<<“该页面被修改“< return true;
}
else
return false;
}
bool isInside2(int num)//用于改进型clock置换算法,检测页号是否在内存中并把访问位和修改位置1
{
for(int i = 0; i < InsideCount; i++)
{
if(Inside[i] == Page[num])
{
if(change())
{
state2[i][0] = 1;
state2[i][1] = 1;
}
else
{
state2[i][0] = 1;
}
return true;
}
}
return false;
}
int whichpage()//用于改进型clock置换算法,判断内存中第几个需要被置换
{
int j;
for(j=0; j < InsideCount;j++ )
{
if(state2[j][0] == 0&&state2[j][1] == 0)
{
return j;
}
}
for(j=0; j < InsideCount;j++ )
{
if(state2[j][0] == 0&&state2[j][1] == 1)
{
return j;
}
state2[j][0] = 0 ;
}
for(j=0; j < InsideCount;j++ )
{
state2[j][0] = 0 ;
}
return whichpage();
}
void improveclock(int num) //改进型clock置换算法
{
int j;
if(isInside2(num))
{
cout<<“命中“<
for(int i=0 ; i cout<<“ 内存Inside[“< }
else
if(count == InsideCount)
{
lost++;
j = whichpage();
Inside[j] = Page[num];
state2[j][0] = 1;
for(int i=0 ; i cout<<“ 内存Inside[“< }
else
{
//lost++;
Inside[count] = Page[num];
//state2[count][0] = 1;
count++;
for(int i=0 ; i cout<<“ 内存Inside[“< }
}
void clock(int num)//简单Clock置换算法
{
int j;
if(isInside(num))
{
cout<<“命中“<
for(int i=0 ; i cout<<“ 内存Inside[“< }
else
if(count == InsideCount)
{
lost++;
/*for(int j=0; j < InsideCount; j++)
{
for( k = num; k >0;k--) //从当前的页号向前看,发现页号与内存中的页号相同,break ;比较内存中三个页号,看哪一个走的远,用max记录
{
if(Inside[j] == Page[k])
break;
}
if( num - k > max)
{
max = num - k;
maxchange =j;//j 表示把 内存中第j个Inside中的页面从内存拿出,把新的页面放入
}
}*/
for(j=0; j < InsideCount; )
- 上一篇:编译原理消除无用产生式的文法化简
- 下一篇:链表实现多项式加法和乘法C语言实现
相关资源
- 操作系统c语言模拟文件管理系统844
- 操作系统课设 读写者问题 c语言实现
- ROS操作系统入门讲义
- Linux操作系统下C语言编程从零开始
- 操作系统存储管理实验报告c/c++
- 页面置换算法(fifolruopt) C语言编写
- 操作系统课程设计(银行家算法)附
- 现代操作系统第三版高清
- C++操作系统课设-进程管理
- 页面置换算法用MFC实现了
- 哲学家进餐问题的c++模拟实现
- 操作系统课程设计(生产者-消费者存
- 操作系统——5个实验.zip
- 操作系统进程管理实验
- 四种页面置换算法代码
- 操作系统—页面置换算法C++实现
- 操作系统 内存管理 模拟 图形界面
- 银行家算法 mfc 含源代码 界面 操作系
- 操作系统生产者消费者问题MFC动态实
- 操作系统课程设计:Windows 命令接口之
- 操作系统课程大作业-文件管理系统
- C语言实现最低松弛度优先算法源代码
- 操作系统信号量PV经典问题:沉睡的理
- 基于C++的银行家算法模拟实现
- 生产者消费者问题源码-MFC实现-进程模
- 操作系统实验 进程调度 高响应比优先
- 操作系统文件管理C++代码实现
- 嗜睡的理发师进程同步与实现c++
- 安徽大学操作系统实验八基于扫描的
- 安徽大学操作系统实验四主存空间的
评论
共有 条评论