>  기사  >  백엔드 개발  >  LRU(최근에 사용된 페이지 오류)

LRU(최근에 사용된 페이지 오류)

WBOY
WBOY앞으로
2023-08-29 17:49:07733검색

LRU(최근에 사용된 페이지 오류)

페이징은 운영 체제와 관련된 메모리 관리 프로세스입니다. 페이지 세그먼트를 사용하여 보조 데이터 저장소의 일부 프로세스 데이터를 기본 데이터 저장소 또는 메모리에 저장하거나 검색합니다. 페이징 프로세스는 페이지에서 새로운 무료 페이지로 할당 프로세스를 충족할 수 없는 오류가 발생할 때 발생합니다. LRU 프로세스는 특정 교체 알고리즘 요구 사항을 생성합니다. 프로세스가 새 페이지를 생성하면 교체해야 할 페이지를 결정합니다. 예를 들어보자 -

입력하신 내용이 이 과정에서 사용됩니다 -

으아아아

프로세스의 현재 페이지 = {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

최근에 가장 적게 사용된 3개의 메모리 블록을 대체하려면 값이 0인 메모리를 할당해야 합니다.

이 과정에서 발생한 오류 = 6 + 1 = 7

LRU 2를 대체할 값 5로 메모리를 할당해야 합니다.

이 과정에서 발생한 오류 = 7 + 1 = 8.

알고리즘은 LRU

의 페이지 오류를 평가합니다.

LRU 알고리즘은 운영체제 분야에서 언급되는 대체 프로세스입니다. 용량은 메모리에 보관된 페이지 수입니다. 이제 특정 메모리에 현재 페이지 컬렉션을 설정하겠습니다. 프로세스는 항상 가장 자주 사용되지 않는 페이지를 프로세스 값에 배치합니다.

  • 1단계 - LRU 작업 프로세스를 시작합니다.

  • 2단계 - 여기서 합계를 0으로 선언합니다.

  • 3단계 - 벡터 클래스를 만듭니다.

  • 4단계 - 원하는 배열 크기로 배열을 만들고 선언합니다.

  • 5단계 - 메모리 용량으로 프로세스를 시작합니다.

  • 6단계 - 이 방법에 대한 지도를 만듭니다.

  • 7단계 - 페이지 맵에 빈도 값을 저장합니다.

  • 8단계 - 페이지 요소를 탐색합니다.

  • 9단계 - 필수 요소가 기본 저장 위치에 있으면

  • 삭제하고 밀어보세요.

  • 10단계 - 9단계에서는 빈도 프로세스를 추가합니다.

  • 11단계 - 그렇지 않으면 메모리가 완전히 가득 찼습니다. 첫 번째 요소를 제거하고 주파수를 줄입니다.

  • 12단계 - 개수가 증가합니다.

  • 13단계 - 빈도 결과를 비교합니다.

  • 14단계 - 페이지 빈도 및 시간 기반 결과를 기준으로 정렬합니다.

  • 15단계 - 동일한 빈도를 얻으면 페이지가 먼저 도착합니다.

  • 16단계 - 과정을 반복하세요.

  • 17단계 - 결과를 반환합니다.

  • 18단계 - 프로세스를 종료합니다.

LRU의 페이지 결함 계산 구문

으아아아

위에 언급된 가능한 구문에서 우리는 운영 체제 세계에서 LRU 페이지 오류 관리를 구현하는 가능한 방법을 보여 주려고 노력했습니다. 이 교차 구문을 통해 문제 설명을 효율적인 방식으로 해석하고 해결하기 위한 일부 C++ 코드를 작성합니다.

방법

  • 방법 1 - 운영 체제의 메모리 관리를 위한 페이지와 함께 LRU(Least Recent Used) 알고리즘을 시연하는 C++ 프로그램입니다.

  • 방법 2 - 운영 체제에서 메모리를 관리하기 위해 인덱싱을 위한 LRU 알고리즘과 해시 함수를 사용한 페이징을 사용하고, C++ 프로그램을 사용하여 페이지 오류를 찾습니다.

운영 체제에서 페이지 관련 LRU(최근 사용 횟수) 알고리즘을 사용하여 메모리 관리를 시연하는 C++ 프로그램

LRU(Least Recent Used) 알고리즘은 페이지 오류를 처리하기 위한 운영 체제의 전략입니다. 과정은 다음과 같습니다 -

  • 페이지 탐색을 시작하세요.

  • 컬렉션에 데이터를 삽입합니다.

  • 페이지 처리를 요청합니다.

  • 동시에 계속 발생합니다.

  • 선언지수.

  • 페이지 오류 증가가 시작되었습니다.

  • 컬렉션에서 페이지를 찾아보세요.

  • 찾은 페이지를 현재 페이지로 바꿉니다.

  • 글리치를 추가했습니다.

  • 색인 업데이트

샘플 코드 1

으아아아

출력

으아아아

운영 체제의 메모리 관리를 위해 해시 함수를 사용하여 페이지 오류를 찾기 위해 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<bits/stdc++.h>
using namespace std;
int pageFaults(int pages[], int n, int capacity)
{
	unordered_set<int> s;
	unordered_map<int, int> indexes;
	int page_faults = 0;
	for (int i=0; i<n; i++)
	{
		if (s.size() < capacity)
		{
			if (s.find(pages[i])==s.end())
			{
				s.insert(pages[i]);
				page_faults++;
			}
			indexes[pages[i]] = i;
		}
		else
		{
			if (s.find(pages[i]) == s.end())
			{
				int lru = INT_MAX, val;
				for (auto it=s.begin(); it!=s.end(); it++)
				{
					if (indexes[*it] < lru)
					{
						lru = indexes[*it];
						val = *it;
					}
				}
				s.erase(val);
				s.insert(pages[i]);
				page_faults++;
			}
			indexes[pages[i]] = i;
		}
	}

	return page_faults;
}
int main()
{
	int pages[] = {7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2};
	int n = sizeof(pages)/sizeof(pages[0]);
	int capacity = 4;
	cout << pageFaults(pages, n, capacity);
	return 0;
}

输出

6

结论

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

위 내용은 LRU(최근에 사용된 페이지 오류)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제