//LRU algorithm
//author:chillyCreator
//in the page_information, the bigger number means the newer page.
//if the number in the page_information is -1, it means no page is in this position.
#include<iostream>
using namespace std;
bool isNotIn(int p_page_num);
bool isNotFull(int& position);
void insert(int p_page_num,int position);
int delOldPage();
const int MAX_INT = 32767;
int process_num;//the total number of process pages
int page_size;//the total number of pages
int page_num=0;//the number of page which in the page array
int miss=0;//
int* page_information;//the page information array
int* page;//the page array
int old=0;//how old is a page?
int main()
{
cout << "how many pages of processes ?"<<endl;
cin >> process_num ;
cout << "how many pages in the memory?"<<endl;
cin >> page_size;
page_information = new int[page_size];
page = new int[page_size];
int i;
for(i=0; i<page_size; i++)
{
page[i] = -1;
page_information[i] = -1;
}
int user_test;
cout << "input 1 is user test, 2 is auto test"<<endl;
cin >> user_test;
switch(user_test)
{
case 1:
for(i=0; i < process_num; i++)
{
int process_page_num;
cin >> process_page_num;
cout <<"input process page num is :" <<process_page_num<<endl;
if(isNotIn(process_page_num))
{
miss++;
int temp_position;
if(isNotFull(temp_position))
{
insert(process_page_num,temp_position);
page_num++;
}
else
{
temp_position = delOldPage();
insert(process_page_num,temp_position);
}
}
}
break;
default:
for(i=0; i < process_num; i++)
{
int process_page_num = rand();
cout << process_page_num<<endl;
if(isNotIn(process_page_num))
{
miss++;
int temp_position;
if(isNotFull(temp_position))
{
insert(process_page_num,temp_position);
page_num++;
}
else
{
temp_position = delOldPage();
insert(process_page_num,temp_position);
}
}
}
break;
}
cout <<"miss is " <<miss << "/t the total process num is "<<process_num<<endl;
cout << endl;
cout <<"the miss percentage is miss/process_num = "<<double(miss)/process_num<<endl;
return 0;
}
//the process page is in the page array?;
bool isNotIn(int p_page_num)
{
for(int i=0; i<page_size; i++)
{
if(page[i]==p_page_num)
return false;
}
return true;
}
//the page array is full or not.
//and return the empty position
bool isNotFull(int& position)
{
if(page_size <= page_num)
return false;
int i;
for(i=0; i<page_size; i++)
{
if(page_information[i]==-1)
break;
}
position = i;
return true;
}
//insert a process page to the page in an empty position.
//and the function protect the primite: old from flowover error.
void insert(int p_page_num,int position)
{
old++;
if(old==MAX_INT)
{
old = 1;
for(int i=0; i<page_size; i++)
{
if(page_information[i]!=-1)
page_information[i] = old;
}
}
old++;
page[position] = p_page_num;
page_information[position] = old;
}
int delOldPage()
{
int i;
int min=page_information[0],min_i=0;
for(i=1; i<page_size; i++)
{
if(min > page_information[i])
{
min = page_information[i];
min_i = i;
}
}
return min_i;
}
分享到:
相关推荐
在C语言中实现LRU算法,需要理解数据结构和算法的基础知识,以及如何在C语言中有效地管理内存。 首先,LRU算法的核心是数据结构的选择。通常使用双向链表来存储数据,因为双向链表允许我们快速地插入和删除元素,...
在操作系统中,当内存不足以容纳所有活动页面时,LRU算法会选择最近最久未使用的页面进行淘汰,以腾出空间加载新的页面。 在Java中实现LRU算法,通常会使用数据结构如HashMap或LinkedHashMap来存储页面及其访问信息...
LRU (Least Recently Used) 算法是一种常用的页面替换策略,用于管理计算机内存中的页面。在虚拟存储系统中,由于物理内存有限,当所有页面无法同时驻留在内存时,LRU 算法则用于决定将哪个页面换出到磁盘。它的基本...
LRU算法是一种常见的虚拟内存管理策略,它根据页面的使用历史来决定替换哪个页面。当内存中的页面被新页面占用时,LRU算法会优先淘汰最近最久未使用的页面。 实验内容包括实现LRU算法的两种不同变体:计数器实现和...
LRU算法就是在这个过程中发挥作用,选择最近最久未使用的页面优先进行替换。 LRU算法的基本思想是:当内存满时,新进来的页面会替换掉最近最少使用的页面。这里的“最近”是指最近一次被访问的时间,“最少使用”是...
操作系统之LRU算法(Java) LRU(Least Recently Used,最近最少使用)算法是一种常用的页面置换算法,用于操作系统中管理内存页面。该算法的基本思想是:当进程在 CPU 上运行时,如指令中涉及逻辑地址时,操作系统...
### LRU算法(Least Recently Used)在C语言中的实现 #### 概述 LRU算法是一种常用的缓存淘汰策略,在计算机科学中广泛应用于操作系统、数据库系统以及Web浏览器等场景。其核心思想是当缓存满时,优先淘汰最近最少...
当内存不足以容纳所有数据时,LRU算法会选择最近最少使用的数据进行淘汰。它的基本思想是:如果一个数据最近被访问过,那么它在未来的访问概率会比较高。LRU算法的核心在于维护一个有序的数据结构,例如链表或者哈希...
在操作系统中,当内存不足以容纳所有活动进程的数据时,LRU算法会被用来决定哪些页面应该被换出到磁盘上,以便为新进来的页面腾出空间。它的核心思想是:最近最少使用的页面在未来最不可能被使用,因此优先淘汰。 ...
在操作系统中,LRU算法用于决定何时将页面从内存移出,以便为新的页面腾出空间。当内存中的页面数量不足以容纳所有需要的页面时,LRU算法会选择最长时间没有被访问的页面进行替换。 实验目的是通过编程模拟LRU算法...
1.资源包含LRU算法整个项目,可直接在vs2019上运行项目,如果版本不对可选择把项目中cpp文件复制到自己的vs中运行 2.LRU 算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也...
LRU算法通过维护一个页面访问历史来跟踪每个页面的使用情况,当内存满时,它会优先淘汰那些长时间未被访问的页面。 在电子科技大学的这个实验报告中,学生需要设计并改进LRU算法的实现。实验的目标是让用户自定义页...
在实际操作系统中,LRU算法可能需要更复杂的数据结构和算法来支持,例如使用哈希表来加速页面查找,或者使用位图来跟踪页面状态。然而,这个简单的C语言实现提供了一个直观的理解基础,展示了LRU算法的基本操作和...
LRU算法就是在此背景下诞生的,它的核心思想是:最近最少使用的页面在未来最可能仍然是最少使用的。 LRU算法的基本操作流程如下: 1. 记录每个页面的访问时间。 2. 当内存满时,新进来的页面无法放入内存,此时需要...
当物理内存不足以容纳所有活动进程时,LRU算法会选择最近最少使用的页面进行淘汰,以腾出空间给新的或需要访问的页面。 在计算机科学中,操作系统负责管理和调度系统的各种资源,包括内存。内存管理是操作系统的...
### LRU算法 #### 1. LRU算法简介 LRU(Least Recently Used)算法是一种常用的内存管理与虚拟缓存置换算法,其基本思想是当缓存满时,优先淘汰最近最少使用的页面。这种算法能够很好地利用程序访问的局部性原理,...
### LRU算法(操作系统) #### 一、LRU算法简介 LRU(Least Recently Used,最近最少使用)算法是一种常用的操作系统存储器管理中的页面置换算法。它的基本思想是:当内存空间不够时,系统会将最近最久未使用的...
基于C语言的FIFO和LRU算法的实现。
### LRU算法C语言实现详解 #### 一、引言 LRU(Least Recently Used,最近最少使用)算法是一种常用的数据缓存淘汰策略,在计算机科学领域应用广泛,尤其是在操作系统、数据库管理和Web服务器缓存管理等方面。本文...
用C语言实现的OPT和LRU算法,下载后直接用VC++6.0打开即可编译运行。亲测可用。