作業系統儲存管理實驗:最近最少使用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
- 作業系統(8)儲存器管理作業系統
- 作業系統儲存器管理筆記作業系統筆記
- 【作業系統筆記】動態儲存管理作業系統筆記
- 作業系統——c++實現頁式虛擬儲存管理作業系統C++
- 作業系統實驗5 簡易檔案管理系統作業系統
- 理解作業系統之儲存管理作業系統
- 作業系統程式、儲存和I/O作業系統
- 作業系統ENDIAN(位元組儲存次序)作業系統
- 細說Oracle資料庫與作業系統儲存管理二三事Oracle資料庫作業系統
- 作業系統儲存管理和oracle資料庫(第二篇)作業系統Oracle資料庫
- 作業系統儲存管理和oracle資料庫(第三篇)作業系統Oracle資料庫
- 作業系統實驗六實驗報告作業系統
- 作業系統實驗七實驗報告作業系統
- 作業系統實驗——程式控制作業系統
- 作業系統之“實驗一”作業系統
- 作業系統儲存管理和oracle資料庫(第一篇)作業系統Oracle資料庫
- innodb 頁儲存管理的實驗
- 作業系統實驗4 系統呼叫聯絡作業系統
- LRU 居然翻譯成最近最少使用?真相原來是這樣!(附力扣題解)力扣
- 實驗0、瞭解和熟悉作業系統實驗作業系統
- 利用oracle儲存過程執行作業系統命令Oracle儲存過程作業系統
- 分割槽儲存管理模擬實驗
- 作業系統實驗2 程式控制和系統呼叫作業系統
- 作業系統實驗 & bochs 環境配置作業系統
- 作為最常用的儲存協議,企業如何進行NAS儲存統一管理?協議
- 儲存系統實現-構建自己的儲存系統(一)
- 作業系統-程式管理作業系統
- 作業系統管理角色作業系統
- 作業系統面試經驗作業系統面試
- 作業系統實驗(一)-Shell程式設計作業系統程式設計
- 作業系統概念-程式控制 實驗報告作業系統
- 作業系統實驗1 Shell程式設計作業系統程式設計
- 0512 作業系統程式排程實驗作業系統
- 小程式 LRU 儲存設計
- 詳解leetcode146題【LRU (最近最少使用) 快取機制】(附js最優解法!)LeetCode快取JS