资源简介
模拟操作系统中请求调页存储管理方式,中的OPT LRU FIFU 三种算法的实现
代码片段和文件信息
//BY Wutingt
#include
#include
#include
#include
#define Bsize 4
typedef struct BLOCK//声明一种新类型--物理块类型
{
int pagenum;//页号
int accessed;//访问字段,其值表示多久未被访问
}BLOCK;
int pc;//程序计数器,用来记录指令的序号
int n;//缺页计数器,用来记录缺页的次数
static int temp[320];//用来存储320条随机数
BLOCK block[Bsize]; //定义一大小为4的物理块数组
//*************************************************************
void init(); //程序初始化函数
int findExist(int curpage);//查找物理块中是否有该页面
int findSpace();//查找是否有空闲物理块
int findReplace();//查找应予置换的页面
void display();//显示
void suijishu();//产生320条随机数显示并存储到temp[320]
void pagestring();//显示调用的页面队列
void OPT();//OPT算法
void LRU();// LRU算法
void FIFO();//FIFO算法
//*************************************************************
void init()
{
for(int i=0;i {
block[i].pagenum=-1;
block[i].accessed=0;
pc=n=0;
}
}
//-------------------------------------------------------------
int findExist(int curpage)
{
for(int i=0; i {
if(block[i].pagenum == curpage )
return i;//检测到内存中有该页面,返回block中的位置
}
return -1;
}
//-------------------------------------------------------------
int findSpace()
{
for(int i=0; i {
if(block[i].pagenum == -1)
return i;//找到空闲的block,返回block中的位置
}
return -1;
}
//-------------------------------------------------------------
int findReplace()
{
int pos = 0;
for(int i=0; i {
if(block[i].accessed >block[pos].accessed)
pos = i;//找到应予置换页面,返回BLOCK中位置
}
return pos;
}
//-------------------------------------------------------------
void display()
{
for(int i=0; i {
if(block[i].pagenum != -1)
{ printf(“ %02d“block[i].pagenum);}
}
cout< }
//-------------------------------------------------------------
void suijishu()
{ int flag=0;
cin>>pc;
cout<<“******按照要求产生的320个随机数:*******“< for(int i=0;i<320;i++)
{
temp[i]=pc;
if(flag%2==0) pc=++pc%320;
if(flag==1) pc=rand()% (pc-1);
if(flag==3) pc=pc+1+(rand()%(320-(pc+1)));
flag=++flag%4;
printf(“ %03d“temp[i]);
if((i+1)%10==0) cout< }
}
//-------------------------------------------------------------
void pagestring()
{
for(int i=0;i<320;i++)
{
printf(“ %02d“temp[i]/10);
if((i+1)%10==0) cout< }
}
//-------------------------------------------------------------
void OPT()
{
int existspaceposition ;
int curpage;
for(int i=0;i<320;i++)
{
if(i%100==0) getch();
pc=temp[i];
curpage=pc/10;
exist = findExist(curpage);
if(exist==-1)
{
space = findSpace();
if(space != -1)
{
block[space].pagenum = curpage;
display();
n=n+1;
}
else
{
for(int k=0;k {
for(int j=i;j<320;j++)
{
- 上一篇:杨辉三角形(循环队列的应用C语言描述)
- 下一篇:C语言程序设计实现 雪花飘落
相关资源
- 操作系统课设 读写者问题 c语言实现
- ROS操作系统入门讲义
- Linux操作系统下C语言编程从零开始
- 操作系统存储管理实验报告c/c++
- 操作系统课程设计(银行家算法)附
- 现代操作系统第三版高清
- C++操作系统课设-进程管理
- 哲学家进餐问题的c++模拟实现
- 操作系统课程设计(生产者-消费者存
- 操作系统——5个实验.zip
- 操作系统进程管理实验
- 操作系统—页面置换算法C++实现
- 动态分区存储管理的mfc可视化实现
- 操作系统 内存管理 模拟 图形界面
- 银行家算法 mfc 含源代码 界面 操作系
- 操作系统生产者消费者问题MFC动态实
- 操作系统课程设计:Windows 命令接口之
- 操作系统课程大作业-文件管理系统
- C语言实现最低松弛度优先算法源代码
- 操作系统信号量PV经典问题:沉睡的理
- 基于C++的银行家算法模拟实现
- 生产者消费者问题源码-MFC实现-进程模
- 操作系统实验 进程调度 高响应比优先
- 操作系统文件管理C++代码实现
- 嗜睡的理发师进程同步与实现c++
- 安徽大学操作系统实验八基于扫描的
- 安徽大学操作系统实验四主存空间的
- 操作系统——银行家算法
- 操作系统_生产者消费者c++、mfc实现
- 磁盘调度c++模拟实现计算机操作系统
评论
共有 条评论