`

LRU简单实现C++

 
阅读更多
页面置换算法 在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断。当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。下面是LRU简单实现:双向链表,时间复杂度O(n)
#include <iostream>
#include <assert.h>
using namespace std;

typedef struct node{
	int num; //页面编号
	node *next;	//
	node *pre;
}node;

typedef struct lru_queue{
	lru_queue(int n, int max){
		this->n=n;
		this->max=max;
		l=NULL;
	}
	
	int n;	//当前个数 
	int max; //最大内存容量
	node *l; 
}lru_queue;

void print(lru_queue q){
	node *p=q.l;
	while(p!=NULL){
		cout<<p->num<<"\t";
		p=p->next;
	}
	cout<<endl;
}
void print2(node *p){
	while(p!=NULL){
		cout<<p->num<<"\t";
		p=p->pre;
	}
	cout<<endl;
}

//lru队列l最大容量为max, 调入页面i, 返回调出页面 
int insert(lru_queue &q, int i){
	node *p=q.l;
	node *pre=NULL;
	while(p!=NULL && p->num!=i){
		pre=p;
		p=p->next;
	}
	
	int res=-1;
	if(p==NULL){
		if(q.n == q.max){
			pre->pre->next=NULL;
			res=pre->num;
			delete pre;
			
			node *tmp=new node;
			tmp->num=i;
			tmp->pre=NULL;
			tmp->next=q.l;
			
			q.l->pre=tmp;
			q.l=tmp;
		}else{
			node *tmp=new node;
			tmp->num=i;
			tmp->pre=NULL;
			tmp->next=q.l;
			
			if(q.l!=NULL)
				q.l->pre=tmp;
			q.l=tmp;
			q.n++;
		}
	}else{		
		if(p->pre!=NULL){
			p->pre->next=p->next;
		}
		if(p->next!=NULL){
			p->next->pre=p->pre;
		}
		delete p;
		
		node *tmp=new node;
		tmp->num=i;
		tmp->pre=NULL;
		tmp->next=q.l;
		
		q.l->pre=tmp;
		
		q.l=tmp;
	}
	return res;
}

int main(void){
	lru_queue q(0,3);
	print(q);

	assert(-1 == insert(q, 3));
	print(q);

	assert(-1 == insert(q, 5));
	print(q);

	assert(-1 == insert(q, 1));
	print(q);

	assert(-1 == insert(q, 5));
	print(q);

	assert(3 == insert(q, 4));
	print(q);	
	
	assert(-1 == insert(q, 1));
	print(q);
	
	system("pause");
	
	return 0;
}

 

 

分享到:
评论

相关推荐

    LRU算法 C++实现

    以下是一个简单的C++实现概述: ```cpp #include #include class LRUCache { private: int capacity; std::unordered_map, std::list&lt;int&gt;::iterator&gt; cache; std::list&lt;int&gt; lru_list; public: LRUCache...

    LRU Cache的简单C++实现

    什么是 LRU  LRU Cache是一个Cache的置换算法,含义是“近少使用”,把满足“近少使用”的数据从Cache中剔除出去,并且保证Cache中第一个数据是近刚刚访问的,因为这样的数据更有...  由于我只是简单实现一下这个算

    fifo&lru;页面置换算法c++实现

    本项目实现了两种常见的页面置换算法——FIFO(先进先出)和LRU(最近最少使用),并使用C++编程语言进行实现。 **FIFO(先进先出)页面置换算法**: FIFO是最简单的页面置换算法,它的原理是将最早进入内存的页面...

    操作系统页面置换LRU,FIFO,OPT算法实现代码

    例如,LRU的双向链表结构可以保证O(1)的时间复杂度进行插入和删除操作,而FIFO的简单队列则更为直观。至于OPT,虽然理论上无法精确实现,但可以通过一些启发式算法,如Clock算法,来近似实现。 在实际操作系统中,...

    磁盘调度算法C++ 模拟FIFO,OPI和LRU页面置换算法的工作过程

    下面将详细介绍这三种算法的工作原理以及它们在C++编程中的实现。 **先进先出(First In First Out,FIFO)** FIFO是最简单的页面置换算法,其工作原理类似于排队等待服务。当内存中的页面被新的页面替换时,最早...

    基于C++实现LRU算法及其近似算法(操作系统作业)【100012255】

    本项目是基于C++实现LRU算法及其近似算法,旨在让学生深入理解这种算法的原理并进行实践操作。 LRU算法的核心思想是:当内存满时,最近最少使用的页面将被替换出去。具体实现通常采用数据结构如哈希表与双向链表...

    操作系统实验报告 用C++实现页面置换算法,LRU与FCFS

    总结而言,页面置换算法是操作系统中重要的概念,本实验通过C++编程实现和模拟了两种典型的页面置换算法,有助于学生深刻理解虚拟内存管理中请求分页的工作机制,以及不同页面置换算法对系统性能的影响。

    页面替换算法(fifo lru的实现)

    尽管实现简单,但FIFO算法容易受到Belady's异常的影响,即在某些情况下,增加分配的物理页面数量反而会导致更高的缺页率。 **LRU(最近最少使用)页面替换算法** 与FIFO相反,LRU算法假设最近被访问过的页面更可能...

    调度算法中的经典-LRU算法的实现(绝对值得收藏)

    在C语言实现LRU算法时,通常需要维护一个数据结构来记录每个页面的访问信息,如访问时间戳或者访问计数。一个常见的方法是使用链表,每个节点代表一个页面,链表的顺序表示页面的访问顺序。每当有新的页面被访问,...

    完整 LRU 最近最久未使用页面置换算法 操作系统 课程设计

    在本次课程设计中,我们使用 C++ 语言实现了 LRU 算法,并使用 Windows XP 操作系统和 Microsoft Visual C++ 6.0 进行了实验。实验结果表明,LRU 算法可以有效地减少页面置换的次数,提高系统的性能。 在实验中,...

    lru.rar_LRU

    以下是一个简单的LRU缓存实现步骤: 1. 初始化一个固定大小的哈希表和链表。 2. 当添加新元素时,检查哈希表是否已满。如果满,则找到链表尾部的元素(即最旧的元素),将其从哈希表和链表中移除。 3. 将新元素插入...

    LRU.rar_LRU_lru2

    而"新建文件夹"可能包含的是实际的LRU算法实现代码,可能使用了Python、Java、C++等编程语言。这些代码通常会包含以下几个关键部分: 1. 数据结构:LRU通常使用哈希表和双向链表结合的方式来实现。哈希表用于快速...

    操作系统页面置换FIFO,LRU,OPT,CLOCK

    CLOCK算法是LRU的一种简化实现,它通过一个指针遍历页面链表,检查每个页面的使用标志。如果页面未被访问,就直接替换;如果被访问过,则将其移动到链表的末尾并继续检查。CLOCK算法减少了维护每个页面访问信息的...

    FIFO LRU OPT内存模拟实验_c++.rar

    在本实验项目“FIFO LRU OPT内存模拟实验_c++.rar”中,我们将探讨计算机操作系统中的虚拟存储技术,特别是请求页式存储管理及其相关的页面置换算法。这些算法是操作系统核心功能的一部分,对于优化系统资源使用、...

    c++实现 存储器管理

    本项目以C++编程语言为工具,实现了几种经典的页面替换算法,包括FIFO(先进先出)、LRU(最近最少使用)、OPT(最优替换)和LFR(最不经常使用)算法,用于模拟虚拟存储器的工作过程,并最终计算出每种算法的命中率...

    LRU.rar_LRU_clock lru

    相比于LRU,CLOCK算法在实现上更为高效,因为它不需要维护每个页面的全访问历史,而是使用一个简单的引用位来进行判断。 LRU算法的核心是数据结构的实现,通常使用链表和哈希表。链表用于快速地插入和删除页面,而...

    LRU页面置换算法

    LRU 页面置换算法是一种简单而高效的页面置换算法,广泛应用于操作系统中虚拟内存管理。但是,该算法也存在一些缺点,例如可能会出现 Belady 现象,因此在实际应用中需要根据具体情况选择合适的页面置换算法。

    操作系统LRU算法实验报告

    实验步骤中,学生需要编写C++代码来实现这些功能,并在Visual C++ 6.0环境下运行。实验器材要求包括计算机硬件配置和软件环境,确保实验能够顺利进行。 LRU算法的优点在于能够相对较好地预测未来页面访问模式,从而...

    LRU.rar_LRU_LRU页面

    在这个"LRU.rar_LRU_LRU页面"文件中,包含了一个名为"LRU页面置换.cpp"的C++源代码文件,这应该是一个简单的LRU页面置换算法的实现。开发者可以指定页面的个数,并为每个页面设置优先级。程序会模拟内存的运行过程,...

Global site tag (gtag.js) - Google Analytics