作業系統儲存管理實驗:最近最少使用LRU(Least Recently Used)
1. 設計思路
使用c++棧函式
最近使用的放在棧頂,最久未使用的處於棧底。
- 判斷棧內是否為空(判斷當前頁框中有沒有頁面)
- 為空->直接入棧
- 不為空->通過輔助棧對主棧內容進行遍歷
- 有相同的,將原棧中的頁面刪除,將新進的頁面放在棧頂,從而確保最近使用過的頁面處於棧頂
- 沒有相同的,將棧底元素刪除,將新進頁面放在棧頂,從而將最久未使用的刪除並確保最近使用過的頁面處於棧頂
2. 程式碼
/*最近最少使用LRU
* 將最近使用的放在棧頂
*/
#include <iostream>
#include<stack>
#include<vector>
using namespace std;
int main()
{
int physical_block_num; // 物理塊數量
int page_num; //頁面數
int page_no; //頁面號
stack<int, vector<int>>s1; //主棧
stack<int, vector<int>>s2; //輔助棧
cout << "請輸入物理塊數量:";
cin >> physical_block_num;
cout << "請輸入頁面數量:";
cin >> page_num;
for (int i = 0; i < page_num; i++)
{
int state = 0; //標記棧中有沒有相同的
cin >> page_no;
if (s1.empty()) //為空直接入棧
{
s1.push(page_no);
cout << "*";
}
else {
while (!s1.empty())
{
if (page_no == s1.top()) { //有相同的
cout << "-";
s1.pop(); //把相同的丟掉
while (!s2.empty())
{
s1.push(s2.top()); //把s2中的放回來
s2.pop();
}
s1.push(page_no); //把最新加入的放到棧頂,保證最新使用過的在上面
state = 1;
break;
}
else {
s2.push(s1.top()); //把s1中的元素放入s2中
s1.pop(); //把換到s2中的,刪除
}
}
if (state == 0) { //如果沒有相同的,s1中的元素會被全部換到s2中
if (s2.size() == physical_block_num) //判斷需不需要把原來棧中的內容刪除
{
s2.pop(); //先把s2中的第一個刪除,第一個是最久未使用的
while (!s2.empty()) {
s1.push(s2.top()); //把s2中的其他元素放入s1中
s2.pop(); //把s2中放入s1中的元素刪除
}
s1.push(page_no); //把最新新增進來的放在最上面
cout << "*";
}
else {
while (!s2.empty()) {
s1.push(s2.top()); //把s2中的其他元素放入s1中
s2.pop(); //把s2中放入s1中的元素刪除
}
s1.push(page_no); //把最新新增進來的放在最上面
cout << "*";
}
}
}
while (!s1.empty())
{
cout << s1.top();
s2.push(s1.top());
s1.pop();
}
while (!s2.empty())
{
s1.push(s2.top());
s2.pop();
}
cout << endl;
}
}
/*test data
3
20
9 2 3 4 2 5 2 6 4 5 2 5 4 3 4 2 3 9 2 3
*/
3. 測試資料
3
20
9 2 3 4 2 5 2 6 4 5 2 5 4 3 4 2 3 9 2 3
相關文章
- LRU(Least Recently Used)最近未使用置換演算法--c實現AST演算法
- 使用LinkedHashMap來實現一個使用LRU(Least Recently Used)演算法的cacheHashMapAST演算法
- Oracle Least Recently Used ChainsOracleASTAI
- 作業系統——c++實現頁式虛擬儲存管理作業系統C++
- 理解作業系統之儲存管理作業系統
- 作業系統程式、儲存和I/O作業系統
- 金融使用者實踐|分散式儲存支援資料倉儲業務系統效能驗證分散式
- 作業系統實驗——程式控制作業系統
- 詳解leetcode146題【LRU (最近最少使用) 快取機制】(附js最優解法!)LeetCode快取JS
- LRU 居然翻譯成最近最少使用?真相原來是這樣!(附力扣題解)力扣
- 分割槽儲存管理模擬實驗
- 作為最常用的儲存協議,企業如何進行NAS儲存統一管理?協議
- 作業系統實驗——實驗1《CPU Scheduling》&&實驗二《Allocation & Reclaim》作業系統AI
- 小程式 LRU 儲存設計
- 作業系統實驗 & bochs 環境配置作業系統
- 作業系統-程式管理作業系統
- 【學習筆記之作業系統原理篇】儲存管理筆記作業系統
- 作業系統概念-程式控制 實驗報告作業系統
- 作業系統實驗(一)-Shell程式設計作業系統程式設計
- 儲存系統
- 實驗、可變分割槽儲存管理系統模擬 —— 最先適應分配演算法演算法
- 作業系統篇-程式管理作業系統
- 作業系統裝置管理作業系統
- 作業系統——檔案的三種外存形式及檔案儲存空間的管理方法作業系統
- OSS雲端儲存管理實踐(體驗有禮)
- 實戰-使用 Cobbler 安裝作業系統作業系統
- 作業系統面試經驗作業系統面試
- 1.6.4. 作業系統驗證作業系統
- 庫存管理系統,實用於製造業服務業
- Kubernetes 使用 Kubevirt 執行管理 Windows 10 作業系統Windows作業系統
- iNeuOS工業網際網路作業系統,釋出實時儲存方式:實時儲存、變化儲存、定時儲存,增加裝置振動狀態和電能狀態監測驅動,v3.6.2作業系統
- 分散式作業管理系統 Asgard分散式
- 作業系統-記憶體管理作業系統記憶體
- 作業系統——記憶體管理作業系統記憶體
- 程式設計作業——系統管理程式設計
- 大型系統儲存層遷移實踐
- 什麼是大資料系統儲存及管理?大資料
- 埃思特電子作業票系統:實現作業管理線上化