操作系统:LRU置换算法实现

  1. 最近最久未使用(LRU)置换算法原理 就是:当需要淘汰某页面时,选择当前一段时间内最久未使用过的页先淘汰, 即淘汰距当前最远的上次使用的页。
    例如: 分配给该进程的页块数为3,一个20长的页面访问序列为 :12560,36536,56042,70435, 则缺页次数和缺页率按下图给出:

  2. 假定分配给该进程的页块数为3,页面访问序 列长度为20。本实验可以采用数组结构实现, 首先随机产生页面序列,当发生请求调页时, 若内存已满,则需要利用LRU算法,将当前一段时间内最久未使用过的页替换出去。

数据结构:
struct memory //表示每一个页块
{
int num;
int time;
}page[100];
void print()//打印
int find() //找到最久未置换或者空页块
void run() //时间加1
void change(memory page[],int xulie[]) //页块分配

具体代码:

#include <iostream>
#include <stdlib.h>
using namespace std;
struct memory
{
	int num;
	int time;
}page[100];

int count=0;
int n, m;

void print()//打印 
{
	cout<<"页块号     内容     时间"<<endl;
	for(int i=0;i<n;i++)
	{
		cout<<i+1<<"         "<<page[i].num<<"          "<<page[i].time<<endl;
	}
} 
int find() //找到最久未置换或者空页块 
{
	int nu=0; 
	for(int i=0;i<n;i++)
	{
		if(page[i].num==-1) 
		{
			nu=i;
			return nu;
			break;
		}
	}
	int max=0,maxnum=0;
	for(int i=0;i<n;i++)
	{
		if(page[i].time>max)
		{
			max=page[i].time;
			maxnum=i;
		}
	}
	return maxnum;
} 
void run() //时间加1 
{
	for(int i=0;i<n;i++) 
	{
		if(page[i].num!=-1) page[i].time++;
	}
}
void change(memory page[],int xulie[]) //页块分配 
{
	for(int i=0;i<m;i++)
	{
		bool fa=true;
		for(int j=0;j<n;j++) //命中 
		{
			if(page[j].num==xulie[i])
			{
				fa=false;
				page[j].time=-1;
				run();
				print();
				break;
			} 
		}
		if(fa==true) //不命中 
		{
			count++;
			int j=find();
			page[j].num=xulie[i];
			page[j].time=-1;
			run();
			print();
		}
	}
}
int main()
{
	int xulie[100];
	cout << "分配给进程的页块数为:";
	cin >> n;
	cout<< "请输入页面访问序列长度:";
	cin >> m;
	for(int i=0;i<n;i++) //页块初始化 
	{
		page[i].num=-1;
		page[i].time=0;
	}
	cout<<"页面访问序列为";
	for (int i = 0; i < m; i++)	
	{
		xulie[i] = rand()%10;
		cout<<xulie[i]<<" ";
	}
	cout<<endl;
	change(page,xulie);
	double queyelv=count*1.000/m;
	cout<<"缺页次数:"<<count<<endl<<"缺页率:"<<queyelv; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值