资源简介
模拟操作系统中请求调页存储管理方式,中的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++)
- 操作系统进程调度C++代码实现
- 操作系统请求分页存储器管理C++代码
- 实现动态分区分配模拟程序
- 操作系统银行家算法源码
- 进程的同步-吃水果问题
- 编写并调试一个模拟的进程调度程序
- 东北大学操作系统实验1进程的同步与
- 动态分区分配方式模拟c语言
- 银行家算法C语言实现源文件
- C语言实现Linux文件系统模拟文档内有
- 时间片轮转算法实现
- 进程同步实验代码c语言
- C语言模拟实现操作系统内存的分配与
- vc++实现哲学家吃面问题
- DOS操作系统的C语言源代码
- linux操作系统下C++封装的基础库
- 操作系统 银行家算法 C++
- 操作系统 请求分页式存储管理的地址
- 《操作系统课内实验》文件系统实现
- 操作系统课程大作业-文件管理系统
- 操作系统william stallings答案英文版和中
- 可重定向动态分区分配算法
- 操作系统c语言模拟文件管理系统
- 操作系统 课程设计 C++ spooling技术 源
- 51实时操作系统程序(easy51os)
- 基于Aurix的AUTOSAR多核操作系统的实现
- 《嵌入式实时操作系统uCOS-II》邵贝贝
- 自制操作系统.docx(附源码地址)
- 操作系统原理及设计原则(Operating
评论
共有 条评论