作業系統演算法細嚼之 LRU演算法純C語言簡易實現

2021-10-07 09:21:54 字數 1687 閱讀 7004

我的演算法由於沒有進行雜湊優化,所以在最後乙個測試點超時了。

設定乙個鍊錶,然後最近使用的插入到鍊錶的尾部。那麼最近最久未使用的記憶體頁就是鍊錶的第乙個節點了,只需要把它移除就好!

標頭檔案:

#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快取演算法,最低訪問頻率的條目首先被移除。這個方法並不經常使用...

作業系統之排程演算法

作業系統管理了系統的有限資源,當有多個程序 或多個程序發出的請求 要使用這些資源時,因為資源的有限性,必須按照一定的原則選擇程序 請求 來占用資源。這就是排程。目的是控制資源使用者的數量,選取資源使用者許可占用資源或占用資源。這時就可以根據不同的排程的方法來進行處理程序。先來先服務排程演算法 在程序...