通过实现页面置换的四种算法,理解虚拟存储器的概念、实现方法,页面分配的总体原则、进程运行时系统是怎样选择换出页面的,并分析四种不同的算法各自的优缺点是哪些。
以下算法都要实现:
- 最佳置换算法(OPT):将以后永不使用的或许是在最长(未来)时间内不再被访问的页面换出。
- 先进先出算法(FIFO):淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
- 最近最久未使用算法(LRU):淘汰最近最久未被使用的页面。
- 最不经常使用算法(LFU)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct item
{
int num; //页号
int time; //LRU算法的等待时间
}Pro;
int pageNum; //系统分配给作业的主存中的页面数
int memoryNum; //可用内存页面数
void print(Pro* page1); //打印当前主存中的页面
int Search(int num1, Pro* memory1);
int main(void)
{
int i;
int curmemory; //调入内存中的页面个数
int missNum; //缺页次数
float missRate; //缺页率
char c; //得到用户的输入字符,来选择相应的置换算法
Pro* page; //作业页面集
Pro* memory; //内存页面集
printf("请输入所需要访问的页面总数:");
scanf_s("%d", &pageNum);
printf("请输入物理块的数量:");
scanf_s("%d", &memoryNum);
page = (Pro*)malloc(sizeof(Pro) * pageNum);
memory = (Pro*)malloc(sizeof(Pro) * memoryNum);
printf("访问的页面号将随机生成,生成的页面号为:");
srand((unsigned int)time(NULL));
for (i = 0; i < pageNum; i++)
{
//scanf_s("%d", &page[i].num);
page[i].num= rand() % (pageNum-1);
printf("%d ",page[i].num);
page[i].time = 0; //等待时间开始默认为0
}
printf("\n"