- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563428 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174251
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
* A& S& B+ e: P$ h经典任务调度算法的模拟程序
/ N0 p0 }! Z4 c$ ^4 T本科毕业设计写了一个经典任务调度算法的模拟仿真程序,测试了五种调度算法的运行性能。在程序中虚拟了任务的进程,按照不同调度算法策略从进程池中选取任务执行,在任务执行过程中,保存相关的统计参数,最后对这些参数进行处理,反映各个调度算法的实际运行性能,程序中可以通过修改任务的相关参数改变任务特点,测试不同任务环境情况下,调度算法的性能适应性。程序是通过C语言编写的,为了对运行结果图像化,采用了EasyX的图形库。由于计算机中实的任务调度过程比较复杂,在实验中为了简化程序的实现,在某些方面进行了特殊处理。
' P' a* g3 v4 L* u; e3 x
' a" z( E$ R; k. O/ G2 o编程平台:VC6.0+EasyX图形库环境。3 T; g0 O2 o t5 q; Y* z
, P- @7 k7 p4 c' y% F* u5 S# S以下截取部分程序运行图::+ ^9 ^5 I: t0 m3 |3 I
. H0 @5 V3 N! H- y4 c A. C源代码:$ ^9 m. I- M8 i' t" b1 f& T1 y
, `+ F& n' h7 k, s! n
#include<stdio.h>
* c! C0 Q- e/ e+ w5 O0 M#include<stdlib.h>- d$ U$ `. R1 b1 v, L" I$ ^
#include<easyx.h>6 E+ b2 A+ S$ q9 e1 j7 R7 z6 `
#include<time.h>- i7 X) l8 z; Q- Z" \
#include<conio.h>
# d* A `+ f# \* S: w" P9 f#include<graphics.h>
1 L" b& R4 P ^: X; u; R#define initProcessNum 102 h) e m3 I* K1 o7 L; P
#define initProcessID 10001 G8 W0 B* G7 X( B- P
#define MAXProcessRunTime 10000* @' f9 [( h3 E' t
#define MAX_MEMORY 4000( s, Q/ U9 I% m. |' `0 D
#define exchange_IO_Compute 10( R/ y' w8 b/ l4 k
#define exchange_process 254 b. u! ]( Z% |! M! [& j! w' S
#define task_completed 1
2 y) y- A, Q! {& \* {#define task_not_completed 05 H% O* V" [( L# X/ K6 }1 n
#define initclocknum 100
* P0 b: J9 T8 k7 w3 B! Genum condition9 K$ r% b0 ]" ~3 Z4 C$ n4 e- V0 ^
{
$ B" Z, E% l( @' B6 |dead,computing,IO_waiting,ready, v1 k) n# D9 E
};6 I6 D1 c! o% z" @$ L) R
struct process
: \0 r" o% [1 C! ~& _9 P. v{
: I; |& b* {( N+ k4 c# W+ Zint processID;9 n: [0 i. D- h
int comeingTime;
; r6 E9 @/ J; O' i8 [int ioNum;
, J8 T, q7 G5 k& g q5 I9 n# I$ _; U tint computeNum;4 @8 J( r5 t" c; f* ?+ H- q
int * ioClock;
2 f6 w0 b5 }6 B) M3 s9 X( fint * computeClock;" m8 H) X6 L8 ~+ {7 Z+ q k
int ioTime;" F+ d0 T# }% l- i# c
int computeTime;
$ S r, v; V! v6 Eint askMemory;1 y" w, A k; K$ E# \. K, }
condition flag;
4 |- [4 L* d+ Kint produceTime; //生成时间,以下三个数据成员用以计算相关性能6 `% B$ h3 R8 A4 N" o
int runningTime; //第一次占用CPU的时间
' Q" I6 L7 t0 d, }% vint completedTime; //进程完成时的时间
$ j5 s) j/ o+ y: o1 J4 e};
& _2 A" l" G# I% G, s: E7 Y) Htypedef struct processCmpletedInfo //保存完成一个作业的相关信息: A: v! M% L+ v$ E
{8 P; ~9 z/ q: F# q
int processID,comeingTime,askMemory;7 P1 \1 W% {4 Q+ J7 p8 q$ z
int compute,waitio,exchange,completedTime,runningTime;
* U+ B3 e6 V# s' r* _, S; \processCmpletedInfo * next;1 \( Z7 Y. {. S- Y: |* c% B
}PCI;9 W. ~0 K# k2 O$ F8 F0 R& l$ I, ]
struct processPool; h- Q; w- W, H, }3 Z
{
8 h* G {, J; |3 @* Aprocess * p;
* s( s5 c1 z/ t: r- \ r7 wint proNum;$ f. V9 Y4 ]9 i7 E
};# P$ d( s4 i! U1 X; |
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;
3 B H, n& K6 |7 u7 oint InitPool(processPool * p);
: r7 s& S7 D/ e0 M u' W" Z; _& G8 Qint produce_one_task(processPool * p,int i,int id);
( w: q/ y" e% o' }$ L4 ]int FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw);: w' y" K- [7 K" E% {
int TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);% ]2 H' N) ^/ Y6 K/ W
int TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos);
" j" Q! K. U( S, U* Lint FIFO_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);8 ~6 K4 r4 L l9 b
int ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
- `; V: F4 K/ \/ `" Y3 M' Dint SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);
4 ~: p; r* x, n$ x5 {- t7 Eint PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);/ S2 x+ m7 D. Z8 G2 O! x2 e
int Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);4 S3 S) T/ ]" w" E+ y' c
int High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int disatch);
( F' F0 p: }/ s% L; R4 V& m% tint High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);( @0 I1 Q9 M0 `5 m
+ N$ F* `! L( w. T* D
0 y4 [2 r: v' X! D3 E
int sort_by_comingtime(processPool * p,int pos);
! J; i4 E1 G, i9 @5 `) x2 Jint showProcessInf(processPool p);
) A6 T L! |7 o4 w- Nint drawPerformance_FIFO(int x,int y,int memorry);; `' @3 v% j: u3 d
int drawPerformance_HR(int x,int y,int memorry);
( |* F0 l& n n+ Gint drawPerformance_PF(int x,int y,int memorry);, Y2 H- H$ T, @
int drawPerformance_TT(int x,int y,int memorry);
5 L2 ]; x/ a' F* f: w2 p" nint drawPerformance_SJF(int x,int y,int memorry);
6 M7 l3 n7 s2 @1 E7 yint MouseListening();
. A$ k0 u! q& Z9 ^! iint MouseListening2(int *flagShow,int * showTime);
( V. N; {" t0 g0 d S6 i& ?int showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR);
" `: g* t) o: _+ ^
+ x$ U& d# m: x Z; z7 T8 o1 k+ {5 M# p5 O% Z! a# B$ J: [; i
void main()' ~+ p8 h T! W0 l3 o/ r$ F
{
5 `5 |0 D0 e% k7 z1 m3 SPCI* FIFO_save_head=NULL,** FIFO_pri=NULL,* Timet_save_head=NULL,** Timet_pri=NULL,* SJF_save_head=NULL,** SJF_pri=NULL,
O7 {0 G3 J) s+ V; w*Priority_save_head=NULL,** Priority_pri=NULL,*HR_save_head=NULL,** HR_pri=NULL,* p;
) s/ X. u: x3 [5 I [3 mint i=0,FIFO_memory=MAX_MEMORY,count=0,Timet_memory=MAX_MEMORY,SJF_memory=MAX_MEMORY,Priority_memory=MAX_MEMORY,HR_memory=MAX_MEMORY,$ @! a$ ~2 Z* f
flagDraw=0,showTime=100000;
" j! p8 O6 ~# Y- M$ ~processPool FIFO_p, FIFO_mmy,Timeturn_p,Timeturn_mmy,SJF_p,SJF_mmy,Priority_p,Priority_mmy,HR_p,HR_mmy;
8 V$ z2 p0 o; F4 `7 F/ ?% VFILE *fp=NULL;7 H. \7 Z2 }9 N M* G
//processPool HR_p,HR_mmy;2 _# S( o9 s1 f! n( Z
. h- n4 z/ f/ P; ~8 z" e5 x5 y( C" Y
srand((unsigned)time(0));" h. M2 V: P! ]% G) m
systemClock=0;
& Z1 @! P4 u" [; I8 V% w" W) q, zinitgraph( 1200,650,SHOWCONSOLE );
) B4 _% s- H6 \+ I* B( C$ Isettextcolor(GREEN);
8 l: X ~2 ~; \2 B# V0 G, n% T+ |3 T& Vsetlinecolor(GREEN);, L: L8 K1 X9 K; Q, u
setfillcolor(GREEN);
0 Z" G7 u5 p! D4 Z+ ^9 v2 I& R% v. ^InitPool(&FIFO_p);
, ^# I, \9 U0 ?( rsort_by_comingtime(&FIFO_p,-1);
' }, G6 t7 d+ m7 `: ^3 M+ NInitPool(&Timeturn_p);6 @: w" o2 \; @& a: N
InitPool(&SJF_p);+ ?7 G- u; n9 H% @1 n. [5 _
InitPool(&Priority_p);
/ k; ?% Y5 k2 H0 r8 eInitPool(&HR_p);/ w& ?: Y1 ]9 w0 z
//showRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);
- E; o4 k0 K8 P2 g//Sleep(10000);
9 p" V& `3 |: H, H3 o3 K; V5 P/ r/ r, U( h. n$ E; G
6 |: U2 M* |' e3 oTimeturn_mmy.p = (process*)malloc(initProcessNum*sizeof(process));7 i9 P, u q( q G" B$ ^
SJF_mmy.p = (process*)malloc(initProcessNum*sizeof(process));
( L! j" D& [3 W7 C4 B/ R4 Z2 u! a8 dPriority_mmy.p = (process*)malloc(initProcessNum*sizeof(process));# u8 i* B. L0 ^- h4 P+ S
HR_mmy.p = (process*)malloc(initProcessNum*sizeof(process));, V* i6 B, ~+ d, j+ p5 F- o& p) G
for(i=0; i<initProcessNum ;i++)
5 C* I% v \$ x" F R$ H! r: c{/ q; k1 [4 K8 |
Timeturn_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
# n9 _8 }. V- o4 B+ h" ]/ dTimeturn_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));( J% c: l7 n/ i8 ~
SJF_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
' c! N: C' M" i8 R4 X. z7 ~3 rSJF_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
* L; x2 s$ I8 }Priority_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));4 P) L2 Q% F- d2 p4 f) t& r5 L
Priority_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));, e6 d' X: w0 ^# M% Y
HR_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));4 _. s% u, i" n/ O7 W& ?
HR_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
- }: o& [8 P! A# l}
5 L# L& m) } _1 Z5 L6 ?- i0 nTimeturn_mmy.proNum = 0;' C- `' C) l; n9 d3 V
TimeTurining_storage_to_memory(&Timeturn_p,&Timeturn_mmy,&Timet_memory,-1);. t) k& v& o% w l4 l1 e9 Y5 A6 d
SJF_storage_to_memory(&SJF_p,&SJF_mmy,&SJF_memory);
3 i( o) ?, j! X: Z- jPriority_storage_to_memory(&Priority_p,&Priority_mmy,&Priority_memory);# _0 L. Z7 n4 l( E; q& `! f
High_response_ratio_s_to_m(&HR_p,&HR_mmy,&HR_memory,0,1);
! U+ l* W0 e9 i" W" m3 }//showProcessInf(Timeturn_mmy);( r5 ^1 V5 W$ e. i/ ~ f% z
FIFO_pri = &FIFO_save_head;
( f0 b. @0 X9 a" OTimet_pri = &Timet_save_head;
8 T/ k1 `7 f" OSJF_pri = &SJF_save_head;
; E$ k0 h' B4 pPriority_pri = &Priority_save_head;
1 }' y+ n! D' Z, ` HR_pri = &HR_save_head;6 T2 U& u8 F9 ?- s3 Y! h
setbkcolor(WHITE);0 ? @. j- J) x+ a0 c
while(1)
7 b. A* e4 U( J{2 |4 t! [6 Y0 ]- H
if(MouseListening()==1)
/ s0 P6 g, d: w) \" p* V; H% _flagDraw=1;5 U+ k$ \: n8 d" \
if(count==100)
9 V' K+ ^( E1 {3 ~9 \{3 p& b+ ~- }0 c% b3 E' c5 ^
if(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,1)==task_completed)
: A& K( d Z1 e4 G0 Z( i/ }{$ A8 q- O( O9 O) q) e6 ~; R ]
FIFO_pri = &((*FIFO_pri)->next);
7 m6 W# P3 v2 _- Z9 U
6 ?* D7 p. e9 n6 S. B//printf("hello");
: g7 L4 ?* m4 K3 [$ l! @}
/ W8 ~' v) Z3 q4 e" g! Dif(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,1)==task_completed)# d8 V) i. ?* N" Q+ m6 Q
{
: {+ j( R5 E4 [" ~* T- a Timet_pri = &((*Timet_pri)->next);* u5 a' B. a: k$ C; b2 Z
//printf("hello");
6 m& W3 Q0 a, |) Y: E, x}8 w& m, D; Q: w5 z* {4 X
if(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,1)==task_completed)
% `8 u, Y; B( Y4 I! I1 y{
4 ~. G- z) m2 y5 d3 qSJF_pri = &((*SJF_pri)->next);
% S; a- a6 \! @0 a- n//printf("hello\n");
# |, H7 A! T) [' |. a0 N0 R}6 `- R/ {1 V' o- n6 [0 ^
if(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,1)==task_completed)
1 k+ K/ o, A, v% z{! [. A& y5 M4 m8 I- Z6 c
Priority_pri = &((*Priority_pri)->next);
" V) ?, e) j# F9 Q//printf("hello\n");
4 O; A0 ?0 m0 q}
& W3 S5 e8 j8 ^; F' D% y( A; {" Yif(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,1)==task_completed)5 J. M& {# Y3 Y& D5 E: ?
{' M; c& A% o: B/ c# b# h! m
HR_pri = &((*HR_pri)->next);
7 A5 g: v& G) T; W) T0 g D9 w//printf("hello");
+ u% `! \! c! i6 q! J. G4 _}9 ?4 E- K H0 u# T+ N/ S
count=0;
+ G% u9 n6 U# B1 J. A}/ U/ L9 ]" O* [
else
5 X% e, g8 u x, {+ K J{( u, l, L( l, N4 X2 s
if(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,0)==task_completed)/ F! E2 N3 }; @! ]
{
6 x S1 Z& ?7 n- g+ J* sFIFO_pri = &((*FIFO_pri)->next);
+ g$ c' r* w+ x1 {5 _+ t! k// printf("hello");
+ B! R3 a" U3 q2 A4 U}( U2 P- D0 D1 G
if(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,0)==task_completed)
$ J5 H7 }/ ?( l6 `) Y8 @! f5 o5 J3 F{( }- M8 ]) j$ V: z/ C" k4 g# W
Timet_pri = &((*Timet_pri)->next);# E6 \6 H5 f3 `. F1 L: R7 b4 M
// printf("hello");
# W% Y, @7 I" M5 t3 n. c- P} a7 G, R$ r! P1 H
if(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,0)==task_completed)9 H2 |& V* E A" g, D
{5 z0 [# J! G7 n. D! M
SJF_pri = &((*SJF_pri)->next);: O5 h1 T' W4 ]7 R% S) P9 Q
// printf("hello\n");
: O( ~* ~6 w0 z5 L}4 d, X5 [5 o& q, ?% x+ b- Z
if(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,0)==task_completed)# I# m2 s" z" C0 W0 N3 i
{ K$ `; ?3 e# d
Priority_pri = &((*Priority_pri)->next);
0 X$ T$ z! n# N- x3 R//printf("hello\n");" z+ X" m) u$ S3 `
}
0 B8 j, V* K/ ?/ oif(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,0)==task_completed)
6 }% K9 _7 H7 d" w3 R5 q; e{7 q+ U# w! F4 t
HR_pri = &((*HR_pri)->next);" }: S; A" L X. O3 |( {, m4 p# z
//printf("hello");- V; w1 z% p) K( E8 I
//Sleep(1000);9 K0 O( W# W6 K
}
6 @- w( A( k6 j! z5 I5 u1 A% |count++;
3 N! T( E8 ^2 s7 k) Z9 {+ E}
- f [ D$ l4 Pif(systemClock==showTime)0 g: ?5 u, J1 u1 t
{( l! I+ A- C$ O! B. _3 S
/*PCI * p=FIFO_save_head;
. }) k5 k0 `+ E( n5 Qint i=0;& o4 u# B+ ^2 r7 G7 r) s+ s4 s
for( ;p!=NULL;p=p->next)4 T& S: y1 w& n
{& Q# [; H- R/ Z' t$ X# E. E
printf("Id %d\n",p->processID);
- u( z. v* a) N1 Q) ~% Dprintf("comeingtime %d\n",p->comeingTime);& N* l1 {) f9 f& p# X
printf("runningtime %d\n",p->runningTime);
+ u4 P, }* Y6 d. `printf("asdmemory %d\n",p->askMemory);. L$ U; V' [6 v" x8 x
printf("completedtime %d\n",p->completedTime);$ n3 U- {, l5 l& i* R- X4 p# e
printf("compute %d\n",p->compute);
8 a1 U4 v/ {2 i! tprintf("exchange %d\n",p->exchange);4 d- s# X1 [4 N$ ?, z |; o
printf("waitio %d\n",p->waitio);
9 U; i+ J6 b( {. ], G% Hi++;
6 f: p$ [- N2 e: ?. Q+ R4 L* c) v/ G2 O" S0 g7 ?
- r+ \% ?, O8 w; U& H! T& A
} m1 x. s: K0 r& B7 W
printf("%d\n",i);*/$ T# F) V, X* a, X' D$ k0 G
if( (fp = fopen( "data.txt", "a" )) == NULL )0 ]# k0 U/ Y, t8 l- t! v5 x
{
" @6 I1 K( S' s1 sprintf( "The file 'data.txt' was not opened\n" );
4 w+ c1 w( P6 Z0 p//return 1;
" v) @9 l W! d. y}) @$ J2 U( x4 I% x" w
else5 m; e- s4 ] _) P* I' D
{
* j. i1 e& b$ P) p$ Z1 `6 j- ifprintf(fp,"FCFS \n");( E' t, v9 x- f1 u1 t/ s
for(p=FIFO_save_head;p!=NULL;p=p->next)5 x: j; Z+ z* q6 G9 v
fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,1 s% e5 M9 O9 a" O6 N2 T
p->exchange,p->waitio,p->runningTime);6 S5 [! W/ [7 k3 D# i
fprintf(fp,"\nTime turn \n");
3 _8 }. `. j( l6 C& g7 l$ h2 Sfor(p=Timet_save_head;p!=NULL;p=p->next)
( K! t. E! h3 \8 O& t/ y: zfprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
$ h. G( O0 S* v; sp->exchange,p->waitio,p->runningTime);
4 }2 }1 z A- ^1 Y- Sfprintf(fp,"\nShort Job First \n");
+ P j9 o9 W7 r* [6 mfor(p=SJF_save_head;p!=NULL;p=p->next)7 [' t' H0 G3 X3 }, s' o
fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,; z l, W6 I- D: {2 {3 w6 _% M
p->exchange,p->waitio,p->runningTime);
1 ~" w7 j5 n; Q: m" ]1 @fprintf(fp,"\nPriority \n");1 h! j" K) }2 R; Q6 }% x
for(p=Priority_save_head;p!=NULL;p=p->next)
$ D% l% b7 Q- x" cfprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,/ l' k( x, O; ]7 r
p->exchange,p->waitio,p->runningTime);
$ n2 n' D& y* v7 C" S0 z0 Gfprintf(fp,"\nHigh response \n");
4 F( E5 O6 U: C/ R0 [9 _for(p=HR_save_head;p!=NULL;p=p->next)7 S% F$ J V: L1 M) i
fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,2 A$ x. x6 f$ }) z: F1 P
p->exchange,p->waitio,p->runningTime);* y; G% Q- K$ O1 O7 h
fclose(fp);- H6 x& U2 P3 t( h7 z6 q0 Z4 @
}
2 h' H5 M% H) IshowRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);) G& k+ H+ ~# h" N3 n
MouseListening2(&flagDraw,&showTime);
% }& j- s% \6 z; |+ e" S* v. |}
) u1 h5 x0 V8 {8 IsystemClock++;
/ m4 P0 _6 H- ]7 Rif(flagDraw==0)6 `" U1 n1 @" ^. Z2 M
Sleep(10);5 b- a/ j" H) S6 ^8 O. S8 W
}
' P- P, M+ E9 T
# [/ K& N; r3 w& a! T% Y5 ~) i/ t+ S( n
}& M! d$ I8 U6 E ^3 p
int showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR)7 o2 C6 w. }9 R1 t: M( |
{+ x& s) P7 ]" j b5 m1 x
PCI * p=NULL,* name[5];
2 ^4 I/ A, u. yint count=0,i=0;
/ s) b) w2 J8 u4 b. e- hchar ch[5][10]={"FCFS","timet","SJF","PR","HR"};" A9 t3 j/ u0 a* ^( s) z
double turnover=0,wait=0,c=0,w=0,change=0,pos[4]={0,0,0,0};7 E5 J/ O1 |+ N9 b( r+ E, Q. t
struct info
* D. D& \( _% k6 c{3 x8 V5 }3 u9 F# b9 [* G- Q* a9 P
char name[10];
, P" @# x6 y/ R+ a$ udouble throughput,turnover,wait,CPU_rate;! k1 ~/ b- i9 W4 t# p8 j5 p
}inf[5];: N6 S/ p* _9 |% y+ B
name[0]=FIFO,name[1]=timet,name[2]=SJF,name[3]=PR,name[4]=HR;
~8 h1 q% U4 Q. Gprintf("调度算法..........A\n");
0 `$ B: n$ N5 E2 y- A, h# M' K9 Nprintf("吞吐量............B\n");
. N; i5 u7 [7 Zprintf("平均周转时间......C\n");
# X+ N# h+ C! M( f5 O6 i& p: w! E5 cprintf("等待时间..........D\n");3 ~; o1 D6 X8 T
printf("CPU利用率.........E\n");: z! L+ z$ }0 r# W n
printf("A\tB\tC\t\tD\t\tE\n");
, y( y) z0 F% xfor(i=0;i<5;i++)
9 j! |# i& J/ ]9 u" s$ f) G{0 l' U! V- p. t2 w0 F! I
count=0,turnover=0,wait=0,c=0,w=0,change=0;; A0 W% R& [ \4 ~! @
for(p=name; p!=NULL; p=p->next)+ I+ V/ S4 Q( `: G. r) n+ N5 F. d
{
0 ?2 j3 j4 E. g$ }$ Y/ K0 mcount++;3 I' [, ?) X8 [, Z
turnover += p->completedTime - p->comeingTime;. b1 S0 U' ~9 R$ N6 G
wait += p->runningTime - p->comeingTime;7 U, E8 [, k) P; w
c += p->compute;% h8 _$ q8 o/ J2 B6 ]! z( Z
w += p->waitio;/ Y5 E" t4 n! R
change += p->exchange;
+ u/ V" q0 W6 z% ~7 C$ M}0 T$ q8 C# I5 O. N) p, @
turnover = turnover/count;1 g) I6 q- A, y+ U
printf("%s\t%d\t%.2f\t\t%.2f\t\t%.2f\n",ch,count,turnover,wait,c/(c+w+change));
5 {7 N1 [) i; D5 n& ostrcpy(inf.name,ch);# Z/ T2 j2 t0 p
inf.throughput=count;
6 K7 V5 ~% {, |" M0 _# zinf.turnover=turnover;4 L4 h- _" P% \8 \9 }9 o
inf.wait=wait;
; I# {1 B* E4 Q' f3 ~' G1 sinf.CPU_rate=c/(c+w+change);( K+ h T1 C7 D* K9 w! t: e
}$ j# t6 _2 [. \( i2 J* q9 r
//画图
, Y7 z8 S0 \5 b0 R- I7 @8 O//cleardevice();
2 Z$ @. m" B1 Fline(0,600,1200,600);
( @( |$ ]1 f$ F4 eline(10,600,10,200);* w5 `' e! a8 p) B
line(10,200,5,205);8 _6 J( G. g/ J- ?
line(10,200,15,205);/ s; _, l2 h! q& v* k: M5 l
line(310,600,310,200);
3 o- B8 I% n* O& I9 @8 ]$ n$ ?! `3 fline(310,200,305,205);; M) P. ^1 L0 ]- b
line(310,200,315,205);
* v/ i1 }, J2 M. j! v+ z+ h6 cline(610,600,610,200);. I, Q' H8 m$ w* h. h
line(610,200,605,205);+ U. s3 v9 U5 ?% l0 u% U% E
line(610,200,615,205);" x j, p) c/ i% e
line(910,600,910,200);
/ X1 k& U; c9 Y/ @9 y+ b2 Y6 _5 Cline(910,200,905,205);" E1 V5 `1 r7 b
line(910,200,915,205);//最高的长度400,宽度均为40
1 P& W$ n7 m R6 V4 [for(i=0;i<5;i++)
* }3 D* |5 V2 d. ]+ W* U) S: f{
0 o( Y; F6 _2 |1 Y& Y) ^6 sif(inf.throughput>pos[0])
( A% G: `/ Z2 v# apos[0]=inf.throughput;0 S9 @; A! {! I- L3 H$ t
if(inf.turnover>pos[1])
$ D9 t8 v u% a% v0 fpos[1]=inf.turnover;# n+ n# S* K. a: e+ p+ I$ u
if(inf.wait>pos[2])
$ A0 e9 ?1 S0 p2 T* u$ Ipos[2]=inf.wait;
# g8 `0 w" i+ B# Jif(inf.CPU_rate>pos[3])
! H( k: g6 T* s0 D* \pos[3]=inf.CPU_rate;
, |5 ]/ {* `* y8 q/ V7 i! o}! e) Y9 @% f& \; ]: v
settextstyle(30, 15, _T("楷体"));
( a6 x8 |; D2 n2 C1 x# X% p7 \for(i=0;i<5;i++)
w8 U/ C: s T{6 B; P+ p+ w8 F, W
switch (i)
9 u# [! B, O+ v( w% B. Q F{" V0 ]3 i$ d- s9 y6 `0 W) D
case 0:
1 R/ I8 T+ W5 z! f Gsetfillcolor(BLUE);
7 V0 q2 M/ @4 {4 ~3 |6 bfillrectangle(100,50,150,100);2 f% H7 B& ~2 ~! G: a
outtextxy(160,50,"FCFS");& E; X' }/ _# V
break;
+ N3 p G! |9 X9 p, B% f3 Ycase 1: S4 v! z3 L' @" p% O
setfillcolor(RED);
6 ]5 l7 k$ _: T$ p5 Nfillrectangle(250,50,300,100);/ \( I+ g( u2 Q0 e* m
outtextxy(310,50,"timeTurn");
$ t- d/ S$ z4 W1 t9 b* L qbreak;
+ E; g# @/ Q+ G0 u2 `case 2:
2 \9 a$ y/ w5 A" Y; csetfillcolor(YELLOW);* a5 R3 ~5 Z6 L
fillrectangle(450,50,500,100);
: W' S. n: R6 U0 ~6 @outtextxy(510,50,"SJf");
$ S2 |0 E# a6 B8 `break;
; m9 y9 T; i; T) O: ^" @; t' hcase 3:/ M6 x+ Y( S. H9 I( T
setfillcolor(BROWN);6 J# P/ J) d5 Y8 a: t/ l: F; Y& |2 b
fillrectangle(580,50,630,100);3 v, v# I- W2 K3 @/ E* v) m$ G
outtextxy(640,50,"PR");4 H1 E8 N9 V: j j7 j( k
break;
! H l8 X3 T' R9 a: h4 Dcase 4:
3 \3 ~3 ^3 A/ C6 D3 m, Esetfillcolor(GREEN);: P- s3 d0 n) S \0 I x5 _
fillrectangle(690,50,740,100);
: o+ i+ J. t9 `: {' L: zouttextxy(750,50,"HR");
8 W& J0 L! O) m2 ~1 F& `" ?break;" b* F; f9 ^) V6 g9 L
}
8 d' W0 j, A2 ^. p- [7 lfillrectangle(50+i*40,600-(int)(inf.throughput*400/pos[0]),90+i*40,600);
0 ], t. b$ s$ ?" P! ~* Zfillrectangle(350+i*40,600-(int)(inf.turnover*400/pos[1]),390+i*40,600);
9 p" u- R' [( M5 U8 z) ?5 P% _5 H$ }fillrectangle(650+i*40,600-(int)(inf.wait*400/pos[2]),690+i*40,600);
9 z( {/ _2 l) r: afillrectangle(950+i*40,600-(int)(inf.CPU_rate*400/pos[3]),990+i*40,600);
( ?, r; L O3 z: N
7 ^( T& o- ]5 X" X D9 ~9 U. O
. n9 g1 ^9 b- f! e, c}
7 P4 F6 i3 \5 `" \- M& O( t outtextxy(100,150,"吞吐量");
& }& w! w0 c6 \. R5 p1 ^* Q" eouttextxy(350,150,"平均周转时间");
|* t" v' l8 I# u( O5 houttextxy(650,150,"平均等待时间");
+ \& R7 q3 k! @. zouttextxy(950,150,"CPU利用率");3 b: Z5 k h. Y& [6 A/ g' i
return 0;
/ f+ O+ N( q0 a1 o0 }# o( t. y}
1 M- q, t6 X' I( |. R$ B+ Tint MouseListening(). ^7 [) P1 c6 V5 z
{, h$ @' {0 |6 L5 x( ?( E7 G# e( U+ u
MOUSEMSG p;
9 f; f- {3 Q5 l3 s& eif(MouseHit())- K+ L: q: F0 v _6 y; ?8 L" O
{
+ e% @5 B5 v1 o I* O1 Hp=GetMouseMsg();6 a) s' a+ U( s( g' a. O
if(p.mkLButton==true)
' `* G' v1 N& W- c* a{
3 U" U3 Q9 W4 _9 `) c$ o6 n8 tif(p.x>0 && p.y>0 && p.x<400 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)- X( ^7 O v. O% z& J2 y
FLAG_FIFO = 1;
9 B* e: v% Q: U' v) H8 Aelse if(p.x>400 && p.y>0 && p.x<800 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
- [% D# ~1 M/ E. G" @FLAG_TT = 1;; U/ c& Y3 K- P/ w1 h
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)
; S6 m7 h( X1 d1 t1 ?FLAG_PF = 1;
6 r1 I3 W; T% H; \9 i7 J. Helse if(p.x>0 && p.y>325 && p.x<400 && p.y<650 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
: y* H2 Y @' v' @3 S/ c- ^' yFLAG_SJF = 1;1 {; b8 d% h* j
else if(p.x>400 && p.y>325 && p.x<800 && p.y<650 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)/ O( ~1 j( |0 U- ]3 U8 i- \
FLAG_HR=1;/ o( U. Y' |; p" m" G1 y, B
else if(FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO >0)
! N' a, J9 j. H4 t{
" \2 r: V9 L& l$ x6 BFLAG_HR=FLAG_SJF=FLAG_PF=FLAG_TT=FLAG_FIFO=0;- @; |: |* G; A" D/ @, z7 [
clearrectangle(800,325,1200,650);
- C: E( J# I: P, v}9 @8 D$ X+ E5 k8 V3 r# r
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 )
8 b1 z2 Y" K& ~ R5 v{
% F h/ P @7 _: EFLAG_show=0;3 ^1 ]6 r }; S5 Y
cleardevice();
$ M/ S% W9 Q/ B2 ]5 q/ Z+ ^: Xreturn 1;; f1 i) A" \$ \+ \& o6 o4 s) i" }
}
9 m/ g6 [/ i5 p( f/ D. J7 ?}" F5 a$ Q1 a) S2 y8 _* \) A X9 H8 n
}6 R5 K* ]4 l* A/ l. {1 r
return 0;" x: I4 Z9 ]0 R3 \, I/ I
}
y6 R! _! N8 v0 nint MouseListening2(int *flagShow,int * showTime)
0 A# i! [4 I1 R M! K{0 l" a1 \; @5 A3 N' e) Y C9 ]( b
MOUSEMSG p;1 n& D( r5 N, W: r8 d0 ~
rectangle(1150,0,1200,50);
+ K7 `0 u3 H) ~- Y: Z* mouttextxy(1160,10,"X");
2 E( R. n5 |1 I4 E" Twhile(1)
0 D) S1 C) P/ U+ n7 h2 Q+ u{% V: \; M3 @+ s: u/ o: N2 L
if(MouseHit())
, b3 U& V: y. W* H( i+ d3 F- }# N1 b{
# ~& b, y2 |: _% W+ kp=GetMouseMsg();% H. P+ _9 v% G! c: Z
if(p.mkLButton==true)9 z4 r! x, T& {6 y' C& [
{
3 c6 v) c7 e7 X; K M7 _if(p.x>1150 && p.y>0 && p.x<1200 && p.y<50 )
- J" ~1 k( V6 ^{7 ~* K( a0 V! V
(*flagShow) = 0;( {' T; k1 W8 G6 x6 M- N7 Y
(*showTime) += (*showTime);1 F- z! E2 I) H0 e1 o, C
FLAG_show=1;
. E; y& h1 F* x! Rbreak;
* e7 s5 @, K8 C2 g6 F# ]" {}( R: [' u6 S6 {7 ^
" q! S: f( L2 U0 R3 {3 I% B' B
}
! i1 q6 i% P; B4 a6 B7 w3 e3 N}
6 X+ j6 H/ w' Q: ?9 BSleep(20);
9 s% X+ c' ]+ t% @- D N9 y}
$ ?4 _( i% P: vcleardevice();: n% O; N( }3 @( U
return 0;/ b9 s! A. _2 z
}7 E# v5 E3 X. \6 f3 R
int drawPerformance_FIFO(int x,int y,int memorry,int com,int wai,int cha)) v, A( i+ v" T. k9 s+ h
{
. E9 ^" Q) C2 \% R1 `( l$ Lstatic int info[11][3],num=0;
8 _: G8 v7 E, _) y3 wint i=0,j=0,pos[10][3][2];
' |0 V P- H, D! E W/ Q; A! n" z0 Afloat temp,t;! W+ Z/ L! {* `7 A4 |/ w) }! _
//画按钮,不属于FIFO图的范围( j2 s; |0 ^ W' v
if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0 && FLAG_show==1)) d6 B7 n1 Y& {3 F3 y m
{
7 r! u& |' ` Nsettextstyle(30, 15, _T("楷体"));
H2 ]# S; E+ Q C: T. Arectangle(890,455,1110,510);0 S4 o- _; @; c& K! p4 K
rectangle(900,465,1100,500);
Q# Q$ l9 f, |* ?3 aouttextxy(910,468,"查看运行结果");
9 z8 v1 M6 {% @9 R* z5 v}" n* {% e8 e/ a% O! N/ M6 v
//结束画按钮7 _& h) q4 T" y- M4 B/ ~( [
info[num][0] = com;
! |- G& O0 P5 i) Z1 Y' [info[num][1] = wai;
4 s7 _. B0 r" |. A! dinfo[num++][2] = cha;
! @/ v( [+ Y0 `& [. `if(num>10) //存储10个点0 {& ]4 U7 e ?7 Z
{
* L8 _$ S9 ~+ O S% |for(i=0 ;i<10;i++)' l9 C# T; W# a# F+ q( ~8 Q% k
{
$ q8 g2 y: N! U4 M2 D; s* tinfo[0] = info[i+1][0];
( n+ u8 H& A6 i zinfo[1] = info[i+1][1];
! h3 h' q1 G' p$ l. D# W' A! \info[2] = info[i+1][2]; f2 L& R) q# A4 p4 Z E2 c' u
}5 a% q: g9 M% N" s. Z* K# u
num--;( z* ]1 o+ V: x
}
) |2 r; J, t) O4 H# Kif(FLAG_show==0)
3 M( p: @) C4 {return 0;4 K7 Z5 I1 a) F+ k! H& j
for(i=0; i<num; i++)6 l1 U2 w! i1 r1 N9 F
{
+ O$ l1 ?" Z; u. Wt = (float)info[0];7 {% }, E$ y5 o7 B( T1 W+ O
temp = (t/101)*90;
3 ~5 E5 u& h7 K \% epos[0][0] = (10-num+i)*25+x+100;
# D7 _! q# P! e, ?& g' p4 Ypos[0][1] = y+110-(int)temp;
4 f' @% ` y) V6 \& E; _t = (float)info[1];! \2 i% k" n4 ` Y4 m& _! p( b* x
temp = (t/101)*90; }: F; I$ Y9 K" Z; h" |. S
pos[1][0] = (10-num+i)*25+x+100;
K. R2 h2 h' K( W0 U* apos[1][1] = y+210-(int)temp;
( @+ P( M% d4 y Z; I: P. W1 D# lt = (float)info[2];
0 e1 f; K: |' U; B+ Y' V9 Vtemp = (t/101)*90;$ g/ S6 n# X$ H( Z5 E7 V( f
pos[2][0] = (10-num+i)*25+x+100;# g& x2 H- d8 z5 |* X+ L, V
pos[2][1] = y+310-(int)temp;
# v7 _7 C. Z; j4 j3 h1 }}: [) K, i, j4 D& ?% B
if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)/ l: J1 u+ o) |" J; ? B8 N6 L- X
{
: u- K' Z' s% ^- @# aclearrectangle(x,y,x+400,y+315);4 w! R6 c) f5 q" ?6 Q& b
settextstyle(20, 10, _T("楷体"));
. J L2 R1 c6 e K% Erectangle(x,y,x+400,y+325);+ F" W. Y: h' P1 J+ ?
outtextxy(x+40,y+10,"CPU"); //画柱状图" h$ Q6 K6 d: N$ a. x. P) [
outtextxy(x+45,y+10+100,"IO");% ?6 W$ Z( [$ r/ a) D' S8 f4 J
outtextxy(x+40-15,y+10+200,"change");
/ b( t& Z- O( Frectangle(x+35,y+30,x+75,y+110);
3 e: S6 F7 @; `/ `rectangle(x+35,y+130,x+75,y+210);
+ T3 f) _6 w1 o7 P+ Frectangle(x+35,y+230,x+75,y+310);6 X+ v7 ?& e& v& e, X1 ^
outtextxy(x+180,y+310,"FCFS");
; a, R, t7 }; A4 x7 wt = (float)com;
2 j5 X' I- n9 l. \2 c8 k& etemp=(t/101)*80;" e* C' l/ G/ @" T0 O, }
fillrectangle(x+35,y+110-(int)temp,x+75,y+110);
8 M: r7 G2 u. H6 l* Kt = (float)wai;
) Z! w0 H) Y# w( r/ e/ m# Q' htemp=(t/101)*80;0 }+ l8 q% V" l' N9 N
fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
0 m5 @. _5 p9 K+ \/ ot = (float)cha;
: w7 {# v! K# W& z4 C: Q, ]0 d: Ptemp=(t/101)*80;9 m& R$ ?" T1 b' \1 c
fillrectangle(x+35,y+310-(int)temp,x+75,y+310);+ i9 x2 c: E# M2 ]% p
for(i=0; i<3; i++) //画坐标 high=90,length=2506 s# d1 o5 D# {; x- w% P
{; Y% G1 n% H' }
line(x+100,y+110+100*i,x+350,y+110+100*i);
, o$ a' a' R f; sline(x+350,y+110+100*i,x+350-5,y+110-5+100*i);( B+ L; _! M$ B5 _
line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);+ |5 w) K H' k, ^* R( @) b' x. P
% K8 X$ _- C0 _, \6 X
line(x+100,y+110+100*i,x+100,y+20+100*i);
3 H+ F' I; \4 T6 D( }6 s) Y1 ^) Eline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);2 c! N# G9 g+ X. K' {+ C- Z) C, ^
line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);4 `' x& x/ [1 j. Q+ b( W% V4 J. K
for(j=0;j<num-1;j++)5 h" y* ]3 b0 _2 x1 V, q! w% l. G
{* _# x% _1 A; H3 ]: m: c3 ^) a
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
* M7 f2 B8 T @* |3 lline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);- |1 s5 n1 |. _/ b8 D9 H
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 3 ^1 r' Q3 o/ s" n d
}
* N! t5 g9 G7 T4 a4 d. H0 K5 k& ~}- I. H8 K9 C5 j. `1 F4 N- B# n8 I
}/ Q6 E# \8 T; w
else if(FLAG_FIFO==1)
; ~, F0 R4 e% |1 o' g' L) y{' S3 I1 u! C& C' i- O) @
x=0,y=0;* D5 a5 H( n& N! T. J- E
for(i=0; i<num; i++)6 K7 ~4 M: E, D# w/ J7 ` [$ R; W
{9 `6 p1 [5 y* `+ g. |+ U
t = (float)info[0];" T% S3 {2 c* O7 @0 T6 X
temp = (t/101)*180;+ h( D) T# W" K E6 G
pos[0][0] = (10-num+i)*50+x+650;
1 x2 F1 a' c! r3 ~2 kpos[0][1] = y+210-(int)temp;
" Z7 d. B3 p/ y. p( \* D! Q) \t = (float)info[1];/ j7 W$ K# w& C* I: p: Q7 V: [
temp = (t/101)*180;# r9 w1 B! B) `6 l
pos[1][0] = (10-num+i)*50+x+650;# G. g! a8 h, c T1 _; I
pos[1][1] = y+420-(int)temp;
& p/ K* Z4 b- wt = (float)info[2];
# b1 H$ i1 N, p; P: r5 i: j/ s9 Ntemp = (float)(t/101)*180;0 k J3 G8 ^" w4 r
pos[2][0] = (10-num+i)*50+x+650;! J% w( o& a0 I9 n' u$ x8 c/ T6 z
pos[2][1] = y+630-(int)temp;
) D4 ~- Z3 J' ~' e; e3 J: |0 |}9 B+ N( ] C1 e* O' m5 c
clearrectangle(x,y,x+1200,y+650);
2 y6 }% l& J" T- H- T- ?settextstyle(40, 20, _T("楷体"));. _" h) g+ J7 k& T+ `0 f# f6 \
outtextxy(x+50,y+50,"FCFS");* j- w- O% \& i
outtextxy(x+280,y+20,"CPU"); //画柱状图0 `9 z( ~0 {9 G; {" t! `4 k- U
outtextxy(x+285,y+20+200,"IO");4 ^; x y' P: t1 H
outtextxy(x+250,y+20+400,"change");/ {* U V" k9 y2 @
rectangle(x+270,y+65,x+330,y+215);! g1 x+ c( L* U# T
rectangle(x+270,y+265,x+330,y+415);' ?" P" R' x% t! v1 ]
rectangle(x+270,y+465,x+330,y+615);- v6 e% m/ }3 T; z' k
outtextxy(x+290,y+620,"TT");
! {7 j9 p9 h0 j; R. R/ F, `1 st = (float)com;
y2 @3 Z7 i. t. I1 ~% q3 K4 D) atemp=(t/101)*150;( V/ g2 l3 g- ?! O% O5 M5 j5 T
fillrectangle(x+270,y+215-(int)temp,x+330,y+215); r3 b$ l; F# R O. c
t = (float)wai;
9 @$ J2 l. f. q3 @/ ]* o: i7 r7 gtemp=(t/101)*150;( |$ m5 Z3 B& E) @( n$ j: L# N7 e
fillrectangle(x+270,y+415-(int)temp,x+330,y+415);, Z$ C. V8 y9 M
t = (float)cha;
9 V1 r3 O k1 t- k8 ntemp=(t/101)*150;
' @4 F _6 j, o4 s1 U1 f l! ?fillrectangle(x+270,y+615-(int)temp,x+330,y+615);
3 \3 }3 D1 i# d8 M2 ^+ s' ~" kfor(i=0; i<3; i++) //画坐标 high=90,length=250/ @3 A8 d& [4 T6 d! o/ q5 ?6 q
{! t- P% _0 L5 K( }7 d7 d
line(x+650,y+210+210*i,x+1150,y+210+210*i);
; F6 M+ U5 Y% U2 iline(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);1 M9 J5 }3 B- S
line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
* w. B4 Z% H) B6 o) }8 G7 n" V( l9 M
line(x+650,y+210+210*i,x+650,y+20+210*i);7 l2 I9 |% B/ F0 J
line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
: k7 a0 Z2 \" T# x* Oline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
% a" d+ d+ j2 u. ]0 _for(j=0;j<num-1;j++)
, U; ?& R, D$ W! U$ O' x, \{
/ S5 {; E" F' Y0 m" D/ {6 uline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
2 ?, \% V* C/ g9 m" T' vline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);* ~9 I+ e& F" \2 o
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); . f2 W# F) C/ x# \2 M1 W+ u
}
% s0 s0 T0 P! ]}$ h/ t) i7 E5 U2 W0 M
}2 d; E9 Q1 A; V& x7 D2 A
! f, f5 Q) ?3 @( k/ {: y6 L) y5 o. O$ r! ^1 f8 [
return 0;
; H; `- L% q& C; Y) y$ M}
2 B+ P1 ?! l% Vint drawPerformance_HR(int x,int y,int memorry,int com,int wai,int cha)
* y ?2 {: O2 s{5 t# S8 |# _7 D
static int info[11][3],num=0;* Y7 d& b4 M' \
int i=0,j=0,pos[10][3][2];
8 j4 B8 k4 z7 _1 B' X$ Ifloat temp,t;- X6 w* y% y! ?1 N
info[num][0] = com;+ o) F0 M) V' |
info[num][1] = wai;
" p/ W+ }; k7 c- v" Einfo[num++][2] = cha;4 Y" Y& p8 l& w! j3 r2 m. T
if(num>10) //存储10个点
8 y9 r' _& K' S! Z" M{
) T2 i( o! s& S% p O5 lfor(i=0 ;i<10;i++)
( ]& e3 m* e. d: V* H* Z{+ d. c- r; Y( L& R3 K" s; Z1 [
info[0] = info[i+1][0];
) e. L, l3 f: s8 e+ cinfo[1] = info[i+1][1];
& K c6 {. M) j' L1 Y. E hinfo[2] = info[i+1][2];
8 U$ x; Z6 q7 U, N" f# D: c}
7 C) ~8 t3 f# b7 V/ \num--;
' C' w# y; ^" w- ~) [}9 Z0 U5 U; n' i6 c# q# Y
if(FLAG_show==0)1 g. A e! M/ a8 F6 R5 K$ a
return 0;
: T5 | j% j3 U w, [for(i=0; i<num; i++)
. j/ _; A/ p J$ j{8 a# q1 O$ r8 |. t/ X
t = (float)info[0];- j- A d5 u0 g7 R
temp = (t/101)*90;2 g+ l: a5 w$ U5 Q/ e1 E
pos[0][0] = (10-num+i)*25+x+100;& {1 m* c! \6 s9 o
pos[0][1] = y+110-(int)temp;9 |* A; ?1 A0 {6 p. A `
t = (float)info[1];
6 Q1 A1 r' _5 ?3 @% itemp = (t/101)*90;
?1 `* z [" O S* y# e+ Hpos[1][0] = (10-num+i)*25+x+100;( L, J& Z) N8 H; h' v. ]
pos[1][1] = y+210-(int)temp;; p8 S3 L) y7 p. f: t6 O6 q* P1 z
t = (float)info[2];7 x' R: Q) m! I0 q/ ?3 X. F, s
temp = (float)(t/101)*90;
# B* K& A& @! O+ Y$ hpos[2][0] = (10-num+i)*25+x+100;4 H& [# b. O* o1 X0 i6 [
pos[2][1] = y+310-(int)temp;! Q" x! P& B z( t) R9 D& Z
}+ G6 d. c% R3 s* c0 w/ W
if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
4 G$ x/ ~' C1 K9 U8 p. c! w, e{. K$ M3 E% g1 B4 R. @
clearrectangle(x,y,x+400,y+315);% V( [ \% g& x; N) {; D
settextstyle(20, 10, _T("楷体"));
% ?! N) B' {2 B* u# j+ Srectangle(x,y,x+400,y+325);
- H: l" c8 ?1 A6 C9 {% eouttextxy(x+40,y+10,"CPU"); //画柱状图4 o- R1 {7 _( O2 k4 R) r: K
outtextxy(x+45,y+10+100,"IO");
% }) @5 S4 N H; Touttextxy(x+40-15,y+10+200,"change");. N7 d1 D% I. a( m5 N ]
rectangle(x+35,y+30,x+75,y+110);
q3 C+ q# z+ X1 urectangle(x+35,y+130,x+75,y+210);
7 S- U/ s0 K$ |$ S* crectangle(x+35,y+230,x+75,y+310);
8 g7 c6 \2 o J9 souttextxy(x+180,y+310,"HR");
% D( d3 h) `: \* r: Yt = (float)com;7 ]8 D6 R& ?7 ^, s, h, l! p0 x. p. y
temp=(t/101)*80;- B3 W& s. A- h5 r, u: ]0 [2 [
fillrectangle(x+35,y+110-(int)temp,x+75,y+110);# e! {6 r7 b6 K# m
t = (float)wai;
6 W% s% C) l& S2 W2 c6 }/ N) g( Htemp=(t/101)*80;
* q0 ~2 o: n0 Afillrectangle(x+35,y+210-(int)temp,x+75,y+210);
% B* ]% e+ ?; s$ K, H5 ct = (float)cha;/ B/ ], ] t" e4 s2 U8 Q# ~
temp=(t/101)*80;
5 r, K& v, o/ v+ U( Xfillrectangle(x+35,y+310-(int)temp,x+75,y+310);% J5 ~9 d+ E [5 v5 C8 P
for(i=0; i<3; i++) //画坐标 high=90,length=2502 W H/ }7 w/ P9 N* Y0 S3 u
{
; M6 Y6 H% E# F" b& y6 hline(x+100,y+110+100*i,x+350,y+110+100*i);4 s* @6 v+ j% |2 D" S; A
line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);2 O$ H% C6 E& s/ o0 o1 i
line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);4 P7 ^( z& U8 B
5 g( W$ u; |/ h, C5 ?& B) q; iline(x+100,y+110+100*i,x+100,y+20+100*i);
; i& ^$ ^0 t+ zline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);( k% \: l2 {' Y, @
line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);5 e" E6 g2 p* X6 X% _) x6 V* U# d! I
for(j=0;j<num-1;j++)
& t& |. D b1 }; D) R" y9 b! z1 c{, ~' Z# w# X# Q0 T# K* e' H
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);% g( R5 m2 o; c7 A3 A' O7 {
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
- y. u( J `$ E6 gline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
) l" O% [! j# K: S}
% p4 R" `; ]# k; A}) f5 n2 w/ i2 n/ H# H
}8 b& X9 h9 ~0 ]8 g* O" N
else if(FLAG_HR==1)
7 \1 T4 t5 f# o: Y/ e) j{( _9 C* P( c# F; a/ D3 x. w" T4 U
x=0,y=0;
a: p& x" G; `% d. S* zfor(i=0; i<num; i++)
* s8 i8 U' n0 t [{
' o( N; J1 p5 I! \4 q8 Xt = (float)info[0];
+ n% z4 ^4 B+ f% V, k: \temp = (t/101)*180;
) I* g$ d) j+ ~0 j/ k( Spos[0][0] = (10-num+i)*50+x+650;
4 u8 i; [/ U. X$ Npos[0][1] = y+210-(int)temp;
% V. a. r/ N: |4 j) Qt = (float)info[1];
' m- p; f2 M. X: o: R2 ktemp = (t/101)*180;
2 g: s% o) v* V) s" Wpos[1][0] = (10-num+i)*50+x+650;
6 q* w: L. D7 K9 `6 i. a3 T& ?pos[1][1] = y+420-(int)temp;& d# N- T& N' g( U
t = (float)info[2];: ^8 R3 a7 |2 k6 W U
temp = (float)(t/101)*180;
4 e/ z+ x1 S. b9 T; V4 F8 g: Zpos[2][0] = (10-num+i)*50+x+650;
( p5 Z" v' z+ l, y$ Npos[2][1] = y+630-(int)temp;
/ c, w7 \+ w5 v}! A% O, ~! ~% N; g& h- W- ]% g1 A; T& ?4 ~
clearrectangle(x,y,x+1200,y+650);
. `$ Z+ t0 B' T6 n4 isettextstyle(40, 20, _T("楷体"));# q" ~3 U% g8 [+ V& w4 ~" ?! G0 ?
outtextxy(x+50,y+50,"HR");( X7 F; ]* n& c, s& W
outtextxy(x+280,y+20,"CPU"); //画柱状图6 P0 c/ @5 n9 _
outtextxy(x+285,y+20+200,"IO");
6 q# F7 i6 U& T7 a% t: [ ^outtextxy(x+250,y+20+400,"change");) ]. _9 f: r: ^: `' p: `
rectangle(x+270,y+65,x+330,y+215);- j$ d% m' t+ d* Z6 X
rectangle(x+270,y+265,x+330,y+415);
6 S6 j. D; }5 ? ^2 mrectangle(x+270,y+465,x+330,y+615);
& Z& v. g3 L8 Houttextxy(x+290,y+620,"TT");/ r* O" O+ `0 `- p4 y
t = (float)com;
@ U0 M5 q! O6 o, ?4 R/ Mtemp=(t/101)*150;( Z/ T9 e" g2 H! Z8 u: B5 k3 N
fillrectangle(x+270,y+215-(int)temp,x+330,y+215);/ o# i; a' _( w, u
t = (float)wai;
1 T1 @, T3 }, G% S) n( Rtemp=(t/101)*150;
6 Y# c1 F2 f! x6 n& v0 qfillrectangle(x+270,y+415-(int)temp,x+330,y+415);
9 G, ]8 A& g) [- B9 I) Tt = (float)cha;
1 X4 I' o3 R2 a- i" B8 V6 C2 ftemp=(t/101)*150;
5 y1 x& s+ M/ z+ H# i) }fillrectangle(x+270,y+615-(int)temp,x+330,y+615);
/ R1 \% G) F% f bfor(i=0; i<3; i++) //画坐标 high=90,length=250
; o: J, v! \1 S1 V# \{
+ K( t; E- g, k" pline(x+650,y+210+210*i,x+1150,y+210+210*i);% Q2 l2 t ], C. K
line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
: t8 w9 S; W: v& g$ eline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);6 b& j1 a$ J4 X7 z' I
0 Y* i$ |3 }# @/ f) w! Hline(x+650,y+210+210*i,x+650,y+20+210*i);' K) d1 d7 @- t; s( i6 A. B E
line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
q8 b$ `. \# F( ^line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);1 X b- J( R; i7 w9 l W/ g4 i
for(j=0;j<num-1;j++)
0 a/ G" Y. \$ k- L% D! p{
9 W# B+ f. ~: `/ i$ T/ F- fline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
- ~- H5 J+ b+ Q ?7 sline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);* L0 O, p+ V* ?# J4 R) ^" c
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); / M6 c$ T I u
}" ]9 M& A' A7 ^' n5 E" k# B" p
}# E, m- i* \. H; n9 B. V1 @$ v
}
2 e' I1 Q/ y$ ?3 \$ |) n D3 V0 P8 H8 e
2 l" Q! ?2 h: k+ R: f: vreturn 0; A; |( Z$ q: ?
}, p2 O$ R6 X3 Y8 C1 O# E, P3 S
int drawPerformance_TT(int x,int y,int memorry,int com,int wai,int cha)9 F; S g' {/ h. g5 @* j
{
3 E6 i( z/ c; z% Dstatic int info[11][3],num=0;8 _4 Y$ Q$ {2 `
int i=0,j=0,pos[10][3][2];
8 h" e* d9 h: hfloat temp,t;
9 f) Y/ f0 N# n$ u1 N: h I& zinfo[num][0] = com;
* B1 Y8 S+ c* H% yinfo[num][1] = wai;
) t( E9 a. P. K1 _5 Sinfo[num++][2] = cha;% t {- r8 M; f
if(num>10) //存储10个点
# I+ c' L+ l/ |{
; `. ?/ ~9 P; @0 Xfor(i=0 ;i<10;i++)
2 M i9 h- y- M! R{- ~+ x/ P2 e2 Q& y1 |2 K: ^9 }
info[0] = info[i+1][0];2 |! v+ O2 I( {2 L; T5 t( L
info[1] = info[i+1][1];
, u' c8 V8 R$ n+ j. R( L5 @; Minfo[2] = info[i+1][2];
( d n. z4 {, Z3 k$ j% O6 K}" V5 o% m( D1 [8 q5 G6 o
num--;& v( F8 p; z: b% B9 F* M/ |- v
}: c( ~1 L- f$ z4 f% d+ e) ?( n- ]8 N
if(FLAG_show==0)3 Y$ q) J* f+ ?& x0 F! V
return 0;* S; v& D: |) t' n: q" L' i5 i
for(i=0; i<num; i++)
2 I. n! G7 O/ {3 D9 U{/ z& S+ X5 r0 K0 p1 D
t = (float)info[0];+ I9 l8 P) i0 I& s. ^' p P
temp = (t/101)*90;7 `: y# T. F# M+ M0 Q
pos[0][0] = (10-num+i)*25+x+100;; P- Y$ u B8 y7 X
pos[0][1] = y+110-(int)temp;* `$ a0 n6 f J% W) }3 s
t = (float)info[1];$ E4 C8 }( g4 ~% t# b# H
temp = (t/101)*90;6 L' v9 J0 U* Z$ y/ a" j
pos[1][0] = (10-num+i)*25+x+100;/ c" ?/ F6 j4 C/ t& w' s
pos[1][1] = y+210-(int)temp;
0 m0 K6 g o St = (float)info[2];5 B& a2 E, o/ r; r( t% K: Q
temp = (float)(t/101)*90;
3 ~/ x7 ?0 |* T+ g- n1 b$ hpos[2][0] = (10-num+i)*25+x+100;# t( c" W; V4 O2 D1 I# M5 H+ A
pos[2][1] = y+310-(int)temp;
" l1 y- ~+ k. L* T! k3 W6 ?! s}2 \2 H( j- H8 b' i/ G, V) ]6 a
if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)8 x' a+ I, b; \9 w
{8 r5 z* K B# d; e: O6 `/ S
clearrectangle(x,y,x+400,y+315);
: U" ~) K( S! E' |6 }" tsettextstyle(20, 10, _T("楷体"));
1 q( G c3 W: m# q( hrectangle(x,y,x+400,y+325);: a6 I9 R/ C% _/ I( E- ]7 F8 d
outtextxy(x+40,y+10,"CPU"); //画柱状图
' Q0 ~/ |, k# R- {: ^( \5 ?outtextxy(x+45,y+10+100,"IO");
4 @5 i, \0 l! ~! I. routtextxy(x+40-15,y+10+200,"change");5 Q! w: y& `$ F, X
rectangle(x+35,y+30,x+75,y+110);% \/ Z( [) a+ _6 v
rectangle(x+35,y+130,x+75,y+210);) T2 Z; {$ f5 ^/ M9 r5 D' L& p
rectangle(x+35,y+230,x+75,y+310);! J3 P: A& I# O) U6 w7 |4 s
outtextxy(x+180,y+310,"TT");
' s0 P$ M5 o, K! i; ~t = (float)com;: D5 p* F! ^: B
temp=(t/101)*80;0 w% |4 m0 C/ Y# C6 S. l
fillrectangle(x+35,y+110-(int)temp,x+75,y+110);. c- C; J* ?' c+ N% ~: i
t = (float)wai;+ e% T( C" W- O( K% Y
temp=(t/101)*80;" I, J/ _, u' {4 \0 a1 C# j ?
fillrectangle(x+35,y+210-(int)temp,x+75,y+210);8 Z# G# ~8 B! i; k3 \7 x
t = (float)cha;% s, K- l# l/ K( R, W6 @
temp=(t/101)*80;
& e# {( B) P5 rfillrectangle(x+35,y+310-(int)temp,x+75,y+310);
/ A! C' X [" r$ zfor(i=0; i<3; i++) //画坐标 high=90,length=2500 ]& s- ^5 d$ Q& \7 R
{
6 v% W9 ~; {- j6 Eline(x+100,y+110+100*i,x+350,y+110+100*i);9 U! _7 e/ V. o- a5 v) V
line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);. n w" ^7 g+ l
line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);: f+ Y. X1 B, G7 M5 b
) C4 L8 s& R# f; h0 H
line(x+100,y+110+100*i,x+100,y+20+100*i);
; V! `6 X5 G# l% q9 h. ]line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);% o5 |( ^% t) d1 v
line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);
5 s; v4 |3 \" D$ @# x( `for(j=0;j<num-1;j++)! ~# f) Y9 c6 a& I1 F' n; q
{
* p0 T& \9 b9 w" gline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);! U0 T. `% ^# H
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);- h- }* U5 B$ f1 H ]5 r1 e
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
6 r7 J. Z! p$ V. d) d}, s0 V: S7 B T
}
# e& e0 R4 b2 `) ]}; P. u/ Y5 U f9 O; l% r
else if(FLAG_TT==1)
; a* @* l9 R/ N" }. S9 v{2 X9 j) s; \. d* V. C$ f
x=0,y=0;
; y6 L$ g" f6 n7 j2 }for(i=0; i<num; i++)+ I7 @0 |' u- V* u( C# }0 u
{0 ?0 `/ E2 p' n7 ]1 J2 Z
t = (float)info[0]; @6 a5 ]( c5 C) N$ h
temp = (t/101)*180;) {% B- O, N( U8 O4 O; { E
pos[0][0] = (10-num+i)*50+x+650;4 s: a7 B7 o$ \! D4 b. T; ?
pos[0][1] = y+210-(int)temp;
; f. E5 U; S6 z5 ~* T/ zt = (float)info[1];" D( R* e' _( [6 ~7 o0 K
temp = (t/101)*180;' s- e e, v8 l" o, L" f6 X
pos[1][0] = (10-num+i)*50+x+650;1 m+ D! ?1 E2 Y Y+ e2 U
pos[1][1] = y+420-(int)temp;
: L& p2 [! S8 E, n* Bt = (float)info[2];2 |9 i3 B/ c0 k( { ^" \4 h. I
temp = (float)(t/101)*180;3 k# R( I* d2 Q2 ?7 |
pos[2][0] = (10-num+i)*50+x+650;
( ~/ Z5 [2 h2 K R4 w3 `# }pos[2][1] = y+630-(int)temp;- R) W% g& `) S: b2 F
}
) [( \& d3 u+ pclearrectangle(x,y,x+1200,y+650);3 K6 @" R( b# i$ J% K
settextstyle(40, 20, _T("楷体"));& P9 Q. m3 G y
outtextxy(x+50,y+50,"TT");
9 B5 w2 E/ q6 W0 q: m' {outtextxy(x+280,y+20,"CPU"); //画柱状图+ ~; x" O% K- L) N/ D0 M' l
outtextxy(x+285,y+20+200,"IO");
- ~" J# W$ f! Z9 [8 Gouttextxy(x+250,y+20+400,"change");
! O4 h; ?# W# a8 c8 rrectangle(x+270,y+65,x+330,y+215);
, h' X8 A, h* t1 ?$ o H5 H4 w& Hrectangle(x+270,y+265,x+330,y+415); ~8 ]$ r# Z- ]+ t
rectangle(x+270,y+465,x+330,y+615);
7 K6 R. L \/ k* ]outtextxy(x+290,y+620,"TT");' _7 q4 E9 L N) U" }: Y- t9 i
t = (float)com;7 n$ C6 Z! E8 B7 z" R) G2 ` ]" d5 }, k
temp=(t/101)*150;# @. @5 ?* m* y) X: K, ~
fillrectangle(x+270,y+215-(int)temp,x+330,y+215);8 A n* n& ^8 ]. N! e) ~$ ?" W- L2 U
t = (float)wai;' I) |5 m `) ]( O4 b: Q' _" S
temp=(t/101)*150;7 v1 h% H5 q+ C, R
fillrectangle(x+270,y+415-(int)temp,x+330,y+415); D. w) U0 f2 I: l% I1 p
t = (float)cha;" u4 C9 t* K3 D- H* C
temp=(t/101)*150;
& ~- s, j- P8 Q6 _5 Ifillrectangle(x+270,y+615-(int)temp,x+330,y+615);
M! I) M4 l* Tfor(i=0; i<3; i++) //画坐标 high=90,length=2507 L. }3 d$ \* X! c- z0 Y9 e, O
{
! ^4 L7 q( n8 e$ W/ ]! x& Iline(x+650,y+210+210*i,x+1150,y+210+210*i);
% m$ W; P; S1 [line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);: Y& D" M; n. P$ S$ Y3 N/ |7 g5 Q
line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);- F$ u3 d* c% @0 D6 H
0 u+ s6 w) O5 M! @4 q4 d: n
line(x+650,y+210+210*i,x+650,y+20+210*i);+ J# S# c( R, o$ N
line(x+650,y+20+210*i,x+650-10,y+20+10+210*i); U8 C0 s. j8 e8 B
line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
: ~/ z- @: C1 C* F: b0 Hfor(j=0;j<num-1;j++)
1 _# D9 G$ T. d" _9 l/ S{
+ B: ?2 l/ F- }line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
. W1 Y4 F- R: z+ }line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);' w7 [6 Z0 T ~# t6 H2 i3 ?
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 3 i- ]5 t- A) `" Q& u
}
+ b, }4 ]+ c0 H5 \7 r* O}
0 e8 s+ z1 i- q7 Z. P, x6 k}3 M# K2 `- j m+ P h6 J
t5 D, ]% r- I+ c! e
c$ D3 L7 D6 V& W) _* i) P4 `return 0;
! {/ J6 i/ X( v& T}
' \/ E I8 Y* b6 c# u6 X% pint drawPerformance_PF(int x,int y,int memorry,int com,int wai,int cha)
+ U6 M3 E7 r: x) j+ ^8 L/ U{2 O* ~% P- }) F: z. i
static int info[11][3],num=0;' w$ O( k, A9 y6 _( G$ c" H
int i=0,j=0,pos[10][3][2];
0 ?# y, {8 Y# ?5 ]" V& |float temp,t;/ G6 v9 C' E+ G$ z
info[num][0] = com;0 \" F* Z3 ^: c1 r" {. O) j
info[num][1] = wai;
1 \8 g; U$ }4 p! i$ B2 z. {: O& g5 einfo[num++][2] = cha;9 {7 S- p, z' E( x
if(num>10) //存储10个点
; E) j2 s F9 R' E2 {; D& X- y{
- G/ I1 T, v9 ?" V2 V" Sfor(i=0 ;i<10;i++)
: B# `' m h' r2 f3 u" q{
$ [7 }) [% P1 d& Qinfo[0] = info[i+1][0];0 i- ?" e" x' U( I) B
info[1] = info[i+1][1];7 N9 [# z5 ~2 i- z9 W
info[2] = info[i+1][2];
% `" }1 p& q, |% z}
3 }# K. K$ t* |. y* ?, ~/ Cnum--;$ z. F" E) e5 I5 i
}! }" ~# t! @. m! y* {7 f
if(FLAG_show==0)! t# {, T' y4 c" K
return 0;
# G$ G4 h9 I( Cfor(i=0; i<num; i++)
- u. [; x" d2 s3 d1 x{( `% i. }2 U2 \0 e6 W, U# B
t = (float)info[0];
1 a) R* r7 [ P1 Z" Y* ]temp = (t/101)*90;
5 f1 e1 B; k' Q. f; M& v# ppos[0][0] = (10-num+i)*25+x+100; m+ [$ K0 u$ l q- s: \# g3 o
pos[0][1] = y+110-(int)temp;
! z9 K ~# E5 M! M' et = (float)info[1];
$ t( X7 W- P* ftemp = (t/101)*90;
6 ^" ^( ^+ p, Bpos[1][0] = (10-num+i)*25+x+100;9 j, w/ B( \& b5 Z4 q" \& j' `
pos[1][1] = y+210-(int)temp;
, q6 u( z* ~, |& s/ at = (float)info[2];
0 ~2 [4 H) X; ~+ rtemp = (float)(t/101)*90;
. ?5 D$ ?; m. u0 E: x6 Wpos[2][0] = (10-num+i)*25+x+100;* F6 H! M! _1 M6 \. m
pos[2][1] = y+310-(int)temp;5 Y3 T2 q9 L0 C+ I L$ e" S1 B
}$ Y$ H' ?$ w& `7 h, E+ v+ `
if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
- e3 [1 u! b8 K) X{
2 p* P( U5 g7 Y3 }: ^clearrectangle(x,y,x+400,y+315);0 C0 L% J" L' a6 z- u5 n0 Y
settextstyle(20, 10, _T("楷体"));' t$ |8 N$ K' b* N/ ^3 r
rectangle(x,y,x+400,y+325);
3 _9 _/ E m: j K/ O, {# U( houttextxy(x+40,y+10,"CPU"); //画柱状图' r+ q+ H6 O( c, O
outtextxy(x+45,y+10+100,"IO");
# q% j* `% x: R, W( Wouttextxy(x+40-15,y+10+200,"change");. U: S- J1 f5 t) x5 @, K( x- q0 H
rectangle(x+35,y+30,x+75,y+110);% F* l' A" {* q ~% t
rectangle(x+35,y+130,x+75,y+210);
" V" N- k1 q' Frectangle(x+35,y+230,x+75,y+310);
1 [/ u5 j! b8 w h souttextxy(x+180,y+310,"PF");6 J. l, b$ s" s2 Z, |
t = (float)com;! D9 S/ W: m- G
temp=(t/101)*80;$ T0 s( A# {7 J7 L; U9 R5 p
fillrectangle(x+35,y+110-(int)temp,x+75,y+110);
7 ^8 g4 M8 G: V, bt = (float)wai;
5 z5 h4 p$ S& o9 |" }temp=(t/101)*80;" g. i+ [$ ^! n
fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
# O1 h ]5 {6 It = (float)cha;
( ?8 h; J3 o8 h: b; ~temp=(t/101)*80;
! h) i1 M7 P* S; n" Y gfillrectangle(x+35,y+310-(int)temp,x+75,y+310);
4 X b7 ~! b- y2 {/ P& wfor(i=0; i<3; i++) //画坐标 high=90,length=250
5 u" x+ m! I7 U; M8 n6 l{
7 H$ ^" t9 ~2 q3 i+ M2 @: O& J$ Bline(x+100,y+110+100*i,x+350,y+110+100*i);
7 h2 N9 n# X5 m8 M8 ^line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
5 B0 M7 I' ~ P8 x0 mline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);% Q6 g l# L3 b- M) [
3 d) d- A' a0 C' @. @; K4 D% hline(x+100,y+110+100*i,x+100,y+20+100*i);. o& A0 `4 Y6 X
line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);1 |) h! S; K, m) A! ]
line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);, Q8 j( i+ i( j, O1 ]
for(j=0;j<num-1;j++)8 ?8 z$ @% R& b
{
5 b" m; t: p o8 Gline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);2 t* c9 x* m* S
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
( L& E- [2 F/ [! P- y$ r( [line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
0 s/ \" m/ P9 M' J: V& `}4 g" G3 Z+ s1 O4 r- C: ~: z
}# z8 t3 Y* V' I; A/ u: w
}4 ]8 L" G% K1 l7 _$ W' t# p0 Z
else if(FLAG_PF==1)% t9 ~+ `8 V* W, @0 t- g
{8 z: k, O9 d; X' w6 \9 t
x=0,y=0;
) n9 o6 h8 p% {* E9 k# |for(i=0; i<num; i++)- Q' W! J6 e( Y _7 k+ W/ B
{3 V& B( Y, q8 Z& W" e) f% k% t, G2 B9 j
t = (float)info[0];. Q+ R+ D7 \& w5 H& L" y3 Y0 x/ g' I
temp = (t/101)*180;5 V$ @: @; N; z2 T( H
pos[0][0] = (10-num+i)*50+x+650;
9 e* }; P3 i' ?7 {/ w+ Z% F+ bpos[0][1] = y+210-(int)temp;8 Y2 H$ z" K. @* g& V! c
t = (float)info[1];
1 ~5 |* p. Z3 @1 _+ M. J+ ~temp = (t/101)*180;3 B- G$ f& k# _/ k0 V; y. Z
pos[1][0] = (10-num+i)*50+x+650;( H8 F2 P) a- p, j; N7 K
pos[1][1] = y+420-(int)temp;( Z( y' C& u& H* m0 ~: O' P5 e
t = (float)info[2];
+ G/ @% E# v0 q7 ~0 _; n2 ctemp = (float)(t/101)*180;
( e8 p1 Y' u; a0 c/ I) H) R; s z3 |pos[2][0] = (10-num+i)*50+x+650;
% m) u/ ^! d) V+ Spos[2][1] = y+630-(int)temp;
' ^6 y1 H% U( w1 ]}
1 b2 i q" e6 rclearrectangle(x,y,x+1200,y+650);" N' u; @8 f. |- {+ a- \1 ^4 d
settextstyle(40, 20, _T("楷体"));. | J- ~1 c( o5 G3 U
outtextxy(x+50,y+50,"PF");' s$ U1 T6 Y/ _- Y; q
outtextxy(x+280,y+20,"CPU"); //画柱状图
+ X1 A4 Q$ A( X1 Z5 B- O% Touttextxy(x+285,y+20+200,"IO");
) X! }' R( u; Routtextxy(x+250,y+20+400,"change");$ o! C) \( U( V) E( W5 |
rectangle(x+270,y+65,x+330,y+215);
3 N0 o0 f: X. p$ `+ irectangle(x+270,y+265,x+330,y+415);
8 _- F, x" D# d2 M8 Prectangle(x+270,y+465,x+330,y+615);
7 q% ^. e# _9 I' V3 souttextxy(x+290,y+620,"TT");: }! A& } m9 j! e/ f& W* x2 y D
t = (float)com;& s* j! R2 a' J/ l. F5 Q. O7 u% L8 \
temp=(t/101)*150;
$ S* R# o, i" R9 jfillrectangle(x+270,y+215-(int)temp,x+330,y+215);
2 M3 t6 P; s+ R) @5 U; @9 j" mt = (float)wai;' n- g% m# Z6 U( R& q
temp=(t/101)*150;/ s5 f4 E/ m* f* N1 P' e3 L
fillrectangle(x+270,y+415-(int)temp,x+330,y+415);7 z7 H5 `- @' b3 j
t = (float)cha;8 G% O( |' X% ~
temp=(t/101)*150;
9 G# Z8 z; L% f+ cfillrectangle(x+270,y+615-(int)temp,x+330,y+615); [' t. }2 v9 s! Y! I
for(i=0; i<3; i++) //画坐标 high=90,length=2503 O( K) j) G3 u6 Z' t+ Q' @6 m
{" t& S" Z) m' `* M
line(x+650,y+210+210*i,x+1150,y+210+210*i);" ]; j8 C" L; W2 a
line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
: H9 y" l7 i4 Mline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);( m+ ?* X6 D- W$ g1 t' W2 n5 T
' a$ K: d ~7 a! A8 p) k
line(x+650,y+210+210*i,x+650,y+20+210*i);/ j! M6 p. H% `- \5 P* K4 ^
line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);+ b- x3 f/ U2 j6 w5 j* j5 g
line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);4 f( Q8 l$ o( r5 B
for(j=0;j<num-1;j++)
( c8 k' A3 M2 L; |) C# Y{
5 ~, E9 c* K9 M3 j! D# d* P; |line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);: y1 N2 V' c( I; I. }. V
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
8 t2 K% u" T! \8 V/ i& A$ k) lline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 7 H1 e- H7 F) M$ O9 S' F
}
# t& s. k* O' P0 J: I* W}
, Z6 E. i2 \+ V0 ^5 a+ _}
J7 \7 H, Y/ `- k Ireturn 0;
( c: N4 B1 p5 U, @. a}
% P3 N" |' p0 H/ f1 } P8 ~int drawPerformance_SJF(int x,int y,int memorry,int com,int wai,int cha)
6 b! Z _+ ~* u. D/ j{
- M! r7 U) |, V8 Z( l) W$ Gstatic int info[11][3],num=0;
& N$ w- _5 `3 D# e& ~6 _" rint i=0,j=0,pos[10][3][2];+ z5 j3 K$ i' e/ S5 O* j
float temp,t;
: Q8 z/ O+ w( |. vinfo[num][0] = com;$ O4 g& f4 V" z- E8 r3 f
info[num][1] = wai;# b1 Q4 r1 s% W0 o
info[num++][2] = cha;
9 i( C" O( ]5 q4 f" P5 yif(num>10) //存储10个点
j3 j. C' ]9 |: G9 E2 `/ g{
7 ~: l) }; n$ }, R5 ofor(i=0 ;i<10;i++)
y2 E, H! A, y0 O, Y! Z{0 [: _3 m! b3 O: e& ~/ L5 q
info[0] = info[i+1][0];5 n+ x8 c. g3 Z. D
info[1] = info[i+1][1];
5 o1 y5 Q% w, W9 \0 N h8 [6 kinfo[2] = info[i+1][2];' ]4 T2 z, D- G2 P2 `: m* H
}
0 b+ F3 X a4 C4 E/ y6 K' W/ inum--;
5 T. c- v' w( @2 \2 O* Z/ z}
8 [! q* c2 y( Z% }: g* P2 P( Jif(FLAG_show==0)( _- f9 L7 o$ b. ~. u! Y; R9 N
return 0;
9 N/ Y& s9 ?' c. E" }for(i=0; i<num; i++): C9 n/ l1 r& r
{$ y- ^6 x- S. ` W' Y
t = (float)info[0];" I5 A8 t H$ m' l
temp = (t/101)*90;
3 |% ?4 \% ?! j. O2 ipos[0][0] = (10-num+i)*25+x+100;0 @2 ?5 a) z+ z1 ]6 U' o. e
pos[0][1] = y+110-(int)temp;
6 F! K8 R# H3 a" _0 z ct = (float)info[1];
4 l( C# r7 f9 D- J* ~temp = (t/101)*90;
( S" V# l1 n) V; F! e/ ?! c* bpos[1][0] = (10-num+i)*25+x+100;: u- d/ q# p; t$ Z2 I+ Z1 W
pos[1][1] = y+210-(int)temp; J# k+ t+ @# C$ [ l
t = (float)info[2];
/ d3 l9 c+ _* C- M- ~5 dtemp = (float)(t/101)*90;
2 _1 Y( N/ t! l1 j5 ypos[2][0] = (10-num+i)*25+x+100;
6 f. C5 m/ h+ y4 \' U: lpos[2][1] = y+310-(int)temp;" D" u, j" B1 D4 e+ ~, d
}
$ ~4 G/ y& V& J' v1 ? rif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
( \, k& E/ K' E; _{ 1 }0 X$ P2 u. u$ H+ v" f( r7 [
clearrectangle(x,y,x+400,y+315); u5 U) s* U( T0 F
settextstyle(20, 10, _T("楷体"));$ R4 \/ E! C0 G- Z$ K9 S
rectangle(x,y,x+400,y+325);
( a9 X" { X& [2 y2 routtextxy(x+40,y+10,"CPU"); //画柱状图
" E9 j. L- v8 w& kouttextxy(x+45,y+10+100,"IO");* d. t/ m$ h0 S/ t R) f4 n
outtextxy(x+40-15,y+10+200,"change");
( l. r3 \* s" S2 ?% j: Z( Trectangle(x+35,y+30,x+75,y+110);
2 h9 P. {. |& K# k2 Arectangle(x+35,y+130,x+75,y+210);
$ u$ y& |' k- r" I }3 hrectangle(x+35,y+230,x+75,y+310);/ S2 K1 ^ W4 U. w% Y) H# L
outtextxy(x+180,y+310,"SJF");; x3 k; u2 ?$ I, W
t = (float)com;
( j, O5 r. |* |% E: v8 i ctemp=(t/101)*80;
: M! J5 K# S. x/ S. `8 `* ofillrectangle(x+35,y+110-(int)temp,x+75,y+110);
+ h; z9 z( m! h+ |8 Q" t% jt = (float)wai;
; R, s7 `+ e' B) jtemp=(t/101)*80;
2 @1 e- p+ l: Y- M2 q, A; v3 ffillrectangle(x+35,y+210-(int)temp,x+75,y+210);
1 d8 Z l1 S( M, y! m! f0 ]t = (float)cha;
0 l% C/ i$ Y/ B y- l" U+ ttemp=(t/101)*80;2 T7 s: l% H; V, H) y- X
fillrectangle(x+35,y+310-(int)temp,x+75,y+310);3 B" k, z) S# {$ {# s
for(i=0; i<3; i++) //画坐标 high=90,length=250" g: R$ \- W+ l% T# N$ G" w& p
{5 W3 S# e0 I2 z; ^! R
line(x+100,y+110+100*i,x+350,y+110+100*i);
, v1 F7 K R5 H! E' l" Iline(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
; B# h0 s% T4 H) ^2 B2 R' uline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);& B4 R6 _4 J- S2 T8 d. ~ R( V5 _2 G
4 D( P, U6 E, N8 r
line(x+100,y+110+100*i,x+100,y+20+100*i);6 y1 k# j& U1 ^) V$ ?3 P
line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);8 c2 l1 {* T4 {8 p8 s
line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);
6 f6 {5 X- P7 u+ ?# V$ ?; E) F' Mfor(j=0;j<num-1;j++)
! E$ T! N5 K6 H& X4 E# W% R0 d{
2 a P2 B+ T4 K& T# ^- ?) _line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
( E3 X& u, ?) pline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);/ v' h' Q& ?+ R. j
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); , }' ]$ ^8 q0 B ?, m
}+ e% c' b; {8 T. T# A& \+ o
}
, B7 x/ ^2 G! M' G" b}2 r4 q5 i) @( K; N, T k
else if(FLAG_SJF==1). l9 _9 t) @+ f% P
{9 _$ @, G. z% l/ S' x8 d& f! y3 \
x=0,y=0;
7 A- t$ _9 m: f+ ]# V$ rfor(i=0; i<num; i++) `5 G. Z; F1 F6 D0 v( X9 B
{- h5 x0 w" m' A# e7 y
t = (float)info[0];
# n# k2 ]0 ], r% u9 @temp = (t/101)*180;! X( c K$ Z! B0 { x, K# g l
pos[0][0] = (10-num+i)*50+x+650;
" S$ R: c- z4 K- ? G4 q0 ~pos[0][1] = y+210-(int)temp;- r& N# `5 n8 u0 N+ u
t = (float)info[1];6 u* @ ]5 ^/ m
temp = (t/101)*180;
7 T# `0 y/ N8 gpos[1][0] = (10-num+i)*50+x+650;& n3 Q0 l/ l- C8 W/ V
pos[1][1] = y+420-(int)temp;) v2 X n. ^8 H4 B2 @) c5 y
t = (float)info[2];: N! @& ?4 o1 s) K
temp = (float)(t/101)*180;
5 y; m4 u$ d5 M' f. wpos[2][0] = (10-num+i)*50+x+650;
2 A$ m r5 F" h9 s5 bpos[2][1] = y+630-(int)temp;
; T' x, t% v( ~" }/ Y3 F}
# I; m# U) G6 Z4 l5 N2 Eclearrectangle(x,y,x+1200,y+650);
" h# g1 K3 P; R% F/ H, Msettextstyle(40, 20, _T("楷体"));* f1 q5 o- t7 x( K0 R3 u
outtextxy(x+50,y+50,"SJF");7 p5 p% S1 d L1 |
outtextxy(x+280,y+20,"CPU"); //画柱状图8 m H$ q f0 k5 [0 I* U
outtextxy(x+285,y+20+200,"IO");
( O% W' t G: ?+ D4 b) Bouttextxy(x+250,y+20+400,"change");6 \9 f. }# m: Z( d; Z
rectangle(x+270,y+65,x+330,y+215); Y% T, B3 v1 Q4 |5 P/ f8 Q
rectangle(x+270,y+265,x+330,y+415);, R& {2 z& e5 X' {" d
rectangle(x+270,y+465,x+330,y+615);
7 r) |" C# O2 e, wouttextxy(x+290,y+620,"TT");
" W3 |: |' ^+ v8 @- e U8 Kt = (float)com;% Y f! v! ^" a2 t
temp=(t/101)*150;
1 |1 w) z+ {6 O4 zfillrectangle(x+270,y+215-(int)temp,x+330,y+215);
% k" R. Y. ]' T( c5 Nt = (float)wai;
( @! D3 u/ n' N$ J- `temp=(t/101)*150;+ d6 c, d: `; x0 n6 E( `7 k+ I
fillrectangle(x+270,y+415-(int)temp,x+330,y+415);# }) a" I; A) m' e H) z T
t = (float)cha;) F7 l7 e4 o4 Q" T! [: w
temp=(t/101)*150;
; E5 k7 U( V/ ?/ t1 N2 kfillrectangle(x+270,y+615-(int)temp,x+330,y+615);
$ [: G7 Z3 r1 r9 P2 N3 ^% Mfor(i=0; i<3; i++) //画坐标 high=90,length=250
- P1 I# B6 |5 A! w1 `{
- Q$ t/ ~) B! m0 a, A+ ~line(x+650,y+210+210*i,x+1150,y+210+210*i);: d& E+ I" L6 x
line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
( V! H/ d. o; H( E1 W- E) f) tline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
1 B4 r9 U" X1 ~
|7 U2 N' W2 E% x: i! vline(x+650,y+210+210*i,x+650,y+20+210*i);# V: K; ]* B0 k# y; n7 e: _- q9 F+ o
line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
' D& P3 K9 {/ T/ h1 dline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
/ l; K2 {5 G3 nfor(j=0;j<num-1;j++)
- J- \2 ^# v) ~% I8 D: g. o{4 b& \6 n0 @4 b" g
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);. ]' J3 O0 }; M! p& S" [: l5 N
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
4 u& S6 ^( K) ?4 Q# X) q6 W+ Mline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
! }# Q$ X: L$ G: Y# L |8 x}
6 o# N2 m( }! W! c' o}( _: s* ^# n% L# Q
}1 @. Q) l1 @. ?5 z: i4 M! H! S: x
return 0;
4 [5 E1 \/ e+ _ O7 c8 a1 y; v}5 Q: c8 M: P% A/ A" z
int High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
4 V; S3 ~! |; X2 T+ |{! f% D9 y2 y1 A9 {7 e
static int compute=0,waitio=0,change=0;
+ F0 b9 F( @$ t- [static int computeLast=0,waitioLast=0,changeLast=0;
( |$ x" e6 ^. s* Jint i=0;
% j) l7 k; ~7 c) {6 w: n. ?if(draw==1)
& b* e& ?1 r* C9 H4 h6 ~{) v* Q& _3 h1 X9 s* Y% p P8 W% F
//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);2 p6 s+ l( D9 i, L) u: f
drawPerformance_HR(400,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);2 I* J( L A. O2 Q, P. C
computeLast=compute;% c% ]5 l6 j% ~
waitioLast=waitio;. a$ N U. n% j& ^9 i
changeLast=change;
% j2 i6 x5 N( m9 h9 G. c}$ V1 d( g% X7 ]
if((* memory).p[0].flag==ready). C, y1 a5 |' l) K4 ~
(* memory).p[0].flag=computing;
1 B: U- l0 t& ?9 Fif((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)
' u7 g( p- Z. |7 z1 O{2 U' ~# Q" h M& _ Z
i=(*memory).p[0].computeNum;
* N, @3 R' ^7 Gif(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed) N5 y6 x" u: P% z/ Q7 W: a
{2 K1 {+ t2 r# z5 _/ O/ `9 s
(*memory).p[0].flag=IO_waiting;+ {- e/ |9 W9 t0 z$ j' }- p
(*memory).p[0].computeNum--;
! O, R8 e1 b, t- B2 q: Gchange += exchange_IO_Compute;
6 [" _$ ]0 ~: }, e7 Icompute++;
: D# I- K1 M: f}9 g* Y# ?, |7 ^" @
else; e9 G; u+ p8 Y
{- ]" J- t& U/ |' |
compute++;1 ^! r% x* i7 T+ S6 @7 T! Q
}
8 h, T2 _0 |' A7 v3 K}+ a4 F' z* `0 ~# P9 ^
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
. E- W6 x8 f3 o0 U2 j{ i8 v3 S' ~# z7 Z
5 H( P, \2 i7 A! r- mi=(*memory).p[0].ioNum;
4 _. c6 @. E! _0 H# Eif(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed6 V8 Z2 h; d4 r; z
{% p; D5 F d% D8 Y `/ \
(*memory).p[0].flag=computing;
% a7 [& X$ C c; z6 g# x3 @(*memory).p[0].ioNum--;
& x$ B, q0 @' J* B, c8 V% c7 c2 Kchange += exchange_IO_Compute;
, U9 E+ A7 k Q0 i" Ywaitio++;
" s' c. L- b' X7 @}3 h. p5 q! _6 I# m
else
* O( n z# o0 a4 y1 H+ z{
$ D3 ]3 O; l$ U- C+ F2 Kwaitio++;+ @& i' j4 ^2 E5 m7 \
}% Y( z3 G! B% Q+ b5 b! U' I' t
}
6 E9 _" ?" b$ k4 [5 Telse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing). b; T f7 j S7 o
{
, w0 }$ e' ^; E5 O4 z/ y(* memory).p[0].flag=IO_waiting;( \& t* o: O' T/ R+ t
change += exchange_IO_Compute;
2 O3 @- L+ A( m8 H}# P* N0 Z5 q* `4 A
else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)
- S% m i# c8 N& N{
% O3 h5 [( e3 z' R(* memory).p[0].flag=computing;# a% z7 @# q# X* a/ @8 A
change += exchange_IO_Compute;4 K+ m3 H E$ P5 Q/ N$ a; Y
}
( L+ T9 k: l V( p1 l; M0 lif((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0) //一个作业已经完成
5 D% B! v& A1 w# `{
, S% t9 `' w5 O(*save) = (PCI*)malloc(sizeof(PCI));/ F; P B5 @; ?0 I
(*save)->next = NULL;
5 `; K. ~. {# {+ D. m9 | q(*save)->processID = (*memory).p[0].processID;3 l. o8 h/ Z- p/ }
(*save)->comeingTime = (*memory).p[0].produceTime;3 ?6 h, a" p g& W8 X1 m3 x. B8 p6 d- ~
(*save)->askMemory = (*memory).p[0].askMemory;/ D* f$ a; j/ q4 ?& J5 _9 T- L
(*save)->compute = compute;
3 T; ]$ A2 \8 ^7 p(*save)->waitio = waitio;
+ j9 D* b5 E# u$ |. j7 M(*save)->exchange = change;
E% E9 R0 k7 @ q(*save)->completedTime = systemClock;
6 R' z. {5 Z7 F; _3 z8 K(*save)->runningTime = (*memory).p[0].runningTime;
! R/ ?& E9 ~. Y; ?*spareMemory = MAX_MEMORY; //*spareMemory + (*memory).p[0].askMemory;
2 W2 F0 ?6 K2 U; F' m5 gcompute=waitio=change=0;
/ k1 [; G+ v- g" O! }8 B+ y( zcomputeLast=waitioLast=changeLast=0;+ ]' Q6 K9 A7 B8 C3 `& E0 \
High_response_ratio_s_to_m(&(*storage),&(* memory),&(*spareMemory),1,1);
$ e' R/ l; {. G0 R' V6 g/ \change += exchange_process;0 c v4 L2 N, h5 @/ M4 F
return task_completed;9 e3 }3 o9 d( B5 d. `
}0 H0 j1 m% a# i/ }1 R
else( P6 Z, p0 T1 X3 D
return task_not_completed;
6 L. ]5 G- e+ s1 J! i}5 E% H5 g/ j8 Z! [ C; F Z
int High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int dispatch)# x, C$ B/ C' Q% z% x0 p: t5 P2 ?
{! k, V+ M; J/ G; k% H0 \, B6 ]; e. g
static int waitTime[initProcessNum],i=0,j=0;9 _1 N: d; u4 k# E
static double HR_ratio[initProcessNum];
+ g) g8 i- @0 y, s; j( s) l0 vif(flag==0) //初始化数组3 `0 J' f- H/ x, m3 _
{7 H! ]; w1 }6 c7 d R) X; C$ [
for(i=0; i<initProcessNum; i++)/ b; j! l3 Q9 ]6 l. l4 b! X( k
{
4 J" Q- g# B z6 swaitTime=0;4 h) ?0 `$ I- N" A
HR_ratio=1; _& f! s7 V/ i7 Q
}! [' z1 c: O5 k: R6 M" w# l! S
}
- k9 \! K, v# \' Sfor(i=0; i<(*storage).proNum; i++) //等待时间增加,重置响应比
; h1 P$ L4 O7 K$ P) N+ I{
# t/ I. N- j bwaitTime++;
% N' h, X* Y9 f8 f7 s$ M* ZHR_ratio = (waitTime+(*storage).p.computeTime+(*storage).p.ioTime)/((*storage).p.computeTime+(*storage).p.ioTime);; B. p F( p. C( M' d0 D
if(HR_ratio > HR_ratio[j])
5 a2 A% ~* ~/ I3 {4 ]j = i;
3 K/ G( A9 e) x" p/ C}
% k# W1 h% o; Oif(dispatch==1) //需要调度一个进程到内存中执行# e1 P% j8 `1 _% M. n$ U1 b4 V
{. f! w) }) X+ H }+ |7 _
if((*storage).p[j].askMemory < *spareMemory)
/ |' Q s- K1 R& C( `4 T2 @{
8 \) w! `" L" B" C: U, x) @7 G(*memory).p[0].askMemory = (*storage).p[j].askMemory;4 [3 B1 ~, k/ d' c
(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
; _* l a2 R P' u(*memory).p[0].computeNum = (*storage).p[j].computeNum;
* ~& k$ M o1 r0 r: C) r; ^(*memory).p[0].ioNum = (*storage).p[j].ioNum;
1 J/ V% @1 M7 Y7 f* q(*memory).p[0].processID = (*storage).p[j].processID;- A! R: s1 q( _0 g1 J8 ^
(*memory).p[0].flag = (*storage).p[j].flag;
, g5 Z J: M& [(*memory).p[0].ioTime = (*storage).p[j].ioTime;4 p5 a* S' ?% s
(*memory).p[0].computeTime = (*storage).p[j].computeTime;
$ D I7 V A7 X(*memory).p[0].runningTime = systemClock;
) ?$ o- Q5 T4 F) C( v4 T(*memory).p[0].produceTime = (*storage).p[j].produceTime;
) u" R7 p/ v) [4 P4 Y# q# s& T1 Sfor(i=0; i<(*memory).p[0].ioNum; i++)2 S4 H& v5 C" Q# u$ \+ _6 S
(*memory).p[0].ioClock = (*storage).p[j].ioClock;: }& M/ E1 k: F4 F
for(i=0; i<(*memory).p[0].computeNum; i++)
5 X7 E. N6 u$ v$ B1 y% W: _; X# \(*memory).p[0].computeClock = (*storage).p[j].computeClock;
( M8 R/ q! I; j( j) \/ ?' i(*memory).proNum=1;
( L; _' E* K) b8 P; ~/ _*spareMemory = *spareMemory - (*memory).p[j].askMemory;" k0 U9 W9 R) w
produce_one_task(&(*storage),j,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程' Q; _& @! o, J0 { X5 F+ P
(*storage).p[j].produceTime = systemClock;8 o8 ]5 t7 i0 {% B9 }0 i" }
MAX_COMING_TIME = (*storage).p[j].comeingTime;7 H( H8 }* A9 V0 d/ R6 C7 h
waitTime[j] = 0;
# i5 O$ ^, \1 v; ^HR_ratio[j] = 1;
0 F5 X$ U8 j' Q2 Z+ L# C4 j8 q9 c}
5 }: s- |* d0 j) x4 e, h! w: W- yelse
4 N+ d% O% z/ K9 A: x{
+ r9 B, Q0 J2 F$ `printf("A process ask for a memory overed the system capacity\n ");
; m2 l) `6 K5 }7 l( v% _" Iexit(1);
9 P5 M( @3 O, Z$ a8 i$ J8 [}
- c* @" W9 N h# p+ W}- A8 p8 {2 u+ q$ x. X
return 0;
4 r" O0 ] Q8 T3 }% d}
& W: U; v+ Z( Y& I! h8 S" kint PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
/ j8 _$ H! s$ J{
0 r0 B& j, L# E1 _static int compute=0,waitio=0,change=0;
- `! ?) a! _/ Rstatic int computeLast=0,waitioLast=0,changeLast=0;* W/ |* b( A! s, E" H1 e5 V8 K
int i=0;
1 v: C1 D0 P% \if(draw==1)) A( ~5 ^7 X* N2 V
{+ W* ]0 f8 N7 i
//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);/ P& x1 q, d7 J. w
drawPerformance_PF(800,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);8 \+ ^+ r* l' r" |2 D
7 y5 j! g$ @1 b) Q0 T% r# h8 z3 ]/ V5 u/ o
computeLast=compute;
" b; a: T- d2 K4 X% o# {6 ~waitioLast=waitio;
# u& Y* V2 R2 z: DchangeLast=change;; b/ Y2 u) U0 }. n* ^5 J
}
0 m6 V& V! j. Q( F5 F$ U7 C' Y' Tif((* memory).p[0].flag==ready)" T& x: J: j1 b0 w+ C4 c
(* memory).p[0].flag=computing;
( I/ ?: H+ ?" W/ }/ ]if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)
: N" Y) A% ^0 A2 {: {{
% ~, a' Z* x4 Y, g$ @' ~! i5 V& oi=(*memory).p[0].computeNum;7 K* J# O$ S3 b8 J R9 b2 [
if(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed
- q# r0 U+ N. Z# c{" k1 V* p3 X$ B: {( c0 G% B
(*memory).p[0].flag=IO_waiting;
6 I3 m/ n3 J1 j4 [(*memory).p[0].computeNum--;$ J6 c2 _. K- @' j
change += exchange_IO_Compute;, ~ N- U) c2 w1 ~
compute++;
, _* U# i; B5 p( L. Z- T3 }}
) P5 P8 K" U+ selse
/ K% I# o9 h1 |# j$ {{
$ _+ C4 l! N Z7 G/ n$ icompute++;
8 `7 r% W, {3 c8 k}
; P2 B" A% V$ B+ ?# v$ i}
. @( d$ B I# B w$ selse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)$ w: U+ _& e" Q- A2 v; I# L5 M
{) @0 n# Y$ t% B9 a0 @" k( h
4 F) ^1 p6 y( P" X6 [7 O
i=(*memory).p[0].ioNum;4 u- B, N9 h6 }6 y
if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed% c+ C! O6 G; \; `' W( I
{4 \# N1 ]$ L! U( v1 j3 O
(*memory).p[0].flag=computing;
/ O" S* Z! \! ?(*memory).p[0].ioNum--;
% r+ H1 Q3 f2 Q& G0 I, _8 R% Hchange += exchange_IO_Compute;
% z4 k: _: a* Z' Lwaitio++;( E! g) P/ m4 C$ Y9 ]6 ~# k
}6 @8 B* H L& _
else( V4 H2 Z% U) V0 w
{( [0 @ r6 Y K
waitio++;
( f# g5 o& h/ ]' _3 |) z}
, W) D5 C# z# T& x+ f}9 F# }2 i0 C3 f0 F* ?2 w
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)/ k+ v- W5 t% W) h9 G. L5 u
{- F1 N1 u8 N0 x1 W( W
(* memory).p[0].flag=IO_waiting;
7 b6 D$ y% Q. {9 Z% o$ O/ uchange += exchange_IO_Compute;4 `5 `" F! z: k: F: t7 A" P
}. b) @0 N+ ^8 |* V) W
else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)+ W# L% A! n; y) t' x
{: S- W5 l3 p% x- S; E, ]: V6 l, E
(* memory).p[0].flag=computing;
* i7 g- b) f8 I9 I& wchange += exchange_IO_Compute;
& z3 ?4 g; ]9 }9 X% S. X}8 c, K$ _+ d7 F
if((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0) //一个作业已经完成1 n9 m2 k5 m) C& ]: d
{
3 G' G8 `2 [+ G$ n4 G; H/ f2 z) r(*save) = (PCI*)malloc(sizeof(PCI));6 C, j! V! ?( ~. M$ b4 E+ }! e# X
(*save)->next = NULL;8 p1 b, ?6 J4 S, [3 m4 S& t( ?
(*save)->processID = (*memory).p[0].processID;
" l$ L* V: G3 R: y; B; ]* T(*save)->comeingTime = (*memory).p[0].produceTime;8 W" }' ?* n% A; w" [! S* y8 J2 E% p
(*save)->askMemory = (*memory).p[0].askMemory;0 f3 m6 f, q+ G, v* T5 |9 y9 Z! \
(*save)->compute = compute;
4 q8 }% C& y- ]# {" P(*save)->waitio = waitio;
9 ?, d5 W6 v& a$ X s* _$ V(*save)->exchange = change;, l( Q5 i8 Y3 _+ D9 {0 v
(*save)->completedTime = systemClock;# z+ ~7 g# @' d) c( i% |: Z
(*save)->runningTime = (*memory).p[0].runningTime;
/ ~3 d3 ]4 p5 a* y2 I, R2 l*spareMemory = MAX_MEMORY; //*spareMemory + (*memory).p[0].askMemory;3 f/ j9 [: N \
compute=waitio=change=0;; W) q$ G9 H* J7 S1 E: O
computeLast=waitioLast=changeLast=0;
5 F5 Y. @1 V% \: t0 oPriority_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));+ \) F3 Q! u! X0 k, L
change += exchange_process;0 U* O' `/ \4 w8 ^
return task_completed;
: n4 ?# @0 `3 z) Z8 I- @}+ A6 O2 `- O/ g
else- K: `4 `' ~' `3 x( l+ }0 ]
return task_not_completed;
# D3 J0 X3 W/ Q4 u) b; @ ~5 v5 f}' z- |% d+ e) ?; ]) n
int Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)0 y) ~& [. t# ?
{- C* }$ Q" ?: `* B2 t
int priorityNum[initProcessNum],i=0,j=0;+ R& F3 F% z+ v2 ~
double temp=0;
: J# A5 |" J% O- N- Xfor(i=0; i<(*storage).proNum; i++) // setting priority to each process7 M2 O) s, u; W, ]1 I4 v; j- i
{2 J, g3 A2 B7 @$ H9 n6 O8 u- i, ~
temp = (*storage).p.computeTime/(*storage).p.ioTime;0 ~' m% P$ d% ?- o0 t
if(temp > 0.8)
7 ^- h Z: R5 ZpriorityNum = 6;
7 ?2 b G2 o- [, r0 E7 P. Eelse if(temp > 0.7)
' I9 D- T7 Z! S, H8 I1 |6 }priorityNum = 5;
! U* V! B, I h- Q- C0 j( G( pelse if(temp > 0.6)
9 Y# ]) i+ t4 UpriorityNum = 4;* P3 V) L5 ~5 Q1 W/ {5 q! m; |
else if(temp > 0.5)9 I: E7 A p; q
priorityNum = 3;
! C6 X- e, w7 V' C. P ~else if(temp > 0.4)) S5 P- T2 f9 J8 g5 C+ ~
priorityNum = 2;) w8 e- l) C" w5 F6 s8 ]5 C: Y
else; u" m, e; p$ ~7 i
priorityNum = 1;# S; p# V6 i) ?$ @3 z
if(priorityNum[j] < priorityNum)
5 {. f2 w! @) S! I: ?* Dj = i;6 |" _, D9 ^5 V& Z- y/ n
}
0 T0 [+ D3 D+ q& n' b( \% X8 n- Hif((*storage).p[j].askMemory < *spareMemory)
' f$ Z8 p+ h1 X" B4 q% V/ ]! u{
( U/ W9 E9 E5 ?# T& C g4 I8 n! F/ }(*memory).p[0].askMemory = (*storage).p[j].askMemory;4 `+ |6 J: t0 y: Y ?4 Z0 @& e
(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
$ Y' c; b! }& }(*memory).p[0].computeNum = (*storage).p[j].computeNum;' a. v8 V8 ]5 {7 c9 z7 R _$ ^
(*memory).p[0].ioNum = (*storage).p[j].ioNum;; c, B2 B* j8 {" ?6 c! {/ e
(*memory).p[0].processID = (*storage).p[j].processID;0 Y! i$ W9 I# H7 w. E, T5 ^
(*memory).p[0].flag = (*storage).p[j].flag;
. w4 S4 B) ~; o' e5 W" [- I# L(*memory).p[0].ioTime = (*storage).p[j].ioTime;5 G3 `# X8 c# c- f
(*memory).p[0].computeTime = (*storage).p[j].computeTime;" \7 e# j2 f( s& F1 e, {
(*memory).p[0].runningTime = systemClock;
+ Z1 N, p0 Q4 }* k(*memory).p[0].produceTime = (*storage).p[j].produceTime;
$ L+ N5 u8 r; U$ J4 A. Ofor(i=0; i<(*memory).p[0].ioNum; i++)9 X1 m2 ^5 p* c0 ~8 U. t
(*memory).p[0].ioClock = (*storage).p[j].ioClock;
( \7 z! y: L6 N3 B( E3 Lfor(i=0; i<(*memory).p[0].computeNum; i++)
( _; Z1 g% B# v S% W(*memory).p[0].computeClock = (*storage).p[j].computeClock;
5 D; D5 U# H& L& v0 _" C' V(*memory).proNum=1;
* U' D; C/ O; G9 \: C$ D5 m/ F*spareMemory = *spareMemory - (*memory).p[j].askMemory;2 p3 D! W/ Z/ B4 U! @& S2 t" b
produce_one_task(&(*storage),j,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程% f; }# w* N9 ^9 p
MAX_COMING_TIME = (*storage).p[j].comeingTime;
! J" s- a P0 w v9 N# Q( f}& z# R1 {1 l4 t
else
8 ~6 }! s: Z" ]4 F/ w{
' q9 I: [4 g! W6 b5 w* t* `printf("A process ask for a memory overed the system capacity\n ");
, u2 }3 y* {& ]& r9 f- e. hexit(1);
/ ^6 b( h* k0 v7 S. A}
4 Y, t1 _2 @0 K" ~5 j" yreturn 0;
4 l' c+ w# }" g& _}( M* ?! w" B( l( R" }2 Q
int ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
4 ~7 q+ ]0 N7 y1 D* j{% I6 I0 a; I' ]. S1 K
static int compute=0,waitio=0,change=0;4 e- x* ^: b* m( f
static int computeLast=0,waitioLast=0,changeLast=0;
1 Z7 D ]& m: Z* Y9 e& A9 _& Aint i=0;
4 h% n. j0 Y0 Q2 mif(draw==1)! @5 d8 f. U% i
{# w8 H8 p0 R8 G- P( w9 f; C8 t
//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);6 {) t2 d* z' i3 ?: p
drawPerformance_SJF(0,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);; u' Q4 S( H2 h
3 f0 \4 t& X; t6 \" m
$ q- z8 |5 p4 g8 ?# l) X3 k! ucomputeLast=compute;. q v$ V3 P: l
waitioLast=waitio;4 l" Y- o6 R# q( }# ^( G0 ^0 W
changeLast=change;$ u) s7 W4 Z5 E, I+ u; |$ W
}
6 V: I8 `9 \4 b* W8 kif((* memory).p[0].flag==ready)
% c- q1 M. `* [: Z0 E(* memory).p[0].flag=computing;
7 Y, p) j! j6 Q! Q1 B0 W7 s" m: bif((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)3 G. P, O4 _6 a( q% R& f
{
5 g2 I" d7 P* `7 xi=(*memory).p[0].computeNum;
7 \2 K6 C& g3 X+ Q1 tif(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed* z0 M$ `* A9 N' R% Y6 k
{
2 r2 I! `0 I3 Q- T& R(*memory).p[0].flag=IO_waiting;
8 Z+ b, p: b: ^* y5 f) \(*memory).p[0].computeNum--;
) `* m: K6 \% I7 Ychange += exchange_IO_Compute;5 _2 x' h# c' Q1 N5 U
compute++;
+ I5 B" G) b& X k; A0 [9 r}' S8 c6 a. N t3 @; I1 D4 ^+ z$ f
else5 u1 n9 y: e" F- W( w/ ]1 M, l8 u
{
2 z- C8 I8 n. j% G. P( @compute++;* ?7 t8 u( o; {# q3 J
}
( C/ _9 }, @: y1 w/ D7 l5 y}0 @) r" {( f8 V' k
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
, V- m* H/ p$ z' B9 Z{
+ P# \% r. F+ ]9 n% Z- B" u7 g
6 f4 k1 y1 e, S3 D. Ui=(*memory).p[0].ioNum;0 V8 ?: r1 }. r9 F N, b
if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed& }1 U; x- b0 [. y
{
$ b8 v' Z { o4 w R, v(*memory).p[0].flag=computing; o ^; A6 A( z9 I$ o% i% T/ ^
(*memory).p[0].ioNum--;
3 N& i: D0 T4 o! o. Xchange += exchange_IO_Compute;' N% Y, [: I1 p* Q4 d
waitio++;% U8 [9 ]8 W2 O& Q" B" G% n7 ^1 N
}* W8 ]9 V o: n' t8 E9 G5 [
else
) w0 R; C. y0 O{7 K$ ^( U6 W! V' p0 x$ Q1 ^- y+ a
waitio++;, b# B% E) ~% w* r( A6 x9 d
}
- b& u8 Q& Q, F. h" d3 j}) K, W8 e5 D5 S: U8 i) p; {/ x
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)
/ ^, J! F- `3 d{
, I$ {0 S; h2 O6 j: B(* memory).p[0].flag=IO_waiting;
4 Q& W: r7 y2 Y2 D. tchange += exchange_IO_Compute;
0 |7 U% Y! ~# ?- P: y7 _- X}
3 `! v4 ]/ F4 t/ ^9 H* ]else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)
9 {0 |) T" z/ }{
- N8 j. {" P; H+ T |; p(* memory).p[0].flag=computing;) j3 m& T2 V3 F$ R' M% V, Q& O3 N
change += exchange_IO_Compute;
2 K2 [/ _: Y9 G1 H* {; X}
& N2 q0 Q! K, iif((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0) //一个作业已经完成 s( S9 x+ u" x4 N |) N" P* b
{
, z9 Z0 n6 n! N6 e8 y: t(*save) = (PCI*)malloc(sizeof(PCI));1 z, g" @, k. ^) a0 {
(*save)->next = NULL;; g( k# @/ S- p" y4 T; c! U
(*save)->processID = (*memory).p[0].processID;" N2 ?4 K, S/ n2 H% P) A7 [% j
(*save)->comeingTime = (*memory).p[0].produceTime;
; Y0 z6 U" a6 q/ j(*save)->askMemory = (*memory).p[0].askMemory;4 b4 I$ {& N4 P, ~7 _! H: _5 Q7 K+ w9 s
(*save)->compute = compute;0 O! z4 H A3 E& t
(*save)->waitio = waitio;& C) K. Y4 l9 ]4 Y
(*save)->exchange = change;3 D- f% z M# R7 y
(*save)->completedTime = systemClock;3 d( x9 I6 P6 @7 ^0 |' ~
(*save)->runningTime = (*memory).p[0].runningTime;) G$ Y! w. O; ^$ z5 X
*spareMemory = MAX_MEMORY;//*spareMemory + (*memory).p[0].askMemory;
: D: O. ~' \+ O- K0 V. z7 xcompute=waitio=change=0;3 F8 @1 J6 u0 [3 e# C/ E+ y
computeLast=waitioLast=changeLast=0;2 t4 f& A2 T& J3 h) j9 H( `
SJF_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));
$ G" y$ U% Y9 b$ m- Rchange += exchange_process;
2 e% @5 K ]2 K e! T: B- l9 jreturn task_completed;
5 J* |) s% @$ d0 e" Y}) k" {, r3 o% g* l+ r/ y2 i3 r
else; }3 E( c* o. B3 J; `$ F: h
return task_not_completed;
' K/ ~$ W, S+ m. U* `}; Y4 A6 @; `; `5 a/ E
int SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)
5 R+ M# \; f( N, u* w{/ T' r) K9 e' ^) s, Q0 n6 Z
int i=0,j=0;
* h9 [$ d8 L2 r, P% }' Ifor(i=1; i<(*storage).proNum; i++); T4 k# e' c. w5 L: b4 O, S' }! e! b
{
0 N" Z! i* t- v; j5 \if(((*storage).p.computeTime+(*storage).p.ioTime)<((*storage).p[j].computeTime+(*storage).p[j].ioTime)): ^; q6 J" `, Q, [" x4 G( P& H d
j=i;
0 }: Y/ U. m7 A. y' I}8 \! N! \% Y/ [1 U5 O
if((*storage).p[j].askMemory > *spareMemory)
: }: A- |2 H/ N. U{
8 B1 \7 }! d4 C3 r" s1 jprintf("The memory asked is overflowed than the system memory.\n"); Z! z: Y/ e8 i! u8 S9 O( `
exit(0);
- j$ E5 a& \& b: s}
% H) ~) X) _ [) kelse7 ~0 |+ W& N( C4 S& L
{- @. g' ~: R( y! a- N1 T
(*memory).p[0].askMemory = (*storage).p[j].askMemory;& q- D( c+ t7 E! a% P
(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
* K- `8 p$ H* c: S* s2 \(*memory).p[0].computeNum = (*storage).p[j].computeNum;
" }8 _8 K8 |$ G; _1 c(*memory).p[0].ioNum = (*storage).p[j].ioNum;% C3 H% ]1 U# M# R2 o
(*memory).p[0].processID = (*storage).p[j].processID;
2 d9 H: Z9 C) F! g' {7 e(*memory).p[0].flag = (*storage).p[j].flag;! n# k; Q# v- M' z/ H- p; v
(*memory).p[0].ioTime = (*storage).p[j].ioTime;
! E! c) u- A6 C5 h" H(*memory).p[0].computeTime = (*storage).p[j].computeTime;- F. y, Q: w. M2 K$ h/ h( S* v
(*memory).p[0].runningTime = systemClock;
- h- E/ d- m7 _% G(*memory).p[0].produceTime = (*storage).p[j].produceTime;
" ^ o% k b+ V8 ffor(i=0; i<(*memory).p[0].ioNum; i++)
2 Y4 s! j4 x! V' v0 p(*memory).p[0].ioClock = (*storage).p[j].ioClock;
# b7 _. C/ t8 k! K1 T9 ^) ^* ofor(i=0; i<(*memory).p[0].computeNum; i++)
, D, v$ F- q+ f: u' X* K7 y! k3 _: a(*memory).p[0].computeClock = (*storage).p[j].computeClock;4 Z" ]3 `- M% l9 ]! U
(*memory).proNum=1;/ d9 y. G( r; N; `) U8 M6 h9 A
*spareMemory = *spareMemory - (*memory).p[j].askMemory;: y* y4 g3 u# @: P2 _
produce_one_task(&(*storage),j,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程
/ j$ e4 R6 c# X- O* M oMAX_COMING_TIME = (*storage).p[j].comeingTime;
' N/ I' v6 m/ x2 \6 o! b/ A+ G}
' @5 g! `6 M, r, c* mreturn 0;" N- A" j$ J0 V% F
}9 }" y# V6 y3 @2 P
int TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
5 l* J" d. d5 @. @+ g{
+ H2 e; G/ A& d1 I& K% n) xstatic int compute=0,waitio=0,change=0,clockSegment=100,poi=0;
7 p3 D. }2 j0 G+ b% z4 K6 ~static int computeLast=0,waitioLast=0,changeLast=0;
+ r% P( @, F) mint i=0,j=0,k=0;
+ G! Z8 I. M* N, Nif((*memory).proNum<=0)
2 C9 D/ w8 `. J, P( C# m/ kTimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),-1);
: I. O/ n; X5 O4 i* Zif(draw==1)
2 g1 L; V4 [' G* v f2 _{' A4 W* m9 Q+ c0 r' W- ^$ R$ k
//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
: _. j5 d. Y: Z) Y1 n* [drawPerformance_TT(400,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);3 l+ A2 u' i. v
+ F& z7 a6 [8 C; _6 U. j, T5 H0 {4 ]! q
computeLast=compute;. G5 w2 c5 M( j
waitioLast=waitio;
- J3 k. I+ i( a4 L, {( m) ~8 w! n! DchangeLast=change;
" {3 r. I) h, b" t. k" j}
! H2 N4 I3 \3 x( [& R' P- cif(poi>=(* memory).proNum)3 v% V [: |6 a( [% N4 H2 {- u
poi = 0;
) }$ Z& T- p! x7 vif((* memory).p[poi].flag==ready)) N% D g3 R; A9 \6 S
(* memory).p[poi].flag=computing;4 A, Z! z7 b8 G/ N3 X" ^ `5 {
if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==computing)
2 J2 v0 E" Z9 E$ M5 J{0 Y0 {( l: j" T: v3 W# y3 F( F6 |
i=(*memory).p[poi].computeNum;! l, d, ~6 X( w
if(--((*memory).p[poi].computeClock[i-1])<=0)// one compute tase is completed
) _, z7 W* m# k{. G5 u }; v p
(*memory).p[poi].flag=IO_waiting;
% g9 t4 C$ k4 E(*memory).p[poi].computeNum--;( ^9 w h4 l0 f. Q5 W6 a
change += exchange_IO_Compute;
& S7 u) ~3 [8 y; q7 [# \: Zcompute++;
* C( H( @+ l6 w3 P6 i% }- P}. @' ?( M6 W5 `$ K3 M) ~
else/ o' Y1 q9 l5 B
{2 O" W" P8 {9 R
compute++;& O" Z% e& j3 P; b* n
}
5 ~2 r0 m/ J( I) U& a% | c}
. Z0 G# f' ]7 n: `else if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==IO_waiting)
# e7 t1 b6 n! P' y3 N7 W0 Z8 j" `{2 v; o9 w+ q2 Z. Z W, i7 M! o' R
v: n& J$ M& P+ ~' r1 b! r% M
i=(*memory).p[poi].ioNum;# z- f" x# b5 X9 s) x3 i' U
if(--((*memory).p[poi].ioClock[i-1])<=0)// one io tase is completed
* R, E, ^! f- r! c( ?{" q; g: L4 V O7 Z+ n+ Y
(*memory).p[poi].flag=computing;% a7 s9 [: d8 ?% f- |" l
(*memory).p[poi].ioNum--;
- e4 j) c( Z* I ~6 a; ^/ ichange += exchange_IO_Compute;
+ q: M, i& \8 f, `waitio++;0 Y* m* ]# N+ R ~, [( Y
}) z4 o E: ]! p0 }' {8 r
else/ J6 ]6 ]! l. j+ p: n5 r, J' a: m
{
) ?3 a. s( T6 `waitio++;
1 [! {+ |4 N* j' L$ ^}; o0 L, P9 l' B# i+ R7 @9 D& b
}: C+ ?+ D3 G, J1 j
else if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==computing)3 o: }9 k; V) g& |& s
{
0 s# v* B% L& p. `, L, F. @(* memory).p[poi].flag=IO_waiting;4 g6 ?" l6 F$ q$ Z- ~
change += exchange_IO_Compute;" R0 d% H5 X6 Q% U4 u5 W- J6 B
}# a$ U) Y7 R: l
else if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==IO_waiting)8 h& }3 G2 p" o
{+ O) ~/ a, I+ ?5 j1 B& K
(* memory).p[poi].flag=computing;0 A( s# ?2 r- x4 v) y9 K
change += exchange_IO_Compute;
% A5 `- k4 ~: Y' R; Q}) _" j/ t% d# ?
for(i=0; i<(*memory).proNum; i++) //其他等待io的进程可以并行推进4 U: r4 g- ^* G8 D6 z; C* Q
{5 v2 D. N' w! h+ w6 |6 x- G
if(i!=poi && (*memory).p.flag==IO_waiting)
+ i$ ?: F/ u* O/ c4 t0 z{
5 t8 m/ v% H( p+ h! N& cj=(*memory).p.ioNum;
$ J$ u9 R N$ [/ u. Uif(j>0)
3 {1 c) C1 l9 {* K# K' V; Y{
: z; V$ z9 {# ?4 k8 k+ l" Y4 u, uif(--((*memory).p.computeClock[j-1])<=0)// one compute tase is completed
% X2 b# A' u1 o/ R% e; v{
% g# |6 M4 I- O+ \% F(*memory).p.flag=computing;
. q [5 t( H! O* Z% e(*memory).p.ioNum--;
( P; P) r0 D1 L5 j- rchange += exchange_IO_Compute;
L6 C$ `9 V2 C7 P5 o, N7 d" |4 L}$ G5 c/ p3 Q6 a! g/ C" }. H) M
}
~4 S" r$ y5 p, z: d9 J! e}! D5 f" K$ ~6 N% S. F7 A& V+ i
}. D( I& I6 `, R( V
for(i=0; i<(*memory).proNum; i++) //处理已经运行完毕的进程1 p5 _: d; h+ _2 H% h9 Y
{
. O9 y- V6 h' E% a4 l1 i3 t2 F) |if((*memory).p.ioNum <= 0 && (*memory).p.computeNum <= 0) // a task is completed; ?" f+ ^& J, X3 k5 P2 V
{
3 f" E, L- z, Z. x/ c7 E(*save) = (PCI*)malloc(sizeof(PCI));9 Z5 v7 n a- t& E
(*save)->next = NULL;
% m" N/ s7 j4 k3 [# x (*save)->processID = (*memory).p.processID;6 N5 g: Q/ t( I' E
(*save)->comeingTime = (*memory).p.produceTime;
4 Z+ }! U$ X4 ^- `(*save)->askMemory = (*memory).p.askMemory;
/ _5 u, H# b5 K0 y/ r' B& [* |(*save)->compute = compute;1 s* x, `! P0 r( N C$ R* z
(*save)->waitio = waitio;( x+ t; O* C' r; Z; T; g4 m, K
(*save)->exchange = change;( l% D m" o, P0 h- t; Q$ q r
(*save)->completedTime = systemClock-(*save)->comeingTime;
$ Z4 ^' Q, q5 S) r& v2 s1 f(*save)->runningTime = (*memory).p.runningTime;
# `2 A! E; g: K/ x4 [- ]7 Z(*save)->completedTime = systemClock;
! i$ o/ T D( ^+ }$ \4 E+ L*spareMemory = *spareMemory + (*memory).p.askMemory;
7 O/ C& m- W/ v& Vcompute=waitio=change=0;+ f/ r/ Y# N/ ^9 N+ p% d) X/ D
computeLast=waitioLast=changeLast=0;
' w- a4 T' g6 m* u, T0 jif(TimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),i)==1) // 调入一个新进程进入
! Y& t5 F$ f7 \ F4 d{
5 l$ d( { C4 y E* O7 q7 K( oif(i==poi) //占用CPU的进程已经运行完,将时间片分给其他进程
2 K# V* t q" \& u* c{
6 W2 w6 [ F% m7 s1 ?poi++;3 [( t. b; P1 d9 L. s1 T* ]
clockSegment=2000;
5 z& Q5 M o* P) _: z}+ z- Z2 i1 R9 ^# g8 R
}0 U! {, z& {" V/ I3 w
else //没有足够内存调入新进程9 j; y3 c: |% S3 g
{- o; W1 \8 J* T( Z4 M) m
if(i < (*memory).proNum-1)
0 Y* i7 J6 q& g& X/ W6 H{
& P; z. j4 ~! M5 M. }4 C- \ Afor(j=i; j+1<(*memory).proNum; j++)
- Z+ O; s2 d# q w' e; e{9 B# `0 P0 R& N/ I# @
(*memory).p[j].askMemory = (*memory).p[j+1].askMemory;, y5 g) ]+ l( G0 q( S; {
(*memory).p[j].comeingTime = (*memory).p[j+1].comeingTime;7 s$ M: v* N0 Q( z; H4 B: V1 T6 W2 ^
(*memory).p[j].computeNum = (*memory).p[j+1].computeNum;
: e/ z, o+ j9 d' |7 p(*memory).p[j].ioNum = (*memory).p[j+1].ioNum;7 ~# g2 K3 m; [, r# Q: j5 |1 k
(*memory).p[j].processID = (*memory).p[j+1].processID;' i, Z0 B) p% q* y. v; b7 V
(*memory).p[j].flag = (*memory).p[j+1].flag;
) K6 J3 n X+ X5 h# `) S1 ^8 T) w(*memory).p[j].ioTime = (*memory).p[j+1].ioTime;
# t0 H; C/ c+ B% I5 d(*memory).p[j].computeTime = (*memory).p[j+1].computeTime;- }- T a# u- [' t, r
(*memory).p[j].runningTime = (*memory).p[j+1].runningTime;
5 l* x$ ^! {: m. h3 b$ m(*memory).p[j].produceTime = (*memory).p[j+1].produceTime;
# ?8 O z, W9 R' {) T9 I: i% x(*memory).p[j].completedTime = (*memory).p[j+1].completedTime;; \+ n" j# n/ c# ]
for(k=0; k<(*memory).p[j].computeNum; k++)
: ~$ H# j; }0 i" W(*memory).p[j].computeClock[k] = (*memory).p[j+1].computeClock[k];, D# v9 R' n' X. j5 l" d2 n
for(k=0; k<(*memory).p[j].ioNum; k++)& d2 o; {# M5 n" c) j9 _
(*memory).p[j].ioClock[k] = (*memory).p[j+1].ioClock[k];
$ C( I( D s( U9 Q}
4 P. y: X! i% @7 |3 jif(i<poi) O8 b8 ?* H7 N8 R7 O" i
poi--;, t7 N G5 ^. C9 n l
else if(i==poi)
9 e! W H+ x; Q/ ?2 S1 Y2 PclockSegment=2000;$ l3 x1 s' i' b$ n0 R+ W
}$ {7 `* N/ P ?, ?# {
i--;4 e# w x$ z$ ^7 t' t
(*memory).proNum--;1 k" D( E' A: i( a! X
}
; j9 w! S6 @+ Z, L- L, nreturn task_completed;
' C$ E$ B! d5 I0 \# {}
( z- x4 y% R* z' M- b}
6 E2 f1 f" B+ j--clockSegment;8 a) f' Z3 H% M0 ~2 o' U
if(clockSegment<=0)
1 e* `+ y' ^; V+ k{
0 a( @6 J4 b( m& @* }3 apoi=poi+1;6 C. O/ i5 x5 z2 R
if(poi>=(*memory).proNum)5 F- `: b6 N! N0 I3 H5 d1 g
poi=0;5 R! B Q- I" D9 E( a2 l
clockSegment=100;3 D" m$ |, W4 z: v% ? G6 m
}/ m; T7 l0 }% A6 k, Z( i
return task_not_completed;
! b" n. Y1 ^) `$ W6 b9 O} D6 e5 S4 ~; b( h
int TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos)
7 T Q4 ?+ ^; k1 t* n{
; @, q/ Y- G- m$ nint i=0,j=0,k=0,flag=0,translation=0;
5 H8 n$ v4 J: v6 e( n% sfor(i=0; i<(*storage).proNum; i++)
) \$ b5 r4 C1 n! y9 U0 L3 R{
, w+ `( j) o, J7 f6 T0 ]- iif((*storage).p.comeingTime>MAX_COMING_TIME); y1 _# h9 r& F6 L
MAX_COMING_TIME = (*storage).p.comeingTime;" @1 J( ^0 F; s& z6 w1 F) F% Z/ v! N
}! m9 y9 J& t; I. m& ~4 @! l, I+ J
if(pos>=0)
+ l! w: M7 S- u' i$ h' U{# F/ i' Q8 Y$ y; p$ Z
for(i=0; i<(*storage).proNum; i++)/ n& q" I+ _2 c: U) r5 ]* O
{4 T: M0 L* u+ a- E3 j e
if((*storage).p.askMemory <= *spareMemory)
: b. A' @/ m) _{- S3 K7 w6 n- \
j=pos;
* I% B5 g6 p$ C0 J; c8 b(*memory).p[j].askMemory = (*storage).p.askMemory;
O1 Q4 g1 g4 e' x(*memory).p[j].comeingTime = (*storage).p.comeingTime;3 z# @4 R* c9 w. I; \! b4 c' j
(*memory).p[j].computeNum = (*storage).p.computeNum;
l# T/ E4 g3 Z' W: x4 }5 u3 D' P' q(*memory).p[j].ioNum = (*storage).p.ioNum;# F3 s& p, T- d m
(*memory).p[j].processID = (*storage).p.processID;
7 T3 a3 p! I, t* o# m(*memory).p[j].flag = (*storage).p.flag;
5 u$ {; V# E. g- h! T(*memory).p[j].ioTime = (*storage).p.ioTime;( @/ W; m8 [8 f- l/ W! f
(*memory).p[j].computeTime = (*storage).p.computeTime;
0 q2 l5 O6 f0 P6 A8 T, ^* X- B(*memory).p[j].runningTime = systemClock;% f4 F" F1 s- [5 U7 F
(*memory).p[j].produceTime = (*storage).p.produceTime;
$ F. B r1 H4 g$ {* S% ]* ufor(k=0; k<(*memory).p[j].ioNum; k++)# o( r7 Z% b5 _' A7 t
(*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];* w; K t* l& `3 z: c, r" H2 Y( X
for(k=0; k<(*memory).p[j].computeNum; k++)
4 B$ n7 I+ q& n! J8 J8 K s(*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];! o2 r4 |6 c7 e" u, x% d
*spareMemory = *spareMemory - (*memory).p[j].askMemory;
5 s0 n! O9 s. Fproduce_one_task(storage,i,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程
9 L+ T* @* ~5 a1 K& b. [MAX_COMING_TIME = (*storage).p.comeingTime;# E/ J: E$ C2 O# O5 [4 P
translation=1;
# r5 @" B* A& S) m3 Zbreak;
^6 @+ _! L$ g4 h. i+ f3 h2 g# F}3 t' q6 K$ ?1 d @& L. I
}
- _$ @5 t8 Y' o; V}
. I! T$ a, q3 P, u% `9 ~else& S7 U# A, W1 H# e. ^2 S5 C
{
; F% c/ r; J6 y1 f# gwhile(1)
, u! v# b1 x5 N. c _{8 L: ]. z; U: Q# g2 F* q6 J
flag=0;
: I: v$ k4 \4 u5 W0 N7 y: b5 Ffor(i=0; i<(*storage).proNum; i++)# o e% Q6 q8 Q, j2 c$ ^/ e
{
' X# v( f0 n8 x5 }. b$ Lif((*storage).p.askMemory <= *spareMemory)
! ]8 o. n" g Y2 O1 X2 e8 F1 {{" k; T9 Y2 }% ]" ?3 d
j=(*memory).proNum;4 `: x' E5 E3 s2 f) j
(*memory).p[j].askMemory = (*storage).p.askMemory;
6 J# k4 t3 B$ W(*memory).p[j].comeingTime = (*storage).p.comeingTime;
; x- Y' Y; k3 T, C(*memory).p[j].computeNum = (*storage).p.computeNum;+ D/ p6 @* n" l$ j( O
(*memory).p[j].ioNum = (*storage).p.ioNum;
4 Z) Z' Q T; H% F(*memory).p[j].processID = (*storage).p.processID;" k) `) W1 }5 T5 F5 s) f* h
(*memory).p[j].flag = (*storage).p.flag;. W" j3 G5 B/ K% v e' p
(*memory).p[j].ioTime = (*storage).p.ioTime;
% L( y4 S4 Y4 E; S, M(*memory).p[j].computeTime = (*storage).p.computeTime;8 _% d7 d# I( {( e% E
(*memory).p[j].runningTime = systemClock;* _! J4 e' n1 ]9 g# Y
(*memory).p[j].produceTime = (*storage).p.produceTime;
7 E% ?! e7 z. Q8 Ifor(k=0; k<(*memory).p[j].ioNum; k++)
! l" g8 F" |# m; a(*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];
! d4 _0 d, Y/ Ofor(k=0; k<(*memory).p[j].computeNum; k++)
8 ]1 v! h4 e4 t) H(*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];6 r6 C$ D! W7 d
(*memory).proNum++;$ }! ]; E' r0 u9 o" s g5 J
*spareMemory = *spareMemory - (*memory).p[j].askMemory;, O. D) U$ a& y& a; A) m4 G
produce_one_task(&(*storage),i,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程
# G$ Z1 u) V. B% E6 U- @% eMAX_COMING_TIME = (*storage).p.comeingTime;
- T3 B6 t) A0 P6 L2 p! ?flag=1;
7 v m" F2 P% h* ?3 E+ d! Q8 ztranslation=1;
$ C ]+ X$ Q8 ~- G}+ L: A8 [# Q* h1 |3 r- z' B# @
}
8 S5 y) j( z: g7 g6 y5 Q g* Oif(flag == 0)
0 _4 ^1 n, K1 [' _$ Wbreak;' d6 s8 y q/ Y
}! S; q% U# e4 B7 M
}
8 t( v$ d. ?8 lreturn translation;
, x) W7 o8 ?% D1 y; u7 k0 m8 b6 T}
/ p- ^' d1 ]" M9 j/ k4 ~2 aint FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw)6 Y: w- W; S: }1 f( }6 L
{
" x m% x/ u; m/ ]1 p% Mstatic int compute=0,waitio=0,change=0,flag=0,flagiocpt=0;9 X$ Y, O- E" T
static int computeLast=0,waitioLast=0,changeLast=0;
1 F% R! b8 W0 {( W" _/ {int i=0;4 ]$ y) M0 E! x& e T, K2 b# B
if(draw==1)
- W/ C2 j5 s: v: ^: {{$ f$ o/ C, @* v' r2 m$ o
//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
5 Q, }+ j' n$ ^: \6 U! xdrawPerformance_FIFO(0,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);( q1 M/ S. d* S; V5 x& P
3 N. W* W( r; u0 S! ^+ v# }
9 x& N/ z2 P" a' S! Q9 K
computeLast=compute;
o8 G# ~! a" D% \6 O: O6 i9 owaitioLast=waitio;
$ h: t: h; ]- x! c! P @$ w. LchangeLast=change;
" @; u8 |" b* [; d0 A}- L8 Q4 |: s& G
if(flag==1) 4 p" W, v$ a" }& W6 D
{
( C& l6 H: x% Z% b% aif((*memory).p[0].ioNum>0||(*memory).p[0].computeNum>0) //task is not completed
$ `3 p# P$ p' }6 q3 s{
3 f7 `' c0 M/ r6 S$ M* b% \if(flagiocpt==0) // implement compute" N j! J1 P t' }
{
. Z" E p' R8 di=(*memory).p[0].computeNum;% V* x+ d% c- _* d, B
if(i>0 && (*memory).p[0].computeClock[i-1]>0)4 E9 h( Y6 Z$ x' d
{8 w6 p# [- X% J: Z# p. [7 t. l
if(--((*memory).p[0].computeClock[i-1])<=0)// ome compute tase is completed
1 y- Q n% Q P8 |{2 B1 n; ]4 _6 o- f; s8 P
flagiocpt = 1;6 P' s4 n. `+ V8 _5 C, G( k! K
(*memory).p[0].computeNum--;/ e7 g1 \5 a- t4 D
change += exchange_IO_Compute;0 }7 ]) g/ M! R8 v( L
compute++;
: a3 ~' y. H- T}
" [# R4 B9 @$ E! z5 q w" Qelse8 ]" }; e7 T1 d# F" E3 g, U( e
compute++;
" D5 ?0 T' K( d3 F5 H! q
9 S* v0 t+ u* b: W5 J3 y}6 l0 h9 m3 H S" n5 @$ F* ^; _: o
else. s! C5 o3 A* r* H7 w
flagiocpt = 1;$ n! B8 S* d7 ]8 c
}8 x0 y% q- @) z; y2 j0 g9 O
else //wait io
7 m0 X x+ @! v: X{+ Q; U3 c" C6 I- ?# u
i=(*memory).p[0].ioNum;+ t+ f" S/ K/ p) Y4 y
if(i>0 && (*memory).p[0].ioClock[i-1]>0)2 \" ^1 h6 ?) n) y
{
8 Y: G8 p2 V9 i6 l$ C) k1 C# `5 Iif(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed
( G; |, `/ w; ?{
% n) X2 m* S* Z4 Hflagiocpt = 0;
8 c/ [8 T* k `6 |(*memory).p[0].ioNum--;2 g3 {' D, D% H1 S! q! P# v+ B9 F
change += exchange_IO_Compute;- N, \* y+ j& {) q- L, }* w- P
waitio++;
, Y2 T' _! h! I7 d6 _. z& { X2 `}
2 [7 P$ O, [3 x/ yelse: r" F+ f% O4 ]- k: v5 g
waitio++; }) t9 e) ^2 U9 B
! }) ]( v6 g5 V4 v% T. h5 d}
9 ]1 @! ?3 F( X2 j4 Kelse
: _1 T" B7 s- A3 e9 jflagiocpt = 0;
/ h9 M1 O9 l+ Q}5 O# j# K1 L5 u
}/ c) ^5 w+ V T' ?+ G: d
else //task is completed
% N8 V8 V' r# i4 r! L* k{+ ?$ Z- O: w/ e6 r
(*save) = (PCI*)malloc(sizeof(PCI));
3 v' i. }3 Y3 ?+ z3 t1 }(*save)->next = NULL;8 n( j9 P9 R0 K- K% ~! T2 b
(*save)->processID = (*memory).p[0].processID;: s- b5 i$ I/ v8 f. G& U* h
(*save)->comeingTime = (*memory).p[0].produceTime;" ^0 V5 A5 _+ `* Z" x! H7 b( g8 L
(*save)->askMemory = (*memory).p[0].askMemory;
, y3 h3 o5 ~% k0 e2 I(*save)->compute = compute;
. r% \# r4 P6 M0 m1 U- p- C6 C8 A(*save)->waitio = waitio;
( s9 ]8 m1 h/ T. h(*save)->exchange = change;
4 k7 X2 h/ F# h, u: M7 M' ?(*save)->completedTime = systemClock-(*save)->comeingTime;: Q' u/ Y9 @* V1 J8 y
(*save)->runningTime = (*memory).p[0].runningTime;' d8 G* x3 U9 m/ n) Z9 U
(*save)->completedTime = systemClock;
' o+ [; S% K) L( S# J2 {2 `//*spareMemory = MAX_MEMORY;
3 W$ x4 ^: q& y, c" Bfree((*memory).p[0].ioClock);: j& @, I3 m. c" D) \1 ]
free((*memory).p[0].computeClock);* C, B' c7 z- ?" T ]
free((*memory).p);, [" O7 Q- q3 E( t
flag=0;
- ]1 t) H+ a& `compute=waitio=change=0;8 }6 ?3 c' G! O! _8 H" N2 f
computeLast=waitioLast=changeLast=0;
1 V! Y; [/ O& E9 o9 y, treturn task_completed;
$ G B& {9 d- R4 j}
; D. r( _3 M$ U+ [& |: _}2 {6 E3 ~$ J. }# S5 }0 ?1 h9 r+ C
else % Y, o3 I8 u, K) B! {9 U
{' ^1 M3 S. a+ v# H }
FIFO_storage_to_memory(&(*storage),&(*memory),&(*spareMemory));
5 i9 F: M0 }9 d6 ichange += exchange_process; L. z6 D/ O- X1 B' r5 ~* L1 s
//*spareMemory -= (*memory).p[0].askMemory;' g% \" c7 \$ |* h5 `$ l2 B5 |
flag=1;
2 C! @! F3 h1 T# M, W//showProcessInf(*memory);" z. D& Y. p. V, P0 D
return task_not_completed;: f& @+ H9 k2 e7 j8 z
}6 g" [$ J8 ~9 R% l& r
return task_not_completed; |3 G% r* t2 G( _1 Q
}
1 R7 `4 C0 [; P; @int FIFO_storage_to_memory(processPool *storage,processPool* memory,int * spareMemory)' J0 M3 y7 P1 c% S
{; z: U. _8 @& H7 k2 ^
int i=0,j=0,k=0;
4 D1 ~" |; i) G, {/ A, H7 GMAX_COMING_TIME = (*storage).p[initProcessNum-1].comeingTime;: l3 R# I) z7 c3 ?
(*memory).p = (process*)malloc(initProcessNum*sizeof(process));
4 `9 R/ A% H5 {/ Y" d: gmemory->proNum = 1;
% O3 N t9 @# G/ `2 k0 f; ?for(i=0; i<initProcessNum; i++)
; S* x* _6 i9 z{$ o9 o" _" H: N" f. q) P
if((*storage).p.askMemory <= *spareMemory)9 v, ~/ K! |$ v& y; E: F
{7 e! r7 \$ k7 H O/ n
(*memory).p[0].askMemory = (*storage).p.askMemory; ^: J/ ^( z8 X6 |0 W
(*memory).p[0].comeingTime = (*storage).p.comeingTime;
/ c2 S6 Z! N0 h/ G( x: ~3 Z; u(*memory).p[0].computeNum = (*storage).p.computeNum;
2 e9 U# F; j0 K$ e. G(*memory).p[0].ioNum = (*storage).p.ioNum;0 t) b) q/ ?6 f1 q4 I5 J
(*memory).p[0].processID = (*storage).p.processID;
* d5 K, Y# w# v; n+ d(*memory).p[0].flag = (*storage).p.flag;4 ^/ Q1 y h K$ M; ^1 k
(*memory).p[0].ioTime = (*storage).p.ioTime;5 ~$ }, Q" v0 t1 m! y- K
(*memory).p[0].computeTime = (*storage).p.computeTime;8 c% [9 @) Z; A# q9 |
(*memory).p[0].produceTime = (*storage).p.produceTime;
' h$ F4 Y& r2 V- Y8 l" {(*memory).p[0].runningTime = systemClock;+ l! v9 f$ |/ r+ r% ~
(*memory).p[0].computeClock = (int*)malloc((*memory).p[0].computeNum*sizeof(int));
( O7 J$ g9 j& x- e* d: u% h(*memory).p[0].ioClock = (int*)malloc((*memory).p[0].ioNum*sizeof(int));
( ^, G0 L* H f0 @, Ifor(k=0; k<(*memory).p[0].ioNum; k++)
3 b9 q7 ]' m! L5 W4 x( d(*memory).p[0].ioClock[k] = (*storage).p.ioClock[k];7 d5 U! z7 @. L/ T
for(k=0; k<(*memory).p[0].computeNum; k++)/ K: L5 s$ u5 T4 M$ ] Z0 G, g' c
(*memory).p[0].computeClock[k] = (*storage).p.computeClock[k];2 ?1 n1 A$ r$ Q2 ]; m) e% w
break;
. F3 H4 R: k0 K: o$ X}# t' Z) }7 `* s( M! \ M
}
9 L! B3 S( N% S( v& O1 Dif(i<initProcessNum) //调用一个作业进入内存后,并再生成一个作业等待调入! `% v) E' x4 v2 i! H* ^6 ^
{( @+ c* V* |+ u' i- l; m9 f/ M
produce_one_task(storage,i,ID_FIFO++);0 E e- k% G3 Q& I: L* ]8 \
MAX_COMING_TIME = (*storage).p.comeingTime;
1 x: V- h0 K. H2 E/ M! ?3 I4 b2 z$ Ksort_by_comingtime(storage,i);+ y/ V D' b$ }* J( H
}
% g1 `3 H1 S0 }" c; i- z, Preturn 0;
$ H. l1 N" Q% V, e}% V0 s5 t1 e; M, Q/ t
int sort_by_comingtime(processPool * p,int pos)# S) V q1 B7 r
{
: m2 Z5 F1 M( u( w/ Eint i=0,j=0;9 q1 c8 C, n9 Z' E
process temp;2 X. A+ M/ M' K ]9 @
if(pos<0)* g# [& W" ~1 G
{
7 G2 Y* a8 ?/ @2 }% k% x( yfor(i=0; i<initProcessNum; i++)
0 v7 z9 M* O7 u- p2 G3 nfor(j=0; j+1<initProcessNum-i; j++)) H- Z( Z$ y0 w# }. s- T' A
{$ B W2 ^- ^& V: o" \( _7 z/ \. ^/ U
if((*p).p[j].comeingTime>(*p).p[j+1].comeingTime)3 Q7 O! Y# i: o0 J/ Y7 p7 Z+ C
{9 ~/ v3 G/ J3 _+ o2 k1 v' T( x
temp = (*p).p[j];
; a# ~ x, p- d1 j6 `3 ]0 |0 I) c* J1 ~(*p).p[j] = (*p).p[j+1];
* P& A7 N" R9 U* |(*p).p[j+1] = temp;, d \! `0 {/ L: B
}
: V" M5 g1 r9 X7 a6 i& u: |}
% t% y* h! m. w! j# m}3 @/ H K. ~' c1 p w$ q
else if(pos<initProcessNum)
3 X: |% }2 h2 P{
- X' _1 @- C2 H4 y* S0 k" S/ ~0 _for(i=pos-1; i>=0 && (*p).p.comeingTime > (*p).p[i+1].comeingTime; i--)
2 V& Y4 S9 r# I1 e+ ^6 B{
+ {; Y: c; S6 Qtemp = (*p).p;4 @% S4 n; t, c, U/ L
(*p).p = (*p).p[i+1];
) ]4 V* W- S( B. ?0 j(*p).p[i+1] = temp;
. U2 F9 a/ \5 h! D$ y}, y: m; ]8 D$ g& E' ?0 |) L
for(i=pos+1; i<initProcessNum && (*p).p[i-1].comeingTime > (*p).p.comeingTime; i++)4 A( n6 ?+ W6 c1 q& ]$ |5 c9 l
{. c# _; U3 X1 i. P* q% s6 z \
temp = (*p).p[i-1]; H# P+ Q. Z w' N7 j
(*p).p[i-1] = (*p).p;
7 L% i/ v' d# v4 ^% l) s( X(*p).p = temp;( ~# y- A( V' J( S0 u- z, q$ O& _
}
% x1 H6 ~/ l- q6 w}
$ s( {! o0 K0 eelse
0 A, S# ~2 r7 T1 pprintf("position eror\n");+ ]) S& C0 A C( T$ Q
return 0;* G4 \1 V( |2 T2 f- |
}1 V) u; t7 H+ l/ N, O3 M- z. z) c! P
int InitPool(processPool * p)
' m3 A* ^3 v; x; h2 x6 }{, G A* j& q8 v
int i=0;" d9 i4 u0 Y3 I8 u1 r! J) ~; c% ?
(*p).proNum = initProcessNum;7 o( H+ P8 a: O( L( y& r! H1 m1 a
(*p).p = (process*)malloc(initProcessNum*sizeof(process));& T( ]7 R: \. i4 j
for(i=0; i<initProcessNum; i++) //init process information6 s. V% z8 i8 ?/ e, Y
{
7 [1 g9 f) S+ y5 o(*p).p.computeClock = (int*)malloc(initclocknum*sizeof(int));
% O" ^6 R% \/ L9 r/ [5 t(*p).p.ioClock = (int*)malloc(initclocknum*sizeof(int));
8 j5 `" P3 g( qproduce_one_task(&(*p),i,ID_FIFO++);
1 h& G7 x3 r( c7 M: K7 s" c" n& B}
* a& m# h! G6 c# G2 x6 D5 @- ^return 0;. Z1 h# a% h& z" q- ~* f: P, B' S
}2 G- @( s9 p- i/ f8 u( g6 C7 Q
int produce_one_task(processPool * p,int i,int id)6 j1 c; ]0 ?0 i
{2 G* L* z+ B* J! _) l
int time=MAX_COMING_TIME,j=0,totallTime=0;
5 f! e" X! ~0 q0 i% Z. L(*p).p.processID = initProcessID+id;
0 W t) y7 l( ]% s1 h. x( a5 b, V(*p).p.comeingTime = time+rand()%(MAXProcessRunTime/5);( Z5 ]2 k+ A! [* T u
(*p).p.produceTime = systemClock;; ?/ [9 _/ C) E7 {' A9 H
(*p).p.ioNum = rand()%4+20; //IO number setting to 2--5;6 N: c! t1 |& ]% l, @
(*p).p.computeNum = rand()%4+30; //computNum setting to 3--6;
9 A6 o+ Y, r, o# C7 FtotallTime = (*p).p.computeNum + (*p).p.ioNum;/ c- d9 R+ o; c: B
(*p).p.computeTime=0;
% K7 @2 J w5 `. y l+ ?for(j=0; j<(*p).p.computeNum; j++)
' a) N5 q% g1 X# D7 Z{
3 ~2 w! W& j. i: [# q1 f+ `(*p).p.computeClock[j]=rand()%(MAXProcessRunTime/totallTime)+1;1 b; H0 h9 V% Z4 Q/ A8 h6 w
(*p).p.computeTime += (*p).p.computeClock[j];
) ^1 \4 D L9 q/ F$ p' q+ ?}
; ?" f9 d9 S' u4 y3 Z(*p).p.ioTime=0;
0 n0 T) t+ J0 T" _- }7 Kfor(j=0; j<(*p).p.ioNum; j++) |
|