作業系統實驗:模擬多道程式設計的執行,並且比較順序執行和多道程式執行的所需要的時間。
程式的生命週期為:計算->io操作->計算->結束
下面為c語言實現版本,模擬的三個程式單通道模式
/*
* 多道程式設計模擬
** 本次為作業系統的實驗,模擬了a,b,c三個程式的多道程式的執行,比較順序執行和多道程式設計
* 程式執行的順序為:計算->io操作->計算->結束,分為三段
* 例如:
* a先計算30ms,再io操作40ms,再計算10ms。
* b先計算60ms,再io操作30ms,再計算10ms。
* a先計算20ms,再io操作40ms,再計算20ms。
** 本次實驗只模擬了三個程式和單通道模式
*/#include
#include
#define true 1
#define false 0
#define cpu 2
#define io -1
typedef
struct
pro;
//程式結構體
typedef
struct
queue;
//佇列
queue cpu_q;
//cpu佇列
queue io_q;
//io佇列
void
init
(pro*
,pro*
,pro*);
void
input
(pro*);
void
run_seq()
;void
run_par()
;int
enqueue
(pro*
,int);
pro*
dequeue
(int);
intempty
(int);
intfull
(int);
intback
(int
,pro*);
intmain()
/** 判定佇列是否是空
** 引數:
* i:為1判定cpu佇列,否則為io佇列
* 返回值:如果為空返回正數,否則返回0
*/int
empty
(int i)
else}/*
* 判定佇列是否滿
** 引數:
* i:為cpu判定cpu佇列,否則為io佇列
* 返回值:如果滿返回正數,否則返回0
*/int
full
(int i)
else}/*
* 入隊操作
** 引數:
* p:要入隊的程式
* i:為cpu入cpu佇列,否則為io佇列
* 返回值:如果正常入隊返回1,否則返回0
*/int
enqueue
(pro* p,
int i)
else
return true;}/*
* 出隊操作
** 引數:
* i:為1出cpu佇列,否則為io佇列
* 返回值:返回隊頭元素或null
*/pro*
dequeue
(int i)
else
return temp;}/*
* 將元素新增到佇列頭
** 引數:
* i:為cpu則新增到cpu佇列,否則新增到io佇列
* p:要新增的任務
* 返回值:新增成功返回1
*/int
back
(int i,pro* p)
else
return false;}/*
* 程式計算時間和io時間初始化
** 引數:
* p:要被初始化的程式
*/void
input
(pro* p)
/** 佇列和多道程式初始化
** 引數:
* a:被初始化程式1
* b:被初始化程式2
* c:被初始化程式3
*/void
init
(pro* a,pro* b,pro* c)
/** 順序執行模式
*/void
run_seq()
putchar
('\n');
printf
("總耗時%dms\n"
,sum);}
/** 多道執行模式
*/void
run_par()
else
free
(temp)
;continue;}
exit(0
);}//如果cpu隊列為空,則進行io排程,io排程完成後繼續完成計算至程式結束if(
empty
(cpu)
)exit(0
);}//如果io佇列和cpu佇列都不為空,則io操作和計算同時進行
temp =
dequeue
(cpu)
; temp1 =
dequeue
(io);if
(temp->flag ==
0) time = temp->cpu_time1 - temp1->io_time;
else time = temp->cpu_time2 - temp1->io_time;
if(time >=0)
else
while
(time >0)
else
}break;}
enqueue
(temp1,cpu);if
(temp->flag ==0)
else
free
(temp)
;putchar
('\n');
}else
else
time =
-time;
while
(time >0)
else
else
free
(temp2);}
}break;}
enqueue
(temp1,cpu)
;//完成io操作後調入cpu佇列
if(temp->flag ==0)
else
free
(temp)
;putchar
('\n');
}}printf
("總耗時%dms\n"
,sum)
;}
注:該多道程式設計的時間並不是最優解,還可以進一步改進。 C語言實現泛型程式設計
泛型程式設計讓你編寫完全一般化並可重複使用的演算法,其效率與針對某特定資料型別而設計的演算法相同。在c語言中,可以通過一些手段實現這樣的泛型程式設計。這裡介紹一種方法 通過無型別指標void 看下面的乙個實現交換兩個元素內容的函式swap,以整型int為例 void swap int i1,int ...
socket簡單程式設計 C語言實現
include include include 緩衝區溢位會怎麼樣?intmain 判斷請求載入的版本號的是否符合要求if lobyte wsadata.wversion 2 hibyte wsadata.wversion 2 設定伺服器位址 server add.sin family af ine...
赫夫曼程式設計C語言實現
問題描述 利用huffman編碼進行通訊可以大大提高通道利用率,縮短資訊傳輸時間,降低傳輸成本。但是,這要求在傳送端通過乙個編碼系統對待傳資料預先編碼,在接受端將傳來的資料編碼進行解碼 復原 對於有些通道,每端都需要乙個完整的編 解碼系統。試為這樣的資訊收發站編寫乙個huffman的編 解碼系統。給...