- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566697 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175232
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
8 P# }. C) A/ o7 q; U% q
经典任务调度算法的模拟程序4 q) x m, O; g
本科毕业设计写了一个经典任务调度算法的模拟仿真程序,测试了五种调度算法的运行性能。在程序中虚拟了任务的进程,按照不同调度算法策略从进程池中选取任务执行,在任务执行过程中,保存相关的统计参数,最后对这些参数进行处理,反映各个调度算法的实际运行性能,程序中可以通过修改任务的相关参数改变任务特点,测试不同任务环境情况下,调度算法的性能适应性。程序是通过C语言编写的,为了对运行结果图像化,采用了EasyX的图形库。由于计算机中实的任务调度过程比较复杂,在实验中为了简化程序的实现,在某些方面进行了特殊处理。
$ i3 W4 s/ \+ H1 }
c3 _$ W( s( c/ o编程平台:VC6.0+EasyX图形库环境。, I& N0 d( ]1 o9 f+ I
6 F: e5 u& W. I% k9 t- _
以下截取部分程序运行图::
( G) ^3 r) C0 x/ ?0 s8 Z d+ t' ]# w* Y/ }
源代码:
* O. p- l5 q! S: C+ g! g5 Q% L9 O% K' j" f k' P4 p: S
#include<stdio.h>
8 x& N% f3 I% k" j: [1 Z#include<stdlib.h>, G; H7 f& n% e- ^* x( e' V
#include<easyx.h>: v% [/ w" \2 n3 w+ [4 X: @
#include<time.h>
$ ?7 K/ M! }( l$ O#include<conio.h>( J ]5 P" \8 N2 M; x
#include<graphics.h>
; d9 \5 R9 Z% w: X#define initProcessNum 10
% V. V' Z. O% j, H+ b#define initProcessID 1000- s5 Z1 r4 J. P3 R5 y6 [# K! |
#define MAXProcessRunTime 10000' [- p2 @. S4 {8 P# H* M7 n- u
#define MAX_MEMORY 4000
* s' D( ]& _1 r7 ~% j) o#define exchange_IO_Compute 10
, D5 J4 q( M! `6 U- Z Y- m2 U) E5 N#define exchange_process 25+ P; g/ s1 x/ M
#define task_completed 16 b* T* h% U9 R
#define task_not_completed 0
# A: ~7 u9 N; R6 G1 K( Z ~#define initclocknum 100
' S& N/ Q( o/ Z7 ?9 ?& Eenum condition
, T0 g( T- A' D' g{3 R: ^8 J2 D4 B1 v ^
dead,computing,IO_waiting,ready
/ U% B! E) S- z' o# `+ l, U4 a# j% s};! L0 G4 N/ n6 U2 w, J
struct process
8 _1 g2 S+ ^! w/ t4 C) J{' ~! \9 A7 F8 S: H
int processID;/ c0 {2 d! u' J. `; P. c/ S
int comeingTime; E( N( T0 Z) H" ^
int ioNum;, F6 {/ f, R/ T: W1 E4 }
int computeNum;8 z& O$ e( R9 [, k) X" B$ b
int * ioClock;0 f$ l: w+ h4 Q
int * computeClock;7 B1 \$ z2 Z" r
int ioTime;9 F0 I6 z u E5 D5 ^
int computeTime;8 B/ H& e0 \( `" V9 S
int askMemory;
7 [0 n: T% h' u h$ E6 S2 C6 ncondition flag;
. C. e/ B( J# ?0 ^1 ~: pint produceTime; //生成时间,以下三个数据成员用以计算相关性能8 q' F1 k3 W* r- e' L9 z
int runningTime; //第一次占用CPU的时间" y! A3 s# T, A
int completedTime; //进程完成时的时间: z( s+ B$ N0 q! H; D
};" ~" m& |+ H! y. g
typedef struct processCmpletedInfo //保存完成一个作业的相关信息$ p2 h/ [; h+ {' V5 s- Z
{4 ]5 Y- c* T1 P' W v) f
int processID,comeingTime,askMemory;
3 k9 F* O# m1 r# d+ b0 O, O8 h+ D1 [, _int compute,waitio,exchange,completedTime,runningTime;( R7 n; V" I) Q
processCmpletedInfo * next;0 K5 a. P E/ J; J- g
}PCI;
8 f! M9 B/ Q3 j1 L1 |5 ]0 ustruct processPool
3 J" |; \: w& T6 G: z8 m" K& ~{6 A4 Q' n& a1 f3 s- \
process * p;
% d5 Y8 k9 A. ]6 I7 F( eint proNum;& `! j; D" H: y5 p) D
};
3 A- K5 O5 }* o$ ?8 S, ^" j! Wint 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;# F& R! w% R' R7 X- q# |& {# j
int InitPool(processPool * p);/ v9 M \3 d- o: H7 z
int produce_one_task(processPool * p,int i,int id);
2 S: K6 Y0 \0 [! T1 k# K/ Rint FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw);4 u A E" [1 @7 n- m6 Z ?
int TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);. g8 W2 m9 o( G* {' L/ ~& Q
int TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos);
# P1 {6 t9 G0 oint FIFO_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);
% {8 m' C' m: Z& I& R7 `" ]8 Q3 Uint ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
0 U2 x0 N b1 n" t) c" ^int SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);
0 P; \, m5 O. P8 l/ K! i) nint PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
1 x$ A2 a% [7 H* c* }int Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);
6 L M" r4 d7 g4 o) K8 d: q1 O/ dint High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int disatch);- Y# h. W7 s0 s A/ p; b2 h$ N& @
int High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
8 T) N9 f6 \. |. _, S( `4 D2 X2 e+ J* X; V7 P1 w
- y1 T6 _4 i. @' N5 ^7 ~int sort_by_comingtime(processPool * p,int pos);
) ?7 ]5 A1 n; dint showProcessInf(processPool p);4 m" C' M7 R/ E( y
int drawPerformance_FIFO(int x,int y,int memorry);
- ?5 V* j1 [/ w+ X" Cint drawPerformance_HR(int x,int y,int memorry);( j9 v g0 o4 U2 x
int drawPerformance_PF(int x,int y,int memorry);
+ i* Y! }" p. m5 Y& c! C( |int drawPerformance_TT(int x,int y,int memorry);
$ G+ J! X2 ~6 _$ Z& pint drawPerformance_SJF(int x,int y,int memorry);
8 j7 |! E6 p; ~: z, F# L; w; t- qint MouseListening();
8 y: `0 g" e0 M7 Uint MouseListening2(int *flagShow,int * showTime);
$ ~& i d6 j1 E$ mint showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR);) P( _1 S# T8 F8 B
1 O7 c" X n- `- d
E) {$ _7 ?9 I+ C1 v0 X. a- Xvoid main()
5 p4 o' A# O- Z{
1 @: D( d3 q. G; ^PCI* FIFO_save_head=NULL,** FIFO_pri=NULL,* Timet_save_head=NULL,** Timet_pri=NULL,* SJF_save_head=NULL,** SJF_pri=NULL,
( D2 X4 J" ^' B) P# ]7 u' ~5 V*Priority_save_head=NULL,** Priority_pri=NULL,*HR_save_head=NULL,** HR_pri=NULL,* p;
( k/ \8 k1 _" F4 R( {; K" u, q/ c3 Wint i=0,FIFO_memory=MAX_MEMORY,count=0,Timet_memory=MAX_MEMORY,SJF_memory=MAX_MEMORY,Priority_memory=MAX_MEMORY,HR_memory=MAX_MEMORY,
' D' l7 T5 Q5 C) Y# [8 |flagDraw=0,showTime=100000;
6 [! r( G8 P( ^ |7 BprocessPool FIFO_p, FIFO_mmy,Timeturn_p,Timeturn_mmy,SJF_p,SJF_mmy,Priority_p,Priority_mmy,HR_p,HR_mmy;/ ~* z$ D; ~8 G1 r
FILE *fp=NULL;
+ Z) i2 p+ |+ K" ]& r. d& H//processPool HR_p,HR_mmy;8 {5 G. M/ H; b1 |4 q
! I/ g2 q/ s; Q% Z- a0 t, Q- |6 j$ A) K' }7 x8 Q3 @! F
srand((unsigned)time(0));
6 G0 q/ R# s# bsystemClock=0;
3 r' ^0 Q/ u( M7 H Winitgraph( 1200,650,SHOWCONSOLE );
* N2 k( d- R( e0 Psettextcolor(GREEN);9 W+ L- O2 f8 s$ e0 e2 f7 G
setlinecolor(GREEN);# @, H. u+ G" }/ m
setfillcolor(GREEN);! Z3 x6 p B" V6 _5 M2 {
InitPool(&FIFO_p);; `% g3 G" }; o" H# ^
sort_by_comingtime(&FIFO_p,-1);: m% P6 t) k# [ v
InitPool(&Timeturn_p);- U: i4 P9 E8 [. j
InitPool(&SJF_p);
, j) a6 f8 `! v. r7 P1 hInitPool(&Priority_p);
$ [2 W/ e3 u+ `3 z7 RInitPool(&HR_p);
$ d' j) F7 {7 U6 j8 f% b- D//showRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);
) T- O% j/ R; R//Sleep(10000);* g$ M- J8 E1 S) c5 K: s& g
$ m6 z) p8 s5 l( w/ b9 w3 n
! b/ [1 v5 o. c2 z- B0 U2 h* G, KTimeturn_mmy.p = (process*)malloc(initProcessNum*sizeof(process));8 E3 k' n; o9 g; r8 Z
SJF_mmy.p = (process*)malloc(initProcessNum*sizeof(process));
( h0 V H( W. _9 q6 OPriority_mmy.p = (process*)malloc(initProcessNum*sizeof(process));5 ?2 b2 V3 t, ~: {
HR_mmy.p = (process*)malloc(initProcessNum*sizeof(process));' Z( |; e' f5 H) U a7 m
for(i=0; i<initProcessNum ;i++)
) H3 `* }- D& d, Y- M5 W w' T{& V6 T) ^( l4 a* A, q
Timeturn_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
% N- P3 R$ Y6 ?! N9 S4 J) h' ZTimeturn_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));8 X5 n+ A& i0 k2 p v# C
SJF_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));% D3 }7 m( }* Q* [/ e5 p
SJF_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));/ U% T; U* _+ u) n/ h$ C
Priority_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
+ A1 [; s$ d+ H. \$ P* a. d5 MPriority_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
( J, S! @0 |3 g; NHR_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));8 o- _" }+ G4 \/ r
HR_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
# u' ?2 ?& ^# X2 ^}5 z( M2 \, J- h% c6 n
Timeturn_mmy.proNum = 0;
; ~# i# O0 n7 lTimeTurining_storage_to_memory(&Timeturn_p,&Timeturn_mmy,&Timet_memory,-1);3 X# V- p. x0 j& F- t
SJF_storage_to_memory(&SJF_p,&SJF_mmy,&SJF_memory);
" Z! N$ @& N k' G0 w PPriority_storage_to_memory(&Priority_p,&Priority_mmy,&Priority_memory);: p% a4 ^. s: |/ `
High_response_ratio_s_to_m(&HR_p,&HR_mmy,&HR_memory,0,1);
& G8 d9 x8 E* j//showProcessInf(Timeturn_mmy);7 h+ ~" i0 g; t
FIFO_pri = &FIFO_save_head;" {4 Z7 m& N7 }
Timet_pri = &Timet_save_head;& x# X0 g5 @! [' Q0 G
SJF_pri = &SJF_save_head;9 W' Z0 X5 `8 ~( d# i; v
Priority_pri = &Priority_save_head;
* v; U/ B m) ?/ T5 d3 S. t HR_pri = &HR_save_head;/ i. u, N7 Z" S. \: V; R7 x
setbkcolor(WHITE);; t; c" k$ L' P1 |6 V3 z% j" c: P
while(1)
@) C7 h- f$ R{
+ d4 P" D( S5 |if(MouseListening()==1): D3 J* `+ h( E+ S+ O
flagDraw=1;
5 @" t0 a. x- p2 N" C8 Cif(count==100), k7 A$ N. x9 _& J2 u5 n
{; ^ N/ }% i, m7 r
if(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,1)==task_completed). |+ e- _7 x6 F6 t9 `2 ]
{% T. G+ ]$ u% v* E
FIFO_pri = &((*FIFO_pri)->next);- m4 W- m5 O. J5 {- e+ x" @' s
% [ }4 q* k' `: A3 k1 d, z n//printf("hello");
7 H* ~3 b9 H3 G2 \}
/ s0 C p6 k( ^2 j2 |/ }5 Y q6 Kif(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,1)==task_completed)" N4 K; l; u! A4 K. O+ T+ B+ L
{3 u: \, V1 {. p0 G$ H
Timet_pri = &((*Timet_pri)->next);; y \) D& Y) e8 l6 R$ T: M% v
//printf("hello");
$ F. A0 A' @$ Q& J}
& d, m" k Q+ i+ k) {8 U6 n' qif(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,1)==task_completed)' W7 \" z& Q* M6 F7 j! S& y$ R7 F
{
! H' b3 {6 l* j8 j* \: ~SJF_pri = &((*SJF_pri)->next);8 X6 ^& w5 t F% _
//printf("hello\n");# [* w6 A! t, G( |
}
$ x4 W6 j/ v. Dif(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,1)==task_completed)* m* K4 b8 F9 ^. i5 g/ }
{) Q5 c1 v9 J$ M* Y% C" H5 G7 ^7 U
Priority_pri = &((*Priority_pri)->next);/ n, v {+ P6 S0 O# s6 m" I) [
//printf("hello\n");# x( t& h% g" c" |% @( j8 q
}
x* N; k" A* \) {- Fif(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,1)==task_completed)) Z) S/ r) n# R
{7 X4 g& |2 |+ M. e% `! O5 e/ S( Z
HR_pri = &((*HR_pri)->next);( f+ {5 s1 C. D5 Y4 ]; l ?
//printf("hello");
* T4 ~+ g; W2 a7 a X}
/ |3 r4 [' r8 ^$ tcount=0;
9 w: |# n9 g% o, j% Q4 W) _}- a4 _0 G/ f( w e3 T1 ]
else8 n. H; D5 g4 u
{
0 J5 X/ a6 _) Oif(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,0)==task_completed)
9 S( l8 U6 S0 S- P{# s$ O) |+ H( o, h3 `5 T, F
FIFO_pri = &((*FIFO_pri)->next);+ {- `9 N7 r% I) B
// printf("hello");
( K% t3 K3 ?/ ?% P; N1 u3 E}
" r2 \# `- y; n: h8 _& }+ `if(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,0)==task_completed)
; d8 L4 F5 I: A9 S% w3 V c' T{' \0 S& I) [" u0 ?% o. v
Timet_pri = &((*Timet_pri)->next);5 d" K: _& _& A( d! S* S% @
// printf("hello");
; v. z0 v5 |! Z4 d+ E}
0 t" I/ g4 ^" |3 y/ kif(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,0)==task_completed)
# P3 P8 g9 c& J4 `+ K8 z{ ^4 w1 [& z4 I5 K# b
SJF_pri = &((*SJF_pri)->next);9 p9 Y# x5 Y. ? _. w
// printf("hello\n");7 x4 u5 m2 J. {. H/ U" }
}
& g5 O6 w* H# O6 H0 Vif(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,0)==task_completed)3 U2 o8 C) @7 s& S3 m/ g
{
! W/ E4 r" h% R4 F* E+ r" n aPriority_pri = &((*Priority_pri)->next);
% M, n* y* T$ Z% d8 L& @6 V. O. H//printf("hello\n");' k" `; |0 f y8 y9 i1 z7 }
}
9 h2 ?* i, F) X- A# l/ j/ d; c* }if(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,0)==task_completed)
# a1 f6 r9 ~: B{
+ F8 O& l0 T5 p( z0 H- h3 ~" DHR_pri = &((*HR_pri)->next);
, v% K( j3 ^7 k; @- W$ m//printf("hello");. t0 q2 G) w% g( T% A# r
//Sleep(1000);" l- @$ J% N2 E: \6 f7 u- ~( l
}
- D4 w1 ]" d6 ^& }; Z4 Ccount++;
% _5 A" B: b1 w2 H9 j}; q, ^4 z: i9 f) t; b
if(systemClock==showTime)
, C! x; o0 h( D2 E, M' q{
4 o/ Z8 Z. N9 G: L8 z$ L. K8 j/*PCI * p=FIFO_save_head;
$ t7 k9 H- @# @int i=0;# z# ~8 Z/ O U+ \9 T5 d6 m+ t7 {
for( ;p!=NULL;p=p->next)
' V2 \& J4 z* q8 P2 S{
6 j& C% v9 K2 C" M; lprintf("Id %d\n",p->processID);8 d& l- O$ L- ^1 {6 `$ e- u( Z
printf("comeingtime %d\n",p->comeingTime);0 D+ a* w8 z) G. Y
printf("runningtime %d\n",p->runningTime);
3 e# g* a- W/ @( rprintf("asdmemory %d\n",p->askMemory);% \; ^9 A# o# u' |; W) G
printf("completedtime %d\n",p->completedTime);0 p$ O4 x; `% o/ X% q+ T2 G
printf("compute %d\n",p->compute);9 I" X+ E/ i' _; S! A5 V1 i
printf("exchange %d\n",p->exchange);
( X! ^1 ]2 V: P. m" Zprintf("waitio %d\n",p->waitio);% p$ E9 k9 `: s! x
i++;
6 m$ x" u6 s' L
/ B" ~4 s5 K; v2 g1 S7 B* [
2 z# E" [5 B5 k6 W( z}
* X/ j6 K4 J1 }' ?printf("%d\n",i);*/
. p8 e Q1 \% B, w' a2 B: D- I. oif( (fp = fopen( "data.txt", "a" )) == NULL )- |6 A K( y( Z- B
{
0 K. k! q) K( x6 P, L9 Z7 M0 ^" Zprintf( "The file 'data.txt' was not opened\n" );
5 [5 i! X: @6 ^& B//return 1;5 s/ I9 W/ K3 _& A0 i1 z5 e2 A$ a. h
}2 G) n5 W y4 o% J
else
3 ?/ N8 m" i. X: w* B2 p, q6 T; y{
5 ~! M P) F; T: I" J5 qfprintf(fp,"FCFS \n");
% r1 g2 B. _. z& i6 I" Q5 Dfor(p=FIFO_save_head;p!=NULL;p=p->next)4 L6 a4 B/ m4 f! [! ^; r5 I0 N' n2 Q
fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,: s% B2 A% b2 P! R' J
p->exchange,p->waitio,p->runningTime);$ h; w- K1 Q: U( k3 N
fprintf(fp,"\nTime turn \n");9 _4 O3 v- o( z8 X: o
for(p=Timet_save_head;p!=NULL;p=p->next)
8 a' _% s( _5 l8 j! a& pfprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,7 w6 b/ Y3 ^+ ~8 r% N
p->exchange,p->waitio,p->runningTime);
8 S: s3 ~8 X: F; ^' Vfprintf(fp,"\nShort Job First \n");
" I6 L! A, y! W' L+ h7 z; y( t3 ~( Kfor(p=SJF_save_head;p!=NULL;p=p->next)& c- y; J- p, y! A4 g
fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
\: p3 {5 \ H# y n/ K! X5 Pp->exchange,p->waitio,p->runningTime);
; u' \- h: L Y8 J7 u0 @fprintf(fp,"\nPriority \n");
. j+ q0 G9 w9 w+ f( X# Mfor(p=Priority_save_head;p!=NULL;p=p->next)
3 V1 Y) ? h# }" [- j2 F0 W* z3 Sfprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
" s) g* G0 k2 Q( |- ^p->exchange,p->waitio,p->runningTime);
q* A; h! _3 k- |fprintf(fp,"\nHigh response \n");0 D) @# q4 U, r* }0 ?
for(p=HR_save_head;p!=NULL;p=p->next)
5 [- s" O7 |2 F& q' P5 O# G8 u1 L+ lfprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,1 @7 B( H7 T! @- i/ o. y( F
p->exchange,p->waitio,p->runningTime);
0 p) P, T- \; a) ^" e8 ^( m% Ofclose(fp);
( g# @* n! O+ |! m6 w& z}
) t3 Z$ U9 \% [# I6 z( }) p$ i+ `showRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);. j- |4 Q6 B, ^' U* |1 r2 G4 |) v5 U
MouseListening2(&flagDraw,&showTime);
0 U) u% p9 L" U- R2 c0 s) t6 T}
, u1 D7 o) Q5 L0 G7 ~% N# ZsystemClock++;
0 Y/ A, l5 [# r7 Aif(flagDraw==0)
( j$ f# V$ z4 w Sleep(10);
: j. j1 _4 ^7 z0 h$ h" @: ?}, q3 U% U1 }; t8 e) b
5 G. u% ~: F5 k. a; s7 v; M$ P5 Y8 z0 Z% m% A# U. d$ K/ S( U& I9 z
}0 q& O o: H6 Z% d3 L) l
int showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR)% ~" W7 l1 @+ P" L7 N1 S
{
) H/ A( [2 m- A$ |& ^PCI * p=NULL,* name[5];
' ^" h: [1 @! D: ?& Cint count=0,i=0;
5 \0 `/ Y9 m- }char ch[5][10]={"FCFS","timet","SJF","PR","HR"};$ p% E7 p! C' ]/ |, z. ]# T+ f
double turnover=0,wait=0,c=0,w=0,change=0,pos[4]={0,0,0,0};
& N4 A! _* G: k \9 {struct info% a; i' T' c7 m1 m
{
, L- q4 c* s1 \char name[10];, Z9 y2 [8 j) o, g. `
double throughput,turnover,wait,CPU_rate;
) z( G/ Z8 }5 ~) a}inf[5];3 V" S. n7 [; U+ U4 V
name[0]=FIFO,name[1]=timet,name[2]=SJF,name[3]=PR,name[4]=HR;7 b- M/ C9 P9 M" t9 ~& Q* U; e' [, P
printf("调度算法..........A\n");+ j$ ?6 {8 A ~% I, y
printf("吞吐量............B\n");
R) L! w9 G+ D5 C4 E% i. U9 `8 Xprintf("平均周转时间......C\n");, W. F0 `, Y3 x
printf("等待时间..........D\n");
2 b2 Z/ c0 ?9 `; sprintf("CPU利用率.........E\n");7 v3 }' z$ Z# O* i- s
printf("A\tB\tC\t\tD\t\tE\n");
$ G7 Z" h3 S* h Z- {: O. j r+ _for(i=0;i<5;i++)
3 Q3 y/ |- z' B! u{
# d. X, ^8 @2 Bcount=0,turnover=0,wait=0,c=0,w=0,change=0;
8 K: o4 H! W- B1 e4 q% ~ A& k+ qfor(p=name; p!=NULL; p=p->next)
g2 m+ f/ M- X9 Y/ D" |{
0 \- n( Y/ Q; x6 U5 \- |6 B4 [# Hcount++;
0 G Q3 b. ]7 D3 E, hturnover += p->completedTime - p->comeingTime;
. s+ ?& X7 _( y' G; ]wait += p->runningTime - p->comeingTime;
' d" M7 K( l/ X- p% ^c += p->compute;( P) L+ w2 K7 o. O% \- X" Y
w += p->waitio;
) [: G0 @" u. Rchange += p->exchange;5 @9 f3 |- M0 ~, O _6 S
}! A+ [7 y* P2 f1 x
turnover = turnover/count;" [+ R2 E {: `3 C2 Z
printf("%s\t%d\t%.2f\t\t%.2f\t\t%.2f\n",ch,count,turnover,wait,c/(c+w+change));- L% I. y7 u I. z$ x: v$ b
strcpy(inf.name,ch);
1 J, ^1 o* ?5 s7 Q" Y! h% S5 v" Einf.throughput=count;6 {, Y+ C" u: \/ h
inf.turnover=turnover;! X) S4 m: k* I: N# _, w. P9 w \
inf.wait=wait;
: @7 h& I, [, D: D$ kinf.CPU_rate=c/(c+w+change);
( A5 j* ?1 b$ R8 Y7 n* D}+ T3 h' K* e% @0 j" L
//画图# M. F( ^7 k( c2 `2 p7 Z$ y2 F
//cleardevice();) v, A3 l7 i1 `* S/ l5 e
line(0,600,1200,600);: s/ _) y1 C6 ~) z0 r, f
line(10,600,10,200);
5 f) p' Y) a ?$ n( Qline(10,200,5,205);
5 u4 F i& D0 u9 Fline(10,200,15,205);9 @4 c8 a {6 |0 ^2 N
line(310,600,310,200);
( ~9 Q( u; K3 X% ]$ E8 o2 U# I* Cline(310,200,305,205);$ s( ?) l; g7 B' T# l. u
line(310,200,315,205);/ P3 m! U. q5 `
line(610,600,610,200);1 _& s9 N# K: S! V
line(610,200,605,205);, Q9 f7 f% u9 C* K @$ O
line(610,200,615,205);
) K) g6 v4 q9 z$ \line(910,600,910,200);+ C0 m {1 w! J3 h1 a5 A- }
line(910,200,905,205);
" |( h" p1 n* xline(910,200,915,205);//最高的长度400,宽度均为40) u3 x5 |. P: `3 x9 D: s3 @
for(i=0;i<5;i++). p% h9 P7 i! F( o
{
9 S% \! D2 m- u2 f% }; P, Uif(inf.throughput>pos[0])
2 E! C1 _: h) D. Lpos[0]=inf.throughput;
( N" q8 n4 c6 ?7 m$ Yif(inf.turnover>pos[1]). A4 V& }; I7 m! l+ D/ o
pos[1]=inf.turnover;2 F3 a5 s9 Y1 \! M5 q
if(inf.wait>pos[2])9 E8 P a7 e3 i# `8 {8 ]- x
pos[2]=inf.wait;8 c9 U/ q' B. Q) V7 [
if(inf.CPU_rate>pos[3])! p& q# g% ?7 @9 ~6 }/ x1 \
pos[3]=inf.CPU_rate;
" d3 k# {6 v1 G- F! ^8 E9 }' E}
9 j3 c6 l3 w9 y: C/ rsettextstyle(30, 15, _T("楷体"));8 M) @- z T4 y- ~" f
for(i=0;i<5;i++): x7 q5 g7 {: ]0 a% l& R
{1 O% V# }* j8 f& n, o
switch (i)
8 F8 B4 J4 u% K. w* J7 w) g9 a! @{
" o) R) O7 h% ?0 h3 _- Ycase 0:7 O ?/ M6 M" w9 p, k
setfillcolor(BLUE);
/ K# j& O1 S. p& [4 E% ~fillrectangle(100,50,150,100);
- H/ b! ]: v n. N! @. K1 k4 x) touttextxy(160,50,"FCFS");
6 ^; { e2 k9 W+ V5 Z+ R. x1 bbreak;- O1 c1 q7 R) e( L
case 1:
: v/ I w y( J+ `* _% O; s' y* Csetfillcolor(RED);# S/ N9 D% F/ c* l( N! l& X. b I
fillrectangle(250,50,300,100);* C# i# y2 A! B
outtextxy(310,50,"timeTurn");
5 p# s# }6 B. ubreak;
, K; L, q( ]# O% S5 Vcase 2:9 K* O$ E5 `5 N- Q' i$ n% d
setfillcolor(YELLOW);
0 U9 V" d: X2 Z6 Tfillrectangle(450,50,500,100);
- Y+ {* t2 g2 Vouttextxy(510,50,"SJf");2 m$ O( `4 A- d3 f
break;
! @' s- {. ?9 N" F" ycase 3:
- }/ ~: ?9 L4 Bsetfillcolor(BROWN);9 Y: t2 F+ r) U) t' ?* a
fillrectangle(580,50,630,100);" I3 E5 F" K3 i- O
outtextxy(640,50,"PR");
8 r# Q- W5 ]1 }/ s( E+ ]' U0 obreak;3 n3 T! r' z9 I) x2 G8 m
case 4:
4 z0 h7 y/ ~& c$ R; Y1 p* w1 U7 csetfillcolor(GREEN);
* z- }$ Y1 U1 E5 v3 E2 {fillrectangle(690,50,740,100);. C) `' F- ^4 L- R) X
outtextxy(750,50,"HR");) I% A6 r3 M9 H
break;% ^" `# k' k ~+ }: W6 ?
}
m7 f7 `, g$ @0 ]$ hfillrectangle(50+i*40,600-(int)(inf.throughput*400/pos[0]),90+i*40,600);
. j) S$ o" _ u/ {2 R$ afillrectangle(350+i*40,600-(int)(inf.turnover*400/pos[1]),390+i*40,600);5 k/ i5 s0 |! z4 h; i3 r) b% V7 z( l
fillrectangle(650+i*40,600-(int)(inf.wait*400/pos[2]),690+i*40,600);
/ c& J3 u M$ `$ M- ~fillrectangle(950+i*40,600-(int)(inf.CPU_rate*400/pos[3]),990+i*40,600);
$ q* u. @2 f$ T/ {1 _
8 m0 ?* t0 n P- h2 }( I& J! {5 I2 R
}0 s$ I. h* N* P! D/ R) p
outtextxy(100,150,"吞吐量");) s1 C: F/ f" v: T! g5 A! s1 S
outtextxy(350,150,"平均周转时间");
5 }' z# E& F5 `$ Q7 \outtextxy(650,150,"平均等待时间");
8 b! u6 E6 |9 Z" Kouttextxy(950,150,"CPU利用率");& N6 \ ]+ e( K+ F" \
return 0;* |9 z/ D5 _8 c0 L( V
}
5 p. R" ?/ B2 t- I& O/ Sint MouseListening()
) D' Q D3 D3 \* T{% d; A, ~. S( |. Y' q
MOUSEMSG p;
7 N7 ~# E$ L8 a+ o9 C& Z% _if(MouseHit())1 w' A& J- E$ `% s" E3 e, m
{
+ D3 {8 M1 U8 T8 r) o& y* m* Gp=GetMouseMsg();
- p+ I. o% t! e r, v( P( }4 xif(p.mkLButton==true)2 R' Z; K S! e0 _
{& z' A( g1 `# q
if(p.x>0 && p.y>0 && p.x<400 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)7 c( C U* f6 N4 `) t7 E. U" \
FLAG_FIFO = 1;
5 ~# x7 I( w3 w. H- f% Celse if(p.x>400 && p.y>0 && p.x<800 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
) l# a7 l, V& b! E' `FLAG_TT = 1;
8 ?* Z2 J- \* [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)% x; y0 \ |" C$ k% j5 F
FLAG_PF = 1;6 Z& w4 Y4 }- |8 ?6 L3 a! l
else if(p.x>0 && p.y>325 && p.x<400 && p.y<650 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)8 J$ v6 Z7 V3 @. h5 |
FLAG_SJF = 1;
* m. [' s6 ]9 ~, `1 ?7 pelse if(p.x>400 && p.y>325 && p.x<800 && p.y<650 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
/ g- r( k" I9 N: o7 F3 k, [FLAG_HR=1;
4 ^* f' Z C. I0 n: M0 f! Nelse if(FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO >0)
7 w0 l9 _% j& W. g6 x" R{' n3 a5 Y& m3 T- }+ q" \: w6 j
FLAG_HR=FLAG_SJF=FLAG_PF=FLAG_TT=FLAG_FIFO=0;$ e" D1 @ n; v" @. X5 R) V6 F
clearrectangle(800,325,1200,650);
* N" h! u; g/ c0 c+ B7 v}6 L% X# A- n+ t! _, y% m+ H
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 )
# K8 v3 f1 O, a{! m. j7 K( L" t6 a% d0 u9 F
FLAG_show=0;
& x/ ]3 H/ ^8 e4 T7 }+ ^+ ~6 Xcleardevice();
+ s. g& M0 j' S# F) Sreturn 1;6 O7 ^) N! L0 p2 B7 l( R
}9 A0 v8 r* W" H- ~7 q+ D6 q) f
}
' [; E. r+ s# N8 a7 P) X7 G}
% |5 e! G& l- t) Kreturn 0;0 N, C; |2 \ N: ~4 o& C
}
- E& a) `5 N2 U& x$ l' D) ]int MouseListening2(int *flagShow,int * showTime)
- z- ~0 L+ s1 L a{( K; ]' T) \; o/ |% E2 i& Q) A
MOUSEMSG p;
. }, u# R" ~0 Q5 H) @rectangle(1150,0,1200,50);
4 g0 |4 ]1 B$ m" louttextxy(1160,10,"X");
5 C8 {( v. A8 L8 gwhile(1)
, F! Z. d% ?. N( M0 R! J2 a{
( p6 M$ @) W7 C* Cif(MouseHit())
" v$ d3 b: I5 ]; o{) ]* s! w3 @# C1 V( v7 Q
p=GetMouseMsg();
/ Z; O- c$ M+ Iif(p.mkLButton==true)1 ^' c5 i" z2 i
{2 W8 ~3 v; B/ ~4 M, ?* v, Z
if(p.x>1150 && p.y>0 && p.x<1200 && p.y<50 )% ^0 U% `6 w# A" d g9 j2 q
{
7 C, D& I$ L3 {7 ?" Z(*flagShow) = 0;
, O* F3 M' [9 t v m1 k- B(*showTime) += (*showTime);
% A/ v5 U5 h+ G$ LFLAG_show=1;' M3 m8 t/ S0 @: z k1 [: `" T" R
break;2 A9 p/ l5 H3 v# ~0 D9 I5 M
}
9 _4 {* Y0 c) ~( e G* [3 t/ J* p/ A8 @
}5 w1 w3 @; b; @
}1 F! X0 ?) z& v& u
Sleep(20);# j N- X+ }0 ^, P# y
}
. R: |' t" Y6 n$ W% c2 U& E1 [% ocleardevice();, h5 P( A% A/ l
return 0;+ Q( Q+ C* e4 I! C% j" `7 g! S
}% H# w- V5 g$ v. B& x
int drawPerformance_FIFO(int x,int y,int memorry,int com,int wai,int cha)
" J- B9 E- t) g# N* _. m7 Z3 m* w{
1 g; v" e( B9 Y( K- |$ S, estatic int info[11][3],num=0;
' H" f2 j8 z) k; F( Cint i=0,j=0,pos[10][3][2];5 {. q9 f, l& u
float temp,t;- z/ \8 L' I9 J% Y5 J$ a! N1 r# P
//画按钮,不属于FIFO图的范围8 W! Z$ A2 \9 g; L" \ F
if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0 && FLAG_show==1)8 Q1 M+ A7 }2 F1 f B, F' Z) `
{) {; _8 D# B1 B1 M0 ?: N- N$ ^& \
settextstyle(30, 15, _T("楷体"));7 @1 a1 {2 d/ _) ~% t
rectangle(890,455,1110,510);+ w" m( I6 |$ a
rectangle(900,465,1100,500);- t+ H' L1 J$ M: W
outtextxy(910,468,"查看运行结果");% R# x6 v! _5 s7 f- x7 o9 d5 j
}
9 {1 C6 @4 h" z//结束画按钮
* l8 q' [* d( Q' \info[num][0] = com;
. g6 t' G# s) q9 finfo[num][1] = wai;
7 K1 x/ ?# J& S/ r; l. R! _info[num++][2] = cha;
& u8 M7 q- k2 X/ a- z4 lif(num>10) //存储10个点
* F/ C4 }; I* k{5 t; G7 [ \) _4 k( G, G
for(i=0 ;i<10;i++)
; y; M' `" {) F i{
p; H, x w+ _( ^% Kinfo[0] = info[i+1][0];
: J/ v2 n4 O# T5 q dinfo[1] = info[i+1][1];4 J# t' L D0 w( b% _" |/ s
info[2] = info[i+1][2];, `+ k* E+ e! P
}7 }9 \1 W* B/ @. v+ S2 f
num--;
* z; m9 q) A, s2 s}' Z( [4 P1 ]9 N" u* n% L$ a7 \, w" S
if(FLAG_show==0)
% Y4 D- ^. h6 Wreturn 0;7 g6 h7 m$ P. z" T* v' J) ]& c
for(i=0; i<num; i++)- R" t6 t: j# F: j$ M7 l
{
# J! s: Q) p! [& q1 ~1 O, M" |: o+ Lt = (float)info[0];! A5 V9 _% A+ \
temp = (t/101)*90;
5 A/ h- f5 q7 F2 A, A& }* apos[0][0] = (10-num+i)*25+x+100; m3 M2 D; c. D0 X. J
pos[0][1] = y+110-(int)temp;! D$ j+ V$ y- v: F1 Q7 F; ^
t = (float)info[1];
/ n- C+ C; K0 _: ?- a( U2 itemp = (t/101)*90;
) b% x( `- j5 R; ipos[1][0] = (10-num+i)*25+x+100;8 T5 ~+ b; w* B. {4 s8 O
pos[1][1] = y+210-(int)temp;' r6 u2 a$ X* G- r8 T8 Q& |0 L7 R+ |. X
t = (float)info[2];3 G% \9 T' P! S& } H6 i" L
temp = (t/101)*90;" F8 h6 E6 {# o X1 x4 y' r6 n1 B
pos[2][0] = (10-num+i)*25+x+100;8 u- {4 |/ c) x& `. t" S$ J0 p! h
pos[2][1] = y+310-(int)temp;; `& |" X1 p9 Q0 u7 O- ^+ `
}( k0 S: ^& `: ~7 b$ V
if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
1 F& e& c- W( H+ B: r8 ^. p{
. C% x4 b" A: jclearrectangle(x,y,x+400,y+315);+ Q" \. ~( X+ h [ Z( n# ?% H
settextstyle(20, 10, _T("楷体"));$ K# b$ P( g$ y$ v8 l7 h! y
rectangle(x,y,x+400,y+325); [0 ^2 Q$ y) O/ q* D. ]# V
outtextxy(x+40,y+10,"CPU"); //画柱状图
' _9 @+ i9 q( B' k1 t7 m8 \outtextxy(x+45,y+10+100,"IO");- Q9 y3 F# [1 l7 t. p
outtextxy(x+40-15,y+10+200,"change");
* o( i2 u$ {& F8 x) x. N0 Zrectangle(x+35,y+30,x+75,y+110);
4 Q" P |( C% i T) P! Frectangle(x+35,y+130,x+75,y+210);
7 A( p0 d4 L: F9 |rectangle(x+35,y+230,x+75,y+310);6 r- `8 U" u, `5 b* h+ B) ~/ T
outtextxy(x+180,y+310,"FCFS");
* d8 B$ x' w9 R0 ?: P6 E. rt = (float)com;6 x7 @0 Q( a2 s: H' `
temp=(t/101)*80;9 c, `+ I& s5 y6 E8 T0 I L
fillrectangle(x+35,y+110-(int)temp,x+75,y+110); j6 u( v& u. Q6 X. L
t = (float)wai;9 v) k6 b7 s! n; k
temp=(t/101)*80;9 w9 v0 p* ^2 j* s: j4 g2 c- i, R" A
fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
2 y% i1 |7 q- N$ jt = (float)cha;% |' P9 z/ C* M0 D# i
temp=(t/101)*80;
[2 B1 Q- b8 i4 ^; ~fillrectangle(x+35,y+310-(int)temp,x+75,y+310);! a3 i1 F& U4 A+ l! @/ f: b! @
for(i=0; i<3; i++) //画坐标 high=90,length=2507 L4 I* _ \: E% q: n" i0 e
{
$ _/ s# J0 h' \3 C, aline(x+100,y+110+100*i,x+350,y+110+100*i);
- Y) s) B( M3 Z5 z! Q3 C @- G$ Nline(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
$ [+ j9 l5 }+ aline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);* O7 W4 b' ^% T+ Z" x$ h
# u/ ^- n. }. lline(x+100,y+110+100*i,x+100,y+20+100*i);! f8 v2 `3 X6 c8 @
line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
5 F; }+ Y) q3 F, P0 lline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);3 s7 T6 u8 z$ m6 z8 e* p
for(j=0;j<num-1;j++)4 r) h" X/ o5 y- A) H
{
; b$ O/ r- \9 }. Uline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);, e" O2 c( @+ a: L* o3 q4 C6 @. R, ~
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);- C& Y3 `: `( Z9 Z- \- g* Z5 h
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
/ k4 d9 I" Z7 C* e: \( T}
1 `/ r1 |) w6 J, a7 O& \3 R}2 N) F. f* z5 D [4 V# n
}
/ G$ d9 F# S! Melse if(FLAG_FIFO==1)
9 j' Q* W. Q: f9 U. e{
; b: e- z* N- Xx=0,y=0;
V; x# [/ C" O9 M' ~+ Nfor(i=0; i<num; i++)
0 p1 O( x: o0 P3 [: z{
+ \5 T) T8 g v& g ht = (float)info[0];$ w$ _3 e! \' s
temp = (t/101)*180;
: v7 r0 ?3 x, r5 v: M8 Fpos[0][0] = (10-num+i)*50+x+650;5 d" S4 o- K+ z) R) Q \; R
pos[0][1] = y+210-(int)temp;3 V' {/ k% o& q5 N5 |
t = (float)info[1];0 `! k2 U( A* Y2 `4 [6 ?$ u! f
temp = (t/101)*180;1 T" e& M% x4 L0 U; `
pos[1][0] = (10-num+i)*50+x+650;$ Y3 \+ t/ f% `4 i6 ~/ ~5 I4 f( i
pos[1][1] = y+420-(int)temp;
; z' ]' D4 i& J* y9 p0 Lt = (float)info[2];! e# [% |; ?' t
temp = (float)(t/101)*180;
+ h' J: S" y) ?( ?2 V& g+ }3 h5 w/ F( zpos[2][0] = (10-num+i)*50+x+650; X5 l6 T- s% n3 @
pos[2][1] = y+630-(int)temp;2 F. ^& x- S6 p, @0 x, S9 y r
}
3 o! K/ R( Z! T, }2 uclearrectangle(x,y,x+1200,y+650);
4 E3 W9 Q2 E- n: @settextstyle(40, 20, _T("楷体"));
( q/ x& Z; R* J" c0 M( b6 \outtextxy(x+50,y+50,"FCFS");8 W1 ]2 u$ z; e( f# A" r: l/ N& ^, h
outtextxy(x+280,y+20,"CPU"); //画柱状图
' s& |% m ?7 touttextxy(x+285,y+20+200,"IO");& ]% v9 i% Z' J- ?3 b9 F
outtextxy(x+250,y+20+400,"change");
+ d, N0 a3 j$ Q: ~( R$ hrectangle(x+270,y+65,x+330,y+215);
4 g9 Q! S! ~0 i* D% z. orectangle(x+270,y+265,x+330,y+415);
( H* U6 `' I$ @8 b+ O. ~7 {( trectangle(x+270,y+465,x+330,y+615);
4 j! {5 l8 {3 C1 R# p- @ [outtextxy(x+290,y+620,"TT");: m5 k+ H; @2 I; e
t = (float)com;$ k, Z' T$ N6 s7 ~
temp=(t/101)*150;
& V* |! c# A( N7 x; Bfillrectangle(x+270,y+215-(int)temp,x+330,y+215);, F$ {2 |3 e0 i, g1 n e
t = (float)wai;
1 L: H# d c/ Y5 `3 ttemp=(t/101)*150;
0 f4 H) n6 j) u" |8 ?/ gfillrectangle(x+270,y+415-(int)temp,x+330,y+415);4 M( S& W) H+ g y- z N
t = (float)cha;
- D" t3 C7 }+ N: z! E0 C! X8 mtemp=(t/101)*150;% h* ~" ~! |9 O" A
fillrectangle(x+270,y+615-(int)temp,x+330,y+615);
8 v' f' P7 N# D( u: Y' W* W4 Vfor(i=0; i<3; i++) //画坐标 high=90,length=250
% t1 o3 I! |6 A: v# C{
( [0 q7 s' R8 H" cline(x+650,y+210+210*i,x+1150,y+210+210*i);8 k0 X: K4 }; a' I
line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);& L( R. V- ]7 m V( H J8 \
line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
# Q3 K% b# \- J6 j) q
6 x% c _+ p7 v' ~2 X9 c4 W7 ^line(x+650,y+210+210*i,x+650,y+20+210*i);) w" H9 Z' ^7 p: R: o1 r# J0 `7 Z
line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
8 M4 `/ X$ ~' [5 `9 lline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
6 Z- g. e3 Q' u, [7 kfor(j=0;j<num-1;j++)
1 d1 w+ C+ G2 E. v/ B9 e{6 |! e3 D1 ~/ ]2 I- b' o$ ^& l" q
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);' A4 ~1 `2 w" ^! p
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
* J8 [) U3 s; @9 X9 N' k! A- M7 qline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
4 [ J$ i( m3 J* ^7 O4 S+ f}# a* {' y- q" U4 S& C1 T; u$ D0 R
}
* o$ e! V! I9 K9 D}
9 e+ d. p% R, b$ e# C5 z6 Y1 I: B
$ M6 o" Y7 d( ` P
: ?0 ]4 [. J7 z- rreturn 0;
5 C u$ `" | R% Z}
6 Y- f% U+ r( u9 Y, t, r0 V: V5 ]int drawPerformance_HR(int x,int y,int memorry,int com,int wai,int cha)/ y) ?, h- e" v/ \5 P% J" M
{
+ |& c3 \1 c1 y, g/ B4 `8 q: Astatic int info[11][3],num=0;
A* v8 g6 V! ~4 ^, p# gint i=0,j=0,pos[10][3][2];
) x1 R0 J ?" m0 Pfloat temp,t;
- s0 `9 o0 f, ^info[num][0] = com;; V5 C$ q6 t! r% {- V$ G: `
info[num][1] = wai;
, f' w; K3 M0 Vinfo[num++][2] = cha; `2 x- Y% c8 w2 U. t4 l4 z+ V
if(num>10) //存储10个点
4 i7 A9 ]9 z/ I3 e# K: o{' E! U& {; B% F: X0 B9 |
for(i=0 ;i<10;i++)9 F5 B4 `- m, g; Q5 P
{7 b1 ~# X/ |2 L$ ~. c, ^4 U0 D8 a
info[0] = info[i+1][0];
/ D0 F0 z8 P0 |* O/ Rinfo[1] = info[i+1][1];. R& K# w* ?6 T7 D2 s
info[2] = info[i+1][2];
, z. O' G1 b2 x$ U}
$ t+ z' A8 x& w% j/ ?num--;
; x2 Y* l4 c: n}6 t+ J; l/ W; z9 _% Q% v9 w7 B
if(FLAG_show==0)& Y$ A. O4 h1 J3 D
return 0;5 i. N# |- R; \: K ]
for(i=0; i<num; i++)
+ ^! f8 y2 \' U; k{
8 U6 }2 J) d/ g; P+ [0 T7 f' X; r$ ot = (float)info[0];
0 h/ \) v3 K1 h1 I, h3 a0 K9 j! wtemp = (t/101)*90;
4 @" E& }; G: B6 s4 z8 |2 U, p; tpos[0][0] = (10-num+i)*25+x+100;
+ n+ n: B: c, W9 S9 F7 [# z5 N4 fpos[0][1] = y+110-(int)temp;
, f4 W$ j% T4 ^3 ?" Nt = (float)info[1];3 [' A; k; Q: X
temp = (t/101)*90;$ T T5 x; I8 y0 \; n
pos[1][0] = (10-num+i)*25+x+100;3 \5 S- C* y8 Q' d7 P
pos[1][1] = y+210-(int)temp;( x5 @- }. @! u
t = (float)info[2];
5 B& J6 q3 ~; W( d: @! ^4 ^temp = (float)(t/101)*90;
& K! s4 m6 C5 W* u: ?pos[2][0] = (10-num+i)*25+x+100;
* c& L* w+ q! u; P- d7 S9 `( m# S: b4 Ypos[2][1] = y+310-(int)temp;6 u% m8 W4 `/ R! M; m% U
}
4 p. ^0 f* F$ f, Y. z0 f1 \if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)% d8 X- x J" n F* O% z
{
/ O0 V) T( G5 p; M0 Z6 @clearrectangle(x,y,x+400,y+315);
+ G7 H( D; v/ R" q9 @settextstyle(20, 10, _T("楷体"));& T9 y" e! h3 i0 x+ p& d/ x
rectangle(x,y,x+400,y+325);9 T. c8 U4 U2 Z8 j) K
outtextxy(x+40,y+10,"CPU"); //画柱状图
9 _/ R8 u* m9 G# l1 r% b: p8 Iouttextxy(x+45,y+10+100,"IO");
. _1 F( B; ?& S f( Aouttextxy(x+40-15,y+10+200,"change");
& _6 }. g. V/ Qrectangle(x+35,y+30,x+75,y+110);* g0 A' O) I; v: L
rectangle(x+35,y+130,x+75,y+210);: z: [: Y" x% P
rectangle(x+35,y+230,x+75,y+310); N; Z" X6 A/ I, R0 P9 O
outtextxy(x+180,y+310,"HR");) u4 `* a3 x% x# A6 D
t = (float)com;7 z$ A2 A* n$ I& N/ `$ p, s% z
temp=(t/101)*80;1 i6 y7 I' C8 Z. n6 R; A
fillrectangle(x+35,y+110-(int)temp,x+75,y+110);$ M- S8 |; {/ N
t = (float)wai;* V" R5 W9 Y( W
temp=(t/101)*80;
/ m6 q3 t+ r2 H& r6 g" {fillrectangle(x+35,y+210-(int)temp,x+75,y+210);0 F- j, D6 U" g- V( V
t = (float)cha;0 d0 r3 j* W( P+ |2 n, A
temp=(t/101)*80;
! u) O( d- P, U$ `. dfillrectangle(x+35,y+310-(int)temp,x+75,y+310);5 r0 L5 ?' s2 x
for(i=0; i<3; i++) //画坐标 high=90,length=250
# X3 z; W, n( D- v4 f6 e{
* X; H- J+ ~8 l f- p/ Q/ G0 x5 ?line(x+100,y+110+100*i,x+350,y+110+100*i);/ J" I) R9 O2 G
line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);" \( Z( J6 _, n6 M5 ?* e
line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
& E$ Y" \2 Z$ D% v2 _+ u3 D- _1 q2 W! l* F Z; d0 p
line(x+100,y+110+100*i,x+100,y+20+100*i);* k* Y5 C5 V& a* l$ _
line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
# L7 \9 `( b2 |' jline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);/ B$ s) G% J) O
for(j=0;j<num-1;j++)
! s' m# |( N y& H; [{; k' }8 `, |+ K/ v' ] O0 e
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
! b- ~& K8 y" F. y. V* Kline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);3 Z0 T) _: j9 E( y) n
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
9 s( ]/ R8 d+ Y) K9 z* z3 ~) x}
, k( n$ }; @& C, {$ s}4 S# M, n. [& f: Y% F2 A
}
1 K! z$ f# V6 }/ R! {else if(FLAG_HR==1)
" @8 C) d: E# p{
. ~) J8 w: T7 v6 mx=0,y=0;7 o+ n1 E$ ]1 i# ?, I
for(i=0; i<num; i++)
1 t$ m) B. k( T- B* }: u{
( A- ~) V# G" y9 C1 N8 Ot = (float)info[0];6 n8 b' s. `3 p# `# ], d; L
temp = (t/101)*180;
. Y7 k" g+ |2 ^$ Apos[0][0] = (10-num+i)*50+x+650;
2 p$ G: k4 N. h" P# F1 Q- T+ Rpos[0][1] = y+210-(int)temp;5 R+ O3 G8 o( J: X q! e# ~
t = (float)info[1];" z. [8 x1 _2 K7 A" C, e) b* Y
temp = (t/101)*180;
. r5 ]5 J) f7 y* ?pos[1][0] = (10-num+i)*50+x+650;* O+ l9 `! E0 m
pos[1][1] = y+420-(int)temp;, Z7 F& J8 }% g2 O
t = (float)info[2];3 ]0 H" c, P; a( L7 j) L8 k
temp = (float)(t/101)*180;
; D/ l E, e, |' I7 H# {) m6 ~9 Upos[2][0] = (10-num+i)*50+x+650;; E+ e m1 f& C* I A
pos[2][1] = y+630-(int)temp;3 @2 _5 X9 s( V. o
}/ U: T' e2 G1 z& ^2 r' a# ~
clearrectangle(x,y,x+1200,y+650);, ]& Y% ]+ l) `5 P8 C' S( K1 q% Y
settextstyle(40, 20, _T("楷体"));. k! f% _5 w. ^! u
outtextxy(x+50,y+50,"HR");
6 E" s6 Y7 I+ I; J/ Qouttextxy(x+280,y+20,"CPU"); //画柱状图
- [8 x# I' T" p) @. douttextxy(x+285,y+20+200,"IO");8 z, y9 q# T7 S7 ~# l
outtextxy(x+250,y+20+400,"change");
& z& |% C6 O* @2 c' o% Lrectangle(x+270,y+65,x+330,y+215);: I' m, k+ O% |* R& O& O" k
rectangle(x+270,y+265,x+330,y+415);5 y3 \7 d3 a$ J O3 M2 j" e
rectangle(x+270,y+465,x+330,y+615);+ c H: Z; e% v1 f2 f
outtextxy(x+290,y+620,"TT");1 J R, m1 h. W3 T/ W. w4 M
t = (float)com;
: D6 b, G" y' x, a, N* i/ ktemp=(t/101)*150;8 l' t, e3 q' @
fillrectangle(x+270,y+215-(int)temp,x+330,y+215);
& f+ ^' R7 M" U2 Et = (float)wai;" _# b& J _8 m3 Z# I
temp=(t/101)*150;/ e8 U/ T3 f) Y; A
fillrectangle(x+270,y+415-(int)temp,x+330,y+415);8 o! ^! t( h$ s k4 T
t = (float)cha;, @( W+ G3 w) L* D+ ?
temp=(t/101)*150;
; N2 v0 j" Q- {- q5 vfillrectangle(x+270,y+615-(int)temp,x+330,y+615);( d8 I5 l# S. n( t
for(i=0; i<3; i++) //画坐标 high=90,length=250
% ~& J' j+ v) |. s{" w. h) F, O& ~+ G( ~/ a/ B
line(x+650,y+210+210*i,x+1150,y+210+210*i);: z1 n3 Z% S% T, G2 y* B
line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);7 q6 N$ ]+ u% W3 ?, o
line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);* A4 \9 ^* F2 `+ d# X. ?
: f' Z2 m* O9 nline(x+650,y+210+210*i,x+650,y+20+210*i);
* n* ?' h w& y2 Aline(x+650,y+20+210*i,x+650-10,y+20+10+210*i);& P$ @, a! \. f( d% j* D- E3 h
line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);$ h, m1 p7 j: ~2 p
for(j=0;j<num-1;j++)
8 Y7 Q( @: k) p" D{4 ~5 B1 k5 ^& p7 f C* w+ M9 u
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
0 Y2 Y$ E9 a, k2 Hline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);% d2 r! R5 b" q; \0 m
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
6 S, z% ~. }9 B0 p1 g) U# C}) X2 z' d% C9 P/ M2 X
}$ c' ?3 U9 z& f
}
- L `% _9 B0 }, R1 x& `2 U1 y9 d
" l' n5 K' T- M( v
. |- ?# `0 `) |: J/ o( ?( Hreturn 0;
( X, Q- U4 D/ Y% z}6 d; V, N: ^& f# `) B% ^
int drawPerformance_TT(int x,int y,int memorry,int com,int wai,int cha)
1 q* K f( K2 L' P3 r' K i$ K{
) ^$ `6 Q2 _" [" a8 s. l. m2 ]7 Rstatic int info[11][3],num=0;
2 Q$ m: G" y0 W- [+ d4 oint i=0,j=0,pos[10][3][2];
' j! F4 G/ h& L' W7 Bfloat temp,t;' Z/ k+ b* Z8 b: H
info[num][0] = com;: z3 w& i9 g- W* t: E- J
info[num][1] = wai;
c" J8 C' b/ B y5 Ninfo[num++][2] = cha;
. s' G6 B- W3 g3 a' Z" Kif(num>10) //存储10个点
* {6 W0 _4 w, Y8 r: w{
2 A5 }+ h P0 `* y- wfor(i=0 ;i<10;i++) U; e4 ^' b% i4 s1 n; i
{& O; M' p, d: e6 `/ X4 z q
info[0] = info[i+1][0]; m5 D8 U3 ]( o
info[1] = info[i+1][1];
5 h; S" B' L; q4 Finfo[2] = info[i+1][2];0 F0 l0 M) K2 l: G
}
0 z0 O; Z$ O$ i7 j2 Anum--;
3 i h$ q3 s0 _& ~9 ?* f}% Q8 p6 L' ]9 `+ J% J" f
if(FLAG_show==0)
2 T% p8 x0 Y$ L3 w4 Mreturn 0;
& j" ?; s) Z' c! U$ ~9 h6 sfor(i=0; i<num; i++)
: z. |- U# G+ a7 [, K1 n" f* j& K8 m{( B+ f0 r! K% ^+ c. e7 U
t = (float)info[0];
. G4 X. T% T- ?, Wtemp = (t/101)*90;4 z* a+ H$ ?& F2 e
pos[0][0] = (10-num+i)*25+x+100;
- p+ B. z/ N! j7 {pos[0][1] = y+110-(int)temp;: _: N7 g* t2 v8 V
t = (float)info[1];
9 g) p- ]7 i9 Q# Ntemp = (t/101)*90;
: Q, P! e+ q" b' Xpos[1][0] = (10-num+i)*25+x+100;
. ?2 h2 r" U9 E& r3 `pos[1][1] = y+210-(int)temp;% R) K% Z& K4 W; d' b7 e
t = (float)info[2];& W; }8 y9 N; c( d
temp = (float)(t/101)*90;
) l' j" p9 J) }- e; C( z3 Opos[2][0] = (10-num+i)*25+x+100;9 n4 D: p3 F1 l4 k
pos[2][1] = y+310-(int)temp;
6 w$ z, g& i# t# l' u5 l p; e2 l2 n, r}! G' p) D- {, o; N+ O- ~4 ^5 H
if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
$ @) T* z* s: B9 j{
% T4 x) Y* m# k0 z6 Q; g6 {* gclearrectangle(x,y,x+400,y+315);
# d. o0 I8 j h9 gsettextstyle(20, 10, _T("楷体")); I1 v$ x1 f$ E0 w, ?
rectangle(x,y,x+400,y+325);. Y3 t9 m+ o5 y
outtextxy(x+40,y+10,"CPU"); //画柱状图1 p/ n6 S9 k+ z. ~- d
outtextxy(x+45,y+10+100,"IO");
% W9 S) J3 e- \5 n. louttextxy(x+40-15,y+10+200,"change");
+ D' d0 C L! Q. r) }rectangle(x+35,y+30,x+75,y+110);
+ m w4 [6 K+ s% I2 o: grectangle(x+35,y+130,x+75,y+210);
1 K" g* o0 a _% d! Lrectangle(x+35,y+230,x+75,y+310);
, l) L6 y2 m$ W/ N, U. oouttextxy(x+180,y+310,"TT");
$ Y4 j$ G, |6 y! i3 T8 n+ ~t = (float)com;% \8 F8 ~% K7 y4 p. ^6 R
temp=(t/101)*80;# a# c: J9 a( [0 P. ]$ j
fillrectangle(x+35,y+110-(int)temp,x+75,y+110);" W/ B, y& k2 I: p
t = (float)wai;
5 }! ?& ^3 ^% ]7 ptemp=(t/101)*80;' Y7 j) M2 ?) p5 J: ^! `1 r
fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
- _8 E. E- ~' A3 st = (float)cha;
( c+ ^/ Z' k) [5 stemp=(t/101)*80;
' s; c. J8 @3 J* Y1 [7 |9 |# Kfillrectangle(x+35,y+310-(int)temp,x+75,y+310);
& r+ P0 p5 t5 Pfor(i=0; i<3; i++) //画坐标 high=90,length=250
3 R0 A1 S# t0 p4 r% I# a+ T{+ o' x6 y0 r1 F' e. a
line(x+100,y+110+100*i,x+350,y+110+100*i);1 @9 }9 q9 r! Z/ `! e2 G- J
line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
2 D6 Z& e' g" y7 B* a% vline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
8 j- j. j- O' \( ~% o: S. t$ U5 D. w! o. e+ p% h" R' u
line(x+100,y+110+100*i,x+100,y+20+100*i);) c% H5 |! d0 C7 }) @# N
line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);* E( v3 }- V0 C+ t1 C5 A
line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);
) {6 e- r* n; }2 ] Gfor(j=0;j<num-1;j++)$ n" q* S2 |: H* L b+ `# r
{
* a6 e9 j+ j/ a+ jline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]); m+ F* `3 f+ W0 l1 G- M
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
3 _* ?. m1 ^% b6 i: x9 D" }: _line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
* J, R v- [6 c}5 ~; ~: U8 g/ n! F& h3 u
}+ s/ V+ x( x0 R$ B! J" V
}
! i. l5 B. v7 b5 k+ Selse if(FLAG_TT==1)
$ P4 b) R- F( K3 w{6 l& Q6 v) t4 l0 i& [% z' R
x=0,y=0;
, R1 \6 |" b$ l2 f dfor(i=0; i<num; i++)
- k- M) r+ ?9 @) E7 E+ c{3 ^ ~) O7 H' D; z. {& |
t = (float)info[0];
: }5 q) \- X# R9 Q& ktemp = (t/101)*180;
0 T8 S. v% E6 x# k7 B, j! \# e! Hpos[0][0] = (10-num+i)*50+x+650;
- e U% f7 k1 b5 Dpos[0][1] = y+210-(int)temp;
w. Z. l& L5 B: d2 B; [* gt = (float)info[1];
4 L( `( w# P9 l+ ftemp = (t/101)*180;
$ B; v! T9 r( x4 P ~# X6 f+ [pos[1][0] = (10-num+i)*50+x+650;* K$ S+ u4 E Z5 @
pos[1][1] = y+420-(int)temp;, u, O4 q0 y1 X. B. [
t = (float)info[2];' q$ W$ r2 r6 l
temp = (float)(t/101)*180;" Z6 Z1 Y2 t/ v3 C
pos[2][0] = (10-num+i)*50+x+650;
. Z! s. h6 V% Zpos[2][1] = y+630-(int)temp;
$ D3 ^$ X% T a# `: T/ F/ q}+ H2 A# y7 G, M7 f' _5 X0 @
clearrectangle(x,y,x+1200,y+650);
4 F( \6 {" v% w2 ^! k0 h$ _- Msettextstyle(40, 20, _T("楷体"));
+ S; @% Z* g" Z0 i$ k' houttextxy(x+50,y+50,"TT");7 ^6 h% E0 n. m9 r( w2 X
outtextxy(x+280,y+20,"CPU"); //画柱状图
+ h; f3 i6 ~ R" u- @! r# nouttextxy(x+285,y+20+200,"IO");! |. d6 p, W. _5 r, s3 \
outtextxy(x+250,y+20+400,"change");
, ?6 w$ I2 M% F& J3 Xrectangle(x+270,y+65,x+330,y+215);2 E* b5 b- R7 F% k8 {1 {, N
rectangle(x+270,y+265,x+330,y+415);0 r3 N# y8 ?9 X' q. B+ B
rectangle(x+270,y+465,x+330,y+615);4 q7 Y9 Q# V! d; t
outtextxy(x+290,y+620,"TT");
1 W, f! F8 A. }* F" st = (float)com;
2 _1 K9 ], }: |4 O9 qtemp=(t/101)*150;
$ f4 g8 F( z/ r% Ofillrectangle(x+270,y+215-(int)temp,x+330,y+215);( R2 Q4 \, K8 h; H
t = (float)wai;
) d: ?! D" U# V; ktemp=(t/101)*150;
( O& S9 u2 ]! G1 v1 l& Q- Wfillrectangle(x+270,y+415-(int)temp,x+330,y+415);7 w1 K" p# \* \4 P! T* V( w
t = (float)cha;
$ k w, Q3 X9 S! I3 Ctemp=(t/101)*150;
% Z+ M! a" {$ D% ^fillrectangle(x+270,y+615-(int)temp,x+330,y+615);+ Z- n$ b( `. d. s) r0 R2 Z( S3 R
for(i=0; i<3; i++) //画坐标 high=90,length=2501 l) ]: d9 i5 S" f
{
% I7 r/ }9 l! x" Yline(x+650,y+210+210*i,x+1150,y+210+210*i);
2 h3 \5 l& `) g; jline(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
5 z+ J1 G- S! R# zline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
$ P E7 N! e* M! H) v U% f9 L4 Z. P6 ?6 K+ n' D% F; K# i
line(x+650,y+210+210*i,x+650,y+20+210*i);
, M* F9 u5 |- ?- w; \line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);8 \- e+ {' m* w& b2 ~3 e' K1 Q
line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
8 Q$ d$ {, E7 b; @( [7 ?for(j=0;j<num-1;j++)
: l+ E; {# p1 P{% I$ Y5 q+ s( d) u6 M
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);# b1 O+ e7 S7 U8 Q
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
& `8 x# z9 E8 r( V+ vline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
0 n4 Y% T7 I# B8 K" q4 d}, w, v0 z+ J# U' ^$ x. _& A
}3 n" T6 q# _! c' M
}2 ?2 f7 Q) G, v
3 f/ |; I; U4 N- V! M9 z! O. i
& s" e3 X! M U! t$ E$ J Hreturn 0;
; q `: G7 l- O B( `}( L7 `. E T# N5 v, o. T
int drawPerformance_PF(int x,int y,int memorry,int com,int wai,int cha)
* K. X4 K4 [# B7 C% F- x- A{0 l" i& B, O; e( l: b+ w* W- s
static int info[11][3],num=0;
* W- O# z3 G9 R, z5 N1 }int i=0,j=0,pos[10][3][2];
f4 D: f0 s2 w( h. f' q% Ufloat temp,t;4 k" t& Y! b b' |
info[num][0] = com;$ f0 p2 A' `/ ? ?
info[num][1] = wai;& A+ D, _! V# s2 [. `+ m
info[num++][2] = cha;+ |+ I5 t' n. A2 U2 ^9 N
if(num>10) //存储10个点
4 s' _( a1 h; Y4 e' i{$ S6 k; o1 v* ]6 _6 A5 B9 l, _
for(i=0 ;i<10;i++)
" C) \: L6 ~) \! D9 B* o{& c3 c) h, m5 r9 u! _$ k
info[0] = info[i+1][0];5 Z+ I2 F5 h' o; r( v1 J: W* r
info[1] = info[i+1][1];- V+ F8 a ?- N* O! H! T$ l9 e
info[2] = info[i+1][2];1 `' o) N+ x9 H/ h4 @/ S
}# G8 }! V& @7 b7 H
num--;, r/ R( _5 I" h6 H, z8 m/ A9 C
}3 R/ B, T& a3 d) R* d$ F
if(FLAG_show==0)
1 g# h1 ?. ]/ Zreturn 0;# H a% s) c: e t2 k0 I+ |/ V
for(i=0; i<num; i++)
. g) p1 R) A* a& {{& V6 y8 m. p, W. E' I* g$ g
t = (float)info[0];
& d& v/ o2 J/ g0 |+ X) {temp = (t/101)*90;2 i+ m9 Z; c: i9 z. V
pos[0][0] = (10-num+i)*25+x+100; @2 D+ A3 q& {2 w7 ?: p
pos[0][1] = y+110-(int)temp;
0 p2 Z# ~ Z1 i* ?! Bt = (float)info[1];+ {% e8 E4 } v2 L4 e
temp = (t/101)*90;5 A) w% B2 k) b
pos[1][0] = (10-num+i)*25+x+100;
/ f3 S) Y; c# h4 }4 C) C0 M( B) hpos[1][1] = y+210-(int)temp;4 s" c4 z7 Y; d' o) g# q7 I- X. M
t = (float)info[2];" b( i( O( B+ ^+ I- u1 C, H# u
temp = (float)(t/101)*90;% L+ P& h" z' W ~/ h( P
pos[2][0] = (10-num+i)*25+x+100;: W: I9 G7 }# k* K5 Y
pos[2][1] = y+310-(int)temp;
5 J! R+ Q' P3 ]}
1 P, K5 B! u+ H5 C2 ?6 Lif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
8 l* K( Y7 N. n1 x6 x1 W{
7 }5 l6 u$ e$ C. B3 _" }clearrectangle(x,y,x+400,y+315);0 m! Z6 T7 C9 R2 J, }
settextstyle(20, 10, _T("楷体"));. E0 s2 v" Z$ Y
rectangle(x,y,x+400,y+325);
2 C; z9 K5 c. ?# mouttextxy(x+40,y+10,"CPU"); //画柱状图7 ^0 c! m) \/ p4 I3 A
outtextxy(x+45,y+10+100,"IO");7 H$ f5 |4 z3 S; S) E3 ?1 j
outtextxy(x+40-15,y+10+200,"change");) H- ?0 l) r' ^9 a1 T+ \( M: [
rectangle(x+35,y+30,x+75,y+110);
6 ^/ u5 j3 G# T; `) Vrectangle(x+35,y+130,x+75,y+210);$ Z' \( P/ T' L# e
rectangle(x+35,y+230,x+75,y+310);3 O3 Z; o1 C$ L1 s A
outtextxy(x+180,y+310,"PF");5 r$ r* l1 y; Y% Q$ c
t = (float)com;* {* J R3 m! Q$ q
temp=(t/101)*80;
; C4 ?' w* p" \: s0 p/ Gfillrectangle(x+35,y+110-(int)temp,x+75,y+110);; k, Y2 \/ B+ q3 l4 O" R, o
t = (float)wai;
) q4 k% \7 D* _( Rtemp=(t/101)*80;
7 p0 D$ `3 p9 |/ p/ W% K: qfillrectangle(x+35,y+210-(int)temp,x+75,y+210);) c# ~ W' q9 Y
t = (float)cha;
- m" j7 |: J; ~temp=(t/101)*80;* G0 o& ^' K3 J1 o, w, \6 b7 R
fillrectangle(x+35,y+310-(int)temp,x+75,y+310);
4 x" G/ {& X n8 `: ffor(i=0; i<3; i++) //画坐标 high=90,length=2507 T1 S6 D1 h3 m/ _- m+ R/ n* G
{/ W5 P6 v2 ]$ ]% h9 H b
line(x+100,y+110+100*i,x+350,y+110+100*i);. O0 G) R$ Q( q
line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);8 a0 C+ L% o0 r( W( U) e& G. [
line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
+ I" V% f* z. _9 E+ l7 i0 o2 P: \% q, u
line(x+100,y+110+100*i,x+100,y+20+100*i);
% `2 W/ G* k" V! R1 V0 ~7 v! ?; Cline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
$ T+ o, R& P# s$ t/ ]# a2 Nline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);
0 r2 E6 ?+ |0 Z3 bfor(j=0;j<num-1;j++)! f1 P8 R' v7 j' s5 F9 \/ M, K
{
' m! Q# `) P' z1 ]line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
5 i- B9 X7 e' dline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);" W0 [. a9 x# c( X# e" z
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
* y2 r, o" L# B. q/ A3 P8 X( ]}( s$ R. d; ]; r; K8 ?) U
}! B0 ?. O- P9 F: a/ Y
}! O0 y- k! w5 T4 C3 X t
else if(FLAG_PF==1)! ~) q7 S" o0 K, ?9 W7 U* l; f
{
- b* P/ o+ |5 \2 q0 m8 g0 Cx=0,y=0;3 D- E' f i1 D0 K, m. I
for(i=0; i<num; i++)
" K* m0 E) t M. L; ]{
3 | v6 Q! ? T, } R. E4 St = (float)info[0];
6 e* F( ^0 f; D$ A2 t6 z' ~temp = (t/101)*180;
0 Z* I8 [" E* f5 t) a5 G. Gpos[0][0] = (10-num+i)*50+x+650;/ v1 A& }+ S- M0 j$ D/ i1 {
pos[0][1] = y+210-(int)temp;' g& [7 p0 a6 X& I
t = (float)info[1];
* T" x( o! H8 e0 T* W$ rtemp = (t/101)*180;
* T* ]6 l: w/ U6 e6 E. ]- apos[1][0] = (10-num+i)*50+x+650;
" x' K g) r' @9 b S2 k0 lpos[1][1] = y+420-(int)temp;1 \" C6 A& ?, c G
t = (float)info[2];' V+ a+ z1 G7 U5 I5 D0 c
temp = (float)(t/101)*180;
, f8 I2 q9 c- E7 Jpos[2][0] = (10-num+i)*50+x+650;
4 [3 t: W" x$ k/ d; _9 ^2 Qpos[2][1] = y+630-(int)temp;2 l" Z6 m# z7 v5 C: R- {/ B
}
0 C, Y7 |% \( P% U% k9 Tclearrectangle(x,y,x+1200,y+650);
( `* X0 E' m$ B( y% j0 jsettextstyle(40, 20, _T("楷体"));
/ _- U% d5 d& g" Q9 o2 Kouttextxy(x+50,y+50,"PF");) k) ]9 e$ G! X' ?
outtextxy(x+280,y+20,"CPU"); //画柱状图; Y( R! k' F) P j' V1 W
outtextxy(x+285,y+20+200,"IO");
; n% t4 J4 X( G5 \2 e' L: Nouttextxy(x+250,y+20+400,"change");
: A; T& ?1 W- d8 jrectangle(x+270,y+65,x+330,y+215);# K* Q8 j: F9 I q3 R
rectangle(x+270,y+265,x+330,y+415);7 x/ r: L: B- t( U9 ~( O; K
rectangle(x+270,y+465,x+330,y+615);
* ]" A1 ?$ O3 P# Q. Oouttextxy(x+290,y+620,"TT");
# P3 y6 b( V1 R9 _) x H/ U1 B0 Pt = (float)com;
4 H9 J0 s. l+ L2 K' b7 ltemp=(t/101)*150;
. c0 Z4 H# G, }fillrectangle(x+270,y+215-(int)temp,x+330,y+215);
* C) }4 M5 _0 l; \ A+ Nt = (float)wai;
' M. l6 M/ p' @4 U! w" G# l* m" }temp=(t/101)*150;1 K% v8 O; v% q2 x; k/ B: y
fillrectangle(x+270,y+415-(int)temp,x+330,y+415);8 w" z5 ^; J+ z/ s& L1 D
t = (float)cha;3 i- P. W/ L9 p) ~
temp=(t/101)*150;7 @9 X. G. ~, q& _6 w
fillrectangle(x+270,y+615-(int)temp,x+330,y+615);3 ]3 \& p7 k$ ~( Z$ q6 S1 j
for(i=0; i<3; i++) //画坐标 high=90,length=250
W7 a* ?! z: z: y) T" \0 X{; R. Z+ V3 P" N
line(x+650,y+210+210*i,x+1150,y+210+210*i);
; t- ^( Q6 }/ o5 C2 P* v2 C7 Rline(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);! i# F' v2 J2 y! }1 I+ ]
line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);4 R0 o/ o% G% B( q/ @6 \
+ R$ H" m% K( ?& N
line(x+650,y+210+210*i,x+650,y+20+210*i);
0 W* l' `+ t# P8 |0 J$ ~line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
) C% p* R! w, h f5 b2 p. Y- l0 oline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
w* s2 h6 f& {for(j=0;j<num-1;j++)
) }3 K3 H+ y* ]6 @0 ?{
, v% F0 v+ G$ wline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);. H# q6 x# X) l" q0 c
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
[2 p! l0 F- p) Kline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
4 u7 a& {- @7 }- u, ~# s% C# Q}8 ~# E5 e, j/ I
}# \( J& a2 y, w$ ?7 X) k, K! S
}
. A' }- n0 ?; e4 N7 Greturn 0;' M2 E" L9 R5 V
}
" N7 M7 f/ X; z0 i! @int drawPerformance_SJF(int x,int y,int memorry,int com,int wai,int cha). a3 c# p/ y% Y
{
7 ~/ C4 g: _" y, `# g3 s6 I U; hstatic int info[11][3],num=0;
8 ~5 f+ ^, I) I: G$ Vint i=0,j=0,pos[10][3][2];
5 |& ?$ e( r8 e6 n4 C+ ?float temp,t;+ O2 }5 u! m1 j& o
info[num][0] = com;
$ q6 G w+ f1 h, Y" ninfo[num][1] = wai;
2 X1 Y! y) f4 k) c& zinfo[num++][2] = cha;0 W8 x2 g7 p6 `- k8 ?& o
if(num>10) //存储10个点* ?9 d( o( w* T
{3 w/ H. h' T# X$ z
for(i=0 ;i<10;i++)
7 G; C8 f" S' K9 x5 }& ^{
" Z- O* g' H& \; hinfo[0] = info[i+1][0];# q- |: M7 m4 l( W0 {: O
info[1] = info[i+1][1];" @. q, c+ w2 ^9 N; ?- d8 b3 b
info[2] = info[i+1][2];
+ l: ]4 W# z/ D/ w}7 `( @7 M. d: K2 R4 ^1 W% D; Q- g
num--;3 o: K' q3 I) Y M
}! O9 i, l9 _" Q& {" z
if(FLAG_show==0)# \1 l! w4 J9 g, |/ A
return 0;
* j% ]6 N' i1 tfor(i=0; i<num; i++)8 B7 w; s: [& E
{ P! l9 n v7 U2 d
t = (float)info[0];
; B4 ?; n& Y8 P R& p8 @1 D+ ntemp = (t/101)*90;& W4 y+ J$ |- f% l4 v+ I3 z
pos[0][0] = (10-num+i)*25+x+100;
! L4 [4 v) v. S& [( I2 epos[0][1] = y+110-(int)temp;
5 ^1 ?! @7 o7 ?+ Xt = (float)info[1];
( N7 f& q s2 itemp = (t/101)*90;) h4 U6 D$ x) t- n& V+ F
pos[1][0] = (10-num+i)*25+x+100;; W5 w$ n4 i! \3 ?( e: i" w
pos[1][1] = y+210-(int)temp;% S! l# p2 W* K3 u& u
t = (float)info[2];
4 n& {% ?7 v1 @8 \: Xtemp = (float)(t/101)*90;
0 S6 _8 O8 U* a! |$ p; Fpos[2][0] = (10-num+i)*25+x+100;
8 a4 ]- H# n0 G' r. O5 rpos[2][1] = y+310-(int)temp;
* ] z v, n4 M1 X3 y4 f}
# C7 T& j+ C5 r. Oif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)9 R$ f/ s( P& g5 t7 W
{
) e% J7 `: \4 |clearrectangle(x,y,x+400,y+315);
2 |* Y+ g0 Y3 [4 b' _. ~settextstyle(20, 10, _T("楷体"));
' m, U. r4 r7 S) ]rectangle(x,y,x+400,y+325);. l, g2 n9 \8 i& P' @. {7 L
outtextxy(x+40,y+10,"CPU"); //画柱状图
. q! }$ V, A/ F+ C- |2 |, Jouttextxy(x+45,y+10+100,"IO");
4 U7 R, x$ T# b8 b, _outtextxy(x+40-15,y+10+200,"change");
$ l; n2 A+ i! d) J! g( f" X+ j0 D2 Frectangle(x+35,y+30,x+75,y+110);5 ^9 O6 M( `/ V. G0 c. B
rectangle(x+35,y+130,x+75,y+210);
t6 V, V$ [" T p% Wrectangle(x+35,y+230,x+75,y+310);
( `- B5 ]6 J6 O; uouttextxy(x+180,y+310,"SJF");
3 `. K# T4 }/ O4 @t = (float)com;8 e' K: j: P9 t2 k- Z' E" i6 t
temp=(t/101)*80;
0 J. `3 S- s2 e( |- b$ Dfillrectangle(x+35,y+110-(int)temp,x+75,y+110);4 j% `9 S1 {% }
t = (float)wai;
' c' w- ]4 }( B/ r7 Vtemp=(t/101)*80;! ~1 a1 J+ ~$ e5 Q* Z5 M v
fillrectangle(x+35,y+210-(int)temp,x+75,y+210);/ }$ f; i7 @1 j
t = (float)cha;' C* k# t- E' P
temp=(t/101)*80;
# J! ?: n3 T; C7 d7 wfillrectangle(x+35,y+310-(int)temp,x+75,y+310);, b/ C6 G( @7 [) S1 L6 B
for(i=0; i<3; i++) //画坐标 high=90,length=250
B: u2 I% q$ ]8 c2 A; p1 N6 L. g. n8 @{
" I" x" h: ?8 j2 P. L& Fline(x+100,y+110+100*i,x+350,y+110+100*i);% t- [! Q7 M$ R# r
line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
3 v0 @4 [9 D2 y( X! ~9 b0 x# vline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);$ C+ `$ R- O* z% r& b! E& Q2 Q
1 H; e+ Y; `! t# j1 X T7 M" {8 q
line(x+100,y+110+100*i,x+100,y+20+100*i);
( L: y- V7 ^4 ~4 iline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);& P' c2 C5 Y: {) q8 m0 a
line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);9 d& |. d- C3 ?" |$ j/ Y
for(j=0;j<num-1;j++)4 c4 l6 i8 a$ e5 Z
{9 J( W( P+ o, G$ U5 ^4 m% \& v: B
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]); N" ^$ b0 I% I; C6 F8 U
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);% Z" b5 {* j9 o$ C
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); + S5 h3 \4 @- y# z$ O( O
}
( p# }9 t/ k7 ^$ h Y" ]9 a, t}
5 O7 G2 B _) W7 D5 Z: }9 W2 {}- `' M$ w/ S' U* z. V F1 V2 e
else if(FLAG_SJF==1)
3 \% G4 Z# z$ r9 a{
* e9 S# |9 a( M# }$ kx=0,y=0; D) A) H ~% ? ~+ G
for(i=0; i<num; i++). s! K% m/ A$ @$ p2 k2 }) x
{
9 E+ ]1 g) M$ Y: Ht = (float)info[0];
F; w) d4 g' _6 r2 ^# Stemp = (t/101)*180;
& a* F n$ v5 p8 Apos[0][0] = (10-num+i)*50+x+650;. H# N& B1 g+ |2 d' ]
pos[0][1] = y+210-(int)temp;
( U1 K; y+ q' z: G3 P* gt = (float)info[1];
% R; c! C* E2 _# W7 wtemp = (t/101)*180;! F4 u& V/ E, Q: y/ l9 d
pos[1][0] = (10-num+i)*50+x+650;# _) Q% {" l9 G$ F3 B) A) Q8 m
pos[1][1] = y+420-(int)temp;
+ j* z! y5 O3 At = (float)info[2];
2 C: K; d6 |7 V: qtemp = (float)(t/101)*180;* o2 R: M- b: A1 j
pos[2][0] = (10-num+i)*50+x+650;
4 W7 B% g# _8 F1 ]$ b4 Ppos[2][1] = y+630-(int)temp;' x/ J5 [+ r9 t) B3 x9 x7 V% H
}6 O0 `5 c; f( t. Z
clearrectangle(x,y,x+1200,y+650);. M- m4 F& |$ e5 q% r: u+ S2 W: o2 s
settextstyle(40, 20, _T("楷体"));2 V- q2 V+ p3 ?" J
outtextxy(x+50,y+50,"SJF");4 D1 G9 s& ^. o; [0 ]6 B
outtextxy(x+280,y+20,"CPU"); //画柱状图' }* W2 q1 r' D: Y" M* p5 ]: S% q
outtextxy(x+285,y+20+200,"IO");# j# G! A. X" U/ N* U% p* |
outtextxy(x+250,y+20+400,"change");; [8 O5 ~+ C% a; B$ q( F
rectangle(x+270,y+65,x+330,y+215);6 i" r. P& s" H
rectangle(x+270,y+265,x+330,y+415);3 m. X- T( p: ]9 m0 K
rectangle(x+270,y+465,x+330,y+615);
3 ?: W$ b! T3 @0 Z' {2 routtextxy(x+290,y+620,"TT");% J5 s. ~3 H! k) T. R
t = (float)com;% R h/ h0 P p; J) z3 V3 c1 \
temp=(t/101)*150;
# j9 O- a$ z! \. a4 [. z6 t7 |. A# Pfillrectangle(x+270,y+215-(int)temp,x+330,y+215);- v' c3 b; ?0 q u
t = (float)wai;* n, Y5 d7 B9 ?0 k) ]1 d8 h
temp=(t/101)*150;* Q& {+ d9 ?) @" b
fillrectangle(x+270,y+415-(int)temp,x+330,y+415);0 ?2 G! f; Q) O$ H6 v
t = (float)cha;( r0 t, H1 s% ?# N2 x* J; Q$ z
temp=(t/101)*150;: k" j6 M8 d) P" Y% ]
fillrectangle(x+270,y+615-(int)temp,x+330,y+615);
+ A( g% |; Z2 }% Q, yfor(i=0; i<3; i++) //画坐标 high=90,length=250 A4 j7 n# Q& [0 \5 D# ?
{
& `& D' I( o: t- Y: e# cline(x+650,y+210+210*i,x+1150,y+210+210*i);5 T1 O; u3 L% i7 Z1 w* a. S& \
line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
2 h. c. E1 Q$ D* X; hline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
7 F3 H+ J: E' @2 U/ z$ K( m8 q3 u8 ~# Z
line(x+650,y+210+210*i,x+650,y+20+210*i);
% |; Z, u9 m& M$ }3 jline(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
! x5 Q( c4 R3 \" ^0 rline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
9 E% H7 X6 H7 t: Y. Qfor(j=0;j<num-1;j++)
5 D: ?" i' |2 c{* b: r- p. F0 v9 i* Q
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
% x$ K/ X: N, q1 ^0 ]9 e' yline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
" K* ]; v: v& Wline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 4 [9 E0 y+ |5 D$ a0 |" d& w
}
, t& Q- m: s7 S+ s$ w. k, W: T. Q}& ~! u. G4 a; J, a
}
2 l7 K' _3 z! G5 preturn 0;. T5 A5 G/ ~3 L
}) Y+ R( x7 t9 [
int High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)2 j# y4 U1 Q2 @" A
{
: ]" s% i( d& ^( [1 }static int compute=0,waitio=0,change=0;
/ e( b& \! B3 V2 N9 k, ^3 Cstatic int computeLast=0,waitioLast=0,changeLast=0;
/ v2 \3 y& \; `- K/ }3 ^int i=0;; m, k: @# [! z& v( k Q! e, T$ R; h
if(draw==1)
+ I+ A$ w7 l3 u3 N: j G2 j7 ^{
$ N; t ?% M, U9 M8 j, X5 j" ?//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
* T/ I+ `5 W* \7 ?1 ?% s* odrawPerformance_HR(400,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
' v- W% v, ?8 V, ccomputeLast=compute;
8 e* _: s: k0 U' BwaitioLast=waitio;
. I( w; u' N9 q( u, vchangeLast=change;. v6 i, ]9 T1 K
}) ]1 s7 l4 s/ F( `8 \% I; V
if((* memory).p[0].flag==ready)
. r% H1 P% X0 c2 x% H N. u) E% m(* memory).p[0].flag=computing;
1 G5 B4 a1 ~$ h# N" d3 \3 k- o) Aif((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)
1 E5 s6 D& s6 x+ z& n A" I{
6 Z; \0 u2 a. s, [9 f" X1 Ti=(*memory).p[0].computeNum;
# L4 G- D3 V0 e' @if(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed# m* c' x: T6 I5 U
{
/ P1 w m! R# O$ u8 Y0 v$ w& Z(*memory).p[0].flag=IO_waiting; f1 q3 U& d+ P
(*memory).p[0].computeNum--;( Y9 L. k) {3 ?) V
change += exchange_IO_Compute;
/ x! h8 i/ k& u% \* s {compute++;
2 d" `+ i5 h. P/ V* x7 f/ ]}
0 N0 z1 v4 W! a4 ^( r+ ielse
; O, |* s' a. y3 p{
$ p Z3 e8 u* a M; Zcompute++;' c, X* {! U1 s3 [
}
+ V' G r0 |9 ^$ t, Y4 V}" N0 x" B) G! m, g
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
3 T* s% `- C2 f8 V{
' c/ C4 O' B4 l; b9 g' r7 s
- W5 T# r6 ~5 q, r* D0 M1 mi=(*memory).p[0].ioNum;# J3 H. Y# g9 m& }
if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed
v. {8 p" f' {' h4 i{
. I/ Z9 t% N# Z; K(*memory).p[0].flag=computing;
3 u1 j# y' ?" p$ u ^(*memory).p[0].ioNum--;. o! R R6 Y% O- q
change += exchange_IO_Compute;4 _4 n) i+ \* J3 ? O
waitio++;' B$ c e- a( h
}0 n" d$ m* R. G6 E0 J5 r% K0 l! K
else' C9 N. Z8 @1 R$ U' G# U0 N
{8 B( g# v8 q5 a3 @" p/ j
waitio++;
P0 M/ U6 z G$ _+ T}
( K$ ?2 V* w1 D}5 O& Y2 M# H$ Q( G# j
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)
$ j4 H" [6 ?7 Z) W$ i+ L/ n R{
! ]) P7 \) L! r, q2 s(* memory).p[0].flag=IO_waiting;4 `2 ~. h2 ]7 p. k; E: w* J! T
change += exchange_IO_Compute;* @+ l& b N. z; C
}( i: [6 r4 K& W8 I' h3 ~8 e( X
else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)0 l \. }1 {& X# W
{, V8 W% v) s v. ?
(* memory).p[0].flag=computing;
' ]2 R: n4 m& ~6 X9 z$ @7 W$ Hchange += exchange_IO_Compute;
3 R" q: y! |9 M+ B1 E5 b' u}
1 \% p5 S" o8 J. M8 o% K; {if((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0) //一个作业已经完成
( R+ b! S& C. x' G0 q9 s" S{
) J ~* }6 S( s) s(*save) = (PCI*)malloc(sizeof(PCI));# u$ @. ^3 a" A1 r p# k
(*save)->next = NULL;
I8 v& O( `* T2 c4 W5 C(*save)->processID = (*memory).p[0].processID;
9 T7 h) C( _- M(*save)->comeingTime = (*memory).p[0].produceTime; D% W, S2 q6 O9 I- o
(*save)->askMemory = (*memory).p[0].askMemory;
6 Y, j- }& z& [2 ?: p2 Y0 `(*save)->compute = compute;' g6 Y1 K0 F, l- ^: f3 p
(*save)->waitio = waitio;, b8 p' m6 Q# `# ^5 c+ `# @
(*save)->exchange = change;
# ]( y5 V: A( \4 D2 d8 {1 `(*save)->completedTime = systemClock;
8 F2 Y, C! ]+ C$ O4 i. E(*save)->runningTime = (*memory).p[0].runningTime;# c" I2 I2 \' P% t4 G1 k
*spareMemory = MAX_MEMORY; //*spareMemory + (*memory).p[0].askMemory;
. C) X. q' w8 J% _compute=waitio=change=0;" ^( }& l4 ^: P
computeLast=waitioLast=changeLast=0;# c f7 m/ b0 c" {, }4 O
High_response_ratio_s_to_m(&(*storage),&(* memory),&(*spareMemory),1,1);
1 P* I* M. `) Achange += exchange_process;# E; X8 ]& ?- s, F: i* V. @
return task_completed;
5 R+ _) [4 z, e& ~; A/ L}; _& l3 T- B" f& M" C+ U
else! q& r/ ~* t+ Z8 V; X8 i
return task_not_completed;
: Z2 ~. ~3 B* {" `7 j. z) N6 v}
0 b* I, e% Q1 ?1 f% @: a$ |/ aint High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int dispatch)% Y7 G6 C w9 c4 W
{
$ H, K; S$ q/ o$ t) }* pstatic int waitTime[initProcessNum],i=0,j=0;
, I: Y' B1 A1 w% S/ E! A/ G7 Nstatic double HR_ratio[initProcessNum];# _3 \, v$ t; V' ]3 b
if(flag==0) //初始化数组5 y8 i- f2 b, p, C2 Q$ C. Z8 R3 O: K$ W
{ u* V) U& g: l5 H E
for(i=0; i<initProcessNum; i++)
' j( Y# c4 p1 ?% i. V2 c{5 m% U! x, V0 O+ {$ ?9 E, s
waitTime=0;
$ K }/ e! d: G1 \' `! `) FHR_ratio=1;
: A4 |0 l; G8 S0 M. M- z}
* m5 e: W$ E" N4 Q R: I0 u$ Z" f}
* C( @: x* ], b* ] k2 Bfor(i=0; i<(*storage).proNum; i++) //等待时间增加,重置响应比
7 d; W, ~4 U; v1 |+ t3 ~/ I( r{3 Z5 o, {' ]' V
waitTime++;& M/ w& u( t- i9 O0 A' z
HR_ratio = (waitTime+(*storage).p.computeTime+(*storage).p.ioTime)/((*storage).p.computeTime+(*storage).p.ioTime);* a; w7 Y( V- Y A8 j+ g
if(HR_ratio > HR_ratio[j])$ l# K$ z1 B. [* \
j = i;1 A8 f: r: b9 o* k. C
}1 Y) k# K, L( V9 ~2 t& K+ z
if(dispatch==1) //需要调度一个进程到内存中执行
: l5 F* ~/ a) v f4 y ^/ n0 ?{1 E5 \3 {" H! d* O9 |
if((*storage).p[j].askMemory < *spareMemory)
" g' i+ t+ a% R$ L {" b& ^{0 g/ {8 m* D* f
(*memory).p[0].askMemory = (*storage).p[j].askMemory;
6 g& ?% z. r e) U(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
5 H% U! Q2 V4 B/ N3 K7 ?% w: P(*memory).p[0].computeNum = (*storage).p[j].computeNum;
- O! K$ [) O4 C6 X- \4 g# {! d(*memory).p[0].ioNum = (*storage).p[j].ioNum;
7 S1 H- J4 W8 [1 E% }1 ^(*memory).p[0].processID = (*storage).p[j].processID;
2 q: J, @% p4 \1 p6 @(*memory).p[0].flag = (*storage).p[j].flag;
" E" u2 s) m. [2 M(*memory).p[0].ioTime = (*storage).p[j].ioTime;0 f4 e6 W7 X9 d5 w1 q2 m
(*memory).p[0].computeTime = (*storage).p[j].computeTime;' t9 @, n4 m) C
(*memory).p[0].runningTime = systemClock;- O& {) G) I5 G: {# J) `
(*memory).p[0].produceTime = (*storage).p[j].produceTime;# ^8 M; Y2 N5 H& ]" C
for(i=0; i<(*memory).p[0].ioNum; i++)
% }3 {, i4 D' d+ _* _(*memory).p[0].ioClock = (*storage).p[j].ioClock;& {5 J8 B- W F
for(i=0; i<(*memory).p[0].computeNum; i++)2 T6 m7 t4 B6 Q1 }1 K
(*memory).p[0].computeClock = (*storage).p[j].computeClock;
& W& H# ~" L. i$ U; Z(*memory).proNum=1;/ K" J# P+ ]/ S8 q2 b( V. e2 @
*spareMemory = *spareMemory - (*memory).p[j].askMemory;) V9 X8 t* w% `, b$ C7 c: [0 f
produce_one_task(&(*storage),j,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程8 N9 z- Z L$ B4 P
(*storage).p[j].produceTime = systemClock;
) ~1 @) A" Z, ?, y' I6 yMAX_COMING_TIME = (*storage).p[j].comeingTime;
5 }& n! J& \" a9 I# l( VwaitTime[j] = 0;
& F1 u3 p: z* n4 [. B/ VHR_ratio[j] = 1;
% c2 M0 k* i! h, T8 F' `7 J}' ~4 P; Q: j8 e, q' u
else0 B' w. C+ r* |; `: V
{- D! Y& T3 V7 y6 \1 B4 a* d
printf("A process ask for a memory overed the system capacity\n ");
: `, S( \/ V$ _% L s2 {1 Oexit(1);
6 d6 x! ^4 }: s5 ~ T$ n}# r' ~5 c& w; z+ h7 r
}4 t/ w g' x8 v/ S: O" n0 `+ p
return 0;' Q- j! ^, i2 ^" c5 `
}
& ^! a+ I. ?" ?0 a' @' \int PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
6 ]3 S. u7 Y7 q' b0 N# N{
. G% d1 |8 V7 t# V6 \ nstatic int compute=0,waitio=0,change=0;
7 Y" U: y/ m0 C+ b2 ?* Fstatic int computeLast=0,waitioLast=0,changeLast=0;
E1 X0 l0 |- W6 Kint i=0;
- I# D9 V/ s c# h& ?4 Hif(draw==1)
$ y# D) W) A2 X- x{$ i6 M" l' }6 `4 C
//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);+ N0 _ @0 ]. N9 e* Z0 V
drawPerformance_PF(800,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
4 F0 ~* b3 ?9 R! ~1 e' o8 Z) w
/ q- N! d0 O2 t; Q. Z. j' W3 }7 Q9 e* M$ @/ Q0 I% O: \8 F
computeLast=compute;( S8 T0 P5 a) ` @
waitioLast=waitio;* d0 D& D) U" O* f8 B" g# H
changeLast=change;
1 C1 B! m2 L( Y: T( [. q}
$ [9 F# o' d3 Pif((* memory).p[0].flag==ready)
; [) w" O) i/ n5 g- W' b(* memory).p[0].flag=computing;$ x- z% ], z9 d; m9 s& i; a+ t6 Y4 A
if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)
( v& f- Q$ Q9 P, |7 g{
; r! `. p- ]9 X1 [& H0 |2 C; ui=(*memory).p[0].computeNum;
A+ t0 c8 z, O t5 l3 nif(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed
" C6 T& t) |0 Z V' p! z2 n! j{
) R* n4 K' V5 z8 W- g! g; j, X(*memory).p[0].flag=IO_waiting;$ y5 q* Y; U. c- @. |
(*memory).p[0].computeNum--;
# |% t/ s1 G% Bchange += exchange_IO_Compute;
8 o- E2 j9 V+ W4 B% c' c0 e2 Wcompute++;5 N0 L7 b: l( v' q
}5 `; |0 e8 E0 x$ W9 l4 s9 q
else
7 p8 E: b" p( \+ x* m% @% c7 d{
. J2 Q/ }+ e" C+ V, \compute++;# f! V+ ~. S3 T' W/ n# u
}# k! L, R. w, Q4 H5 b! C# c5 h9 _
}
7 d5 V/ U7 e( z# x) N6 y/ O. Lelse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
: Z, g1 C! K0 `{
5 z+ L9 T7 S: O2 G1 F: O; [$ p6 k/ A' M: `& G5 w1 t
i=(*memory).p[0].ioNum;, z- N3 E: u; L" l/ @
if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed
( y1 I( W K$ \7 b1 B( P$ I{
) I+ L# b$ N# l) t(*memory).p[0].flag=computing;+ v' ^* J- y4 l1 Y" F1 m4 H2 w
(*memory).p[0].ioNum--;" ^. y0 D: |+ G3 q" N
change += exchange_IO_Compute;; P5 G, k! d. P i
waitio++;
8 ?0 l8 f' L8 m% m8 K& z1 @}
% ~- L7 b- b/ Y6 L' |; Y7 T" Kelse6 e8 _5 H0 h# K' B
{
; g5 D; Y# A7 U6 _+ ` L Kwaitio++;; m, Y$ m$ w, ^- O
}
* X! ~0 N$ Y/ T( I. P}
: a4 C+ m- L7 P8 N3 N9 v- selse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)
, j7 V9 H1 e! i{; C2 C |0 c3 ?% N
(* memory).p[0].flag=IO_waiting;
1 @) P E6 r! B$ s' Q0 pchange += exchange_IO_Compute;1 ~' B& ], V. m' h) ?7 L
}9 O' r$ A$ v, Z) P
else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)3 B% f, R9 v& U: P4 A7 C
{/ m3 [) y$ ~) x; Y2 J
(* memory).p[0].flag=computing;( D3 q3 j5 U. o' L* v0 p- S j
change += exchange_IO_Compute;9 x% y+ ^% O$ s, r+ ^
}
) R4 G' @3 n: _7 ]" b5 H& Uif((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0) //一个作业已经完成5 I* D1 q# R" N: C$ z4 t
{. F1 E. N2 w# z& U
(*save) = (PCI*)malloc(sizeof(PCI));
* s: G& p/ K2 n/ Q% g9 L(*save)->next = NULL;- `$ ~& P: A, \% Q5 ?7 U8 g
(*save)->processID = (*memory).p[0].processID;5 z# D# B- [+ E
(*save)->comeingTime = (*memory).p[0].produceTime;
( a4 C, k1 z. \- w5 ?3 w7 ~+ K(*save)->askMemory = (*memory).p[0].askMemory;8 E/ e! @( f/ N4 @% D! T5 b
(*save)->compute = compute;
: j6 u; T' Q. t8 j) g! z- y(*save)->waitio = waitio;
6 B& X3 b3 u% ?) R! H(*save)->exchange = change;4 E$ ?4 Q8 [# M6 J; W% d8 p
(*save)->completedTime = systemClock;( ]% p: n, `3 [" ~ Y0 Q6 E* u
(*save)->runningTime = (*memory).p[0].runningTime;( Q0 u0 Y% u7 t6 x1 C: j
*spareMemory = MAX_MEMORY; //*spareMemory + (*memory).p[0].askMemory;7 T& m& g* f* R. o z
compute=waitio=change=0;( K) b( H4 O% _' j: N
computeLast=waitioLast=changeLast=0;, r! m( U" E( b. i
Priority_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));
2 C& a5 p/ }9 j: t: P7 ~change += exchange_process;
4 b/ h7 P4 I! m+ g9 b# ureturn task_completed;7 a+ g8 ]7 Z, p @# g- L
}
" @$ c2 d3 T" e, ^else
. e" R& j# G' i+ ^5 e; |return task_not_completed;
6 {! g" B0 M, c6 j4 N+ l}
0 N7 K8 U7 S. ^6 B2 B% dint Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)
6 q9 q6 \! m; Y2 I{
. y$ k; R/ B6 Wint priorityNum[initProcessNum],i=0,j=0;
# K* l6 B, p3 W* G) Y6 e: C' y" qdouble temp=0;
* r5 |, c8 ^1 ]; K8 N1 s. nfor(i=0; i<(*storage).proNum; i++) // setting priority to each process
' O- j7 ~) D: Z! E5 Z/ B{* [2 L/ \/ `% C }
temp = (*storage).p.computeTime/(*storage).p.ioTime;
$ X, d, j, A4 Fif(temp > 0.8)
9 j j7 j. U. R! S& W' s( x# NpriorityNum = 6;+ P5 P8 z: @8 n; d. P
else if(temp > 0.7)
8 x; k; j6 [ ]% f5 S, {priorityNum = 5;- a i3 f) n+ C; K& W3 J+ i5 J4 ?0 W
else if(temp > 0.6)
8 o y$ t6 m6 K/ w# P4 v9 ~2 spriorityNum = 4; d- r2 ~) ~4 F' p# l$ u9 X/ b
else if(temp > 0.5)
' r7 w' E- a* g3 f) VpriorityNum = 3; ?* E; ~% f& Z; |) n" g5 n
else if(temp > 0.4)9 s1 k7 }+ \8 _! l4 M% H
priorityNum = 2;
( n3 Q* Q- q/ [9 {2 Zelse; x ^$ d# B) T- k9 k4 T) [$ s
priorityNum = 1;$ [) f. j7 W# I4 S, ~/ g
if(priorityNum[j] < priorityNum)
$ h7 C$ v! W! _! M3 I% V4 P+ \j = i;7 J$ f0 ~% m! F9 Z
}
6 e% u0 R! \9 U( W7 X: A1 T/ Pif((*storage).p[j].askMemory < *spareMemory)- Q+ |+ P ^ i. Q* x# w: j( h3 c
{
" R. `5 |9 b8 n' k. \; e(*memory).p[0].askMemory = (*storage).p[j].askMemory;
' H( \- d9 H& p) R$ u5 q, a(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
* h5 c! f% w8 }, g(*memory).p[0].computeNum = (*storage).p[j].computeNum;
5 h. |; b, z! _6 I5 T(*memory).p[0].ioNum = (*storage).p[j].ioNum;2 i4 J* i Y. }! b- E" s# v4 x
(*memory).p[0].processID = (*storage).p[j].processID;
, ?6 A2 n/ R# A2 w0 I: v& B(*memory).p[0].flag = (*storage).p[j].flag;9 _" p) T. |* e3 |
(*memory).p[0].ioTime = (*storage).p[j].ioTime;* D9 R( `* g+ l' D
(*memory).p[0].computeTime = (*storage).p[j].computeTime;5 h+ Q9 b1 ]$ u$ U; d7 i9 W. z* q
(*memory).p[0].runningTime = systemClock;8 \0 j) r8 d& o# ] I, n
(*memory).p[0].produceTime = (*storage).p[j].produceTime;
4 R( b( v. A# i1 E( V( C* C+ [ \for(i=0; i<(*memory).p[0].ioNum; i++)
1 N- N: K0 M f% d' D(*memory).p[0].ioClock = (*storage).p[j].ioClock;
3 @ L+ h% o3 |) f4 e1 {, C; dfor(i=0; i<(*memory).p[0].computeNum; i++)
$ X4 \) o8 U/ L r(*memory).p[0].computeClock = (*storage).p[j].computeClock;
) [% e- c1 w* _" V. H. R(*memory).proNum=1;, ?2 N; x7 m, A% j, d, o9 z
*spareMemory = *spareMemory - (*memory).p[j].askMemory;' Z6 C: |! C6 Z; d/ J
produce_one_task(&(*storage),j,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程
; \# s m( [* |2 p3 tMAX_COMING_TIME = (*storage).p[j].comeingTime;
g+ c) y! B7 {6 t3 _}8 l. `$ J! U" G9 E
else
: w7 p. S5 l# d& @% b{' ~" m# b6 H( A( [# Y4 b
printf("A process ask for a memory overed the system capacity\n ");
c# N% u. S! E' }4 I0 bexit(1);0 W. E! V+ o( _$ A; ]
}2 _* X, j |, s! d! T, p" h$ ?. n5 F2 C
return 0;
) P6 c7 D2 c, L+ L}+ ?/ c9 e3 I% Y, \) M) D
int ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
6 b+ ^3 R& H* {: I{
/ F8 M# ~- x. R* M2 Q) i( gstatic int compute=0,waitio=0,change=0;
3 L8 b4 d d2 {static int computeLast=0,waitioLast=0,changeLast=0;* t/ V- Z& x) f* s! r
int i=0;
; T5 Y! p9 q& n, b v+ @if(draw==1)
) M D1 x& s& o0 T! j{
+ U& \) Q1 f% E8 v; c- _//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
, \1 T. \6 e! R/ odrawPerformance_SJF(0,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
X7 P2 j( B1 m1 h8 e
3 b7 O( i% y, U# P" _3 J$ ~. R# b. H# `" M( g
computeLast=compute;0 a0 a5 L# C% h6 F1 w
waitioLast=waitio;) ?" B" @ d3 P% P$ M1 b8 ]& H" C& Q
changeLast=change;- t* x n# H' C# h
}
0 [& j9 ?* L2 u( D; P9 B$ Iif((* memory).p[0].flag==ready)/ @/ Z) Y- X. u' `+ y' h% E
(* memory).p[0].flag=computing;
5 k5 [2 P! N* g3 q& ]4 nif((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing): k, }0 |4 o5 u* a( F4 g
{3 _9 \' x! H3 ]0 X
i=(*memory).p[0].computeNum;. _- t6 _$ k5 m4 Z S
if(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed
8 e9 R9 y4 c9 L$ H4 @1 ~{, @1 P' G$ ~+ R% n( o6 ?% V
(*memory).p[0].flag=IO_waiting;; K1 S5 N) t) P
(*memory).p[0].computeNum--;6 `$ P. o6 N+ v+ O
change += exchange_IO_Compute;
3 m7 x- }6 s$ i hcompute++;
$ [, `. b. A1 a4 t3 O5 g% O}
" |# o9 \. g# d8 A. ~else
; y! M" k8 ^) P, j" I{
6 M8 ^0 S4 e+ Ucompute++;3 W# f( `# g0 \7 r& ~3 z" v) ^9 O
}
; ?; R& ?( l% N" R, @! y& b}
0 E( G/ v9 }& D' t: Zelse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
3 |' \$ i* X# B/ T) e, t{
9 l! ^8 x; \2 p) F( y J: E( I4 f
i=(*memory).p[0].ioNum;% X4 n1 M% U; J9 k y9 [
if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed
3 T) R8 M* j2 H- h; G+ C{ ?" P9 k; A# w) b k8 `
(*memory).p[0].flag=computing;
* e4 c4 i0 b3 \ c4 Z(*memory).p[0].ioNum--;
, o+ v4 `$ l; ~. Kchange += exchange_IO_Compute;3 k( V" V8 h& ?, w- |
waitio++;; V/ d# c3 q! Y; H
}& E6 m3 K7 M" B2 [: F
else
' Q; q) _0 a2 U1 O( P _2 L{
/ n# j# `; e0 ?waitio++;
1 d3 s2 e# k! C' ~ \( k) E( J6 k}. q4 C! [9 @; l( y
}% A/ C( V6 k! G% w
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)4 R8 n9 F- Y5 ~0 G$ `7 z( c
{& q, q$ Q0 `- G8 C
(* memory).p[0].flag=IO_waiting;
% q* y( i6 o6 r9 Rchange += exchange_IO_Compute;0 ?6 }! E/ M8 r& `" L( J) N7 E; x
}+ Y$ Y7 Q# e6 ]# |- k
else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)
3 M( X' u8 ?) E: u0 v+ z{- {; T: `" f6 [ J5 x4 B/ ~
(* memory).p[0].flag=computing; U; ?( q+ y) O2 g$ Q5 s, d. V
change += exchange_IO_Compute;
3 v0 G1 X4 N/ [0 S}
6 M8 n0 g# R& J; v8 g% `2 u/ qif((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0) //一个作业已经完成( G. g4 G% @6 `# U
{% O4 j. t, U6 |& r) H: A
(*save) = (PCI*)malloc(sizeof(PCI));
9 ~( s7 @: X( e8 Y; e t5 s I(*save)->next = NULL;
$ Q$ u2 z, U1 K/ \(*save)->processID = (*memory).p[0].processID;
% Q1 t& L+ t+ E, G0 Y4 ?8 q(*save)->comeingTime = (*memory).p[0].produceTime;: v! h5 Z8 b/ d" _7 \
(*save)->askMemory = (*memory).p[0].askMemory;
% P) F( O2 G7 Q8 P4 H! F6 X, B6 v(*save)->compute = compute;; `, t X1 M" ]: q/ Z
(*save)->waitio = waitio;. K+ w, p0 H1 I+ p6 Y* q
(*save)->exchange = change;2 l6 i6 Z2 r1 A" W* H
(*save)->completedTime = systemClock;
, A T6 S" _, E7 u(*save)->runningTime = (*memory).p[0].runningTime;$ p2 U5 x! a% Z1 A
*spareMemory = MAX_MEMORY;//*spareMemory + (*memory).p[0].askMemory;+ E/ D z( |4 i" ~. t0 [/ f! U3 ]
compute=waitio=change=0;7 O# P$ d& ?/ g
computeLast=waitioLast=changeLast=0;7 I7 y2 a4 W. a' m, q
SJF_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));
[0 O) `" {) B3 G( M& M/ c6 Jchange += exchange_process;. `9 I/ ?. d4 f& Y
return task_completed;
/ m: ]' r' Z9 f& z5 D( c8 K1 k}1 r. V5 ]$ G; w* l4 [; B3 m
else, U! o& X0 ]) _# w. D# B
return task_not_completed;2 N/ D% S1 w# A6 u& N2 a
}
- x d/ d9 {3 Vint SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)- b9 V9 I7 K* X- E
{/ D' L: M1 l3 Z U
int i=0,j=0;1 _( p( w" t) p" A
for(i=1; i<(*storage).proNum; i++)
, p! i8 S* M; @0 p: }{
( O8 m# a/ O3 Xif(((*storage).p.computeTime+(*storage).p.ioTime)<((*storage).p[j].computeTime+(*storage).p[j].ioTime))$ {. d& P3 p1 X4 v
j=i;( K/ o4 w" x( H5 [
} K' j: z3 g/ F% |
if((*storage).p[j].askMemory > *spareMemory)
! p# s/ U, m0 G* \{
- i. ]8 z6 [ |& x) |9 fprintf("The memory asked is overflowed than the system memory.\n");9 O) K$ [% _6 z$ f( i8 K, ~! c
exit(0);
9 i" J- Y% _8 H; b5 \}
6 q! z. F: {7 P belse
8 L2 g' q5 @- J{
4 f9 E# s' B. c6 \- F2 y- L+ g& {(*memory).p[0].askMemory = (*storage).p[j].askMemory;, D% {) E* Z& m; {3 I8 V
(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
4 L; |, S: R) f1 |4 z! o- [1 \(*memory).p[0].computeNum = (*storage).p[j].computeNum; q4 D! G( z/ @4 z" }# D
(*memory).p[0].ioNum = (*storage).p[j].ioNum;$ J7 ^1 w/ v$ ?% q0 T
(*memory).p[0].processID = (*storage).p[j].processID;* k: X7 I, ]7 H
(*memory).p[0].flag = (*storage).p[j].flag;/ @& j, F' O3 q, k( t3 _
(*memory).p[0].ioTime = (*storage).p[j].ioTime;; A# K% {% M1 a: L' L F* }& u
(*memory).p[0].computeTime = (*storage).p[j].computeTime;
]& W! Q3 ]7 D! p$ A( D(*memory).p[0].runningTime = systemClock;; t7 U' ]1 B4 e4 j o$ _
(*memory).p[0].produceTime = (*storage).p[j].produceTime;
6 C+ j( g+ e, M& dfor(i=0; i<(*memory).p[0].ioNum; i++)% k/ d$ S# |4 ^+ S1 `* V# \
(*memory).p[0].ioClock = (*storage).p[j].ioClock;
( ^8 H0 \6 [- f3 V" V# c" _for(i=0; i<(*memory).p[0].computeNum; i++)! Z- w9 _) a& Y, C* s
(*memory).p[0].computeClock = (*storage).p[j].computeClock;& Y1 v. L3 m8 a! F& P' ?
(*memory).proNum=1;3 [7 w6 y0 g' l9 M; q% U# O
*spareMemory = *spareMemory - (*memory).p[j].askMemory;
% z& Y+ d3 M/ j! k% Sproduce_one_task(&(*storage),j,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程0 A9 s; h6 o4 a
MAX_COMING_TIME = (*storage).p[j].comeingTime;
p7 c5 Y) N- ]' j} k7 M3 r: `) A* T
return 0;/ k) _- D5 V' X" c/ e
}( P; n9 o$ N# W! Y- f
int TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
3 } d6 A* A1 G2 [{( M6 w. P; i/ h$ \5 o
static int compute=0,waitio=0,change=0,clockSegment=100,poi=0;
8 k! H4 H q/ ystatic int computeLast=0,waitioLast=0,changeLast=0;
4 S* h, {3 h; b. {5 Qint i=0,j=0,k=0;
, R, N/ f; X% y* z0 b$ N( z2 Fif((*memory).proNum<=0)& I( q3 ]# B+ T9 ?3 |
TimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),-1);2 x2 D3 K! o O- r+ u
if(draw==1)& _8 U8 g" m& h9 E
{
, T' _- w1 k E//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);$ `7 o- h: G8 p2 m9 {3 e+ o! e
drawPerformance_TT(400,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
r6 f% i. E$ `: G$ q/ p! k( ?$ ?+ T S' ?$ u
, j* ~3 g( I8 C5 X, d1 xcomputeLast=compute;, E, |$ u& R& m
waitioLast=waitio;3 @: e, A) T3 `" V2 u9 C- j) `, n1 z
changeLast=change;
# l. z6 z+ l; E" {9 X" ]}
4 Q2 o1 Q/ z; q; d+ \3 P6 [5 ^" ]if(poi>=(* memory).proNum)
* I- U' A6 P' V( zpoi = 0;
) R( }- h+ |8 L- n( nif((* memory).p[poi].flag==ready) u+ T" I; V& P) ]$ d2 G
(* memory).p[poi].flag=computing;
' x3 M( j3 R' W8 _if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==computing)
" I; |: Y7 C9 h8 \# x( j% n{5 g" @! S0 ?& }* K1 F p4 z0 K, Q* X
i=(*memory).p[poi].computeNum;, X4 i2 z- \& _ @
if(--((*memory).p[poi].computeClock[i-1])<=0)// one compute tase is completed! Z* ~8 A0 L5 [: K, t2 Y
{# O3 _6 f! s1 }- M" A3 t
(*memory).p[poi].flag=IO_waiting;" L" }4 a5 H3 |& w! o: A
(*memory).p[poi].computeNum--;
; ` l+ f) ^8 Dchange += exchange_IO_Compute;" l5 Z+ x6 l( i" l$ F" y$ s7 g' A
compute++;
1 F# k b+ X' c# }1 W}+ F8 X. N6 [+ U+ ]
else; z+ m+ Y7 ?" [! Y' T5 G& Q
{1 R& B4 C9 b: r' D2 i5 x! }
compute++;
' b' M) ], q9 h; P}" F% O6 Q3 A3 p% w& e6 G
}
. W% J1 |. U/ I- t$ u* r# v, D0 R6 gelse if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==IO_waiting)( }; k2 a% s1 g7 \; N. H
{
. D) w; O/ f7 ?
3 U9 B) @2 t5 k; M* ri=(*memory).p[poi].ioNum;
7 H8 u1 [1 R/ {: R- [5 c! Qif(--((*memory).p[poi].ioClock[i-1])<=0)// one io tase is completed
5 G* _. A, C# X* Q( L8 Z{, i/ P* G- }9 \# U% ?# {
(*memory).p[poi].flag=computing;
/ W7 t8 E, k) |' v. i. C- d% Q(*memory).p[poi].ioNum--;
( d' J& V. ?4 Uchange += exchange_IO_Compute;+ Q) \- y: J6 p- T9 [) |9 E
waitio++;1 B' M3 S' C; v
}8 j s9 `& S* c' b7 G9 s
else, ]% Z' {2 @5 {3 X; G* t9 @: l( K
{
. D- P3 M F( z/ |! Lwaitio++;, x5 z( g6 L8 |- \- h3 I
}
0 g( a* |3 ~3 s: ^}
5 ~7 |4 D2 ]0 Z$ gelse if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==computing)
, ~$ {" u; }% e) d: }2 e& x{, \5 K" S/ E# D( l: Z. A( j0 j& [
(* memory).p[poi].flag=IO_waiting;
* }: h/ g: p( a Gchange += exchange_IO_Compute;
* j6 t& @% r. l! ^}
: q1 Q7 b$ S1 |& k8 delse if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==IO_waiting); {$ d! C( i, f2 r6 ?
{
/ d8 J. p: g# f( Z; g(* memory).p[poi].flag=computing;- \) |8 m. M* k2 h
change += exchange_IO_Compute; _0 T1 K2 p0 J
}
- M) @/ z" L1 d8 _1 P: p4 H- E7 Cfor(i=0; i<(*memory).proNum; i++) //其他等待io的进程可以并行推进/ o7 J) O& X8 B6 l9 p# Q
{
. m( t0 t* _2 A5 J; L& r9 W& aif(i!=poi && (*memory).p.flag==IO_waiting)
% _! X1 V. f$ O, Z% U" b. `, p{" S: P# k! a' i4 I2 U. d$ P9 ?
j=(*memory).p.ioNum;
) U1 d2 c0 }1 \% Jif(j>0) t7 J/ q$ X8 A8 j; h
{
3 B. n3 P" W* t& d$ u, Mif(--((*memory).p.computeClock[j-1])<=0)// one compute tase is completed/ A/ Z. z5 x7 N& D* D, Z
{
- C2 [$ U8 s+ a+ ?) F+ x, ?% ~: i(*memory).p.flag=computing;6 r+ w" u/ y `: R8 U
(*memory).p.ioNum--;
6 [! N6 G% q; n; K |* L) Xchange += exchange_IO_Compute;
) V# a' l2 u3 {9 T7 l}
- r' W( U a5 u- v( U* y1 X}
2 m, I X, X; i+ d( b) j9 W}
" t2 T# G3 i0 t0 X4 n}
+ N2 A' A, `( B$ n/ `for(i=0; i<(*memory).proNum; i++) //处理已经运行完毕的进程
7 e5 d T; U; C# P$ m& F# q3 K{
0 J1 D! o& G# Oif((*memory).p.ioNum <= 0 && (*memory).p.computeNum <= 0) // a task is completed
- O* m- G/ @8 a/ K; g( H2 d- ?# u{
3 P- a# E, m; N3 x: _+ j, h(*save) = (PCI*)malloc(sizeof(PCI));; W& v" X) i1 }" H; ?" K" G% h4 c
(*save)->next = NULL;: X7 Z4 Q8 f; \/ H: r" t H
(*save)->processID = (*memory).p.processID;
! H+ J0 ? ?8 v, o! H(*save)->comeingTime = (*memory).p.produceTime;8 D M, K* X- i$ \- g
(*save)->askMemory = (*memory).p.askMemory;* T$ s$ _2 X5 T' m+ t
(*save)->compute = compute;
/ k' ~0 n( k! y$ S8 I; \1 Q(*save)->waitio = waitio;& }; ^" ~7 v+ K- q9 J) l
(*save)->exchange = change;3 o) c8 S# n$ p& G5 j2 l
(*save)->completedTime = systemClock-(*save)->comeingTime;
4 P! D) Y2 N- v' C1 P" O& d- b(*save)->runningTime = (*memory).p.runningTime;% p! o! a4 d6 l M9 e
(*save)->completedTime = systemClock;
& }+ V2 l0 F8 m V2 k*spareMemory = *spareMemory + (*memory).p.askMemory;
' z# D& z# v* S4 H8 E% Zcompute=waitio=change=0;4 m$ R3 P+ a; L% L
computeLast=waitioLast=changeLast=0;
/ u% b+ k9 y: \% z5 hif(TimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),i)==1) // 调入一个新进程进入% g. ]* D; Q+ L2 ]! S
{
9 P9 |( x8 P4 a) K, Tif(i==poi) //占用CPU的进程已经运行完,将时间片分给其他进程
& E. n% i2 g" f' M{
8 Q) z7 f+ S" T+ xpoi++;
2 z9 E/ D9 o, Z& \3 H2 ~ clockSegment=2000;
5 U8 j$ T2 l9 Z4 c7 T# h}
$ E7 o9 R H6 }( p. I/ s}
, u4 C5 G/ u' H# y' Velse //没有足够内存调入新进程( a% V$ ^5 v% h. ?
{
# S; o! ?1 ^+ K. u5 h( Kif(i < (*memory).proNum-1)1 ]1 j) W" o' C' C& h7 U
{
0 t `8 D: o" J) v& ^: sfor(j=i; j+1<(*memory).proNum; j++)
& l5 E- D: F- ]' y# ?{' q* j0 ^4 a8 f1 x1 v/ Q
(*memory).p[j].askMemory = (*memory).p[j+1].askMemory;! w8 ~6 L( H) q
(*memory).p[j].comeingTime = (*memory).p[j+1].comeingTime;1 L x3 n& K1 V& x) M
(*memory).p[j].computeNum = (*memory).p[j+1].computeNum;
. n4 q" p* p$ ~7 T(*memory).p[j].ioNum = (*memory).p[j+1].ioNum;6 F/ B8 U) O* e, v! l
(*memory).p[j].processID = (*memory).p[j+1].processID;
1 B3 g( T/ I, \" \ v5 ?(*memory).p[j].flag = (*memory).p[j+1].flag;
m$ ?1 |( [( |3 {/ k(*memory).p[j].ioTime = (*memory).p[j+1].ioTime;
# e7 c' p5 ]3 b P% |" h(*memory).p[j].computeTime = (*memory).p[j+1].computeTime;
( H. ^$ m% J) j' f(*memory).p[j].runningTime = (*memory).p[j+1].runningTime;
" [ g8 P0 z/ m: ?! `- H! l! ^(*memory).p[j].produceTime = (*memory).p[j+1].produceTime;
7 N1 ]* T- q3 G! j- `( c4 v(*memory).p[j].completedTime = (*memory).p[j+1].completedTime;
3 g( R0 r/ ?7 Kfor(k=0; k<(*memory).p[j].computeNum; k++)
3 ]- F" w+ y5 e(*memory).p[j].computeClock[k] = (*memory).p[j+1].computeClock[k];& _7 D; v8 C. \$ D$ G. l0 l- ^
for(k=0; k<(*memory).p[j].ioNum; k++)
5 F$ l, ?" g3 i2 T(*memory).p[j].ioClock[k] = (*memory).p[j+1].ioClock[k];
8 B# y8 N/ r# w}0 y! k% I' F9 \4 g
if(i<poi)1 G2 H. @( `& o6 l3 C
poi--;: X1 i; ]& I; r
else if(i==poi)
/ M# n! ?- O8 AclockSegment=2000;% _4 U% V( W6 W. B# S& R7 |1 V
}1 g3 Y% w4 k) Q, m7 |2 R
i--;2 r1 X |' y2 r. u6 o
(*memory).proNum--;# E! z3 b( c k2 f/ l7 @7 x6 K
}
0 a6 d. H) D" W" d. H E9 Greturn task_completed;
5 u: }# U; a! {- W2 t, I}
5 F0 h8 k% e+ l @}0 z% u1 @7 p+ J- s4 G
--clockSegment;
, G0 E S* w( @: ~! U+ Iif(clockSegment<=0)2 B. Z6 P7 Q& k' I9 |
{
% k. k: r/ Y/ s: ipoi=poi+1;
- |( \$ j" k4 [4 A+ m. U! R4 Mif(poi>=(*memory).proNum)3 p; ]% v2 y) m" c' |
poi=0;8 B, A1 O/ A" ~2 ?2 {
clockSegment=100; E0 B" [# @( z! k( K
}
$ `! o/ j }# C7 P5 _; zreturn task_not_completed;
( @! I C* \ ]$ U J W3 K4 y} d; g t% b/ A2 S, T' ^ O
int TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos)
$ ^! f$ `' e) }' i- q{
; l v" }7 D2 v) \$ h1 \int i=0,j=0,k=0,flag=0,translation=0; N; o$ w% f7 @/ J2 Q6 ]
for(i=0; i<(*storage).proNum; i++)+ p ~$ p- f* x! K4 a
{
' u4 o8 r* }/ c% E" wif((*storage).p.comeingTime>MAX_COMING_TIME)
7 J8 F0 m. g5 ?4 C, j7 [MAX_COMING_TIME = (*storage).p.comeingTime;% B+ D" N1 z; \8 ^! Y/ Y
}
% |1 O3 j; K% J2 v! M$ q+ xif(pos>=0)
0 I, j0 m1 u1 J: Q/ y# Q: v{
/ Y8 X2 I n: B8 t+ T( Z1 k. Jfor(i=0; i<(*storage).proNum; i++)
9 v! F/ j2 I: z- ` u& e8 D{4 p+ Z: ~9 ^- l7 ^. Z
if((*storage).p.askMemory <= *spareMemory)% V* F5 w: T8 v$ f; F0 \3 o
{5 I2 {( y1 I1 I) [
j=pos;
# R- H1 p9 h- A& d0 G$ a& O9 X0 F(*memory).p[j].askMemory = (*storage).p.askMemory;& g2 H% v8 r; x# z/ r
(*memory).p[j].comeingTime = (*storage).p.comeingTime;
" P" } K9 q" R(*memory).p[j].computeNum = (*storage).p.computeNum;. U$ Z: n: s2 V/ C
(*memory).p[j].ioNum = (*storage).p.ioNum;# f9 N7 h9 [0 W7 e+ I: z' k* E
(*memory).p[j].processID = (*storage).p.processID;5 R8 n6 C5 Q/ D, Y
(*memory).p[j].flag = (*storage).p.flag;- @, O, X/ G9 F/ w, S. p0 Q
(*memory).p[j].ioTime = (*storage).p.ioTime; [# _: O' t5 N% U
(*memory).p[j].computeTime = (*storage).p.computeTime;4 `- H9 U; b) ?8 J
(*memory).p[j].runningTime = systemClock;8 C9 w9 I4 r$ J# |' q- c
(*memory).p[j].produceTime = (*storage).p.produceTime;
" ]! c: ^% _/ T* t2 kfor(k=0; k<(*memory).p[j].ioNum; k++)1 `8 {: J3 T# w* G6 K9 J* d. i9 W
(*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];! w- j- ?$ P" B. v1 u
for(k=0; k<(*memory).p[j].computeNum; k++)) f- M/ D: v! n3 l! X
(*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];8 z% _# ?+ r/ `& E, o$ e1 e: c
*spareMemory = *spareMemory - (*memory).p[j].askMemory;' {* X7 r, y/ z) v
produce_one_task(storage,i,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程
; F$ D, |* \! t( x$ dMAX_COMING_TIME = (*storage).p.comeingTime;
# w3 _1 w* _; N; ?! K# rtranslation=1;2 d* m% T5 D$ k$ ?& e
break;
! P4 c5 F& D0 {9 Z% ~. @/ _( u}
, r) f/ d+ L8 g, Q}: R2 P) k6 k& A5 p" s! ~
}# p) X: t) {) b5 |% c: O6 j
else |& ]+ T3 u( Q- {4 z, L
{, T/ a7 h# b' ^. ?- ?3 [* h
while(1)
' t2 E+ w$ N1 S# j6 K{- e8 f1 W6 r% t; \' }' R! f. K1 Y
flag=0;. J! Y5 s" z% V; n b
for(i=0; i<(*storage).proNum; i++)6 E# T4 b7 g* Y* S3 a
{
- l5 s, K( b1 {% t& \% S4 B! W4 Gif((*storage).p.askMemory <= *spareMemory)( Y5 [* c" x& b1 O
{$ F7 t! ]1 g) w" S
j=(*memory).proNum;
) W4 p' u. j% o$ H3 U(*memory).p[j].askMemory = (*storage).p.askMemory;9 n5 m$ g2 T9 I0 L' k: m& E7 g% l
(*memory).p[j].comeingTime = (*storage).p.comeingTime;4 a$ ~- q% T. ] U9 @( G/ {9 T
(*memory).p[j].computeNum = (*storage).p.computeNum;/ a8 q! t9 }. S
(*memory).p[j].ioNum = (*storage).p.ioNum;" |9 t0 w v2 y* b# l+ g) y
(*memory).p[j].processID = (*storage).p.processID;; N+ U" v" d Q9 q. q6 B! n
(*memory).p[j].flag = (*storage).p.flag;
# b* l; y0 _7 c0 `(*memory).p[j].ioTime = (*storage).p.ioTime; |, l; }! t2 [
(*memory).p[j].computeTime = (*storage).p.computeTime;% [3 g. F$ B) o7 ]# [7 g* r! D
(*memory).p[j].runningTime = systemClock;) q6 Y; p: s$ h. b: t, B" C- U
(*memory).p[j].produceTime = (*storage).p.produceTime;
, j5 @. z2 @* G& u1 b6 t9 \for(k=0; k<(*memory).p[j].ioNum; k++)
5 ^8 \5 F8 [' t0 x(*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];
- T+ A3 {/ F6 K6 L* o6 Dfor(k=0; k<(*memory).p[j].computeNum; k++)
6 [# y0 i u8 F* j: \(*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];
8 p! ?8 T) [! P/ C+ Q) J(*memory).proNum++;
v E$ U( Z# c8 h5 a*spareMemory = *spareMemory - (*memory).p[j].askMemory;" P# M. C- b! W5 r0 ]1 i4 c
produce_one_task(&(*storage),i,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程
8 z, @/ L/ ^/ i y4 E) TMAX_COMING_TIME = (*storage).p.comeingTime;
$ R' L2 w- p5 s7 w( Iflag=1;4 L8 ]) I) _6 X, p% O: b
translation=1;
$ Q. b' z# R' }; w5 B}
+ s% {- L, H2 y: ?& L}
; [4 q$ h' F$ w$ `+ H. V& Dif(flag == 0)
[9 ^; ]" }( l0 g. c2 d z0 ]break;
- q# C' I. D. E: f9 ~8 \}# z4 k2 u1 I8 M* |
}9 C) \$ [: ?" |, |7 p3 r
return translation;
$ `+ H$ c) `: H4 W}, I6 H- B4 d- T8 O6 Z* `
int FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw)- z. h3 Q- ?, n5 Q9 C" ?& [
{4 l1 S O( L: s8 [! X' m- |
static int compute=0,waitio=0,change=0,flag=0,flagiocpt=0;2 k& B- w& a) o A
static int computeLast=0,waitioLast=0,changeLast=0;0 ?6 [5 F( s y# K
int i=0;
% N( @, |- M2 A4 E/ c& Fif(draw==1)5 A& @- ^7 f) k- Z, q! @. G! j
{
' w( y! ~( D4 Z! ~# H2 J. R7 O//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
. {/ R6 d2 ^" V2 ldrawPerformance_FIFO(0,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
, M- A5 M) t8 t$ l! r% u1 s/ ~8 H! h) B5 T* [2 e4 N8 |% g5 k" M0 X
/ G- l/ Q8 l$ ?* v" @# X
computeLast=compute;( F3 d; q4 A0 s/ Z% n3 x5 j6 O
waitioLast=waitio;" N' ]+ R; \* I s; g
changeLast=change;1 k1 M" y! k9 |/ \: n
}
& E9 c4 j6 s$ Tif(flag==1)
) k; Y9 C9 z( u( \7 _( r{9 F5 i3 u/ I* K$ n6 U5 Y; D
if((*memory).p[0].ioNum>0||(*memory).p[0].computeNum>0) //task is not completed
3 C$ |4 f& s/ g2 u$ k5 m9 o$ S{3 P9 y7 R$ O# N, x5 }3 @
if(flagiocpt==0) // implement compute
- v- ]* Y- P3 ?{
. D6 G+ Y6 A: J, [- k7 W9 l; }i=(*memory).p[0].computeNum;% X0 K4 S' t; M+ I# I
if(i>0 && (*memory).p[0].computeClock[i-1]>0)
5 y: x/ L/ C, f9 x{: A0 g U' @1 N: T" Y. k0 u
if(--((*memory).p[0].computeClock[i-1])<=0)// ome compute tase is completed
/ P2 t9 e; x- `" x# Y) E{; a' K0 x2 C1 t$ m
flagiocpt = 1;2 K" Y8 V. G( w& g+ [
(*memory).p[0].computeNum--;
8 s% u) o) F9 \7 _change += exchange_IO_Compute;
1 }6 M9 p( n1 w$ }& [compute++;* D4 I; K0 S1 y |5 ?8 K
}
1 b: |5 X) x! j" o6 h* |else8 c9 m, M7 K$ t
compute++; i, a( P6 c6 y8 G
+ ^& e: G! x1 O z, _; `}
@1 N9 f6 m$ i; c6 |else
1 g" ~' h0 z* i0 B2 v1 ~/ uflagiocpt = 1;
. J/ g( ~( T% e, ?9 ~}2 n9 }0 p+ \% O+ i2 D
else //wait io
! o1 p! ~; E2 m( N/ Q0 ?* I7 R( x$ I{
9 l" y* s4 I2 [i=(*memory).p[0].ioNum;
- z x9 `0 U( [$ O" l: E$ s- }if(i>0 && (*memory).p[0].ioClock[i-1]>0)" K2 x" R8 [* w+ Q
{3 O9 n9 C! p2 T$ Y2 K( ~8 ~
if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed C A" \$ ]" l4 |: _' |1 r# _9 g
{5 J9 `8 i) C! V0 y" j; h
flagiocpt = 0;& T9 }8 v6 |1 O' D7 {8 D. H; {
(*memory).p[0].ioNum--;9 P/ c8 \( X; Z C6 O
change += exchange_IO_Compute;
: ]0 j1 [9 j: U; L; F- Qwaitio++;1 J/ {5 Z/ Y" I! X X
}
. d/ H$ \6 k) G, X) H& |else8 o( g7 {4 T7 e* Y. `1 }
waitio++;0 B2 R6 Y+ o6 ~/ ~' R2 X. e% [
1 u& [2 a* Z* s/ l
}8 d6 ]& j" M! a* b. U
else6 I: }0 E) C% B9 n" X- k
flagiocpt = 0;" A& \: C# {8 y3 \
}
* T, C- |' s# g9 a}( B! G7 G+ n+ o2 {
else //task is completed
. s: }) R1 y4 C{
3 L' K/ Q8 K2 A+ S% Y(*save) = (PCI*)malloc(sizeof(PCI));
& g- I7 `# o2 F7 L2 R1 C& H(*save)->next = NULL;
5 \. x6 G0 V2 ]. l6 Y8 q9 v) m5 y (*save)->processID = (*memory).p[0].processID;
# e* `; z; _6 ^+ P' R2 s(*save)->comeingTime = (*memory).p[0].produceTime;- f3 p0 N* e4 F# ]. ?; ?* {3 p
(*save)->askMemory = (*memory).p[0].askMemory;( ?* L0 ^6 B- _
(*save)->compute = compute;3 U! ^: J* N: Q# l6 a
(*save)->waitio = waitio;
- b9 W5 j @2 v6 H' X( B0 u4 I$ a(*save)->exchange = change;
4 a3 l% q8 x3 J(*save)->completedTime = systemClock-(*save)->comeingTime;8 |4 o8 C5 D# Y* L! a" l* e
(*save)->runningTime = (*memory).p[0].runningTime;8 k3 x% C2 b4 v5 r5 J/ V( v
(*save)->completedTime = systemClock;6 {) c E3 M, N/ @+ y+ t# A5 o
//*spareMemory = MAX_MEMORY;8 L& i: {! q( W+ L R( M
free((*memory).p[0].ioClock);2 M7 ]4 s; o8 u7 g
free((*memory).p[0].computeClock);( ?' z D0 R9 u* z9 i6 z
free((*memory).p);/ o$ y* r6 }0 y& X" U* {5 [
flag=0;
8 c/ H' V/ }! Pcompute=waitio=change=0;# |& \0 H: q% o0 g6 p: Q/ q' @
computeLast=waitioLast=changeLast=0;
9 U7 K& c2 f. t* |! ]# X" breturn task_completed;
# {' N4 l& o5 O% w% y5 L( u G}+ J0 L5 [ l* U' L) C
}. n8 Y3 t# h8 k. y3 z- j1 m
else
9 @ @8 Y5 m e% X2 r5 M' k{
9 [7 { R# r \; mFIFO_storage_to_memory(&(*storage),&(*memory),&(*spareMemory));3 b) W$ e) k# Z# G* N
change += exchange_process;$ M. a! E( s, `6 ]
//*spareMemory -= (*memory).p[0].askMemory;
: q+ ] ]( g) kflag=1;
" D* ]% r+ v# {6 ]2 [' _//showProcessInf(*memory);
0 r% n T1 P+ s y3 R: breturn task_not_completed;
& V& x# ^" i E$ _4 F# N* ~6 D- Z$ E$ J}% l5 e; S) n1 G( H+ x2 u2 I- B# ]! k) O
return task_not_completed;
0 i2 g/ S7 m- P2 c2 E+ h2 g}
/ j3 T4 [1 ^, R- y: Eint FIFO_storage_to_memory(processPool *storage,processPool* memory,int * spareMemory)
) W# ]6 t3 D/ ?9 v* H" u; Y' h' {{
6 B: f& ^0 w4 G Wint i=0,j=0,k=0;
; `/ z& P( M+ ~3 @' U# s* JMAX_COMING_TIME = (*storage).p[initProcessNum-1].comeingTime;: L) D8 V/ M" f3 c1 d y
(*memory).p = (process*)malloc(initProcessNum*sizeof(process));
. l+ h, }: s. ^2 m B; z/ O5 qmemory->proNum = 1;
$ @% h! V" c. e- P9 i1 kfor(i=0; i<initProcessNum; i++)1 A0 p, e1 h$ y+ q2 \0 l, W; b* Y% J
{) q& m1 o7 }! Q! ^6 f3 y
if((*storage).p.askMemory <= *spareMemory)1 K: M& a9 E# Q3 b& G
{. C5 X% F9 w- z( ~5 V
(*memory).p[0].askMemory = (*storage).p.askMemory;6 e3 X3 J: l3 ^" {
(*memory).p[0].comeingTime = (*storage).p.comeingTime;: l+ `0 D' J% z3 E# \( g7 X, y6 L- R/ @
(*memory).p[0].computeNum = (*storage).p.computeNum;
8 u/ @8 A d$ u/ \(*memory).p[0].ioNum = (*storage).p.ioNum;/ G* x4 o( L Q6 {# g
(*memory).p[0].processID = (*storage).p.processID;0 J' T: O) ^; E. e6 M) F
(*memory).p[0].flag = (*storage).p.flag;
" N: T2 V1 U1 F(*memory).p[0].ioTime = (*storage).p.ioTime;( Z7 J' Q' q' J' S7 k
(*memory).p[0].computeTime = (*storage).p.computeTime;6 p! Z, Z& |) c. Z
(*memory).p[0].produceTime = (*storage).p.produceTime;
: Q+ Q/ u/ w) J. i8 F7 w3 G(*memory).p[0].runningTime = systemClock;1 g( u! Z, o p4 u' V8 d) T
(*memory).p[0].computeClock = (int*)malloc((*memory).p[0].computeNum*sizeof(int));/ y, G1 y. ` r5 \
(*memory).p[0].ioClock = (int*)malloc((*memory).p[0].ioNum*sizeof(int));/ I+ h8 {: s! M) [8 t, l# k
for(k=0; k<(*memory).p[0].ioNum; k++)
' W- P" V+ p- G9 S) B(*memory).p[0].ioClock[k] = (*storage).p.ioClock[k];4 K8 f- V& o( @* {: U; [
for(k=0; k<(*memory).p[0].computeNum; k++)
: v% V' L2 Z; I& O- }+ \(*memory).p[0].computeClock[k] = (*storage).p.computeClock[k];1 a, M0 ?, N4 {. y, Z1 ^! p* `
break;
6 t' B: k% {# W& ]3 ~}
+ W# {8 p4 o) T- C}5 b- G3 x. t5 M
if(i<initProcessNum) //调用一个作业进入内存后,并再生成一个作业等待调入3 Y0 v, Y4 W! Q8 Z" P$ z
{+ h- V; T5 `6 |5 `8 [& M
produce_one_task(storage,i,ID_FIFO++);+ n/ Q. I1 v; x* v
MAX_COMING_TIME = (*storage).p.comeingTime;
+ T8 f8 T6 n! C8 zsort_by_comingtime(storage,i);3 _6 B6 L# |. z, E, \% y# N
}& I/ P0 ?, E" ~& P2 H
return 0;
. B! S7 g( |# m# _+ Z}
# q0 \) i* j( _0 xint sort_by_comingtime(processPool * p,int pos). w. Y8 @& v) B' C5 w8 n
{
$ N) J; b( p" _% Y H0 V+ qint i=0,j=0;/ @' L5 t5 @" r. x
process temp;
4 a. v, v( x+ O7 Dif(pos<0)0 l2 d& V3 w' N" W @, J6 S
{8 U- a8 Y0 l$ |' G; b
for(i=0; i<initProcessNum; i++)3 a4 q1 [% r, W0 k, |6 n8 p4 y
for(j=0; j+1<initProcessNum-i; j++)
?% n& e2 M. m* d. ?, ~" _{
, B4 l: d6 Z' N. W# D' Q0 Nif((*p).p[j].comeingTime>(*p).p[j+1].comeingTime)
4 Z! K) Z: R# u! c5 V{
* \" b- c8 p" l3 z8 i& Jtemp = (*p).p[j];$ h) U& @* M1 z" l T- ~0 Z
(*p).p[j] = (*p).p[j+1];
! H9 C c$ r8 F5 \) w8 N5 v7 z(*p).p[j+1] = temp;+ K# h2 L M; Q6 l2 j
}
) z$ d; w% F! f" C2 U}1 g8 L2 s. ] o0 J! i
}
; k1 A( f% g9 `, @, u- welse if(pos<initProcessNum)
! s' L8 H& u1 A4 `! ? d{( J; ~$ w9 j( ?, I
for(i=pos-1; i>=0 && (*p).p.comeingTime > (*p).p[i+1].comeingTime; i--)
; c6 N0 b% a9 c' [2 L{2 v7 v- I- I! O. R
temp = (*p).p;
+ H& ?; w/ v* v+ L. }(*p).p = (*p).p[i+1];" h7 i( }2 W/ L+ Q
(*p).p[i+1] = temp;+ M1 c: l+ x, ~
}
9 K- t% z5 Q5 q0 @: b1 Mfor(i=pos+1; i<initProcessNum && (*p).p[i-1].comeingTime > (*p).p.comeingTime; i++)) E9 G' p7 K$ G6 e& k
{. N- |, F# I, d# Y! f) M$ A- }, S
temp = (*p).p[i-1];( D$ i; _" V6 I
(*p).p[i-1] = (*p).p;! `3 \: b9 q7 r- H7 q1 P
(*p).p = temp;4 g" f# F; k5 ?0 C
}0 N( O" h# ]& }0 G. \ ^. L* T7 J
}; v1 y: F$ G* M+ P& u: `
else
4 I$ c( f, j2 O/ [+ {. G# Y. d5 wprintf("position eror\n");5 ~/ Q6 `* x* @8 H) z+ s" E
return 0;
( y; E- B5 A$ E7 b: H6 j) w4 H}
7 Y ~* k* C8 z8 ^; d! i! }int InitPool(processPool * p)( c" S) o" |1 \9 D! S
{; L3 `! v4 |& @7 m) ^2 G
int i=0;* t( ]( _- m, }5 v
(*p).proNum = initProcessNum;
$ S% S8 H, Y! m(*p).p = (process*)malloc(initProcessNum*sizeof(process));- N2 L" F6 ~+ @2 C8 X0 { K
for(i=0; i<initProcessNum; i++) //init process information7 _" r7 g7 _2 w
{
' ?' f& K; u* W5 Z(*p).p.computeClock = (int*)malloc(initclocknum*sizeof(int));; k9 q, D" U( x( y5 T0 W$ k3 g
(*p).p.ioClock = (int*)malloc(initclocknum*sizeof(int));9 _$ `) ]# H' H( s) t$ z2 o1 Z
produce_one_task(&(*p),i,ID_FIFO++);
& V. D4 S# |( B: _! D8 |2 v}
" k V2 d5 {) Q, ^4 c4 X4 k6 \return 0;8 _! p1 T9 m3 O. f
}
2 Q( i( O J6 y3 I E% Z: Kint produce_one_task(processPool * p,int i,int id)8 E2 y& ]' e. G: O0 x
{
, k8 f# ]$ R& s3 W! x: G1 }% {int time=MAX_COMING_TIME,j=0,totallTime=0;1 U" V6 [. |7 P0 T
(*p).p.processID = initProcessID+id;
q- G8 Q9 K- R(*p).p.comeingTime = time+rand()%(MAXProcessRunTime/5);0 g: D1 D8 O) w" m
(*p).p.produceTime = systemClock;
6 N3 @" R- ]9 x, P: H( Q7 H3 m(*p).p.ioNum = rand()%4+20; //IO number setting to 2--5;
4 b2 `2 N/ T8 Y. E5 B) H* p(*p).p.computeNum = rand()%4+30; //computNum setting to 3--6;& I0 C% U3 h/ y/ m9 n
totallTime = (*p).p.computeNum + (*p).p.ioNum;
; s s5 M" _% O4 c9 T(*p).p.computeTime=0;
7 r, L0 C9 l% q7 j1 y5 Mfor(j=0; j<(*p).p.computeNum; j++)
: y- ^/ S- Y& O5 |4 F! U{
) q* C" T0 V! ? g; ? G(*p).p.computeClock[j]=rand()%(MAXProcessRunTime/totallTime)+1;& X* m) k- i# W; X6 A; Z/ C
(*p).p.computeTime += (*p).p.computeClock[j];/ R# c" ?! B' y( u0 _7 y' ~7 J
}
- D$ p: `4 i( ^0 B5 I(*p).p.ioTime=0;
9 Z( `: Z: r/ e. M3 {7 B/ B: |for(j=0; j<(*p).p.ioNum; j++) |
|