ホームページ > バックエンド開発 > C++ > 最も最近使用されていないページ (LRU) でのページ フォールト

最も最近使用されていないページ (LRU) でのページ フォールト

WBOY
リリース: 2023-08-29 17:49:07
転載
824 人が閲覧しました

最も最近使用されていないページ (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

値 5 でメモリを割り当てる必要があります。これにより、LRU 2 が置き換えられます:

このプロセス中にエラーが発生しました = 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) アルゴリズムを示す C プログラム。

  • 方法 2 - インデックス付きページングと LRU アルゴリズムによるハッシュ関数を使用してオペレーティング システムのメモリを管理し、C プログラムを使用してページ フォールトを検出します。

  • C プログラムは、オペレーティング システムのページ関連の最も最近使用されていない (LRU) アルゴリズムを使用したメモリ管理を示します

  • LRU (最も最近使用されていない) アルゴリズムは、ページ フォールトを処理するためのオペレーティング システムの戦略です。プロセスは次のとおりです -

ページの移動を開始します。

  • データをコレクションに挿入します。

  • リクエストページの処理。

  • 同時に起こり続けてください。

  • インデックスを宣言します。

  • ページフォールトの増加が開始されました。

  • コレクション内のページを見つけます。

  • 見つかったページを現在のページに置き換えます。

  • 障害を追加します。

  • インデックスを更新

  • サンプルコード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 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート