- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564652 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174618
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
/ _' K* A% A* z( X; t7 Y经典任务调度算法的模拟程序
2 J# v5 p' ?$ W6 W本科毕业设计写了一个经典任务调度算法的模拟仿真程序,测试了五种调度算法的运行性能。在程序中虚拟了任务的进程,按照不同调度算法策略从进程池中选取任务执行,在任务执行过程中,保存相关的统计参数,最后对这些参数进行处理,反映各个调度算法的实际运行性能,程序中可以通过修改任务的相关参数改变任务特点,测试不同任务环境情况下,调度算法的性能适应性。程序是通过C语言编写的,为了对运行结果图像化,采用了EasyX的图形库。由于计算机中实的任务调度过程比较复杂,在实验中为了简化程序的实现,在某些方面进行了特殊处理。* J# u8 `7 |7 K& D. o
( }% Q% j, }7 c3 a% {; _3 a编程平台:VC6.0+EasyX图形库环境。
* ]8 ]1 s. z5 l! V( u
: t8 N9 q1 ?9 b以下截取部分程序运行图::; t+ t) }$ z& K* e
- f/ C9 @ f' s9 s$ P5 Y8 K, z源代码:
& I# g, O0 C) `- [* W, H3 [0 z1 f7 d0 E4 O
#include<stdio.h>/ D# D# b7 L9 {: A9 U
#include<stdlib.h>
- B3 T$ C/ S9 U3 A0 ]#include<easyx.h>; V3 ~( P8 j$ K' r1 @2 c" T
#include<time.h>3 k: {; O, u' [- e$ C1 Q5 U' e
#include<conio.h>
- J4 \9 W5 I+ ^ F0 C/ ]8 m. A#include<graphics.h>
# }3 I# _# g t$ @' s2 z#define initProcessNum 10
6 ]/ W/ |) p5 @% }4 q3 M9 w7 ~#define initProcessID 1000
0 s" _8 J: S" h$ J: h9 S#define MAXProcessRunTime 10000
+ Y& B e$ y0 p3 E& d#define MAX_MEMORY 4000
3 ]7 S, X1 {5 [: F/ q#define exchange_IO_Compute 10
/ F4 G+ O1 c! n- | o#define exchange_process 25
& @6 B; \; u( J2 H3 G$ x- C* t#define task_completed 1
- o# S' O: n3 ^% j#define task_not_completed 0
3 w8 L$ u( t% g, U+ X#define initclocknum 100
( ^2 M; V& O; s D6 penum condition
: ?/ `/ v) k w* B/ N{2 s& J" R: B6 |/ z+ a. N; B
dead,computing,IO_waiting,ready
2 t7 A( ~( i V. o$ I};; ]; G4 p+ h; P, |
struct process
' L4 y' o% ~8 D2 N+ R1 n{& i: k' ?" m, i6 z; h \( p
int processID;
, I1 a- d# h0 @int comeingTime;, ]; a* [4 X; |% Z( d% ~" i
int ioNum;, N" m- r9 t* Z9 j( |. f$ ]1 y- v
int computeNum;
, l, p6 V9 W9 eint * ioClock;+ b5 p6 Z5 H s; R
int * computeClock;" x8 { ?& D9 ?! Y4 w( `8 G
int ioTime;8 k: a4 ]1 X: L+ _: P" ?
int computeTime;
; E3 N- a8 a6 eint askMemory;
6 d, {. i' k# Y/ d% a* zcondition flag;; q7 q3 L* t% w1 b
int produceTime; //生成时间,以下三个数据成员用以计算相关性能# u6 {) w7 I$ }: n1 G
int runningTime; //第一次占用CPU的时间
1 X% m# J. m% f' b0 I7 i6 `+ Gint completedTime; //进程完成时的时间6 V6 W K2 M6 l! T
};: L& {1 Q0 X( T8 a- G" p1 k
typedef struct processCmpletedInfo //保存完成一个作业的相关信息# f3 D+ t4 s- e$ p. T8 h
{
6 \5 i% |$ |& B/ |4 h; Lint processID,comeingTime,askMemory;
# g. }6 t* H8 N/ r1 d/ m7 Gint compute,waitio,exchange,completedTime,runningTime; J1 c( g9 q; |4 q& e0 O
processCmpletedInfo * next;
% b o! m' m5 H; K1 m}PCI;9 V" i) B" l2 L! Z
struct processPool
5 ]* }. L* I V) N' \/ k$ N{ a# u+ h( x: u
process * p;
# x1 n6 F+ P C( i7 U) D7 Dint proNum;
! _* D0 a6 V; ~' R+ H- _};
# o1 n. p( F! t/ u. J% [int MAX_COMING_TIME=0,ID_FIFO=0,systemClock=0,FLAG_FIFO=0,FLAG_TT=0,FLAG_PF=0,FLAG_SJF=0,FLAG_HR=0,FLAG_show=1;4 o q+ s C( j1 M' _& \
int InitPool(processPool * p);7 b4 o' f& B& Z+ G: q5 H# [' _7 I
int produce_one_task(processPool * p,int i,int id);
1 D# z; E" g4 `3 w' W3 v0 n+ bint FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw);
* I- b; F! g$ R0 V: ^5 Vint TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
0 a3 O2 _, B/ Z- b uint TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos);* Z2 |+ w& [- G" X, j9 Y, X- w7 A
int FIFO_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);
7 |& ^ r9 P" \5 Z/ l; O8 L9 v4 Iint ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
7 h; |. p8 ~) \+ w l/ Xint SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);. H9 O) E- X: `' f
int PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);% E2 i! o/ U4 X# H% v3 Y
int Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);9 G7 `. e5 f# q) n/ W& I8 s
int High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int disatch);9 m @4 h0 M0 c0 ?
int High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);/ d5 ]1 I. a$ r0 y5 j
$ ~! E+ a- L( `" f
4 X/ F, F* Z! O3 k1 [
int sort_by_comingtime(processPool * p,int pos); w, s" P4 h. U" X) p, l
int showProcessInf(processPool p);/ c! S* N3 T+ C$ f) g. B
int drawPerformance_FIFO(int x,int y,int memorry);# t/ Y. ~3 f* x$ O
int drawPerformance_HR(int x,int y,int memorry);. {% m4 _: l! S3 ~
int drawPerformance_PF(int x,int y,int memorry);; Q0 I1 q. x: W& a; X( o& }" I
int drawPerformance_TT(int x,int y,int memorry);
S8 D+ W2 c/ t* Jint drawPerformance_SJF(int x,int y,int memorry);
4 S8 D5 ^& `3 f5 J: ?int MouseListening();
1 [( P# A) Y. D7 Iint MouseListening2(int *flagShow,int * showTime);$ H1 T' J. L w2 H' F
int showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR);
' O. g! R7 w& w# E; V, r# W' l9 E$ I% O/ Y# L+ U* q* h
2 n! a- g8 u; j: M3 h/ {1 Y' R1 t
void main()2 b' z; S) b9 {3 c3 D& N8 Z+ I
{- i( m$ H4 _$ b" h+ `
PCI* FIFO_save_head=NULL,** FIFO_pri=NULL,* Timet_save_head=NULL,** Timet_pri=NULL,* SJF_save_head=NULL,** SJF_pri=NULL,% \; M8 G( Z' Z) S" ~
*Priority_save_head=NULL,** Priority_pri=NULL,*HR_save_head=NULL,** HR_pri=NULL,* p;
( G0 @6 T, d. \% g( b4 v: y' V( A( Aint i=0,FIFO_memory=MAX_MEMORY,count=0,Timet_memory=MAX_MEMORY,SJF_memory=MAX_MEMORY,Priority_memory=MAX_MEMORY,HR_memory=MAX_MEMORY,
% X8 N% o+ Q# r$ l3 k7 {: VflagDraw=0,showTime=100000;
c& N) X+ t5 y: a" _" r: vprocessPool FIFO_p, FIFO_mmy,Timeturn_p,Timeturn_mmy,SJF_p,SJF_mmy,Priority_p,Priority_mmy,HR_p,HR_mmy;
* g5 v8 L2 V5 z" Q5 R! WFILE *fp=NULL;
( }: ]. T! N$ J9 F//processPool HR_p,HR_mmy;
) o+ [ P; [* k% M3 v( D/ B! t/ i' M) i' ~3 v2 M) h
) g; C, _3 [3 f8 H$ D1 h; K2 {9 Z
srand((unsigned)time(0)); ?$ ?( V2 [- k
systemClock=0;$ V# n$ P& r1 j# Y8 L [ e$ ~. W
initgraph( 1200,650,SHOWCONSOLE );
$ L( {( `2 Z. m6 |8 h) Y Csettextcolor(GREEN);
/ a2 F" m% n1 j. C' S: X/ wsetlinecolor(GREEN);
8 f, ^! @. C, o/ q8 h8 Msetfillcolor(GREEN);
7 \1 \7 U7 o m- \6 L6 O5 Y# _2 OInitPool(&FIFO_p);
, X& K+ r: M' z5 qsort_by_comingtime(&FIFO_p,-1);
; L# G/ X: n0 t; FInitPool(&Timeturn_p);( T5 X: ]3 z- v4 G# x. o7 B
InitPool(&SJF_p); b6 F' ?% }0 a( L" _* F
InitPool(&Priority_p);
) f, R( K3 v4 u+ [0 \" k' V- ]InitPool(&HR_p);
$ s* [+ X% _$ K4 i//showRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);
. i3 p/ }; `' \, E//Sleep(10000);
; O* w5 B6 U- z8 v. M4 @! b, ?" |8 _# T; b# i) H2 i
. `( X. s5 O' l+ M1 G- F2 o8 L; PTimeturn_mmy.p = (process*)malloc(initProcessNum*sizeof(process));" Y# [: ~, z& _! v. r1 K" v
SJF_mmy.p = (process*)malloc(initProcessNum*sizeof(process));& h1 K: h, L" N3 \: O6 L' |
Priority_mmy.p = (process*)malloc(initProcessNum*sizeof(process));
! }! q) E4 P5 f- |: zHR_mmy.p = (process*)malloc(initProcessNum*sizeof(process));6 b. ]" X- l% {! X
for(i=0; i<initProcessNum ;i++)7 B3 B$ ?3 x% w% v U% ~& n1 s
{2 ^7 S) `) R @# |
Timeturn_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));7 f `# n4 N9 a$ R- n) H) u ]( E8 N
Timeturn_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
; b0 |! B" w& [' oSJF_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));+ F2 T: I2 C3 I" ~
SJF_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));4 B: q2 k- l- r: G
Priority_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
- K- G" J/ e/ ]Priority_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
: P. R' D" Y" b( y: m# oHR_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
, I }4 a8 J( V9 {' iHR_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
& J: G7 t$ j8 b: ~2 M2 m# d( r; I}! P; G5 Z$ p3 y8 I- l) q- H
Timeturn_mmy.proNum = 0;
p3 g5 w& Z5 a% Q% eTimeTurining_storage_to_memory(&Timeturn_p,&Timeturn_mmy,&Timet_memory,-1);
. |/ g' c4 Y* h1 R+ F: V/ _( ySJF_storage_to_memory(&SJF_p,&SJF_mmy,&SJF_memory);
+ e2 F. s1 y$ [( F) U- c* DPriority_storage_to_memory(&Priority_p,&Priority_mmy,&Priority_memory);
! h8 _* K0 Z) @High_response_ratio_s_to_m(&HR_p,&HR_mmy,&HR_memory,0,1); F4 M7 R) z( u; X$ U" g
//showProcessInf(Timeturn_mmy);
( W; E( b$ l! d% RFIFO_pri = &FIFO_save_head;
, ]) J1 f! t& @Timet_pri = &Timet_save_head;5 ~! @$ C# z# h/ M
SJF_pri = &SJF_save_head;
' S' x+ N& d7 I! m- wPriority_pri = &Priority_save_head;
) z9 R: l+ S0 S" l! Q HR_pri = &HR_save_head;
( a% I- [( g- l" g' @setbkcolor(WHITE);
- M9 @" ~" \0 p2 {2 u1 `while(1)8 y( ]: E: [5 A5 k
{! n: X& b/ `9 u9 e* g! m% c
if(MouseListening()==1). T7 z% G3 x) g5 k0 L I5 y: I# ?
flagDraw=1;5 J) q, j. K# O, H Y2 L
if(count==100)
8 d$ {" U8 o- Z e. ]0 e{( N' I; d$ t+ s0 i7 o7 g
if(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,1)==task_completed)0 `4 R4 d% U0 S; m) w
{
% V4 U, ]6 a& h0 E4 zFIFO_pri = &((*FIFO_pri)->next);
* g% _, e5 v, O9 _7 j8 v; q
5 W. V2 @1 W& K! r9 D: G$ X//printf("hello");% K, \8 ~1 }; ^/ [- p
}5 x4 C1 b; k% Q9 b4 _. w/ |
if(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,1)==task_completed)
' W! `# C3 U$ a, S8 P{
& z; ]' g+ v% Q Timet_pri = &((*Timet_pri)->next);4 g" x7 \7 k) l- K$ G& {$ S
//printf("hello");4 G" C8 N" o2 o
}) Q1 y% F; m8 [
if(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,1)==task_completed)+ _" v% m3 W+ L1 n4 i* w1 |( l
{
6 r0 t7 q% G) r' y3 h* WSJF_pri = &((*SJF_pri)->next);5 I, ~5 A, d" n& b R
//printf("hello\n");
- R# `6 Z8 Q) s; i. V* Y, x. R& N}7 k7 ? [* Z. K, u+ B- _: m2 B7 b
if(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,1)==task_completed); x" _" d( ~+ L' j O6 h+ e" A
{: u! y' s3 l- [4 _7 H
Priority_pri = &((*Priority_pri)->next);
: L; {. ~4 n, t h8 `$ H//printf("hello\n");# L, z! c) |& Q5 Q' M9 o
}" A$ Y4 c: c |. V! I" y
if(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,1)==task_completed)4 L5 w b& q. I& A4 O3 ?6 O, _0 f
{
) I' d: h" s1 @HR_pri = &((*HR_pri)->next);% m* d7 s* _7 R6 U; V2 u0 a$ E$ F
//printf("hello");
1 x8 m* C; m; q* t* j}4 ]+ R1 i8 A/ m& @: g& G# b
count=0;( u4 Y4 ~. g+ g- u* g3 U
}( ]" ]5 K" w" y
else
; x5 \. u9 \' W* {3 A2 P{
) n$ z+ u1 \# Z. v' W5 x& Sif(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,0)==task_completed)2 f, B+ j+ S* S# y ?% F
{
, b3 {) M* D" L6 ~& _FIFO_pri = &((*FIFO_pri)->next);# }. s- c$ i; c3 ^. W) ~, K1 Y/ f( C
// printf("hello");2 S6 Q2 Z3 B( P( K7 C2 {
}
2 `2 O& I+ c/ f: X- cif(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,0)==task_completed)% a' e, A6 P9 C ?' {9 _
{
9 Y% h) s m1 {5 `- H' u) U# q" t" QTimet_pri = &((*Timet_pri)->next);
@3 a" Q G7 g% D& m+ z// printf("hello");! w% L) v9 S1 \: y; ~8 P% [
}. p" m" ~ o- s4 e0 ~5 A
if(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,0)==task_completed)
$ I) z8 ^! D5 c{
, ?) v2 M- i! F& n SJF_pri = &((*SJF_pri)->next);
0 t$ M$ X7 G" b+ ]. u// printf("hello\n");
9 U2 C# {! f2 z- Y2 V& s, y( y}, P3 R# C! C4 Q( ~$ B0 _* [" W
if(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,0)==task_completed). S P- k6 e( ] u3 e$ Y% m
{
# p. D/ V! p! r. `9 g# c7 s. rPriority_pri = &((*Priority_pri)->next);
C& v$ Z; N+ A# N0 `//printf("hello\n");
4 V- H3 B* W& u1 |) }7 |} i7 v' l$ n6 x/ S
if(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,0)==task_completed)+ p8 W; t. G' T, A
{
6 ?: ^' C, q# [6 Z( q" d1 ]3 NHR_pri = &((*HR_pri)->next);
- }; a) ]" q) _ V. q//printf("hello");
" ~; C* L0 M* ]8 Y//Sleep(1000);
8 o' V( Y* U: X" K* z* R1 v7 ~+ F}
9 r' ?5 L( Y- Z0 i; ucount++;9 Z8 N* w6 J4 X( ]- ~. W a7 q
}/ S. J0 i* x/ S& {- \
if(systemClock==showTime)6 _$ h0 n3 Y& T6 ^
{
- H2 y9 t8 h! ?7 [/*PCI * p=FIFO_save_head;
# u( H( [; Y- }$ n, ]int i=0;5 _/ k9 r% C# P W
for( ;p!=NULL;p=p->next)* v: N ~8 j0 m n/ U
{
v" Z/ R$ F- G5 i3 lprintf("Id %d\n",p->processID);. s+ T5 O+ E' }; W
printf("comeingtime %d\n",p->comeingTime);
. s3 z4 F2 Z8 i6 X7 Jprintf("runningtime %d\n",p->runningTime);
* i) W, E$ @- h( Zprintf("asdmemory %d\n",p->askMemory);
- O3 @* @, U0 A7 Q& |printf("completedtime %d\n",p->completedTime);
5 P$ c" n3 p w, G* y. w( N0 rprintf("compute %d\n",p->compute);
/ B M4 j# d3 Mprintf("exchange %d\n",p->exchange);' l( V9 s9 r2 [" N
printf("waitio %d\n",p->waitio);* X* Q& y2 _3 H8 K
i++;' s9 l" x1 S+ a% l; ?# b
5 }+ O$ X: h$ c6 I
6 T$ B! P& Z6 P3 M5 U
}* H1 [5 R- D4 a, ~4 _
printf("%d\n",i);*/
1 I2 a1 D3 d. w Wif( (fp = fopen( "data.txt", "a" )) == NULL )
5 s! s( U8 X) K1 A9 W{& w1 ~1 N: @3 ?2 D8 k2 c
printf( "The file 'data.txt' was not opened\n" );
- |& b# L. E+ C% k/ f; \//return 1;
" g( O8 x" w3 ~9 l}1 I# P' a& ]1 N7 B# L/ Z! J8 y
else' d9 {5 w* o6 Z" J
{5 L. I- D" F% X3 E
fprintf(fp,"FCFS \n");4 D% h9 [# j* G: H
for(p=FIFO_save_head;p!=NULL;p=p->next)7 m S+ ~3 ^7 G. G" \7 S9 B j
fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,0 b* ^. {( @, b8 [
p->exchange,p->waitio,p->runningTime);6 p1 `% B7 C$ h- { N) z# o6 O: J
fprintf(fp,"\nTime turn \n");
4 i, F/ Y3 h( Jfor(p=Timet_save_head;p!=NULL;p=p->next)
, U7 c. i! [) c0 ofprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
7 h4 _+ ^ P: M. w( cp->exchange,p->waitio,p->runningTime);3 M' i9 G+ ?; {! j( F/ s* h& |
fprintf(fp,"\nShort Job First \n");
. s2 I3 A: u* k, A& yfor(p=SJF_save_head;p!=NULL;p=p->next)
$ Z8 O$ E4 P0 j2 q; X; Wfprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
( J- }2 I9 E) s8 S5 d8 O. ip->exchange,p->waitio,p->runningTime);. }6 B6 l$ h u9 d' R0 c
fprintf(fp,"\nPriority \n");
" C) \" n/ G4 W) g9 {2 \1 Z$ N/ |6 hfor(p=Priority_save_head;p!=NULL;p=p->next)
! S0 o- {; A; Q9 }( Ufprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,/ Y7 _ ]* E0 L y
p->exchange,p->waitio,p->runningTime);
7 p' H! H4 h* l! Sfprintf(fp,"\nHigh response \n");
; D/ ^& z- o u, _0 q/ N9 N# @) gfor(p=HR_save_head;p!=NULL;p=p->next)
& c. G9 n1 J4 z! g& k: j8 }fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
. f2 C3 ^7 J4 d6 {: H op->exchange,p->waitio,p->runningTime);
# q. N! ~* b; h9 M B/ T# c6 Bfclose(fp);
' } @' U2 [" `6 S! e$ h}
0 G( }8 O4 \9 ^1 z P& SshowRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);
+ I5 ]% ^: W7 C# f; wMouseListening2(&flagDraw,&showTime);0 `) p. t# D& B$ `5 @
}
+ _1 K$ l# R: [: }systemClock++;
/ `" S" H2 w, i0 H @) ?2 Tif(flagDraw==0)6 n3 F6 k9 A! @
Sleep(10);
4 U# m/ f) i j f} ^* O) B4 F( k; d+ k
. ^( `8 o# |; Q3 Q( r4 w5 ~" A
, Y, `+ ^3 E5 S' L. \6 [}
8 h E5 d* a a, L4 y* oint showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR)
6 S3 k7 e) x q4 W* c0 c{
! L- v# ^( Y* I) D1 KPCI * p=NULL,* name[5];7 f1 `/ F- k% }2 O0 P
int count=0,i=0;( @7 g/ W! _9 k: P; X; H
char ch[5][10]={"FCFS","timet","SJF","PR","HR"};
0 S9 e% Y7 y% t4 U* t4 sdouble turnover=0,wait=0,c=0,w=0,change=0,pos[4]={0,0,0,0};( O6 Q/ ]$ m: ^9 J
struct info% w* [& n! |7 B9 p
{
2 Y! r6 S7 N' r3 l9 t2 Xchar name[10];
' ]" {3 ^8 N, ~+ ?& N: Gdouble throughput,turnover,wait,CPU_rate;
9 P5 S* U* w. i/ m0 _ S}inf[5];, H T( p1 ?: w. k% b6 J' C
name[0]=FIFO,name[1]=timet,name[2]=SJF,name[3]=PR,name[4]=HR;
8 d8 O6 f9 c1 ?4 f7 \printf("调度算法..........A\n");
! V( H' K H |$ {. b2 r: d( |5 `printf("吞吐量............B\n");
2 U7 _0 S) K! W( ^3 W! R" x1 cprintf("平均周转时间......C\n");
~# s: O# m) C6 Q3 o/ \printf("等待时间..........D\n");; j+ [: K2 ]) }' A& q; e
printf("CPU利用率.........E\n");
1 v) R) }; x: L' b( O0 Dprintf("A\tB\tC\t\tD\t\tE\n");
1 d% r+ T! M1 n p( pfor(i=0;i<5;i++)5 o5 L$ l, V5 m; b$ j4 k
{; I3 o$ A D, V& f! I/ P5 B5 B( e U4 \
count=0,turnover=0,wait=0,c=0,w=0,change=0;
9 v" m L$ b( f, U; t/ @for(p=name; p!=NULL; p=p->next); H6 Q- f# U. u5 ^! V
{
( R7 z2 t [1 u; H- @count++;
r1 |, _6 Z+ T8 Qturnover += p->completedTime - p->comeingTime;
7 e2 M7 \+ k# U1 n/ H; M# `: Y- V3 dwait += p->runningTime - p->comeingTime;$ _1 @2 A, A; V- b) k$ e, O# [
c += p->compute;
# M7 k# Z4 C9 u5 @; m# jw += p->waitio;
6 X H& g7 T7 m0 [, T" G* i% P* \change += p->exchange;8 W7 |* w& @! `6 P
}
" u: d8 ?7 @% b8 f) T) \/ Pturnover = turnover/count;* w$ W' o* y h/ Y
printf("%s\t%d\t%.2f\t\t%.2f\t\t%.2f\n",ch,count,turnover,wait,c/(c+w+change));
' g% d4 y+ F4 j7 d" c" cstrcpy(inf.name,ch); j0 E6 d, G2 Y" K$ h, W0 l
inf.throughput=count;
' r6 y# f5 m! K1 s/ A' d! `" ~inf.turnover=turnover;
, H" b5 N& ~9 h# jinf.wait=wait;
1 l1 w4 d' t7 j$ D# g( j* H1 qinf.CPU_rate=c/(c+w+change); F' U3 Y4 ^9 ]; `! y
}, C3 [$ _6 z9 ^9 O4 ]- [
//画图3 h% M3 k4 a( d$ g( [
//cleardevice();% [; M* B2 o0 C& a' b3 f
line(0,600,1200,600);
2 N- ]! Y2 E0 r9 }- rline(10,600,10,200);. t8 v& y( U. F N' X Z
line(10,200,5,205);6 }1 e' `. c6 {6 O* y. ]0 p
line(10,200,15,205);
/ x9 m1 R ?& g" c- Wline(310,600,310,200);( Z, X% {8 i( j) j$ o, X
line(310,200,305,205);
0 d7 V8 Z. }$ a6 m0 eline(310,200,315,205);
1 w+ i, `0 B% Q K5 L: ]line(610,600,610,200);
& v0 Q# Z- O8 y+ ]9 _5 t# Lline(610,200,605,205);
# v5 b z: \ E0 ?% q! Tline(610,200,615,205);4 W' A% o# c( i- s# L; c
line(910,600,910,200);
2 Q* C2 N5 w6 m$ ~$ Z3 lline(910,200,905,205);1 g* {+ k! C; z- m7 u! s& s1 e* X
line(910,200,915,205);//最高的长度400,宽度均为40! O# |1 k2 w) n4 Q
for(i=0;i<5;i++)3 V( ]" S$ g$ X' v% x9 U0 K
{2 f. V+ a1 q7 k* d8 t
if(inf.throughput>pos[0])
( c4 _, o- p: o! [2 ?) lpos[0]=inf.throughput;$ r4 j& G# I. x9 l
if(inf.turnover>pos[1])
5 B' m/ ?7 d: h- qpos[1]=inf.turnover;
2 f) @5 g6 d7 a) cif(inf.wait>pos[2])
7 I2 }& ~. r4 s' `: f5 C0 B5 [4 Ppos[2]=inf.wait;4 }3 w: o; w3 C
if(inf.CPU_rate>pos[3])6 k( L; U1 Z B: y7 z) E& g
pos[3]=inf.CPU_rate;9 ~2 Y6 I1 j" A( x: J3 B
}) f( [7 p+ q7 o3 s4 l
settextstyle(30, 15, _T("楷体"));
w( b2 |. m9 {7 C4 {2 u$ Q* dfor(i=0;i<5;i++)
& e, v* f( J( g, G{
k) ]; A1 ^/ t- B2 C3 A3 w# j5 aswitch (i)
: H. D8 m& u* u6 ?) J4 h( b8 [4 M{+ r* p8 I+ n" k, x" Z1 S" g- V! k
case 0:
7 V8 q: y X4 _setfillcolor(BLUE);
& g2 I8 r9 b0 e4 n* mfillrectangle(100,50,150,100);
, l" @8 j8 @- p. _! fouttextxy(160,50,"FCFS");
0 M* c' m) z3 i Q. @7 obreak;
2 t5 F- L0 }5 t Tcase 1:5 n4 o/ h p( m6 b1 J+ e4 b
setfillcolor(RED);) E6 ?6 n. D$ i. G
fillrectangle(250,50,300,100);, c' ~/ i- d. v
outtextxy(310,50,"timeTurn");
! ]+ t" k( ]+ F' @' Pbreak;
5 I6 s+ G( w9 m) B. Icase 2:1 n) ^. T/ }/ t5 \5 H; P& _3 e3 _, l
setfillcolor(YELLOW); X* q! R6 B6 f! h/ t6 S
fillrectangle(450,50,500,100);
* j6 A! J z0 a+ ?. @+ ?outtextxy(510,50,"SJf");
6 F# C% T7 G: T7 lbreak;0 L7 W" g+ B( j) H, y
case 3: B+ O9 V' g; l" I( o! v
setfillcolor(BROWN);% m Q% K' u2 d/ M1 H9 |0 b$ I7 z
fillrectangle(580,50,630,100);
! p' k9 f7 P, S0 p" E( k% |/ w2 p4 Couttextxy(640,50,"PR");$ w8 q2 ~3 @( I9 P
break;
8 A" s+ t) H7 a( Qcase 4:
9 e$ p4 a e" Hsetfillcolor(GREEN);
4 e! V- r& L2 J; a* g- K; n9 @fillrectangle(690,50,740,100);. j2 z* [2 o" I! [
outtextxy(750,50,"HR");
# z5 [ {" R& a2 S2 @1 f9 Hbreak;
4 o+ `/ o/ h# J2 W y+ t- W}
2 g' c2 |: N6 H" a4 V% U' ~# L7 Lfillrectangle(50+i*40,600-(int)(inf.throughput*400/pos[0]),90+i*40,600);
& i" b) y9 N# l5 q! l9 Ufillrectangle(350+i*40,600-(int)(inf.turnover*400/pos[1]),390+i*40,600);: C5 C3 H+ r1 g- c9 m- f
fillrectangle(650+i*40,600-(int)(inf.wait*400/pos[2]),690+i*40,600);
6 a, D) K8 {2 y3 ~! Tfillrectangle(950+i*40,600-(int)(inf.CPU_rate*400/pos[3]),990+i*40,600);
* H0 q- t+ i- C u( {" J9 E$ e! z5 q; @( C* J
, j0 \0 f* s6 g! W; q6 |1 j}' ? b; u, B4 {, d/ u8 @, r
outtextxy(100,150,"吞吐量");8 ?6 K8 }; z) Q: X
outtextxy(350,150,"平均周转时间");5 a8 {" d" T: ^9 z: d, i1 t# J& E
outtextxy(650,150,"平均等待时间");) V$ Y# |6 s6 a( ]* l) n
outtextxy(950,150,"CPU利用率");
( j$ D; u# [( Q6 ~6 B0 Vreturn 0;
5 o* g3 Z* j# i* x; { ?}
' d3 L9 O7 e n* ^% F% wint MouseListening()5 q: K% k0 m/ q9 v
{
5 M# [1 J1 B, K4 H* l5 N9 YMOUSEMSG p;
% l, I$ ^8 C0 A2 s6 ~if(MouseHit())
+ f2 y3 L" Z; Y/ j{
: @( i% s% F) L2 H- hp=GetMouseMsg();; Q/ g' Z* ?6 e! v
if(p.mkLButton==true)( H/ ?! o" E2 o* R6 @
{( U; \$ G( E# h( _0 [- X3 \
if(p.x>0 && p.y>0 && p.x<400 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0). G( _7 g! `* }9 q+ K: ^; q* L: l
FLAG_FIFO = 1;* @( C X9 v3 q8 [- p
else if(p.x>400 && p.y>0 && p.x<800 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)' m a$ u3 N0 s/ ^) i3 ~
FLAG_TT = 1;% ~' A' A" y" ~! c4 l
else if(p.x>800 && p.y>0 && p.x<1200 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)9 a1 Q6 F3 {; p
FLAG_PF = 1;
# ?# K( g5 h5 e5 h$ N i" s5 ]: U/ ?else if(p.x>0 && p.y>325 && p.x<400 && p.y<650 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
- V1 d% F1 _: f/ K! D1 b7 ?1 IFLAG_SJF = 1;
- {- f$ O$ P! relse if(p.x>400 && p.y>325 && p.x<800 && p.y<650 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
" V+ a" z" a8 g$ {/ G9 B, H( bFLAG_HR=1;; o( u% G1 {8 C7 K- y
else if(FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO >0)
: ?% R* l) ^# ~9 p' I! K+ w{
0 p5 X" K. _+ jFLAG_HR=FLAG_SJF=FLAG_PF=FLAG_TT=FLAG_FIFO=0;1 [. h& U5 Y2 y4 B; l
clearrectangle(800,325,1200,650);! A& }: @" G3 B5 r A
}1 i+ d- r$ j, e+ k; |* Z+ X
else if((FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0 && p.x>890 && p.y>455 && p.x<1110 && p.y<510 )" _# L: @; F4 D! Y' h0 k) {
{
: ?6 D0 O. l9 n7 j5 u) gFLAG_show=0;
7 }9 X! A. p- ~9 fcleardevice();5 q/ x% G% i- D( D& B' r+ X8 D7 O! R
return 1;. U1 W+ h! v) H' T; Z
}6 z- h! ?1 G) L D& X
}' }' _( t: \6 @* c% R) W7 Z
}' l* q+ M7 k4 a9 ^. W3 N7 L
return 0;
6 h; N1 Q+ n2 r2 O$ G# h}
% S+ h, l: w" Z" f; {2 M2 g! eint MouseListening2(int *flagShow,int * showTime)
" s3 G. a( e4 T, ~6 h{4 p ^. {9 i& F+ S5 M) o
MOUSEMSG p;' `9 ^' E) l# x
rectangle(1150,0,1200,50);
& s7 M; ?" P3 R4 o* Uouttextxy(1160,10,"X");
& \! I, }& C. b' k; |# K+ A1 a, ywhile(1)! W( b) s, t9 @# g- Y* P6 X: X
{
$ V6 @% T6 B; t* ?+ \! c3 rif(MouseHit())
4 V0 u/ u5 X2 D8 ~; X- a8 w{5 y' Q, q& s" S# v' @
p=GetMouseMsg();
2 u# G0 |9 g- R+ A% I1 s- [( Iif(p.mkLButton==true)& y7 h. k: K. E5 I) [
{
5 l7 Q6 A$ z7 t; Eif(p.x>1150 && p.y>0 && p.x<1200 && p.y<50 )% i1 X' `/ D$ M5 c: ?1 E2 H& L4 f
{
. a1 N/ U4 x1 M( ?(*flagShow) = 0;
0 c8 A- D5 f& {0 B! h. m6 U(*showTime) += (*showTime);$ {& g1 d5 s7 {) B- r
FLAG_show=1;+ a z8 Y% _- k
break;
. T' ^% y, O9 c# G3 N5 G/ Z& N) c}
9 N6 t# `; D2 }: \) q% i. J& \- i8 M$ h1 P, g
}
$ I( T' y g- g6 ~. q} h' ?" t2 L# k4 J) R0 _; j0 {6 @4 G
Sleep(20);2 g7 p2 o- X: |7 s/ h* z+ F, s
}0 x5 q; A8 [5 ~& [
cleardevice();( Y% N7 s P0 H
return 0;
) S2 x* g: f4 X& X! T' o}- V: b$ J. |2 h# i
int drawPerformance_FIFO(int x,int y,int memorry,int com,int wai,int cha)8 V9 ^9 D( ~; c" B8 n) E; v* |
{
( f0 {. a9 Y J6 W' N. qstatic int info[11][3],num=0;; J8 k3 S/ {, I
int i=0,j=0,pos[10][3][2];3 a5 h3 M4 j1 G7 j
float temp,t;
n' D7 `8 X$ U+ Y//画按钮,不属于FIFO图的范围8 c2 I% z+ I; d& x
if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0 && FLAG_show==1)* A0 J3 V9 y6 V& Z8 e- O
{1 a! M: K( h Y1 ^( H1 i
settextstyle(30, 15, _T("楷体"));# F, \1 N! Q* d4 z5 p4 M
rectangle(890,455,1110,510);, m0 o7 C; s# S8 _. G8 y( T
rectangle(900,465,1100,500);
5 a: y$ ~; u% B' vouttextxy(910,468,"查看运行结果");; h' A- j2 E& ?. v, Y" b
}, `3 g1 Q6 q1 C6 e7 P/ P6 q
//结束画按钮) y/ h! W+ i8 w3 L1 L
info[num][0] = com; s: {2 n) ^ q7 p8 O
info[num][1] = wai;
( ~9 o3 b& z1 j+ ainfo[num++][2] = cha;- m! Z- }! y1 q/ K
if(num>10) //存储10个点8 M J6 h) s. U/ C& D6 Q5 m
{3 e* {. t2 B- w2 L" N1 S7 U9 Z& s
for(i=0 ;i<10;i++)% Y; m3 h& D& c. q- ?
{! G) f! i0 q3 {1 a
info[0] = info[i+1][0];
0 b$ n8 Y8 a; ~+ \4 |+ jinfo[1] = info[i+1][1];
( s, F0 ~* I- Sinfo[2] = info[i+1][2];: q6 @" ~) D8 T+ l' L. ~+ Y/ B
}* W: x! Q' n& ~
num--;
& Y$ l- {" a. z0 N}
4 r; d7 ?+ H! L$ |if(FLAG_show==0)
* h- }' N! H+ Sreturn 0;
6 y3 \, C* q. O0 B4 sfor(i=0; i<num; i++)
* G8 u5 }% u; o9 n{, t, v$ L0 U0 U( b: [1 h5 ]
t = (float)info[0];
0 N$ R$ N2 k8 g, O1 R( @: _' S! Stemp = (t/101)*90;
. P- q# Z, W( W/ D3 g% _5 Z! Zpos[0][0] = (10-num+i)*25+x+100;
( V% N/ k+ k; @8 y( [: E# _pos[0][1] = y+110-(int)temp;5 g9 P7 I, u" Y
t = (float)info[1];) S1 h, N% f$ X( n. c2 g' g; W
temp = (t/101)*90;
' a& j$ z, E5 r9 w ~5 w. Q5 ]- zpos[1][0] = (10-num+i)*25+x+100;
2 O# s( Z6 i' y9 k: D! `pos[1][1] = y+210-(int)temp;- r) `8 O3 p& s# }$ F! J
t = (float)info[2];# J5 u, q- L+ q" [9 z% ~/ V
temp = (t/101)*90;0 ?: U! Z$ l, x4 P! _" ?
pos[2][0] = (10-num+i)*25+x+100;
4 j) y- b5 l4 o0 |/ Gpos[2][1] = y+310-(int)temp;
3 W" s& A% Y# y& y% ?+ z( C `}# Y# _& T! w! F8 C% K
if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)" u0 L7 x% u+ D5 a. x: _
{
" L0 P8 K, d& P' b" a& H7 L {clearrectangle(x,y,x+400,y+315);1 Z- F% E. S9 A& b# I) h: _
settextstyle(20, 10, _T("楷体"));
: }/ B* a6 H# Yrectangle(x,y,x+400,y+325);
* l: a) V5 v5 `# N8 q9 M: w. fouttextxy(x+40,y+10,"CPU"); //画柱状图, v( ?. ?9 k: f( w1 F
outtextxy(x+45,y+10+100,"IO");% M5 f# R+ q( h( H
outtextxy(x+40-15,y+10+200,"change");
9 U& A J" p' ?5 q$ f& p& Yrectangle(x+35,y+30,x+75,y+110);% C: j |' S6 y. k( M1 b) E7 d
rectangle(x+35,y+130,x+75,y+210);
2 \+ D3 K) S% C2 {% _8 _: }( irectangle(x+35,y+230,x+75,y+310);2 Y( V$ T T% A
outtextxy(x+180,y+310,"FCFS");( A. c3 r) E# C- ]+ x( S/ r+ Z
t = (float)com;& I4 V( S9 {$ O
temp=(t/101)*80;
, ?* f$ c/ B) H4 A! h* vfillrectangle(x+35,y+110-(int)temp,x+75,y+110);0 V* A% H n! {2 M! X% j
t = (float)wai;9 T4 l& o! g: `$ h! E
temp=(t/101)*80; R1 G) B6 h& r9 a5 G4 o
fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
$ [0 I3 V" l6 @7 b3 J) p: z" K' |t = (float)cha;, m( M- ~! ]' Z! L+ n
temp=(t/101)*80;
K' K: O2 n! q8 I) Z. Wfillrectangle(x+35,y+310-(int)temp,x+75,y+310);8 {+ C, ^/ L O: x. G8 g0 d9 V+ v
for(i=0; i<3; i++) //画坐标 high=90,length=250
6 D" @7 s7 K: V{6 Y0 z4 I& ^8 S1 D9 m% f+ p
line(x+100,y+110+100*i,x+350,y+110+100*i);
( t0 C7 }( \% Kline(x+350,y+110+100*i,x+350-5,y+110-5+100*i);5 ], P; I: M; r) N+ K
line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
; U; \$ ?9 H) K9 z' O
6 d0 J( G$ q, r1 @* e/ D5 P3 pline(x+100,y+110+100*i,x+100,y+20+100*i);
7 {1 c! f" T# r ^/ P- lline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
) {: E; _( h# b- f. Rline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);
3 J" x# C4 I3 O: H! Tfor(j=0;j<num-1;j++)( D! R0 [* @. W+ M! R* R
{
8 u& y8 F, L v4 ]# G* i: nline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
1 n( ?0 v: Y7 t4 S; eline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);. U z' \2 _. d1 I
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
! S! u' ?" ~) y/ C' D}
5 ]7 G* t7 r. g* e! k; J& n}
) [$ { y; d3 l7 z+ }}0 ?9 ]: w; y$ [3 v
else if(FLAG_FIFO==1). b! ^: K* X4 Y
{4 x1 d/ S; {& F3 S3 w1 T
x=0,y=0;
# w9 b# Z1 p; t& o: f! rfor(i=0; i<num; i++)9 ]% x2 E5 S( N0 d1 t* i
{+ ?, v, \$ X( J& U; ?7 x( a
t = (float)info[0];
. I8 m# J% i6 b$ A% Ktemp = (t/101)*180;- t( Q7 l( p V
pos[0][0] = (10-num+i)*50+x+650;
) M" I# Y( v. e5 b% U9 O. ppos[0][1] = y+210-(int)temp;5 d* [* G9 h4 [
t = (float)info[1];" u; R( t- W$ d% Y5 ?+ Q8 E
temp = (t/101)*180;
! g! C) h) f c. \' Z" s1 ^2 ipos[1][0] = (10-num+i)*50+x+650;
% v: u1 W4 Y l8 k4 Vpos[1][1] = y+420-(int)temp;
; [) D( ]7 s. c. a3 At = (float)info[2];) @" z) i2 g: u8 P
temp = (float)(t/101)*180;
+ I5 r' G$ @ i a6 apos[2][0] = (10-num+i)*50+x+650;
2 o: i a6 [* a- F0 `$ x6 T9 Ipos[2][1] = y+630-(int)temp;' ] t8 b5 v& J# h m
}
" ~ }- x) D+ tclearrectangle(x,y,x+1200,y+650);$ `0 e- G7 X6 W! D: h) w, m
settextstyle(40, 20, _T("楷体"));) \% H& @! C0 M2 q, u: n
outtextxy(x+50,y+50,"FCFS");1 ^3 S3 W8 f6 j6 @& {
outtextxy(x+280,y+20,"CPU"); //画柱状图9 Q4 z+ \* p, G' ~, K
outtextxy(x+285,y+20+200,"IO");
5 n ]* v' |* ^- a5 h; x1 Louttextxy(x+250,y+20+400,"change");. B7 h" B7 Y x
rectangle(x+270,y+65,x+330,y+215);
4 @. { E, r/ C' y) p* Nrectangle(x+270,y+265,x+330,y+415);
# E9 {+ y; C5 lrectangle(x+270,y+465,x+330,y+615);+ `/ Z! e/ @" T
outtextxy(x+290,y+620,"TT");# e, J- _1 X* P1 f
t = (float)com;# k. l% w$ `; q3 Z
temp=(t/101)*150;- \ K7 Y' e ^# V' {
fillrectangle(x+270,y+215-(int)temp,x+330,y+215);
8 R" V4 `$ ^, Gt = (float)wai;
* q, k: T$ X. W) Y$ g# _3 ltemp=(t/101)*150;, U; N( O7 N8 }. K/ U; h/ _* k3 Z
fillrectangle(x+270,y+415-(int)temp,x+330,y+415);
8 x: g9 {/ `- J1 o ^( _t = (float)cha;
( T" X- n* \8 d( T! ~, T& ?temp=(t/101)*150;
; e/ K# _0 B. p5 x& nfillrectangle(x+270,y+615-(int)temp,x+330,y+615);. i6 u5 U/ v- D: k
for(i=0; i<3; i++) //画坐标 high=90,length=250
5 J' q* W0 O9 l! l& P+ J. ~{& R" A: ?& Z+ c) O( z
line(x+650,y+210+210*i,x+1150,y+210+210*i);7 Q& d, D% ^: b' ^( q1 e
line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
% d7 f, L1 F( ` g- ^# }line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);# _# L/ f$ T5 |! H; J
+ H& e s! Z4 t$ i1 Bline(x+650,y+210+210*i,x+650,y+20+210*i);
8 A6 H5 B5 ^* ]6 a8 Bline(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
: s4 E4 J4 r! W x+ I$ A5 y" d0 O7 wline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
4 }3 U9 V& d! w' V4 s0 {for(j=0;j<num-1;j++)
9 Z9 I( a9 Q& M* Z7 r{- A; `2 C ~3 g6 y) n4 x2 s
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);. i1 C; ^( O* k1 i4 @: V
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
% U% N4 b* B- U T; ~. a1 Eline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); + S" Y; X" |. o
}, B O/ x+ H1 P
}
/ i: L, h; d! r4 \; t; ~. L}
; f, X7 |1 s- _6 B. C* J$ o0 d; f3 c6 h( `$ }- T4 Q$ |6 X
6 T# P3 A" B; V3 V" \3 {6 j
return 0;4 m; }" L' k0 J V; J, B2 j
} E6 z& M$ D x& a4 D: L/ I
int drawPerformance_HR(int x,int y,int memorry,int com,int wai,int cha)
( N) k* c/ a3 B( [! @{# p3 C, @; h' ~! o& l/ N1 n
static int info[11][3],num=0;
. h/ \% n$ k7 Vint i=0,j=0,pos[10][3][2];
3 ?' f. p& M6 D/ p Rfloat temp,t;6 v( s! B; c* p* H) B1 O
info[num][0] = com;
) u5 P, B/ [. l+ E Jinfo[num][1] = wai;4 g% j4 \, }' B7 @0 p( X4 s4 o _* T
info[num++][2] = cha;$ T0 U4 ~3 b( P" R% T
if(num>10) //存储10个点
% D; w3 k( Z( |/ N0 z{# `: F) M6 O ^6 x3 z4 j2 x
for(i=0 ;i<10;i++)
1 u3 z c z7 e1 b) p+ }- @{( ^0 n; ~, f$ I4 G* f
info[0] = info[i+1][0];
2 h9 { `7 }+ Z8 xinfo[1] = info[i+1][1];
+ z0 ^2 P+ I7 N$ I4 Xinfo[2] = info[i+1][2];" ?! E; ^* c: k: A# n
}
) F8 s4 S5 r" z# @num--;5 W/ [+ X# Q9 {1 C6 A
}% L0 M/ i) p% B W
if(FLAG_show==0)+ F4 G( j9 e- J' |# T" Q, \$ ?
return 0;
3 g( a7 A6 h) Kfor(i=0; i<num; i++)
7 \6 x4 v+ T: d- F{
5 ^7 }+ X; N8 Z& U" u6 V9 O- H8 zt = (float)info[0];
+ ?( n5 @. J3 v9 a# M- dtemp = (t/101)*90;! K3 c8 y& H+ b3 h7 {
pos[0][0] = (10-num+i)*25+x+100;
7 T. B) v6 D4 U$ g2 Jpos[0][1] = y+110-(int)temp;: b; E. Q! l9 H! c
t = (float)info[1];8 s- w1 E5 K6 D0 R2 I) O
temp = (t/101)*90;
2 m) l7 \# d1 @7 c8 v- {" N8 @0 l! p. d% upos[1][0] = (10-num+i)*25+x+100;& Q7 D( U/ c' s( \! m! d
pos[1][1] = y+210-(int)temp;
2 l" l5 J. X9 m7 `/ @3 ~: Ft = (float)info[2];
! M. J2 i6 H; W( Vtemp = (float)(t/101)*90;, Z) u, V0 W% X& ?! x1 i0 Y( m
pos[2][0] = (10-num+i)*25+x+100;
& F1 i2 i r' k, g; D. y0 A7 @8 G4 Ypos[2][1] = y+310-(int)temp;
: k) D F" N( b2 z5 k}
* A5 t& a. l( Q5 I4 }if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
: U+ d" q: Y9 _" e1 b9 o, W0 N{
# o9 V5 l& E, c4 r6 r/ _clearrectangle(x,y,x+400,y+315);) A( {* K5 `6 _" g) _9 D
settextstyle(20, 10, _T("楷体"));
2 E7 j7 [! `5 }- h# u7 d# J) Jrectangle(x,y,x+400,y+325);
# P: t$ d( M3 Z5 n, [outtextxy(x+40,y+10,"CPU"); //画柱状图2 X M4 ]' H3 P' u% ^
outtextxy(x+45,y+10+100,"IO");: @1 w' P0 `+ K, p
outtextxy(x+40-15,y+10+200,"change");# ]: v) e {/ ~6 {+ O
rectangle(x+35,y+30,x+75,y+110);7 p5 d. q: s) n9 ~
rectangle(x+35,y+130,x+75,y+210);+ i: M/ @4 a8 Y% o6 g
rectangle(x+35,y+230,x+75,y+310);3 G/ g1 s8 ]0 Z+ B6 M( P: J
outtextxy(x+180,y+310,"HR");1 Q$ P3 j/ B8 k3 Z3 Z
t = (float)com;
# A! |4 D7 ~* f* _! L- D1 N* R/ Itemp=(t/101)*80;% f0 W( f6 w+ ^6 j8 }7 J- @# _" ]
fillrectangle(x+35,y+110-(int)temp,x+75,y+110);6 l! {: w3 ~8 F2 X9 j% }
t = (float)wai;
/ ^% w, h4 }8 W/ ?( Z; Gtemp=(t/101)*80;
$ D/ ^! ^; f0 m7 `1 ~7 Efillrectangle(x+35,y+210-(int)temp,x+75,y+210);
) w; {9 W; A6 N& m: Vt = (float)cha;
7 F+ P L0 R3 ^6 Btemp=(t/101)*80;6 x; H k% `3 N9 o
fillrectangle(x+35,y+310-(int)temp,x+75,y+310); P; |2 ]- c) i) H
for(i=0; i<3; i++) //画坐标 high=90,length=250. u z$ e( `& J: l5 `/ e
{" z' X# W( X/ Q+ J8 A
line(x+100,y+110+100*i,x+350,y+110+100*i);0 g9 g1 ]7 G/ s/ I
line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);5 y7 e, F( l2 @2 N: i! j
line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);1 {+ d8 U" p4 W0 x1 X. }1 r
X" E3 z* d$ A& M1 Qline(x+100,y+110+100*i,x+100,y+20+100*i);' C: o( ?' A5 K% [, V
line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
8 O4 @) p* M3 j7 W$ x! pline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);" [ t, @; i6 W0 J* x9 D( t
for(j=0;j<num-1;j++)& ^8 @7 V9 x; ^
{
3 w6 T$ w7 u: L9 \5 sline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);/ j I& i/ P* s! Q
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
: x+ ^4 H7 I! |# w/ @8 {- mline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 6 Q8 I+ B) [, r3 x- O
}8 Z$ j+ C2 K. V
}
& s% @4 D$ d+ F1 a4 ^- i" T}
+ M" i" R) x& t: F! g$ velse if(FLAG_HR==1)& o4 x" O$ ^4 l8 V, T
{' r/ A* B( w% P ^* v' ]9 m. P
x=0,y=0;
: o( y+ |/ |5 Y- b' H/ E! n8 lfor(i=0; i<num; i++)4 e) r2 B& S4 \
{! | w$ h1 k; w8 ]! v; v( g1 x
t = (float)info[0];1 C2 V. \" s, L; v5 B
temp = (t/101)*180;1 D4 l" J2 i$ L
pos[0][0] = (10-num+i)*50+x+650;
& t0 z, v0 \7 P2 \6 c( Apos[0][1] = y+210-(int)temp;
) Y# i& d* ^' n4 Q! ^ Bt = (float)info[1];' O. H% v6 {. N' _ D% I b, C
temp = (t/101)*180;# Q2 k! _- I7 [
pos[1][0] = (10-num+i)*50+x+650;
9 Z% f8 V/ a2 z4 W, Xpos[1][1] = y+420-(int)temp;
* x( D. d: c+ B& w: |: \% ^t = (float)info[2];$ K! C2 l- u+ ~* X x
temp = (float)(t/101)*180;8 o( E/ y+ Q: Z6 \
pos[2][0] = (10-num+i)*50+x+650; l0 j+ t! w- n# T7 H
pos[2][1] = y+630-(int)temp;* f7 S3 M+ b. j% p- P
}
9 Q/ S2 j& s- w8 l+ L: Q* nclearrectangle(x,y,x+1200,y+650);4 J1 O5 O. r6 k$ [" N |
settextstyle(40, 20, _T("楷体"));. }% F# x2 ]' c1 u [
outtextxy(x+50,y+50,"HR");# I! D/ { C% L, F7 r9 Z
outtextxy(x+280,y+20,"CPU"); //画柱状图
1 b+ C! D6 h* q/ g8 G* Fouttextxy(x+285,y+20+200,"IO");
% ^% c0 _3 N" E, douttextxy(x+250,y+20+400,"change");9 Y4 I2 p& w' o" |6 i
rectangle(x+270,y+65,x+330,y+215);
4 m' P" {1 k& |- b; c) G7 t6 G. T Erectangle(x+270,y+265,x+330,y+415);
' p+ J- C+ T6 m# R. U/ ], z, Lrectangle(x+270,y+465,x+330,y+615);- y8 a/ E: q% j4 a0 A
outtextxy(x+290,y+620,"TT");
* H& ?: ]" z+ ?8 }( P2 n* n# a0 Wt = (float)com;& G. b3 q7 v( Z
temp=(t/101)*150;& }& @& d: K1 ^0 n8 c0 F; f) y! l
fillrectangle(x+270,y+215-(int)temp,x+330,y+215);2 Z; \5 I( n- b( z0 e- p
t = (float)wai;( U) ^ F, D# D
temp=(t/101)*150;
: T! m, }. e4 X; @! o9 xfillrectangle(x+270,y+415-(int)temp,x+330,y+415);. @) T" a" x; K
t = (float)cha;
$ @% ~ e8 A& e/ s- t4 Mtemp=(t/101)*150;
# [& P" @) y( I8 u. sfillrectangle(x+270,y+615-(int)temp,x+330,y+615);
; v! L9 P5 o% k5 W1 n( f9 rfor(i=0; i<3; i++) //画坐标 high=90,length=250" \9 I, o: O I
{- ~! k' \4 k/ p! i5 B8 |1 N
line(x+650,y+210+210*i,x+1150,y+210+210*i);8 Q( v& n7 J4 }# l' \' Z) s
line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
' H; O0 X2 O" y: B4 E$ kline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);/ s. r: _% i( V+ k. m* l
5 K8 s5 f) ^; ] `8 ?1 p* x
line(x+650,y+210+210*i,x+650,y+20+210*i);
1 P) A" y% ?5 x, [line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
( J k4 q1 z1 y$ e5 l8 N9 m: i' Yline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
5 [4 i! r; J) ?: i+ C9 o$ W3 U9 qfor(j=0;j<num-1;j++)
- F% r9 [) ~" P( u{
( ]. P" g' q0 `. aline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
' N% v4 c5 p- {2 H& z, Bline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
# e( A1 Z7 w/ A+ Iline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 4 \" P0 j; o0 V* i
}7 H) O0 |9 B8 y2 p% h
}$ ]: m4 o+ j) h+ @. Q/ x
}/ B0 b ^- \2 A, I1 z E: Y2 T
* `1 `' V8 r+ s: ^+ s2 J, o, [
" H! }- U0 b5 K1 Xreturn 0;
2 \9 {4 z% l9 s7 [) [}/ p) d. g; k- ~5 ?9 K2 t9 s. W9 `
int drawPerformance_TT(int x,int y,int memorry,int com,int wai,int cha)
9 u+ r q1 O9 h5 e1 [9 o{
4 X( Z0 z/ i+ [- x. }static int info[11][3],num=0;9 [$ \. }! x; Y9 F) s; {9 E! E
int i=0,j=0,pos[10][3][2];9 W$ B+ e2 Y! m5 S( n6 Z& H
float temp,t;
5 ~9 A8 v$ n1 Z9 @$ o; d0 ], Hinfo[num][0] = com;
" U1 F. M+ W& A: s# e. [info[num][1] = wai;
% W6 N% J; _8 T& finfo[num++][2] = cha;
- @" s) X0 O2 W: xif(num>10) //存储10个点
" U9 N6 `; }: X! E9 I6 ?# i5 [( I{
7 B- n" ^1 k$ x0 |; I/ x; ffor(i=0 ;i<10;i++)4 E. y" N- r2 g, N# ^1 n
{3 C1 |' e, ^4 t2 I
info[0] = info[i+1][0];
* J+ ]# K7 W: t+ t* \/ Qinfo[1] = info[i+1][1];
- V' n* W" L) d9 ~$ J" x8 pinfo[2] = info[i+1][2];0 @/ T1 U: J$ j9 X) p
}2 R, q I7 N2 L) `
num--;: m* i: G. c: P" f
}
+ ?8 ]8 w2 }0 J; K0 _) M. K# j" W( ~$ Fif(FLAG_show==0)! q4 w9 c" B+ e& E+ a$ h2 k- j2 x
return 0;
& _. Z7 C, Q0 Z9 M9 N- |for(i=0; i<num; i++)' m1 q0 N5 m" H. d# x% K
{6 L! O0 y6 p# v( d4 |4 u8 F" T0 O
t = (float)info[0];6 d4 E) X* O2 v
temp = (t/101)*90;
- G" B/ i; A' M/ F1 _# O+ O5 {# n q5 @pos[0][0] = (10-num+i)*25+x+100;* V+ V/ S, s O1 E
pos[0][1] = y+110-(int)temp;5 u! |9 Q7 L, c( Q
t = (float)info[1];1 i, G0 B; Z0 q1 {9 q9 F1 }
temp = (t/101)*90;* D4 S% }0 n1 F: _7 D
pos[1][0] = (10-num+i)*25+x+100;
D% H2 i" }. u8 V8 ypos[1][1] = y+210-(int)temp;0 q- n/ G6 [ w7 z
t = (float)info[2];
* H7 G- f- u& q& ]: ^3 ?temp = (float)(t/101)*90;7 \0 [- Z* r4 U( y
pos[2][0] = (10-num+i)*25+x+100;
4 j, \' W6 W, r. Cpos[2][1] = y+310-(int)temp;9 h3 V# x& W& K: I
}7 _; u) E8 d; c" [0 }) V
if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
5 ?( h: y8 P; \" }0 b$ c{
+ o( I0 s( S" n W. ~; I* e; n n6 Zclearrectangle(x,y,x+400,y+315);
5 X( v1 c0 ~# c0 _% g# m3 ?) ~, y' C9 i- Fsettextstyle(20, 10, _T("楷体"));
, w$ o# V9 u/ O: brectangle(x,y,x+400,y+325);
- w0 _1 b. [! ~outtextxy(x+40,y+10,"CPU"); //画柱状图
) n6 n8 u+ A Nouttextxy(x+45,y+10+100,"IO");8 h0 y0 q5 f8 }; f5 O8 G# j# @! |
outtextxy(x+40-15,y+10+200,"change");4 z; T/ @- o6 v' o
rectangle(x+35,y+30,x+75,y+110);
2 c6 k K- u$ w1 j3 M. Frectangle(x+35,y+130,x+75,y+210);
% J! v# T6 H% i7 @2 l1 d( vrectangle(x+35,y+230,x+75,y+310);
* O6 S5 n& L E' Fouttextxy(x+180,y+310,"TT");/ d u, F5 m4 d) L7 `5 L2 s: X: Q' \
t = (float)com;+ N8 y, I1 {4 ` P( j! E
temp=(t/101)*80;
2 E" v D4 `: |% |! L& O$ i1 O4 \fillrectangle(x+35,y+110-(int)temp,x+75,y+110);* A0 r* q- \1 D
t = (float)wai;
* S* I; P) V0 f5 H! F- _# ftemp=(t/101)*80; ? J" Y# ~$ s7 M1 P& b) P
fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
. N6 ~3 \3 h9 b9 D/ \0 B' v, R' yt = (float)cha;, N7 P- P; f1 E5 c
temp=(t/101)*80;( i# R3 v6 H" ?
fillrectangle(x+35,y+310-(int)temp,x+75,y+310);
- h9 s* R3 r& e* C/ I# m% x; O; Kfor(i=0; i<3; i++) //画坐标 high=90,length=2505 ]! L5 W6 F+ I( `
{! }/ D, p" n+ x; Y
line(x+100,y+110+100*i,x+350,y+110+100*i);) Z4 @5 c5 u9 z M% ~4 O
line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
" V- W2 k. h3 K* o0 g5 Eline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
, Z1 K6 V' O0 V4 Q$ s) n: F- Z% I( x9 [9 j$ X) k& \
line(x+100,y+110+100*i,x+100,y+20+100*i);5 [% g8 R. l3 D8 d) n1 Y
line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);% s! Y( S/ @* }: d
line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);; j6 C. A g: F* G% j) a( B8 G
for(j=0;j<num-1;j++)
# {2 n% V- n0 O( M{$ V6 i6 H5 J. m* \3 Q
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);* [2 Q* |5 o" r
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);+ |; l4 S+ w$ ]# f; ` R2 {
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); + J& e* T! {! ~' l( A
}
0 X+ O8 ?) A/ P, U}
% M8 [+ h& W0 T}9 L9 o" D' v) k4 \
else if(FLAG_TT==1)! i& L0 A W6 W
{
! M7 F) ^: X7 | ix=0,y=0;# S) }3 j/ V; _
for(i=0; i<num; i++)6 p* V! v( A9 f; I1 ]
{0 D; s) J0 m$ {( U; x# [
t = (float)info[0];# S8 l" n8 @8 j; g, _: L
temp = (t/101)*180;
; i& t5 z; r3 b a! C- ~& ?pos[0][0] = (10-num+i)*50+x+650;
$ i/ j) y# Z7 ^4 R. C; G Ipos[0][1] = y+210-(int)temp;
# Y1 C6 A1 `- f+ Wt = (float)info[1];
* P" J) R: p/ |* z, j: Atemp = (t/101)*180;; y, T2 F7 D) o* E3 l& A
pos[1][0] = (10-num+i)*50+x+650;
& S* P3 p9 H7 I. y" A U4 F/ Vpos[1][1] = y+420-(int)temp;) d% ^ \5 {& u
t = (float)info[2];: o5 |. r- T; N* }/ c/ X
temp = (float)(t/101)*180;
8 `) F5 w4 ~, w" T; A/ ~0 S+ Jpos[2][0] = (10-num+i)*50+x+650;" V. i/ b H! h7 y
pos[2][1] = y+630-(int)temp; l/ ]$ p5 `$ W+ c( l. v/ Y% x w
}
( V) k# c! e, D/ yclearrectangle(x,y,x+1200,y+650);2 H: W& W0 m0 O; _) K" ?9 v3 [. [0 f
settextstyle(40, 20, _T("楷体"));6 D2 j2 g$ d# B$ B6 O" W
outtextxy(x+50,y+50,"TT");
$ T& P: z2 _+ m6 ~ A+ ]! f: Fouttextxy(x+280,y+20,"CPU"); //画柱状图1 v4 c. \% r! r2 B* Z
outtextxy(x+285,y+20+200,"IO");
8 z9 n$ y1 r: C# o+ c; X. fouttextxy(x+250,y+20+400,"change");
* F- z0 x4 O* Y) s# D; yrectangle(x+270,y+65,x+330,y+215);
2 }1 H- T4 z* P5 H& Yrectangle(x+270,y+265,x+330,y+415);0 b. Z7 j' M+ ]- i
rectangle(x+270,y+465,x+330,y+615);
3 U4 o+ _2 `% \0 }outtextxy(x+290,y+620,"TT");
/ Q% H; x4 z2 G) B+ e* f1 Yt = (float)com;$ ?8 b' D# t& m; X" u+ d$ x
temp=(t/101)*150;
& s$ f) A1 p7 p0 g+ h5 ^5 Sfillrectangle(x+270,y+215-(int)temp,x+330,y+215);# }0 m1 A* J/ z
t = (float)wai;
2 P7 z H8 ]3 Vtemp=(t/101)*150;" d9 p% I/ W; P+ y0 \
fillrectangle(x+270,y+415-(int)temp,x+330,y+415);2 F7 L9 O/ H2 q+ ]0 g3 Y2 F
t = (float)cha;
/ m6 i8 j4 ]7 x' } Q* X# Wtemp=(t/101)*150;
3 Z8 d7 F( @& P5 j5 H1 ~fillrectangle(x+270,y+615-(int)temp,x+330,y+615);+ v6 Y( l( G- H9 Q
for(i=0; i<3; i++) //画坐标 high=90,length=250; G& W* }4 B& n3 ?: P% s
{% k- a+ u% M9 ^+ P, y6 T) ~6 R
line(x+650,y+210+210*i,x+1150,y+210+210*i);$ e& B# I- q; |5 Q' P
line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
2 d5 L* }, m7 Nline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
3 c; w7 e' ]* | X0 D( P3 A$ O/ L# y1 a, h& F. X
line(x+650,y+210+210*i,x+650,y+20+210*i);
$ X1 n- w A n. ?( B/ Wline(x+650,y+20+210*i,x+650-10,y+20+10+210*i);1 Q" @+ d/ G7 l- r& s( Q
line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
8 n9 K: _" I/ J6 d* S. Ufor(j=0;j<num-1;j++)- I& o# |# [6 |- ?
{
9 ~5 z- g @1 e! o# a9 z: Q+ aline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);8 V; `4 o5 v1 \) m7 T/ a! I
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);- f. t5 `7 Z5 q0 r
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 3 s: h2 V6 w' [2 ?
}, F4 [$ s1 c0 D( L x
}
4 u- X; d- G) G6 J1 l}
: W, I% d5 B3 C) m- ~/ R2 m9 M
. k, P- k; S& v7 U) t* U+ ]- }1 P7 |! H0 G
return 0;
( g/ O! |4 {) z( w3 n, K* @" S. e}
6 t/ T" [" Q) ] x: H: B/ \4 _5 v! }( {int drawPerformance_PF(int x,int y,int memorry,int com,int wai,int cha)! [/ N- {' O9 L4 A6 r
{
5 m: b4 S6 E& b: ]9 K" i+ Vstatic int info[11][3],num=0;( }$ R3 y+ w9 X% O1 v: j! @1 f( ~
int i=0,j=0,pos[10][3][2];. g+ F2 I0 x5 N. W. m4 K" i
float temp,t;8 N& F& @& X& U3 ^8 T' h
info[num][0] = com;
( L5 l6 W* ^: Y( j# K% w) R3 `info[num][1] = wai;
/ M7 y& c( d& j9 Ginfo[num++][2] = cha;
- r% n$ A3 O+ I* |if(num>10) //存储10个点
5 M( l* h" h8 M2 M{
, S' U' _! V! ?7 @; \for(i=0 ;i<10;i++)
+ Z' C! C1 I# p4 _! m4 {{
$ R1 ~5 H9 d7 m. \/ N3 o4 Yinfo[0] = info[i+1][0];
8 Q3 T f! o- ?) G! @0 L' hinfo[1] = info[i+1][1];$ X. p5 L8 p% j# ]6 e
info[2] = info[i+1][2];
; b3 ]1 M# K4 e! F$ l8 h* l% J) q}
! M6 ?' L. L) p" Z8 C2 @9 rnum--;
4 O# O" m% \) S0 i( _- t}4 x. k, t6 g( K) [" t2 \9 G
if(FLAG_show==0)
1 f& m s& d' I T0 breturn 0;7 V. j* }0 j* B% c, ^" N
for(i=0; i<num; i++)
: C. f: G, u6 h% `3 Z* A{
$ _& F1 s" v# B4 a7 J& x% E) lt = (float)info[0];1 q( q! s/ e! v- p& X) R
temp = (t/101)*90;- Y4 L7 k# S7 B! f- d2 n+ E' o$ t
pos[0][0] = (10-num+i)*25+x+100;
4 ~7 s0 E1 e9 l2 v+ i1 Y! \. Spos[0][1] = y+110-(int)temp;
3 B* [% g0 S$ f0 Yt = (float)info[1];
@$ _, p V/ E$ Ztemp = (t/101)*90;1 b9 |" Z [" c. m
pos[1][0] = (10-num+i)*25+x+100;
) m1 u) D7 L; C9 k9 }pos[1][1] = y+210-(int)temp;
& ^) d" K2 u- a3 O; qt = (float)info[2];- J( W, U% U, u+ T
temp = (float)(t/101)*90;
0 |0 E6 u! z& Zpos[2][0] = (10-num+i)*25+x+100;
' S# @2 D6 ~4 n3 Xpos[2][1] = y+310-(int)temp;( I% ?5 t9 @$ z0 M4 U
}
& k$ u' l' Z E% H# s& Pif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0); c" i- x# A2 Y, B( S
{
+ z3 N# |2 [, j* Z* i' W/ ^8 i) w) U4 ]clearrectangle(x,y,x+400,y+315);
# A) o! F$ m7 ^' o" n/ T. Rsettextstyle(20, 10, _T("楷体"));
! g# K) Y5 t# \* E0 y; |. Jrectangle(x,y,x+400,y+325);
& s) h+ U1 v! S" B# Z; aouttextxy(x+40,y+10,"CPU"); //画柱状图
/ V$ }8 _8 d& w a% }outtextxy(x+45,y+10+100,"IO");7 q: B0 G4 g' p: `; b+ ^
outtextxy(x+40-15,y+10+200,"change");
, R, v( x/ e8 f2 |3 drectangle(x+35,y+30,x+75,y+110);9 k+ y. ~+ B) y) N0 G+ \0 x5 Z; W
rectangle(x+35,y+130,x+75,y+210);
& T$ x) W6 e/ g. p! Brectangle(x+35,y+230,x+75,y+310);
5 I. i* B3 s+ i: |' Gouttextxy(x+180,y+310,"PF");
8 ?( B# S, a# m4 K" qt = (float)com;; V+ L% Z X: q& @+ [' m6 ^
temp=(t/101)*80;
8 v6 [: b/ `! H6 Efillrectangle(x+35,y+110-(int)temp,x+75,y+110);7 e. i: B: j: g; f+ y1 p. ], G: x
t = (float)wai;. E) }- k8 F% s8 Y7 }; \
temp=(t/101)*80;/ S& c; {+ \3 ]: s4 Q) C, e
fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
# a# F& Y g& N! i6 B/ T& c* nt = (float)cha;
( ~5 [2 R. V% V$ i6 Xtemp=(t/101)*80;5 A2 {/ [4 T7 ?& S
fillrectangle(x+35,y+310-(int)temp,x+75,y+310);
8 `4 B- J2 [& s N efor(i=0; i<3; i++) //画坐标 high=90,length=250# K; B! g0 z3 \/ b: H/ r
{6 s) T5 G6 o' J$ }: T9 V
line(x+100,y+110+100*i,x+350,y+110+100*i);
$ Q0 ]% U( `$ t5 T* m: d2 i; d6 `) Fline(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
5 M- h9 C, c nline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
1 x) P% y6 Z7 V+ z: s: Y+ b( s1 m; J) d7 Z. z$ b
line(x+100,y+110+100*i,x+100,y+20+100*i);' m: s3 J4 W2 C/ V, x
line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
/ z( k2 u5 B+ l: uline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);
6 d; N) g* _, i- L/ Q" o3 tfor(j=0;j<num-1;j++)! Q9 g/ B( d |. v; p
{
( W- v) }% h, o& Nline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);& J7 Y w) c& e* \
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
; F6 T7 S: ]( d7 [" I# W: jline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); # r$ Y' t$ e( C* v0 |
}' R* Y% |+ n" N/ D) F! Z1 J, ~0 S; I
}
|6 `, R' h& k0 g3 y6 G}
9 d' Z5 L" @% Gelse if(FLAG_PF==1)
/ D }6 @7 ~. J1 Y5 V6 e X{: M8 S3 K/ ~- x( d' }* [' W1 \
x=0,y=0;4 f- g' h. W2 ^
for(i=0; i<num; i++)
9 ?: u5 l5 V, B1 {/ j3 v{
/ W/ W9 \; W! B& w5 `; j* F! nt = (float)info[0];
; a7 y3 G7 r/ a* s, ztemp = (t/101)*180;6 U) z& k q. N
pos[0][0] = (10-num+i)*50+x+650;( D! [) X+ I) s T. U/ |, y- X
pos[0][1] = y+210-(int)temp;9 y$ J/ x) m/ D; _ C+ y5 M- [
t = (float)info[1];
$ K+ i' x& S) _- m; F0 E* mtemp = (t/101)*180;
( B; l+ I0 k ]1 npos[1][0] = (10-num+i)*50+x+650;
+ x2 i6 e; ?+ Gpos[1][1] = y+420-(int)temp;
. H! T0 F% f& A8 kt = (float)info[2];+ o; y7 x4 G& D& M2 k! Q: N, }3 J" y" s
temp = (float)(t/101)*180;
2 y2 K3 i' t, Q( j9 gpos[2][0] = (10-num+i)*50+x+650;
* H7 O3 c& C2 l$ E( H0 b( ipos[2][1] = y+630-(int)temp;/ ?$ L- z1 ^( J5 R% F
}
7 y0 B8 Q7 ?# r/ c' H) ~ T) \" M; F; K1 `clearrectangle(x,y,x+1200,y+650);
9 s& s+ M' g1 y1 r8 T% u8 Y# ysettextstyle(40, 20, _T("楷体"));
- V" o3 d( u/ X0 S0 W$ @7 @outtextxy(x+50,y+50,"PF");* P) p8 `4 d2 C- @" \# E
outtextxy(x+280,y+20,"CPU"); //画柱状图 j% t% y* [; K+ `% B9 d( V
outtextxy(x+285,y+20+200,"IO");
1 u3 q3 p3 w6 G U4 ^, aouttextxy(x+250,y+20+400,"change");
9 _) S- x( m, Hrectangle(x+270,y+65,x+330,y+215);: s6 W+ e: v8 o: \/ i* J
rectangle(x+270,y+265,x+330,y+415);
6 B. l1 f8 m2 [6 G3 B0 T4 O' Trectangle(x+270,y+465,x+330,y+615);
4 ^% t8 m% X* R6 x) |, z8 \outtextxy(x+290,y+620,"TT");( F3 M8 t% f& {5 {% G9 L2 j
t = (float)com;. L+ b+ @) D' z: F
temp=(t/101)*150;: v. \! [! H8 H& @: |0 V# E$ B
fillrectangle(x+270,y+215-(int)temp,x+330,y+215);: q o' U7 W. p2 \9 _, l
t = (float)wai;
. q) X% Q. W X$ q: j, s, c4 htemp=(t/101)*150;
2 j, b/ t- {% E( s- s8 Zfillrectangle(x+270,y+415-(int)temp,x+330,y+415);
3 @3 t1 H* o5 }6 Ut = (float)cha;* z3 r7 D# ^9 y+ A( E; Z$ S+ Z9 O
temp=(t/101)*150;( x H, ?! A0 ?: C
fillrectangle(x+270,y+615-(int)temp,x+330,y+615);% X6 W6 d# o; s7 I
for(i=0; i<3; i++) //画坐标 high=90,length=2502 d& L ]$ P4 R. u# r
{
- u2 ^, A" `+ C: j* Q. Nline(x+650,y+210+210*i,x+1150,y+210+210*i);( c7 U2 ~5 ]7 H4 [7 g) d7 n
line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
& @1 v( {- m6 O+ P) r5 e2 @% Qline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
+ o- u5 {. F3 p2 \& A: c- K7 e; n: R9 c# |
line(x+650,y+210+210*i,x+650,y+20+210*i);
" \# F1 W' |* D+ P. ?line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
# t! O+ W+ f9 r, C9 E1 u% {line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);2 G: w/ o) h% A3 w0 F' i
for(j=0;j<num-1;j++)% }3 U- j ^6 z! y. Y1 B
{1 C: P: ]8 m0 Q
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);7 Y: o7 s" Y( Q
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);" A% z& n( }# l" i: z
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
5 ?& Q% W1 U$ l: A# ~2 a; _7 e}6 [3 C# p2 c+ J) v
}% C4 p! t9 z8 }$ d
}( N! u/ [+ M, d- ]/ Y: z
return 0;5 n2 {1 N: @8 I1 r
}
& K! J5 Q! G2 L6 J; l4 G5 r4 mint drawPerformance_SJF(int x,int y,int memorry,int com,int wai,int cha)
1 Y$ A+ t1 F6 n" o{. u+ \" w, \. y
static int info[11][3],num=0;
7 h. B J( Z: T; h. _: e% @1 uint i=0,j=0,pos[10][3][2];
7 w& y4 }7 V" {4 H' xfloat temp,t;+ ?! e# u6 [) K, _! B% X1 l7 d
info[num][0] = com;+ |# `- F% G5 J) S+ L$ M
info[num][1] = wai;
- z& _9 v' i: r4 n! C: Pinfo[num++][2] = cha;
& F& l- F# R8 E' Pif(num>10) //存储10个点5 @$ b; o2 N- E1 w
{9 z2 y; n3 c1 l! L( _/ s) d
for(i=0 ;i<10;i++)5 w& S$ g8 ^8 H/ m3 t h0 D
{" l; J1 y/ W# c" Q
info[0] = info[i+1][0];
- V- z: a0 b+ G/ linfo[1] = info[i+1][1];
! ~/ ]% S, r* \: h: F! e" }info[2] = info[i+1][2];
, }. g6 t8 H6 ~8 [}1 z6 p B8 w& l# o
num--;: i$ g8 j" r, g5 N
}
6 x; }0 \7 A& w1 D7 a" Mif(FLAG_show==0): h& Z4 h3 j$ O L% O. L
return 0;6 I8 ~7 w2 H! A9 M: D+ {. N4 w
for(i=0; i<num; i++)
2 P& r) r6 G$ k; ]" b0 l) F{
1 X/ E, m& F) |# I- l2 s* mt = (float)info[0];
4 Y7 b1 k) }/ @# K. `% |temp = (t/101)*90;* j: \8 P) }1 [# h, ~$ ~4 M
pos[0][0] = (10-num+i)*25+x+100;
" X* f y W+ D9 xpos[0][1] = y+110-(int)temp;& i6 u7 ~, [# f( Q+ X7 G
t = (float)info[1];4 E4 M: S- F7 e
temp = (t/101)*90;1 [! g8 Z0 [: Y6 D$ G) f
pos[1][0] = (10-num+i)*25+x+100;0 K1 A% I8 b3 ^' o
pos[1][1] = y+210-(int)temp;6 o3 H! J O# W: k3 B
t = (float)info[2]; o0 O2 Y: h% [; _
temp = (float)(t/101)*90;
# S+ s: O" U+ r4 Opos[2][0] = (10-num+i)*25+x+100;" z' u2 S( N) h. T
pos[2][1] = y+310-(int)temp;
$ ~# A+ j" ~" c}
5 T! A) E) i" S2 ?if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
& U: C% E7 u/ @{ ( E' c# B6 Z1 H
clearrectangle(x,y,x+400,y+315);
8 w+ A. T6 O+ B% x* ?9 dsettextstyle(20, 10, _T("楷体"));, A$ u7 b( J: l4 r, h p
rectangle(x,y,x+400,y+325);
" f5 M% c- _6 E; S2 C6 h1 Kouttextxy(x+40,y+10,"CPU"); //画柱状图
1 o' @2 [( W8 h+ ~outtextxy(x+45,y+10+100,"IO");
/ a/ L6 \: K' gouttextxy(x+40-15,y+10+200,"change");6 n! @- M6 j# Y* X L
rectangle(x+35,y+30,x+75,y+110);
+ D1 I; l j- v8 z8 W! U. V5 D+ nrectangle(x+35,y+130,x+75,y+210);7 Q# r9 I1 O( B& e# E1 U8 v. \
rectangle(x+35,y+230,x+75,y+310);
" C, X; n% k4 O/ |! douttextxy(x+180,y+310,"SJF");
/ t( Z! K$ s3 w; c, k bt = (float)com;
7 Y+ C8 ]; R& n |; ?4 m" b+ htemp=(t/101)*80;0 e4 Z) t4 r9 ?+ A
fillrectangle(x+35,y+110-(int)temp,x+75,y+110);
, H6 y9 m p9 k" \t = (float)wai;: B0 U. E2 W: d J/ A/ X- U8 u7 r
temp=(t/101)*80;, E% z/ n1 L9 Y( A: d
fillrectangle(x+35,y+210-(int)temp,x+75,y+210);5 Q6 t5 [& I f
t = (float)cha;. g" E a# W4 ]2 k; n
temp=(t/101)*80;
; g" ?2 x) O8 \fillrectangle(x+35,y+310-(int)temp,x+75,y+310);0 v3 x" @: _: D
for(i=0; i<3; i++) //画坐标 high=90,length=250
$ V) d0 e. [/ L- ^* }, S" g{# x- l0 `- M0 P4 y" {4 h
line(x+100,y+110+100*i,x+350,y+110+100*i);
( U. S& Y9 z3 f) w7 u" Mline(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
& E+ d; I8 v8 dline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);: u% c* j5 x: f7 w
# R+ g; l) D3 ]6 _3 \5 dline(x+100,y+110+100*i,x+100,y+20+100*i);
. s9 T$ R5 Z9 D5 o6 @" O+ O$ s% Iline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);+ W0 D1 w8 N/ f
line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);4 ` F- @/ T# i U" g0 l
for(j=0;j<num-1;j++)
: J7 b) `5 y& o{' {" j( P4 F" ~+ n" _! H
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
; [* E Z( x* U! B' sline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
_1 F% g) b! x, F) C) uline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
/ @# l- {% `' M: @4 y \0 P}' h* V7 r* Y) A0 |6 c9 G7 n
}
4 ~0 V( k% g. w" L* d}
" _) N/ J" \2 [, n: m: f+ celse if(FLAG_SJF==1)
- x2 H/ E8 U' X{' R, Y, O' I: M- ]4 ^* y" {3 y
x=0,y=0;
) X2 L& j2 o) X% d6 U1 ^4 ^. I) Dfor(i=0; i<num; i++)1 T2 V1 w f% `2 [5 Z o
{
S, I* ?8 q6 a8 x& }7 J: Ct = (float)info[0];) L8 A% o' f) o0 H0 i8 v5 K
temp = (t/101)*180;% I. K& s b q1 ]3 u( X% e' f- e
pos[0][0] = (10-num+i)*50+x+650;
6 U7 A) n7 H h+ s1 e. ~/ L5 upos[0][1] = y+210-(int)temp;
! X# N& _: a+ e4 D7 F# e, it = (float)info[1];& U: [, ?+ J8 ]+ b- j5 g4 @
temp = (t/101)*180;5 F0 k# E9 Q# w N. O; J) W
pos[1][0] = (10-num+i)*50+x+650;# D3 S ^' V | G5 w
pos[1][1] = y+420-(int)temp;
! w- [, Z+ }5 E, a4 ]t = (float)info[2];/ o9 V8 L: C8 q2 S* v
temp = (float)(t/101)*180;
0 [# E! O& X' w+ w0 r& ipos[2][0] = (10-num+i)*50+x+650;. J1 U* q& s; X9 n
pos[2][1] = y+630-(int)temp;
2 |) V0 D' T+ I7 X; _}) y& u: `4 R$ c/ t# z, K
clearrectangle(x,y,x+1200,y+650);
' i& q( Q& s, g% [& N6 n9 lsettextstyle(40, 20, _T("楷体"));/ e5 K$ ~" b, }6 |
outtextxy(x+50,y+50,"SJF");1 D: _1 Q. q6 O* W6 X# V/ j' w% M
outtextxy(x+280,y+20,"CPU"); //画柱状图+ \+ ?2 J) K; |3 l- _+ n1 ?
outtextxy(x+285,y+20+200,"IO");* W( N* @ o* ?, P, i. s
outtextxy(x+250,y+20+400,"change");
8 w# z% I/ |# urectangle(x+270,y+65,x+330,y+215);
# ^; U7 C. H$ a! f! Frectangle(x+270,y+265,x+330,y+415);
0 G$ s/ N5 d8 Q$ k# F6 Jrectangle(x+270,y+465,x+330,y+615);
/ o3 g3 W& a6 b- Jouttextxy(x+290,y+620,"TT");
# B9 M% a, K+ c" V0 Qt = (float)com; _( m+ e0 E+ o1 {, R# ^/ C
temp=(t/101)*150;" E. ~/ t; u5 S4 G# s# G
fillrectangle(x+270,y+215-(int)temp,x+330,y+215);
' v, j& A( a& Tt = (float)wai;
& Y- h2 Q; U% }! itemp=(t/101)*150;/ `0 V- H1 p, _+ m* R
fillrectangle(x+270,y+415-(int)temp,x+330,y+415); V7 D/ H0 O1 Q; s7 F
t = (float)cha;
# S8 ?+ `& H& z+ ^; Vtemp=(t/101)*150;
/ g9 u9 ]- Q, Kfillrectangle(x+270,y+615-(int)temp,x+330,y+615);
/ D) a: B4 D9 q) z' q d+ Afor(i=0; i<3; i++) //画坐标 high=90,length=250
) t& V$ S- G* f' h% @{
4 \1 d3 D4 R. u, Lline(x+650,y+210+210*i,x+1150,y+210+210*i);
# E4 L5 |! w' `% T% eline(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);* H6 e+ a3 D% I! l& B
line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);' a& h" B( O$ p
" \3 b% }) K8 g7 L7 mline(x+650,y+210+210*i,x+650,y+20+210*i);6 Q% m; g% l1 {1 W9 Q
line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
7 ~& b+ V/ x# i, C6 l7 z; Y0 mline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);, q# J$ a E. p1 u1 b o
for(j=0;j<num-1;j++)0 V' M$ M) Z5 s4 k% Y
{
/ U4 J1 d5 W# m" eline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]); ?# }: s. X. Z- C+ O- [
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
! v) `4 B6 q" i5 T( mline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); - ?9 _' [0 e% F8 z
} d& p% C/ g% F; T0 l$ e% r9 H; Q) V
}
: t' H. }$ G6 f# s3 t}: o) S" w" L* [8 X& q
return 0;1 g5 K8 }/ R' x" l: H9 f! l
}. F9 m. h/ L. A" i5 p) l
int High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
1 v8 x: j# t: \3 D2 U! r; R7 _{2 ]5 i1 A! Z8 ~# _; O5 Y/ B
static int compute=0,waitio=0,change=0;- C' v$ L2 Y4 b% w& ?* ]( p* P# K
static int computeLast=0,waitioLast=0,changeLast=0;' {# s- P. y: A" h( Y( r& X+ C
int i=0;4 @# ~/ l0 @% ^* |3 k: r
if(draw==1)5 I7 ~. P% P; [+ C; m
{+ c3 v& {* e4 X
//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
% G" E& I8 I1 \( f9 l+ DdrawPerformance_HR(400,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);0 ~/ ?; R+ j2 ]0 j
computeLast=compute;3 d: ^9 @( s& p1 \0 x- w
waitioLast=waitio;
$ S7 {) Z- G( q' _2 E2 ~ h. ^: ZchangeLast=change;1 p4 K3 |5 ?) a# ^
}7 M6 o+ n+ x4 z4 Y0 Z, T3 h3 }
if((* memory).p[0].flag==ready)
- y- b+ a: x. Z. A# j% x(* memory).p[0].flag=computing;. v/ A, k$ f W+ R4 q2 y
if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing) D! N& Y7 r" d+ X( Q, D2 j
{7 q7 J% R: w# K
i=(*memory).p[0].computeNum;
" k& n7 f. y' Iif(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed* V9 m" | ?# x; L8 s1 x f
{
: Q2 l0 ]- U' s5 |5 n- S$ ]+ k(*memory).p[0].flag=IO_waiting;& `: ?# e" s3 I' z" X% g
(*memory).p[0].computeNum--;6 `' _4 K5 Q1 A) N4 R: A# j
change += exchange_IO_Compute;
7 X! J; X2 ~$ f- }compute++;3 K0 b) i* {( |2 P
}& w+ I$ N' Q0 Z* _3 O# B$ S4 Y. y
else
4 X, b+ v3 Y* S) ?4 ?{
- N7 J a/ @' y4 @" J9 z1 F9 ecompute++;) Y# p8 P& [9 s: J( Q* a
}
( I9 n9 l& S' |) q% T& D, R- M}9 n( l( h6 {3 ^1 U5 @/ j; m0 X. X
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)0 E/ Y& Q* w; ~- y& y1 P+ z
{2 K9 }$ d f% |
9 J+ y. x. j" [: k( t! `( t, Ri=(*memory).p[0].ioNum;
* {4 o) q' L; w# M+ @# oif(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed
7 t0 p% f3 C" Y/ p; y. d{
4 e' }" ^: s4 B1 W) X(*memory).p[0].flag=computing;
. [0 t4 H8 ]- `# X+ d; u(*memory).p[0].ioNum--;: K% A% }7 k% ~/ P6 t9 |
change += exchange_IO_Compute;1 D) N6 y2 a. P) k4 |
waitio++;
* U& v9 I! w/ J}
; f h2 w6 _# T- A' m+ Q! H- P! L1 n" Z" Nelse
5 A: s3 e1 R% W$ Y7 ]; S f{
0 g9 u) V& U$ uwaitio++;
3 c+ P# _0 ?% w2 }" _7 m9 P. W0 K}% t; Y, d3 F6 D# o
}
! U8 D+ V3 C+ s5 V+ t3 Helse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing). k1 x! k5 ^; M. z' a( }1 T
{
8 }) w9 x [$ P6 l! i(* memory).p[0].flag=IO_waiting;# C5 C% P1 Y0 ^5 k
change += exchange_IO_Compute;/ L$ f2 Q6 R+ m% y; V- s
}
7 {, N5 T0 f5 Z, T7 Y9 `else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)
% [5 U# G; s2 { F. s! o+ l8 V{4 S( Y) m( P& `) m! S
(* memory).p[0].flag=computing;: f3 l; Z$ F8 M, h# W( p
change += exchange_IO_Compute;
! ]/ {" K( U C}" C$ [* g% s0 C" G
if((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0) //一个作业已经完成
5 z( m1 c& X9 _% q. n9 w0 Q{
2 c/ l* W% o8 |( X(*save) = (PCI*)malloc(sizeof(PCI));
" g$ f9 Q* Q1 b) ~$ k3 D# }(*save)->next = NULL;
" M& d7 C& n W k(*save)->processID = (*memory).p[0].processID;! ^/ q9 F! L3 W4 W- M
(*save)->comeingTime = (*memory).p[0].produceTime;
. Q( F0 v W: ]; T1 }! a2 ?) F(*save)->askMemory = (*memory).p[0].askMemory;; u' N! F. \* q1 P
(*save)->compute = compute;
7 X3 E* T) D) X+ e( p0 X4 w/ G(*save)->waitio = waitio;
9 X, c7 L$ K) }(*save)->exchange = change;
& D' t- Y" c0 I- w8 k0 U& b(*save)->completedTime = systemClock;
5 E4 q( {$ U B) e0 q$ K8 U. I(*save)->runningTime = (*memory).p[0].runningTime;
2 G% n- J, Y, e4 _: l0 a( F0 E7 ^*spareMemory = MAX_MEMORY; //*spareMemory + (*memory).p[0].askMemory;
1 z$ W( \6 r2 F: bcompute=waitio=change=0;: Q4 q$ K4 j0 A+ b# L$ J+ Y i
computeLast=waitioLast=changeLast=0;
. O# \1 x! P5 b/ j( ]High_response_ratio_s_to_m(&(*storage),&(* memory),&(*spareMemory),1,1);
0 f8 k* j& _$ Hchange += exchange_process;3 h& t) M% D+ }' n& J
return task_completed;
) ^( b, f" i! C' K% q& V/ T1 z}7 u" r& K5 _% d9 ^$ `" |- V4 [
else3 ^" t9 w% z; A+ |
return task_not_completed;' z7 o5 s, {0 `: x
}
7 s* l" w; r. X4 c% X+ `int High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int dispatch)* g( c: i: m7 p0 U K9 z) V
{% W) z- M! P2 r N7 q9 F( r
static int waitTime[initProcessNum],i=0,j=0;/ Z1 e( d; ~$ S j, S
static double HR_ratio[initProcessNum];
\: e. E1 U3 S/ ]& @8 {+ w, ]if(flag==0) //初始化数组; Q+ H! H! K# p2 q5 X7 l$ i
{
# P$ V$ ?3 R$ T, Sfor(i=0; i<initProcessNum; i++)
; f* H2 T5 L! Y( p# t{
# ^ O1 q+ `' h+ twaitTime=0;
2 J( T" ]$ r1 y7 kHR_ratio=1;; X, t& m& h- S/ m! h7 j
}
" Q0 x8 X( G, E( ?. W8 [, o}
% h$ X$ e6 I1 s! E' m; X9 r2 Rfor(i=0; i<(*storage).proNum; i++) //等待时间增加,重置响应比
. [; U ^; A" ~+ Z0 N5 ^9 \$ c{, ?7 T7 X0 Z4 e
waitTime++;
6 Z; o; l* D V" g, aHR_ratio = (waitTime+(*storage).p.computeTime+(*storage).p.ioTime)/((*storage).p.computeTime+(*storage).p.ioTime);
6 q3 H4 Y2 u( t& U% _if(HR_ratio > HR_ratio[j])
/ z+ Z; v/ _. P' w) R1 Nj = i;: r ~, q) o0 j) ]2 i
}' {. E# } ]7 E: q0 M
if(dispatch==1) //需要调度一个进程到内存中执行0 K1 Z9 F$ J! X6 b$ `' t1 `
{
: C( q* r0 [+ W" d Vif((*storage).p[j].askMemory < *spareMemory)
% v- T h- D/ c( i/ d4 \ M; Q{
) {- K0 Q8 |0 b" M' s+ o }: a6 w(*memory).p[0].askMemory = (*storage).p[j].askMemory;
1 N% u/ @7 c* E6 D' G0 ?4 p(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
) t0 m& ]& D6 ~# G(*memory).p[0].computeNum = (*storage).p[j].computeNum;
O7 o- W3 [) v5 ]6 I9 l+ y; M" E(*memory).p[0].ioNum = (*storage).p[j].ioNum;
9 ?9 y( q: |1 u! W+ O. l& x(*memory).p[0].processID = (*storage).p[j].processID;; d1 x0 C$ O# ] d
(*memory).p[0].flag = (*storage).p[j].flag;" R$ q# M, k' @/ b* m
(*memory).p[0].ioTime = (*storage).p[j].ioTime;( b1 d0 u t$ N. z2 k- Z. `
(*memory).p[0].computeTime = (*storage).p[j].computeTime;
7 A P9 w/ D6 V. P1 j(*memory).p[0].runningTime = systemClock; q( L# m) t0 }4 T( k, D# g* ~
(*memory).p[0].produceTime = (*storage).p[j].produceTime;
: C5 y& G; e' ?for(i=0; i<(*memory).p[0].ioNum; i++). x5 |/ [( f% _; W! s: e e; g" A
(*memory).p[0].ioClock = (*storage).p[j].ioClock;; f9 X: X* B# r& M
for(i=0; i<(*memory).p[0].computeNum; i++). F' y3 m* d! m( V& Y0 v
(*memory).p[0].computeClock = (*storage).p[j].computeClock;7 O8 J: l1 q T }0 I9 W- y+ A! V
(*memory).proNum=1;
# p# Y) f3 l0 m*spareMemory = *spareMemory - (*memory).p[j].askMemory;
7 X+ l6 P- H3 H, |3 K9 l# _produce_one_task(&(*storage),j,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程6 ?& {% q, P6 U# d
(*storage).p[j].produceTime = systemClock;5 V0 f: y& q! I+ N9 f- f
MAX_COMING_TIME = (*storage).p[j].comeingTime;3 T& m" D1 O0 u9 A( v. B0 `
waitTime[j] = 0;
1 d% q* a$ Y* I( N! BHR_ratio[j] = 1;
* F7 h- O2 H+ i b}
0 ^8 J4 [4 Q V9 L. Velse# G: v# @% j- L; g6 `& L
{
1 h: J, K. b6 o1 f4 X8 gprintf("A process ask for a memory overed the system capacity\n "); D$ D3 S+ L. H8 N/ g
exit(1);5 S7 S8 I, U# r
}
2 @' G. M) C% s4 b" m}
) s# x" e' D: Zreturn 0;
4 B+ q. h e0 a# Q" e/ Z% ^8 _}! q3 N+ ^- d% }! f- h5 n
int PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
9 D: B, s: Z! B! a, j" A{2 ^# r; W- }0 v# Y
static int compute=0,waitio=0,change=0;
* u3 o: d5 M. dstatic int computeLast=0,waitioLast=0,changeLast=0;
8 N# @% ]# {( }% Hint i=0;4 `( z/ e( C* Z' m9 t
if(draw==1)
) G) j, W6 x/ t3 d: K. |: n{
& ^/ E, {, d) s- [9 \. a//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);( Y# Y/ p/ L" B- \- r
drawPerformance_PF(800,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);. W0 x/ k6 y. a% ]% l) a q
3 I" @# L4 J! x6 {% h
1 d: I+ \6 o% j8 |0 b3 U' F
computeLast=compute;
4 V9 w9 [' _' C6 SwaitioLast=waitio;
6 k; Y' Q% `7 w. d T! ]9 hchangeLast=change;
$ q7 c+ l( J; L, H}
/ `! g+ r* Y$ d, B6 K4 T1 q: Uif((* memory).p[0].flag==ready)
% q8 U! T7 a- n, y+ @; o/ c(* memory).p[0].flag=computing;
& q3 ^: P+ b4 L5 Q% _& Gif((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)9 l; i: O+ V3 b4 `2 A* @
{
& i" y/ j# P" a0 E2 Vi=(*memory).p[0].computeNum;
& ?4 _# [) N5 J' \5 Uif(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed" A; J. r$ D! X
{ s8 [( T2 W9 { J# d: x" b% q5 Z) N
(*memory).p[0].flag=IO_waiting;
; e. T: _. z6 k. K" e2 I7 h7 a(*memory).p[0].computeNum--;4 A7 Z+ N3 k' G% e$ s0 R+ k) o
change += exchange_IO_Compute; J( X0 N4 F1 D/ H# J7 |
compute++;
/ X; j( T! W1 m1 j. R}# D0 [+ E4 C5 N& M- \
else
7 r: T% Q8 F2 A8 f2 n{6 J+ J4 O4 T* @; }" R8 {/ ^; {+ ^
compute++;
5 f; V8 V+ e" l6 |}
( o0 a6 E) V. _}
& [) j, d- h/ ?) S* pelse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting) W1 P1 \8 F+ v5 ^
{- H8 y9 Q/ Z0 f8 z
9 G* P3 M( X& y5 g9 v, q' Fi=(*memory).p[0].ioNum;
+ d& U$ ^- \ ~+ Kif(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed+ B) T5 J7 ?1 k" B( d
{
* I( a( O7 T- \2 r$ A(*memory).p[0].flag=computing;
' D- n4 W2 `! X& ~(*memory).p[0].ioNum--;) z+ v8 M L1 L: D7 U. a
change += exchange_IO_Compute;
9 u# B3 G5 q. Ywaitio++;4 b: @' B2 f3 k. Z9 l4 R5 d; l
}7 @' y+ f* [8 ^9 R
else
2 @7 [8 J5 G1 z* O) t( Y( x9 I{. _+ Y3 g7 d) F
waitio++;
( u3 `, L; N, s( v7 y}
0 e' |% c9 H" l1 K- I7 A- ], H}
+ E, E8 ~$ m9 C: f. \: O$ Belse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)
+ _/ `3 ~) \) ?& K {{1 _9 o% u' h% d
(* memory).p[0].flag=IO_waiting;3 y* ?/ ^# b7 L V. m
change += exchange_IO_Compute;
' m- r1 K1 B' r6 N. ]}
8 e8 U# x3 X* ]+ b1 l/ _, Q% D3 selse if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)8 o; Q* Z- c6 d I
{
9 `. y5 A" U$ M' \+ n& g(* memory).p[0].flag=computing;4 H/ g; m/ B+ L, s! u
change += exchange_IO_Compute;0 s$ K5 K- J8 X
}
, a9 d1 C8 ^. U d4 pif((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0) //一个作业已经完成
" V+ v8 l, [$ F. q. y2 ?, M) R9 R{
8 z- T4 f, Q9 c% S/ v! y/ V5 |(*save) = (PCI*)malloc(sizeof(PCI));4 B- R) S! J! s H
(*save)->next = NULL;* j c ^- Q: s1 p3 |
(*save)->processID = (*memory).p[0].processID;
* O: K8 d* w2 m# D E! M# o! f! T(*save)->comeingTime = (*memory).p[0].produceTime;
/ G# W! f3 e* ?7 q& a& W! ?(*save)->askMemory = (*memory).p[0].askMemory;) E4 _( G% v) @7 p, g! F E
(*save)->compute = compute;
- p: f4 Q9 L. u* } R M% I) E' V(*save)->waitio = waitio;
) |( [, }. z3 `4 Q0 @% m6 S4 E(*save)->exchange = change;
! ^: Z0 F/ O8 n' @4 B0 x. b8 j(*save)->completedTime = systemClock;, r0 [, B0 l4 h# c" B1 A
(*save)->runningTime = (*memory).p[0].runningTime; G) { n& \' ]( s$ H
*spareMemory = MAX_MEMORY; //*spareMemory + (*memory).p[0].askMemory;
/ z) {$ i% Q) Y1 y `5 ccompute=waitio=change=0;
3 R! h, r4 i7 n0 x4 A- |computeLast=waitioLast=changeLast=0;; F* q+ E6 q5 n, u/ K7 C
Priority_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));8 M- t9 _. x0 p5 _6 `
change += exchange_process;
& w8 g' ]' m( c4 S3 _2 ]return task_completed;
' b6 v; p& L6 k* ?* `}8 O, i; e1 Z, ?4 G5 Z. R& i) o
else
0 B( K0 H' S, g0 Q3 U' j; preturn task_not_completed;
. M3 A) ~ S9 T}
, V {9 h( B5 a( d) e9 m2 Q' Jint Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)# l, v+ ^9 w0 j) ?1 [, m% I
{. r; w1 G* D# K2 |& e" h
int priorityNum[initProcessNum],i=0,j=0;" i9 N" z2 J1 z3 `5 [; l
double temp=0;
! G3 ?% D' x5 z) c5 X, ^0 O9 xfor(i=0; i<(*storage).proNum; i++) // setting priority to each process
( h2 m% g# k. R. @, }{3 L4 ?- K+ [% Q0 p' w u
temp = (*storage).p.computeTime/(*storage).p.ioTime;, H) V" N: ~3 q( Q; ?0 Y& G
if(temp > 0.8)% s1 J8 F) ~$ i8 A* r# R) M4 F
priorityNum = 6;/ O" y2 T5 Z4 R/ e2 }7 j
else if(temp > 0.7)2 e& E; J$ e" b8 h" |
priorityNum = 5;
8 C2 n! F0 @7 u* ^. V' k8 melse if(temp > 0.6)
( {4 Y3 n* L, e6 i2 UpriorityNum = 4;
) h4 W8 P, ] ~* pelse if(temp > 0.5)
5 I6 {7 V! x) T- W1 u( I* QpriorityNum = 3;: q4 _+ ^ h5 C
else if(temp > 0.4)9 o/ \. q, Y- q0 V; X# W
priorityNum = 2; o: w) l) Q% y# ]6 L2 P1 i* _
else- W# j0 P% a1 I( E7 O
priorityNum = 1;( F6 T1 V& W0 { z' o! o8 K
if(priorityNum[j] < priorityNum)
9 W$ Y5 i. m! {! Fj = i;" t5 Q% g I- H' \0 a- A0 A, C e9 T
}8 ~" a3 G7 l* V3 R$ x
if((*storage).p[j].askMemory < *spareMemory)$ r6 Y9 r0 O+ s9 i- G
{
' @/ o G* I( S" O(*memory).p[0].askMemory = (*storage).p[j].askMemory;) z- W* z1 @, D! H' `( F
(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
# D3 Z4 ?* w/ W/ h2 b(*memory).p[0].computeNum = (*storage).p[j].computeNum;( w3 ?8 }% H( Q! U3 ]8 }, p
(*memory).p[0].ioNum = (*storage).p[j].ioNum;/ F' W q; ~: k6 i6 I' r/ O& @
(*memory).p[0].processID = (*storage).p[j].processID;8 e( j0 G( @+ ]1 e8 B) K3 C
(*memory).p[0].flag = (*storage).p[j].flag;/ J6 S7 L/ @# R$ ^ y( K
(*memory).p[0].ioTime = (*storage).p[j].ioTime;
{! D0 T8 p0 c, T% ~: e2 b* r' l(*memory).p[0].computeTime = (*storage).p[j].computeTime;. }+ N4 H; k% Q# L. [) t# k
(*memory).p[0].runningTime = systemClock;
' w6 G( Y" t" ](*memory).p[0].produceTime = (*storage).p[j].produceTime;7 }9 ^- P- t `
for(i=0; i<(*memory).p[0].ioNum; i++)5 M; X; s3 h* ^: w" u
(*memory).p[0].ioClock = (*storage).p[j].ioClock;; p- x, l* s* p" m h9 k M
for(i=0; i<(*memory).p[0].computeNum; i++)
+ c1 S, T' m4 e1 f(*memory).p[0].computeClock = (*storage).p[j].computeClock;
2 ~* ^: {0 a* w(*memory).proNum=1;: J2 X/ \. T1 e b N2 S) X
*spareMemory = *spareMemory - (*memory).p[j].askMemory;/ y1 Y( C/ j, U |7 B4 _2 o/ k
produce_one_task(&(*storage),j,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程+ t6 B- a- A* u% m
MAX_COMING_TIME = (*storage).p[j].comeingTime;; Q; Y* G& i1 ~; _0 _4 A
}* Q, u s- r* R d- W
else
/ H h: R+ Q3 i+ a9 m9 o. U{) b0 A& K" S8 U& K1 `
printf("A process ask for a memory overed the system capacity\n ");
" Z: Y3 ~+ Z/ U* u& n$ M0 E- Xexit(1);
; T! M, a' { }}
5 |/ U7 o. \) K6 |- A+ greturn 0;
7 N6 _; R& ?% G9 l}
7 F6 ?6 `5 m% `" x2 O# \int ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw); N, [- u' c$ a F2 ^9 ~
{
0 K! _# X0 v5 [2 X( K* Ystatic int compute=0,waitio=0,change=0;
- A! y/ P6 `' istatic int computeLast=0,waitioLast=0,changeLast=0;
6 w$ K% @9 S, P! Wint i=0;
, M4 j6 P, s, ~* S* c, a7 V- sif(draw==1)
+ f/ w7 U) t% b' ~4 i{
7 {/ f/ y( x1 a" e/ u2 ]//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);: |4 E0 m4 I1 W1 H7 r
drawPerformance_SJF(0,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);2 W/ L5 h6 A: F
Z- W, b; X4 c
/ Q a$ p4 F. k( C# T- X; p2 e3 R! g
computeLast=compute;
/ ~2 d/ Z7 d M' JwaitioLast=waitio;2 `' y1 B) a3 @, g, i/ G
changeLast=change;8 F& M# e: z: {) @' D
}: C, J7 F2 z8 |( E' K
if((* memory).p[0].flag==ready)( N9 b' q1 |9 s* M& M
(* memory).p[0].flag=computing;+ X0 m0 g- H+ C
if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)+ U) ~, b% H! W
{2 z/ e: w0 T- M' {) H
i=(*memory).p[0].computeNum;
6 l. t$ N8 Z& p: w) i: ]if(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed _7 _- E0 |8 ?
{
4 q- Q# N" D) \& y" q, l(*memory).p[0].flag=IO_waiting;
3 M3 `2 Z; n. d6 `9 B$ x7 j! C7 k(*memory).p[0].computeNum--;
, l7 ^" D% b. I2 n) ichange += exchange_IO_Compute;
+ j0 @$ F3 S, \+ j( S, D; m- C3 Dcompute++;1 R" e" c$ Q. t5 u1 {% X: X' I
}/ U/ g1 x4 j5 [5 k4 ]
else* U" s$ H8 m# I9 `" r* |* r' l
{0 ?8 s" S5 B4 z% r) _
compute++;- N& m' m8 P7 D1 G: k' c o
}' P, w% U& h2 |$ x
}3 H1 j; l( y( }& ]0 h, I7 `
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
/ v8 T5 H( U7 C u& e& [5 q, Y{
+ I) w: b. S3 _! e0 I, R6 k/ w
8 T; a3 w, M5 Fi=(*memory).p[0].ioNum;
" w. h0 a' j: ?+ X2 yif(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed
* x) p6 J$ J4 i3 b3 p! R{, z: D: |+ P+ [/ ]: E" f+ Q/ h/ X- c
(*memory).p[0].flag=computing;% d7 S& _2 ?: L# A1 X/ Y
(*memory).p[0].ioNum--;6 f3 N$ w% S6 _% l
change += exchange_IO_Compute;
% s+ Y$ ~- M+ u6 L+ `waitio++;
' f" w- L: S; M7 a1 P}4 e. h2 i& v* P
else
- k- \0 R6 U# M{ Q- P8 \$ j4 U: Q, s
waitio++;
9 E; G7 p$ ?3 T$ f$ Y" P: T}
. H/ @2 @& L$ x# Y}: V5 f0 }& x# i9 u6 o3 J
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)
7 }9 }) e# D0 m4 R* {0 U. U{
" j* E; }/ Y$ P, X4 w! S(* memory).p[0].flag=IO_waiting;
0 g3 \& g. `( ?$ m3 h' Ychange += exchange_IO_Compute;
) g& n2 s4 P' E1 y0 i8 w}
: ^) Y3 w7 A. B2 B( h' eelse if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)8 J! w- ^) `+ F# \! ^
{* R# U" N# ?# D0 F
(* memory).p[0].flag=computing;& J. r8 b# p1 o! w/ j
change += exchange_IO_Compute;# O0 { w5 x6 ?; u. S. ]3 N
}
) b, x4 R& Z% {+ _! K' |if((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0) //一个作业已经完成
! [7 z( R g7 S6 w5 x{4 j! R& z' u/ \! [$ } L3 }; }
(*save) = (PCI*)malloc(sizeof(PCI));/ H5 h9 K6 l! [8 c3 I) y5 e8 u
(*save)->next = NULL;
/ }; p0 e/ n' k, l3 g" Z* o(*save)->processID = (*memory).p[0].processID;
; ]. v6 @% w9 k7 C) ~% W(*save)->comeingTime = (*memory).p[0].produceTime;
x7 V% c. l6 A( Q9 w: F1 J(*save)->askMemory = (*memory).p[0].askMemory;# |" y0 w% y) i( ?# @8 B% P' V1 b5 S
(*save)->compute = compute;! C$ v; |# V; v/ o/ ^" h
(*save)->waitio = waitio;
, e) ]9 K1 @5 }, {(*save)->exchange = change;
* W3 @; k9 t; n8 J; X) {" B; x6 U p( [(*save)->completedTime = systemClock;( Y' z, p. M1 o, [; @: N- Q
(*save)->runningTime = (*memory).p[0].runningTime;8 s+ P* S! h% S! \# \# s! A) d
*spareMemory = MAX_MEMORY;//*spareMemory + (*memory).p[0].askMemory;
9 m( U, M% J7 |( Wcompute=waitio=change=0;1 C* V( K+ D2 r% l9 L% F
computeLast=waitioLast=changeLast=0;3 q3 S; E/ _# t e* k
SJF_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));1 y: F+ z6 a# _# g H" L% c
change += exchange_process;$ w, F/ O* B6 j8 o( ?8 M( v0 d; H2 I
return task_completed;: U! J$ Z/ h5 ~9 ^4 ]% |% _! }( u
}
" H% B9 v+ u, \. w0 N$ ielse- d* b4 W& r6 Y0 H8 j8 ]1 r) T
return task_not_completed; s8 N. j1 B* |; g
}) o+ f! j0 H- N
int SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)
$ Q; a- N7 A* d) @: a( O! y{
- ^% v* x. t$ {. J: Q) J7 ]5 `# I* L) Eint i=0,j=0;
$ l1 [, Z7 \4 }% E% Xfor(i=1; i<(*storage).proNum; i++)) U: ~# q9 {0 X; g& O
{
, J( x% k2 \6 A* o- D/ @if(((*storage).p.computeTime+(*storage).p.ioTime)<((*storage).p[j].computeTime+(*storage).p[j].ioTime))+ h6 E/ x* C6 M- Z" D
j=i;/ B! S& y/ F( q7 e% e- Q
} u4 B# j0 n! [/ J/ Q3 U! [- U7 f
if((*storage).p[j].askMemory > *spareMemory)* L# j" r( H5 x/ }! K$ K/ Z
{5 x" r1 F7 M- j
printf("The memory asked is overflowed than the system memory.\n");9 a, |9 k/ F1 N2 L
exit(0);
% g2 \9 l% v8 y' s}1 m) V* c, u3 o5 P* X& R7 ?
else
2 @( Y" b; ^! Q8 L+ X6 J0 a. x* h{
0 _% p; t% D. P+ K) [- G# ~(*memory).p[0].askMemory = (*storage).p[j].askMemory;3 A& v% \$ c! n6 t
(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;% ?$ s. {! e; Q. {( Q5 a( d
(*memory).p[0].computeNum = (*storage).p[j].computeNum;7 }9 N% H: r$ ]0 c# z/ Z4 {' r5 e4 [9 P
(*memory).p[0].ioNum = (*storage).p[j].ioNum;
2 v) Q" d) s) S$ x3 C(*memory).p[0].processID = (*storage).p[j].processID;
( ^9 R* ?( n+ ?6 E1 N4 M(*memory).p[0].flag = (*storage).p[j].flag;
2 m# \% b" Z% {, P! g4 K(*memory).p[0].ioTime = (*storage).p[j].ioTime;
( G4 ?8 y2 T8 _: G6 `: ](*memory).p[0].computeTime = (*storage).p[j].computeTime;
% B9 t: _7 M: t(*memory).p[0].runningTime = systemClock;
1 k0 _3 N5 t( n: f# t9 T0 T0 o* ~8 u! T(*memory).p[0].produceTime = (*storage).p[j].produceTime;) ^9 g3 [# q1 l7 ?* j8 l4 U$ r S: \
for(i=0; i<(*memory).p[0].ioNum; i++)
j; W+ g+ R; f! w9 c; T/ j* q% g(*memory).p[0].ioClock = (*storage).p[j].ioClock;# e% ^3 f. M) q; ?# a5 x
for(i=0; i<(*memory).p[0].computeNum; i++)
1 M: |1 W9 G* L1 K' N6 P/ D(*memory).p[0].computeClock = (*storage).p[j].computeClock;0 T: U) `4 L4 V3 E
(*memory).proNum=1;
6 S; m, m' Y z*spareMemory = *spareMemory - (*memory).p[j].askMemory;
3 K1 R. n. m: B# V; s6 rproduce_one_task(&(*storage),j,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程- b F6 _2 M1 I/ K
MAX_COMING_TIME = (*storage).p[j].comeingTime;
. W5 S# Q( |! Y2 H. _# N5 o}
% S Q8 E7 H3 }# s8 h8 \return 0;
2 u) K0 C5 j2 u; n}
$ ]) X, `+ f/ e: L) ?. F0 R+ _' u2 \int TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
5 z8 ~! d# U) w* f3 [* o{! t5 Z( H, d6 e4 x4 I
static int compute=0,waitio=0,change=0,clockSegment=100,poi=0;' N6 W) F! E. Q
static int computeLast=0,waitioLast=0,changeLast=0;
. Q, a+ q7 N: Q2 T; l/ B# H0 Aint i=0,j=0,k=0; N* g- r; X8 L6 ~9 S+ g# D& _, C
if((*memory).proNum<=0)% d* O% E" K' B. O
TimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),-1);
" b& i8 o! P0 r$ ~9 X! y+ f5 t0 `if(draw==1)3 E. \' ]0 B" d1 D6 M
{/ D5 s! e3 q" k' X3 o8 G9 A6 n
//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
$ [ M# G1 Y# h8 F: [) a$ L. EdrawPerformance_TT(400,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
7 V4 g% s* Z p7 }) U
7 \5 {+ w2 ^# e6 [6 V- s7 G$ r& I" X# ^" O
computeLast=compute;
+ I& X/ ~. E$ U% X7 L6 r& c: s% T3 ^waitioLast=waitio;
6 I+ x7 p. w w- a2 UchangeLast=change;
4 r+ ?* ~ u' a& M8 P' W$ ]}9 d! ?, h& ]+ ~9 V, B
if(poi>=(* memory).proNum)# l4 D: ~. f: Q* ~) K8 ^
poi = 0;
; ]. l; |0 ^7 N9 Rif((* memory).p[poi].flag==ready)
: [$ K5 j. n# {7 I& n(* memory).p[poi].flag=computing;8 K- p' _; m: b- ], W
if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==computing)
- G! f8 v) o6 {# A8 p{
( e$ b, X) Q) x' `i=(*memory).p[poi].computeNum;! B4 A' B' \) F
if(--((*memory).p[poi].computeClock[i-1])<=0)// one compute tase is completed' Y9 D O @8 f6 o+ s, N7 M
{# |4 f" x- A/ s6 j
(*memory).p[poi].flag=IO_waiting; C" F7 u' Y: @9 T5 S
(*memory).p[poi].computeNum--;
w V) x( Z+ r. t d- @+ s4 B' Schange += exchange_IO_Compute;
" {3 s0 V) z1 Z- J1 A8 _! scompute++;
* {4 h: k- B2 i: H7 {}
2 f; o; ?" _# {1 I" Xelse+ q/ I1 y0 C' \& _. ~3 ]
{( S+ c2 h; {) Y6 ~. b& W* h( s) D
compute++;
1 f$ a; r I5 p}* D1 t8 i g* d( O5 T0 u
}
1 N# U0 I6 V3 E$ K$ b- B1 ^else if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==IO_waiting), i& K. |' Q5 X. ^( U
{
) ^- S4 j0 b. Q; ]( F3 C1 S" s3 B$ h" L
i=(*memory).p[poi].ioNum;
- d% a/ l6 u( x, }6 Y* I( lif(--((*memory).p[poi].ioClock[i-1])<=0)// one io tase is completed
' m$ `& p4 G5 u' Y{" b( o S3 u7 k3 ~; p
(*memory).p[poi].flag=computing;* @$ @; `3 _; R1 P; p2 I1 s& U
(*memory).p[poi].ioNum--;! R$ g9 f' K; {* i. D
change += exchange_IO_Compute;
" g, n4 ]8 V0 V7 R$ zwaitio++;, O1 n& Q; [! g P! Q
}
# n# _6 i7 E5 o. X& e4 m3 telse$ P4 Q" i: F7 o9 P( C4 n) Z
{
9 R9 {* `7 g9 U* R) zwaitio++;4 H% M; T7 L2 Y3 S+ z. z
}
( h+ y1 ^4 e' p}
Z7 L3 \% A6 R! @8 j# I9 Kelse if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==computing)$ a4 d1 }( y* ^, _+ n7 ?$ A0 C3 F
{
2 i( X( L$ k6 O4 T1 p- K8 T(* memory).p[poi].flag=IO_waiting;8 c1 ^- V! G, W& [4 a0 o3 ]1 |
change += exchange_IO_Compute;
2 Y @) [+ L+ ~1 \$ f}8 U$ t/ Q9 O k4 O
else if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==IO_waiting)
2 a4 ~& `# G5 `4 ^, @- s# R; |1 @{* J- v" x. [" G! d
(* memory).p[poi].flag=computing;
4 Y: W: k% V _+ J0 v# o. _/ b( [" ?change += exchange_IO_Compute;6 ?* i$ q+ D0 B) ` X
}
+ @$ s' D( ~! [1 @9 G& A1 J( Kfor(i=0; i<(*memory).proNum; i++) //其他等待io的进程可以并行推进0 s: d% y& m9 r# @
{
# ^# Y2 \( ?2 n$ X# Qif(i!=poi && (*memory).p.flag==IO_waiting)5 L2 Q$ v6 ]! l _. Z- S( D! C( y
{
4 e8 z+ j8 \' d1 n0 Gj=(*memory).p.ioNum;
% v' D+ q; r/ E/ A1 |if(j>0)
1 d# y* v0 V& G( r) z% n; K$ ?" z$ v{. O7 e2 n6 w& r
if(--((*memory).p.computeClock[j-1])<=0)// one compute tase is completed/ L; v W* X9 N; o
{
. k/ p; I. @, F6 i6 e(*memory).p.flag=computing;
; }# r$ M1 e2 L7 l z# n(*memory).p.ioNum--;
3 z6 ~9 P/ R1 r% Uchange += exchange_IO_Compute;/ }% _& }/ D9 c' l8 H9 V
} y/ s: R, t4 ` C% @
}+ q3 W' a7 f. Y" o' I, f1 J
}
" y1 B7 Y3 R- P6 K}0 `* Y$ k$ N. g# S* a
for(i=0; i<(*memory).proNum; i++) //处理已经运行完毕的进程% y' j8 v& M3 e1 z" W; C) n; z, U8 G0 v
{
" c) u' p( ~. ~3 z# K; wif((*memory).p.ioNum <= 0 && (*memory).p.computeNum <= 0) // a task is completed
# Y p2 ~; E; {9 I) P5 p! @{: Z9 c x4 I# H5 A8 o D
(*save) = (PCI*)malloc(sizeof(PCI));2 m$ \5 t- _$ `/ {/ w% J( q
(*save)->next = NULL;9 D* T8 W5 n2 a
(*save)->processID = (*memory).p.processID;! Y5 O+ f- j; S5 R
(*save)->comeingTime = (*memory).p.produceTime;
- |. X0 L3 b/ B+ \- N* I6 K: g(*save)->askMemory = (*memory).p.askMemory;
$ L U' m( `* s7 Q9 _(*save)->compute = compute;
3 U- V5 P+ P9 {. G(*save)->waitio = waitio;& i8 o; d9 O( d6 m# K
(*save)->exchange = change;+ _; w6 D2 o" j6 @+ } t
(*save)->completedTime = systemClock-(*save)->comeingTime;
9 P0 p2 p- N, Q7 ^# n(*save)->runningTime = (*memory).p.runningTime;
; D: [! F( s4 I5 |(*save)->completedTime = systemClock;
6 \2 `1 Q) H& Y0 I+ B*spareMemory = *spareMemory + (*memory).p.askMemory;9 [' b+ m. u# D/ l2 i1 |0 R, }
compute=waitio=change=0;: w6 P) ^7 j4 M( _$ V
computeLast=waitioLast=changeLast=0;, [/ ? P/ m" A0 q. {7 v
if(TimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),i)==1) // 调入一个新进程进入
% f6 h0 \' Y/ y% h' r; [1 d! I{
: h M+ Q: [9 Y1 [6 r5 T& uif(i==poi) //占用CPU的进程已经运行完,将时间片分给其他进程
3 u6 Y! m( x& e% p2 c% ?3 {{
, L. q6 y' o; \7 i) Q w% R# G$ Opoi++;. v. R' ?% H0 Q& k6 Y' o$ d7 q7 {& o
clockSegment=2000;' s5 ^3 b O& e
}" Q& o, V1 {& x7 c5 X
}3 K& [; q+ C8 o) T
else //没有足够内存调入新进程+ U8 s: @# Q s* C; k- w1 J7 Z
{" b4 J- g) @; j. C" }# j4 Z# d+ ~
if(i < (*memory).proNum-1)9 h- k7 n. B( C, \3 O% T. E* C
{
) b$ M- L0 s$ f! k# Q" n3 l& Efor(j=i; j+1<(*memory).proNum; j++)! R- {1 o0 P( h* j# Y% f
{
3 c# O7 E, _1 g' C; f(*memory).p[j].askMemory = (*memory).p[j+1].askMemory;
; T" y0 E1 k5 X: Q2 B( Q0 M(*memory).p[j].comeingTime = (*memory).p[j+1].comeingTime;7 `* f3 B& H5 x8 N z4 I: m% t3 I
(*memory).p[j].computeNum = (*memory).p[j+1].computeNum;
% r. U/ h8 Z, z5 b7 t1 R; w(*memory).p[j].ioNum = (*memory).p[j+1].ioNum;
7 A9 I; }5 Z- G+ H) G: l( X(*memory).p[j].processID = (*memory).p[j+1].processID;
3 K7 H3 t) |0 P9 y4 h. a(*memory).p[j].flag = (*memory).p[j+1].flag;- ~8 T2 U" H5 O$ {. K
(*memory).p[j].ioTime = (*memory).p[j+1].ioTime;/ q5 K7 W. l8 ^5 b; u
(*memory).p[j].computeTime = (*memory).p[j+1].computeTime;
- [" p% y% d1 b4 S- G6 o(*memory).p[j].runningTime = (*memory).p[j+1].runningTime;
4 ^& s2 E2 ] E& y3 V, O U8 M, M(*memory).p[j].produceTime = (*memory).p[j+1].produceTime;
' f8 x: e1 ]9 L6 }9 f- M(*memory).p[j].completedTime = (*memory).p[j+1].completedTime;5 C1 x2 R/ g. T, n! [& q) f7 j
for(k=0; k<(*memory).p[j].computeNum; k++)# p% A) O. f2 t' J: _: C) A
(*memory).p[j].computeClock[k] = (*memory).p[j+1].computeClock[k];
( h( C: b9 S. p. ]' |for(k=0; k<(*memory).p[j].ioNum; k++)
2 q+ ?* p: V4 |. y8 L(*memory).p[j].ioClock[k] = (*memory).p[j+1].ioClock[k];
$ _' }( l) e" o0 `}
: E# G- ^& w& @4 e Uif(i<poi)/ \" [8 R: V! b' O, L W
poi--;# {3 v7 I A- D4 e A' ~0 ?
else if(i==poi)! _! ?$ M9 X8 w! R- G
clockSegment=2000;
0 K9 t8 h! F9 a9 w$ s! K3 }" `0 ~}* Z, w: {( K" a& P/ P( g
i--;) m) }7 D7 n y. I3 Z( e
(*memory).proNum--;7 B0 r: o# I0 F, R3 @& `
}
+ \ P0 p% y$ G8 P- O/ l& Freturn task_completed;
: Z- X; `4 b) |8 K, D}: F( }4 f4 P3 z+ T4 X* J
}1 F$ c) y- p; [
--clockSegment;0 h. g& r8 ^3 l# w$ }0 I
if(clockSegment<=0)
7 b- i# }. ^8 x: k# d$ W{1 M: ~- F' x' n* ~
poi=poi+1;! Y' s3 f5 q6 Y8 d, A; P
if(poi>=(*memory).proNum)
8 z( e+ |& R7 o( l) i3 mpoi=0;
! q6 i' P/ F. TclockSegment=100;
6 S. J1 J" C, E6 _' U: @}) m o9 ^5 P0 } H, R
return task_not_completed;4 V. I8 B0 A; y) V
}
1 C0 g8 M: v( O; b7 @. Nint TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos)- X/ `. X) B9 r& A Z
{/ P0 L' ?' o% |* O6 \
int i=0,j=0,k=0,flag=0,translation=0;. c# m$ q' L3 {5 Y& i
for(i=0; i<(*storage).proNum; i++)1 W) O/ j1 T( @; H+ c" k
{( ?1 h! {" _$ Z0 k
if((*storage).p.comeingTime>MAX_COMING_TIME); b1 Z, n4 J2 _- a
MAX_COMING_TIME = (*storage).p.comeingTime;
! ?+ b- w/ ^) @. F( x& K) _}" |5 Q; }1 s; _; N
if(pos>=0)4 U B& }- o0 t) i
{3 P/ o# S3 Q* Y
for(i=0; i<(*storage).proNum; i++)
! B: K7 ?# f/ u9 b{
! P s& P" `# ~$ X! G$ u2 L$ mif((*storage).p.askMemory <= *spareMemory)% V4 `# h' i Q& p# ~* f; R9 E3 n
{
: v3 o2 A4 k' k. }7 o" x" b# X4 Rj=pos;
7 {; f6 k- ?6 l$ P0 x' t(*memory).p[j].askMemory = (*storage).p.askMemory;
' t" t* P5 \7 a( K) U5 |(*memory).p[j].comeingTime = (*storage).p.comeingTime;
$ Y1 g# F1 N3 d4 h0 _(*memory).p[j].computeNum = (*storage).p.computeNum;
0 n; K6 j, Z k9 p# s# R2 S(*memory).p[j].ioNum = (*storage).p.ioNum;
) F. E6 t/ G6 H% Y* d5 N) s; o( _; s! j(*memory).p[j].processID = (*storage).p.processID;
( g. H* I2 |7 O( Y3 S3 [2 L(*memory).p[j].flag = (*storage).p.flag;
# H: l6 m2 o9 R(*memory).p[j].ioTime = (*storage).p.ioTime;
$ B; _2 r: q3 @/ m, H(*memory).p[j].computeTime = (*storage).p.computeTime;- t5 R+ e3 V( s1 ?7 ?5 e
(*memory).p[j].runningTime = systemClock;, y( D2 a( T9 W
(*memory).p[j].produceTime = (*storage).p.produceTime;
/ o r! j& [6 Mfor(k=0; k<(*memory).p[j].ioNum; k++)
- W/ b" w7 F) U5 u(*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];
) @9 I# u' i, L& l" X& Xfor(k=0; k<(*memory).p[j].computeNum; k++)
7 ^/ l( B, B: [! d(*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];4 E0 V0 V( @6 G
*spareMemory = *spareMemory - (*memory).p[j].askMemory;, k; S' c( A! ?# o, P
produce_one_task(storage,i,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程9 ?3 o: r3 j" e- ~; `# E) Q
MAX_COMING_TIME = (*storage).p.comeingTime;8 {8 }! n1 }& m; i
translation=1;
; P. v8 u+ D. p5 g& xbreak;! w. L- \, L, E5 s C
}
( h8 t7 h, f3 [! e/ w! \- B}
4 Q/ x7 _/ f3 U% B9 g}
% X+ o. l8 V. y) Z1 R/ Melse
+ Y* D T# }( ^{
8 ]8 n! M1 `3 |8 wwhile(1)
4 B0 `& v) N1 _) D% R{4 C I' _6 g; r: r
flag=0;/ [( j: d$ \6 U( `
for(i=0; i<(*storage).proNum; i++)+ P. @, Q/ q4 i9 |1 Z- a8 c/ ^* T
{! T- e- H0 W( W8 t
if((*storage).p.askMemory <= *spareMemory)& x9 f. b9 L, `/ D3 w0 C0 H! P2 n
{
% f$ L+ I4 }, w" {j=(*memory).proNum;& H# b2 e: Y/ E5 M8 z' x. n
(*memory).p[j].askMemory = (*storage).p.askMemory;
2 x0 ]5 N+ F4 K0 v(*memory).p[j].comeingTime = (*storage).p.comeingTime;$ r* n* t& W) [8 o/ ]
(*memory).p[j].computeNum = (*storage).p.computeNum;
" s+ R0 y. | e+ {$ G4 j L(*memory).p[j].ioNum = (*storage).p.ioNum;$ M; j+ q% F8 ?
(*memory).p[j].processID = (*storage).p.processID;# j( y4 ` B) E& B
(*memory).p[j].flag = (*storage).p.flag;
' \9 T5 S+ Y) Q y' `$ M(*memory).p[j].ioTime = (*storage).p.ioTime;
3 ]& s* N/ x3 X2 e(*memory).p[j].computeTime = (*storage).p.computeTime;# H! q0 @- q. Z1 R0 J" L) C, H9 `
(*memory).p[j].runningTime = systemClock;
3 r' r$ M0 g: X$ Y(*memory).p[j].produceTime = (*storage).p.produceTime;
?: Z3 T1 p x3 y8 W) Hfor(k=0; k<(*memory).p[j].ioNum; k++): I1 E3 w% K/ z6 ?. b/ U
(*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];
) x$ w% a8 E: L k+ P/ tfor(k=0; k<(*memory).p[j].computeNum; k++)5 t! m2 y& u! z+ L
(*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];7 Y% z: W, k" q; f
(*memory).proNum++;
9 d1 N: \$ ^' v; t9 }2 p*spareMemory = *spareMemory - (*memory).p[j].askMemory;( T8 k! _7 q5 p( W$ @ v
produce_one_task(&(*storage),i,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程
: @. u+ a3 }0 _' W) cMAX_COMING_TIME = (*storage).p.comeingTime;( U5 C& x6 Y* _. X$ j
flag=1;! M8 x1 q( E" N: x
translation=1;
0 N# [( Y7 B) n$ u- P}3 [, F( s0 Y, g4 Q# B5 @2 E
}- X/ h3 s9 }1 y9 n8 }8 _$ x$ M# W: l
if(flag == 0)
) b3 H+ K3 u) Y# V1 p9 Obreak;
- ? x$ Y, r# @' i* d5 o}, Y5 |3 d5 U9 W' z& Q* r
}; d$ K. Y* W# H
return translation;7 o0 J( y$ ?; d, G+ M$ {) C' A) J* f
}( Z8 F: O6 z0 j8 v" \
int FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw)
, r5 }+ D+ Q6 c* C{$ s7 P+ f# |5 g) {6 q
static int compute=0,waitio=0,change=0,flag=0,flagiocpt=0;4 d. [. k) x2 ?) O
static int computeLast=0,waitioLast=0,changeLast=0;
+ ^ m" Y" v8 B1 p# Hint i=0;
7 |# Y; L2 J) j! m' Wif(draw==1): b; p4 z7 g' ~3 \/ l1 k$ v F
{) Q* K! M! \' g- f- G- e
//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);& u! _9 C9 ]) r: w9 J8 w
drawPerformance_FIFO(0,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);0 ]( ?: o# Z5 h; D- S
" q2 C* i; F+ M* d1 t
4 F4 A% x7 k0 m" W' mcomputeLast=compute;3 w- i; }4 M9 }) T- }8 h1 Y) x; j
waitioLast=waitio;
- E3 \# V7 @/ d: l4 _changeLast=change;
, B) t' J; E. U& V! X}& R4 q# D$ t% u" X
if(flag==1) 2 P; t; Q5 w2 D
{5 k- W& c6 V! h7 Y; `' E. D& Z
if((*memory).p[0].ioNum>0||(*memory).p[0].computeNum>0) //task is not completed) g; Z4 N- \- H
{
' a( f- Y' K) \7 ~' o9 h; z3 b# d: L# yif(flagiocpt==0) // implement compute% {6 g0 s+ [, B' c+ k
{
4 H% @( h* `) \( G* r+ j. Ui=(*memory).p[0].computeNum;1 s" G1 ?- |/ @- T& i: E
if(i>0 && (*memory).p[0].computeClock[i-1]>0)2 B& {- B4 S- U! a+ q1 C
{
4 w/ n( o e: y9 E. d3 sif(--((*memory).p[0].computeClock[i-1])<=0)// ome compute tase is completed
* A. E* z; Z4 {, R; j9 d2 H{ _# y8 W8 U J2 Q7 ^8 d, l9 L
flagiocpt = 1;
' R; ^8 `0 i' D(*memory).p[0].computeNum--;
/ |3 g0 Q9 S7 u. \) g! o: a+ N; v( }change += exchange_IO_Compute;2 a! j% @. d5 I+ B0 D2 P; N1 D% ~
compute++;
: Y2 `$ z) Z: Z5 X}6 j4 |; F) R$ D. \" L5 o" e8 l3 Y) g
else
$ U( \5 u8 j/ @( kcompute++;
, y* T( @/ z5 a, a7 W& M0 b8 @0 z1 h1 ?% ?/ ^9 U
}
& U1 b* y& z& ~6 O6 d2 ?else
) O+ @( o: M- P" d" j# P! z6 tflagiocpt = 1;/ B# E6 S( i/ o ?) B
}( Z/ T: C9 {+ K0 t f0 C. ~
else //wait io8 C+ ~" ~" q9 ]6 U
{) ?8 r! Q4 t7 }; A
i=(*memory).p[0].ioNum;
- ]% h* O1 {" o1 ~9 |; Z, N) m M9 e3 Uif(i>0 && (*memory).p[0].ioClock[i-1]>0)
4 R8 u9 U T& V+ Y. w, }{
8 U+ [8 ?: N* s1 I: D+ |if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed$ o& R( \! f: K2 `5 Z: R# S( C0 Q
{$ o4 G' Q) |9 y/ |% T$ Q
flagiocpt = 0;
9 ]3 l8 ?1 ^( Y9 E(*memory).p[0].ioNum--;+ [$ ~2 K8 ] I2 Q/ }& ~/ J4 Q
change += exchange_IO_Compute;
9 v* x. W8 [$ Q9 q; a8 ~9 @waitio++;8 t* s( h; c+ ~) `' D+ T
}
- Z. p+ Q. \" Q* W0 xelse, S) R, q* @8 L" t6 `) e9 q
waitio++;, w& L, f: O% C) B5 |
% G- ]& C! v. a0 m1 M2 J2 L* q}' v1 J- d0 v; `+ o) F9 p# U r) j
else+ |% s2 u' R, {
flagiocpt = 0;
5 y1 k3 I" P; M5 p4 h2 o! {* a}8 u( h- s! p1 U0 j
}* y( P2 ^; `. ]1 N8 i2 s* l: q9 @
else //task is completed e4 {& t" G" N% X
{
- q5 P7 n3 U" V' F v(*save) = (PCI*)malloc(sizeof(PCI));
$ b% X% z2 e# w(*save)->next = NULL;& N5 s: e; a ?
(*save)->processID = (*memory).p[0].processID;
5 I$ n- q! g( p% K! w4 f$ N. r: f(*save)->comeingTime = (*memory).p[0].produceTime;
" F4 w9 q+ ~# r5 N* ]5 G" P/ `+ v(*save)->askMemory = (*memory).p[0].askMemory;# ] ]+ o. ?. `/ A+ |5 C
(*save)->compute = compute;
" I9 L `. [" P6 l(*save)->waitio = waitio;; q! l) F0 D, K7 |) z% I: x1 Y
(*save)->exchange = change;8 O/ U" l5 R3 J
(*save)->completedTime = systemClock-(*save)->comeingTime;
- t+ [$ y( h+ _(*save)->runningTime = (*memory).p[0].runningTime;, ]$ Z9 D% G. p, a1 q) w2 D
(*save)->completedTime = systemClock;
. W- [& Y0 z* W( L) ?//*spareMemory = MAX_MEMORY;4 |1 _3 K* s3 e* t
free((*memory).p[0].ioClock);. }* B4 n' y3 L; x7 U' T
free((*memory).p[0].computeClock);
. G a3 W5 E2 K A9 N2 \free((*memory).p);
9 L6 ?- ^7 ?2 pflag=0;
; Q/ {) e) z' O* Wcompute=waitio=change=0;
) @( m0 J8 A& y) i! `2 i/ j8 Z9 VcomputeLast=waitioLast=changeLast=0;& j Z, r! g2 J& J5 Y/ e7 V# _
return task_completed;8 K# y& P- B/ d% B
}/ [: A- a9 _$ X
}
' w- i( I8 r: Y! B: s/ Lelse # I% E- f8 ~4 Z7 I. W6 G
{1 y/ P4 O+ x, K7 k8 T: b( g. Y
FIFO_storage_to_memory(&(*storage),&(*memory),&(*spareMemory));
8 ^- H+ u( H- t; Nchange += exchange_process;8 w3 z0 D; f5 O/ M; E0 v3 D& L2 z* K
//*spareMemory -= (*memory).p[0].askMemory;! J0 P* W2 U4 X0 I4 G2 d) [" g
flag=1;
4 x' {+ [4 A J) k//showProcessInf(*memory);' ]7 g6 Q ]9 S
return task_not_completed; {0 T0 m$ D1 m% v3 g
}: F& c) O0 M8 T! e- D( P' v! G
return task_not_completed;& i* R+ E/ \: b0 \/ ]. s
}5 C0 ^; T1 E* O! h% k+ P# m# N
int FIFO_storage_to_memory(processPool *storage,processPool* memory,int * spareMemory)) {2 c$ [9 E0 ]( Q( l
{
5 F7 [' @8 _6 mint i=0,j=0,k=0;
~- n4 \0 {, d2 r* p* c$ Z5 jMAX_COMING_TIME = (*storage).p[initProcessNum-1].comeingTime;
^( ~0 c/ E) f) N3 ~2 Z( E3 R, i(*memory).p = (process*)malloc(initProcessNum*sizeof(process));
. r! E2 ]1 u7 @- F4 ` k) G! J) omemory->proNum = 1;
6 X4 N" d* a& C; ~) J* Dfor(i=0; i<initProcessNum; i++)
% g/ L+ h7 P. h, |{
# O- J& T# e* b5 Uif((*storage).p.askMemory <= *spareMemory)
! `' ]. r. E, I{4 D; Z! T( P; U
(*memory).p[0].askMemory = (*storage).p.askMemory;2 m9 B9 B" s; R
(*memory).p[0].comeingTime = (*storage).p.comeingTime;3 b* e1 S) v: i- F, U
(*memory).p[0].computeNum = (*storage).p.computeNum;/ ~& k c. \& ?0 P7 G. X- _/ T
(*memory).p[0].ioNum = (*storage).p.ioNum;
% q* E6 X' ]% j( w0 X$ e4 S(*memory).p[0].processID = (*storage).p.processID;
4 C0 y# f7 g& L* P9 `% ]5 ~: q( e(*memory).p[0].flag = (*storage).p.flag;
c* }6 C- Q0 s- A7 Y(*memory).p[0].ioTime = (*storage).p.ioTime;
8 U9 f5 _8 W" X, n(*memory).p[0].computeTime = (*storage).p.computeTime;! [8 a" D# L Z% a6 B
(*memory).p[0].produceTime = (*storage).p.produceTime;6 X& q; R- P) B! H) C$ d
(*memory).p[0].runningTime = systemClock;
/ l- j c0 H- n; l! W(*memory).p[0].computeClock = (int*)malloc((*memory).p[0].computeNum*sizeof(int));
3 b( G- c/ S- q4 r(*memory).p[0].ioClock = (int*)malloc((*memory).p[0].ioNum*sizeof(int));: z8 @7 y8 _3 l: J3 M! [
for(k=0; k<(*memory).p[0].ioNum; k++) S2 O3 ?0 t4 X: g
(*memory).p[0].ioClock[k] = (*storage).p.ioClock[k];; g# z- u/ s ?0 e6 I5 t) s1 X: j8 J
for(k=0; k<(*memory).p[0].computeNum; k++)
7 E- I% \6 [1 r(*memory).p[0].computeClock[k] = (*storage).p.computeClock[k];
' v+ I. D( P8 gbreak;
2 g1 C) m4 c4 D: }}; O% S- p- B. G6 i
}
$ y0 w. w9 Y5 k" z4 l% u4 u3 f- Gif(i<initProcessNum) //调用一个作业进入内存后,并再生成一个作业等待调入
/ f2 u1 v; m# @* M4 v; s; u( h: z{2 w% Z+ ]7 b( z* ?7 j/ @: N) v
produce_one_task(storage,i,ID_FIFO++);" M4 S6 ?4 ~6 [, j
MAX_COMING_TIME = (*storage).p.comeingTime;7 f, Q% w4 R" m8 O
sort_by_comingtime(storage,i);
* u5 z; t) {/ p2 I}
- L" ~' { H5 J/ A# Ereturn 0;
5 J- Z: m. I0 R( x; [}
* ~5 O* y; e! Q" H) u- sint sort_by_comingtime(processPool * p,int pos)
5 ~$ o0 D" k) K& O8 W{# Z' @' Y* p/ E& B7 x
int i=0,j=0;
( s' X) X, x' L+ i/ X7 bprocess temp;
! j) s) @% K: L7 R7 Zif(pos<0)& h2 Z2 z5 B# g+ \1 F
{/ z/ b! ^' \% \8 T! @
for(i=0; i<initProcessNum; i++)
: D6 u- F; j) C3 Kfor(j=0; j+1<initProcessNum-i; j++)
% Y7 _* D! G) G E7 P+ j{8 @% h2 Y5 ~1 u$ o
if((*p).p[j].comeingTime>(*p).p[j+1].comeingTime)9 c0 I5 B2 w9 L0 g
{
: p5 @6 B: e4 H$ _4 c; n itemp = (*p).p[j];) X! I; {* E7 v; l% C; h9 R
(*p).p[j] = (*p).p[j+1];
8 U0 \1 _( X* O3 s( v* m(*p).p[j+1] = temp;
8 m& Z) Y/ X, ^% X4 |# i/ G1 P}. D3 w, }; Y' o! y T1 \3 Y
}+ Q& n4 q' t+ r+ ?7 a q
}
% v/ B# D5 a: z5 [, f5 Lelse if(pos<initProcessNum)
: S" k5 U" t T" Z: ]/ M' x& ]5 Q{
0 p7 n5 N5 Q9 y2 _for(i=pos-1; i>=0 && (*p).p.comeingTime > (*p).p[i+1].comeingTime; i--)
$ K ^+ s/ e; {& V{
7 H9 O6 T2 [; v' ytemp = (*p).p;
2 V! {8 D' U; R( }(*p).p = (*p).p[i+1];
& z, Z% Y, H, Q& ^(*p).p[i+1] = temp;
: M( t$ ~$ p! `& c. i}
6 X6 i! R1 \; efor(i=pos+1; i<initProcessNum && (*p).p[i-1].comeingTime > (*p).p.comeingTime; i++)! d7 ~" ?1 X/ D/ s
{" H% c" c8 K1 O+ ~! [5 j
temp = (*p).p[i-1];1 I; T4 X* y0 |" D9 V7 y3 _3 A: A
(*p).p[i-1] = (*p).p;
9 @$ O) u6 u) e% ]5 p(*p).p = temp;
3 _( f+ y w, F& z}
% ~ |+ Y2 K" b}* \3 x# L( E1 u3 s
else
1 C4 `/ ?' ]7 Uprintf("position eror\n");
$ p( d& `$ Q* m/ creturn 0;+ t+ ]5 t7 u8 B0 b& F' |
} j4 V0 n4 O% v
int InitPool(processPool * p)
$ r- E8 B9 J4 S# a# u( t$ V0 A{
1 m3 r( |7 H0 O7 uint i=0;
: v! _% X" U" A; U(*p).proNum = initProcessNum;
, Q7 t1 Y: F! ?8 B( t" e(*p).p = (process*)malloc(initProcessNum*sizeof(process));- Y) r3 o9 q- ]) F
for(i=0; i<initProcessNum; i++) //init process information/ }4 F$ o) U5 F* h4 h- C
{ _8 P; |( d0 D
(*p).p.computeClock = (int*)malloc(initclocknum*sizeof(int));# E3 X; |3 i9 D2 d2 F( p9 D7 b
(*p).p.ioClock = (int*)malloc(initclocknum*sizeof(int));
1 l3 L9 ?8 _$ ?& n$ N, mproduce_one_task(&(*p),i,ID_FIFO++);1 j T+ c5 N( G2 k I
}
$ ~6 u, q0 \1 g9 _$ xreturn 0;
: E" H; L+ d% f7 q. \}1 L- {# y y1 c, @" l: J
int produce_one_task(processPool * p,int i,int id)
+ l2 n8 b' T$ F0 s) U) }# p{" @) f* j- W3 p' _! J& \# f: _1 _# k8 P
int time=MAX_COMING_TIME,j=0,totallTime=0;2 r. Z- h; t8 z+ Y7 j8 Z3 W! ?. f- D
(*p).p.processID = initProcessID+id; ' K, W) V! l5 v4 a. I
(*p).p.comeingTime = time+rand()%(MAXProcessRunTime/5);) M, S, d, O/ g7 b
(*p).p.produceTime = systemClock;& b1 a, u. P Y8 Z
(*p).p.ioNum = rand()%4+20; //IO number setting to 2--5;; V+ ^+ q( G: W: m6 j3 [: s
(*p).p.computeNum = rand()%4+30; //computNum setting to 3--6;- Z, q" z4 Q% W; f; Q: P
totallTime = (*p).p.computeNum + (*p).p.ioNum;
9 K! L, [+ X$ w( m+ @$ ^6 s1 S) j4 I1 y# R(*p).p.computeTime=0;
" P& x" n6 c5 _ z( P! Y+ r0 \! Kfor(j=0; j<(*p).p.computeNum; j++)
1 x: b' @3 l; F{
$ ]1 y. B4 u& v(*p).p.computeClock[j]=rand()%(MAXProcessRunTime/totallTime)+1;
9 N2 S+ R3 |% C/ l(*p).p.computeTime += (*p).p.computeClock[j];7 w0 M6 U+ r k+ I" \. b4 c
}
( P$ f! _, M1 `# h+ _. M(*p).p.ioTime=0; r3 q. x% S$ w8 a7 f" r2 D- [
for(j=0; j<(*p).p.ioNum; j++) |
|