资源简介
一个页面置换算法性能比较程序,包括了最佳置换,先进先出,LRU,随机置换,简单时钟和改进时钟六个算法。使用了队列,链表,循环链表等数据结构。随机产生请求页号,计算六种算法的缺页率。
代码片段和文件信息
#include
#include
#include
#define N 500 //定义随机请求数组大小
/*==========================页框结构定义=====================*/
typedef struct PageList //页表
{
int PageID; //页号
int A; //访问位
int M; //修改位
}Elem;
typedef struct LNode
{
Elem data;
LNode *next;
}*linkList;
/*======================LRU链表定义=======================*/
typedef struct LRUList
{
int data;
LRUList *next;
}LRUList;
/*=====================FIFO队列定义=======================*/
typedef struct Node
{
int data;
struct Node *next;
}Node;
typedef struct FIFOqueue
{
struct Node *front;
struct Node *rear;
}FIFOqueue;
/*====================SClock循环链表定义==================*/
typedef struct SNode
{
int data;
struct SNode *next;
}SClockList;
/*===========================所有函数及全局变量声明================================*/
int current; //当前填入的页框数
int miss; //缺页次数
double rate; //缺页率
void Init(); //页表初始化
void Optimal(int []); //最佳置换
void Random(int []); //随机置换算法
void FIFO(int []); //先进先出
void LRU(int []); //LRU
void SClock(int []); //简单clock
void MClock(int []); //改进clock
void InFIFO(FIFOqueueint); //进队列操作
int OutFIFO(FIFOqueue); //出队列操作
void DeleteLRU(LRUList *int); //删除LRU一个节点
void AddLRU(LRUList *int); //在LRU链表头添加节点
void Show(int ); //显示
int Find(int ); //查找页面函数
int max(intintint); //三数找最大函数
int Count(intint[]); //最佳置换计算步数函数
void InsertSclock(SClockList *intint);//在Sclock链表中插入节点
void DeleteSclock(SClockList *int); //删除Sclock链表中一个节点
linkList first;
linkList middle;
linkList last;
LRUList *head;
FIFOqueue *queue;
SClockList *sc;
/*==============================FIFO队列基本操作===========================================*/
void InFIFO(FIFOqueue *queueint a) //入队函数
{
Node *p;
p=(Node *)malloc(sizeof(Node));
p->data=a;
p->next=NULL;
queue->rear->next=p;
queue->rear=p;
}
int OutFIFO(FIFOqueue *queue) //出队函数
{
Node *p;
int a;
if (queue->front==queue->rear)
{}
else
{
p=queue->front->next;
queue->front->next=p->next; //队头元素出队
if (queue->rear==p)
queue->rear=queue->front;
a=p->data;
free(p);
return a;
}
return -1;
}
/*================================LRU链表基本操作=============================================*/
void AddLRU(LRUList *headint a) //添加节点至链表头
{
LRUList *p=NULL*q=NULL;
q=head;
p=(LRUList *)malloc(sizeof(LRUList));
p->next=q->next;
q->next=p;
p->data=a;
}
void DeleteLRU(LRUList *headint m) //删除节点
{
LRUList *p=NULL*q=NULL;
q=head;
p=head->next;
while(p!=NULL)
{
if (p->data!=m)
{
q=q->next;
p=p->next;
}
else
break;
}
q->next=p->next;
}
/*=============================SClock链表基本操作===========================================*/
void InsertSclock(SClockList *scint mint i)
{
SClockL
- 上一篇:阿伦方差的C++ 版本
- 下一篇:学分管理系统c++课程设计
评论
共有 条评论