我的演算法由於沒有進行雜湊優化,所以在最後乙個測試點超時了。
設定乙個鍊錶,然後最近使用的插入到鍊錶的尾部。那麼最近最久未使用的記憶體頁就是鍊錶的第乙個節點了,只需要把它移除就好!
標頭檔案:
#pragma once
#ifndef _lrucach_
#define _lrucach_
typedef
struct link_node link_node;
typedef
struct lru_cache lru_cache;
typedef
struct link_list link_list;
#endif
// !_lrucach_
原始檔:#include
"lrucach.h"
#include
#include
static
struct link_list*
link_list_create()
static
struct lru_cache*
lrucachecreate
(int capacity)
static
void
add_node
(struct link_list* list,
struct link_node* node)
static
void
del_node
(struct link_list* list,
struct link_node* node)
pnode->next = pcur->next;
free
(pcur)
; list->_size--;}
static
struct link_node*
in_list
(struct link_list* list,
int key)
pcur = pcur->next;
}return isfind;
}static
intlrucacheget
(lru_cache* obj,
int key)
return value;
}static
void
lrucacheput
(lru_cache* obj,
int key,
int value)
else
}static
void
lrucachefree
(lru_cache* obj)
obj->lru_list->_size =0;
free
(obj->lru_list)
; obj->lru_list =
null
; obj->_capacity =0;
free
(obj)
; obj =
null;}
/* 測試** */
intmain()
作業系統概論的LRU排程演算法
要訪問的頁號是 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2 把最先三頁裝入記憶體,然後lru排程情況如下 7 0 1 2 2 3 0 4 2 2 0 3 3 0 1 2 0 3 0 4 2 3 0 3 2 1 1 2 0 3 0 4 2 3 0 3 2 1 2 總共產生7次缺頁中斷 ...
作業系統之快取演算法
快取演算法是指令的乙個明細表,用於提示 計算裝置的 快取資訊中 哪些條目應該被刪去。常見快取演算法包括lfu lru arc fifo mru。最不經常使用演算法 lfu 這個快取演算法使用乙個計數器來記錄條目被訪問的頻率。通過使用lfu快取演算法,最低訪問頻率的條目首先被移除。這個方法並不經常使用...
作業系統之排程演算法
作業系統管理了系統的有限資源,當有多個程序 或多個程序發出的請求 要使用這些資源時,因為資源的有限性,必須按照一定的原則選擇程序 請求 來占用資源。這就是排程。目的是控制資源使用者的數量,選取資源使用者許可占用資源或占用資源。這時就可以根據不同的排程的方法來進行處理程序。先來先服務排程演算法 在程序...