1、【实验目的】
加深对页面置换算法的理解。
掌握几种页面置换算法的实现方法。
通过实验比较各种置换算法的优劣。
2、【实验内容】
1.参考用C语言实现的先进先出算法FIFO的代码,实现最佳置换算法OPT和最近最少使用算法LRU。使得随机给出一个页面执行序列,计算不同置换算法的缺页数,缺页率和命中率。
3、【实验步骤】
3.1数据结构
typedef struct item{};
void print(Pro *page1); //打印当前主存中的页面
int Search(int num1, Pro *memory1); //寻找内存块与 num1相同的块号
int main();//主函数
3.3实验代码
#include <stdio.h>
#include <stdlib.h>
typedef struct item
{
int num; //页号
int time; //等待时间,LRU算法会用到这个属性
}Pro;
int pageNum; //系统分配给作业的主存中的页面数
int memoryNum; //可用内存页面数
void print(Pro *page1); //打印当前主存中的页面
int search(int num1, Pro *memory1); //在页面集memory1中查找num1,如果找到,返回其在memory1中的下标,否则返回-1
int main(void)
{
int i;
int curmemory; //调入内存中的页面个数
int missNum; //缺页次数
float missRate; //缺页率
char c; //得到用户的输入字符,来选择相应的置换算法
Pro *page; //作业页面集
Pro *memory; //内存页面集
printf("输入系统分配给作业的主存中的页面数:");
scanf("%d", &pageNum);
printf("输入内存页面数:");
scanf("%d", &memoryNum);
page = (Pro*)malloc(sizeof(Pro)*pageNum);
memory = (Pro*)malloc(sizeof(Pro)*memoryNum);
for (i = 0; i<pageNum; i++)
{
printf("第 %d 个页面号为:", i);
scanf("%d", &page[i].num);
page[i].time = 0; //等待时间开始默认为0
}
do {
for (i = 0; i<memoryNum; i++) //初始化内存中页面