• 大小: 19KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: C/C++
  • 标签: 页面置换  

资源简介

一个页面置换算法性能比较程序,包括了最佳置换,先进先出,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

评论

共有 条评论