QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2447|回复: 0
打印 上一主题 下一主题

经典任务调度算法的模拟程序

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2021-4-9 15:15 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

    * A& S& B+ e: P$ h经典任务调度算法的模拟程序
    / N0 p0 }! Z4 c$ ^4 T本科毕业设计写了一个经典任务调度算法的模拟仿真程序,测试了五种调度算法的运行性能。在程序中虚拟了任务的进程,按照不同调度算法策略从进程池中选取任务执行,在任务执行过程中,保存相关的统计参数,最后对这些参数进行处理,反映各个调度算法的实际运行性能,程序中可以通过修改任务的相关参数改变任务特点,测试不同任务环境情况下,调度算法的性能适应性。程序是通过C语言编写的,为了对运行结果图像化,采用了EasyX的图形库。由于计算机中实的任务调度过程比较复杂,在实验中为了简化程序的实现,在某些方面进行了特殊处理。
    ' P' a* g3 v4 L* u; e3 x
    ' a" z( E$ R; k. O/ G2 o编程平台:VC6.0+EasyX图形库环境。3 T; g0 O2 o  t5 q; Y* z

    , P- @7 k7 p4 c' y% F* u5 S# S以下截取部分程序运行图::+ ^9 ^5 I: t0 m3 |3 I

    . H0 @5 V3 N! H- y4 c  A. C源代码:$ ^9 m. I- M8 i' t" b1 f& T1 y
    , `+ F& n' h7 k, s! n
    #include<stdio.h>
    * c! C0 Q- e/ e+ w5 O0 M#include<stdlib.h>- d$ U$ `. R1 b1 v, L" I$ ^
    #include<easyx.h>6 E+ b2 A+ S$ q9 e1 j7 R7 z6 `
    #include<time.h>- i7 X) l8 z; Q- Z" \
    #include<conio.h>
    # d* A  `+ f# \* S: w" P9 f#include<graphics.h>
    1 L" b& R4 P  ^: X; u; R#define initProcessNum 102 h) e  m3 I* K1 o7 L; P
    #define initProcessID 10001 G8 W0 B* G7 X( B- P
    #define MAXProcessRunTime 10000* @' f9 [( h3 E' t
    #define MAX_MEMORY  4000( s, Q/ U9 I% m. |' `0 D
    #define exchange_IO_Compute 10( R/ y' w8 b/ l4 k
    #define exchange_process 254 b. u! ]( Z% |! M! [& j! w' S
    #define task_completed 1
    2 y) y- A, Q! {& \* {#define task_not_completed 05 H% O* V" [( L# X/ K6 }1 n
    #define initclocknum 100
    * P0 b: J9 T8 k7 w3 B! Genum condition9 K$ r% b0 ]" ~3 Z4 C$ n4 e- V0 ^
    {
    $ B" Z, E% l( @' B6 |dead,computing,IO_waiting,ready, v1 k) n# D9 E
    };6 I6 D1 c! o% z" @$ L) R
    struct process
    : \0 r" o% [1 C! ~& _9 P. v{
    : I; |& b* {( N+ k4 c# W+ Zint processID;9 n: [0 i. D- h
    int comeingTime;
    ; r6 E9 @/ J; O' i8 [int ioNum;
    , J8 T, q7 G5 k& g  q5 I9 n# I$ _; U  tint computeNum;4 @8 J( r5 t" c; f* ?+ H- q
    int * ioClock;
    2 f6 w0 b5 }6 B) M3 s9 X( fint * computeClock;" m8 H) X6 L8 ~+ {7 Z+ q  k
    int ioTime;" F+ d0 T# }% l- i# c
    int computeTime;
    $ S  r, v; V! v6 Eint askMemory;1 y" w, A  k; K$ E# \. K, }
    condition flag;
    4 |- [4 L* d+ Kint produceTime;  //生成时间,以下三个数据成员用以计算相关性能6 `% B$ h3 R8 A4 N" o
    int runningTime;  //第一次占用CPU的时间
    ' Q" I6 L7 t0 d, }% vint completedTime; //进程完成时的时间
    $ j5 s) j/ o+ y: o1 J4 e};
    & _2 A" l" G# I% G, s: E7 Y) Htypedef struct processCmpletedInfo  //保存完成一个作业的相关信息: A: v! M% L+ v$ E
    {8 P; ~9 z/ q: F# q
    int processID,comeingTime,askMemory;7 P1 \1 W% {4 Q+ J7 p8 q$ z
    int compute,waitio,exchange,completedTime,runningTime;
    * U+ B3 e6 V# s' r* _, S; \processCmpletedInfo * next;1 \( Z7 Y. {. S- Y: |* c% B
    }PCI;9 W. ~0 K# k2 O$ F8 F0 R& l$ I, ]
    struct processPool; h- Q; w- W, H, }3 Z
    {
    8 h* G  {, J; |3 @* Aprocess * p;
    * s( s5 c1 z/ t: r- \  r7 wint proNum;$ f. V9 Y4 ]9 i7 E
    };# P$ d( s4 i! U1 X; |
    int MAX_COMING_TIME=0,ID_FIFO=0,systemClock=0,FLAG_FIFO=0,FLAG_TT=0,FLAG_PF=0,FLAG_SJF=0,FLAG_HR=0,FLAG_show=1;
    3 B  H, n& K6 |7 u7 oint InitPool(processPool * p);
    : r7 s& S7 D/ e0 M  u' W" Z; _& G8 Qint produce_one_task(processPool * p,int i,int id);
    ( w: q/ y" e% o' }$ L4 ]int FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw);: w' y" K- [7 K" E% {
    int TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);% ]2 H' N) ^/ Y6 K/ W
    int TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos);
    " j" Q! K. U( S, U* Lint FIFO_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);8 ~6 K4 r4 L  l9 b
    int ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
    - `; V: F4 K/ \/ `" Y3 M' Dint SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);
    4 ~: p; r* x, n$ x5 {- t7 Eint PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);/ S2 x+ m7 D. Z8 G2 O! x2 e
    int Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);4 S3 S) T/ ]" w" E+ y' c
    int High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int disatch);
    ( F' F0 p: }/ s% L; R4 V& m% tint High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);( @0 I1 Q9 M0 `5 m
    + N$ F* `! L( w. T* D
    0 y4 [2 r: v' X! D3 E
    int sort_by_comingtime(processPool * p,int pos);
    ! J; i4 E1 G, i9 @5 `) x2 Jint showProcessInf(processPool p);
    ) A6 T  L! |7 o4 w- Nint drawPerformance_FIFO(int x,int y,int memorry);; `' @3 v% j: u3 d
    int drawPerformance_HR(int x,int y,int memorry);
    ( |* F0 l& n  n+ Gint drawPerformance_PF(int x,int y,int memorry);, Y2 H- H$ T, @
    int drawPerformance_TT(int x,int y,int memorry);
    5 L2 ]; x/ a' F* f: w2 p" nint drawPerformance_SJF(int x,int y,int memorry);
    6 M7 l3 n7 s2 @1 E7 yint MouseListening();
    . A$ k0 u! q& Z9 ^! iint MouseListening2(int *flagShow,int * showTime);
    ( V. N; {" t0 g0 d  S6 i& ?int showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR);
    " `: g* t) o: _+ ^
    + x$ U& d# m: x  Z; z7 T8 o1 k+ {5 M# p5 O% Z! a# B$ J: [; i
    void main()' ~+ p8 h  T! W0 l3 o/ r$ F
    {
    5 `5 |0 D0 e% k7 z1 m3 SPCI* FIFO_save_head=NULL,** FIFO_pri=NULL,* Timet_save_head=NULL,** Timet_pri=NULL,* SJF_save_head=NULL,** SJF_pri=NULL,
      O7 {0 G3 J) s+ V; w*Priority_save_head=NULL,** Priority_pri=NULL,*HR_save_head=NULL,** HR_pri=NULL,* p;
    ) s/ X. u: x3 [5 I  [3 mint i=0,FIFO_memory=MAX_MEMORY,count=0,Timet_memory=MAX_MEMORY,SJF_memory=MAX_MEMORY,Priority_memory=MAX_MEMORY,HR_memory=MAX_MEMORY,$ @! a$ ~2 Z* f
    flagDraw=0,showTime=100000;
    " j! p8 O6 ~# Y- M$ ~processPool FIFO_p, FIFO_mmy,Timeturn_p,Timeturn_mmy,SJF_p,SJF_mmy,Priority_p,Priority_mmy,HR_p,HR_mmy;
    8 V$ z2 p0 o; F4 `7 F/ ?% VFILE *fp=NULL;7 H. \7 Z2 }9 N  M* G
    //processPool HR_p,HR_mmy;2 _# S( o9 s1 f! n( Z

    . h- n4 z/ f/ P; ~8 z" e5 x5 y( C" Y
    srand((unsigned)time(0));" h. M2 V: P! ]% G) m
    systemClock=0;
    & Z1 @! P4 u" [; I8 V% w" W) q, zinitgraph( 1200,650,SHOWCONSOLE );
    ) B4 _% s- H6 \+ I* B( C$ Isettextcolor(GREEN);
    8 l: X  ~2 ~; \2 B# V0 G, n% T+ |3 T& Vsetlinecolor(GREEN);, L: L8 K1 X9 K; Q, u
    setfillcolor(GREEN);
    0 Z" G7 u5 p! D4 Z+ ^9 v2 I& R% v. ^InitPool(&FIFO_p);
    , ^# I, \9 U0 ?( rsort_by_comingtime(&FIFO_p,-1);
    ' }, G6 t7 d+ m7 `: ^3 M+ NInitPool(&Timeturn_p);6 @: w" o2 \; @& a: N
    InitPool(&SJF_p);+ ?7 G- u; n9 H% @1 n. [5 _
    InitPool(&Priority_p);
    / k; ?% Y5 k2 H0 r8 eInitPool(&HR_p);/ w& ?: Y1 ]9 w0 z
    //showRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);
    - E; o4 k0 K8 P2 g//Sleep(10000);
    9 p" V& `3 |: H, H3 o3 K; V5 P/ r/ r, U( h. n$ E; G

    6 |: U2 M* |' e3 oTimeturn_mmy.p = (process*)malloc(initProcessNum*sizeof(process));7 i9 P, u  q( q  G" B$ ^
    SJF_mmy.p = (process*)malloc(initProcessNum*sizeof(process));
    ( L! j" D& [3 W7 C4 B/ R4 Z2 u! a8 dPriority_mmy.p = (process*)malloc(initProcessNum*sizeof(process));# u8 i* B. L0 ^- h4 P+ S
    HR_mmy.p = (process*)malloc(initProcessNum*sizeof(process));, V* i6 B, ~+ d, j+ p5 F- o& p) G
    for(i=0; i<initProcessNum ;i++)
    5 C* I% v  \$ x" F  R$ H! r: c{/ q; k1 [4 K8 |
    Timeturn_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
    # n9 _8 }. V- o4 B+ h" ]/ dTimeturn_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));( J% c: l7 n/ i8 ~
    SJF_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
    ' c! N: C' M" i8 R4 X. z7 ~3 rSJF_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
    * L; x2 s$ I8 }Priority_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));4 P) L2 Q% F- d2 p4 f) t& r5 L
    Priority_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));, e6 d' X: w0 ^# M% Y
    HR_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));4 _. s% u, i" n/ O7 W& ?
    HR_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
    - }: o& [8 P! A# l}
    5 L# L& m) }  _1 Z5 L6 ?- i0 nTimeturn_mmy.proNum = 0;' C- `' C) l; n9 d3 V
    TimeTurining_storage_to_memory(&Timeturn_p,&Timeturn_mmy,&Timet_memory,-1);. t) k& v& o% w  l4 l1 e9 Y5 A6 d
    SJF_storage_to_memory(&SJF_p,&SJF_mmy,&SJF_memory);
    3 i( o) ?, j! X: Z- jPriority_storage_to_memory(&Priority_p,&Priority_mmy,&Priority_memory);# _0 L. Z7 n4 l( E; q& `! f
    High_response_ratio_s_to_m(&HR_p,&HR_mmy,&HR_memory,0,1);
    ! U+ l* W0 e9 i" W" m3 }//showProcessInf(Timeturn_mmy);( r5 ^1 V5 W$ e. i/ ~  f% z
    FIFO_pri = &FIFO_save_head;
    ( f0 b. @0 X9 a" OTimet_pri = &Timet_save_head;
    8 T/ k1 `7 f" OSJF_pri = &SJF_save_head;
    ; E$ k0 h' B4 pPriority_pri = &Priority_save_head;
    1 }' y+ n! D' Z, `    HR_pri = &HR_save_head;6 T2 U& u8 F9 ?- s3 Y! h
    setbkcolor(WHITE);0 ?  @. j- J) x+ a0 c
    while(1)
    7 b. A* e4 U( J{2 |4 t! [6 Y0 ]- H
    if(MouseListening()==1)
    / s0 P6 g, d: w) \" p* V; H% _flagDraw=1;5 U+ k$ \: n8 d" \
    if(count==100)
    9 V' K+ ^( E1 {3 ~9 \{3 p& b+ ~- }0 c% b3 E' c5 ^
    if(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,1)==task_completed)
    : A& K( d  Z1 e4 G0 Z( i/ }{$ A8 q- O( O9 O) q) e6 ~; R  ]
    FIFO_pri = &((*FIFO_pri)->next);
    7 m6 W# P3 v2 _- Z9 U
    6 ?* D7 p. e9 n6 S. B//printf("hello");
    : g7 L4 ?* m4 K3 [$ l! @}
    / W8 ~' v) Z3 q4 e" g! Dif(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,1)==task_completed)# d8 V) i. ?* N" Q+ m6 Q
    {
    : {+ j( R5 E4 [" ~* T- a    Timet_pri = &((*Timet_pri)->next);* u5 a' B. a: k$ C; b2 Z
    //printf("hello");
    6 m& W3 Q0 a, |) Y: E, x}8 w& m, D; Q: w5 z* {4 X
    if(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,1)==task_completed)
    % `8 u, Y; B( Y4 I! I1 y{
    4 ~. G- z) m2 y5 d3 qSJF_pri = &((*SJF_pri)->next);
    % S; a- a6 \! @0 a- n//printf("hello\n");
    # |, H7 A! T) [' |. a0 N0 R}6 `- R/ {1 V' o- n6 [0 ^
    if(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,1)==task_completed)
    1 k+ K/ o, A, v% z{! [. A& y5 M4 m8 I- Z6 c
    Priority_pri = &((*Priority_pri)->next);
    " V) ?, e) j# F9 Q//printf("hello\n");
    4 O; A0 ?0 m0 q}
    & W3 S5 e8 j8 ^; F' D% y( A; {" Yif(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,1)==task_completed)5 J. M& {# Y3 Y& D5 E: ?
    {' M; c& A% o: B/ c# b# h! m
    HR_pri = &((*HR_pri)->next);
    7 A5 g: v& G) T; W) T0 g  D9 w//printf("hello");
    + u% `! \! c! i6 q! J. G4 _}9 ?4 E- K  H0 u# T+ N/ S
    count=0;
    + G% u9 n6 U# B1 J. A}/ U/ L9 ]" O* [
    else
    5 X% e, g8 u  x, {+ K  J{( u, l, L( l, N4 X2 s
    if(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,0)==task_completed)/ F! E2 N3 }; @! ]
    {
    6 x  S1 Z& ?7 n- g+ J* sFIFO_pri = &((*FIFO_pri)->next);
    + g$ c' r* w+ x1 {5 _+ t! k// printf("hello");
    + B! R3 a" U3 q2 A4 U}( U2 P- D0 D1 G
    if(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,0)==task_completed)
    $ J5 H7 }/ ?( l6 `) Y8 @! f5 o5 J3 F{( }- M8 ]) j$ V: z/ C" k4 g# W
    Timet_pri = &((*Timet_pri)->next);# E6 \6 H5 f3 `. F1 L: R7 b4 M
    // printf("hello");
    # W% Y, @7 I" M5 t3 n. c- P}  a7 G, R$ r! P1 H
    if(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,0)==task_completed)9 H2 |& V* E  A" g, D
    {5 z0 [# J! G7 n. D! M
       SJF_pri = &((*SJF_pri)->next);: O5 h1 T' W4 ]7 R% S) P9 Q
    // printf("hello\n");
    : O( ~* ~6 w0 z5 L}4 d, X5 [5 o& q, ?% x+ b- Z
    if(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,0)==task_completed)# I# m2 s" z" C0 W0 N3 i
    {  K$ `; ?3 e# d
    Priority_pri = &((*Priority_pri)->next);
    0 X$ T$ z! n# N- x3 R//printf("hello\n");" z+ X" m) u$ S3 `
    }
    0 B8 j, V* K/ ?/ oif(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,0)==task_completed)
    6 }% K9 _7 H7 d" w3 R5 q; e{7 q+ U# w! F4 t
    HR_pri = &((*HR_pri)->next);" }: S; A" L  X. O3 |( {, m4 p# z
    //printf("hello");- V; w1 z% p) K( E8 I
    //Sleep(1000);9 K0 O( W# W6 K
    }
    6 @- w( A( k6 j! z5 I5 u1 A% |count++;
    3 N! T( E8 ^2 s7 k) Z9 {+ E}
    - f  [  D$ l4 Pif(systemClock==showTime)0 g: ?5 u, J1 u1 t
    {( l! I+ A- C$ O! B. _3 S
    /*PCI * p=FIFO_save_head;
    . }) k5 k0 `+ E( n5 Qint i=0;& o4 u# B+ ^2 r7 G7 r) s+ s4 s
    for( ;p!=NULL;p=p->next)4 T& S: y1 w& n
    {& Q# [; H- R/ Z' t$ X# E. E
    printf("Id %d\n",p->processID);
    - u( z. v* a) N1 Q) ~% Dprintf("comeingtime %d\n",p->comeingTime);& N* l1 {) f9 f& p# X
    printf("runningtime %d\n",p->runningTime);
    + u4 P, }* Y6 d. `printf("asdmemory %d\n",p->askMemory);. L$ U; V' [6 v" x8 x
    printf("completedtime %d\n",p->completedTime);$ n3 U- {, l5 l& i* R- X4 p# e
    printf("compute %d\n",p->compute);
    8 a1 U4 v/ {2 i! tprintf("exchange %d\n",p->exchange);4 d- s# X1 [4 N$ ?, z  |; o
    printf("waitio %d\n",p->waitio);
    9 U; i+ J6 b( {. ], G% Hi++;
    6 f: p$ [- N2 e: ?. Q+ R4 L* c) v/ G2 O" S0 g7 ?
    - r+ \% ?, O8 w; U& H! T& A
    }  m1 x. s: K0 r& B7 W
    printf("%d\n",i);*/$ T# F) V, X* a, X' D$ k0 G
    if( (fp  = fopen( "data.txt", "a" )) == NULL )0 ]# k0 U/ Y, t8 l- t! v5 x
    {
    " @6 I1 K( S' s1 sprintf( "The file 'data.txt' was not opened\n" );
    4 w+ c1 w( P6 Z0 p//return 1;
    " v) @9 l  W! d. y}) @$ J2 U( x4 I% x" w
    else5 m; e- s4 ]  _) P* I' D
    {
    * j. i1 e& b$ P) p$ Z1 `6 j- ifprintf(fp,"FCFS \n");( E' t, v9 x- f1 u1 t/ s
    for(p=FIFO_save_head;p!=NULL;p=p->next)5 x: j; Z+ z* q6 G9 v
    fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,1 s% e5 M9 O9 a" O6 N2 T
    p->exchange,p->waitio,p->runningTime);6 S5 [! W/ [7 k3 D# i
    fprintf(fp,"\nTime turn \n");
    3 _8 }. `. j( l6 C& g7 l$ h2 Sfor(p=Timet_save_head;p!=NULL;p=p->next)
    ( K! t. E! h3 \8 O& t/ y: zfprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
    $ h. G( O0 S* v; sp->exchange,p->waitio,p->runningTime);
    4 }2 }1 z  A- ^1 Y- Sfprintf(fp,"\nShort Job First \n");
    + P  j9 o9 W7 r* [6 mfor(p=SJF_save_head;p!=NULL;p=p->next)7 [' t' H0 G3 X3 }, s' o
    fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,; z  l, W6 I- D: {2 {3 w6 _% M
    p->exchange,p->waitio,p->runningTime);
    1 ~" w7 j5 n; Q: m" ]1 @fprintf(fp,"\nPriority  \n");1 h! j" K) }2 R; Q6 }% x
    for(p=Priority_save_head;p!=NULL;p=p->next)
    $ D% l% b7 Q- x" cfprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,/ l' k( x, O; ]7 r
    p->exchange,p->waitio,p->runningTime);
    $ n2 n' D& y* v7 C" S0 z0 Gfprintf(fp,"\nHigh response \n");
    4 F( E5 O6 U: C/ R0 [9 _for(p=HR_save_head;p!=NULL;p=p->next)7 S% F$ J  V: L1 M) i
    fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,2 A$ x. x6 f$ }) z: F1 P
    p->exchange,p->waitio,p->runningTime);* y; G% Q- K$ O1 O7 h
    fclose(fp);- H6 x& U2 P3 t( h7 z6 q0 Z4 @
    }
    2 h' H5 M% H) IshowRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);) G& k+ H+ ~# h" N3 n
    MouseListening2(&flagDraw,&showTime);
    % }& j- s% \6 z; |+ e" S* v. |}
    ) u1 h5 x0 V8 {8 IsystemClock++;
    / m4 P0 _6 H- ]7 Rif(flagDraw==0)6 `" U1 n1 @" ^. Z2 M
      Sleep(10);5 b- a/ j" H) S6 ^8 O. S8 W
    }
    ' P- P, M+ E9 T
    # [/ K& N; r3 w& a! T% Y5 ~) i/ t+ S( n
    }& M! d$ I8 U6 E  ^3 p
    int showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR)7 o2 C6 w. }9 R1 t: M( |
    {+ x& s) P7 ]" j  b5 m1 x
    PCI * p=NULL,* name[5];
    2 ^4 I/ A, u. yint count=0,i=0;
    / s) b) w2 J8 u4 b. e- hchar ch[5][10]={"FCFS","timet","SJF","PR","HR"};" A9 t3 j/ u0 a* ^( s) z
    double turnover=0,wait=0,c=0,w=0,change=0,pos[4]={0,0,0,0};7 E5 J/ O1 |+ N9 b( r+ E, Q. t
    struct info
    * D. D& \( _% k6 c{3 x8 V5 }3 u9 F# b9 [* G- Q* a9 P
    char name[10];
    , P" @# x6 y/ R+ a$ udouble throughput,turnover,wait,CPU_rate;! k1 ~/ b- i9 W4 t# p8 j5 p
    }inf[5];: N6 S/ p* _9 |% y+ B
    name[0]=FIFO,name[1]=timet,name[2]=SJF,name[3]=PR,name[4]=HR;
      ~8 h1 q% U4 Q. Gprintf("调度算法..........A\n");
    0 `$ B: n$ N5 E2 y- A, h# M' K9 Nprintf("吞吐量............B\n");
    . N; i5 u7 [7 Zprintf("平均周转时间......C\n");
    # X+ N# h+ C! M( f5 O6 i& p: w! E5 cprintf("等待时间..........D\n");3 ~; o1 D6 X8 T
    printf("CPU利用率.........E\n");: z! L+ z$ }0 r# W  n
    printf("A\tB\tC\t\tD\t\tE\n");
    , y( y) z0 F% xfor(i=0;i<5;i++)
    9 j! |# i& J/ ]9 u" s$ f) G{0 l' U! V- p. t2 w0 F! I
    count=0,turnover=0,wait=0,c=0,w=0,change=0;; A0 W% R& [  \4 ~! @
    for(p=name; p!=NULL; p=p->next)+ I+ V/ S4 Q( `: G. r) n+ N5 F. d
    {
    0 ?2 j3 j4 E. g$ }$ Y/ K0 mcount++;3 I' [, ?) X8 [, Z
    turnover += p->completedTime - p->comeingTime;. b1 S0 U' ~9 R$ N6 G
    wait += p->runningTime - p->comeingTime;7 U, E8 [, k) P; w
    c += p->compute;% h8 _$ q8 o/ J2 B6 ]! z( Z
    w += p->waitio;/ Y5 E" t4 n! R
    change += p->exchange;
    + u/ V" q0 W6 z% ~7 C$ M}0 T$ q8 C# I5 O. N) p, @
    turnover = turnover/count;1 g) I6 q- A, y+ U
    printf("%s\t%d\t%.2f\t\t%.2f\t\t%.2f\n",ch,count,turnover,wait,c/(c+w+change));
    5 {7 N1 [) i; D5 n& ostrcpy(inf.name,ch);# Z/ T2 j2 t0 p
    inf.throughput=count;
    6 K7 V5 ~% {, |" M0 _# zinf.turnover=turnover;4 L4 h- _" P% \8 \9 }9 o
    inf.wait=wait;
    ; I# {1 B* E4 Q' f3 ~' G1 sinf.CPU_rate=c/(c+w+change);( K+ h  T1 C7 D* K9 w! t: e
    }$ j# t6 _2 [. \( i2 J* q9 r
    //画图
    , Y7 z8 S0 \5 b0 R- I7 @8 O//cleardevice();
    2 Z$ @. m" B1 Fline(0,600,1200,600);
    ( @( |$ ]1 f$ F4 eline(10,600,10,200);* w5 `' e! a8 p) B
    line(10,200,5,205);8 _6 J( G. g/ J- ?
    line(10,200,15,205);/ s; _, l2 h! q& v* k: M5 l
    line(310,600,310,200);
    3 o- B8 I% n* O& I9 @8 ]$ n$ ?! `3 fline(310,200,305,205);; M) P. ^1 L0 ]- b
    line(310,200,315,205);
    * v/ i1 }, J2 M. j! v+ z+ h6 cline(610,600,610,200);. I, Q' H8 m$ w* h. h
    line(610,200,605,205);+ U. s3 v9 U5 ?% l0 u% U% E
    line(610,200,615,205);" x  j, p) c/ i% e
    line(910,600,910,200);
    / X1 k& U; c9 Y/ @9 y+ b2 Y6 _5 Cline(910,200,905,205);" E1 V5 `1 r7 b
    line(910,200,915,205);//最高的长度400,宽度均为40
    1 P& W$ n7 m  R6 V4 [for(i=0;i<5;i++)
    * }3 D* |5 V2 d. ]+ W* U) S: f{
    0 o( Y; F6 _2 |1 Y& Y) ^6 sif(inf.throughput>pos[0])
    ( A% G: `/ Z2 v# apos[0]=inf.throughput;0 S9 @; A! {! I- L3 H$ t
    if(inf.turnover>pos[1])
    $ D9 t8 v  u% a% v0 fpos[1]=inf.turnover;# n+ n# S* K. a: e+ p+ I$ u
    if(inf.wait>pos[2])
    $ A0 e9 ?1 S0 p2 T* u$ Ipos[2]=inf.wait;
    # g8 `0 w" i+ B# Jif(inf.CPU_rate>pos[3])
    ! H( k: g6 T* s0 D* \pos[3]=inf.CPU_rate;
    , |5 ]/ {* `* y8 q/ V7 i! o}! e) Y9 @% f& \; ]: v
    settextstyle(30, 15, _T("楷体"));
    ( a6 x8 |; D2 n2 C1 x# X% p7 \for(i=0;i<5;i++)
      w8 U/ C: s  T{6 B; P+ p+ w8 F, W
    switch (i)
    9 u# [! B, O+ v( w% B. Q  F{" V0 ]3 i$ d- s9 y6 `0 W) D
    case 0:
    1 R/ I8 T+ W5 z! f  Gsetfillcolor(BLUE);
    7 V0 q2 M/ @4 {4 ~3 |6 bfillrectangle(100,50,150,100);2 f% H7 B& ~2 ~! G: a
    outtextxy(160,50,"FCFS");& E; X' }/ _# V
    break;
    + N3 p  G! |9 X9 p, B% f3 Ycase 1:  S4 v! z3 L' @" p% O
    setfillcolor(RED);
    6 ]5 l7 k$ _: T$ p5 Nfillrectangle(250,50,300,100);/ \( I+ g( u2 Q0 e* m
    outtextxy(310,50,"timeTurn");
    $ t- d/ S$ z4 W1 t9 b* L  qbreak;
    + E; g# @/ Q+ G0 u2 `case 2:
    2 \9 a$ y/ w5 A" Y; csetfillcolor(YELLOW);* a5 R3 ~5 Z6 L
    fillrectangle(450,50,500,100);
    : W' S. n: R6 U0 ~6 @outtextxy(510,50,"SJf");
    $ S2 |0 E# a6 B8 `break;
    ; m9 y9 T; i; T) O: ^" @; t' hcase 3:/ M6 x+ Y( S. H9 I( T
    setfillcolor(BROWN);6 J# P/ J) d5 Y8 a: t/ l: F; Y& |2 b
    fillrectangle(580,50,630,100);3 v, v# I- W2 K3 @/ E* v) m$ G
    outtextxy(640,50,"PR");4 H1 E8 N9 V: j  j7 j( k
    break;
    ! H  l8 X3 T' R9 a: h4 Dcase 4:
    3 \3 ~3 ^3 A/ C6 D3 m, Esetfillcolor(GREEN);: P- s3 d0 n) S  \0 I  x5 _
    fillrectangle(690,50,740,100);
    : o+ i+ J. t9 `: {' L: zouttextxy(750,50,"HR");
    8 W& J0 L! O) m2 ~1 F& `" ?break;" b* F; f9 ^) V6 g9 L
    }
    8 d' W0 j, A2 ^. p- [7 lfillrectangle(50+i*40,600-(int)(inf.throughput*400/pos[0]),90+i*40,600);
    0 ], t. b$ s$ ?" P! ~* Zfillrectangle(350+i*40,600-(int)(inf.turnover*400/pos[1]),390+i*40,600);
    9 p" u- R' [( M5 U8 z) ?5 P% _5 H$ }fillrectangle(650+i*40,600-(int)(inf.wait*400/pos[2]),690+i*40,600);
    9 z( {/ _2 l) r: afillrectangle(950+i*40,600-(int)(inf.CPU_rate*400/pos[3]),990+i*40,600);
    ( ?, r; L  O3 z: N
    7 ^( T& o- ]5 X" X  D9 ~9 U. O
    . n9 g1 ^9 b- f! e, c}
    7 P4 F6 i3 \5 `" \- M& O( t    outtextxy(100,150,"吞吐量");
    & }& w! w0 c6 \. R5 p1 ^* Q" eouttextxy(350,150,"平均周转时间");
      |* t" v' l8 I# u( O5 houttextxy(650,150,"平均等待时间");
    + \& R7 q3 k! @. zouttextxy(950,150,"CPU利用率");3 b: Z5 k  h. Y& [6 A/ g' i
    return 0;
    / f+ O+ N( q0 a1 o0 }# o( t. y}
    1 M- q, t6 X' I( |. R$ B+ Tint MouseListening(). ^7 [) P1 c6 V5 z
    {, h$ @' {0 |6 L5 x( ?( E7 G# e( U+ u
    MOUSEMSG p;
    9 f; f- {3 Q5 l3 s& eif(MouseHit())- K+ L: q: F0 v  _6 y; ?8 L" O
    {
    + e% @5 B5 v1 o  I* O1 Hp=GetMouseMsg();6 a) s' a+ U( s( g' a. O
    if(p.mkLButton==true)
    ' `* G' v1 N& W- c* a{
    3 U" U3 Q9 W4 _9 `) c$ o6 n8 tif(p.x>0 && p.y>0 && p.x<400 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)- X( ^7 O  v. O% z& J2 y
    FLAG_FIFO = 1;
    9 B* e: v% Q: U' v) H8 Aelse if(p.x>400 && p.y>0 && p.x<800 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
    - [% D# ~1 M/ E. G" @FLAG_TT = 1;; U/ c& Y3 K- P/ w1 h
    else if(p.x>800 && p.y>0 && p.x<1200 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
    ; S6 m7 h( X1 d1 t1 ?FLAG_PF = 1;
    6 r1 I3 W; T% H; \9 i7 J. Helse if(p.x>0 && p.y>325 && p.x<400 && p.y<650 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
    : y* H2 Y  @' v' @3 S/ c- ^' yFLAG_SJF = 1;1 {; b8 d% h* j
    else if(p.x>400 && p.y>325 && p.x<800 && p.y<650 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)/ O( ~1 j( |0 U- ]3 U8 i- \
    FLAG_HR=1;/ o( U. Y' |; p" m" G1 y, B
    else if(FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO >0)
    ! N' a, J9 j. H4 t{
    " \2 r: V9 L& l$ x6 BFLAG_HR=FLAG_SJF=FLAG_PF=FLAG_TT=FLAG_FIFO=0;- @; |: |* G; A" D/ @, z7 [
    clearrectangle(800,325,1200,650);
    - C: E( J# I: P, v}9 @8 D$ X+ E5 k8 V3 r# r
    else if((FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0 && p.x>890 && p.y>455 && p.x<1110 && p.y<510 )
    8 b1 z2 Y" K& ~  R5 v{
    % F  h/ P  @7 _: EFLAG_show=0;3 ^1 ]6 r  }; S5 Y
    cleardevice();
    $ M/ S% W9 Q/ B2 ]5 q/ Z+ ^: Xreturn 1;; f1 i) A" \$ \+ \& o6 o4 s) i" }
    }
    9 m/ g6 [/ i5 p( f/ D. J7 ?}" F5 a$ Q1 a) S2 y8 _* \) A  X9 H8 n
    }6 R5 K* ]4 l* A/ l. {1 r
    return 0;" x: I4 Z9 ]0 R3 \, I/ I
    }
      y6 R! _! N8 v0 nint MouseListening2(int *flagShow,int * showTime)
    0 A# i! [4 I1 R  M! K{0 l" a1 \; @5 A3 N' e) Y  C9 ]( b
    MOUSEMSG p;1 n& D( r5 N, W: r8 d0 ~
    rectangle(1150,0,1200,50);
    + K7 `0 u3 H) ~- Y: Z* mouttextxy(1160,10,"X");
    2 E( R. n5 |1 I4 E" Twhile(1)
    0 D) S1 C) P/ U+ n7 h2 Q+ u{% V: \; M3 @+ s: u/ o: N2 L
    if(MouseHit())
    , b3 U& V: y. W* H( i+ d3 F- }# N1 b{
    # ~& b, y2 |: _% W+ kp=GetMouseMsg();% H. P+ _9 v% G! c: Z
    if(p.mkLButton==true)9 z4 r! x, T& {6 y' C& [
    {
    3 c6 v) c7 e7 X; K  M7 _if(p.x>1150 && p.y>0 && p.x<1200 && p.y<50 )
    - J" ~1 k( V6 ^{7 ~* K( a0 V! V
    (*flagShow) = 0;( {' T; k1 W8 G6 x6 M- N7 Y
    (*showTime) += (*showTime);1 F- z! E2 I) H0 e1 o, C
    FLAG_show=1;
    . E; y& h1 F* x! Rbreak;
    * e7 s5 @, K8 C2 g6 F# ]" {}( R: [' u6 S6 {7 ^
    " q! S: f( L2 U0 R3 {3 I% B' B
    }
    ! i1 q6 i% P; B4 a6 B7 w3 e3 N}
    6 X+ j6 H/ w' Q: ?9 BSleep(20);
    9 s% X+ c' ]+ t% @- D  N9 y}
    $ ?4 _( i% P: vcleardevice();: n% O; N( }3 @( U
    return 0;/ b9 s! A. _2 z
    }7 E# v5 E3 X. \6 f3 R
    int drawPerformance_FIFO(int x,int y,int memorry,int com,int wai,int cha)) v, A( i+ v" T. k9 s+ h
    {
    . E9 ^" Q) C2 \% R1 `( l$ Lstatic int info[11][3],num=0;
    8 _: G8 v7 E, _) y3 wint i=0,j=0,pos[10][3][2];
    ' |0 V  P- H, D! E  W/ Q; A! n" z0 Afloat temp,t;! W+ Z/ L! {* `7 A4 |/ w) }! _
    //画按钮,不属于FIFO图的范围( j2 s; |0 ^  W' v
    if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0 && FLAG_show==1)) d6 B7 n1 Y& {3 F3 y  m
    {
    7 r! u& |' `  Nsettextstyle(30, 15, _T("楷体"));
      H2 ]# S; E+ Q  C: T. Arectangle(890,455,1110,510);0 S4 o- _; @; c& K! p4 K
    rectangle(900,465,1100,500);
      Q# Q$ l9 f, |* ?3 aouttextxy(910,468,"查看运行结果");
    9 z8 v1 M6 {% @9 R* z5 v}" n* {% e8 e/ a% O! N/ M6 v
    //结束画按钮7 _& h) q4 T" y- M4 B/ ~( [
    info[num][0] = com;
    ! |- G& O0 P5 i) Z1 Y' [info[num][1] = wai;
    4 s7 _. B0 r" |. A! dinfo[num++][2] = cha;
    ! @/ v( [+ Y0 `& [. `if(num>10)  //存储10个点0 {& ]4 U7 e  ?7 Z
    {
    * L8 _$ S9 ~+ O  S% |for(i=0 ;i<10;i++)' l9 C# T; W# a# F+ q( ~8 Q% k
    {
    $ q8 g2 y: N! U4 M2 D; s* tinfo[0] = info[i+1][0];
    ( n+ u8 H& A6 i  zinfo[1] = info[i+1][1];
    ! h3 h' q1 G' p$ l. D# W' A! \info[2] = info[i+1][2];  f2 L& R) q# A4 p4 Z  E2 c' u
    }5 a% q: g9 M% N" s. Z* K# u
    num--;( z* ]1 o+ V: x
    }
    ) |2 r; J, t) O4 H# Kif(FLAG_show==0)
    3 M( p: @) C4 {return 0;4 K7 Z5 I1 a) F+ k! H& j
    for(i=0; i<num; i++)6 l1 U2 w! i1 r1 N9 F
    {
    + O$ l1 ?" Z; u. Wt = (float)info[0];7 {% }, E$ y5 o7 B( T1 W+ O
    temp = (t/101)*90;
    3 ~5 E5 u& h7 K  \% epos[0][0] = (10-num+i)*25+x+100;
    # D7 _! q# P! e, ?& g' p4 Ypos[0][1] = y+110-(int)temp;
    4 f' @% `  y) V6 \& E; _t = (float)info[1];! \2 i% k" n4 `  Y4 m& _! p( b* x
    temp = (t/101)*90;  }: F; I$ Y9 K" Z; h" |. S
    pos[1][0] = (10-num+i)*25+x+100;
      K. R2 h2 h' K( W0 U* apos[1][1] = y+210-(int)temp;
    ( @+ P( M% d4 y  Z; I: P. W1 D# lt = (float)info[2];
    0 e1 f; K: |' U; B+ Y' V9 Vtemp = (t/101)*90;$ g/ S6 n# X$ H( Z5 E7 V( f
    pos[2][0] = (10-num+i)*25+x+100;# g& x2 H- d8 z5 |* X+ L, V
    pos[2][1] = y+310-(int)temp;
    # v7 _7 C. Z; j4 j3 h1 }}: [) K, i, j4 D& ?% B
    if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)/ l: J1 u+ o) |" J; ?  B8 N6 L- X
    {
    : u- K' Z' s% ^- @# aclearrectangle(x,y,x+400,y+315);4 w! R6 c) f5 q" ?6 Q& b
    settextstyle(20, 10, _T("楷体"));
    . J  L2 R1 c6 e  K% Erectangle(x,y,x+400,y+325);+ F" W. Y: h' P1 J+ ?
    outtextxy(x+40,y+10,"CPU");       //画柱状图" h$ Q6 K6 d: N$ a. x. P) [
    outtextxy(x+45,y+10+100,"IO");% ?6 W$ Z( [$ r/ a) D' S8 f4 J
    outtextxy(x+40-15,y+10+200,"change");
    / b( t& Z- O( Frectangle(x+35,y+30,x+75,y+110);
    3 e: S6 F7 @; `/ `rectangle(x+35,y+130,x+75,y+210);
    + T3 f) _6 w1 o7 P+ Frectangle(x+35,y+230,x+75,y+310);6 X+ v7 ?& e& v& e, X1 ^
    outtextxy(x+180,y+310,"FCFS");
    ; a, R, t7 }; A4 x7 wt = (float)com;
    2 j5 X' I- n9 l. \2 c8 k& etemp=(t/101)*80;" e* C' l/ G/ @" T0 O, }
    fillrectangle(x+35,y+110-(int)temp,x+75,y+110);
    8 M: r7 G2 u. H6 l* Kt = (float)wai;
    ) Z! w0 H) Y# w( r/ e/ m# Q' htemp=(t/101)*80;0 }+ l8 q% V" l' N9 N
    fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
    0 m5 @. _5 p9 K+ \/ ot = (float)cha;
    : w7 {# v! K# W& z4 C: Q, ]0 d: Ptemp=(t/101)*80;9 m& R$ ?" T1 b' \1 c
    fillrectangle(x+35,y+310-(int)temp,x+75,y+310);+ i9 x2 c: E# M2 ]% p
    for(i=0; i<3; i++)   //画坐标   high=90,length=2506 s# d1 o5 D# {; x- w% P
    {; Y% G1 n% H' }
    line(x+100,y+110+100*i,x+350,y+110+100*i);
    , o$ a' a' R  f; sline(x+350,y+110+100*i,x+350-5,y+110-5+100*i);( B+ L; _! M$ B5 _
    line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);+ |5 w) K  H' k, ^* R( @) b' x. P
    % K8 X$ _- C0 _, \6 X
    line(x+100,y+110+100*i,x+100,y+20+100*i);
    3 H+ F' I; \4 T6 D( }6 s) Y1 ^) Eline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);2 c! N# G9 g+ X. K' {+ C- Z) C, ^
    line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);4 `' x& x/ [1 j. Q+ b( W% V4 J. K
    for(j=0;j<num-1;j++)5 h" y* ]3 b0 _2 x1 V, q! w% l. G
    {* _# x% _1 A; H3 ]: m: c3 ^) a
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    * M7 f2 B8 T  @* |3 lline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);- |1 s5 n1 |. _/ b8 D9 H
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 3 ^1 r' Q3 o/ s" n  d
    }
    * N! t5 g9 G7 T4 a4 d. H0 K5 k& ~}- I. H8 K9 C5 j. `1 F4 N- B# n8 I
    }/ Q6 E# \8 T; w
    else if(FLAG_FIFO==1)
    ; ~, F0 R4 e% |1 o' g' L) y{' S3 I1 u! C& C' i- O) @
    x=0,y=0;* D5 a5 H( n& N! T. J- E
    for(i=0; i<num; i++)6 K7 ~4 M: E, D# w/ J7 `  [$ R; W
    {9 `6 p1 [5 y* `+ g. |+ U
    t = (float)info[0];" T% S3 {2 c* O7 @0 T6 X
    temp = (t/101)*180;+ h( D) T# W" K  E6 G
    pos[0][0] = (10-num+i)*50+x+650;
    1 x2 F1 a' c! r3 ~2 kpos[0][1] = y+210-(int)temp;
    " Z7 d. B3 p/ y. p( \* D! Q) \t = (float)info[1];/ j7 W$ K# w& C* I: p: Q7 V: [
    temp = (t/101)*180;# r9 w1 B! B) `6 l
    pos[1][0] = (10-num+i)*50+x+650;# G. g! a8 h, c  T1 _; I
    pos[1][1] = y+420-(int)temp;
    & p/ K* Z4 b- wt = (float)info[2];
    # b1 H$ i1 N, p; P: r5 i: j/ s9 Ntemp = (float)(t/101)*180;0 k  J3 G8 ^" w4 r
    pos[2][0] = (10-num+i)*50+x+650;! J% w( o& a0 I9 n' u$ x8 c/ T6 z
    pos[2][1] = y+630-(int)temp;
    ) D4 ~- Z3 J' ~' e; e3 J: |0 |}9 B+ N( ]  C1 e* O' m5 c
    clearrectangle(x,y,x+1200,y+650);
    2 y6 }% l& J" T- H- T- ?settextstyle(40, 20, _T("楷体"));. _" h) g+ J7 k& T+ `0 f# f6 \
    outtextxy(x+50,y+50,"FCFS");* j- w- O% \& i
    outtextxy(x+280,y+20,"CPU");       //画柱状图0 `9 z( ~0 {9 G; {" t! `4 k- U
    outtextxy(x+285,y+20+200,"IO");4 ^; x  y' P: t1 H
    outtextxy(x+250,y+20+400,"change");/ {* U  V" k9 y2 @
    rectangle(x+270,y+65,x+330,y+215);! g1 x+ c( L* U# T
    rectangle(x+270,y+265,x+330,y+415);' ?" P" R' x% t! v1 ]
    rectangle(x+270,y+465,x+330,y+615);- v6 e% m/ }3 T; z' k
    outtextxy(x+290,y+620,"TT");
    ! {7 j9 p9 h0 j; R. R/ F, `1 st = (float)com;
      y2 @3 Z7 i. t. I1 ~% q3 K4 D) atemp=(t/101)*150;( V/ g2 l3 g- ?! O% O5 M5 j5 T
    fillrectangle(x+270,y+215-(int)temp,x+330,y+215);  r3 b$ l; F# R  O. c
    t = (float)wai;
    9 @$ J2 l. f. q3 @/ ]* o: i7 r7 gtemp=(t/101)*150;( |$ m5 Z3 B& E) @( n$ j: L# N7 e
    fillrectangle(x+270,y+415-(int)temp,x+330,y+415);, Z$ C. V8 y9 M
    t = (float)cha;
    9 V1 r3 O  k1 t- k8 ntemp=(t/101)*150;
    ' @4 F  _6 j, o4 s1 U1 f  l! ?fillrectangle(x+270,y+615-(int)temp,x+330,y+615);
    3 \3 }3 D1 i# d8 M2 ^+ s' ~" kfor(i=0; i<3; i++)   //画坐标   high=90,length=250/ @3 A8 d& [4 T6 d! o/ q5 ?6 q
    {! t- P% _0 L5 K( }7 d7 d
    line(x+650,y+210+210*i,x+1150,y+210+210*i);
    ; F6 M+ U5 Y% U2 iline(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);1 M9 J5 }3 B- S
    line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
    * w. B4 Z% H) B6 o) }8 G7 n" V( l9 M
    line(x+650,y+210+210*i,x+650,y+20+210*i);7 l2 I9 |% B/ F0 J
    line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
    : k7 a0 Z2 \" T# x* Oline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
    % a" d+ d+ j2 u. ]0 _for(j=0;j<num-1;j++)
    , U; ?& R, D$ W! U$ O' x, \{
    / S5 {; E" F' Y0 m" D/ {6 uline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    2 ?, \% V* C/ g9 m" T' vline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);* ~9 I+ e& F" \2 o
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); . f2 W# F) C/ x# \2 M1 W+ u
    }
    % s0 s0 T0 P! ]}$ h/ t) i7 E5 U2 W0 M
    }2 d; E9 Q1 A; V& x7 D2 A

    ! f, f5 Q) ?3 @( k/ {: y6 L) y5 o. O$ r! ^1 f8 [
    return 0;
    ; H; `- L% q& C; Y) y$ M}
    2 B+ P1 ?! l% Vint drawPerformance_HR(int x,int y,int memorry,int com,int wai,int cha)
    * y  ?2 {: O2 s{5 t# S8 |# _7 D
    static int info[11][3],num=0;* Y7 d& b4 M' \
    int i=0,j=0,pos[10][3][2];
    8 j4 B8 k4 z7 _1 B' X$ Ifloat temp,t;- X6 w* y% y! ?1 N
    info[num][0] = com;+ o) F0 M) V' |
    info[num][1] = wai;
    " p/ W+ }; k7 c- v" Einfo[num++][2] = cha;4 Y" Y& p8 l& w! j3 r2 m. T
    if(num>10)  //存储10个点
    8 y9 r' _& K' S! Z" M{
    ) T2 i( o! s& S% p  O5 lfor(i=0 ;i<10;i++)
    ( ]& e3 m* e. d: V* H* Z{+ d. c- r; Y( L& R3 K" s; Z1 [
    info[0] = info[i+1][0];
    ) e. L, l3 f: s8 e+ cinfo[1] = info[i+1][1];
    & K  c6 {. M) j' L1 Y. E  hinfo[2] = info[i+1][2];
    8 U$ x; Z6 q7 U, N" f# D: c}
    7 C) ~8 t3 f# b7 V/ \num--;
    ' C' w# y; ^" w- ~) [}9 Z0 U5 U; n' i6 c# q# Y
    if(FLAG_show==0)1 g. A  e! M/ a8 F6 R5 K$ a
    return 0;
    : T5 |  j% j3 U  w, [for(i=0; i<num; i++)
    . j/ _; A/ p  J$ j{8 a# q1 O$ r8 |. t/ X
    t = (float)info[0];- j- A  d5 u0 g7 R
    temp = (t/101)*90;2 g+ l: a5 w$ U5 Q/ e1 E
    pos[0][0] = (10-num+i)*25+x+100;& {1 m* c! \6 s9 o
    pos[0][1] = y+110-(int)temp;9 |* A; ?1 A0 {6 p. A  `
    t = (float)info[1];
    6 Q1 A1 r' _5 ?3 @% itemp = (t/101)*90;
      ?1 `* z  [" O  S* y# e+ Hpos[1][0] = (10-num+i)*25+x+100;( L, J& Z) N8 H; h' v. ]
    pos[1][1] = y+210-(int)temp;; p8 S3 L) y7 p. f: t6 O6 q* P1 z
    t = (float)info[2];7 x' R: Q) m! I0 q/ ?3 X. F, s
    temp = (float)(t/101)*90;
    # B* K& A& @! O+ Y$ hpos[2][0] = (10-num+i)*25+x+100;4 H& [# b. O* o1 X0 i6 [
    pos[2][1] = y+310-(int)temp;! Q" x! P& B  z( t) R9 D& Z
    }+ G6 d. c% R3 s* c0 w/ W
    if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
    4 G$ x/ ~' C1 K9 U8 p. c! w, e{. K$ M3 E% g1 B4 R. @
    clearrectangle(x,y,x+400,y+315);% V( [  \% g& x; N) {; D
    settextstyle(20, 10, _T("楷体"));
    % ?! N) B' {2 B* u# j+ Srectangle(x,y,x+400,y+325);
    - H: l" c8 ?1 A6 C9 {% eouttextxy(x+40,y+10,"CPU");       //画柱状图4 o- R1 {7 _( O2 k4 R) r: K
    outtextxy(x+45,y+10+100,"IO");
    % }) @5 S4 N  H; Touttextxy(x+40-15,y+10+200,"change");. N7 d1 D% I. a( m5 N  ]
    rectangle(x+35,y+30,x+75,y+110);
      q3 C+ q# z+ X1 urectangle(x+35,y+130,x+75,y+210);
    7 S- U/ s0 K$ |$ S* crectangle(x+35,y+230,x+75,y+310);
    8 g7 c6 \2 o  J9 souttextxy(x+180,y+310,"HR");
    % D( d3 h) `: \* r: Yt = (float)com;7 ]8 D6 R& ?7 ^, s, h, l! p0 x. p. y
    temp=(t/101)*80;- B3 W& s. A- h5 r, u: ]0 [2 [
    fillrectangle(x+35,y+110-(int)temp,x+75,y+110);# e! {6 r7 b6 K# m
    t = (float)wai;
    6 W% s% C) l& S2 W2 c6 }/ N) g( Htemp=(t/101)*80;
    * q0 ~2 o: n0 Afillrectangle(x+35,y+210-(int)temp,x+75,y+210);
    % B* ]% e+ ?; s$ K, H5 ct = (float)cha;/ B/ ], ]  t" e4 s2 U8 Q# ~
    temp=(t/101)*80;
    5 r, K& v, o/ v+ U( Xfillrectangle(x+35,y+310-(int)temp,x+75,y+310);% J5 ~9 d+ E  [5 v5 C8 P
    for(i=0; i<3; i++)   //画坐标   high=90,length=2502 W  H/ }7 w/ P9 N* Y0 S3 u
    {
    ; M6 Y6 H% E# F" b& y6 hline(x+100,y+110+100*i,x+350,y+110+100*i);4 s* @6 v+ j% |2 D" S; A
    line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);2 O$ H% C6 E& s/ o0 o1 i
    line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);4 P7 ^( z& U8 B

    5 g( W$ u; |/ h, C5 ?& B) q; iline(x+100,y+110+100*i,x+100,y+20+100*i);
    ; i& ^$ ^0 t+ zline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);( k% \: l2 {' Y, @
    line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);5 e" E6 g2 p* X6 X% _) x6 V* U# d! I
    for(j=0;j<num-1;j++)
    & t& |. D  b1 }; D) R" y9 b! z1 c{, ~' Z# w# X# Q0 T# K* e' H
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);% g( R5 m2 o; c7 A3 A' O7 {
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    - y. u( J  `$ E6 gline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    ) l" O% [! j# K: S}
    % p4 R" `; ]# k; A}) f5 n2 w/ i2 n/ H# H
    }8 b& X9 h9 ~0 ]8 g* O" N
    else if(FLAG_HR==1)
    7 \1 T4 t5 f# o: Y/ e) j{( _9 C* P( c# F; a/ D3 x. w" T4 U
    x=0,y=0;
      a: p& x" G; `% d. S* zfor(i=0; i<num; i++)
    * s8 i8 U' n0 t  [{
    ' o( N; J1 p5 I! \4 q8 Xt = (float)info[0];
    + n% z4 ^4 B+ f% V, k: \temp = (t/101)*180;
    ) I* g$ d) j+ ~0 j/ k( Spos[0][0] = (10-num+i)*50+x+650;
    4 u8 i; [/ U. X$ Npos[0][1] = y+210-(int)temp;
    % V. a. r/ N: |4 j) Qt = (float)info[1];
    ' m- p; f2 M. X: o: R2 ktemp = (t/101)*180;
    2 g: s% o) v* V) s" Wpos[1][0] = (10-num+i)*50+x+650;
    6 q* w: L. D7 K9 `6 i. a3 T& ?pos[1][1] = y+420-(int)temp;& d# N- T& N' g( U
    t = (float)info[2];: ^8 R3 a7 |2 k6 W  U
    temp = (float)(t/101)*180;
    4 e/ z+ x1 S. b9 T; V4 F8 g: Zpos[2][0] = (10-num+i)*50+x+650;
    ( p5 Z" v' z+ l, y$ Npos[2][1] = y+630-(int)temp;
    / c, w7 \+ w5 v}! A% O, ~! ~% N; g& h- W- ]% g1 A; T& ?4 ~
    clearrectangle(x,y,x+1200,y+650);
    . `$ Z+ t0 B' T6 n4 isettextstyle(40, 20, _T("楷体"));# q" ~3 U% g8 [+ V& w4 ~" ?! G0 ?
    outtextxy(x+50,y+50,"HR");( X7 F; ]* n& c, s& W
    outtextxy(x+280,y+20,"CPU");       //画柱状图6 P0 c/ @5 n9 _
    outtextxy(x+285,y+20+200,"IO");
    6 q# F7 i6 U& T7 a% t: [  ^outtextxy(x+250,y+20+400,"change");) ]. _9 f: r: ^: `' p: `
    rectangle(x+270,y+65,x+330,y+215);- j$ d% m' t+ d* Z6 X
    rectangle(x+270,y+265,x+330,y+415);
    6 S6 j. D; }5 ?  ^2 mrectangle(x+270,y+465,x+330,y+615);
    & Z& v. g3 L8 Houttextxy(x+290,y+620,"TT");/ r* O" O+ `0 `- p4 y
    t = (float)com;
      @  U0 M5 q! O6 o, ?4 R/ Mtemp=(t/101)*150;( Z/ T9 e" g2 H! Z8 u: B5 k3 N
    fillrectangle(x+270,y+215-(int)temp,x+330,y+215);/ o# i; a' _( w, u
    t = (float)wai;
    1 T1 @, T3 }, G% S) n( Rtemp=(t/101)*150;
    6 Y# c1 F2 f! x6 n& v0 qfillrectangle(x+270,y+415-(int)temp,x+330,y+415);
    9 G, ]8 A& g) [- B9 I) Tt = (float)cha;
    1 X4 I' o3 R2 a- i" B8 V6 C2 ftemp=(t/101)*150;
    5 y1 x& s+ M/ z+ H# i) }fillrectangle(x+270,y+615-(int)temp,x+330,y+615);
    / R1 \% G) F% f  bfor(i=0; i<3; i++)   //画坐标   high=90,length=250
    ; o: J, v! \1 S1 V# \{
    + K( t; E- g, k" pline(x+650,y+210+210*i,x+1150,y+210+210*i);% Q2 l2 t  ], C. K
    line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
    : t8 w9 S; W: v& g$ eline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);6 b& j1 a$ J4 X7 z' I

    0 Y* i$ |3 }# @/ f) w! Hline(x+650,y+210+210*i,x+650,y+20+210*i);' K) d1 d7 @- t; s( i6 A. B  E
    line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
      q8 b$ `. \# F( ^line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);1 X  b- J( R; i7 w9 l  W/ g4 i
    for(j=0;j<num-1;j++)
    0 a/ G" Y. \$ k- L% D! p{
    9 W# B+ f. ~: `/ i$ T/ F- fline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    - ~- H5 J+ b+ Q  ?7 sline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);* L0 O, p+ V* ?# J4 R) ^" c
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); / M6 c$ T  I  u
    }" ]9 M& A' A7 ^' n5 E" k# B" p
    }# E, m- i* \. H; n9 B. V1 @$ v
    }
    2 e' I1 Q/ y$ ?3 \$ |) n  D3 V0 P8 H8 e

    2 l" Q! ?2 h: k+ R: f: vreturn 0;  A; |( Z$ q: ?
    }, p2 O$ R6 X3 Y8 C1 O# E, P3 S
    int drawPerformance_TT(int x,int y,int memorry,int com,int wai,int cha)9 F; S  g' {/ h. g5 @* j
    {
    3 E6 i( z/ c; z% Dstatic int info[11][3],num=0;8 _4 Y$ Q$ {2 `
    int i=0,j=0,pos[10][3][2];
    8 h" e* d9 h: hfloat temp,t;
    9 f) Y/ f0 N# n$ u1 N: h  I& zinfo[num][0] = com;
    * B1 Y8 S+ c* H% yinfo[num][1] = wai;
    ) t( E9 a. P. K1 _5 Sinfo[num++][2] = cha;% t  {- r8 M; f
    if(num>10)  //存储10个点
    # I+ c' L+ l/ |{
    ; `. ?/ ~9 P; @0 Xfor(i=0 ;i<10;i++)
    2 M  i9 h- y- M! R{- ~+ x/ P2 e2 Q& y1 |2 K: ^9 }
    info[0] = info[i+1][0];2 |! v+ O2 I( {2 L; T5 t( L
    info[1] = info[i+1][1];
    , u' c8 V8 R$ n+ j. R( L5 @; Minfo[2] = info[i+1][2];
    ( d  n. z4 {, Z3 k$ j% O6 K}" V5 o% m( D1 [8 q5 G6 o
    num--;& v( F8 p; z: b% B9 F* M/ |- v
    }: c( ~1 L- f$ z4 f% d+ e) ?( n- ]8 N
    if(FLAG_show==0)3 Y$ q) J* f+ ?& x0 F! V
    return 0;* S; v& D: |) t' n: q" L' i5 i
    for(i=0; i<num; i++)
    2 I. n! G7 O/ {3 D9 U{/ z& S+ X5 r0 K0 p1 D
    t = (float)info[0];+ I9 l8 P) i0 I& s. ^' p  P
    temp = (t/101)*90;7 `: y# T. F# M+ M0 Q
    pos[0][0] = (10-num+i)*25+x+100;; P- Y$ u  B8 y7 X
    pos[0][1] = y+110-(int)temp;* `$ a0 n6 f  J% W) }3 s
    t = (float)info[1];$ E4 C8 }( g4 ~% t# b# H
    temp = (t/101)*90;6 L' v9 J0 U* Z$ y/ a" j
    pos[1][0] = (10-num+i)*25+x+100;/ c" ?/ F6 j4 C/ t& w' s
    pos[1][1] = y+210-(int)temp;
    0 m0 K6 g  o  St = (float)info[2];5 B& a2 E, o/ r; r( t% K: Q
    temp = (float)(t/101)*90;
    3 ~/ x7 ?0 |* T+ g- n1 b$ hpos[2][0] = (10-num+i)*25+x+100;# t( c" W; V4 O2 D1 I# M5 H+ A
    pos[2][1] = y+310-(int)temp;
    " l1 y- ~+ k. L* T! k3 W6 ?! s}2 \2 H( j- H8 b' i/ G, V) ]6 a
    if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)8 x' a+ I, b; \9 w
    {8 r5 z* K  B# d; e: O6 `/ S
    clearrectangle(x,y,x+400,y+315);
    : U" ~) K( S! E' |6 }" tsettextstyle(20, 10, _T("楷体"));
    1 q( G  c3 W: m# q( hrectangle(x,y,x+400,y+325);: a6 I9 R/ C% _/ I( E- ]7 F8 d
    outtextxy(x+40,y+10,"CPU");       //画柱状图
    ' Q0 ~/ |, k# R- {: ^( \5 ?outtextxy(x+45,y+10+100,"IO");
    4 @5 i, \0 l! ~! I. routtextxy(x+40-15,y+10+200,"change");5 Q! w: y& `$ F, X
    rectangle(x+35,y+30,x+75,y+110);% \/ Z( [) a+ _6 v
    rectangle(x+35,y+130,x+75,y+210);) T2 Z; {$ f5 ^/ M9 r5 D' L& p
    rectangle(x+35,y+230,x+75,y+310);! J3 P: A& I# O) U6 w7 |4 s
    outtextxy(x+180,y+310,"TT");
    ' s0 P$ M5 o, K! i; ~t = (float)com;: D5 p* F! ^: B
    temp=(t/101)*80;0 w% |4 m0 C/ Y# C6 S. l
    fillrectangle(x+35,y+110-(int)temp,x+75,y+110);. c- C; J* ?' c+ N% ~: i
    t = (float)wai;+ e% T( C" W- O( K% Y
    temp=(t/101)*80;" I, J/ _, u' {4 \0 a1 C# j  ?
    fillrectangle(x+35,y+210-(int)temp,x+75,y+210);8 Z# G# ~8 B! i; k3 \7 x
    t = (float)cha;% s, K- l# l/ K( R, W6 @
    temp=(t/101)*80;
    & e# {( B) P5 rfillrectangle(x+35,y+310-(int)temp,x+75,y+310);
    / A! C' X  [" r$ zfor(i=0; i<3; i++)   //画坐标   high=90,length=2500 ]& s- ^5 d$ Q& \7 R
    {
    6 v% W9 ~; {- j6 Eline(x+100,y+110+100*i,x+350,y+110+100*i);9 U! _7 e/ V. o- a5 v) V
    line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);. n  w" ^7 g+ l
    line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);: f+ Y. X1 B, G7 M5 b
    ) C4 L8 s& R# f; h0 H
    line(x+100,y+110+100*i,x+100,y+20+100*i);
    ; V! `6 X5 G# l% q9 h. ]line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);% o5 |( ^% t) d1 v
    line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);
    5 s; v4 |3 \" D$ @# x( `for(j=0;j<num-1;j++)! ~# f) Y9 c6 a& I1 F' n; q
    {
    * p0 T& \9 b9 w" gline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);! U0 T. `% ^# H
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);- h- }* U5 B$ f1 H  ]5 r1 e
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    6 r7 J. Z! p$ V. d) d}, s0 V: S7 B  T
    }
    # e& e0 R4 b2 `) ]}; P. u/ Y5 U  f9 O; l% r
    else if(FLAG_TT==1)
    ; a* @* l9 R/ N" }. S9 v{2 X9 j) s; \. d* V. C$ f
    x=0,y=0;
    ; y6 L$ g" f6 n7 j2 }for(i=0; i<num; i++)+ I7 @0 |' u- V* u( C# }0 u
    {0 ?0 `/ E2 p' n7 ]1 J2 Z
    t = (float)info[0];  @6 a5 ]( c5 C) N$ h
    temp = (t/101)*180;) {% B- O, N( U8 O4 O; {  E
    pos[0][0] = (10-num+i)*50+x+650;4 s: a7 B7 o$ \! D4 b. T; ?
    pos[0][1] = y+210-(int)temp;
    ; f. E5 U; S6 z5 ~* T/ zt = (float)info[1];" D( R* e' _( [6 ~7 o0 K
    temp = (t/101)*180;' s- e  e, v8 l" o, L" f6 X
    pos[1][0] = (10-num+i)*50+x+650;1 m+ D! ?1 E2 Y  Y+ e2 U
    pos[1][1] = y+420-(int)temp;
    : L& p2 [! S8 E, n* Bt = (float)info[2];2 |9 i3 B/ c0 k( {  ^" \4 h. I
    temp = (float)(t/101)*180;3 k# R( I* d2 Q2 ?7 |
    pos[2][0] = (10-num+i)*50+x+650;
    ( ~/ Z5 [2 h2 K  R4 w3 `# }pos[2][1] = y+630-(int)temp;- R) W% g& `) S: b2 F
    }
    ) [( \& d3 u+ pclearrectangle(x,y,x+1200,y+650);3 K6 @" R( b# i$ J% K
    settextstyle(40, 20, _T("楷体"));& P9 Q. m3 G  y
    outtextxy(x+50,y+50,"TT");
    9 B5 w2 E/ q6 W0 q: m' {outtextxy(x+280,y+20,"CPU");       //画柱状图+ ~; x" O% K- L) N/ D0 M' l
    outtextxy(x+285,y+20+200,"IO");
    - ~" J# W$ f! Z9 [8 Gouttextxy(x+250,y+20+400,"change");
    ! O4 h; ?# W# a8 c8 rrectangle(x+270,y+65,x+330,y+215);
    , h' X8 A, h* t1 ?$ o  H5 H4 w& Hrectangle(x+270,y+265,x+330,y+415);  ~8 ]$ r# Z- ]+ t
    rectangle(x+270,y+465,x+330,y+615);
    7 K6 R. L  \/ k* ]outtextxy(x+290,y+620,"TT");' _7 q4 E9 L  N) U" }: Y- t9 i
    t = (float)com;7 n$ C6 Z! E8 B7 z" R) G2 `  ]" d5 }, k
    temp=(t/101)*150;# @. @5 ?* m* y) X: K, ~
    fillrectangle(x+270,y+215-(int)temp,x+330,y+215);8 A  n* n& ^8 ]. N! e) ~$ ?" W- L2 U
    t = (float)wai;' I) |5 m  `) ]( O4 b: Q' _" S
    temp=(t/101)*150;7 v1 h% H5 q+ C, R
    fillrectangle(x+270,y+415-(int)temp,x+330,y+415);  D. w) U0 f2 I: l% I1 p
    t = (float)cha;" u4 C9 t* K3 D- H* C
    temp=(t/101)*150;
    & ~- s, j- P8 Q6 _5 Ifillrectangle(x+270,y+615-(int)temp,x+330,y+615);
      M! I) M4 l* Tfor(i=0; i<3; i++)   //画坐标   high=90,length=2507 L. }3 d$ \* X! c- z0 Y9 e, O
    {
    ! ^4 L7 q( n8 e$ W/ ]! x& Iline(x+650,y+210+210*i,x+1150,y+210+210*i);
    % m$ W; P; S1 [line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);: Y& D" M; n. P$ S$ Y3 N/ |7 g5 Q
    line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);- F$ u3 d* c% @0 D6 H
    0 u+ s6 w) O5 M! @4 q4 d: n
    line(x+650,y+210+210*i,x+650,y+20+210*i);+ J# S# c( R, o$ N
    line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);  U8 C0 s. j8 e8 B
    line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
    : ~/ z- @: C1 C* F: b0 Hfor(j=0;j<num-1;j++)
    1 _# D9 G$ T. d" _9 l/ S{
    + B: ?2 l/ F- }line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    . W1 Y4 F- R: z+ }line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);' w7 [6 Z0 T  ~# t6 H2 i3 ?
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 3 i- ]5 t- A) `" Q& u
    }
    + b, }4 ]+ c0 H5 \7 r* O}
    0 e8 s+ z1 i- q7 Z. P, x6 k}3 M# K2 `- j  m+ P  h6 J

      t5 D, ]% r- I+ c! e
      c$ D3 L7 D6 V& W) _* i) P4 `return 0;
    ! {/ J6 i/ X( v& T}
    ' \/ E  I8 Y* b6 c# u6 X% pint drawPerformance_PF(int x,int y,int memorry,int com,int wai,int cha)
    + U6 M3 E7 r: x) j+ ^8 L/ U{2 O* ~% P- }) F: z. i
    static int info[11][3],num=0;' w$ O( k, A9 y6 _( G$ c" H
    int i=0,j=0,pos[10][3][2];
    0 ?# y, {8 Y# ?5 ]" V& |float temp,t;/ G6 v9 C' E+ G$ z
    info[num][0] = com;0 \" F* Z3 ^: c1 r" {. O) j
    info[num][1] = wai;
    1 \8 g; U$ }4 p! i$ B2 z. {: O& g5 einfo[num++][2] = cha;9 {7 S- p, z' E( x
    if(num>10)  //存储10个点
    ; E) j2 s  F9 R' E2 {; D& X- y{
    - G/ I1 T, v9 ?" V2 V" Sfor(i=0 ;i<10;i++)
    : B# `' m  h' r2 f3 u" q{
    $ [7 }) [% P1 d& Qinfo[0] = info[i+1][0];0 i- ?" e" x' U( I) B
    info[1] = info[i+1][1];7 N9 [# z5 ~2 i- z9 W
    info[2] = info[i+1][2];
    % `" }1 p& q, |% z}
    3 }# K. K$ t* |. y* ?, ~/ Cnum--;$ z. F" E) e5 I5 i
    }! }" ~# t! @. m! y* {7 f
    if(FLAG_show==0)! t# {, T' y4 c" K
    return 0;
    # G$ G4 h9 I( Cfor(i=0; i<num; i++)
    - u. [; x" d2 s3 d1 x{( `% i. }2 U2 \0 e6 W, U# B
    t = (float)info[0];
    1 a) R* r7 [  P1 Z" Y* ]temp = (t/101)*90;
    5 f1 e1 B; k' Q. f; M& v# ppos[0][0] = (10-num+i)*25+x+100;  m+ [$ K0 u$ l  q- s: \# g3 o
    pos[0][1] = y+110-(int)temp;
    ! z9 K  ~# E5 M! M' et = (float)info[1];
    $ t( X7 W- P* ftemp = (t/101)*90;
    6 ^" ^( ^+ p, Bpos[1][0] = (10-num+i)*25+x+100;9 j, w/ B( \& b5 Z4 q" \& j' `
    pos[1][1] = y+210-(int)temp;
    , q6 u( z* ~, |& s/ at = (float)info[2];
    0 ~2 [4 H) X; ~+ rtemp = (float)(t/101)*90;
    . ?5 D$ ?; m. u0 E: x6 Wpos[2][0] = (10-num+i)*25+x+100;* F6 H! M! _1 M6 \. m
    pos[2][1] = y+310-(int)temp;5 Y3 T2 q9 L0 C+ I  L$ e" S1 B
    }$ Y$ H' ?$ w& `7 h, E+ v+ `
    if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
    - e3 [1 u! b8 K) X{
    2 p* P( U5 g7 Y3 }: ^clearrectangle(x,y,x+400,y+315);0 C0 L% J" L' a6 z- u5 n0 Y
    settextstyle(20, 10, _T("楷体"));' t$ |8 N$ K' b* N/ ^3 r
    rectangle(x,y,x+400,y+325);
    3 _9 _/ E  m: j  K/ O, {# U( houttextxy(x+40,y+10,"CPU");       //画柱状图' r+ q+ H6 O( c, O
    outtextxy(x+45,y+10+100,"IO");
    # q% j* `% x: R, W( Wouttextxy(x+40-15,y+10+200,"change");. U: S- J1 f5 t) x5 @, K( x- q0 H
    rectangle(x+35,y+30,x+75,y+110);% F* l' A" {* q  ~% t
    rectangle(x+35,y+130,x+75,y+210);
    " V" N- k1 q' Frectangle(x+35,y+230,x+75,y+310);
    1 [/ u5 j! b8 w  h  souttextxy(x+180,y+310,"PF");6 J. l, b$ s" s2 Z, |
    t = (float)com;! D9 S/ W: m- G
    temp=(t/101)*80;$ T0 s( A# {7 J7 L; U9 R5 p
    fillrectangle(x+35,y+110-(int)temp,x+75,y+110);
    7 ^8 g4 M8 G: V, bt = (float)wai;
    5 z5 h4 p$ S& o9 |" }temp=(t/101)*80;" g. i+ [$ ^! n
    fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
    # O1 h  ]5 {6 It = (float)cha;
    ( ?8 h; J3 o8 h: b; ~temp=(t/101)*80;
    ! h) i1 M7 P* S; n" Y  gfillrectangle(x+35,y+310-(int)temp,x+75,y+310);
    4 X  b7 ~! b- y2 {/ P& wfor(i=0; i<3; i++)   //画坐标   high=90,length=250
    5 u" x+ m! I7 U; M8 n6 l{
    7 H$ ^" t9 ~2 q3 i+ M2 @: O& J$ Bline(x+100,y+110+100*i,x+350,y+110+100*i);
    7 h2 N9 n# X5 m8 M8 ^line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
    5 B0 M7 I' ~  P8 x0 mline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);% Q6 g  l# L3 b- M) [

    3 d) d- A' a0 C' @. @; K4 D% hline(x+100,y+110+100*i,x+100,y+20+100*i);. o& A0 `4 Y6 X
    line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);1 |) h! S; K, m) A! ]
    line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);, Q8 j( i+ i( j, O1 ]
    for(j=0;j<num-1;j++)8 ?8 z$ @% R& b
    {
    5 b" m; t: p  o8 Gline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);2 t* c9 x* m* S
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    ( L& E- [2 F/ [! P- y$ r( [line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    0 s/ \" m/ P9 M' J: V& `}4 g" G3 Z+ s1 O4 r- C: ~: z
    }# z8 t3 Y* V' I; A/ u: w
    }4 ]8 L" G% K1 l7 _$ W' t# p0 Z
    else if(FLAG_PF==1)% t9 ~+ `8 V* W, @0 t- g
    {8 z: k, O9 d; X' w6 \9 t
    x=0,y=0;
    ) n9 o6 h8 p% {* E9 k# |for(i=0; i<num; i++)- Q' W! J6 e( Y  _7 k+ W/ B
    {3 V& B( Y, q8 Z& W" e) f% k% t, G2 B9 j
    t = (float)info[0];. Q+ R+ D7 \& w5 H& L" y3 Y0 x/ g' I
    temp = (t/101)*180;5 V$ @: @; N; z2 T( H
    pos[0][0] = (10-num+i)*50+x+650;
    9 e* }; P3 i' ?7 {/ w+ Z% F+ bpos[0][1] = y+210-(int)temp;8 Y2 H$ z" K. @* g& V! c
    t = (float)info[1];
    1 ~5 |* p. Z3 @1 _+ M. J+ ~temp = (t/101)*180;3 B- G$ f& k# _/ k0 V; y. Z
    pos[1][0] = (10-num+i)*50+x+650;( H8 F2 P) a- p, j; N7 K
    pos[1][1] = y+420-(int)temp;( Z( y' C& u& H* m0 ~: O' P5 e
    t = (float)info[2];
    + G/ @% E# v0 q7 ~0 _; n2 ctemp = (float)(t/101)*180;
    ( e8 p1 Y' u; a0 c/ I) H) R; s  z3 |pos[2][0] = (10-num+i)*50+x+650;
    % m) u/ ^! d) V+ Spos[2][1] = y+630-(int)temp;
    ' ^6 y1 H% U( w1 ]}
    1 b2 i  q" e6 rclearrectangle(x,y,x+1200,y+650);" N' u; @8 f. |- {+ a- \1 ^4 d
    settextstyle(40, 20, _T("楷体"));. |  J- ~1 c( o5 G3 U
    outtextxy(x+50,y+50,"PF");' s$ U1 T6 Y/ _- Y; q
    outtextxy(x+280,y+20,"CPU");       //画柱状图
    + X1 A4 Q$ A( X1 Z5 B- O% Touttextxy(x+285,y+20+200,"IO");
    ) X! }' R( u; Routtextxy(x+250,y+20+400,"change");$ o! C) \( U( V) E( W5 |
    rectangle(x+270,y+65,x+330,y+215);
    3 N0 o0 f: X. p$ `+ irectangle(x+270,y+265,x+330,y+415);
    8 _- F, x" D# d2 M8 Prectangle(x+270,y+465,x+330,y+615);
    7 q% ^. e# _9 I' V3 souttextxy(x+290,y+620,"TT");: }! A& }  m9 j! e/ f& W* x2 y  D
    t = (float)com;& s* j! R2 a' J/ l. F5 Q. O7 u% L8 \
    temp=(t/101)*150;
    $ S* R# o, i" R9 jfillrectangle(x+270,y+215-(int)temp,x+330,y+215);
    2 M3 t6 P; s+ R) @5 U; @9 j" mt = (float)wai;' n- g% m# Z6 U( R& q
    temp=(t/101)*150;/ s5 f4 E/ m* f* N1 P' e3 L
    fillrectangle(x+270,y+415-(int)temp,x+330,y+415);7 z7 H5 `- @' b3 j
    t = (float)cha;8 G% O( |' X% ~
    temp=(t/101)*150;
    9 G# Z8 z; L% f+ cfillrectangle(x+270,y+615-(int)temp,x+330,y+615);  [' t. }2 v9 s! Y! I
    for(i=0; i<3; i++)   //画坐标   high=90,length=2503 O( K) j) G3 u6 Z' t+ Q' @6 m
    {" t& S" Z) m' `* M
    line(x+650,y+210+210*i,x+1150,y+210+210*i);" ]; j8 C" L; W2 a
    line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
    : H9 y" l7 i4 Mline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);( m+ ?* X6 D- W$ g1 t' W2 n5 T
    ' a$ K: d  ~7 a! A8 p) k
    line(x+650,y+210+210*i,x+650,y+20+210*i);/ j! M6 p. H% `- \5 P* K4 ^
    line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);+ b- x3 f/ U2 j6 w5 j* j5 g
    line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);4 f( Q8 l$ o( r5 B
    for(j=0;j<num-1;j++)
    ( c8 k' A3 M2 L; |) C# Y{
    5 ~, E9 c* K9 M3 j! D# d* P; |line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);: y1 N2 V' c( I; I. }. V
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    8 t2 K% u" T! \8 V/ i& A$ k) lline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 7 H1 e- H7 F) M$ O9 S' F
    }
    # t& s. k* O' P0 J: I* W}
    , Z6 E. i2 \+ V0 ^5 a+ _}
      J7 \7 H, Y/ `- k  Ireturn 0;
    ( c: N4 B1 p5 U, @. a}
    % P3 N" |' p0 H/ f1 }  P8 ~int drawPerformance_SJF(int x,int y,int memorry,int com,int wai,int cha)
    6 b! Z  _+ ~* u. D/ j{
    - M! r7 U) |, V8 Z( l) W$ Gstatic int info[11][3],num=0;
    & N$ w- _5 `3 D# e& ~6 _" rint i=0,j=0,pos[10][3][2];+ z5 j3 K$ i' e/ S5 O* j
    float temp,t;
    : Q8 z/ O+ w( |. vinfo[num][0] = com;$ O4 g& f4 V" z- E8 r3 f
    info[num][1] = wai;# b1 Q4 r1 s% W0 o
    info[num++][2] = cha;
    9 i( C" O( ]5 q4 f" P5 yif(num>10)  //存储10个点
      j3 j. C' ]9 |: G9 E2 `/ g{
    7 ~: l) }; n$ }, R5 ofor(i=0 ;i<10;i++)
      y2 E, H! A, y0 O, Y! Z{0 [: _3 m! b3 O: e& ~/ L5 q
    info[0] = info[i+1][0];5 n+ x8 c. g3 Z. D
    info[1] = info[i+1][1];
    5 o1 y5 Q% w, W9 \0 N  h8 [6 kinfo[2] = info[i+1][2];' ]4 T2 z, D- G2 P2 `: m* H
    }
    0 b+ F3 X  a4 C4 E/ y6 K' W/ inum--;
    5 T. c- v' w( @2 \2 O* Z/ z}
    8 [! q* c2 y( Z% }: g* P2 P( Jif(FLAG_show==0)( _- f9 L7 o$ b. ~. u! Y; R9 N
    return 0;
    9 N/ Y& s9 ?' c. E" }for(i=0; i<num; i++): C9 n/ l1 r& r
    {$ y- ^6 x- S. `  W' Y
    t = (float)info[0];" I5 A8 t  H$ m' l
    temp = (t/101)*90;
    3 |% ?4 \% ?! j. O2 ipos[0][0] = (10-num+i)*25+x+100;0 @2 ?5 a) z+ z1 ]6 U' o. e
    pos[0][1] = y+110-(int)temp;
    6 F! K8 R# H3 a" _0 z  ct = (float)info[1];
    4 l( C# r7 f9 D- J* ~temp = (t/101)*90;
    ( S" V# l1 n) V; F! e/ ?! c* bpos[1][0] = (10-num+i)*25+x+100;: u- d/ q# p; t$ Z2 I+ Z1 W
    pos[1][1] = y+210-(int)temp;  J# k+ t+ @# C$ [  l
    t = (float)info[2];
    / d3 l9 c+ _* C- M- ~5 dtemp = (float)(t/101)*90;
    2 _1 Y( N/ t! l1 j5 ypos[2][0] = (10-num+i)*25+x+100;
    6 f. C5 m/ h+ y4 \' U: lpos[2][1] = y+310-(int)temp;" D" u, j" B1 D4 e+ ~, d
    }
    $ ~4 G/ y& V& J' v1 ?  rif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
    ( \, k& E/ K' E; _{ 1 }0 X$ P2 u. u$ H+ v" f( r7 [
    clearrectangle(x,y,x+400,y+315);  u5 U) s* U( T0 F
    settextstyle(20, 10, _T("楷体"));$ R4 \/ E! C0 G- Z$ K9 S
    rectangle(x,y,x+400,y+325);
    ( a9 X" {  X& [2 y2 routtextxy(x+40,y+10,"CPU");       //画柱状图
    " E9 j. L- v8 w& kouttextxy(x+45,y+10+100,"IO");* d. t/ m$ h0 S/ t  R) f4 n
    outtextxy(x+40-15,y+10+200,"change");
    ( l. r3 \* s" S2 ?% j: Z( Trectangle(x+35,y+30,x+75,y+110);
    2 h9 P. {. |& K# k2 Arectangle(x+35,y+130,x+75,y+210);
    $ u$ y& |' k- r" I  }3 hrectangle(x+35,y+230,x+75,y+310);/ S2 K1 ^  W4 U. w% Y) H# L
    outtextxy(x+180,y+310,"SJF");; x3 k; u2 ?$ I, W
    t = (float)com;
    ( j, O5 r. |* |% E: v8 i  ctemp=(t/101)*80;
    : M! J5 K# S. x/ S. `8 `* ofillrectangle(x+35,y+110-(int)temp,x+75,y+110);
    + h; z9 z( m! h+ |8 Q" t% jt = (float)wai;
    ; R, s7 `+ e' B) jtemp=(t/101)*80;
    2 @1 e- p+ l: Y- M2 q, A; v3 ffillrectangle(x+35,y+210-(int)temp,x+75,y+210);
    1 d8 Z  l1 S( M, y! m! f0 ]t = (float)cha;
    0 l% C/ i$ Y/ B  y- l" U+ ttemp=(t/101)*80;2 T7 s: l% H; V, H) y- X
    fillrectangle(x+35,y+310-(int)temp,x+75,y+310);3 B" k, z) S# {$ {# s
    for(i=0; i<3; i++)   //画坐标   high=90,length=250" g: R$ \- W+ l% T# N$ G" w& p
    {5 W3 S# e0 I2 z; ^! R
    line(x+100,y+110+100*i,x+350,y+110+100*i);
    , v1 F7 K  R5 H! E' l" Iline(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
    ; B# h0 s% T4 H) ^2 B2 R' uline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);& B4 R6 _4 J- S2 T8 d. ~  R( V5 _2 G
    4 D( P, U6 E, N8 r
    line(x+100,y+110+100*i,x+100,y+20+100*i);6 y1 k# j& U1 ^) V$ ?3 P
    line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);8 c2 l1 {* T4 {8 p8 s
    line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);
    6 f6 {5 X- P7 u+ ?# V$ ?; E) F' Mfor(j=0;j<num-1;j++)
    ! E$ T! N5 K6 H& X4 E# W% R0 d{
    2 a  P2 B+ T4 K& T# ^- ?) _line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    ( E3 X& u, ?) pline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);/ v' h' Q& ?+ R. j
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); , }' ]$ ^8 q0 B  ?, m
    }+ e% c' b; {8 T. T# A& \+ o
    }
    , B7 x/ ^2 G! M' G" b}2 r4 q5 i) @( K; N, T  k
    else if(FLAG_SJF==1). l9 _9 t) @+ f% P
    {9 _$ @, G. z% l/ S' x8 d& f! y3 \
    x=0,y=0;
    7 A- t$ _9 m: f+ ]# V$ rfor(i=0; i<num; i++)  `5 G. Z; F1 F6 D0 v( X9 B
    {- h5 x0 w" m' A# e7 y
    t = (float)info[0];
    # n# k2 ]0 ], r% u9 @temp = (t/101)*180;! X( c  K$ Z! B0 {  x, K# g  l
    pos[0][0] = (10-num+i)*50+x+650;
    " S$ R: c- z4 K- ?  G4 q0 ~pos[0][1] = y+210-(int)temp;- r& N# `5 n8 u0 N+ u
    t = (float)info[1];6 u* @  ]5 ^/ m
    temp = (t/101)*180;
    7 T# `0 y/ N8 gpos[1][0] = (10-num+i)*50+x+650;& n3 Q0 l/ l- C8 W/ V
    pos[1][1] = y+420-(int)temp;) v2 X  n. ^8 H4 B2 @) c5 y
    t = (float)info[2];: N! @& ?4 o1 s) K
    temp = (float)(t/101)*180;
    5 y; m4 u$ d5 M' f. wpos[2][0] = (10-num+i)*50+x+650;
    2 A$ m  r5 F" h9 s5 bpos[2][1] = y+630-(int)temp;
    ; T' x, t% v( ~" }/ Y3 F}
    # I; m# U) G6 Z4 l5 N2 Eclearrectangle(x,y,x+1200,y+650);
    " h# g1 K3 P; R% F/ H, Msettextstyle(40, 20, _T("楷体"));* f1 q5 o- t7 x( K0 R3 u
    outtextxy(x+50,y+50,"SJF");7 p5 p% S1 d  L1 |
    outtextxy(x+280,y+20,"CPU");       //画柱状图8 m  H$ q  f0 k5 [0 I* U
    outtextxy(x+285,y+20+200,"IO");
    ( O% W' t  G: ?+ D4 b) Bouttextxy(x+250,y+20+400,"change");6 \9 f. }# m: Z( d; Z
    rectangle(x+270,y+65,x+330,y+215);  Y% T, B3 v1 Q4 |5 P/ f8 Q
    rectangle(x+270,y+265,x+330,y+415);, R& {2 z& e5 X' {" d
    rectangle(x+270,y+465,x+330,y+615);
    7 r) |" C# O2 e, wouttextxy(x+290,y+620,"TT");
    " W3 |: |' ^+ v8 @- e  U8 Kt = (float)com;% Y  f! v! ^" a2 t
    temp=(t/101)*150;
    1 |1 w) z+ {6 O4 zfillrectangle(x+270,y+215-(int)temp,x+330,y+215);
    % k" R. Y. ]' T( c5 Nt = (float)wai;
    ( @! D3 u/ n' N$ J- `temp=(t/101)*150;+ d6 c, d: `; x0 n6 E( `7 k+ I
    fillrectangle(x+270,y+415-(int)temp,x+330,y+415);# }) a" I; A) m' e  H) z  T
    t = (float)cha;) F7 l7 e4 o4 Q" T! [: w
    temp=(t/101)*150;
    ; E5 k7 U( V/ ?/ t1 N2 kfillrectangle(x+270,y+615-(int)temp,x+330,y+615);
    $ [: G7 Z3 r1 r9 P2 N3 ^% Mfor(i=0; i<3; i++)   //画坐标   high=90,length=250
    - P1 I# B6 |5 A! w1 `{
    - Q$ t/ ~) B! m0 a, A+ ~line(x+650,y+210+210*i,x+1150,y+210+210*i);: d& E+ I" L6 x
    line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
    ( V! H/ d. o; H( E1 W- E) f) tline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
    1 B4 r9 U" X1 ~
      |7 U2 N' W2 E% x: i! vline(x+650,y+210+210*i,x+650,y+20+210*i);# V: K; ]* B0 k# y; n7 e: _- q9 F+ o
    line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
    ' D& P3 K9 {/ T/ h1 dline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
    / l; K2 {5 G3 nfor(j=0;j<num-1;j++)
    - J- \2 ^# v) ~% I8 D: g. o{4 b& \6 n0 @4 b" g
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);. ]' J3 O0 }; M! p& S" [: l5 N
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    4 u& S6 ^( K) ?4 Q# X) q6 W+ Mline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    ! }# Q$ X: L$ G: Y# L  |8 x}
    6 o# N2 m( }! W! c' o}( _: s* ^# n% L# Q
    }1 @. Q) l1 @. ?5 z: i4 M! H! S: x
    return 0;
    4 [5 E1 \/ e+ _  O7 c8 a1 y; v}5 Q: c8 M: P% A/ A" z
    int High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
    4 V; S3 ~! |; X2 T+ |{! f% D9 y2 y1 A9 {7 e
    static int compute=0,waitio=0,change=0;
    + F0 b9 F( @$ t- [static int computeLast=0,waitioLast=0,changeLast=0;
    ( |$ x" e6 ^. s* Jint i=0;
    % j) l7 k; ~7 c) {6 w: n. ?if(draw==1)
    & b* e& ?1 r* C9 H4 h6 ~{) v* Q& _3 h1 X9 s* Y% p  P8 W% F
    //printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);2 p6 s+ l( D9 i, L) u: f
    drawPerformance_HR(400,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);2 I* J( L  A. O2 Q, P. C
    computeLast=compute;% c% ]5 l6 j% ~
    waitioLast=waitio;. a$ N  U. n% j& ^9 i
    changeLast=change;
    % j2 i6 x5 N( m9 h9 G. c}$ V1 d( g% X7 ]
    if((* memory).p[0].flag==ready). C, y1 a5 |' l) K4 ~
    (* memory).p[0].flag=computing;
    1 B: U- l0 t& ?9 Fif((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)
    ' u7 g( p- Z. |7 z1 O{2 U' ~# Q" h  M& _  Z
    i=(*memory).p[0].computeNum;
    * N, @3 R' ^7 Gif(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed) N5 y6 x" u: P% z/ Q7 W: a
    {2 K1 {+ t2 r# z5 _/ O/ `9 s
    (*memory).p[0].flag=IO_waiting;+ {- e/ |9 W9 t0 z$ j' }- p
    (*memory).p[0].computeNum--;
    ! O, R8 e1 b, t- B2 q: Gchange += exchange_IO_Compute;
    6 [" _$ ]0 ~: }, e7 Icompute++;
    : D# I- K1 M: f}9 g* Y# ?, |7 ^" @
    else; e9 G; u+ p8 Y
    {- ]" J- t& U/ |' |
    compute++;1 ^! r% x* i7 T+ S6 @7 T! Q
    }
    8 h, T2 _0 |' A7 v3 K}+ a4 F' z* `0 ~# P9 ^
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
    . E- W6 x8 f3 o0 U2 j{  i8 v3 S' ~# z7 Z

    5 H( P, \2 i7 A! r- mi=(*memory).p[0].ioNum;
    4 _. c6 @. E! _0 H# Eif(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed6 V8 Z2 h; d4 r; z
    {% p; D5 F  d% D8 Y  `/ \
    (*memory).p[0].flag=computing;
    % a7 [& X$ C  c; z6 g# x3 @(*memory).p[0].ioNum--;
    & x$ B, q0 @' J* B, c8 V% c7 c2 Kchange += exchange_IO_Compute;
    , U9 E+ A7 k  Q0 i" Ywaitio++;
    " s' c. L- b' X7 @}3 h. p5 q! _6 I# m
    else
    * O( n  z# o0 a4 y1 H+ z{
    $ D3 ]3 O; l$ U- C+ F2 Kwaitio++;+ @& i' j4 ^2 E5 m7 \
    }% Y( z3 G! B% Q+ b5 b! U' I' t
    }
    6 E9 _" ?" b$ k4 [5 Telse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing). b; T  f7 j  S7 o
    {
    , w0 }$ e' ^; E5 O4 z/ y(* memory).p[0].flag=IO_waiting;( \& t* o: O' T/ R+ t
    change += exchange_IO_Compute;
    2 O3 @- L+ A( m8 H}# P* N0 Z5 q* `4 A
    else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)
    - S% m  i# c8 N& N{
    % O3 h5 [( e3 z' R(* memory).p[0].flag=computing;# a% z7 @# q# X* a/ @8 A
    change += exchange_IO_Compute;4 K+ m3 H  E$ P5 Q/ N$ a; Y
    }
    ( L+ T9 k: l  V( p1 l; M0 lif((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0)  //一个作业已经完成
    5 D% B! v& A1 w# `{
    , S% t9 `' w5 O(*save) = (PCI*)malloc(sizeof(PCI));/ F; P  B5 @; ?0 I
    (*save)->next = NULL;
    5 `; K. ~. {# {+ D. m9 |  q(*save)->processID = (*memory).p[0].processID;3 l. o8 h/ Z- p/ }
    (*save)->comeingTime = (*memory).p[0].produceTime;3 ?6 h, a" p  g& W8 X1 m3 x. B8 p6 d- ~
    (*save)->askMemory = (*memory).p[0].askMemory;/ D* f$ a; j/ q4 ?& J5 _9 T- L
    (*save)->compute = compute;
    3 T; ]$ A2 \8 ^7 p(*save)->waitio = waitio;
    + j9 D* b5 E# u$ |. j7 M(*save)->exchange = change;
      E% E9 R0 k7 @  q(*save)->completedTime = systemClock;
    6 R' z. {5 Z7 F; _3 z8 K(*save)->runningTime = (*memory).p[0].runningTime;
    ! R/ ?& E9 ~. Y; ?*spareMemory = MAX_MEMORY;         //*spareMemory + (*memory).p[0].askMemory;
    2 W2 F0 ?6 K2 U; F' m5 gcompute=waitio=change=0;
    / k1 [; G+ v- g" O! }8 B+ y( zcomputeLast=waitioLast=changeLast=0;+ ]' Q6 K9 A7 B8 C3 `& E0 \
    High_response_ratio_s_to_m(&(*storage),&(* memory),&(*spareMemory),1,1);
    $ e' R/ l; {. G0 R' V6 g/ \change += exchange_process;0 c  v4 L2 N, h5 @/ M4 F
    return task_completed;9 e3 }3 o9 d( B5 d. `
    }0 H0 j1 m% a# i/ }1 R
    else( P6 Z, p0 T1 X3 D
    return task_not_completed;
    6 L. ]5 G- e+ s1 J! i}5 E% H5 g/ j8 Z! [  C; F  Z
    int High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int dispatch)# x, C$ B/ C' Q% z% x0 p: t5 P2 ?
    {! k, V+ M; J/ G; k% H0 \, B6 ]; e. g
    static int waitTime[initProcessNum],i=0,j=0;9 _1 N: d; u4 k# E
    static double HR_ratio[initProcessNum];
    + g) g8 i- @0 y, s; j( s) l0 vif(flag==0)                    //初始化数组3 `0 J' f- H/ x, m3 _
    {7 H! ]; w1 }6 c7 d  R) X; C$ [
    for(i=0; i<initProcessNum; i++)/ b; j! l3 Q9 ]6 l. l4 b! X( k
    {
    4 J" Q- g# B  z6 swaitTime=0;4 h) ?0 `$ I- N" A
    HR_ratio=1;  _& f! s7 V/ i7 Q
    }! [' z1 c: O5 k: R6 M" w# l! S
    }
    - k9 \! K, v# \' Sfor(i=0; i<(*storage).proNum; i++)  //等待时间增加,重置响应比
    ; h1 P$ L4 O7 K$ P) N+ I{
    # t/ I. N- j  bwaitTime++;
    % N' h, X* Y9 f8 f7 s$ M* ZHR_ratio = (waitTime+(*storage).p.computeTime+(*storage).p.ioTime)/((*storage).p.computeTime+(*storage).p.ioTime);; B. p  F( p. C( M' d0 D
    if(HR_ratio > HR_ratio[j])
    5 a2 A% ~* ~/ I3 {4 ]j = i;
    3 K/ G( A9 e) x" p/ C}
    % k# W1 h% o; Oif(dispatch==1)                    //需要调度一个进程到内存中执行# e1 P% j8 `1 _% M. n$ U1 b4 V
    {. f! w) }) X+ H  }+ |7 _
    if((*storage).p[j].askMemory < *spareMemory)
    / |' Q  s- K1 R& C( `4 T2 @{
    8 \) w! `" L" B" C: U, x) @7 G(*memory).p[0].askMemory = (*storage).p[j].askMemory;4 [3 B1 ~, k/ d' c
    (*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
    ; _* l  a2 R  P' u(*memory).p[0].computeNum = (*storage).p[j].computeNum;
    * ~& k$ M  o1 r0 r: C) r; ^(*memory).p[0].ioNum = (*storage).p[j].ioNum;
    1 J/ V% @1 M7 Y7 f* q(*memory).p[0].processID = (*storage).p[j].processID;- A! R: s1 q( _0 g1 J8 ^
    (*memory).p[0].flag = (*storage).p[j].flag;
    , g5 Z  J: M& [(*memory).p[0].ioTime = (*storage).p[j].ioTime;4 p5 a* S' ?% s
    (*memory).p[0].computeTime = (*storage).p[j].computeTime;
    $ D  I7 V  A7 X(*memory).p[0].runningTime = systemClock;
    ) ?$ o- Q5 T4 F) C( v4 T(*memory).p[0].produceTime = (*storage).p[j].produceTime;
    ) u" R7 p/ v) [4 P4 Y# q# s& T1 Sfor(i=0; i<(*memory).p[0].ioNum; i++)2 S4 H& v5 C" Q# u$ \+ _6 S
    (*memory).p[0].ioClock = (*storage).p[j].ioClock;: }& M/ E1 k: F4 F
    for(i=0; i<(*memory).p[0].computeNum; i++)
    5 X7 E. N6 u$ v$ B1 y% W: _; X# \(*memory).p[0].computeClock = (*storage).p[j].computeClock;
    ( M8 R/ q! I; j( j) \/ ?' i(*memory).proNum=1;
    ( L; _' E* K) b8 P; ~/ _*spareMemory = *spareMemory - (*memory).p[j].askMemory;" k0 U9 W9 R) w
    produce_one_task(&(*storage),j,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程' Q; _& @! o, J0 {  X5 F+ P
    (*storage).p[j].produceTime = systemClock;8 o8 ]5 t7 i0 {% B9 }0 i" }
    MAX_COMING_TIME = (*storage).p[j].comeingTime;7 H( H8 }* A9 V0 d/ R6 C7 h
    waitTime[j] = 0;
    # i5 O$ ^, \1 v; ^HR_ratio[j] = 1;
    0 F5 X$ U8 j' Q2 Z+ L# C4 j8 q9 c}
    5 }: s- |* d0 j) x4 e, h! w: W- yelse
    4 N+ d% O% z/ K9 A: x{
    + r9 B, Q0 J2 F$ `printf("A process ask for a memory overed the system capacity\n ");
    ; m2 l) `6 K5 }7 l( v% _" Iexit(1);
    9 P5 M( @3 O, Z$ a8 i$ J8 [}
    - c* @" W9 N  h# p+ W}- A8 p8 {2 u+ q$ x. X
    return 0;
    4 r" O0 ]  Q8 T3 }% d}
    & W: U; v+ Z( Y& I! h8 S" kint PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
    / j8 _$ H! s$ J{
    0 r0 B& j, L# E1 _static int compute=0,waitio=0,change=0;
    - `! ?) a! _/ Rstatic int computeLast=0,waitioLast=0,changeLast=0;* W/ |* b( A! s, E" H1 e5 V8 K
    int i=0;
    1 v: C1 D0 P% \if(draw==1)) A( ~5 ^7 X* N2 V
    {+ W* ]0 f8 N7 i
    //printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);/ P& x1 q, d7 J. w
    drawPerformance_PF(800,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);8 \+ ^+ r* l' r" |2 D

    7 y5 j! g$ @1 b) Q0 T% r# h8 z3 ]/ V5 u/ o
    computeLast=compute;
    " b; a: T- d2 K4 X% o# {6 ~waitioLast=waitio;
    # u& Y* V2 R2 z: DchangeLast=change;; b/ Y2 u) U0 }. n* ^5 J
    }
    0 m6 V& V! j. Q( F5 F$ U7 C' Y' Tif((* memory).p[0].flag==ready)" T& x: J: j1 b0 w+ C4 c
    (* memory).p[0].flag=computing;
    ( I/ ?: H+ ?" W/ }/ ]if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)
    : N" Y) A% ^0 A2 {: {{
    % ~, a' Z* x4 Y, g$ @' ~! i5 V& oi=(*memory).p[0].computeNum;7 K* J# O$ S3 b8 J  R9 b2 [
    if(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed
    - q# r0 U+ N. Z# c{" k1 V* p3 X$ B: {( c0 G% B
    (*memory).p[0].flag=IO_waiting;
    6 I3 m/ n3 J1 j4 [(*memory).p[0].computeNum--;$ J6 c2 _. K- @' j
    change += exchange_IO_Compute;, ~  N- U) c2 w1 ~
    compute++;
    , _* U# i; B5 p( L. Z- T3 }}
    ) P5 P8 K" U+ selse
    / K% I# o9 h1 |# j$ {{
    $ _+ C4 l! N  Z7 G/ n$ icompute++;
    8 `7 r% W, {3 c8 k}
    ; P2 B" A% V$ B+ ?# v$ i}
    . @( d$ B  I# B  w$ selse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)$ w: U+ _& e" Q- A2 v; I# L5 M
    {) @0 n# Y$ t% B9 a0 @" k( h
    4 F) ^1 p6 y( P" X6 [7 O
    i=(*memory).p[0].ioNum;4 u- B, N9 h6 }6 y
    if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed% c+ C! O6 G; \; `' W( I
    {4 \# N1 ]$ L! U( v1 j3 O
    (*memory).p[0].flag=computing;
    / O" S* Z! \! ?(*memory).p[0].ioNum--;
    % r+ H1 Q3 f2 Q& G0 I, _8 R% Hchange += exchange_IO_Compute;
    % z4 k: _: a* Z' Lwaitio++;( E! g) P/ m4 C$ Y9 ]6 ~# k
    }6 @8 B* H  L& _
    else( V4 H2 Z% U) V0 w
    {( [0 @  r6 Y  K
    waitio++;
    ( f# g5 o& h/ ]' _3 |) z}
    , W) D5 C# z# T& x+ f}9 F# }2 i0 C3 f0 F* ?2 w
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)/ k+ v- W5 t% W) h9 G. L5 u
    {- F1 N1 u8 N0 x1 W( W
    (* memory).p[0].flag=IO_waiting;
    7 b6 D$ y% Q. {9 Z% o$ O/ uchange += exchange_IO_Compute;4 `5 `" F! z: k: F: t7 A" P
    }. b) @0 N+ ^8 |* V) W
    else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)+ W# L% A! n; y) t' x
    {: S- W5 l3 p% x- S; E, ]: V6 l, E
    (* memory).p[0].flag=computing;
    * i7 g- b) f8 I9 I& wchange += exchange_IO_Compute;
    & z3 ?4 g; ]9 }9 X% S. X}8 c, K$ _+ d7 F
    if((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0)  //一个作业已经完成1 n9 m2 k5 m) C& ]: d
    {
    3 G' G8 `2 [+ G$ n4 G; H/ f2 z) r(*save) = (PCI*)malloc(sizeof(PCI));6 C, j! V! ?( ~. M$ b4 E+ }! e# X
    (*save)->next = NULL;8 p1 b, ?6 J4 S, [3 m4 S& t( ?
    (*save)->processID = (*memory).p[0].processID;
    " l$ L* V: G3 R: y; B; ]* T(*save)->comeingTime = (*memory).p[0].produceTime;8 W" }' ?* n% A; w" [! S* y8 J2 E% p
    (*save)->askMemory = (*memory).p[0].askMemory;0 f3 m6 f, q+ G, v* T5 |9 y9 Z! \
    (*save)->compute = compute;
    4 q8 }% C& y- ]# {" P(*save)->waitio = waitio;
    9 ?, d5 W6 v& a$ X  s* _$ V(*save)->exchange = change;, l( Q5 i8 Y3 _+ D9 {0 v
    (*save)->completedTime = systemClock;# z+ ~7 g# @' d) c( i% |: Z
    (*save)->runningTime = (*memory).p[0].runningTime;
    / ~3 d3 ]4 p5 a* y2 I, R2 l*spareMemory = MAX_MEMORY;      //*spareMemory + (*memory).p[0].askMemory;3 f/ j9 [: N  \
    compute=waitio=change=0;; W) q$ G9 H* J7 S1 E: O
    computeLast=waitioLast=changeLast=0;
    5 F5 Y. @1 V% \: t0 oPriority_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));+ \) F3 Q! u! X0 k, L
    change += exchange_process;0 U* O' `/ \4 w8 ^
    return task_completed;
    : n4 ?# @0 `3 z) Z8 I- @}+ A6 O2 `- O/ g
    else- K: `4 `' ~' `3 x( l+ }0 ]
    return task_not_completed;
    # D3 J0 X3 W/ Q4 u) b; @  ~5 v5 f}' z- |% d+ e) ?; ]) n
    int Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)0 y) ~& [. t# ?
    {- C* }$ Q" ?: `* B2 t
    int priorityNum[initProcessNum],i=0,j=0;+ R& F3 F% z+ v2 ~
    double temp=0;
    : J# A5 |" J% O- N- Xfor(i=0; i<(*storage).proNum; i++)    // setting priority to each process7 M2 O) s, u; W, ]1 I4 v; j- i
    {2 J, g3 A2 B7 @$ H9 n6 O8 u- i, ~
    temp = (*storage).p.computeTime/(*storage).p.ioTime;0 ~' m% P$ d% ?- o0 t
    if(temp > 0.8)
    7 ^- h  Z: R5 ZpriorityNum = 6;
    7 ?2 b  G2 o- [, r0 E7 P. Eelse if(temp > 0.7)
    ' I9 D- T7 Z! S, H8 I1 |6 }priorityNum = 5;
    ! U* V! B, I  h- Q- C0 j( G( pelse if(temp > 0.6)
    9 Y# ]) i+ t4 UpriorityNum = 4;* P3 V) L5 ~5 Q1 W/ {5 q! m; |
    else if(temp > 0.5)9 I: E7 A  p; q
    priorityNum = 3;
    ! C6 X- e, w7 V' C. P  ~else if(temp > 0.4)) S5 P- T2 f9 J8 g5 C+ ~
    priorityNum = 2;) w8 e- l) C" w5 F6 s8 ]5 C: Y
    else; u" m, e; p$ ~7 i
    priorityNum = 1;# S; p# V6 i) ?$ @3 z
    if(priorityNum[j] < priorityNum)
    5 {. f2 w! @) S! I: ?* Dj = i;6 |" _, D9 ^5 V& Z- y/ n
    }
    0 T0 [+ D3 D+ q& n' b( \% X8 n- Hif((*storage).p[j].askMemory < *spareMemory)
    ' f$ Z8 p+ h1 X" B4 q% V/ ]! u{
    ( U/ W9 E9 E5 ?# T& C  g4 I8 n! F/ }(*memory).p[0].askMemory = (*storage).p[j].askMemory;4 `+ |6 J: t0 y: Y  ?4 Z0 @& e
    (*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
    $ Y' c; b! }& }(*memory).p[0].computeNum = (*storage).p[j].computeNum;' a. v8 V8 ]5 {7 c9 z7 R  _$ ^
    (*memory).p[0].ioNum = (*storage).p[j].ioNum;; c, B2 B* j8 {" ?6 c! {/ e
    (*memory).p[0].processID = (*storage).p[j].processID;0 Y! i$ W9 I# H7 w. E, T5 ^
    (*memory).p[0].flag = (*storage).p[j].flag;
    . w4 S4 B) ~; o' e5 W" [- I# L(*memory).p[0].ioTime = (*storage).p[j].ioTime;5 G3 `# X8 c# c- f
    (*memory).p[0].computeTime = (*storage).p[j].computeTime;" \7 e# j2 f( s& F1 e, {
    (*memory).p[0].runningTime = systemClock;
    + Z1 N, p0 Q4 }* k(*memory).p[0].produceTime = (*storage).p[j].produceTime;
    $ L+ N5 u8 r; U$ J4 A. Ofor(i=0; i<(*memory).p[0].ioNum; i++)9 X1 m2 ^5 p* c0 ~8 U. t
    (*memory).p[0].ioClock = (*storage).p[j].ioClock;
    ( \7 z! y: L6 N3 B( E3 Lfor(i=0; i<(*memory).p[0].computeNum; i++)
    ( _; Z1 g% B# v  S% W(*memory).p[0].computeClock = (*storage).p[j].computeClock;
    5 D; D5 U# H& L& v0 _" C' V(*memory).proNum=1;
    * U' D; C/ O; G9 \: C$ D5 m/ F*spareMemory = *spareMemory - (*memory).p[j].askMemory;2 p3 D! W/ Z/ B4 U! @& S2 t" b
    produce_one_task(&(*storage),j,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程% f; }# w* N9 ^9 p
    MAX_COMING_TIME = (*storage).p[j].comeingTime;
    ! J" s- a  P0 w  v9 N# Q( f}& z# R1 {1 l4 t
    else
    8 ~6 }! s: Z" ]4 F/ w{
    ' q9 I: [4 g! W6 b5 w* t* `printf("A process ask for a memory overed the system capacity\n ");
    , u2 }3 y* {& ]& r9 f- e. hexit(1);
    / ^6 b( h* k0 v7 S. A}
    4 Y, t1 _2 @0 K" ~5 j" yreturn 0;
    4 l' c+ w# }" g& _}( M* ?! w" B( l( R" }2 Q
    int ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
    4 ~7 q+ ]0 N7 y1 D* j{% I6 I0 a; I' ]. S1 K
    static int compute=0,waitio=0,change=0;4 e- x* ^: b* m( f
    static int computeLast=0,waitioLast=0,changeLast=0;
    1 Z7 D  ]& m: Z* Y9 e& A9 _& Aint i=0;
    4 h% n. j0 Y0 Q2 mif(draw==1)! @5 d8 f. U% i
    {# w8 H8 p0 R8 G- P( w9 f; C8 t
    //printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);6 {) t2 d* z' i3 ?: p
    drawPerformance_SJF(0,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);; u' Q4 S( H2 h
    3 f0 \4 t& X; t6 \" m

    $ q- z8 |5 p4 g8 ?# l) X3 k! ucomputeLast=compute;. q  v$ V3 P: l
    waitioLast=waitio;4 l" Y- o6 R# q( }# ^( G0 ^0 W
    changeLast=change;$ u) s7 W4 Z5 E, I+ u; |$ W
    }
    6 V: I8 `9 \4 b* W8 kif((* memory).p[0].flag==ready)
    % c- q1 M. `* [: Z0 E(* memory).p[0].flag=computing;
    7 Y, p) j! j6 Q! Q1 B0 W7 s" m: bif((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)3 G. P, O4 _6 a( q% R& f
    {
    5 g2 I" d7 P* `7 xi=(*memory).p[0].computeNum;
    7 \2 K6 C& g3 X+ Q1 tif(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed* z0 M$ `* A9 N' R% Y6 k
    {
    2 r2 I! `0 I3 Q- T& R(*memory).p[0].flag=IO_waiting;
    8 Z+ b, p: b: ^* y5 f) \(*memory).p[0].computeNum--;
    ) `* m: K6 \% I7 Ychange += exchange_IO_Compute;5 _2 x' h# c' Q1 N5 U
    compute++;
    + I5 B" G) b& X  k; A0 [9 r}' S8 c6 a. N  t3 @; I1 D4 ^+ z$ f
    else5 u1 n9 y: e" F- W( w/ ]1 M, l8 u
    {
    2 z- C8 I8 n. j% G. P( @compute++;* ?7 t8 u( o; {# q3 J
    }
    ( C/ _9 }, @: y1 w/ D7 l5 y}0 @) r" {( f8 V' k
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
    , V- m* H/ p$ z' B9 Z{
    + P# \% r. F+ ]9 n% Z- B" u7 g
    6 f4 k1 y1 e, S3 D. Ui=(*memory).p[0].ioNum;0 V8 ?: r1 }. r9 F  N, b
    if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed& }1 U; x- b0 [. y
    {
    $ b8 v' Z  {  o4 w  R, v(*memory).p[0].flag=computing;  o  ^; A6 A( z9 I$ o% i% T/ ^
    (*memory).p[0].ioNum--;
    3 N& i: D0 T4 o! o. Xchange += exchange_IO_Compute;' N% Y, [: I1 p* Q4 d
    waitio++;% U8 [9 ]8 W2 O& Q" B" G% n7 ^1 N
    }* W8 ]9 V  o: n' t8 E9 G5 [
    else
    ) w0 R; C. y0 O{7 K$ ^( U6 W! V' p0 x$ Q1 ^- y+ a
    waitio++;, b# B% E) ~% w* r( A6 x9 d
    }
    - b& u8 Q& Q, F. h" d3 j}) K, W8 e5 D5 S: U8 i) p; {/ x
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)
    / ^, J! F- `3 d{
    , I$ {0 S; h2 O6 j: B(* memory).p[0].flag=IO_waiting;
    4 Q& W: r7 y2 Y2 D. tchange += exchange_IO_Compute;
    0 |7 U% Y! ~# ?- P: y7 _- X}
    3 `! v4 ]/ F4 t/ ^9 H* ]else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)
    9 {0 |) T" z/ }{
    - N8 j. {" P; H+ T  |; p(* memory).p[0].flag=computing;) j3 m& T2 V3 F$ R' M% V, Q& O3 N
    change += exchange_IO_Compute;
    2 K2 [/ _: Y9 G1 H* {; X}
    & N2 q0 Q! K, iif((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0)  //一个作业已经完成  s( S9 x+ u" x4 N  |) N" P* b
    {
    , z9 Z0 n6 n! N6 e8 y: t(*save) = (PCI*)malloc(sizeof(PCI));1 z, g" @, k. ^) a0 {
    (*save)->next = NULL;; g( k# @/ S- p" y4 T; c! U
    (*save)->processID = (*memory).p[0].processID;" N2 ?4 K, S/ n2 H% P) A7 [% j
    (*save)->comeingTime = (*memory).p[0].produceTime;
    ; Y0 z6 U" a6 q/ j(*save)->askMemory = (*memory).p[0].askMemory;4 b4 I$ {& N4 P, ~7 _! H: _5 Q7 K+ w9 s
    (*save)->compute = compute;0 O! z4 H  A3 E& t
    (*save)->waitio = waitio;& C) K. Y4 l9 ]4 Y
    (*save)->exchange = change;3 D- f% z  M# R7 y
    (*save)->completedTime = systemClock;3 d( x9 I6 P6 @7 ^0 |' ~
    (*save)->runningTime = (*memory).p[0].runningTime;) G$ Y! w. O; ^$ z5 X
    *spareMemory = MAX_MEMORY;//*spareMemory + (*memory).p[0].askMemory;
    : D: O. ~' \+ O- K0 V. z7 xcompute=waitio=change=0;3 F8 @1 J6 u0 [3 e# C/ E+ y
    computeLast=waitioLast=changeLast=0;2 t4 f& A2 T& J3 h) j9 H( `
    SJF_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));
    $ G" y$ U% Y9 b$ m- Rchange += exchange_process;
    2 e% @5 K  ]2 K  e! T: B- l9 jreturn task_completed;
    5 J* |) s% @$ d0 e" Y}) k" {, r3 o% g* l+ r/ y2 i3 r
    else; }3 E( c* o. B3 J; `$ F: h
    return task_not_completed;
    ' K/ ~$ W, S+ m. U* `}; Y4 A6 @; `; `5 a/ E
    int SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)
    5 R+ M# \; f( N, u* w{/ T' r) K9 e' ^) s, Q0 n6 Z
    int i=0,j=0;
    * h9 [$ d8 L2 r, P% }' Ifor(i=1; i<(*storage).proNum; i++); T4 k# e' c. w5 L: b4 O, S' }! e! b
    {
    0 N" Z! i* t- v; j5 \if(((*storage).p.computeTime+(*storage).p.ioTime)<((*storage).p[j].computeTime+(*storage).p[j].ioTime)): ^; q6 J" `, Q, [" x4 G( P& H  d
    j=i;
    0 }: Y/ U. m7 A. y' I}8 \! N! \% Y/ [1 U5 O
    if((*storage).p[j].askMemory > *spareMemory)
    : }: A- |2 H/ N. U{
    8 B1 \7 }! d4 C3 r" s1 jprintf("The memory asked is overflowed than the system memory.\n");  Z! z: Y/ e8 i! u8 S9 O( `
    exit(0);
    - j$ E5 a& \& b: s}
    % H) ~) X) _  [) kelse7 ~0 |+ W& N( C4 S& L
    {- @. g' ~: R( y! a- N1 T
    (*memory).p[0].askMemory = (*storage).p[j].askMemory;& q- D( c+ t7 E! a% P
    (*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
    * K- `8 p$ H* c: S* s2 \(*memory).p[0].computeNum = (*storage).p[j].computeNum;
    " }8 _8 K8 |$ G; _1 c(*memory).p[0].ioNum = (*storage).p[j].ioNum;% C3 H% ]1 U# M# R2 o
    (*memory).p[0].processID = (*storage).p[j].processID;
    2 d9 H: Z9 C) F! g' {7 e(*memory).p[0].flag = (*storage).p[j].flag;! n# k; Q# v- M' z/ H- p; v
    (*memory).p[0].ioTime = (*storage).p[j].ioTime;
    ! E! c) u- A6 C5 h" H(*memory).p[0].computeTime = (*storage).p[j].computeTime;- F. y, Q: w. M2 K$ h/ h( S* v
    (*memory).p[0].runningTime = systemClock;
    - h- E/ d- m7 _% G(*memory).p[0].produceTime = (*storage).p[j].produceTime;
    " ^  o% k  b+ V8 ffor(i=0; i<(*memory).p[0].ioNum; i++)
    2 Y4 s! j4 x! V' v0 p(*memory).p[0].ioClock = (*storage).p[j].ioClock;
    # b7 _. C/ t8 k! K1 T9 ^) ^* ofor(i=0; i<(*memory).p[0].computeNum; i++)
    , D, v$ F- q+ f: u' X* K7 y! k3 _: a(*memory).p[0].computeClock = (*storage).p[j].computeClock;4 Z" ]3 `- M% l9 ]! U
    (*memory).proNum=1;/ d9 y. G( r; N; `) U8 M6 h9 A
    *spareMemory = *spareMemory - (*memory).p[j].askMemory;: y* y4 g3 u# @: P2 _
    produce_one_task(&(*storage),j,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程
    / j$ e4 R6 c# X- O* M  oMAX_COMING_TIME = (*storage).p[j].comeingTime;
    ' N/ I' v6 m/ x2 \6 o! b/ A+ G}
    ' @5 g! `6 M, r, c* mreturn 0;" N- A" j$ J0 V% F
    }9 }" y# V6 y3 @2 P
    int TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
    5 l* J" d. d5 @. @+ g{
    + H2 e; G/ A& d1 I& K% n) xstatic int compute=0,waitio=0,change=0,clockSegment=100,poi=0;
    7 p3 D. }2 j0 G+ b% z4 K6 ~static int computeLast=0,waitioLast=0,changeLast=0;
    + r% P( @, F) mint i=0,j=0,k=0;
    + G! Z8 I. M* N, Nif((*memory).proNum<=0)
    2 C9 D/ w8 `. J, P( C# m/ kTimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),-1);
    : I. O/ n; X5 O4 i* Zif(draw==1)
    2 g1 L; V4 [' G* v  f2 _{' A4 W* m9 Q+ c0 r' W- ^$ R$ k
    //printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
    : _. j5 d. Y: Z) Y1 n* [drawPerformance_TT(400,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);3 l+ A2 u' i. v

    + F& z7 a6 [8 C; _6 U. j, T5 H0 {4 ]! q
    computeLast=compute;. G5 w2 c5 M( j
    waitioLast=waitio;
    - J3 k. I+ i( a4 L, {( m) ~8 w! n! DchangeLast=change;
    " {3 r. I) h, b" t. k" j}
    ! H2 N4 I3 \3 x( [& R' P- cif(poi>=(* memory).proNum)3 v% V  [: |6 a( [% N4 H2 {- u
    poi = 0;
    ) }$ Z& T- p! x7 vif((* memory).p[poi].flag==ready)) N% D  g3 R; A9 \6 S
    (* memory).p[poi].flag=computing;4 A, Z! z7 b8 G/ N3 X" ^  `5 {
    if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==computing)
    2 J2 v0 E" Z9 E$ M5 J{0 Y0 {( l: j" T: v3 W# y3 F( F6 |
    i=(*memory).p[poi].computeNum;! l, d, ~6 X( w
    if(--((*memory).p[poi].computeClock[i-1])<=0)// one compute tase is completed
    ) _, z7 W* m# k{. G5 u  }; v  p
    (*memory).p[poi].flag=IO_waiting;
    % g9 t4 C$ k4 E(*memory).p[poi].computeNum--;( ^9 w  h4 l0 f. Q5 W6 a
    change += exchange_IO_Compute;
    & S7 u) ~3 [8 y; q7 [# \: Zcompute++;
    * C( H( @+ l6 w3 P6 i% }- P}. @' ?( M6 W5 `$ K3 M) ~
    else/ o' Y1 q9 l5 B
    {2 O" W" P8 {9 R
    compute++;& O" Z% e& j3 P; b* n
    }
    5 ~2 r0 m/ J( I) U& a% |  c}
    . Z0 G# f' ]7 n: `else if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==IO_waiting)
    # e7 t1 b6 n! P' y3 N7 W0 Z8 j" `{2 v; o9 w+ q2 Z. Z  W, i7 M! o' R
      v: n& J$ M& P+ ~' r1 b! r% M
    i=(*memory).p[poi].ioNum;# z- f" x# b5 X9 s) x3 i' U
    if(--((*memory).p[poi].ioClock[i-1])<=0)// one io tase is completed
    * R, E, ^! f- r! c( ?{" q; g: L4 V  O7 Z+ n+ Y
    (*memory).p[poi].flag=computing;% a7 s9 [: d8 ?% f- |" l
    (*memory).p[poi].ioNum--;
    - e4 j) c( Z* I  ~6 a; ^/ ichange += exchange_IO_Compute;
    + q: M, i& \8 f, `waitio++;0 Y* m* ]# N+ R  ~, [( Y
    }) z4 o  E: ]! p0 }' {8 r
    else/ J6 ]6 ]! l. j+ p: n5 r, J' a: m
    {
    ) ?3 a. s( T6 `waitio++;
    1 [! {+ |4 N* j' L$ ^}; o0 L, P9 l' B# i+ R7 @9 D& b
    }: C+ ?+ D3 G, J1 j
    else if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==computing)3 o: }9 k; V) g& |& s
    {
    0 s# v* B% L& p. `, L, F. @(* memory).p[poi].flag=IO_waiting;4 g6 ?" l6 F$ q$ Z- ~
    change += exchange_IO_Compute;" R0 d% H5 X6 Q% U4 u5 W- J6 B
    }# a$ U) Y7 R: l
    else if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==IO_waiting)8 h& }3 G2 p" o
    {+ O) ~/ a, I+ ?5 j1 B& K
    (* memory).p[poi].flag=computing;0 A( s# ?2 r- x4 v) y9 K
    change += exchange_IO_Compute;
    % A5 `- k4 ~: Y' R; Q}) _" j/ t% d# ?
    for(i=0; i<(*memory).proNum; i++)  //其他等待io的进程可以并行推进4 U: r4 g- ^* G8 D6 z; C* Q
    {5 v2 D. N' w! h+ w6 |6 x- G
    if(i!=poi && (*memory).p.flag==IO_waiting)
    + i$ ?: F/ u* O/ c4 t0 z{
    5 t8 m/ v% H( p+ h! N& cj=(*memory).p.ioNum;
    $ J$ u9 R  N$ [/ u. Uif(j>0)
    3 {1 c) C1 l9 {* K# K' V; Y{
    : z; V$ z9 {# ?4 k8 k+ l" Y4 u, uif(--((*memory).p.computeClock[j-1])<=0)// one compute tase is completed
    % X2 b# A' u1 o/ R% e; v{
    % g# |6 M4 I- O+ \% F(*memory).p.flag=computing;
    . q  [5 t( H! O* Z% e(*memory).p.ioNum--;
    ( P; P) r0 D1 L5 j- rchange += exchange_IO_Compute;
      L6 C$ `9 V2 C7 P5 o, N7 d" |4 L}$ G5 c/ p3 Q6 a! g/ C" }. H) M
    }
      ~4 S" r$ y5 p, z: d9 J! e}! D5 f" K$ ~6 N% S. F7 A& V+ i
    }. D( I& I6 `, R( V
    for(i=0; i<(*memory).proNum; i++)  //处理已经运行完毕的进程1 p5 _: d; h+ _2 H% h9 Y
    {
    . O9 y- V6 h' E% a4 l1 i3 t2 F) |if((*memory).p.ioNum <= 0 && (*memory).p.computeNum <= 0) // a task is completed; ?" f+ ^& J, X3 k5 P2 V
    {
    3 f" E, L- z, Z. x/ c7 E(*save) = (PCI*)malloc(sizeof(PCI));9 Z5 v7 n  a- t& E
    (*save)->next = NULL;
    % m" N/ s7 j4 k3 [# x       (*save)->processID = (*memory).p.processID;6 N5 g: Q/ t( I' E
    (*save)->comeingTime = (*memory).p.produceTime;
    4 Z+ }! U$ X4 ^- `(*save)->askMemory = (*memory).p.askMemory;
    / _5 u, H# b5 K0 y/ r' B& [* |(*save)->compute = compute;1 s* x, `! P0 r( N  C$ R* z
    (*save)->waitio = waitio;( x+ t; O* C' r; Z; T; g4 m, K
    (*save)->exchange = change;( l% D  m" o, P0 h- t; Q$ q  r
    (*save)->completedTime = systemClock-(*save)->comeingTime;
    $ Z4 ^' Q, q5 S) r& v2 s1 f(*save)->runningTime = (*memory).p.runningTime;
    # `2 A! E; g: K/ x4 [- ]7 Z(*save)->completedTime = systemClock;
    ! i$ o/ T  D( ^+ }$ \4 E+ L*spareMemory = *spareMemory + (*memory).p.askMemory;
    7 O/ C& m- W/ v& Vcompute=waitio=change=0;+ f/ r/ Y# N/ ^9 N+ p% d) X/ D
    computeLast=waitioLast=changeLast=0;
    ' w- a4 T' g6 m* u, T0 jif(TimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),i)==1) // 调入一个新进程进入
    ! Y& t5 F$ f7 \  F4 d{
    5 l$ d( {  C4 y  E* O7 q7 K( oif(i==poi) //占用CPU的进程已经运行完,将时间片分给其他进程
    2 K# V* t  q" \& u* c{
    6 W2 w6 [  F% m7 s1 ?poi++;3 [( t. b; P1 d9 L. s1 T* ]
       clockSegment=2000;
    5 z& Q5 M  o* P) _: z}+ z- Z2 i1 R9 ^# g8 R
    }0 U! {, z& {" V/ I3 w
    else  //没有足够内存调入新进程9 j; y3 c: |% S3 g
    {- o; W1 \8 J* T( Z4 M) m
    if(i < (*memory).proNum-1)
    0 Y* i7 J6 q& g& X/ W6 H{
    & P; z. j4 ~! M5 M. }4 C- \  Afor(j=i; j+1<(*memory).proNum; j++)
    - Z+ O; s2 d# q  w' e; e{9 B# `0 P0 R& N/ I# @
    (*memory).p[j].askMemory = (*memory).p[j+1].askMemory;, y5 g) ]+ l( G0 q( S; {
    (*memory).p[j].comeingTime = (*memory).p[j+1].comeingTime;7 s$ M: v* N0 Q( z; H4 B: V1 T6 W2 ^
    (*memory).p[j].computeNum = (*memory).p[j+1].computeNum;
    : e/ z, o+ j9 d' |7 p(*memory).p[j].ioNum = (*memory).p[j+1].ioNum;7 ~# g2 K3 m; [, r# Q: j5 |1 k
    (*memory).p[j].processID = (*memory).p[j+1].processID;' i, Z0 B) p% q* y. v; b7 V
    (*memory).p[j].flag = (*memory).p[j+1].flag;
    ) K6 J3 n  X+ X5 h# `) S1 ^8 T) w(*memory).p[j].ioTime = (*memory).p[j+1].ioTime;
    # t0 H; C/ c+ B% I5 d(*memory).p[j].computeTime = (*memory).p[j+1].computeTime;- }- T  a# u- [' t, r
    (*memory).p[j].runningTime = (*memory).p[j+1].runningTime;
    5 l* x$ ^! {: m. h3 b$ m(*memory).p[j].produceTime = (*memory).p[j+1].produceTime;
    # ?8 O  z, W9 R' {) T9 I: i% x(*memory).p[j].completedTime = (*memory).p[j+1].completedTime;; \+ n" j# n/ c# ]
    for(k=0; k<(*memory).p[j].computeNum; k++)
    : ~$ H# j; }0 i" W(*memory).p[j].computeClock[k] = (*memory).p[j+1].computeClock[k];, D# v9 R' n' X. j5 l" d2 n
    for(k=0; k<(*memory).p[j].ioNum; k++)& d2 o; {# M5 n" c) j9 _
    (*memory).p[j].ioClock[k] = (*memory).p[j+1].ioClock[k];
    $ C( I( D  s( U9 Q}
    4 P. y: X! i% @7 |3 jif(i<poi)  O8 b8 ?* H7 N8 R7 O" i
    poi--;, t7 N  G5 ^. C9 n  l
    else if(i==poi)
    9 e! W  H+ x; Q/ ?2 S1 Y2 PclockSegment=2000;$ l3 x1 s' i' b$ n0 R+ W
    }$ {7 `* N/ P  ?, ?# {
    i--;4 e# w  x$ z$ ^7 t' t
    (*memory).proNum--;1 k" D( E' A: i( a! X
    }
    ; j9 w! S6 @+ Z, L- L, nreturn task_completed;
    ' C$ E$ B! d5 I0 \# {}
    ( z- x4 y% R* z' M- b}
    6 E2 f1 f" B+ j--clockSegment;8 a) f' Z3 H% M0 ~2 o' U
    if(clockSegment<=0)
    1 e* `+ y' ^; V+ k{
    0 a( @6 J4 b( m& @* }3 apoi=poi+1;6 C. O/ i5 x5 z2 R
    if(poi>=(*memory).proNum)5 F- `: b6 N! N0 I3 H5 d1 g
    poi=0;5 R! B  Q- I" D9 E( a2 l
    clockSegment=100;3 D" m$ |, W4 z: v% ?  G6 m
    }/ m; T7 l0 }% A6 k, Z( i
    return task_not_completed;
    ! b" n. Y1 ^) `$ W6 b9 O}  D6 e5 S4 ~; b( h
    int TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos)
    7 T  Q4 ?+ ^; k1 t* n{
    ; @, q/ Y- G- m$ nint i=0,j=0,k=0,flag=0,translation=0;
    5 H8 n$ v4 J: v6 e( n% sfor(i=0; i<(*storage).proNum; i++)
    ) \$ b5 r4 C1 n! y9 U0 L3 R{
    , w+ `( j) o, J7 f6 T0 ]- iif((*storage).p.comeingTime>MAX_COMING_TIME); y1 _# h9 r& F6 L
    MAX_COMING_TIME = (*storage).p.comeingTime;" @1 J( ^0 F; s& z6 w1 F) F% Z/ v! N
    }! m9 y9 J& t; I. m& ~4 @! l, I+ J
    if(pos>=0)
    + l! w: M7 S- u' i$ h' U{# F/ i' Q8 Y$ y; p$ Z
    for(i=0; i<(*storage).proNum; i++)/ n& q" I+ _2 c: U) r5 ]* O
    {4 T: M0 L* u+ a- E3 j  e
    if((*storage).p.askMemory <= *spareMemory)
    : b. A' @/ m) _{- S3 K7 w6 n- \
    j=pos;
    * I% B5 g6 p$ C0 J; c8 b(*memory).p[j].askMemory = (*storage).p.askMemory;
      O1 Q4 g1 g4 e' x(*memory).p[j].comeingTime = (*storage).p.comeingTime;3 z# @4 R* c9 w. I; \! b4 c' j
    (*memory).p[j].computeNum = (*storage).p.computeNum;
      l# T/ E4 g3 Z' W: x4 }5 u3 D' P' q(*memory).p[j].ioNum = (*storage).p.ioNum;# F3 s& p, T- d  m
    (*memory).p[j].processID = (*storage).p.processID;
    7 T3 a3 p! I, t* o# m(*memory).p[j].flag = (*storage).p.flag;
    5 u$ {; V# E. g- h! T(*memory).p[j].ioTime = (*storage).p.ioTime;( @/ W; m8 [8 f- l/ W! f
    (*memory).p[j].computeTime = (*storage).p.computeTime;
    0 q2 l5 O6 f0 P6 A8 T, ^* X- B(*memory).p[j].runningTime = systemClock;% f4 F" F1 s- [5 U7 F
    (*memory).p[j].produceTime = (*storage).p.produceTime;
    $ F. B  r1 H4 g$ {* S% ]* ufor(k=0; k<(*memory).p[j].ioNum; k++)# o( r7 Z% b5 _' A7 t
    (*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];* w; K  t* l& `3 z: c, r" H2 Y( X
    for(k=0; k<(*memory).p[j].computeNum; k++)
    4 B$ n7 I+ q& n! J8 J8 K  s(*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];! o2 r4 |6 c7 e" u, x% d
    *spareMemory = *spareMemory - (*memory).p[j].askMemory;
    5 s0 n! O9 s. Fproduce_one_task(storage,i,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程
    9 L+ T* @* ~5 a1 K& b. [MAX_COMING_TIME = (*storage).p.comeingTime;# E/ J: E$ C2 O# O5 [4 P
    translation=1;
    # r5 @" B* A& S) m3 Zbreak;
      ^6 @+ _! L$ g4 h. i+ f3 h2 g# F}3 t' q6 K$ ?1 d  @& L. I
    }
    - _$ @5 t8 Y' o; V}
    . I! T$ a, q3 P, u% `9 ~else& S7 U# A, W1 H# e. ^2 S5 C
    {
    ; F% c/ r; J6 y1 f# gwhile(1)
    , u! v# b1 x5 N. c  _{8 L: ]. z; U: Q# g2 F* q6 J
    flag=0;
    : I: v$ k4 \4 u5 W0 N7 y: b5 Ffor(i=0; i<(*storage).proNum; i++)# o  e% Q6 q8 Q, j2 c$ ^/ e
    {
    ' X# v( f0 n8 x5 }. b$ Lif((*storage).p.askMemory <= *spareMemory)
    ! ]8 o. n" g  Y2 O1 X2 e8 F1 {{" k; T9 Y2 }% ]" ?3 d
    j=(*memory).proNum;4 `: x' E5 E3 s2 f) j
    (*memory).p[j].askMemory = (*storage).p.askMemory;
    6 J# k4 t3 B$ W(*memory).p[j].comeingTime = (*storage).p.comeingTime;
    ; x- Y' Y; k3 T, C(*memory).p[j].computeNum = (*storage).p.computeNum;+ D/ p6 @* n" l$ j( O
    (*memory).p[j].ioNum = (*storage).p.ioNum;
    4 Z) Z' Q  T; H% F(*memory).p[j].processID = (*storage).p.processID;" k) `) W1 }5 T5 F5 s) f* h
    (*memory).p[j].flag = (*storage).p.flag;. W" j3 G5 B/ K% v  e' p
    (*memory).p[j].ioTime = (*storage).p.ioTime;
    % L( y4 S4 Y4 E; S, M(*memory).p[j].computeTime = (*storage).p.computeTime;8 _% d7 d# I( {( e% E
    (*memory).p[j].runningTime = systemClock;* _! J4 e' n1 ]9 g# Y
    (*memory).p[j].produceTime = (*storage).p.produceTime;
    7 E% ?! e7 z. Q8 Ifor(k=0; k<(*memory).p[j].ioNum; k++)
    ! l" g8 F" |# m; a(*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];
    ! d4 _0 d, Y/ Ofor(k=0; k<(*memory).p[j].computeNum; k++)
    8 ]1 v! h4 e4 t) H(*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];6 r6 C$ D! W7 d
    (*memory).proNum++;$ }! ]; E' r0 u9 o" s  g5 J
    *spareMemory = *spareMemory - (*memory).p[j].askMemory;, O. D) U$ a& y& a; A) m4 G
    produce_one_task(&(*storage),i,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程
    # G$ Z1 u) V. B% E6 U- @% eMAX_COMING_TIME = (*storage).p.comeingTime;
    - T3 B6 t) A0 P6 L2 p! ?flag=1;
    7 v  m" F2 P% h* ?3 E+ d! Q8 ztranslation=1;
    $ C  ]+ X$ Q8 ~- G}+ L: A8 [# Q* h1 |3 r- z' B# @
    }
    8 S5 y) j( z: g7 g6 y5 Q  g* Oif(flag == 0)
    0 _4 ^1 n, K1 [' _$ Wbreak;' d6 s8 y  q/ Y
    }! S; q% U# e4 B7 M
    }
    8 t( v$ d. ?8 lreturn translation;
    , x) W7 o8 ?% D1 y; u7 k0 m8 b6 T}
    / p- ^' d1 ]" M9 j/ k4 ~2 aint FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw)6 Y: w- W; S: }1 f( }6 L
    {
    " x  m% x/ u; m/ ]1 p% Mstatic int compute=0,waitio=0,change=0,flag=0,flagiocpt=0;9 X$ Y, O- E" T
    static int computeLast=0,waitioLast=0,changeLast=0;
    1 F% R! b8 W0 {( W" _/ {int i=0;4 ]$ y) M0 E! x& e  T, K2 b# B
    if(draw==1)
    - W/ C2 j5 s: v: ^: {{$ f$ o/ C, @* v' r2 m$ o
    //printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
    5 Q, }+ j' n$ ^: \6 U! xdrawPerformance_FIFO(0,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);( q1 M/ S. d* S; V5 x& P
    3 N. W* W( r; u0 S! ^+ v# }
    9 x& N/ z2 P" a' S! Q9 K
    computeLast=compute;
      o8 G# ~! a" D% \6 O: O6 i9 owaitioLast=waitio;
    $ h: t: h; ]- x! c! P  @$ w. LchangeLast=change;
    " @; u8 |" b* [; d0 A}- L8 Q4 |: s& G
    if(flag==1)  4 p" W, v$ a" }& W6 D
    {
    ( C& l6 H: x% Z% b% aif((*memory).p[0].ioNum>0||(*memory).p[0].computeNum>0)  //task is not completed
    $ `3 p# P$ p' }6 q3 s{
    3 f7 `' c0 M/ r6 S$ M* b% \if(flagiocpt==0)   // implement compute" N  j! J1 P  t' }
    {
    . Z" E  p' R8 di=(*memory).p[0].computeNum;% V* x+ d% c- _* d, B
    if(i>0 && (*memory).p[0].computeClock[i-1]>0)4 E9 h( Y6 Z$ x' d
    {8 w6 p# [- X% J: Z# p. [7 t. l
    if(--((*memory).p[0].computeClock[i-1])<=0)// ome compute tase is completed
    1 y- Q  n% Q  P8 |{2 B1 n; ]4 _6 o- f; s8 P
    flagiocpt = 1;6 P' s4 n. `+ V8 _5 C, G( k! K
    (*memory).p[0].computeNum--;/ e7 g1 \5 a- t4 D
    change += exchange_IO_Compute;0 }7 ]) g/ M! R8 v( L
    compute++;
    : a3 ~' y. H- T}
    " [# R4 B9 @$ E! z5 q  w" Qelse8 ]" }; e7 T1 d# F" E3 g, U( e
    compute++;
    " D5 ?0 T' K( d3 F5 H! q
    9 S* v0 t+ u* b: W5 J3 y}6 l0 h9 m3 H  S" n5 @$ F* ^; _: o
    else. s! C5 o3 A* r* H7 w
    flagiocpt = 1;$ n! B8 S* d7 ]8 c
    }8 x0 y% q- @) z; y2 j0 g9 O
    else  //wait io
    7 m0 X  x+ @! v: X{+ Q; U3 c" C6 I- ?# u
    i=(*memory).p[0].ioNum;+ t+ f" S/ K/ p) Y4 y
    if(i>0 && (*memory).p[0].ioClock[i-1]>0)2 \" ^1 h6 ?) n) y
    {
    8 Y: G8 p2 V9 i6 l$ C) k1 C# `5 Iif(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed
    ( G; |, `/ w; ?{
    % n) X2 m* S* Z4 Hflagiocpt = 0;
    8 c/ [8 T* k  `6 |(*memory).p[0].ioNum--;2 g3 {' D, D% H1 S! q! P# v+ B9 F
    change += exchange_IO_Compute;- N, \* y+ j& {) q- L, }* w- P
    waitio++;
    , Y2 T' _! h! I7 d6 _. z& {  X2 `}
    2 [7 P$ O, [3 x/ yelse: r" F+ f% O4 ]- k: v5 g
    waitio++;  }) t9 e) ^2 U9 B

    ! }) ]( v6 g5 V4 v% T. h5 d}
    9 ]1 @! ?3 F( X2 j4 Kelse
    : _1 T" B7 s- A3 e9 jflagiocpt = 0;
    / h9 M1 O9 l+ Q}5 O# j# K1 L5 u
    }/ c) ^5 w+ V  T' ?+ G: d
    else  //task is completed
    % N8 V8 V' r# i4 r! L* k{+ ?$ Z- O: w/ e6 r
    (*save) = (PCI*)malloc(sizeof(PCI));
    3 v' i. }3 Y3 ?+ z3 t1 }(*save)->next = NULL;8 n( j9 P9 R0 K- K% ~! T2 b
           (*save)->processID = (*memory).p[0].processID;: s- b5 i$ I/ v8 f. G& U* h
    (*save)->comeingTime = (*memory).p[0].produceTime;" ^0 V5 A5 _+ `* Z" x! H7 b( g8 L
    (*save)->askMemory = (*memory).p[0].askMemory;
    , y3 h3 o5 ~% k0 e2 I(*save)->compute = compute;
    . r% \# r4 P6 M0 m1 U- p- C6 C8 A(*save)->waitio = waitio;
    ( s9 ]8 m1 h/ T. h(*save)->exchange = change;
    4 k7 X2 h/ F# h, u: M7 M' ?(*save)->completedTime = systemClock-(*save)->comeingTime;: Q' u/ Y9 @* V1 J8 y
    (*save)->runningTime = (*memory).p[0].runningTime;' d8 G* x3 U9 m/ n) Z9 U
    (*save)->completedTime = systemClock;
    ' o+ [; S% K) L( S# J2 {2 `//*spareMemory = MAX_MEMORY;
    3 W$ x4 ^: q& y, c" Bfree((*memory).p[0].ioClock);: j& @, I3 m. c" D) \1 ]
    free((*memory).p[0].computeClock);* C, B' c7 z- ?" T  ]
    free((*memory).p);, [" O7 Q- q3 E( t
    flag=0;
    - ]1 t) H+ a& `compute=waitio=change=0;8 }6 ?3 c' G! O! _8 H" N2 f
    computeLast=waitioLast=changeLast=0;
    1 V! Y; [/ O& E9 o9 y, treturn task_completed;
    $ G  B& {9 d- R4 j}
    ; D. r( _3 M$ U+ [& |: _}2 {6 E3 ~$ J. }# S5 }0 ?1 h9 r+ C
    else         % Y, o3 I8 u, K) B! {9 U
    {' ^1 M3 S. a+ v# H  }
    FIFO_storage_to_memory(&(*storage),&(*memory),&(*spareMemory));
    5 i9 F: M0 }9 d6 ichange += exchange_process;  L. z6 D/ O- X1 B' r5 ~* L1 s
    //*spareMemory -= (*memory).p[0].askMemory;' g% \" c7 \$ |* h5 `$ l2 B5 |
    flag=1;
    2 C! @! F3 h1 T# M, W//showProcessInf(*memory);" z. D& Y. p. V, P0 D
    return task_not_completed;: f& @+ H9 k2 e7 j8 z
    }6 g" [$ J8 ~9 R% l& r
    return task_not_completed;  |3 G% r* t2 G( _1 Q
    }
    1 R7 `4 C0 [; P; @int FIFO_storage_to_memory(processPool *storage,processPool* memory,int * spareMemory)' J0 M3 y7 P1 c% S
    {; z: U. _8 @& H7 k2 ^
    int i=0,j=0,k=0;
    4 D1 ~" |; i) G, {/ A, H7 GMAX_COMING_TIME = (*storage).p[initProcessNum-1].comeingTime;: l3 R# I) z7 c3 ?
    (*memory).p = (process*)malloc(initProcessNum*sizeof(process));
    4 `9 R/ A% H5 {/ Y" d: gmemory->proNum = 1;
    % O3 N  t9 @# G/ `2 k0 f; ?for(i=0; i<initProcessNum; i++)
    ; S* x* _6 i9 z{$ o9 o" _" H: N" f. q) P
    if((*storage).p.askMemory <= *spareMemory)9 v, ~/ K! |$ v& y; E: F
    {7 e! r7 \$ k7 H  O/ n
    (*memory).p[0].askMemory = (*storage).p.askMemory;  ^: J/ ^( z8 X6 |0 W
    (*memory).p[0].comeingTime = (*storage).p.comeingTime;
    / c2 S6 Z! N0 h/ G( x: ~3 Z; u(*memory).p[0].computeNum = (*storage).p.computeNum;
    2 e9 U# F; j0 K$ e. G(*memory).p[0].ioNum = (*storage).p.ioNum;0 t) b) q/ ?6 f1 q4 I5 J
    (*memory).p[0].processID = (*storage).p.processID;
    * d5 K, Y# w# v; n+ d(*memory).p[0].flag = (*storage).p.flag;4 ^/ Q1 y  h  K$ M; ^1 k
    (*memory).p[0].ioTime = (*storage).p.ioTime;5 ~$ }, Q" v0 t1 m! y- K
    (*memory).p[0].computeTime = (*storage).p.computeTime;8 c% [9 @) Z; A# q9 |
    (*memory).p[0].produceTime = (*storage).p.produceTime;
    ' h$ F4 Y& r2 V- Y8 l" {(*memory).p[0].runningTime = systemClock;+ l! v9 f$ |/ r+ r% ~
    (*memory).p[0].computeClock = (int*)malloc((*memory).p[0].computeNum*sizeof(int));
    ( O7 J$ g9 j& x- e* d: u% h(*memory).p[0].ioClock = (int*)malloc((*memory).p[0].ioNum*sizeof(int));
    ( ^, G0 L* H  f0 @, Ifor(k=0; k<(*memory).p[0].ioNum; k++)
    3 b9 q7 ]' m! L5 W4 x( d(*memory).p[0].ioClock[k] = (*storage).p.ioClock[k];7 d5 U! z7 @. L/ T
    for(k=0; k<(*memory).p[0].computeNum; k++)/ K: L5 s$ u5 T4 M$ ]  Z0 G, g' c
    (*memory).p[0].computeClock[k] = (*storage).p.computeClock[k];2 ?1 n1 A$ r$ Q2 ]; m) e% w
    break;
    . F3 H4 R: k0 K: o$ X}# t' Z) }7 `* s( M! \  M
    }
    9 L! B3 S( N% S( v& O1 Dif(i<initProcessNum)  //调用一个作业进入内存后,并再生成一个作业等待调入! `% v) E' x4 v2 i! H* ^6 ^
    {( @+ c* V* |+ u' i- l; m9 f/ M
    produce_one_task(storage,i,ID_FIFO++);0 E  e- k% G3 Q& I: L* ]8 \
    MAX_COMING_TIME = (*storage).p.comeingTime;
    1 x: V- h0 K. H2 E/ M! ?3 I4 b2 z$ Ksort_by_comingtime(storage,i);+ y/ V  D' b$ }* J( H
    }
    % g1 `3 H1 S0 }" c; i- z, Preturn 0;
    $ H. l1 N" Q% V, e}% V0 s5 t1 e; M, Q/ t
    int sort_by_comingtime(processPool * p,int pos)# S) V  q1 B7 r
    {
    : m2 Z5 F1 M( u( w/ Eint i=0,j=0;9 q1 c8 C, n9 Z' E
    process temp;2 X. A+ M/ M' K  ]9 @
    if(pos<0)* g# [& W" ~1 G
    {
    7 G2 Y* a8 ?/ @2 }% k% x( yfor(i=0; i<initProcessNum; i++)
    0 v7 z9 M* O7 u- p2 G3 nfor(j=0; j+1<initProcessNum-i; j++)) H- Z( Z$ y0 w# }. s- T' A
    {$ B  W2 ^- ^& V: o" \( _7 z/ \. ^/ U
    if((*p).p[j].comeingTime>(*p).p[j+1].comeingTime)3 Q7 O! Y# i: o0 J/ Y7 p7 Z+ C
    {9 ~/ v3 G/ J3 _+ o2 k1 v' T( x
    temp = (*p).p[j];
    ; a# ~  x, p- d1 j6 `3 ]0 |0 I) c* J1 ~(*p).p[j] = (*p).p[j+1];
    * P& A7 N" R9 U* |(*p).p[j+1] = temp;, d  \! `0 {/ L: B
    }
    : V" M5 g1 r9 X7 a6 i& u: |}
    % t% y* h! m. w! j# m}3 @/ H  K. ~' c1 p  w$ q
    else if(pos<initProcessNum)
    3 X: |% }2 h2 P{
    - X' _1 @- C2 H4 y* S0 k" S/ ~0 _for(i=pos-1; i>=0 && (*p).p.comeingTime > (*p).p[i+1].comeingTime; i--)
    2 V& Y4 S9 r# I1 e+ ^6 B{
    + {; Y: c; S6 Qtemp = (*p).p;4 @% S4 n; t, c, U/ L
    (*p).p = (*p).p[i+1];
    ) ]4 V* W- S( B. ?0 j(*p).p[i+1] = temp;
    . U2 F9 a/ \5 h! D$ y}, y: m; ]8 D$ g& E' ?0 |) L
    for(i=pos+1; i<initProcessNum && (*p).p[i-1].comeingTime > (*p).p.comeingTime; i++)4 A( n6 ?+ W6 c1 q& ]$ |5 c9 l
    {. c# _; U3 X1 i. P* q% s6 z  \
    temp = (*p).p[i-1];  H# P+ Q. Z  w' N7 j
    (*p).p[i-1] = (*p).p;
    7 L% i/ v' d# v4 ^% l) s( X(*p).p = temp;( ~# y- A( V' J( S0 u- z, q$ O& _
    }
    % x1 H6 ~/ l- q6 w}
    $ s( {! o0 K0 eelse
    0 A, S# ~2 r7 T1 pprintf("position eror\n");+ ]) S& C0 A  C( T$ Q
    return 0;* G4 \1 V( |2 T2 f- |
    }1 V) u; t7 H+ l/ N, O3 M- z. z) c! P
    int InitPool(processPool * p)
    ' m3 A* ^3 v; x; h2 x6 }{, G  A* j& q8 v
    int i=0;" d9 i4 u0 Y3 I8 u1 r! J) ~; c% ?
    (*p).proNum = initProcessNum;7 o( H+ P8 a: O( L( y& r! H1 m1 a
    (*p).p = (process*)malloc(initProcessNum*sizeof(process));& T( ]7 R: \. i4 j
    for(i=0; i<initProcessNum; i++)                                        //init process information6 s. V% z8 i8 ?/ e, Y
    {
    7 [1 g9 f) S+ y5 o(*p).p.computeClock = (int*)malloc(initclocknum*sizeof(int));
    % O" ^6 R% \/ L9 r/ [5 t(*p).p.ioClock = (int*)malloc(initclocknum*sizeof(int));
    8 j5 `" P3 g( qproduce_one_task(&(*p),i,ID_FIFO++);
    1 h& G7 x3 r( c7 M: K7 s" c" n& B}
    * a& m# h! G6 c# G2 x6 D5 @- ^return 0;. Z1 h# a% h& z" q- ~* f: P, B' S
    }2 G- @( s9 p- i/ f8 u( g6 C7 Q
    int produce_one_task(processPool * p,int i,int id)6 j1 c; ]0 ?0 i
    {2 G* L* z+ B* J! _) l
    int time=MAX_COMING_TIME,j=0,totallTime=0;
    5 f! e" X! ~0 q0 i% Z. L(*p).p.processID = initProcessID+id;           
    0 W  t) y7 l( ]% s1 h. x( a5 b, V(*p).p.comeingTime = time+rand()%(MAXProcessRunTime/5);( Z5 ]2 k+ A! [* T  u
    (*p).p.produceTime = systemClock;; ?/ [9 _/ C) E7 {' A9 H
    (*p).p.ioNum = rand()%4+20;                                        //IO number setting to 2--5;6 N: c! t1 |& ]% l, @
    (*p).p.computeNum = rand()%4+30;                                   //computNum setting to 3--6;
    9 A6 o+ Y, r, o# C7 FtotallTime = (*p).p.computeNum  + (*p).p.ioNum;/ c- d9 R+ o; c: B
    (*p).p.computeTime=0;
    % K7 @2 J  w5 `. y  l+ ?for(j=0; j<(*p).p.computeNum; j++)
    ' a) N5 q% g1 X# D7 Z{
    3 ~2 w! W& j. i: [# q1 f+ `(*p).p.computeClock[j]=rand()%(MAXProcessRunTime/totallTime)+1;1 b; H0 h9 V% Z4 Q/ A8 h6 w
    (*p).p.computeTime += (*p).p.computeClock[j];
    ) ^1 \4 D  L9 q/ F$ p' q+ ?}
    ; ?" f9 d9 S' u4 y3 Z(*p).p.ioTime=0;
    0 n0 T) t+ J0 T" _- }7 Kfor(j=0; j<(*p).p.ioNum; j++)0 p  r& \+ T0 t- ?+ K+ ?% k3 Y
    {
    * e1 c5 S* m- G( l3 |(*p).p.ioClock[j]=rand()%(MAXProcessRunTime/totallTime)+1;
    & ^, j" L5 ^+ y* P* h(*p).p.ioTime += (*p).p.ioClock[j];; m! g+ g$ c) m1 A
    }$ E+ t. f" ?3 \5 E# j
    (*p).p.askMemory = rand()%(MAX_MEMORY/4);9 R/ x+ @5 z4 q1 |1 M) e/ U9 ~: @
    (*p).p.flag = ready;
    3 ~8 I) g3 [& f' Creturn 0;$ _' O# W% t8 N* Q
    }, e  z) C* }: i) T: F+ J2 R' {& a4 C
    int showProcessInf(processPool p)
    ; G0 q$ {& d0 S# }% W; K4 o- x{$ |0 B  H- y8 n* P2 }( n- P% @
    int i=0,j=0;5 m7 d2 k* Z) O9 V" x* G0 }6 |( @
    for(i=0;i<p.proNum;i++)" O* R+ e3 u3 {" w
    {! @# R+ H- a5 s4 G! m
    printf("ID:%d,%d,%d,%d,%d,%d,%d\n",p.p.processID,p.p.comeingTime,p.p.ioNum,p.p.computeNum,p.p.ioTime,p.p.computeTime* X+ E& d  y. y0 q; ?2 ~$ z
    ,p.p.askMemory);
    ! j& B( s2 r/ c: h. x" ifor(j=0;j<p.p.ioNum;j++)5 ?- i0 X+ U1 q1 [1 j
    {9 q- U& n% @5 Z) T3 j. f, J
    printf("%d ",p.p.ioClock[j]);5 B, h7 o3 R7 e8 n% [7 K
    }  D5 @" n% y! u- A* T# g
    printf("\n");4 J" _" M. V; I! I  v
    for( j=0;j<p.p.computeNum;j++)6 K5 U* `+ ?+ K
    {
    9 u/ M9 F/ q" k* e$ u) Sprintf("%d ",p.p.computeClock[j]);3 j$ p, B0 @/ b: r; ^# W( c
    }
    ! V) u# ~! B* N6 tprintf("\n");
    ; n) I2 Z! i* O}; v9 W! U3 i5 M& r
    return 0;7 P3 J7 I8 N' ~5 \6 n
    }
    0 ^/ D8 V0 L) Z5 `, Q0 Q; {- i) V————————————————
    3 c) `% n' |) o版权声明:本文为CSDN博主「wang_dong001」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    " T' f* t. F7 G( v7 F原文链接:https://blog.csdn.net/wang_dong001/article/details/47843519
    + X6 |  ^: Z; a8 z! \; q* Z  {1 K9 {) s* Z; P/ {: ^8 ?8 m

    " ?" l- r! S8 |$ n" b9 ?
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-22 03:10 , Processed in 0.466377 second(s), 50 queries .

    回顶部