0

0

最近最少使用(LRU)中的页面错误

WBOY

WBOY

发布时间:2023-08-29 17:49:07

|

948人浏览过

|

来源于tutorialspoint

转载

最近最少使用(lru)中的页面错误

分页是与操作系统相关的内存管理过程。它通过使用页面段将一些进程数据从辅助数据存储器存储或检索到主数据存储器或内存中。分页过程发生在进程在页面上遇到任何错误时,我们不能在此处使用新的空闲页面来满足分配过程。LRU过程生成了特定的替换算法需求。当进程产生一个新页面时,它决定哪个页面需要被替换。让我们举个例子 -

输入的内容用于该过程 -

N = 9, C = 4

Present pages for the process = {5, 0, 1, 3, 2, 4, 1, 0, 5}

输出结果为:8

解释 -

分配的内存页面为 5, 0, 1, 3

这个过程中发生的故障 = 4

需要分配内存,值为2,替换LRU 5:

这个过程中发生的错误 = 4+1 = 5

需要分配值为4的内存,替换LRU 0:

这个过程中发生的错误 = 5 + 1 = 6

需要的值为1的内存已经存在:

这个过程中发生的错误 = 6 + 0 = 6

需要分配值为0的内存,以替换最近最少使用的3个内存块:

这个过程中发生的错误 = 6 + 1 = 7

需要分配值为5的内存,这将替换LRU 2:

在这个过程中发生的错误 = 7 + 1 = 8。

算法评估LRU中的页面错误

LRU算法是操作系统领域中提到的一种替换过程。容量是内存中所持有页面的数量。现在我们将在特定内存中设置当前的页面集合。该过程总是将最不经常使用的页面置于进程的值中。

  • 步骤 1 - 启动 LRU 操作的过程。

  • 第二步 - 在这里声明总计为0。

  • 步骤 3 - 创建一个向量类。

  • 第四步 - 构建并声明一个具有所需数组大小的数组。

  • 第5步 - 以内存容量大小启动进程。

  • 第6步 - 为该方法创建一个地图。

  • 第7步 - 将频率值存储到页面的映射中

  • 步骤 8 - 遍历页面元素。

  • 步骤9 - 如果;所需元素在基本存储位置中存在,则我们

  • 将其删除并推送。

  • 步骤10 - 步骤9增加了频率的过程。

  • 第11步 - 否则,内存已经完全满了。删除第一个元素并减少频率。

  • 第12步 - 计数增加。

    新快购物系统
    新快购物系统

    新快购物系统是集合目前网络所有购物系统为参考而开发,不管从速度还是安全我们都努力做到最好,此版虽为免费版但是功能齐全,无任何错误,特点有:专业的、全面的电子商务解决方案,使您可以轻松实现网上销售;自助式开放性的数据平台,为您提供充满个性化的设计空间;功能全面、操作简单的远程管理系统,让您在家中也可实现正常销售管理;严谨实用的全新商品数据库,便于查询搜索您的商品。

    下载
  • 第13步 - 比较频率结果。

  • 第14步 - 根据页面的频率和基于时间的结果进行排序。

  • 第15步 - 如果我们得到相同的频率,那么页面将首先到达。

  • 第16步 - 重复这个过程。

  • 步骤 17 - 返回结果。

  • 第18步 - 终止进程。

计算LRU中的页面错误的语法

