资源简介
本实验使用一下算法
使用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语
- 操作系统 缓冲池 C++
- 操作系统处理机作业-电梯调度模拟
- 操作系统实验 循环首次适应算法C
- 单处理器系统的进程调度+操作系统(
- 一个简单的文件系统操作系统课程设
- 文件系统 操作系统实验 C++
- 操作系统C语言实现银行家算法,键盘
- OS_页面置换算法实验c++程序代码
- 操作系统 课程设计 C++ 读者写着问题
- 操作系统 课程设计 C++ 模拟文件系统
- 分段式管理系统
- 操作系统课程设计 文件管理 C C++
- 操作系统课程设计——多线程同步演
- 文件系统的用户界面[含答案]
- 进程管理和调度的算法实现
- 用C#和C++实现的进程调度算法程序操作
- 操作系统实验--电梯调度 VC++实现
- 基于C++的ATM机操作系统设计
- 操作系统课程设计银行家算法C语言
- 操作系统3种页面置换算法 C++实现
- 操作系统中的文件管理模拟
- 操作系统CPU调度算法之最短剩余时间
- 操作系统设备管理模拟 银行家算法
- c++操作系统进程管理模拟
- 操作系统进程调度算法——短作业优
- 多级反馈队列调度算法C语言源代码
- 操作系统课程设计报告模拟文件系统
- 操作系统仿真之内存替换算法
- C++制作加密解密系统
评论
共有 条评论