模擬LRU演算法 通道處理演算法

2022-07-10 13:45:12 字數 2087 閱讀 3818

最近寫了兩個程式,模擬作業系統的演算法,只是基本實現了課本上的基本功能,實際應該是很複雜的。

模擬lru頁面置換演算法:

1 #include 2 #include 3 #include 45

#define tn 3 //

分配給該程式的主存頁數

6#define pn 10 //

位址流7

8 typedef struct

pagepage;

1314 page pg[pn]; //

頁位址流

15int page[tn]; //

主存頁面表

1617

/*頁面命中和替換頁面時都需要初始化調入的頁面

*/18

void init(int k, int

p) 24}

2526

/*查詢頁面表中最大的計數器,返回對應的索引

*/27

intfindmax()37}

38if(max_cnt < cnt)

43}

44return

ans;45}

4647

void

lru()

60if(k == 0

)64 printf("

%d\t%d\t

",k+1

,p);

65for(i=0;i)

73if(!page[i])81}

82if(hit == 1

) init(k,p);

8384

/*替換操作,調進頁面設定

*/85

if(!inserted)

92 printf("\n"

);93 k++;94}

95}96int

main()

測試結果:

位元組多路通道響應和裝置處理:

1 #include 2

using

namespace

std;34

#define n 5 //

裝置數目

5#define gap 10 //

通道處理時間67

struct

deviced[n];

1314

/*初始化各裝置起始狀態

*/15

void

init() 20}

2122

int cmp(const

void *a, const

void *b)

2930

void swap(device **a, device *b)

4748

/*p最終指向通道選中的裝置,selected是選中裝置的索引

*/49

void quicksort(device **p, int &selected)

56else

if(d[i].priority == (*p)->priority)61}

62}63}

6465

void check_lose(int handle_time,int

selected)

80 printf("

次申請未得到響應!\n");

81 d[i].start+=cnt*d[i].cycle;82}

83}84}

85}8687

void handle(int

end_time)

102 k++;

103}

104}

105106

if(k == 0

) 109

else

118}

119}

120121

intmain()

演算法 模擬LRU機制

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制 實現 lrucache 類 lrucache int capacity 以正整數作為容量 capacity 初始化 lru 快取 int get int key 如果關鍵字 key 存在於快取中,則返回關鍵字的值,否則返回 1 ...

演算法 模擬LRU機制

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制 實現 lrucache 類 lrucache int capacity 以正整數作為容量 capacity 初始化 lru 快取 int get int key 如果關鍵字 key 存在於快取中,則返回關鍵字的值,否則返回 1 ...

hash衝突及處理演算法

看了concurrenthashmap的實現,使用的是拉鍊法.雖然我們不希望發生衝突,但實際上發生衝突的可能性仍是存在的。當關鍵字值域遠大於雜湊表的長度,而且事先並不知道關鍵字的具體取值時。衝突就難免會發 生。另外,當關鍵字的實際取值大於雜湊表的長度時,而且表中已裝滿了記錄,如果插入乙個新記錄,不僅...