int main() {
  int capacity = 4;
  int arr[] = {7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2};
 
  deque q(capacity);
  int count=0;
  int page_faults=0;
  deque::iterator itr;
  q.clear();
  for(int i:arr)
  {
    itr = find(q.begin(),q.end(),i);
    if(!(itr != q.end()))
    {
 
      ++page_faults;
      if(q.size() == capacity)
      {
        q.erase(q.begin());
        q.push_back(i);
      }
      else{
        q.push_back(i);
 
      }
    }
    else
    {
      q.erase(itr);
      q.push_back(i);        
    }
 
  }
  cout< s=new ArrayList<>(capacity);
   int count=0;
   int page_faults=0;
   for(int i:arr)
   {
      if(!s.contains(i))
      {
         if(s.size()==capacity)
         {
            s.remove(0);
            s.add(capacity-1,i);
         }
		 else
            s.add(count,i);
         page_faults++;
         ++count;
       } else {
         s.remove((Object)i);
         s.add(s.size(),i);		
   }
}

在上面提到的可能的语法中,我们尝试展示了在操作系统领域中实现LRU页面错误管理的可能方法。通过这个交叉的语法,我们将构建一些C++代码来以高效的方式解释和解决问题陈述。

方法

  • 方法1 - C ++程序演示了最近最少使用(LRU)算法,附带页面用于操作系统中的内存管理。

  • 方法2 - 使用带有LRU算法的索引和哈希函数的分页来管理操作系统中的内存,C++程序用于查找页面错误。

C++程序演示了操作系统中与页面相关的最近最少使用(LRU)算法的内存管理

LRU(最近最少使用)算法是操作系统中处理页面错误的一种策略。以下是该过程 -

  • 开始遍历页面。

  • 将数据插入到一个集合中。

  • 请求页面处理。

  • 保持同时发生。

  • 声明索引。

  • 页面错误的增量已开始。

  • 在集合中找到页面。

  • 将找到的页面替换为当前页面。

  • 增加故障。

  • 更新索引

示例代码1

//C++ program to demonstrate the Least Recently Used (LRU) Algorithm attached with the paging for memory management in Operating System
#include
using namespace std;
int main ()
{
  int nopages, nofaults, page[20], i, count = 0;
  cout << "\n\t Enter no of pages for which you want to calculate page faults:>";
  cin >> nopages;
  //it will store the numer of Pages
  cout << "\n\t Enter the Reference String:";
  for (i = 0; i < nopages; i++)

    {
      cout << "\t"; cin >> page[i];
    }
  cout << "\n\t Enter the Number of frames:"; cin >> nofaults;
  int frame[nofaults], fcount[nofaults];
  for (i = 0; i < nofaults; i++)

    {
      frame[i] = -1;
      fcount[i] = 0;
    }
  i = 0;
  while (i < nopages)

    {
      int j = 0, flag = 0;
      while (j < nofaults)

	{
	  if (page[i] == frame[j])
	    {
	      flag = 1;
	      fcount[j] = i + 1;
	    }
	  j++;
	}
      j = 0;
      cout << "\n\t***\n";
      cout << "\t" << page[i] << "-->";
      if (flag == 0)

	{
	  int min = 0, k = 0;
	  while (k < nofaults - 1) { if (fcount[min] > fcount[k + 1])
		min = k + 1;
	      k++;
	    }
	  frame[min] = page[i];
	  fcount[min] = i + 1;
	  count++;
	  while (j < nofaults)

	    {
	      cout << "\t|" << frame[j] << "|";
	      j++;
	    }
	}
      i++;
    }
  cout << "\n\t***\n";
  cout << "\n\t Page Fault:" << count;
  return 0;
}

输出

 Enter no of pages for which you want to calculate page faults:>
	 Enter the Reference String:
	 Enter the Number of frames:
	***

	 Page Fault:0

使用带有LRU算法的索引和分页的C++程序,通过使用哈希函数在操作系统中进行内存管理来查找页面错误

在页面跟踪过程中,当代码尝试访问一个在RAM中不存在或未列出的内存页面时,会发生页面错误。为了解释这个过程,我们将按照下面提到的步骤进行。

  • 迭代该过程并引用页面。

  • 删除当前。

  • 增加页面错误。

  • 将当前内容添加到页面中。

  • 从页面中删除第一个。

  • 使用哈希字符串。

  • 返回页面点击次数作为一个数字

示例代码2

//C++ program to find page faults by using indexes with LRU algorithm attached with the paging for memory management in Operating System using hashing function
#include
using namespace std;
int pageFaults(int pages[], int n, int capacity)
{
	unordered_set s;
	unordered_map indexes;
	int page_faults = 0;
	for (int i=0; i

输出

6

结论

最近最少使用(LRU)替换算法是一种特定的页面算法,我们可以使用它比任何其他算法更长的时间。该过程返回较少的页面错误,并能够完成页面分析。在本文中,我们学习了分页过程及其应用。通过使用上述提到的算法和语法,我们已经创建了一些代码以高效地解决问题陈述。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

248

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

205

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1435

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

609

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

547

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

539

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

158

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

77

2025.08.07

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++教程
C++教程

共115课时 | 10.6万人学习

手把手实现数据传输编码
手把手实现数据传输编码

共1课时 | 706人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号