C语言两个简单的存储器管理的页面置换算法(FIFO and LRU) Page-Replacement Algorithm
来源:互联网 发布:视频转换手绘软件 编辑:程序博客网 时间:2024/06/06 21:40
一个先近先出置换算法,一个最近最久未使用算法,模拟一下过程。
/*页面置换算法,先近先出算法,就是个队列操作
*/
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
//内存可提供的页面的个数
#define MEMERY_PAGE_NUM 3
//FIFO页面置换算法的数据结构
struct FIFOQueue
{
int number; //数据个数
int data[MEMERY_PAGE_NUM]; //数据(页面代号)
}fifo;
//初始化操作
void Init();
//一组对对列的操作
//加入对列
void Add(int pageID);
//在对列中找指定的数据
int Find(int pageID);
//打印操作
void PrintQueue();
int main()
{
Init();
//随机10个数据测试
time_t t;
srand(unsigned(time(&t)));
int i;
int tmp;
for(i = 0;i<10;++i)
{
tmp = rand()%10;
Add(tmp);
PrintQueue();
}
return 0;
}
void Init()
{
fifo.number = 0;
int i;
for(i = 0;i<MEMERY_PAGE_NUM;i++)
{
fifo.data[i] = -1;
}
}
void Add(int pageID)
{
printf("加入页面%d/n",pageID);
if(fifo.number < MEMERY_PAGE_NUM)
{
fifo.data[fifo.number++] = pageID;
}
else
{
//内存中已经有欲找页面时,不用进行页面置换操作。
if(!Find(pageID)) //欲找的页面不存在内存中
{
//数据左移一个单位,右加新数据
int i;
for(i = 0;i<MEMERY_PAGE_NUM-1;i++)
{
fifo.data[i] = fifo.data[i+1];
}
//加入新数据
fifo.data[i] = pageID;
}
}
}
int Find(int pageID)
{
int i;
for(i = 0;i<MEMERY_PAGE_NUM;i++)
{
if(fifo.data[i] == pageID)
{
return 1;
}
}
return 0;
}
void PrintQueue()
{
printf("****************当前内存中的页号**************/n");
int i;
putch('|');
for(i = 0;i<MEMERY_PAGE_NUM;i++)
{
if(fifo.data[i] == -1)
printf(" |");
else
printf("%d |",fifo.data[i]);
}
putch('/n');
}
//最近未使用页面轩换算法
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
//指定内存可容页面数
#define MEMERY_PAGE_NUM 5
//定义一个特殊的队列
struct LRUQueue
{
int number;
int data[MEMERY_PAGE_NUM];
}lru;
//初始化操作
void Init();
//定义一组操作
void Add(int pageID);
int Find(int pageID);
void Update(int pos);
void PrintQueue();
int main()
{
Init();
//随机10个数据测试
time_t t;
srand(unsigned(time(&t)));
int i;
int tmp;
for(i = 0;i<10;++i)
{
tmp = rand()%10;
Add(tmp);
PrintQueue();
}
return 0;
}
void Add(int pageID)
{
printf("加入内存页面%d/n",pageID);
if(lru.number < MEMERY_PAGE_NUM)
{
int pos = Find(pageID);
if(pos)
{
Update(pos);
}
else
{
lru.data[lru.number++] = pageID;
}
}
else
{
int pos = Find(pageID);
if(pos)
{
Update(pos);
}
else
{
//数据左移一个单位,右加新数据
int i;
for(i = 0;i<MEMERY_PAGE_NUM-1;i++)
{
lru.data[i] = lru.data[i+1];
}
//加入新数据
lru.data[i] = pageID;
}
}
}
int Find(int pageID)
{
int i;
for(i = 0;i<MEMERY_PAGE_NUM;i++)
{
if(lru.data[i] == pageID)
{
return i;
}
}
return 0;
}
void Update(int pos)
{
int tmp = lru.data[pos];
int i;
for(i = pos;i < lru.number; ++i)
{
lru.data[i] = lru.data[i+1];
}
lru.data[lru.number-1] = tmp;
}
void Init()
{
lru.number = 0;
int i;
for(i = 0;i<MEMERY_PAGE_NUM;i++)
{
lru.data[i] = -1;
}
}
void PrintQueue()
{
printf("****************当前内存中的页号**************/n");
int i;
putch('|');
for(i = 0;i<MEMERY_PAGE_NUM;i++)
{
if(lru.data[i] == -1)
printf(" |");
else
printf("%d |",lru.data[i]);
}
putch('/n');
}
- C语言两个简单的存储器管理的页面置换算法(FIFO and LRU) Page-Replacement Algorithm
- 分页式存储管理页面置换算法——LRU、FIFO、改进型的CLOCK算法
- 关于FIFO和LRU页面置换算法的实现
- 页面置换算法 FIFO和LRU 及各自的命中率
- 页面置换算法(FIFO,LRU,OPT)c模拟
- C语言实现LRU页面置换算法
- 页面置换算法(FIFO,LRU,最佳,Clock)
- FIFO, LRU, OPT 页面置换算法
- 页面置换算法-FIFO、LRU、OPT
- 页面置换算法总结-FIFO-LRU-OPT
- FIFO,LRU,OPT页面置换算法
- LRU 和 FIFO 页面置换算法
- 页面置换算法 FIFO,OPT,LRU
- 操作系统页面置换算法之FIFO,LRU
- LRU 和 FIFO 页面置换算法
- 操作系统的页面置换C++算法:OPT FIFO LRU CLOCK 计算缺页率
- 【操作系统-存储器管理】简单的clock置换算法的实现
- OS 请求调页存储管理方式的FIFO、LRU、OPT、LFU置换算法模拟
- 开发中常用linux命令--ftp命令
- 在64位Windows上运行32位应用程序[iis]
- 致命的抄袭
- MFC中的 stdafx.h 头文件
- 一个具体而微的Win32程序
- C语言两个简单的存储器管理的页面置换算法(FIFO and LRU) Page-Replacement Algorithm
- 开发中常用linux命令--oracle
- 浅谈eclipse调用tomcat服务的原理
- 开发中常用linux命令--中间件
- AIDL简单入门
- 程序进入点 WinMain
- 别把自己丢了
- 大学的句号
- 59秒关机病毒重启原理分析附解决办法