多道程式設計模擬 C語言實現

2021-10-10 10:28:42 字數 3532 閱讀 3732

作業系統實驗:模擬多道程式設計的執行,並且比較順序執行和多道程式執行的所需要的時間。

程式的生命週期為:計算->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的編 解碼系統。給...