- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564647 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174617
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
8 [" L# P. `( e, d' H/ A
经典任务调度算法的模拟程序6 O4 Z% d, y3 V
本科毕业设计写了一个经典任务调度算法的模拟仿真程序,测试了五种调度算法的运行性能。在程序中虚拟了任务的进程,按照不同调度算法策略从进程池中选取任务执行,在任务执行过程中,保存相关的统计参数,最后对这些参数进行处理,反映各个调度算法的实际运行性能,程序中可以通过修改任务的相关参数改变任务特点,测试不同任务环境情况下,调度算法的性能适应性。程序是通过C语言编写的,为了对运行结果图像化,采用了EasyX的图形库。由于计算机中实的任务调度过程比较复杂,在实验中为了简化程序的实现,在某些方面进行了特殊处理。
3 y4 z+ ]7 o% Q- ? i2 n
: V* S6 ?' M+ p编程平台:VC6.0+EasyX图形库环境。5 Q% e+ [6 M' ~. i7 r7 _
5 O L+ g% J2 a. @8 b
以下截取部分程序运行图::3 W; c$ F( M. ~
) R& K/ {$ O. D8 E源代码:
; ~% _: g% | z% Z; ^+ G$ o" B( c a z* W8 t5 t
#include<stdio.h>
7 {9 b2 p" D% _/ b# I# J9 B, e#include<stdlib.h>: X% I$ E5 y+ y* x, p" Q( r
#include<easyx.h>; `6 X& d+ z# ^7 A i Z, Y
#include<time.h>! o3 T) H* w4 _0 @2 `; ?
#include<conio.h>9 c, Q9 T/ \( D
#include<graphics.h>
2 S& v. t* z% }& [3 u#define initProcessNum 10
2 u/ y8 L% Z4 ~; S5 A2 X$ d#define initProcessID 1000; `5 D% g: l6 z+ D0 o* R, ~/ P
#define MAXProcessRunTime 10000
3 V, ?2 b/ @8 p' [#define MAX_MEMORY 40002 ?: ]! n; m ]1 n. Q
#define exchange_IO_Compute 10
) F# K9 x+ Z5 C/ c#define exchange_process 25
' V# Y y0 s! H, {, t7 @+ _#define task_completed 1: ]4 `; A( p y: K* a+ n) d
#define task_not_completed 06 o9 w5 ^$ [+ X0 m+ Q }; R- `
#define initclocknum 100) {' S7 Y3 k) t1 J; E M( i& c2 r
enum condition
& P: q. r3 `, f V{
% K& P; z l' v- p$ tdead,computing,IO_waiting,ready, N# d2 a4 Q- p8 T
};
& ^0 o& e; R4 \struct process
* v6 e0 d H) T, r4 E, e{
3 }8 K/ G6 K& _6 T: s# Xint processID;
2 s" A" [8 k L4 H: bint comeingTime;
5 m) v, a/ B% r% h: `3 P. z: w" Eint ioNum;
4 f- P8 c9 z' e @int computeNum;6 Q3 S( }7 ~/ H
int * ioClock;
; {+ ]& a/ L' hint * computeClock;
( d5 C' x. x/ Kint ioTime;
% u- f0 u; b, Lint computeTime;
+ n9 \/ a/ O! Lint askMemory;0 F# K {( I& x0 }+ \
condition flag;2 X! B; I( L: q2 N
int produceTime; //生成时间,以下三个数据成员用以计算相关性能
" O! E9 N/ W3 [# M% |" w3 iint runningTime; //第一次占用CPU的时间, o I1 R T' B: O: W( A
int completedTime; //进程完成时的时间
! T R! }/ o" M( y8 j};
" j/ ?# Q' v. o$ R/ Q+ z% f( ptypedef struct processCmpletedInfo //保存完成一个作业的相关信息$ C3 @" A4 j$ J& V
{6 M9 h$ _0 T. K% F
int processID,comeingTime,askMemory;# w% }7 Q/ a4 x( {( \0 `' s* p( S- n
int compute,waitio,exchange,completedTime,runningTime;
9 T1 v a/ s* u% a" uprocessCmpletedInfo * next;8 E" @5 ] ^" Q& t5 }8 O* B
}PCI;& d* L6 A+ _9 W
struct processPool& ^; a8 m5 [/ v# J" v) y
{/ Z$ q B3 i. H6 G
process * p;3 P, S& B- u9 g& _; w
int proNum;6 v7 [; H) l7 ?; \4 N
};, ]& G' N: H, {/ n1 P% X, Z3 h
int MAX_COMING_TIME=0,ID_FIFO=0,systemClock=0,FLAG_FIFO=0,FLAG_TT=0,FLAG_PF=0,FLAG_SJF=0,FLAG_HR=0,FLAG_show=1;
) Z5 M7 Q6 G: }0 {$ ?: dint InitPool(processPool * p);' ?! D1 g0 f- Q( t/ J
int produce_one_task(processPool * p,int i,int id);/ d# K6 ]' f% q% ^
int FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw);
" d, N- c2 E! ]- xint TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
0 A5 t/ r) G1 s) Kint TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos);5 J& T! o, ?! y8 t5 J
int FIFO_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);! _8 j9 k: B3 g3 i \9 [1 L9 {
int ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);8 ^5 R2 o1 q$ E" Y N9 n& c
int SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);* J$ z+ N1 a8 T
int PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
& m4 D" l3 F- t& |- f8 Mint Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);2 H5 g: ^$ H7 ?' {
int High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int disatch);; V% w7 D3 D) a1 b8 @
int High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);8 y( r. k( _0 Y( x& I8 W- [
& P5 y5 t( ^9 B, X, k! o2 i$ [2 D
# r5 \5 ?/ J7 m7 _: y4 k) Q# ~! B9 Q
int sort_by_comingtime(processPool * p,int pos);0 v0 l5 t5 U- r. F) o
int showProcessInf(processPool p);
8 X0 d3 u9 g0 _: z+ o6 W: B$ Gint drawPerformance_FIFO(int x,int y,int memorry);- [$ p1 f/ R- P1 |% S6 u
int drawPerformance_HR(int x,int y,int memorry);
$ J$ p/ b& d( sint drawPerformance_PF(int x,int y,int memorry);
# G$ [% v$ e* T4 H/ h: m8 J& [int drawPerformance_TT(int x,int y,int memorry);
$ b6 }$ o7 a$ e9 C1 S, V. z& oint drawPerformance_SJF(int x,int y,int memorry);
) a# k1 Y. I4 x( J" i' Dint MouseListening();
b$ G- ^+ E# R, i7 _: B+ l; @int MouseListening2(int *flagShow,int * showTime);4 x/ n* L$ B E- n% d! N% u
int showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR);
+ ?$ @; l4 M, }* E2 N& b- K9 ~5 f1 K- q5 ^2 V% X" c3 y% K
5 A& Q& D7 M q7 ~2 V4 {6 P
void main()
# G3 J6 w, G: _6 L {2 `+ C{
, D( t, [. l: J* d- [: ~PCI* FIFO_save_head=NULL,** FIFO_pri=NULL,* Timet_save_head=NULL,** Timet_pri=NULL,* SJF_save_head=NULL,** SJF_pri=NULL,
0 {$ v9 {" T$ U, ^; ~) i$ D*Priority_save_head=NULL,** Priority_pri=NULL,*HR_save_head=NULL,** HR_pri=NULL,* p;
& R0 I8 T+ Z6 l% I; ^int i=0,FIFO_memory=MAX_MEMORY,count=0,Timet_memory=MAX_MEMORY,SJF_memory=MAX_MEMORY,Priority_memory=MAX_MEMORY,HR_memory=MAX_MEMORY,
, x% e. c( ~8 ]- Q. z, q5 RflagDraw=0,showTime=100000;
8 y" O4 ]% n0 \, K3 uprocessPool FIFO_p, FIFO_mmy,Timeturn_p,Timeturn_mmy,SJF_p,SJF_mmy,Priority_p,Priority_mmy,HR_p,HR_mmy;
: F$ Q5 n: z* b7 T8 Z4 B& AFILE *fp=NULL; r. U' `& e0 X D4 |* e
//processPool HR_p,HR_mmy;
5 l- c6 P+ S/ h7 E2 D% O) N
" P4 _5 I0 ]% X5 u! Z# T0 u4 S& P [% s5 w0 Z( G( G
srand((unsigned)time(0));
! t+ x3 l/ n7 ?. i: _systemClock=0;: M- ~: ]( k' u V* }( G* u
initgraph( 1200,650,SHOWCONSOLE );
. s9 D) b7 c. L _9 r) i) wsettextcolor(GREEN);
% O% Q$ D/ w0 A# m* nsetlinecolor(GREEN);
6 e3 j, A' N8 Y# O" L. D& ?setfillcolor(GREEN);4 e- T0 ]) x$ J3 m
InitPool(&FIFO_p);
- K$ a" y; y$ Y0 d, ]sort_by_comingtime(&FIFO_p,-1);( @# J/ f0 J6 S( q9 A" t0 ^
InitPool(&Timeturn_p);
1 W% ^2 P2 E1 h |InitPool(&SJF_p);% D+ X4 a% ~: P. z8 k; ?9 u
InitPool(&Priority_p);; v. _9 P" c2 v& O( C- N0 x
InitPool(&HR_p);+ \% h) } T" C
//showRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);; B) h; K9 D3 x k/ `( y
//Sleep(10000);
: Q" S8 p& [0 P9 P$ R* u. H( R
: V; u, @! t. d9 y
' o8 a" N6 \3 T. L% s2 S5 qTimeturn_mmy.p = (process*)malloc(initProcessNum*sizeof(process));
7 j; h z9 [. ?! V9 X) o& v$ z! cSJF_mmy.p = (process*)malloc(initProcessNum*sizeof(process));# \5 p' j2 M9 _2 p6 R
Priority_mmy.p = (process*)malloc(initProcessNum*sizeof(process));
" Y- t% K+ ?& R. L) V& t% ]HR_mmy.p = (process*)malloc(initProcessNum*sizeof(process));& C2 @4 g3 w) @, x
for(i=0; i<initProcessNum ;i++)) b h8 I) r1 D" r& b/ G
{; g7 ]* v1 Y* o! M- S4 W
Timeturn_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
: n6 a& S, k" B5 w: gTimeturn_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
& P: q3 l; W* i4 q, L0 o ?SJF_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
3 S# f$ R6 K6 Z1 t, g+ USJF_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
. z( b" D5 T/ t! sPriority_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));8 H+ d7 W6 k& `* \4 K0 B
Priority_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
; e8 [; k/ d1 j& P- fHR_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int)); r4 r) M7 R6 P- u: t
HR_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));; ]. s6 ~3 ]; w6 Z
}& T3 ~2 [& W* O
Timeturn_mmy.proNum = 0;- `/ w) t' o2 K4 t( b3 O: c
TimeTurining_storage_to_memory(&Timeturn_p,&Timeturn_mmy,&Timet_memory,-1);
& a/ z* G( L) T( ]& g0 fSJF_storage_to_memory(&SJF_p,&SJF_mmy,&SJF_memory);
4 O1 r2 A, S) X+ D* }! o; Y6 i1 ` T9 LPriority_storage_to_memory(&Priority_p,&Priority_mmy,&Priority_memory);
- I5 O) `4 p8 W: s) P9 AHigh_response_ratio_s_to_m(&HR_p,&HR_mmy,&HR_memory,0,1);
W# R2 s: D0 o% l! Q: e//showProcessInf(Timeturn_mmy);; x% x4 l# E& \6 E7 j4 j D
FIFO_pri = &FIFO_save_head;
: |0 @; _6 p. @8 M) {4 o2 m, YTimet_pri = &Timet_save_head;! \/ e: G4 u$ s: D7 ^) @& A& s
SJF_pri = &SJF_save_head;+ x$ v F0 v Z3 s' U) v n
Priority_pri = &Priority_save_head;/ J1 E. ~( J2 n+ b# I6 `1 X
HR_pri = &HR_save_head;( M# b* w+ ^+ X/ Y
setbkcolor(WHITE);
& K6 f, N. H" t4 Pwhile(1)
8 c/ z* t$ H& H5 |4 Z{
+ B) _2 M7 z3 E( \- w* Dif(MouseListening()==1)
R0 h. b7 ?( q# wflagDraw=1;
- r( o; w6 E! \ P0 Eif(count==100); ]5 B! F1 F# t- ~$ ^
{
5 L4 R0 z- W- b- w* c* eif(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,1)==task_completed)7 [ e2 ?+ ]" R, B: R; ]9 |7 ]
{
: h+ g; W+ Y8 eFIFO_pri = &((*FIFO_pri)->next);" T6 R9 w7 R+ \( F) S8 A) N7 H
. j# G, f; c- H Y//printf("hello");' F( p2 a7 i O2 Q8 [% v* a( R
}
" H& Z% U5 \ P6 Vif(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,1)==task_completed)
( e2 c1 e! H* M& @{
; S& c# q Y8 i/ P) M8 @) t* J0 [ Timet_pri = &((*Timet_pri)->next);
* O$ B2 U* h w+ \, [9 d//printf("hello");
7 E- J0 L& d/ [! D, t6 R}
8 }( u5 T2 g3 xif(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,1)==task_completed)
& ] c' l: U% y. X( h2 d& y$ L! z{/ R; V( u u- S9 D3 `2 @% }
SJF_pri = &((*SJF_pri)->next);
( D" W' D5 v& F9 J& O2 }/ e//printf("hello\n");2 c8 v' D e9 L& c
}) [4 ?9 k6 L7 Q6 m
if(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,1)==task_completed)
, J a7 ~: u% H4 [; d1 M{
m6 ]* [6 ^% iPriority_pri = &((*Priority_pri)->next);
0 b& q/ D9 _- H: c# Q//printf("hello\n");
- [! l) G# e( s6 y0 l}: N$ q& J: J0 [- _
if(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,1)==task_completed)0 L' x6 y I- W$ ], P1 {
{
2 J6 \( @1 L: n' J& kHR_pri = &((*HR_pri)->next);
7 S# |9 Q% c1 [' j1 o$ o//printf("hello");) W6 k9 g3 _2 R; |7 r" }
}1 O+ O0 G; @% ]' O7 r, Q
count=0;
) S) u+ E% y4 [7 }6 d# Z+ d}( I, q# g" A: y: i+ F c( v+ P
else/ s7 J% P7 Q4 D6 b7 Q
{$ l0 `4 g+ m7 Q% W3 A% Z
if(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,0)==task_completed)
! p+ s& `5 U& C D Q{
+ ]! S( v l0 c; NFIFO_pri = &((*FIFO_pri)->next);
4 W, [3 f: r k% g// printf("hello");
8 z' B; K* z' V3 w {; o; E/ n}: ]2 |( g( q p! X w
if(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,0)==task_completed)" |. T6 \+ T$ o6 b# i
{% F& S4 }" e. H X5 W/ k
Timet_pri = &((*Timet_pri)->next);* E9 h- e" l1 |, F9 N7 R
// printf("hello");
8 z& q X) e- A7 Y B$ S}$ D. T/ I' @) J) G$ Z3 ^9 X J
if(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,0)==task_completed). h+ D% B9 ~# y+ C
{" t/ t) q& h. h; J& O9 t
SJF_pri = &((*SJF_pri)->next);& J. C3 t; c0 e3 @% J1 I
// printf("hello\n");; O4 u2 z% C6 ]$ k( K+ Q
}, S8 `+ u- ~3 U, I9 z1 p0 E2 j
if(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,0)==task_completed)8 K ~) Q9 ^6 m& `
{
* C) y2 ], A3 b. ?8 s0 {: a6 HPriority_pri = &((*Priority_pri)->next);% S, C$ p6 S, A: y
//printf("hello\n");0 v4 ^$ b' S. R. g# |7 q
}3 U. n5 t; A( c( x0 w G
if(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,0)==task_completed): |1 O' [- A. u
{9 Q) B- V6 ]9 R( b- Y% e
HR_pri = &((*HR_pri)->next);
- m0 F% x7 t. b/ Y1 v$ ]" E& k//printf("hello");$ I: ~ X; J p
//Sleep(1000);" f: D1 n* U' i- Q% ]( {
}+ g; o7 l: X& ]5 n8 p0 d$ A
count++;
: l5 g8 w! p# T7 n% G. L+ l}
1 a: I$ O1 E5 X/ g& _( s3 S; g+ }6 yif(systemClock==showTime)3 ?) ~7 S2 [9 S" I
{% s; Q# E2 d s( u$ g% O
/*PCI * p=FIFO_save_head;
/ u I) T3 c! o, d+ w" V, ]7 I# w5 gint i=0;4 Q7 e6 ^1 H3 K8 z. @- G
for( ;p!=NULL;p=p->next)" s7 k) w: o/ z0 p
{ P" o: Y4 J4 w' {9 h6 c. o
printf("Id %d\n",p->processID);
9 ~( Y- ]! L3 ^2 o7 x( h' p4 Cprintf("comeingtime %d\n",p->comeingTime);- u/ B/ D; J, v& a4 n$ \" ]
printf("runningtime %d\n",p->runningTime);
. v$ ^& _; T. N* a$ i! `7 `printf("asdmemory %d\n",p->askMemory);
4 p7 E1 a* T& d' lprintf("completedtime %d\n",p->completedTime);, h1 `4 F: b4 j/ A: A; [
printf("compute %d\n",p->compute);
( ?- R7 F3 s {$ ]+ Cprintf("exchange %d\n",p->exchange);
5 _- Y/ k$ p4 Y9 B! ]( [5 \printf("waitio %d\n",p->waitio);
5 h" V# R% q. ]6 b$ s( Li++;, H1 z n: R3 f- l7 \( |2 ~! Y/ W
2 u7 K' S7 ?4 A& ]8 R2 r& q4 s
9 A. P' H1 w; ?/ z0 z% f8 b}
X& R8 S, _8 S2 m/ Mprintf("%d\n",i);*/: n5 W" p( p5 z7 B- b
if( (fp = fopen( "data.txt", "a" )) == NULL )5 C' g1 O3 r M" V, z
{
' e4 ?* I; X0 \7 ^2 r# B" _printf( "The file 'data.txt' was not opened\n" );3 ?/ i% p# v6 v+ }' q) X
//return 1;# A( ?$ [$ S% y: E% ]: C0 A
}$ C) `& n0 a* _; ], J
else
& S3 X+ y9 l$ f0 j{
+ u. U$ [1 J* ~2 tfprintf(fp,"FCFS \n");
: V/ G3 G% n6 T5 N9 pfor(p=FIFO_save_head;p!=NULL;p=p->next)0 \% o. M5 y1 ~4 o2 u
fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,, M: x% ~/ j/ j" G& y( d: J% K- d
p->exchange,p->waitio,p->runningTime);
' ^( ~: j1 Q# e, O+ ^fprintf(fp,"\nTime turn \n");' b% t6 G' J' g
for(p=Timet_save_head;p!=NULL;p=p->next). e. M9 A5 V7 \' v1 h* Y
fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,$ C1 E% j" J! ~+ h8 a
p->exchange,p->waitio,p->runningTime);' U0 x" @9 N. L
fprintf(fp,"\nShort Job First \n");$ j+ {3 A- k9 L; l! Z9 H* d
for(p=SJF_save_head;p!=NULL;p=p->next)% m8 |/ Y; \! V" r$ ~) b
fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,! P, Z7 ?3 L. A4 {
p->exchange,p->waitio,p->runningTime);
5 J& j) _2 L! J: j9 u0 E% L; Qfprintf(fp,"\nPriority \n");
f# @( T' q( ? h3 Vfor(p=Priority_save_head;p!=NULL;p=p->next)
4 N9 ^; @3 Q9 T1 t+ V8 Rfprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
6 h' k4 b3 A. D! x! wp->exchange,p->waitio,p->runningTime);
# B! b4 y; m" ~4 Qfprintf(fp,"\nHigh response \n");3 j: W( O9 w* L) m9 U$ M1 r
for(p=HR_save_head;p!=NULL;p=p->next)
3 D/ H5 M0 V+ Z( y* ?' @fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
8 w2 F3 b" f9 F/ a* T0 Zp->exchange,p->waitio,p->runningTime);( C% M: l3 s, O7 A! L1 z
fclose(fp);) d- B O# F# W* G+ `
}
6 Z* c, g4 i+ QshowRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);
9 h8 r0 A: l) {MouseListening2(&flagDraw,&showTime);( N8 A% Z; S6 f) c/ N
}- \! o3 B. G5 z
systemClock++;
$ N1 p; X l* W( i2 I8 }if(flagDraw==0)
' P% h' L3 Z) J. m2 l Sleep(10);+ X: l8 c5 B2 U7 k
}
( o8 y6 _9 W; C. l- h2 Q: x
5 @+ h3 j" |' v/ \/ H m% Y1 h4 }; h+ |( |, ~$ l) G
}
* y; v* i. t C. `$ S yint showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR)- ?4 \5 k- O; L
{. }. H J/ I9 K* O! o1 V
PCI * p=NULL,* name[5];
# l- x4 M& E1 g6 \/ F! m7 K4 Sint count=0,i=0;8 z% x. @0 b1 b. ^% L
char ch[5][10]={"FCFS","timet","SJF","PR","HR"};" c$ `6 M- I8 I; ^3 N) v" o% d
double turnover=0,wait=0,c=0,w=0,change=0,pos[4]={0,0,0,0};
) V& A2 j# n3 `; V) F0 r3 v2 vstruct info0 @" S9 F/ S: H' z9 }7 t5 E
{
/ v% K! T h3 C2 H4 w8 Zchar name[10];
% g* o: ]6 F2 ^, g% x5 qdouble throughput,turnover,wait,CPU_rate;9 x# R3 h p; R( U, H K a
}inf[5];6 m/ P, B* j: F% J1 o) N% T
name[0]=FIFO,name[1]=timet,name[2]=SJF,name[3]=PR,name[4]=HR;- s) a `9 d! Z7 Q0 u
printf("调度算法..........A\n");0 r2 `$ s; N3 o
printf("吞吐量............B\n");
- D5 H6 M5 T2 dprintf("平均周转时间......C\n");" W( h: L0 e2 Z! R. i0 _+ h
printf("等待时间..........D\n");/ c9 @! h4 b) B5 \
printf("CPU利用率.........E\n"); J& U3 z8 T& \! }4 Q* E5 Z
printf("A\tB\tC\t\tD\t\tE\n");% l4 x8 a8 z& V) Q+ U Q
for(i=0;i<5;i++)
1 x8 h# E- u O) e4 P' N! U/ r& J{
8 u6 [; D" _4 U& xcount=0,turnover=0,wait=0,c=0,w=0,change=0;
6 ~ |( N- _9 m, O- x+ o4 Nfor(p=name; p!=NULL; p=p->next). B% g% b* j6 e8 Q
{
k. I0 w3 `3 Ccount++;
3 u) z2 T4 a1 P% w4 g* @7 `6 d0 kturnover += p->completedTime - p->comeingTime;8 q6 Q: D Y' C! l9 e, @. D. ~
wait += p->runningTime - p->comeingTime;7 P6 T! m3 ~' o: _+ B8 t# t; U* O
c += p->compute;
6 j1 [0 s; S+ pw += p->waitio;7 t9 f6 k) Z& \! H
change += p->exchange;3 b6 }# o) h9 j' I, \7 _
}) y4 J5 H+ L E& w+ d
turnover = turnover/count;. O. Y0 }+ a4 v0 s8 b2 q, O# I
printf("%s\t%d\t%.2f\t\t%.2f\t\t%.2f\n",ch,count,turnover,wait,c/(c+w+change));7 s- H5 @' z9 }, a
strcpy(inf.name,ch);
9 ^0 k, f: q9 T& `; t8 Iinf.throughput=count;8 _" \' ]$ z& X; r' x* _) z
inf.turnover=turnover;
5 b) n3 l/ m1 K+ zinf.wait=wait;2 A3 c' }8 Z- L. }" b$ k
inf.CPU_rate=c/(c+w+change);0 N. E) U' u/ g |" W
}
$ n: U6 F- Q9 I//画图+ _3 n2 p+ O) D* l' R8 k! `# Q& c
//cleardevice();
4 r Q0 B" w" m" I8 fline(0,600,1200,600);; L4 G5 O1 M* p% z7 M/ g9 u% ~
line(10,600,10,200);) b7 y8 b; D- f. u* H4 A
line(10,200,5,205);: P1 }% S2 m" h# o8 R
line(10,200,15,205);$ t# g+ z* A) n# N
line(310,600,310,200);
4 w8 U0 Q; M% Vline(310,200,305,205);
/ E7 Y# z' u) yline(310,200,315,205);4 R% t3 K0 J/ u8 B2 o
line(610,600,610,200);/ l' e" R8 s/ p$ y: `5 p$ J
line(610,200,605,205);
9 p5 K8 f: c' ^3 [line(610,200,615,205);
" T1 }+ O) ~' t# ^) Kline(910,600,910,200);
3 w. |9 D' Q. J+ S: ]' jline(910,200,905,205);
1 O) O0 K( y; ~. [line(910,200,915,205);//最高的长度400,宽度均为40
) @& j/ U$ }% a' L8 S6 wfor(i=0;i<5;i++)
5 ^8 _% g: X8 \, t, w: p{
$ _$ M! f' p5 [if(inf.throughput>pos[0])
7 p+ v- a" |2 Z+ P% S; ]% zpos[0]=inf.throughput;9 ?2 U6 q9 v1 V. T' T5 J
if(inf.turnover>pos[1])/ ]' I. f3 K T- c" A+ ^$ F
pos[1]=inf.turnover;
6 t3 Z* Q, m6 w9 U6 D- |! V; Uif(inf.wait>pos[2])
* B6 x ?/ h8 L2 Ipos[2]=inf.wait;
0 `' w3 E- j: d5 N# A6 C" \if(inf.CPU_rate>pos[3]): H% o/ i- J/ g, I& \1 u7 y5 |
pos[3]=inf.CPU_rate;
( S4 y. A: Y% b6 [! s( [}
H1 x3 F$ M( `settextstyle(30, 15, _T("楷体"));8 H# S7 h" G5 @3 g1 d0 J- t
for(i=0;i<5;i++)/ p8 N% z+ q3 X) }6 M2 R
{* g4 f8 d l1 ?8 [5 R. }
switch (i)* G) m& V2 j; j6 w
{
. t9 j; z2 o( R2 X" E! I; O: l$ dcase 0:
! A2 p6 `( E% @7 m. p/ ?# lsetfillcolor(BLUE);
4 {% T' l" D1 d& ? Ifillrectangle(100,50,150,100);
( v0 i. N, B3 v# qouttextxy(160,50,"FCFS");" P: | O7 N( { S2 H7 n
break;
0 P# t; w- X3 U( z; C+ b% gcase 1:
9 S0 I' V- E5 i9 z h9 Ksetfillcolor(RED);7 t) [% v# f& w/ j; _( g* D& T1 v5 B
fillrectangle(250,50,300,100);
5 j, M- r) f& T) p7 j- |outtextxy(310,50,"timeTurn");: ~" y6 J* p2 W: j) |1 u# F# |
break;4 Y# Q- h$ _$ R/ c& b9 ~, c" e; x
case 2: N y: b* P! w# e
setfillcolor(YELLOW);" w! C% c: ?, t) c5 V9 U
fillrectangle(450,50,500,100);
7 K3 S, N( V( U! I& N1 aouttextxy(510,50,"SJf");
' t1 `% [; h9 F! ?6 S! rbreak;+ G- ]$ d- V! D5 ] E9 }
case 3:
4 U3 u& g1 r7 S% Z3 G; Ysetfillcolor(BROWN);2 C% A- j3 v) _) o
fillrectangle(580,50,630,100);
+ ^% g3 W& ~9 n8 `outtextxy(640,50,"PR");
' Y, i! D$ C- {, tbreak;) R7 }4 X% r( ]+ G# [! ^6 @- S
case 4:
! E7 s' ~' X' M3 D7 h u3 g, W/ Esetfillcolor(GREEN);3 O8 K9 |4 j2 C+ {
fillrectangle(690,50,740,100);
: k, \5 R& `4 ?9 `" E2 j$ j5 Souttextxy(750,50,"HR");6 o" l% B* `+ n0 c; q
break;2 z4 G- u; f. L- ?
}
0 W( ?# I% }4 X4 I; ]5 l1 jfillrectangle(50+i*40,600-(int)(inf.throughput*400/pos[0]),90+i*40,600);
, n; u3 _. m+ W/ w) O! ~1 wfillrectangle(350+i*40,600-(int)(inf.turnover*400/pos[1]),390+i*40,600);
2 ~ F K+ Y' W7 y" e7 M7 k" ?# Jfillrectangle(650+i*40,600-(int)(inf.wait*400/pos[2]),690+i*40,600);/ N; t' C4 ^+ u) `
fillrectangle(950+i*40,600-(int)(inf.CPU_rate*400/pos[3]),990+i*40,600);8 L( K" V4 i9 X' Q% V4 \
4 n# O7 {3 E0 R1 b, e- n. F/ K' L& D. P
}
- m$ q8 H6 `& m* W: g0 e8 T outtextxy(100,150,"吞吐量");2 g4 K8 J- D0 A! u. [$ V2 _# t O. a
outtextxy(350,150,"平均周转时间");
- Z3 S; g: c1 louttextxy(650,150,"平均等待时间");
/ z6 \* B3 \8 t* ?outtextxy(950,150,"CPU利用率");
8 o1 l6 X7 s6 n" f' sreturn 0;# O5 X% e, K9 Y- K
}
$ R) B. |: N4 V b1 Q3 k8 `int MouseListening()/ \( o! C, I, \; M
{
8 P6 I% U9 j$ H( i/ ?( ]. p" q5 Y" `% r8 uMOUSEMSG p;
- P- ~8 M" I, @2 N9 k5 b9 bif(MouseHit())
9 C$ y0 N5 J V# h8 @{
' J6 s6 B) m" o- H% Fp=GetMouseMsg();: k( @( R" a1 T
if(p.mkLButton==true)
% O5 J4 U" T- p- ~3 `: n{
$ a3 L* |: x! g; x( W! |if(p.x>0 && p.y>0 && p.x<400 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
, y6 v0 O7 C b6 X2 KFLAG_FIFO = 1;+ u0 U2 m( k3 n: r' a; s/ |
else if(p.x>400 && p.y>0 && p.x<800 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
' @$ P' v2 x8 w Z7 V! NFLAG_TT = 1;7 j L/ o3 i9 d2 s% V1 | v
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)
7 t D: \$ r& r$ `2 aFLAG_PF = 1;5 ~: D1 P9 p# D; o3 k+ T
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)1 i7 e+ u6 h: }) a, }* i2 e" b
FLAG_SJF = 1;, p/ K. M% @# N8 C+ e- W( o% b
else if(p.x>400 && p.y>325 && p.x<800 && p.y<650 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
2 R) R: B6 `) B# UFLAG_HR=1;+ x; X( L/ b2 Q) b
else if(FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO >0)
, \* C* @% z3 N! N& b{' g( Z5 ]% I. O# g1 G
FLAG_HR=FLAG_SJF=FLAG_PF=FLAG_TT=FLAG_FIFO=0;( ]- d4 l" f% j
clearrectangle(800,325,1200,650);
s2 c6 }7 @+ f. ^7 I3 t}
; l8 I1 {+ s$ }7 `* Melse if((FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0 && p.x>890 && p.y>455 && p.x<1110 && p.y<510 )5 V3 c" G6 r; q; K2 L
{3 J, l) M0 V4 t7 B; s1 g/ G q
FLAG_show=0;
7 m3 M# k& v1 H- u. `2 h; K: [cleardevice();
8 K" G0 y8 M) B5 F! j: D, Oreturn 1;
0 _! Z5 f, p9 t/ R1 a7 {, A}
) D8 [6 ~0 x1 t. t6 \}
) E# m. v0 T# c5 i}
2 S. Z; f! n) w0 t/ Freturn 0;
s" C9 C& m. l7 s1 C}
) U' W$ ?1 k+ ?( o3 g6 ^int MouseListening2(int *flagShow,int * showTime)
* }( w, b' k- Y: o{$ x/ n5 a9 y( J. h/ U
MOUSEMSG p;5 L% A, z, V4 O" ?7 y3 p; n: a
rectangle(1150,0,1200,50);
. R' t( l' K$ H7 E3 bouttextxy(1160,10,"X");
. [ d5 [) e" i" Y8 Q0 e9 \5 {, Dwhile(1)
' R. W7 @( F7 l1 e- z{: W8 g$ |8 R! \/ [
if(MouseHit())
6 _8 h5 g2 Q' d9 {6 }$ G{; |" L* \( U+ h6 C
p=GetMouseMsg();. A5 r2 Q3 i2 [& j% N, d
if(p.mkLButton==true)
+ Y! w- h/ Y9 a" z Q{: d/ d! x2 }" \: T7 f
if(p.x>1150 && p.y>0 && p.x<1200 && p.y<50 )
* o& z' G1 ^; _{5 S2 j h( e/ N
(*flagShow) = 0;7 k0 f& @+ Q) b. o
(*showTime) += (*showTime);
2 P s% D# D4 N8 n1 v' bFLAG_show=1;
$ z e+ ?/ `1 r4 u6 qbreak;
- l$ p# f/ A7 i) {}# [+ c$ X7 s4 s8 n
6 O0 F n$ A5 N
}- @4 D! ]4 k( V9 P
}
7 u' @: w* e3 a$ j& P1 ?+ QSleep(20);
% d) T; ]7 r: ~# j1 x M}
5 {) G3 k/ `$ P7 D4 ~ Acleardevice();# I" k) q. t/ `, _
return 0;6 S5 X: x0 v4 Q6 S& C8 \, A* z: G
}
. `) D. y6 `6 M" _, C+ z2 xint drawPerformance_FIFO(int x,int y,int memorry,int com,int wai,int cha)5 J+ S; p) R3 `0 p+ ^$ {) Z
{' L" ?: p+ w; p. m2 H
static int info[11][3],num=0;
c( X$ g4 J4 L' Fint i=0,j=0,pos[10][3][2];
8 G5 j, i; f6 wfloat temp,t;
) ]+ \6 M- M5 _) z5 r$ r G M* F//画按钮,不属于FIFO图的范围
) H, F9 Y/ a: Y. ^ tif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0 && FLAG_show==1)5 F. B& h2 j8 h6 T3 f" U* W
{4 O/ e8 s' j2 ?9 |
settextstyle(30, 15, _T("楷体"));0 L4 H' m8 ^& d2 r, M: {6 D
rectangle(890,455,1110,510);) P. Q$ l1 m0 j2 q# [
rectangle(900,465,1100,500);
+ x. a; e0 T" l% B' B9 j( O6 nouttextxy(910,468,"查看运行结果");4 Y+ F& N+ E" j
}
- \& t! J4 C1 p; ` s+ s//结束画按钮
+ D" Q0 g; G: ?; }, K; j4 Yinfo[num][0] = com;
, ~) |6 o, {, N4 i+ J# n& \- Sinfo[num][1] = wai;
( @ T( |2 [8 q" v3 Pinfo[num++][2] = cha;
" J$ A- Q! A' S/ z' G$ uif(num>10) //存储10个点0 H/ _+ T, |* F8 p: a, s& J# o$ \
{1 e S, P# n- l# ]; Q& \( B) _6 n
for(i=0 ;i<10;i++)' w# m' N: V0 ~9 P% |" Q
{* B6 R; N m# r9 S5 K# R
info[0] = info[i+1][0];
- U1 E* r; P+ Tinfo[1] = info[i+1][1];8 j. ]7 J1 v& a8 ?, x- n* {
info[2] = info[i+1][2];) k7 {& R, q. ^- a4 u" z
}* O+ o" Y; j5 A$ h
num--;
; n! f7 A; s/ @6 _9 \4 s9 I" t}5 T( s2 y. p# z* D) [
if(FLAG_show==0)
& o G) w8 Y- H/ A: freturn 0;
6 |2 k% Y3 Y9 K& u1 `' ifor(i=0; i<num; i++)) l# R# n5 @* h# R$ G
{+ W6 S1 L, }" O1 t
t = (float)info[0];
4 f0 e/ T* n5 F/ V5 @6 Ptemp = (t/101)*90;/ R& H* ] t2 `+ u1 L0 @5 E
pos[0][0] = (10-num+i)*25+x+100;2 b, x; F$ B6 m/ I! C, f0 `
pos[0][1] = y+110-(int)temp;' z+ n; d+ ^2 d) _' A& G
t = (float)info[1];; W% R- |" B- [; p
temp = (t/101)*90;
D5 b' O5 s. K! Z( {4 T3 lpos[1][0] = (10-num+i)*25+x+100;
]- o9 n9 S3 @/ wpos[1][1] = y+210-(int)temp;
' [! z# ]% a9 q) ~9 [9 ht = (float)info[2];
9 ?: Z+ u9 w x" l1 r$ }3 R. [temp = (t/101)*90;
9 f9 U5 O. k) m: i# Jpos[2][0] = (10-num+i)*25+x+100;. u/ A/ e/ p: z1 r( f9 W4 w
pos[2][1] = y+310-(int)temp;
' \- Q* Y) a, m, ]6 c' |9 J}
; K, z# X) Q1 D' H$ A; X+ z! S9 tif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)# c" T& u3 q* S6 T M
{
- \% P7 {6 [1 Z7 Rclearrectangle(x,y,x+400,y+315);, I( F8 l+ N: X. S
settextstyle(20, 10, _T("楷体"));
; x' \6 l, X6 m3 ?+ Mrectangle(x,y,x+400,y+325);5 J- r8 g( i, X# e& f% p; F! S
outtextxy(x+40,y+10,"CPU"); //画柱状图
8 {) w. Q) V# C ]0 o( Y8 D' P1 pouttextxy(x+45,y+10+100,"IO");8 b+ c$ L1 Y9 N: p
outtextxy(x+40-15,y+10+200,"change");
. d' |" Q) t- l% b, q- |" R- }, krectangle(x+35,y+30,x+75,y+110);/ D# R& e/ R7 m# l
rectangle(x+35,y+130,x+75,y+210);
% d: `5 {- N" O v) q( {rectangle(x+35,y+230,x+75,y+310);
: m; B5 `& m" L( Vouttextxy(x+180,y+310,"FCFS");0 `+ ~8 |2 F! k! A* \$ h3 f
t = (float)com;; A$ i& q3 e+ w" h5 V M
temp=(t/101)*80;
8 `+ s& [( b/ Q9 F2 ifillrectangle(x+35,y+110-(int)temp,x+75,y+110);& m) C7 e. @; [2 f) U
t = (float)wai;* y0 e. l; l0 f/ h3 s+ I0 k9 v9 L; J
temp=(t/101)*80;
1 \) v5 g( L6 U2 C! a- P2 ^& R% gfillrectangle(x+35,y+210-(int)temp,x+75,y+210);
2 s) ~- ?; Q$ Lt = (float)cha;
7 ]2 ?2 [5 p6 {( T, Utemp=(t/101)*80;
; Q; i' c. ]1 Wfillrectangle(x+35,y+310-(int)temp,x+75,y+310);
& H) \4 I- t. }, ~for(i=0; i<3; i++) //画坐标 high=90,length=2507 O8 f8 u* t3 J5 d2 S; y
{
- _+ N$ o; B; j, I2 oline(x+100,y+110+100*i,x+350,y+110+100*i);- ?( S* \* ~6 L, N/ M! F7 x
line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
$ G- S* {% c4 H& }line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
- j9 m+ d: m% n2 _+ d
/ S( j0 l5 w. U( B& uline(x+100,y+110+100*i,x+100,y+20+100*i);
9 u! m V+ z3 }3 x% e% F {- nline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);4 H$ Z9 p( c2 f% Q( P
line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);) _5 G% Z! a; ?' q) [, C
for(j=0;j<num-1;j++)7 o5 [3 ]6 v! w9 W1 E/ `4 Q# T4 q
{% u* G: p' m, s7 y; c6 W
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
5 ~5 i# O2 s& ^6 u8 Fline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
7 o0 i# T. s/ P3 kline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 8 s5 N$ t, q6 J6 t+ U2 ^9 F6 w
}
' _- d5 X: i1 p2 V0 \+ Q$ K}) O! u3 ~2 |* G$ u' q" v% ]
}$ W! J0 m# \. F, V2 z# x0 D
else if(FLAG_FIFO==1)
/ ?9 T) e, o7 A3 r; E6 f{. b. c) j: i0 [
x=0,y=0;5 i; W& W9 o w: O3 b# d+ H
for(i=0; i<num; i++)
. C4 h/ T9 K+ s1 b{
, M# d( k' {% J" Tt = (float)info[0];
" }0 | }9 A, A9 H/ o( btemp = (t/101)*180;' Y6 X( i c1 x8 b! Z
pos[0][0] = (10-num+i)*50+x+650;7 a# S$ E! M1 M; g
pos[0][1] = y+210-(int)temp;# t4 N# ?) P' E$ K. v) y, | C
t = (float)info[1];
) Q( G& `& P9 q/ v, L/ h9 Ktemp = (t/101)*180;
- s: P, e' S) { K( zpos[1][0] = (10-num+i)*50+x+650;; `- l* M8 M- ~, ]
pos[1][1] = y+420-(int)temp;, H- F2 W ~- O; D: e
t = (float)info[2];
/ ~2 d( p" e& |3 o) A: n" `temp = (float)(t/101)*180;! d8 E9 e" d, A d% Z2 w
pos[2][0] = (10-num+i)*50+x+650;2 o5 ?; |) [. J9 w+ V, N
pos[2][1] = y+630-(int)temp;
9 l/ b7 w2 E6 d/ m2 A. r( M& X5 `}; Q; L r( Y7 W- O3 N
clearrectangle(x,y,x+1200,y+650);
. o7 s" T4 G1 Lsettextstyle(40, 20, _T("楷体"));& }5 U- V" V" b; a1 r8 o
outtextxy(x+50,y+50,"FCFS");
; X2 b, O0 p( o1 L2 Q5 Pouttextxy(x+280,y+20,"CPU"); //画柱状图
1 N$ L: K' ~9 D/ Z4 ?outtextxy(x+285,y+20+200,"IO");
7 {8 @+ ^# U Q; fouttextxy(x+250,y+20+400,"change");
1 P5 b8 b k) P7 o2 Trectangle(x+270,y+65,x+330,y+215);
, E: h( M( P* W, Frectangle(x+270,y+265,x+330,y+415);
& f, Q. e0 E+ `. z' grectangle(x+270,y+465,x+330,y+615);2 [% ?* H* Z0 X& K1 s6 k. m' q
outtextxy(x+290,y+620,"TT");) }8 ]" H; G& }- d: u4 \9 h" q
t = (float)com;; T: k8 o7 }4 o8 e; c
temp=(t/101)*150;0 {0 }6 ~2 j5 N" u8 S/ Y
fillrectangle(x+270,y+215-(int)temp,x+330,y+215);
7 \, j! X' m. Kt = (float)wai;
% u) b8 s- ~* Y1 o) Jtemp=(t/101)*150;! Y( Y8 |$ j5 X
fillrectangle(x+270,y+415-(int)temp,x+330,y+415);
. i b, E6 z. o1 t1 n3 Vt = (float)cha;" ^- {. z$ [5 y+ u6 T2 e3 v
temp=(t/101)*150;
' n/ ~7 y# j" L/ P( F% Sfillrectangle(x+270,y+615-(int)temp,x+330,y+615);
& O/ S6 [. s+ v. Afor(i=0; i<3; i++) //画坐标 high=90,length=250- t' L; s4 m/ ^
{
" n2 r6 h5 ^2 |2 B4 |% A3 Y( [( dline(x+650,y+210+210*i,x+1150,y+210+210*i);
1 z+ V- h C3 M3 p. pline(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);6 J% e% p* K6 T2 w5 G
line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
$ P$ B$ K+ Y. ]5 j+ o+ c' {) _0 k7 N+ C. C7 c% X
line(x+650,y+210+210*i,x+650,y+20+210*i);
( `( `* L$ i, V$ P/ h7 |line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);: V. g3 {+ L7 l2 O+ Y
line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);& r8 |6 Y$ `: g6 a' @7 e* }
for(j=0;j<num-1;j++)0 t4 @: h9 [% E4 @9 t/ P
{; P4 {- n9 w% Z4 h
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
0 e. \* N! I. {% m$ g, dline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);. D% a4 j$ B# f# Q
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); # j( ^9 f3 X& @. Q0 I
}3 k3 a1 x2 o( \, I! M, q
} p( C5 q. M, }6 ] w: q
} B( Z" A. t. W; V
# F# w& e$ H5 r6 T
+ s: W( D0 H' _. S1 D0 treturn 0;" o4 f- F7 W6 S& P. \$ E4 j
}: W$ I% {! e V; I# {
int drawPerformance_HR(int x,int y,int memorry,int com,int wai,int cha)
& E/ f% a1 b7 E7 A$ u{
* N* R# _8 m& jstatic int info[11][3],num=0;' m: ]. v8 g0 [" j y2 L/ f
int i=0,j=0,pos[10][3][2];
: h, y% `, t! tfloat temp,t;( W! O! o3 z1 q' @+ P. |
info[num][0] = com;+ k; J& g7 l+ G
info[num][1] = wai;) m& Q3 R/ {: j
info[num++][2] = cha;) V8 |( @" |7 X% Y; z2 u
if(num>10) //存储10个点9 P# Y3 g+ E0 {: d+ ~; W+ a
{
9 M0 K& M- e. Tfor(i=0 ;i<10;i++)% z8 m+ I3 N' `. j) M% \
{
3 \4 g. ]+ M) K$ [2 T- l) V1 A1 _info[0] = info[i+1][0];2 _. Z+ Z+ u; K+ ?0 f9 k3 J. z
info[1] = info[i+1][1];/ v- \" l( S- l5 O* X1 [" t8 _
info[2] = info[i+1][2];( T5 }2 O9 c. F0 z
}
$ J9 j7 w/ X0 b/ e3 R3 T9 Znum--;
/ T" w4 Y- \. y: u8 x8 N}- Z8 J% ~! g9 ^3 O3 V$ v* v
if(FLAG_show==0)$ ^8 |9 Q7 l# s& y2 h
return 0;" `/ E9 ~; a D( H2 L: v
for(i=0; i<num; i++)% z0 `3 ^' ] C7 O
{7 [# C- h8 z$ A" k( a. P
t = (float)info[0];' q$ x3 H) i i( p
temp = (t/101)*90;
?, G' X1 v: P$ v3 y- W7 X- p4 H: cpos[0][0] = (10-num+i)*25+x+100;
# e; w% E+ g3 G( }1 W8 C# g$ U1 Epos[0][1] = y+110-(int)temp;
; _: d* B* ?! S2 u0 Qt = (float)info[1];
L+ i' }6 U4 D. [temp = (t/101)*90;3 V& a) i: g- c: `. h. E$ J
pos[1][0] = (10-num+i)*25+x+100;
4 p' G9 J3 B& |3 \. Tpos[1][1] = y+210-(int)temp;
N* ~4 c/ z: ]; jt = (float)info[2];
+ m4 g8 ?/ I2 m0 y rtemp = (float)(t/101)*90;' j8 l M& t' O; J7 W' O8 N# }
pos[2][0] = (10-num+i)*25+x+100;8 A; n, t# l% n0 g5 F" N
pos[2][1] = y+310-(int)temp;$ M {; T8 z' B5 a
}
1 @, P8 t6 e5 [8 cif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)4 `' |, |# V5 K4 y0 b) |
{
/ u- }7 {& }$ ?$ zclearrectangle(x,y,x+400,y+315);0 b; I1 b+ P' u. i$ e
settextstyle(20, 10, _T("楷体"));7 O1 j# r* p4 y
rectangle(x,y,x+400,y+325);
+ L- D( C7 @, A: F2 I& wouttextxy(x+40,y+10,"CPU"); //画柱状图
! v( E5 D: }; n; e% G/ souttextxy(x+45,y+10+100,"IO");
. V0 g) B. Q0 L0 U/ ?2 A; Q4 Qouttextxy(x+40-15,y+10+200,"change");+ P0 s, e W: Y6 \! b1 E
rectangle(x+35,y+30,x+75,y+110);) c- I7 ^6 ^4 b/ s$ z6 N4 n
rectangle(x+35,y+130,x+75,y+210);
2 Z( M. @( V. C9 N* P2 Lrectangle(x+35,y+230,x+75,y+310);$ U9 M* F0 N" b0 v" k$ A
outtextxy(x+180,y+310,"HR");' p; ]6 x7 N8 M; F, U' d R. t
t = (float)com;7 ]' E" _; n7 J) i L N+ @0 [
temp=(t/101)*80;
& L. Z2 d7 G) Nfillrectangle(x+35,y+110-(int)temp,x+75,y+110);
$ j E2 G9 \# v) w0 Ut = (float)wai;
- N* g2 J, e( G; B! itemp=(t/101)*80;1 V; W9 X L6 { q- y- ?$ o. @
fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
6 z: ?- ^5 p: D; Rt = (float)cha; ~# H. r0 U5 e
temp=(t/101)*80;
$ u. X0 P( V: D0 n" [4 C, Cfillrectangle(x+35,y+310-(int)temp,x+75,y+310);4 G2 B, _% `: a% [$ c. \2 J' n( z
for(i=0; i<3; i++) //画坐标 high=90,length=2509 v5 S" R ]) w4 J# S8 b; z) {" f# P7 ]
{
. q: Z" h7 q/ w5 D5 d" {( Bline(x+100,y+110+100*i,x+350,y+110+100*i);/ c% }. S) U8 e$ p1 q7 l
line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);% i9 I5 m+ v: y( v
line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
' f6 V: O! T4 G. ?8 K4 m K
* k2 ^& j: ]9 \3 d* z; `4 sline(x+100,y+110+100*i,x+100,y+20+100*i);
; z9 S- o1 z: \* }# h( L. f. jline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
; ~/ B, m' H8 T/ E- Mline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);
, J& w v# G. [* T4 d( j7 k* m* \for(j=0;j<num-1;j++)4 r8 B% t# y1 P% ~3 M
{4 S$ t/ i' Q! x# @! W0 ^4 o
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
% `" t! Q- W2 m" v4 ~line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);& t4 d1 w3 y, V. I& w
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); $ |4 w8 M% u) v" P. F% ]- w, o
}
) O: L* T- r* M& i}0 \6 `! ^7 }0 b/ @' B* X0 L& I" i
}
$ O- F- n: d0 I& Z5 {" delse if(FLAG_HR==1)
* I# i0 S! D) M2 y{- C& i: z9 S! i: a i" q8 N) ^
x=0,y=0;% p* r% X9 o. M0 F% @+ G' Y
for(i=0; i<num; i++)
5 a& H0 ]8 C- Z4 z5 ^% |6 I% Z{+ E. C/ V; H7 ]) D# B
t = (float)info[0];5 N/ `/ }; }, e9 n3 g' y8 i5 r
temp = (t/101)*180;
& I/ \% O' Q9 P, |% N' G1 Ypos[0][0] = (10-num+i)*50+x+650;" v( H; T5 J7 U$ I6 Y+ C' b
pos[0][1] = y+210-(int)temp;
) {3 O5 [6 N1 @: O& u/ \, pt = (float)info[1];
! z4 [/ ~. m! M- h1 itemp = (t/101)*180; N- f, \9 [; Y/ `' ]6 z
pos[1][0] = (10-num+i)*50+x+650;
& g3 g2 ]+ l0 d, `pos[1][1] = y+420-(int)temp;- o+ Y9 I+ w% R% V, N) t
t = (float)info[2];7 y3 T; d X+ l6 I% F3 l: T' p
temp = (float)(t/101)*180;
, l4 ]: ~" Z! B; U, apos[2][0] = (10-num+i)*50+x+650;
9 E% D6 N% ?. X8 ^pos[2][1] = y+630-(int)temp;/ o7 d- I5 b! N) V: w" a
}
# l, R- K1 j# I( T" t5 Oclearrectangle(x,y,x+1200,y+650);
7 U3 D# k. C! S# K0 v9 H$ fsettextstyle(40, 20, _T("楷体"));9 h: r' u/ y) {7 q8 ~0 Q
outtextxy(x+50,y+50,"HR");
1 {7 U E: s) a# couttextxy(x+280,y+20,"CPU"); //画柱状图
8 d5 S9 ]! ~3 k% kouttextxy(x+285,y+20+200,"IO");
\) u: G/ {! c) Touttextxy(x+250,y+20+400,"change");+ h' V5 W( k# h' t+ u% i6 r9 V
rectangle(x+270,y+65,x+330,y+215);- L! j# x7 {- h( j8 y
rectangle(x+270,y+265,x+330,y+415);
& I; z6 f# d- v( k0 d1 Qrectangle(x+270,y+465,x+330,y+615);
% `# K4 t4 j" u: A- U: youttextxy(x+290,y+620,"TT");
) k3 P- y& B$ G. s( l8 g! Wt = (float)com;
% \) Y% P/ g* q. M/ qtemp=(t/101)*150;8 p( z7 z, d4 n6 g- L' B
fillrectangle(x+270,y+215-(int)temp,x+330,y+215);
3 e) V- N: u# ]2 L2 I+ O* {t = (float)wai;
9 ]+ ?2 G' D1 @4 Ftemp=(t/101)*150;
e" C1 h! }/ y6 Yfillrectangle(x+270,y+415-(int)temp,x+330,y+415);
8 }8 f, n* q' s/ s- K* O" Lt = (float)cha;
# p& [: ]/ Z @0 F. r0 Ktemp=(t/101)*150;
n. t& }, u. W* m% d4 O% \; D) Yfillrectangle(x+270,y+615-(int)temp,x+330,y+615);$ Z& K# q+ }, K7 E4 \& Z$ y% E+ p
for(i=0; i<3; i++) //画坐标 high=90,length=250
6 ?) |' L- Q( ?; @3 x{
/ s4 f$ T9 R! Z' l' L" wline(x+650,y+210+210*i,x+1150,y+210+210*i);
- ]/ d9 V6 W6 O: rline(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);6 ~2 V0 R9 V; z: z9 f0 M
line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);, c9 k9 @9 f( \# s
: i# Q9 y5 N3 r8 zline(x+650,y+210+210*i,x+650,y+20+210*i);
( @4 [' s/ I) Eline(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
1 [+ Z' I* I7 b6 I9 t7 D% @line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);/ Q. W; G4 q q: l8 k: P5 u4 ^3 [# _
for(j=0;j<num-1;j++)
8 A1 [" t4 c7 r' T' m# u/ e7 W{
4 u% g% r; f6 z: V0 O. h/ n$ c" Gline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
# x5 T/ v: _1 f% p! ?* Z( B m1 Cline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
3 a1 L8 P# P" x* q8 ~line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
: u) H- K, q' c4 T3 Q}
3 J9 x+ k, Q# z4 M) v}
F- P9 Y. L2 J9 V+ M}: }4 `1 I$ X5 ?% c- h/ Q. `' a
: _$ H1 C7 f$ V
+ ~$ \6 O8 ]# G! Y
return 0;
7 K. \* h; K9 G" h: V}/ `8 j- Y/ F" e8 s' F/ }
int drawPerformance_TT(int x,int y,int memorry,int com,int wai,int cha)" n1 x' `0 |& J
{
- Z$ L$ h+ r2 w7 Wstatic int info[11][3],num=0;
z8 y0 S* u. Cint i=0,j=0,pos[10][3][2];
; G3 E, E' N6 u* u @0 S4 r0 yfloat temp,t;
. X/ v5 a1 L8 e8 Qinfo[num][0] = com;
1 W4 c$ Y n7 O9 H+ O& t/ r' W% xinfo[num][1] = wai;
6 u9 A0 W) I$ s3 I, ~ C- s. ginfo[num++][2] = cha;8 {) Q7 n& v% B6 y4 v7 U
if(num>10) //存储10个点
! G. G. _, A! D( ?/ P- I7 |5 G{
+ U- q, |& f, U3 @( N2 @+ o# m- }for(i=0 ;i<10;i++)
5 P; R" X b1 G& v9 \{
7 s5 K$ J% I0 D- Winfo[0] = info[i+1][0];
! H4 ?; I/ m( w' ~( g& I# zinfo[1] = info[i+1][1];
" o, V: d) g) s3 \' Rinfo[2] = info[i+1][2]; W3 d& O4 V, }7 a) U
}) A3 \0 E* i& R+ z
num--;
" ?5 R6 I) _$ q+ O% M# R0 ?+ V}: E7 Y, W# C* w ?3 S' ^
if(FLAG_show==0)) b4 {; P% }4 B Z
return 0;* V! p5 O6 U2 I/ T2 @/ i
for(i=0; i<num; i++)
3 s- ^0 B6 ~0 m, ^ {{- z1 y( H' n" i- K
t = (float)info[0];
* m; z1 u2 e. A" a( Rtemp = (t/101)*90;
; |+ [$ [6 B# z, O! ipos[0][0] = (10-num+i)*25+x+100;
( P, J: e" s& Y) L# ]8 `pos[0][1] = y+110-(int)temp;
2 `- Q* L" K7 F) {* P- r! N8 ` S6 l; @t = (float)info[1];
+ R; r+ A; \- S, K" Btemp = (t/101)*90;; H+ K6 ~- }8 m' O7 L
pos[1][0] = (10-num+i)*25+x+100;
; O: l5 {4 b4 m$ S1 H/ fpos[1][1] = y+210-(int)temp;
! r9 T& p! W( q; ^t = (float)info[2];8 ]* P4 `5 K. z
temp = (float)(t/101)*90;7 a) a0 P2 l6 W- c: _% c: [
pos[2][0] = (10-num+i)*25+x+100;; N2 S- E2 b6 [! r* S
pos[2][1] = y+310-(int)temp;
9 [* \+ l; `& s}' N- `3 q! R- x
if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
1 w& m g- y% B" I3 o' R{
3 `' G) K* \# {- R* _7 Sclearrectangle(x,y,x+400,y+315);" [: [( \1 F9 B$ ^ W
settextstyle(20, 10, _T("楷体"));
/ X+ H- I$ b$ B* jrectangle(x,y,x+400,y+325);8 h! w6 o. ?2 ]( u% ^2 X5 R
outtextxy(x+40,y+10,"CPU"); //画柱状图
! f/ M, ?% e O! f; n& Q) T* r7 m* x# wouttextxy(x+45,y+10+100,"IO");, J" L2 H* g' w+ Y. r
outtextxy(x+40-15,y+10+200,"change");
( b6 p0 T0 Y' F: H: A$ |rectangle(x+35,y+30,x+75,y+110);
; C8 G. o- A; S0 Z* [( m# G- Prectangle(x+35,y+130,x+75,y+210);1 w5 m: I" O A- \8 u4 Z4 ]$ m
rectangle(x+35,y+230,x+75,y+310); P/ X, H9 I x, J7 \$ j
outtextxy(x+180,y+310,"TT");
/ i! D+ P; p, p7 j9 N2 Z4 it = (float)com;
' F2 Y2 L8 Z5 i, x" }+ ^# Wtemp=(t/101)*80; Q4 L5 I! K' m
fillrectangle(x+35,y+110-(int)temp,x+75,y+110);
1 v S. [0 y% k: [* n# ?t = (float)wai;
) j8 {, J- s6 C3 |temp=(t/101)*80;
$ |7 G0 m/ a( L9 ^fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
0 B5 b6 |( r6 Nt = (float)cha;
, v9 x$ z2 R, Q- D; ^temp=(t/101)*80;
8 C- `; m1 \4 P o# \* Ofillrectangle(x+35,y+310-(int)temp,x+75,y+310);8 F$ M* l7 d4 G: N, S& A* i0 ]
for(i=0; i<3; i++) //画坐标 high=90,length=250
) a K5 o+ x6 M/ ~; D. r{0 G% Z/ N: V4 Y7 |. s$ a) j8 y! `
line(x+100,y+110+100*i,x+350,y+110+100*i);
; }$ K, W6 ?: _: X2 }2 x! n( Jline(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
5 T' y# ? f6 y2 l/ o; yline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);& ~+ w" Z! S7 |
: W. |( U$ {: }& }line(x+100,y+110+100*i,x+100,y+20+100*i);
, D$ J+ W# E0 ~7 |7 E) oline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
4 H" S7 `. A3 Eline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);/ V4 p$ l) H4 s( Q2 j' s) G
for(j=0;j<num-1;j++)8 x6 g. S8 Q" Z( \2 _: a$ N. y+ v
{
7 l3 ^: F9 m& H- ]2 `+ rline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
/ P3 W0 g- Y y* X9 H9 Nline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
$ J) a, [6 p. |0 s" U! pline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
6 \/ D) K+ n5 t4 {4 l$ ]}; @# v- I6 C9 }/ m
}1 ^ A# X5 G+ }( m( p
}
' G$ M- m$ e6 s, c) R* Q* a) z* d9 Pelse if(FLAG_TT==1)! k; J! s# P0 ^& E" W
{
% a- g, h3 A' c$ \5 r3 R* ax=0,y=0;. e/ _1 p) j1 r% x: I7 ^) F
for(i=0; i<num; i++)! G9 T5 O0 g( @; F
{# ^! i2 r4 g3 e0 R' g. I$ E
t = (float)info[0];
( I2 d, N/ x; Y3 i$ z7 I* _5 S7 wtemp = (t/101)*180;
, i1 B; L0 F* w& G( E" B! e5 Hpos[0][0] = (10-num+i)*50+x+650;5 P$ `8 c3 h1 Y) |6 [6 j
pos[0][1] = y+210-(int)temp;
, W' Q# M y4 a8 V. y$ S. nt = (float)info[1];
+ p# g( ^5 R$ D2 ^' `5 L5 E" x" t2 ~temp = (t/101)*180;
! `7 r' {/ b% S) D7 M! Gpos[1][0] = (10-num+i)*50+x+650;6 R: s8 D1 ^+ W# }7 e E
pos[1][1] = y+420-(int)temp;6 T6 c Q8 o! x
t = (float)info[2];
. M) }) \' d4 u& H0 N2 ~temp = (float)(t/101)*180;) c y( |9 Y/ x1 e
pos[2][0] = (10-num+i)*50+x+650;
% F! l7 @0 g) Q8 z# npos[2][1] = y+630-(int)temp;$ v, [3 @& K3 w3 g
}
1 t/ g5 U5 k kclearrectangle(x,y,x+1200,y+650);& g8 h, L1 N. Z
settextstyle(40, 20, _T("楷体"));
# g+ b7 A& p5 M# youttextxy(x+50,y+50,"TT");
% u$ Y- I2 d* `outtextxy(x+280,y+20,"CPU"); //画柱状图
. y7 l; U( k! t6 e! R+ {$ p) K8 e1 E5 Aouttextxy(x+285,y+20+200,"IO");, O# c* E; {; F6 x
outtextxy(x+250,y+20+400,"change");& V \8 X" Q, z: N) F, L$ {& I
rectangle(x+270,y+65,x+330,y+215);- [5 ^1 _2 w4 R3 c# u
rectangle(x+270,y+265,x+330,y+415);
6 b" n9 e) G: X6 |rectangle(x+270,y+465,x+330,y+615);" O7 V: ]2 Y7 j4 a3 u7 w! Z
outtextxy(x+290,y+620,"TT");
5 h, V3 B6 o/ i' f; O; ~/ R8 b: Ot = (float)com;
# ~# |4 a% c5 c& l9 ltemp=(t/101)*150;
1 _. V) `: I; n9 wfillrectangle(x+270,y+215-(int)temp,x+330,y+215);, S( R& m5 C3 P1 N5 G$ b/ A5 S
t = (float)wai;) c4 B& S% @% T6 {
temp=(t/101)*150;+ @3 A7 e0 G1 H' H7 n
fillrectangle(x+270,y+415-(int)temp,x+330,y+415);
4 t6 v5 _% K. B$ u) Wt = (float)cha;, @' v" U, j1 U- \) }
temp=(t/101)*150;$ U. r8 R$ Q7 S
fillrectangle(x+270,y+615-(int)temp,x+330,y+615);
" R: I( Y- ?3 H; v. k$ Kfor(i=0; i<3; i++) //画坐标 high=90,length=250
$ _+ a; L% m1 B# B# L' V }{+ ?% w( E9 W( f3 n
line(x+650,y+210+210*i,x+1150,y+210+210*i);9 y+ a! q6 O9 C5 A
line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
% ^' }7 _2 F d. f! }line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);4 _1 D8 H4 s1 X* k
6 e: y# ^% d% H1 w9 X$ Tline(x+650,y+210+210*i,x+650,y+20+210*i);) P+ _" C5 N( m* n7 R" a
line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);' [4 x4 _# S% s; t1 |# `& m
line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
. C% ~5 w4 w* s1 \* D9 Z. {for(j=0;j<num-1;j++)
4 S7 {* H. [/ c# @4 M3 G( W{
" D4 e. v5 S6 e, F& W: xline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);$ u' E0 M; ?5 S! e/ Q* `. L
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);7 Y2 p, l% ?. f4 `* h3 ]
line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
: _3 g/ B6 O! O( W- U) ]}
# ~8 w+ A6 @' S) K- N/ n; b}1 K8 ]1 e7 L' S4 M$ l9 U5 u
}
# d2 \* Y: x, F$ q" A1 {7 [; _6 n Y
* b$ u9 z- [) v; X* [$ F; G9 p
return 0;
$ ?! {# j& B! n1 F}5 X" q% m1 j/ S4 E
int drawPerformance_PF(int x,int y,int memorry,int com,int wai,int cha)
- l+ G6 F( G1 U% g# {/ B5 ^{6 M: D3 k4 Z. P& Y5 z
static int info[11][3],num=0;
% `7 V% C7 `- s0 U% A6 A. M0 \* Lint i=0,j=0,pos[10][3][2];: Q5 R$ K0 j; y' G: I8 o! y/ N
float temp,t;# h X$ B( J$ o% g( r7 n
info[num][0] = com;9 i. E1 _7 T* R+ N: G
info[num][1] = wai;/ s" P7 i& ~) D: O
info[num++][2] = cha;1 x9 \) Q) C5 Z2 B
if(num>10) //存储10个点
, e3 N5 z& b8 z{) K$ z2 a' A& C: _- U$ x
for(i=0 ;i<10;i++) F/ w: d) s6 R: p$ i
{! o% l! g, h$ W7 ]% t$ E
info[0] = info[i+1][0];, U# B* r0 k2 D; O4 w
info[1] = info[i+1][1];. o& [/ e+ c: {0 f
info[2] = info[i+1][2];
5 W5 x# V& b7 ?( ^4 [}( [9 T; Y" V" q( K% x2 p& L* W
num--;
4 Q: O2 H- g2 c$ T$ U}0 M. ~8 [: x9 |& d$ o
if(FLAG_show==0)
8 a* S" F7 c: o& i: r; g) @( zreturn 0;: i9 R7 n# _7 ~9 ?' H! m& t) y! N
for(i=0; i<num; i++)5 o1 S% b6 W m4 I) M
{& |# d' x3 H) t2 w! d2 }5 O' A
t = (float)info[0];5 v% N: J& f1 O
temp = (t/101)*90;
5 {( [2 x" H0 [5 L% s3 bpos[0][0] = (10-num+i)*25+x+100;
* c2 n* K+ {6 w! Upos[0][1] = y+110-(int)temp;$ r/ D3 Q2 v; u5 s8 Y
t = (float)info[1];
1 t/ X# N% d ~3 }; Q" d, O3 k5 _temp = (t/101)*90;
0 O$ w \- z1 S- u c6 T9 R9 o( Z$ u# l& Hpos[1][0] = (10-num+i)*25+x+100;6 \, J$ _1 D# h+ ^2 t# C1 }
pos[1][1] = y+210-(int)temp;
; I( Z6 W( G/ Z1 U' o* Qt = (float)info[2];/ X- ^1 I2 U; @, h* T/ R
temp = (float)(t/101)*90;+ y' @( w+ b7 B, }/ S+ d& D
pos[2][0] = (10-num+i)*25+x+100;6 ?$ _; A- ]. o+ t; o& X- f( l
pos[2][1] = y+310-(int)temp;
- j- s3 R' Z: u7 v& c}" J Z, Y: I' e9 @( ?( I ~5 z
if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)" ], \) p6 E6 S. x
{
4 n2 v+ ^& l- Q7 j; Wclearrectangle(x,y,x+400,y+315);
8 M! J7 m) U: }/ u, J7 D/ o0 V9 Qsettextstyle(20, 10, _T("楷体"));2 ^" k. ^8 D( T6 W9 h
rectangle(x,y,x+400,y+325);
& f4 L+ v0 C! Z) \* g) souttextxy(x+40,y+10,"CPU"); //画柱状图+ z# L$ G& \( Z0 L+ g
outtextxy(x+45,y+10+100,"IO");2 }1 c* w- e+ _: `( U8 i9 c
outtextxy(x+40-15,y+10+200,"change");
9 ~5 C) m5 L+ ]rectangle(x+35,y+30,x+75,y+110);
: I8 p$ q. S1 g1 J! Krectangle(x+35,y+130,x+75,y+210);/ ^ p5 y$ k8 `* w& m
rectangle(x+35,y+230,x+75,y+310);7 A! ^0 J7 u$ n- @
outtextxy(x+180,y+310,"PF");
3 ]# g9 R* F7 g/ z" Z) q: E& K" Qt = (float)com;+ B, b C- n) w& D0 F
temp=(t/101)*80;" R$ s6 V: _4 _4 I6 B
fillrectangle(x+35,y+110-(int)temp,x+75,y+110);: ~3 y, S8 I0 A" @' R
t = (float)wai;3 Y4 B4 Q: u$ ^1 K9 D! o! R
temp=(t/101)*80;+ ?; _) i! g0 D
fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
4 Y9 v# e/ Q6 dt = (float)cha;
5 \4 n3 q" \% K; z& i6 qtemp=(t/101)*80;) H7 o0 t5 o- j( P K: a* J, V
fillrectangle(x+35,y+310-(int)temp,x+75,y+310);1 a# A# y* v% e! j2 q" n: b
for(i=0; i<3; i++) //画坐标 high=90,length=250( d" Q3 u/ K6 }# F- t& a( I% g5 d" X
{
% H7 i* j. d3 a4 H4 o' b2 Dline(x+100,y+110+100*i,x+350,y+110+100*i);$ l& ?& W7 U" h+ }. R4 y$ t5 ~
line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
4 b8 O! S! w8 v1 X) O$ f* S" F- h' nline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);) {$ C0 n4 `/ D$ X
' A2 E" _6 b/ _7 W' }, t1 ]
line(x+100,y+110+100*i,x+100,y+20+100*i);
- N8 {- b/ q$ ], g/ Lline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
$ _: ~3 l Q! m( Q) Wline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);$ g+ N% b1 a" S1 P3 l( Q9 [
for(j=0;j<num-1;j++), W% @# L$ p" d# b7 O5 O
{+ _! A& r( i, \+ ]
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);0 w$ p- r( m5 }! W
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
' R4 f4 U5 |( t% J0 i6 j* Qline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); , v! O% @9 d1 o* @8 Q
}
7 Q- y: n7 L. Q+ {0 _$ v, w}
: }6 u1 L: k3 U0 k3 Q7 f% o/ ^; G3 e}
9 n$ P. r, h" Melse if(FLAG_PF==1)) r2 g( e& |1 V: y; D5 E
{7 n$ a. C: L% I+ g6 V
x=0,y=0;( W" ]+ a' [8 R4 X+ }8 L
for(i=0; i<num; i++)
2 N/ A8 ]& N- ^4 g0 s{+ e0 |/ s0 Z: H. r" z) F7 I
t = (float)info[0];* q# ?7 L( F4 P) z% v
temp = (t/101)*180;+ n1 J; z; P: g' O
pos[0][0] = (10-num+i)*50+x+650;
1 n9 a; s; z. U% u" ~pos[0][1] = y+210-(int)temp;
9 _7 {0 q3 F* i( zt = (float)info[1];
* b! A% m7 e/ a. n# N' Stemp = (t/101)*180;+ ]% i8 i& o2 {8 g
pos[1][0] = (10-num+i)*50+x+650;
' R' R" u# o2 ypos[1][1] = y+420-(int)temp;
& p" w$ h- b! Q5 J4 Jt = (float)info[2];+ m% D0 ]5 q6 x. T; W4 W3 q: F: O
temp = (float)(t/101)*180;
, F0 l. a# X6 y* T8 V* Dpos[2][0] = (10-num+i)*50+x+650;
2 L3 j; e" {* D1 npos[2][1] = y+630-(int)temp;; G% f; L' F; M; P
}, r7 ?0 J" ~ `( f1 G2 T( v! q+ E& q0 C
clearrectangle(x,y,x+1200,y+650);4 D5 g$ {0 V D3 u5 ~$ h: h3 Y5 ?
settextstyle(40, 20, _T("楷体"));
& L3 P( z$ ~& u: x5 a' o$ t+ xouttextxy(x+50,y+50,"PF");
/ q! ^/ C; j( g: A) M, ~$ Aouttextxy(x+280,y+20,"CPU"); //画柱状图
# M- K! A; ^# [4 t. qouttextxy(x+285,y+20+200,"IO");" f/ M" N. q, Q! T6 W2 I
outtextxy(x+250,y+20+400,"change");' n" e. M' p/ I1 S W
rectangle(x+270,y+65,x+330,y+215);
( c0 r1 e* i" y/ |. yrectangle(x+270,y+265,x+330,y+415);5 E: b' V) S( t- h
rectangle(x+270,y+465,x+330,y+615);
" ]" L9 p/ ~% M j, ^( F3 Douttextxy(x+290,y+620,"TT");8 }8 v- Z! @1 l- L; ~
t = (float)com;- o( ]3 x& B! e# z: x# f) `
temp=(t/101)*150;
- l( w/ @ Q8 H6 h+ V: yfillrectangle(x+270,y+215-(int)temp,x+330,y+215);
6 _. U) U& v8 T) M8 E; St = (float)wai;9 \' `' b; C" k' z+ g
temp=(t/101)*150;
2 k) f6 @0 K5 B1 Ufillrectangle(x+270,y+415-(int)temp,x+330,y+415);: E0 O" ~- N5 Y- X2 S! B7 _8 Q
t = (float)cha;
8 S. N: E% Y% X# Mtemp=(t/101)*150;! ?8 P! \" K' ?% q# Z: K
fillrectangle(x+270,y+615-(int)temp,x+330,y+615);
" i; b0 e/ t5 N% X2 A! f0 \' jfor(i=0; i<3; i++) //画坐标 high=90,length=2500 x5 _9 E+ H3 _2 l$ l
{
6 f4 s$ [& _& Y6 K( g8 T2 t* ?line(x+650,y+210+210*i,x+1150,y+210+210*i);' ?- Q% l8 `4 e6 S
line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);6 }: I9 c: f* h+ Z" K3 c$ E
line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);& m+ X' o, S" i+ i! V6 l, v- I0 o
6 w X! V6 U- c- P8 B; Y
line(x+650,y+210+210*i,x+650,y+20+210*i);
4 Y2 }+ b$ ]3 M8 X. Tline(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
6 C. S0 w) T& j6 p: X) `" W9 Vline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
+ Y! j9 e; R& X. mfor(j=0;j<num-1;j++)' J! C# {2 v2 N* v4 `2 R3 u6 m- _
{
2 Y* \" ]2 N n. dline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);; l8 A7 I3 h; f! l
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
3 s F N- y2 Q3 }line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 1 S+ _$ |' m9 x7 f
}
; ~- @5 a: y, C! Z- j}
7 T3 Y# c% s% G}
0 z; N4 V* L; Z8 Q7 m( Ereturn 0;7 x- m: M3 ^2 h* ^# V; n
}
: C2 B4 S, C( ]) |int drawPerformance_SJF(int x,int y,int memorry,int com,int wai,int cha)/ _5 ^+ h- }+ @. S
{
N, ^7 D! w8 i+ E! Qstatic int info[11][3],num=0;" L, }8 A6 e# ]8 m7 h1 u
int i=0,j=0,pos[10][3][2];
5 g5 p# X2 K/ i5 M# jfloat temp,t;
. q' Q# X! R. z$ A4 S$ s1 Q' [info[num][0] = com;: ]5 F! h4 O) r! k9 l
info[num][1] = wai;
) a' @% `. W7 z8 v! zinfo[num++][2] = cha;: G# E3 v. ]7 Q3 N( R- \. V
if(num>10) //存储10个点- d- e9 z4 v! l2 b, b6 Q6 L
{( d- W! k7 ?2 K8 ?# S0 C" X
for(i=0 ;i<10;i++)
& N: z i" Y7 E- ]5 o{4 ~5 j2 O' t3 P9 f' H3 A
info[0] = info[i+1][0];: R4 U7 S% @8 k, G+ n- m2 w8 A
info[1] = info[i+1][1];
2 G) z5 T" b J0 r+ N, K3 Vinfo[2] = info[i+1][2];
: @* r$ O: [: ]}. Y+ b" ~% l8 Q" d- Z! ^
num--;6 |* @" J/ t: y
}
2 s) X" v/ \! l' iif(FLAG_show==0)
S4 _5 t0 d( g$ P5 e7 Hreturn 0;( Q2 T+ @3 B9 X! ] G. X
for(i=0; i<num; i++)1 z9 S y1 S9 d, _- f* M
{4 H" n; t+ M3 L+ y
t = (float)info[0];! U4 s" ~2 Y+ Z
temp = (t/101)*90;
# U( Z: ^* l0 p" n7 Q! Z+ wpos[0][0] = (10-num+i)*25+x+100;* ?0 T" \$ h" r ~1 ]# [/ p% O: O
pos[0][1] = y+110-(int)temp;
" Z% _. D1 Z8 B& ct = (float)info[1];, g4 X) ~; r* C, k, |
temp = (t/101)*90;- ` b! a# e4 F3 {! Z
pos[1][0] = (10-num+i)*25+x+100;6 ~' B7 L! a R' s. T% U
pos[1][1] = y+210-(int)temp;
2 G0 g5 ?% x6 r- L. ]0 F: i1 ?t = (float)info[2];
; ?5 }8 { v8 k$ T( v+ ctemp = (float)(t/101)*90;
2 r" G& d7 O/ {6 S V# ?2 M9 Upos[2][0] = (10-num+i)*25+x+100;. o$ p) C8 ?5 d# p( o5 g# w1 H6 _
pos[2][1] = y+310-(int)temp;
$ f6 R6 @: w* ]/ s/ N. E- x0 S}
. [3 r: P: E( [+ _9 H% e# Gif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
/ O( G* j* Y4 o0 G' y& c, \{
; h3 K! {, V; } E% |+ i6 Uclearrectangle(x,y,x+400,y+315);4 S' k, y% l( H! o( Z) J
settextstyle(20, 10, _T("楷体"));
* P) v/ H' e- \ c4 j( U. V) i0 Xrectangle(x,y,x+400,y+325);
5 t* p3 j+ I1 S) Y+ J3 L! Routtextxy(x+40,y+10,"CPU"); //画柱状图
& \. ] P1 E; ]6 {, S. W6 Y/ aouttextxy(x+45,y+10+100,"IO");" v& H+ v$ R' v6 J7 f* \7 p
outtextxy(x+40-15,y+10+200,"change");6 b8 @) ^ w' P9 h
rectangle(x+35,y+30,x+75,y+110);. N; P; N( p$ z! q
rectangle(x+35,y+130,x+75,y+210);& f7 V" b+ o( @+ O! P
rectangle(x+35,y+230,x+75,y+310);
7 Z( c+ |+ Y/ b( m' Touttextxy(x+180,y+310,"SJF");
: U% a( B4 x8 }8 N7 Et = (float)com;
6 r1 O. Z1 U4 m6 }temp=(t/101)*80;4 u b2 T( K/ [' ^
fillrectangle(x+35,y+110-(int)temp,x+75,y+110);
+ J6 n6 H7 u) o/ G' ]8 _t = (float)wai;2 b3 E, x+ E# Y7 l9 w
temp=(t/101)*80;, M2 _$ f' K. T1 H% v0 R& |
fillrectangle(x+35,y+210-(int)temp,x+75,y+210);/ I* I, |3 x0 c' k' p/ s* M9 w
t = (float)cha;: o! g1 t# W5 v g* X
temp=(t/101)*80;! u' n$ B" S+ A$ m1 u1 o+ I
fillrectangle(x+35,y+310-(int)temp,x+75,y+310);
" f) Q7 ~2 |+ t* `3 z8 ?: S& Hfor(i=0; i<3; i++) //画坐标 high=90,length=250
, e9 D4 [6 ^' C3 O* [8 O/ Q{
& V8 _5 k/ [3 `! J2 vline(x+100,y+110+100*i,x+350,y+110+100*i);6 C6 I/ ~3 r+ v- w1 W
line(x+350,y+110+100*i,x+350-5,y+110-5+100*i); G M" T' o2 y2 c
line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);: L+ T$ p4 r& v) @
; n2 A# O( c+ p, q) t3 z! [3 V5 bline(x+100,y+110+100*i,x+100,y+20+100*i);1 R; C; @9 y+ |* e
line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
9 g( O/ p: f5 g* u- Y1 `7 Iline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);+ t" r. j+ _/ @0 r9 {$ ?6 b7 t
for(j=0;j<num-1;j++)
6 U! \ U% Y9 [$ F" Z4 b* H! _/ c{& P1 U$ J" F$ O; _* o1 H) `
line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);( X ^0 m* s7 A5 M4 w6 |1 _
line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
9 X' f& c) e+ L, M: j1 q2 H, bline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
& c2 y2 P5 o9 J}0 y& | \7 e1 r s( I8 F* ~: [
}
* {# \( ]& j! L/ Y}/ o c; y) H5 O/ h5 T
else if(FLAG_SJF==1)
& y9 [3 l) e/ m{
7 l1 w5 o1 o$ R" Tx=0,y=0;% P9 G. C. H4 s# H! d
for(i=0; i<num; i++)
+ R% r5 |. l0 e/ _* C{
* b/ [7 E7 e* Z7 xt = (float)info[0];
# w; I5 I5 m, H* U" Itemp = (t/101)*180;
# i+ U) J/ T( B* E1 Z4 G& apos[0][0] = (10-num+i)*50+x+650;; T& A3 k7 {+ a
pos[0][1] = y+210-(int)temp;
7 \- J! m/ f9 |t = (float)info[1];
% @1 @* U) l/ `/ C+ A+ G+ stemp = (t/101)*180;, K2 i. O0 A! m+ [, ]+ A
pos[1][0] = (10-num+i)*50+x+650;/ \5 Y2 i$ h* J2 e! r
pos[1][1] = y+420-(int)temp;
y1 f( ~/ v! _& Xt = (float)info[2];- q) d4 P( P. w5 V
temp = (float)(t/101)*180; K' }+ w( x' H
pos[2][0] = (10-num+i)*50+x+650;, s% T) B! k! Q/ x$ i
pos[2][1] = y+630-(int)temp;
3 D8 O, w8 z1 G) ]}* X) O3 J! d: X- B1 ~* F+ S4 a& B
clearrectangle(x,y,x+1200,y+650);
) p# g3 i2 F8 v( H2 Y* csettextstyle(40, 20, _T("楷体"));1 O- f; |- P* W& x* C. ?) t
outtextxy(x+50,y+50,"SJF");4 C* V! g% Z# A3 U! x
outtextxy(x+280,y+20,"CPU"); //画柱状图
$ j' {' _9 Z5 M' k' J# zouttextxy(x+285,y+20+200,"IO");
x8 D+ H/ e2 v4 vouttextxy(x+250,y+20+400,"change");: V8 s# U' d; @2 \
rectangle(x+270,y+65,x+330,y+215);
4 `/ z5 A( b# {( A: urectangle(x+270,y+265,x+330,y+415);
* R* S, k% n+ `2 Nrectangle(x+270,y+465,x+330,y+615);/ h; a6 s2 s& J( y5 V6 C
outtextxy(x+290,y+620,"TT");
+ V7 g4 N: Z C0 St = (float)com;
8 L8 \; T/ }9 S! u; N- atemp=(t/101)*150;3 t: O, ^: E6 B
fillrectangle(x+270,y+215-(int)temp,x+330,y+215);4 ^- M! g! F' V
t = (float)wai;
8 O6 M8 c: C9 b2 G: Ptemp=(t/101)*150;% V( l- r, J* u5 `% t+ |( O6 i
fillrectangle(x+270,y+415-(int)temp,x+330,y+415);2 i8 K2 | s P" m7 _- q
t = (float)cha;& {1 ^: t7 t' y4 \
temp=(t/101)*150;$ r# \' w" Q2 X- k) k, i
fillrectangle(x+270,y+615-(int)temp,x+330,y+615);! W0 ~& }) R. H
for(i=0; i<3; i++) //画坐标 high=90,length=250
$ T- v1 F2 D9 v# G7 P{
. J) f8 v9 a2 r/ C5 `% w- aline(x+650,y+210+210*i,x+1150,y+210+210*i);- I7 ` H+ }, {5 I% N
line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);! W( v; ^$ R/ i0 p! n' c
line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);- _0 {$ c7 k o- q7 q/ D
7 h' W* R. T4 ~) z) @ j4 zline(x+650,y+210+210*i,x+650,y+20+210*i);
: O+ M& L( o/ |line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);! r! U9 c6 y$ O3 G% c% U
line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
6 w2 I' U7 A& bfor(j=0;j<num-1;j++)
! b9 K% `- y3 I3 z" G{
. `2 D4 i, W- ]4 T. L7 A9 T6 qline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
( _+ c. _, N' ^6 N# B9 jline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
9 T/ d( ~9 q+ p7 }line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
* u# \1 Z/ C* G}
9 l) c7 E$ ~- k4 }4 K8 C" L" n}
' C; q* P4 ]* w# i/ p0 S3 K}( D0 ?, S5 Y+ @1 } T
return 0;
6 y% L7 W* U( v# f# E}
7 X( _. {# P% v. n0 s d) }4 Fint High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
/ ] F0 y" U& u) u{
7 b+ i4 j [7 C, I& X* t. M2 nstatic int compute=0,waitio=0,change=0;
& v$ M5 B5 s, y* |0 ^static int computeLast=0,waitioLast=0,changeLast=0;- t- ~; X8 B- |8 z: y5 J3 h; h# T
int i=0;) M3 M7 \; a- C( b
if(draw==1)4 V3 w- S" n/ ^
{
; j9 _' D( J2 l( L$ y//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);) Y3 }: v# u% r: {& D* j
drawPerformance_HR(400,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
# [/ X2 H- E7 H# {! [% v- |, e5 PcomputeLast=compute;# A" m2 _4 ]0 Q( w |3 ]
waitioLast=waitio;3 b } o4 l2 @: ^/ i+ {' ?
changeLast=change;
7 N" F* O$ [! ~1 i, i}
/ w# {' M& I0 Aif((* memory).p[0].flag==ready)" N* j8 N4 \; V! H# z6 Y3 ]$ S
(* memory).p[0].flag=computing; w* Z/ ^# T8 c y) K* \8 Q3 v
if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)
% w+ s( F6 v2 s8 u0 d: C{
! J% C* E* K1 a8 J5 w) yi=(*memory).p[0].computeNum;$ W5 t! \' U: D- j! A: E
if(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed
' L6 r' w H% E0 _1 Z{/ @- n0 b: r+ M5 P) p
(*memory).p[0].flag=IO_waiting;9 [' ^6 M# l. s2 D2 ~/ r8 v3 y
(*memory).p[0].computeNum--;* G3 O+ @2 p/ V- j: H% s& W O% ` R
change += exchange_IO_Compute;
$ G; l% R2 A2 b( s4 o/ [% s% Jcompute++;
2 P' A. ~! ]) l3 w}1 F% F! H X5 Y% s# ~& K! T
else
8 W& ]) p& b O- |& `1 B& n/ R{+ k* e9 U! h+ t" w' [5 U
compute++;; k5 C$ T, N: _, R2 f- L
}" Y( e$ {1 V' J X
}4 E0 a' Z' H5 U( b; {- ]
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)3 v) c, v/ D7 D! n$ g7 z- T; A# [
{9 K( V* B' L2 H- d' i/ n2 F
% _* P; M" k, J/ e- {i=(*memory).p[0].ioNum;$ M5 v2 X$ J+ F; b3 Q
if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed
$ E6 o5 @ t* q! C) m, U{
6 r0 T4 i& }! |; u; U# r7 t(*memory).p[0].flag=computing;2 x3 f( h2 ~* q) ^7 G; b3 c
(*memory).p[0].ioNum--;
+ ? v3 D1 n: F8 I; achange += exchange_IO_Compute;
2 g9 C# T9 R" L( awaitio++;
7 \, |3 [; K) \}
" N/ k$ {# m6 s! \8 \5 e0 helse
7 q% B! a1 S: w& J7 u, `{
' c; Y. H, R1 T( Awaitio++; d0 w6 |4 h5 G
}$ @: ~% f* ?4 u4 i; q- {
}7 x' z4 e% i1 v% _- a0 ~, Q' P$ q
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)
1 `; v& Q: t2 U' p e{, ]( N4 F2 f; E% R" f" Q- l
(* memory).p[0].flag=IO_waiting;
6 f. @- i6 z; ~( P1 ^1 |8 }change += exchange_IO_Compute;( T6 [3 p* u0 C( x# _+ H
}
7 `# e6 _2 U# N( Qelse if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)
& Q) `3 ]6 g* | ^4 u7 t6 t( T) a{ \* S! K1 V7 W9 P% i7 c" P% t
(* memory).p[0].flag=computing;
) b0 l3 A2 p8 t1 k, A$ |) V2 t, Lchange += exchange_IO_Compute;0 Y) @( t4 S) ~% F- }7 h4 U3 C
}# z c h( i, C( X& h, ]' h9 @
if((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0) //一个作业已经完成4 ~3 T2 N4 S) H1 o2 v& |
{
+ m- q7 z, J( i$ t* ^+ P0 ](*save) = (PCI*)malloc(sizeof(PCI));
; v8 P3 r2 x+ [0 ~; ](*save)->next = NULL;
5 j" F' m, l1 A9 r6 f( o3 \9 w& ^(*save)->processID = (*memory).p[0].processID;
0 p# f8 }, l8 l' C, J2 k(*save)->comeingTime = (*memory).p[0].produceTime;" Z- W r4 V" F% E5 X7 M+ p
(*save)->askMemory = (*memory).p[0].askMemory;
/ N7 I6 P; h, @$ ^9 U(*save)->compute = compute;1 Q6 }# O. W6 D" p
(*save)->waitio = waitio;3 l: \/ `4 ?9 L( o3 d, `$ a
(*save)->exchange = change;
4 J# z c0 |, N(*save)->completedTime = systemClock;
d, j2 X1 L7 o; j* \5 Y(*save)->runningTime = (*memory).p[0].runningTime;
9 e* e8 @7 G! X. I4 q! H! k* k7 k*spareMemory = MAX_MEMORY; //*spareMemory + (*memory).p[0].askMemory;
8 `; E6 e! s3 [2 @( }, k2 }% Gcompute=waitio=change=0;
0 v& ^2 \* b' a+ b5 b( fcomputeLast=waitioLast=changeLast=0;
' h) \/ |3 d- d% D b& E& jHigh_response_ratio_s_to_m(&(*storage),&(* memory),&(*spareMemory),1,1);( b" t+ _+ @. C1 K
change += exchange_process;* H8 } ?: e; F) [) m* X3 p
return task_completed;
$ W9 R/ Q! g# @$ Y; q# p}/ P; a7 G! T4 J" _4 ^, o/ U
else
4 Y1 y! |) m, x3 P% k2 Greturn task_not_completed;
9 m; @8 _. n" E. V}
9 @* B3 C) Z9 g( sint High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int dispatch)7 l- @. `4 i, y+ V! ^
{
3 b m6 J1 l5 e! Tstatic int waitTime[initProcessNum],i=0,j=0;
0 K: Z+ m5 K' m% R1 Cstatic double HR_ratio[initProcessNum];
0 d) W" L! h6 X6 p v$ fif(flag==0) //初始化数组
# m3 j+ k$ y/ u6 [6 a{
# h, g% n0 E- K4 Efor(i=0; i<initProcessNum; i++)
0 S- k3 ]1 i" G" T{" v1 D; p8 X( ?" Y6 o
waitTime=0;( r! n/ T- `4 |. x$ b0 e! f9 O
HR_ratio=1;
8 a2 o' S) X. r) H2 p6 J5 S}
6 d" j" j9 [5 _" i r}
- a7 A+ J% R6 Vfor(i=0; i<(*storage).proNum; i++) //等待时间增加,重置响应比1 V% ~! E; L/ x( X1 o
{
# @1 L; Q% I. A+ j" uwaitTime++;0 R* o; E% x6 B- E# t
HR_ratio = (waitTime+(*storage).p.computeTime+(*storage).p.ioTime)/((*storage).p.computeTime+(*storage).p.ioTime);9 @4 ?6 H+ A; K% G' \' {/ o
if(HR_ratio > HR_ratio[j])7 r9 P8 g3 W3 r3 [/ g
j = i;
* t. r- Y+ q; A+ t# M}
5 n2 }/ M- S* Bif(dispatch==1) //需要调度一个进程到内存中执行
! s+ @, i; g+ f, m2 V. k" u; ^5 F{
' z- J" w: W* {/ ]- p3 ?if((*storage).p[j].askMemory < *spareMemory)
/ L! c/ G6 _, k# q{
; N6 L- k: Y1 p; N$ O7 V+ y(*memory).p[0].askMemory = (*storage).p[j].askMemory;
3 n- g" i! _3 Y) e, E5 \(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;( s9 x0 A6 B1 i0 s0 Q5 b3 m _
(*memory).p[0].computeNum = (*storage).p[j].computeNum;
% ^" C3 r! o1 Z/ z(*memory).p[0].ioNum = (*storage).p[j].ioNum;) z7 Q% z& @5 g( H* i: U9 L
(*memory).p[0].processID = (*storage).p[j].processID;0 N3 H) {' ^3 T5 `, ]3 J
(*memory).p[0].flag = (*storage).p[j].flag;
y7 b. T- f9 C2 g4 u(*memory).p[0].ioTime = (*storage).p[j].ioTime;+ V+ P L8 w# V- g/ M- i( I
(*memory).p[0].computeTime = (*storage).p[j].computeTime;
9 J) M0 y" h* }1 X" u/ K(*memory).p[0].runningTime = systemClock;' J7 u. w+ q2 q, D z$ H7 Z! e
(*memory).p[0].produceTime = (*storage).p[j].produceTime;# R i4 C& f% i' Y8 |
for(i=0; i<(*memory).p[0].ioNum; i++)
4 N4 Q2 T3 ?0 m2 [(*memory).p[0].ioClock = (*storage).p[j].ioClock;
, m0 f' i2 q8 h0 U+ P- efor(i=0; i<(*memory).p[0].computeNum; i++)
* m. J; b# \0 K" Y7 C3 l! r5 V- E(*memory).p[0].computeClock = (*storage).p[j].computeClock;! b8 b2 c. Z; J1 ?' b+ \
(*memory).proNum=1;
/ {4 J, |2 X8 Q* R, ?/ c*spareMemory = *spareMemory - (*memory).p[j].askMemory;
/ b( j6 A1 v2 G4 _2 {& y+ t6 Kproduce_one_task(&(*storage),j,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程
) w2 o& J/ s( L9 ^% [(*storage).p[j].produceTime = systemClock;% x S3 U' u. Z& U8 S: o0 Z
MAX_COMING_TIME = (*storage).p[j].comeingTime;
, B* N5 r' r3 m% e1 i3 C4 d0 k: jwaitTime[j] = 0;8 B0 J3 l, {" H! D& ~4 A
HR_ratio[j] = 1;; P8 ~, r! \; e g
}
0 J, E: x( m& Felse
% U; p( y: q' r2 X. x{
. W$ P% [; X& X* n; Uprintf("A process ask for a memory overed the system capacity\n ");; y8 w+ z$ I# N8 V
exit(1);: m7 l! C5 e$ O K8 T* q1 {( h
}
]: L/ w) L# i4 o' s) n}
0 O, v+ A3 ], y! X% [. Ereturn 0;
' ~( G" @5 ]: f& c3 i8 Q9 ^; D/ i. x& ~}
* D8 ]& e4 P9 U0 Z ^" C) Gint PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw) g: v% V# c }' o; d
{, q3 Z% a# N( l" ?* P$ }% C5 [
static int compute=0,waitio=0,change=0;
- C* \6 E8 E! _% h3 W& ostatic int computeLast=0,waitioLast=0,changeLast=0;
. S2 K* F4 c" b# J& I% m0 iint i=0;
. i" }& U' t) w! _3 Pif(draw==1)
3 g8 n7 M/ A8 s: t" S! _{6 A& v! l( d9 S8 D" Z" q! c
//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);8 @5 b1 e3 l! K2 p% x
drawPerformance_PF(800,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
( v/ c& \$ }7 _0 F
! s& n1 n' r5 t8 V( U
6 [# F- Z# `3 O7 e5 ^% l9 scomputeLast=compute;
7 f/ i* \' N: s6 v9 W3 C* I2 G- ywaitioLast=waitio;
, d- M3 Y9 X$ H+ h9 V: d( cchangeLast=change;
& i- @: `( Y+ w% G9 h}( R8 L" K6 N* e5 Q. l) C; W. \. h
if((* memory).p[0].flag==ready)
; b9 G/ u9 y( \0 u2 Q2 W(* memory).p[0].flag=computing;1 e8 C1 `6 j9 Z( t( ~9 E
if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)
; D+ M( m; y9 \6 ~{
; |. c! n/ N4 K5 Si=(*memory).p[0].computeNum;1 c. m# w% E) Q
if(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed
: i% J/ ]2 q D; p p{+ \) n! z2 H8 A) ]. B
(*memory).p[0].flag=IO_waiting;
5 b$ H; C, | @$ u(*memory).p[0].computeNum--;2 r5 i! j* G$ u# J% Z
change += exchange_IO_Compute;6 h3 k+ D6 l& ?6 R; w) t# ]2 L8 M
compute++;
+ V9 f7 H0 n% g: u/ a: _}; ]0 c; m" e: N) n. @/ I% ], Z
else
" s. X. H( n) d0 o6 S6 P" `6 a' j' i{( T# s6 i9 [# M
compute++;
+ b- } f3 C6 Y6 p$ D2 t}& I9 l) i' A L" _
} ^# S: h B! h5 l
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
4 P1 n5 ]$ ^3 y! R{! L1 Y1 s. r3 B G# _2 W' A$ w
! i2 H! L- ]- w1 Ii=(*memory).p[0].ioNum;
9 ^% H1 t- z" j0 b- h, Tif(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed9 I9 G# Z' E6 x( X. T
{& D0 I4 b0 G3 Z0 A# }+ [
(*memory).p[0].flag=computing;
5 R1 o8 S/ [; f% O& Q4 W3 f(*memory).p[0].ioNum--;! m- A; _4 P: ~& }: `* t2 F
change += exchange_IO_Compute;% H5 A' B; X$ h0 ?6 m
waitio++;: [: h0 Q& ]3 F. o6 J
}1 N+ x# i4 Z2 x* R) v6 F
else
; _- C. B6 L5 }, H2 |& Q{, U; y8 t* j( M; \1 |0 h
waitio++;6 A) S* _( a# V7 U: P+ Z* ^
}/ ]+ d3 n+ _! L5 d4 I0 @, O. J
}
, A* t. ~5 r- felse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)8 d& L, M$ u8 c) ]* {
{1 L8 A+ L, A2 z3 ^+ B" M9 d, u
(* memory).p[0].flag=IO_waiting;, E, i- U7 K; y. l
change += exchange_IO_Compute;9 |$ w! j3 m6 q9 i
}+ ^/ I1 y9 O8 N! V- G. F
else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)
: D$ z6 J. ~; K; n$ A( [( A6 v{
: @; B3 W; f2 u, f, p(* memory).p[0].flag=computing;4 R1 [( }! ]( I B$ r
change += exchange_IO_Compute;# \ B( e3 B( }# {
}
0 t0 l& a0 c8 Qif((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0) //一个作业已经完成: F7 @+ N- k ?7 ?
{
4 d* M& @* U, V! [: f(*save) = (PCI*)malloc(sizeof(PCI));7 e- ^# P% J8 M1 o7 B" V! V: c
(*save)->next = NULL;% |1 U- Y5 h2 q4 |2 R# W% ~$ ~
(*save)->processID = (*memory).p[0].processID;/ B) m; u7 u, D, X
(*save)->comeingTime = (*memory).p[0].produceTime;
& j8 ^. } j ^+ t8 E$ k(*save)->askMemory = (*memory).p[0].askMemory;: S0 ?' s) D( ?6 ~
(*save)->compute = compute;
( O8 @. ~# S j! @) R, Y(*save)->waitio = waitio;
9 b6 p; H5 F* L: t& M2 L x& M' V(*save)->exchange = change;
9 B4 A9 q: C2 K/ l(*save)->completedTime = systemClock;
3 L* Q0 U' `# F. W/ A& g+ |# Y(*save)->runningTime = (*memory).p[0].runningTime;
4 e6 G; Q' g& J: Z$ l*spareMemory = MAX_MEMORY; //*spareMemory + (*memory).p[0].askMemory;
. q8 a. v; L+ ?" [, @' X* x4 Qcompute=waitio=change=0;
, I) c- X* O g! {6 |computeLast=waitioLast=changeLast=0;
5 u$ ?9 [" B( u9 @. YPriority_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));
5 }( _, G1 K: X5 A* N& F+ Fchange += exchange_process;
* E( X# {- K8 i( q/ lreturn task_completed;
" S6 R( H6 |& L/ W* i5 [}
+ @4 x, M! v+ s7 |1 Z4 gelse' p7 c$ y; _2 | g! f {
return task_not_completed;8 y$ [: [2 u, R5 t( C
}+ J+ [/ J0 @( o! ?
int Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)
1 K r& n# O" E" r/ `{ J* I6 V& v" }% _# h& C
int priorityNum[initProcessNum],i=0,j=0;6 ~' K. D/ y* u5 E1 |
double temp=0;. ^0 Q9 L* ^- g, N
for(i=0; i<(*storage).proNum; i++) // setting priority to each process
9 I( w; y( z$ f{
) {" E0 s6 n+ I- m. P' P7 }/ Otemp = (*storage).p.computeTime/(*storage).p.ioTime;% r: J* k4 Y/ @: x1 u* b5 R R Z
if(temp > 0.8)3 i1 ?, q, ]' h6 ]
priorityNum = 6;" m( M. Y+ y, f
else if(temp > 0.7)- L3 o$ S" |; H) W+ H( a& X
priorityNum = 5;( }+ J! u& }# y' o- h/ b3 L3 N
else if(temp > 0.6)' s: v$ \( G, t
priorityNum = 4;
- @3 i$ N# j9 {2 Delse if(temp > 0.5)
8 E2 D+ s& h; ~9 v( x! v4 mpriorityNum = 3;
) _$ F" @# g* W& ^: t% O: Gelse if(temp > 0.4)( t7 w' P& H; y6 I% r# ^
priorityNum = 2;; ?1 g9 x/ L' [$ B3 D5 ]
else9 Z" j. }* G: L0 Q; o, f4 V
priorityNum = 1;. o3 Y4 s4 c+ `
if(priorityNum[j] < priorityNum)* |! W' P6 A+ X: u
j = i;& C& S+ b/ ~3 i+ o
}+ E" m. @8 I$ |" J2 J2 J
if((*storage).p[j].askMemory < *spareMemory), Q: d3 e7 I4 r x. A
{6 G2 ? j# R8 v0 t1 e
(*memory).p[0].askMemory = (*storage).p[j].askMemory;
4 K: p! v( [2 A* w(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;# d& j( e2 `6 P: u& L5 z; T
(*memory).p[0].computeNum = (*storage).p[j].computeNum;+ e- E9 H# V! k8 B( p! L
(*memory).p[0].ioNum = (*storage).p[j].ioNum;9 n S. Q9 A' W2 q) j# l1 U! \
(*memory).p[0].processID = (*storage).p[j].processID;% H2 A' m& I2 q
(*memory).p[0].flag = (*storage).p[j].flag;
' Z- q* I2 |' j z9 I/ Y/ S(*memory).p[0].ioTime = (*storage).p[j].ioTime;! p2 F K( T2 ^7 W5 }: U
(*memory).p[0].computeTime = (*storage).p[j].computeTime;
% q# b7 i. p9 Y+ B(*memory).p[0].runningTime = systemClock;
2 |3 {9 j# @: ]" b7 d9 p(*memory).p[0].produceTime = (*storage).p[j].produceTime;: K7 ?& I, O. V, F4 O1 p
for(i=0; i<(*memory).p[0].ioNum; i++)- J v. z. x" J6 X2 h
(*memory).p[0].ioClock = (*storage).p[j].ioClock;
\1 `8 d0 r; Hfor(i=0; i<(*memory).p[0].computeNum; i++)& C/ `0 M, g# G4 ^/ b
(*memory).p[0].computeClock = (*storage).p[j].computeClock;, K# g; U4 b$ B1 @3 A( Y# V
(*memory).proNum=1;4 L6 j, j9 h5 A% g) z
*spareMemory = *spareMemory - (*memory).p[j].askMemory;
# P, Y) r( h+ J% K# ?6 Kproduce_one_task(&(*storage),j,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程
# @* {, C3 d* W% sMAX_COMING_TIME = (*storage).p[j].comeingTime;# h/ N* G; g! U+ N3 B2 F* u
}
7 q: `9 x# ?) H) H( r4 j# c3 Qelse) n3 ^& i) H! C9 a4 W1 x
{
9 p. g7 g# g+ M. ]3 Gprintf("A process ask for a memory overed the system capacity\n ");8 |% {! d+ ]" a3 H# {
exit(1);- d7 g& N/ p1 U$ Z
}
/ e3 z1 o: C8 e& Ireturn 0;
; Y! M( c/ e# b6 ?' o1 I- u}
- r# \# v" e1 Y7 X- z6 C ^# N# gint ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
6 i6 i' ~* ~9 k0 \. e& q{! H/ y) D$ D; o8 d5 w `4 Q# G
static int compute=0,waitio=0,change=0;
$ g, J, P& S- J+ _ Hstatic int computeLast=0,waitioLast=0,changeLast=0;2 A, F9 X( B1 h3 | u9 Z
int i=0;+ N U, k9 v# s4 G6 T6 S
if(draw==1)5 Q6 y% m$ Y# g. f; i K; V5 l1 f# M0 W
{
, b2 N7 d0 r+ F; l//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);* q0 J6 W$ W: k, h
drawPerformance_SJF(0,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);& _0 |+ d! I# G$ C+ o
, C0 I+ G2 R% @7 ~4 N" n" E
/ J4 e1 S7 s, B2 f: c5 ZcomputeLast=compute;: o% N+ h2 R9 s
waitioLast=waitio;! }5 q: T0 g$ s" n
changeLast=change;8 s+ K' x. |) u2 i9 J
}
6 v6 Y( h) s* Q( Oif((* memory).p[0].flag==ready)
^; y6 D% d6 t7 }(* memory).p[0].flag=computing;
9 C* ] e5 F) K8 aif((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)
# Y0 ?) D) B2 Z% `8 u `{
6 C5 [8 f. ^) o( m8 l2 E1 Ti=(*memory).p[0].computeNum;
2 ?7 J* d# J( mif(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed
8 l4 V0 M" x! I1 r{
4 {/ U/ M$ J+ d(*memory).p[0].flag=IO_waiting;3 e4 [1 C H8 D! r' D2 f) D
(*memory).p[0].computeNum--;: `$ a E9 O' v- X" D
change += exchange_IO_Compute;% Y) [7 ]+ V- H- N
compute++;
% U Y9 }" V2 t& a; k: y" k}/ c8 n9 L: f# ^0 M+ p
else5 Q! k. }/ N; k( f
{
+ ]9 { q z( h9 W2 z Vcompute++;
( q* {! D0 f3 i( n7 A% T}) J4 Q+ ~+ m! K
}7 y @$ u. Y* G1 I9 X7 B: a
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
) f5 o9 i) m2 S# V0 ^ f{. L) A) P+ w; a$ X& M; k
/ R% q4 r/ }4 B( }3 Q5 Si=(*memory).p[0].ioNum;' j0 m" T: x# X9 \5 n9 q
if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed" b' F9 d8 U' s0 x _' f
{3 r8 C( F! D! i: o; T/ p
(*memory).p[0].flag=computing;
2 o. L, n8 w+ P8 L(*memory).p[0].ioNum--;* ~# c9 W: N$ m# U Q0 t
change += exchange_IO_Compute;7 [8 ]& @! D1 D" c; T9 R2 i
waitio++;
T+ O& F/ ]2 F) h' I. V% C; J; Z+ p1 b} k1 {$ I% r t: I' |
else, X$ r6 h; @& I0 G5 [9 r
{. ]( I9 u" Y# C$ r! L& ?( n- U
waitio++;
# C# x9 w" D: M; T2 }. s}
) ^7 S: z4 r* I5 ~8 x! ?0 L+ H}9 Y+ W! e2 [% }& {9 U
else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing), Y( p% r+ ?6 m
{
/ Y* |$ Q& {2 `1 B6 k; }(* memory).p[0].flag=IO_waiting;
& e( B' K" l0 G) p" ]* L7 l' Echange += exchange_IO_Compute;
J: F. [2 L0 ?* d) O}
. L, J2 b) f) a2 h" A/ zelse if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)
* Q( p% w; x. ]7 f: S$ p* y3 q{) N: x7 Y% b, D T) W/ u; H
(* memory).p[0].flag=computing;: z0 ?% Z4 b, h2 U3 w6 Z+ B6 I* D
change += exchange_IO_Compute;
, z% w" g" h" e k1 B! u- r8 t}! |" J- e; M1 F* B& F* C2 L
if((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0) //一个作业已经完成& K$ ]4 i* W$ k7 S( Z9 o( i
{
- V# k5 [( _# G e1 y/ ~+ x* z(*save) = (PCI*)malloc(sizeof(PCI));
& d/ V# \, a# F. `(*save)->next = NULL;/ v1 D) @. Y* j# p+ q, c. X( \* }
(*save)->processID = (*memory).p[0].processID; @6 C% P* ~; [! F# v( @8 c1 u
(*save)->comeingTime = (*memory).p[0].produceTime;
3 Q9 @! X2 u! e* e" f(*save)->askMemory = (*memory).p[0].askMemory;, b8 m9 d1 d/ j' }6 l
(*save)->compute = compute;5 C' L* s- E7 C9 z/ M
(*save)->waitio = waitio;
1 }5 m: c; N, y4 S5 W(*save)->exchange = change;! w1 e$ E* f* s. D& {+ s& r1 O, I
(*save)->completedTime = systemClock;% q9 v* o: g& o+ z: E
(*save)->runningTime = (*memory).p[0].runningTime;9 \7 \# K/ k5 f
*spareMemory = MAX_MEMORY;//*spareMemory + (*memory).p[0].askMemory;
0 @, T/ ]7 }& P- `* F6 ncompute=waitio=change=0;
' K- I7 s: e( B) k/ }1 m" H8 o- @computeLast=waitioLast=changeLast=0;( w' J( H$ C0 J2 y5 ]0 s
SJF_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));5 i2 u* D; G9 N% {
change += exchange_process;
1 \/ s* Y$ K( E% `return task_completed;2 K. \6 g: ~2 H5 c6 k
}
% T! G5 }! s: u* D" Jelse! ~* A. ?$ d" R: d
return task_not_completed;
/ h7 `7 ?, i& `* f( i3 ?3 Z% W5 b}
7 F+ K: J( ~6 j9 }# cint SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)+ u) l* g% ` k* s9 V
{
( n- R1 J! V- ]+ oint i=0,j=0;
/ D9 v8 p+ ^/ J' Pfor(i=1; i<(*storage).proNum; i++)- B! z: g) X2 P& _+ f
{, _( W" r! U$ q+ U
if(((*storage).p.computeTime+(*storage).p.ioTime)<((*storage).p[j].computeTime+(*storage).p[j].ioTime))6 k# J. W* c# i# m+ R q
j=i;& S3 n" N4 d& q8 p1 E4 a; B5 M
}7 j) N0 U# ~7 v! B
if((*storage).p[j].askMemory > *spareMemory)
- {/ A9 t5 o# a2 F, {; V% X _{$ a9 o, X# O$ ~" f4 N
printf("The memory asked is overflowed than the system memory.\n");
. d7 y+ r% ]) j4 z& F; Oexit(0);
' }! e* F, t8 O6 Y" y}
( o4 c2 m! D' N& Selse
9 J) n, D9 Z) V6 Z$ b$ C" X{
- T7 }' y" r% y, M/ E8 T1 D(*memory).p[0].askMemory = (*storage).p[j].askMemory;% x" x& b- l3 l
(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;& T: a4 s" q* i/ ?
(*memory).p[0].computeNum = (*storage).p[j].computeNum;5 c2 @/ A0 X Q+ }% C' Z1 A: k
(*memory).p[0].ioNum = (*storage).p[j].ioNum;+ S$ y7 I- ^' p4 W! y7 V, a) J
(*memory).p[0].processID = (*storage).p[j].processID;
' h5 i- k$ s9 U5 N$ _9 X/ _4 N(*memory).p[0].flag = (*storage).p[j].flag;
, y, A' C& ~/ L% ?(*memory).p[0].ioTime = (*storage).p[j].ioTime;
4 g$ z; z+ l g: k8 |1 j+ U1 ?(*memory).p[0].computeTime = (*storage).p[j].computeTime;
3 I/ W6 P! w2 N" J7 {(*memory).p[0].runningTime = systemClock;+ d+ g% U( H4 o6 V
(*memory).p[0].produceTime = (*storage).p[j].produceTime;* h5 B) Z3 z% R+ z7 j8 M/ V
for(i=0; i<(*memory).p[0].ioNum; i++)3 w2 o! M5 l8 A. I
(*memory).p[0].ioClock = (*storage).p[j].ioClock;
. Q8 R+ p1 x, m8 n5 T1 V6 }5 Jfor(i=0; i<(*memory).p[0].computeNum; i++)
8 p" b2 r9 E3 K3 C+ a+ P2 l(*memory).p[0].computeClock = (*storage).p[j].computeClock;
7 f# j) z+ y$ n2 c( O(*memory).proNum=1;
- J8 F8 `! D8 u) |*spareMemory = *spareMemory - (*memory).p[j].askMemory;. k' V( x, h* `1 q
produce_one_task(&(*storage),j,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程
$ f" w% D) j0 e5 }5 C& W/ hMAX_COMING_TIME = (*storage).p[j].comeingTime;# _6 N( Y0 n; }: n' j2 n" B# B
}
2 q& j* ~. t% [/ {return 0;
; F/ J5 _2 G, k+ V/ F}
, S$ q# x% z/ W- r& A3 b6 nint TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
! b- ?- v- Z- O' w+ b4 D5 f. ~{! f: K6 J+ N; L0 d( |
static int compute=0,waitio=0,change=0,clockSegment=100,poi=0;8 j- b& N$ x1 S# K& w: t$ U, U% A
static int computeLast=0,waitioLast=0,changeLast=0;
, h( i8 |9 l2 i. Yint i=0,j=0,k=0;
. q* V0 E$ |" U! D5 Zif((*memory).proNum<=0)
3 Q2 x; P& g/ [- c" C# N( b/ YTimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),-1);
* _5 z9 Z$ H9 C+ V3 S `6 Rif(draw==1)2 Q' C& g5 Y$ R0 q
{
' {5 q/ N$ a1 B$ a9 d& t//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
9 O6 @+ A5 i j4 _drawPerformance_TT(400,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
8 q3 y/ r, v! V$ Z2 q6 Y
+ _* b' ]$ b! K7 J5 I/ u8 \8 p# F. m% L
computeLast=compute;1 y/ V/ W1 t9 w; y( i! G/ Y$ m( |& m
waitioLast=waitio;1 K$ k1 q, H# S2 G' `
changeLast=change;8 C2 N$ ^. V0 Y5 O
} m( a7 V8 d0 |3 e
if(poi>=(* memory).proNum). Q A$ [ K" g
poi = 0;& L5 i, \% j2 H# M* t a
if((* memory).p[poi].flag==ready)% [1 Q# E0 H4 D& Z9 O6 }% h
(* memory).p[poi].flag=computing;
# x7 W: D% U7 l4 i# S1 @if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==computing) t; r# t9 m0 B. ?5 w6 L
{$ E' U ]. w( F( u M6 D- K# F
i=(*memory).p[poi].computeNum;
+ J, e [, d5 Kif(--((*memory).p[poi].computeClock[i-1])<=0)// one compute tase is completed, D6 A! P& \) T( _( U9 F1 U
{* h9 m& ~7 [- `- @0 R9 J3 r+ E
(*memory).p[poi].flag=IO_waiting;0 o% M9 j1 T) I* A: ?* r: \
(*memory).p[poi].computeNum--;
! S# n. M# X$ [4 M& ^$ Wchange += exchange_IO_Compute;
, P. @; n m+ C L9 a( k+ H; scompute++; e' U& v. _; J* A" D
}
/ u; W$ ]( i: k3 Y" nelse
0 h: q$ C# m. i3 G/ ]; L% c{
7 Y" P5 e" x3 Xcompute++;
F t3 u* n1 ?2 r& l}
) d J9 \: h$ d9 E* T$ R7 }}
/ w) Z' ~0 \+ G& V4 i& u% melse if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==IO_waiting)) Z; F8 ?; ? G- l+ P# l, H
{& j9 |# `$ T7 a0 A3 J1 G
3 t/ }' n- K0 m2 ki=(*memory).p[poi].ioNum;
+ P# ^* D. z$ B/ a! Kif(--((*memory).p[poi].ioClock[i-1])<=0)// one io tase is completed) ]& v% \2 q( {; x
{/ K0 ?9 b$ M4 `6 Z0 I
(*memory).p[poi].flag=computing;
6 Z* x% e2 f+ @( |! P5 D(*memory).p[poi].ioNum--;
2 p3 J' F% P8 H3 s3 T# l) }# bchange += exchange_IO_Compute;
9 s* c6 Z7 u" c1 ^) N. ]/ b! hwaitio++;1 z/ e2 }1 M" n
}
* T6 V& @7 l3 j# {+ n7 melse2 o# x/ [7 o+ z+ }, t, \
{
8 e# F7 Y, B5 O# o4 ]: dwaitio++;& ^( c ^0 L1 O z6 O Q: u
}
! c5 f) z) Z6 _2 r' _0 a}9 V# `8 W Z' [9 N" n
else if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==computing)9 S% x- d- N0 ]/ P
{
+ p) q9 }. y0 N(* memory).p[poi].flag=IO_waiting;5 f6 r8 c4 E: C/ h* d
change += exchange_IO_Compute;. X) j5 X( B2 b+ K
}
: J3 _' X# p# H* l0 c) c" M" Kelse if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==IO_waiting)
% C& b8 N( H) {+ q2 |; S! Q2 p{: d2 y+ C8 T* h: @% i H- k. e
(* memory).p[poi].flag=computing;& Q5 P6 B/ C6 f( F
change += exchange_IO_Compute;
% b& C, V; O3 o7 {}! q) w5 G& K2 S2 J. d1 d& |' `
for(i=0; i<(*memory).proNum; i++) //其他等待io的进程可以并行推进
: B" |1 e3 L( y' n{7 K8 c' o' c5 x2 C3 }
if(i!=poi && (*memory).p.flag==IO_waiting)
$ a* D* U/ ?( \8 H; O9 g{
' p, @8 O4 k# P) f! f3 k6 i$ Bj=(*memory).p.ioNum;" B m; N* t# b. i$ C. v
if(j>0)0 W% v0 G* U/ d6 g
{
9 }; T; ^7 a. N% l. |$ Z. }if(--((*memory).p.computeClock[j-1])<=0)// one compute tase is completed; X0 W8 |2 m& K* }
{
2 A, Z+ r {7 {3 |+ W# _(*memory).p.flag=computing;
% Q' \+ M/ E, _& E$ c0 T(*memory).p.ioNum--;
7 M* l* L7 F$ K* Z2 W2 W1 T/ Lchange += exchange_IO_Compute;
) j0 J/ o! b1 X/ d1 y}6 p" z7 P6 n9 `. ]$ p& {
}' V' H* l" J$ R+ i2 z& ]3 Q/ s
}3 D4 ~# v; k% t3 B/ s3 @
}
9 e" w, u! t; \# X- U/ J% N& pfor(i=0; i<(*memory).proNum; i++) //处理已经运行完毕的进程) m% U% b* |$ A2 \( K% B
{
! d) |; R# }$ V* W2 Oif((*memory).p.ioNum <= 0 && (*memory).p.computeNum <= 0) // a task is completed
; s1 P& m. a. i6 \7 W{2 W' L: W) L) n' Y
(*save) = (PCI*)malloc(sizeof(PCI));
( a! t* o+ x6 N6 w(*save)->next = NULL;
# Y' t# T$ C: ^2 Y& x! f (*save)->processID = (*memory).p.processID;7 v& @3 ^! ^2 ?4 t) n& ]5 ]
(*save)->comeingTime = (*memory).p.produceTime;
# @8 H. V n( d(*save)->askMemory = (*memory).p.askMemory;
3 C$ a% O4 `% i7 R8 [: I(*save)->compute = compute;% [) P. S+ k" N/ U* p$ X
(*save)->waitio = waitio;
$ `4 V: x& ], n$ T(*save)->exchange = change;; p5 |# p0 K# ?% }
(*save)->completedTime = systemClock-(*save)->comeingTime;' w! ~: C: l8 J7 h F
(*save)->runningTime = (*memory).p.runningTime;, ], j; q( t% \ }) `6 q Q
(*save)->completedTime = systemClock;9 z, I Z) m9 Q+ ]% d
*spareMemory = *spareMemory + (*memory).p.askMemory;' M% Q2 R, T2 k- b; R
compute=waitio=change=0;' v6 O( \; U8 ]1 O, n |( J
computeLast=waitioLast=changeLast=0;3 J9 I5 z- T9 O N
if(TimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),i)==1) // 调入一个新进程进入. ^2 H* O+ u @7 R% R$ Z: b
{
$ q$ @$ q. i6 dif(i==poi) //占用CPU的进程已经运行完,将时间片分给其他进程( j8 K) C: Y e W: h5 _! M
{% Q3 {& D( S7 p* Q( { Q5 y
poi++;
9 c; o( i3 ~" V0 g% P clockSegment=2000;
* _" N) D# X- c, t# Q [ t# ^} D. c) m8 t. J% q. R3 }
}
" P( D( L: J1 [7 R; g- [else //没有足够内存调入新进程" J( s) L. ^3 @( u( ]
{, _ j- i3 y: ^( c) X9 r
if(i < (*memory).proNum-1)
7 l! n6 v: q8 ?. T: J' t3 D+ Y9 g{: H% J9 n& Y8 W" K3 W
for(j=i; j+1<(*memory).proNum; j++)
. l) d& N) t% f# L{4 ^5 j5 t4 T$ Q9 m% G4 I, I
(*memory).p[j].askMemory = (*memory).p[j+1].askMemory;' c; C- A, D4 D/ C5 w2 ~6 b0 h# K1 y- w
(*memory).p[j].comeingTime = (*memory).p[j+1].comeingTime;
' Z Q5 G; s- K& n! G(*memory).p[j].computeNum = (*memory).p[j+1].computeNum;* T6 v- [# d' j4 s }/ [* U
(*memory).p[j].ioNum = (*memory).p[j+1].ioNum;
8 W) U1 D8 R0 h! a v2 e. r(*memory).p[j].processID = (*memory).p[j+1].processID;- c$ P2 M* _" e- W% C5 A3 x9 h
(*memory).p[j].flag = (*memory).p[j+1].flag;) @, M9 b) g6 ^5 h6 \
(*memory).p[j].ioTime = (*memory).p[j+1].ioTime;( Z* _, d H4 ~* U! e0 e, H& |
(*memory).p[j].computeTime = (*memory).p[j+1].computeTime;
: ?1 I) y% Z s! x$ W0 d(*memory).p[j].runningTime = (*memory).p[j+1].runningTime;9 d2 _. l! p6 p M
(*memory).p[j].produceTime = (*memory).p[j+1].produceTime;
3 j; K5 A/ _8 X4 K" q(*memory).p[j].completedTime = (*memory).p[j+1].completedTime;# \; v) G4 K+ |% M: e* [3 s
for(k=0; k<(*memory).p[j].computeNum; k++)
/ x5 G+ i5 X. M. p( A, b(*memory).p[j].computeClock[k] = (*memory).p[j+1].computeClock[k];
8 m' D' |* V; O; D, k- _* zfor(k=0; k<(*memory).p[j].ioNum; k++)6 o! o' o. E# F$ W1 r7 N
(*memory).p[j].ioClock[k] = (*memory).p[j+1].ioClock[k];: g. \+ j+ W$ ?
}
) p2 _0 ]7 K9 W5 ?! o# Qif(i<poi)
' M( H8 a+ X' j' S3 Tpoi--;
. k& ^4 J+ S2 X6 t% Lelse if(i==poi)
% L: t7 a1 `: EclockSegment=2000;0 w. M! @: B, `5 {
}
: W/ q2 N9 ~. `i--;5 e3 V3 r) h4 K
(*memory).proNum--;" S d4 O* J5 c6 e, G
}
' a; q7 E q% I: D; creturn task_completed;* Q% L7 g5 b) V0 |
}) f. x5 M5 {" w. x' q. ?
}
8 S, C4 i' z. F+ l" [( v--clockSegment;
6 M" X" G/ K& }( n' a7 S1 Mif(clockSegment<=0)) K6 F+ d% M8 a% ^/ I) x# l
{
' h" T! H: X6 @, gpoi=poi+1;( ^6 u; }+ I1 ` Y3 j# T
if(poi>=(*memory).proNum)2 |2 k' [6 X. `6 E* W
poi=0;
3 m8 ~6 x% G$ H3 x! n: d, W5 ZclockSegment=100;
; f4 l# N% I3 ?4 [+ H- a}
5 q0 U1 ^% h+ l, i2 n% ereturn task_not_completed;% ]/ `2 j# e+ c6 g0 G/ Z2 r
}' n: M; t) R* L: c
int TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos)) h, t/ r3 B; Z3 m1 W2 M' R
{
7 v- \0 V' N. B7 \. g7 c4 N# Fint i=0,j=0,k=0,flag=0,translation=0; r9 W3 s9 d$ f% e
for(i=0; i<(*storage).proNum; i++)/ l4 V' _2 D, M, x0 I
{
0 y& N# v: V. q+ B% Sif((*storage).p.comeingTime>MAX_COMING_TIME)1 t7 D1 O3 [9 s/ |5 b
MAX_COMING_TIME = (*storage).p.comeingTime;
7 a7 p# ^- k9 b1 R |}
! n Y" R6 U |) B( \7 l( n# T. `if(pos>=0)
% x) _7 ~- n6 e* Z1 o{' _+ ?5 |3 W8 Y$ Z" q
for(i=0; i<(*storage).proNum; i++)4 r4 V& F a9 S% z+ H' r, {1 v
{7 [+ ]# J |4 b5 g' E) F' ]
if((*storage).p.askMemory <= *spareMemory)5 Y' }6 `, M+ s) t2 U. V/ r8 D
{+ n( a, d, x& p# v) `
j=pos;# n- d& y, ~8 k6 A
(*memory).p[j].askMemory = (*storage).p.askMemory;1 b+ T. ~" U2 C! R: X' D: H5 K
(*memory).p[j].comeingTime = (*storage).p.comeingTime;
9 y0 P( M& z, S( i+ p7 m(*memory).p[j].computeNum = (*storage).p.computeNum;1 D! g% f ~- Y6 i2 g' M, [. C
(*memory).p[j].ioNum = (*storage).p.ioNum;
" X/ i* @/ F. F* U$ j4 Y& m(*memory).p[j].processID = (*storage).p.processID;/ y8 K6 @( W4 P" R1 ?+ ]( S* `
(*memory).p[j].flag = (*storage).p.flag;" S( @6 c6 |/ v- p0 m4 g: S
(*memory).p[j].ioTime = (*storage).p.ioTime;
7 @; c2 P6 f- n, h0 ^0 W9 E(*memory).p[j].computeTime = (*storage).p.computeTime;
8 \0 ~! F( u( }/ {8 e(*memory).p[j].runningTime = systemClock;1 F' _) P* ~) K% }4 H+ A- X& p
(*memory).p[j].produceTime = (*storage).p.produceTime;, Z8 ]! S4 Z/ J) B8 R& `
for(k=0; k<(*memory).p[j].ioNum; k++)' A' I( p" o% ]
(*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];/ [5 [* B. M# f
for(k=0; k<(*memory).p[j].computeNum; k++)# e' q" O- R- u. q
(*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];
3 N: k+ q+ x' T0 o*spareMemory = *spareMemory - (*memory).p[j].askMemory;
& c3 P8 f# Z$ Q3 `8 ]produce_one_task(storage,i,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程* c' |$ k$ Z& G! D$ G* v) r+ g
MAX_COMING_TIME = (*storage).p.comeingTime;. ~" G1 Z& v# b- o" i" [
translation=1;, Q" f+ B8 w. f2 Q7 E! H" b
break;
0 Q" R d9 \; }& Q' D}
" \3 Y. e, B0 J) { \5 O}
7 ?: N" W c) B5 V) I) i; A+ `}
: F. n6 @% U+ [# telse
; m) ~1 U' A$ `# t: C+ b{4 ]7 m' z) b7 T- i0 b) B; Z
while(1)
& N, N% }' I4 d% G( T* |; G{. y+ g. Q* y9 g
flag=0;1 P) E7 K# s o1 a# I, ~) q
for(i=0; i<(*storage).proNum; i++)
Z% C+ ?+ a' n2 m1 N! K" k0 M- l{
, N+ R- X1 B/ s) B' qif((*storage).p.askMemory <= *spareMemory)5 x- R- T) n- o" ?% f K
{
. [- e, V4 i- j% ~- O/ N6 [j=(*memory).proNum;( P \% J+ G9 t" Q7 }# R, G
(*memory).p[j].askMemory = (*storage).p.askMemory;
b/ |# F5 Y6 p(*memory).p[j].comeingTime = (*storage).p.comeingTime;
_" T5 l# P$ B: @% X% s! k(*memory).p[j].computeNum = (*storage).p.computeNum;
& n7 d# c- ^2 V3 r& m+ d(*memory).p[j].ioNum = (*storage).p.ioNum;
* t6 {. L$ M. a8 k d3 O8 o# R(*memory).p[j].processID = (*storage).p.processID;
' E; ^7 {5 k* a8 ^3 T(*memory).p[j].flag = (*storage).p.flag;
; y, N6 h0 S: B2 E3 l) c(*memory).p[j].ioTime = (*storage).p.ioTime;
0 V N! T5 E; m, |% N9 p j0 Q. E(*memory).p[j].computeTime = (*storage).p.computeTime;+ p: ]# Q" X) n D' C/ I
(*memory).p[j].runningTime = systemClock;' {: f9 d5 D/ D h1 `( s
(*memory).p[j].produceTime = (*storage).p.produceTime;$ G/ G! t: T, Z/ t _- X) y
for(k=0; k<(*memory).p[j].ioNum; k++)
1 ]7 r) p2 g/ |: v) U1 D. ]7 C(*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];
. p9 g) `% C% M' h5 g0 u) g2 B ~4 }1 Nfor(k=0; k<(*memory).p[j].computeNum; k++)
. R/ f1 E- F2 Z+ R7 o" I$ z0 o7 l% o(*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];& w5 S5 {* a0 A/ ~0 G- W
(*memory).proNum++;5 i: q7 n9 Z- s! E& Q
*spareMemory = *spareMemory - (*memory).p[j].askMemory;
% E3 Q* G0 ]2 [9 X% L& z R% mproduce_one_task(&(*storage),i,ID_FIFO++); //调入一个进程后,再在进程池中新生成一个进程
- J+ C1 G& H% Y0 HMAX_COMING_TIME = (*storage).p.comeingTime;
4 D. b# H8 p1 `% i; |flag=1;6 p& A& n( Z( n* R8 J# p# j
translation=1;- i. |) |" y( H
}
, U0 `, j! o; Z}
! _" \, l9 T3 Q# p& i+ X9 [if(flag == 0)
e0 g/ C- ?$ _5 {. E/ Obreak;8 s1 t9 ?+ K& a
}
5 O2 Q: T: V- Z- O' E}
( P; @' V/ G: r( N) F5 {return translation;7 K% D$ X1 K. q$ H* V6 F* |
}
3 S$ G, A4 P! @" Jint FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw)) q8 M8 E7 @! F q7 |1 _ n) N5 Z
{; `2 G: L3 H" T' I% t/ H
static int compute=0,waitio=0,change=0,flag=0,flagiocpt=0;+ U! l) J3 H0 V9 j' U1 q9 P
static int computeLast=0,waitioLast=0,changeLast=0;
0 y9 n8 z9 [+ z! J/ zint i=0;
. o! k# O8 f$ M- ^2 u3 ]if(draw==1)
3 ~) d7 H( Q1 G3 Y" S6 z{
/ U6 Q% s+ t. v; l//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
^8 Y& u% z) A4 q9 W: m9 D( WdrawPerformance_FIFO(0,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);# d7 l& u6 V6 \' O1 s
, A* m! x1 l; }
6 M9 c' R) _' n" V4 q3 h8 ]1 w
computeLast=compute;
9 d. S- ^% a. y$ ~1 a$ iwaitioLast=waitio;
7 f3 I# a* Z( q6 gchangeLast=change;' {$ r& H% a5 E1 V& z
}
5 s2 K" ^( N( i5 Zif(flag==1)
4 G: j$ M8 C1 U- x* E{
" S" S& o8 U' E( rif((*memory).p[0].ioNum>0||(*memory).p[0].computeNum>0) //task is not completed; K: e0 r/ E/ I" W9 m
{6 Q6 ?6 |; Z6 u
if(flagiocpt==0) // implement compute
3 [7 [6 b- t! q$ t7 ^{ q7 ?6 {' J7 W: z& g/ A: w3 n
i=(*memory).p[0].computeNum;; e2 _( b& O: b
if(i>0 && (*memory).p[0].computeClock[i-1]>0)
/ c0 ?- j0 `$ I% a" X/ [{0 n# h, z2 Q$ X3 w& C# Q9 W+ M1 W
if(--((*memory).p[0].computeClock[i-1])<=0)// ome compute tase is completed( n3 m7 ~* }. b# k' m9 @. F' I
{
3 M7 Y3 j& _% jflagiocpt = 1;
4 e9 R) z0 N- _& X! a0 k(*memory).p[0].computeNum--;
/ h2 Z# l! b U3 dchange += exchange_IO_Compute;0 ]) _; _& L0 D
compute++;
% V+ }' X9 v, X3 B+ n* E7 {' T}1 \# E% b( x9 _. s' ?( F, w
else/ z! U, S) f3 \ M# `
compute++;
: b9 ]. _* v5 M/ _ K2 x3 W `& Y2 ^& `6 S* V
}
& O5 i7 y2 |+ Q3 y! W2 i. U2 ]8 qelse
' R/ d& i$ J: L8 E' M7 {$ O: ]% E: |0 mflagiocpt = 1;3 m6 S* ^5 x/ q$ E
}
$ U! m+ i0 b, {5 Aelse //wait io1 V6 D/ l; x, ~6 k4 Z, G
{5 L3 Z5 o w% {! r
i=(*memory).p[0].ioNum;
9 S& _: f& J/ B& P R& ?( Tif(i>0 && (*memory).p[0].ioClock[i-1]>0)
3 B4 O& b0 I; d- d6 y7 C D$ A{0 |" l. M; l/ O, g- i3 R
if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed8 F9 v# T- B/ L1 A4 ~ P
{/ a5 V0 w, R5 ~; b1 @- o) L
flagiocpt = 0;; q' X( b0 @) e* V
(*memory).p[0].ioNum--;
! @/ \- x( z2 E9 \change += exchange_IO_Compute;& k; S3 o c+ u4 d0 o. t& D9 b& \* ~ |
waitio++;! v9 F$ T8 X9 d* i- |" g
}: _+ Q: s. F9 l& B' w* e
else
3 M8 n# q/ B. qwaitio++;
# Z4 B9 b N1 L
& E& O3 d. i ?}. K9 f: F7 k! l
else, F& h0 x2 A' L% C
flagiocpt = 0;; ?1 V3 S; B0 E& h
}& x- J$ C* m" Y, C, j4 b2 d
}
( l: `. h% P* Y$ y3 relse //task is completed
+ r# {4 v+ Z8 `{% h5 v/ p7 s9 j7 f& ]7 Z# Y
(*save) = (PCI*)malloc(sizeof(PCI));
) S- T3 f$ O% J; o8 {- d(*save)->next = NULL;( ^( w( L- x) c; T c$ V
(*save)->processID = (*memory).p[0].processID;2 D3 r/ s' o4 H: `* |. Y$ |
(*save)->comeingTime = (*memory).p[0].produceTime;
6 R& Z# H* D+ U' Y5 h% x(*save)->askMemory = (*memory).p[0].askMemory;
5 _2 w) o0 E7 c, V+ l4 j(*save)->compute = compute;
1 p0 @' @3 z* p& m(*save)->waitio = waitio;
% F2 f; S* N! R(*save)->exchange = change;
8 \" d: m/ s m% [ O: f(*save)->completedTime = systemClock-(*save)->comeingTime;4 F' l) d# Y( c
(*save)->runningTime = (*memory).p[0].runningTime;
/ P& v% i1 t$ }+ J8 k% R(*save)->completedTime = systemClock;
) ^7 j" l8 |/ d: ]//*spareMemory = MAX_MEMORY;
* Z0 E8 Z* f+ z; r1 `9 v1 Y: P$ R. \free((*memory).p[0].ioClock);
5 y, k3 d5 l2 h+ r' z) ^free((*memory).p[0].computeClock);
- Y) O, d; s: A2 n3 U- Dfree((*memory).p);* Q4 Q" k9 m! }2 c4 Y6 _) `7 H* S
flag=0;, r4 ]' n1 \$ e6 k1 l
compute=waitio=change=0;+ J7 ] }4 \) R
computeLast=waitioLast=changeLast=0;
2 c) m& d# J+ X: f: {+ p7 Z& k6 {6 areturn task_completed;
$ @, N3 V& ?5 B, S5 E5 p. U* a}, _7 K) r; H9 V5 q
}# D. ?1 {! c: Z$ H& ^
else 6 i) y; p. P1 g+ F/ s! t
{! j2 `) `6 e1 y3 m; P& V
FIFO_storage_to_memory(&(*storage),&(*memory),&(*spareMemory));
/ a' |' R \0 w9 Xchange += exchange_process;% ^+ H2 b0 k; h7 ?3 {4 a% z2 J2 S! p; X
//*spareMemory -= (*memory).p[0].askMemory;) @% F* P2 d+ h2 ~2 z1 s
flag=1;5 |* d+ K# Y8 ?% b# c' E5 S2 v8 o
//showProcessInf(*memory);( r6 K. r- d& E& a
return task_not_completed;, [' i5 X0 _) L x% ^* C$ t; H/ F
}
- A' e- I4 l1 c' z: Oreturn task_not_completed;
& h5 `" _' X: _1 n# B4 ?}
+ r, D" e" l! a- F% ?int FIFO_storage_to_memory(processPool *storage,processPool* memory,int * spareMemory)
2 F- L; |! H6 T4 c{
4 ^, q& |' X: w3 Vint i=0,j=0,k=0;8 J. t" Q- v; B! @; }9 X
MAX_COMING_TIME = (*storage).p[initProcessNum-1].comeingTime;
4 o. n: E& K- Q6 p(*memory).p = (process*)malloc(initProcessNum*sizeof(process));
2 g9 k v1 }/ l5 g0 s- dmemory->proNum = 1;
$ ?' }2 I. g% M* l- `for(i=0; i<initProcessNum; i++)
# [; t& C' J y$ {, W. D{
N1 `' L/ W# K* iif((*storage).p.askMemory <= *spareMemory)
- `+ }+ S2 F8 i, n$ M: }{
$ p! W4 j6 @% P7 D(*memory).p[0].askMemory = (*storage).p.askMemory;
* r% c$ h" q5 a0 x5 n(*memory).p[0].comeingTime = (*storage).p.comeingTime;0 h$ t3 k$ I7 K
(*memory).p[0].computeNum = (*storage).p.computeNum;# g6 \7 x8 R7 V) W) P4 l1 m
(*memory).p[0].ioNum = (*storage).p.ioNum;
( z- Q2 v4 N% d2 j(*memory).p[0].processID = (*storage).p.processID;, a6 E, r- w1 M1 @
(*memory).p[0].flag = (*storage).p.flag;
9 d/ z! k* M3 Y% ? r8 G(*memory).p[0].ioTime = (*storage).p.ioTime;
7 p1 P0 x6 N( U" D [(*memory).p[0].computeTime = (*storage).p.computeTime;0 L1 w9 a2 M/ y
(*memory).p[0].produceTime = (*storage).p.produceTime;
" g8 ?( F" E7 P$ n8 H(*memory).p[0].runningTime = systemClock;
& H( c& x# X/ }(*memory).p[0].computeClock = (int*)malloc((*memory).p[0].computeNum*sizeof(int));4 [. ^. @( r9 w+ w7 h) o5 [& S
(*memory).p[0].ioClock = (int*)malloc((*memory).p[0].ioNum*sizeof(int));1 p) z( J/ P1 M/ I' m2 U
for(k=0; k<(*memory).p[0].ioNum; k++)$ Z, i( `- @2 W8 K* [
(*memory).p[0].ioClock[k] = (*storage).p.ioClock[k]; \+ v/ m, n: a' P+ j
for(k=0; k<(*memory).p[0].computeNum; k++)- l0 p. ? R, s) o" P9 v/ L
(*memory).p[0].computeClock[k] = (*storage).p.computeClock[k];
- L! Y. g- q8 v* @& ~" ubreak;' }7 F. i$ ?& ~7 P) |
}3 _* n( n0 [! ~
}
$ ?1 b! K5 y, Z* B5 e9 w. nif(i<initProcessNum) //调用一个作业进入内存后,并再生成一个作业等待调入, ]9 U- J7 S: t5 C
{
) C: L6 w0 f0 B9 ~produce_one_task(storage,i,ID_FIFO++);
9 E9 j* E& n0 n- Q$ PMAX_COMING_TIME = (*storage).p.comeingTime;
% O% [% z- S! V- M! w' o8 i2 qsort_by_comingtime(storage,i); r& K4 y3 Z3 e( v* q
}( E0 R* G" M: s- u+ d( k6 g
return 0;
; A4 h, y) U' H6 T) r. {* U}* k3 }8 y$ G* o
int sort_by_comingtime(processPool * p,int pos)& d5 \: e9 ?9 G: F1 F
{
8 b0 @& p W! Wint i=0,j=0;/ r9 m6 C+ I2 |
process temp;7 b5 q" C% \, s; V
if(pos<0)8 I8 A$ G; X) M0 ?
{( Y2 o0 ~% F- }- \+ v% D- o/ A
for(i=0; i<initProcessNum; i++)
" R2 ~# h9 U* E Jfor(j=0; j+1<initProcessNum-i; j++)
+ ^7 a, j, ?3 O; }- [{3 M' [3 k6 E3 y/ S9 {
if((*p).p[j].comeingTime>(*p).p[j+1].comeingTime)! }% [% [3 q! R+ H& j; Q7 d$ ^. \6 S' v
{( ?$ W- p2 s3 Y* u
temp = (*p).p[j];0 t o$ |9 F! _ e4 z
(*p).p[j] = (*p).p[j+1];! g' s' ~" ]. H" x% I, g
(*p).p[j+1] = temp;( q: R* i. y* l1 a# ^! u
}
$ U; B [, M5 Q; K9 k) t; v0 Y. `}& ]9 `1 a. l+ L% f5 a/ y
}
% z& \- P# u' e" X7 X! zelse if(pos<initProcessNum)
+ |6 O$ R7 @+ X, ^# q: `# g/ `{
+ ~+ ?" |( s+ Y' e2 c5 ~! j" l9 Pfor(i=pos-1; i>=0 && (*p).p.comeingTime > (*p).p[i+1].comeingTime; i--)
8 Y8 R. Y1 P3 Q+ N{6 ?9 M! R* F0 ? K( Z
temp = (*p).p;9 H/ h5 J$ i* o, K. m* \- D
(*p).p = (*p).p[i+1];
" ?3 J5 K) b6 L. F(*p).p[i+1] = temp;' T. O9 M! J: R" Q; p1 ]5 P) S
}
% _! G0 \. R, F# Q( afor(i=pos+1; i<initProcessNum && (*p).p[i-1].comeingTime > (*p).p.comeingTime; i++) \4 r; c9 p/ _' x
{
* m j8 x* h- t) }# s* O$ ctemp = (*p).p[i-1];: J4 B1 J* c2 b3 r
(*p).p[i-1] = (*p).p;
: Q* q0 r( J) m(*p).p = temp;# d+ Y& E! `$ O* C0 r0 l
}
& u" {' m3 p6 a: z0 A}
- y, L3 h: { X# H0 gelse
, E- @8 i7 [4 E( `/ yprintf("position eror\n");
+ x& M5 c1 [$ A5 J* F0 P* i* V* Yreturn 0;
* p7 n2 ~" g6 a( a3 X; s& @8 A}
1 j1 K+ N D. d& I }$ Pint InitPool(processPool * p)
" a1 B1 U# o$ N7 R* O; l L5 @{1 ]% r9 E3 q" e8 P1 w
int i=0;
) j2 o' V* Q4 j(*p).proNum = initProcessNum;
; j% }' v$ ?% y7 \(*p).p = (process*)malloc(initProcessNum*sizeof(process));$ L, b% H8 Z0 j9 p% _
for(i=0; i<initProcessNum; i++) //init process information0 Y6 @6 C2 G& v& n# z5 t
{
' J/ a3 ?9 |' a: d1 \: T(*p).p.computeClock = (int*)malloc(initclocknum*sizeof(int));
# @4 k( U% r% Y) ]% U& t(*p).p.ioClock = (int*)malloc(initclocknum*sizeof(int));% B* j5 j' [- n0 J
produce_one_task(&(*p),i,ID_FIFO++);
- ]* ^# `0 v- I) g% \. ] z) \3 _! }9 k}5 D9 }: N+ \2 T8 j x
return 0;9 T: g% b: p& r* ]
}3 Z" w4 R9 Z3 Y* W. u1 V
int produce_one_task(processPool * p,int i,int id)' d# S6 {# D0 Y' K3 }) w3 G: x6 J
{4 }# [& l. w, O& e$ k0 Q
int time=MAX_COMING_TIME,j=0,totallTime=0;
# A6 ^( O l+ J$ k(*p).p.processID = initProcessID+id;
# j7 w) G: M% P(*p).p.comeingTime = time+rand()%(MAXProcessRunTime/5);# G `4 S- `7 ]# O+ @$ N+ G
(*p).p.produceTime = systemClock;
* w+ y$ Q% S3 J( `4 W) e/ u(*p).p.ioNum = rand()%4+20; //IO number setting to 2--5;
. S) b2 t9 W1 Y7 D2 s, @(*p).p.computeNum = rand()%4+30; //computNum setting to 3--6;9 Q3 z& N/ c% V5 ^5 }
totallTime = (*p).p.computeNum + (*p).p.ioNum;# F$ M. ]( ~# O+ |4 j( y+ s
(*p).p.computeTime=0;# }4 r: _% d' R6 X O' Y
for(j=0; j<(*p).p.computeNum; j++)
' T2 y8 t( r8 p! g7 O- o{& ^" V* D3 m# u {8 I! X
(*p).p.computeClock[j]=rand()%(MAXProcessRunTime/totallTime)+1;
9 a: S* @1 y( o5 N* M3 i$ b(*p).p.computeTime += (*p).p.computeClock[j];
* T, |" E% l7 k/ v6 s: K+ v}# v2 v$ r. a% X' r3 R6 G
(*p).p.ioTime=0;
! z3 s7 W7 \' i* Sfor(j=0; j<(*p).p.ioNum; j++) |
|