最近寫了兩個程式,模擬作業系統的演算法,只是基本實現了課本上的基本功能,實際應該是很複雜的。
模擬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 2using
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的實現,使用的是拉鍊法.雖然我們不希望發生衝突,但實際上發生衝突的可能性仍是存在的。當關鍵字值域遠大於雜湊表的長度,而且事先並不知道關鍵字的具體取值時。衝突就難免會發 生。另外,當關鍵字的實際取值大於雜湊表的長度時,而且表中已裝滿了記錄,如果插入乙個新記錄,不僅...