QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2496|回复: 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
    8 P# }. C) A/ o7 q; U% q
    经典任务调度算法的模拟程序4 q) x  m, O; g
    本科毕业设计写了一个经典任务调度算法的模拟仿真程序,测试了五种调度算法的运行性能。在程序中虚拟了任务的进程,按照不同调度算法策略从进程池中选取任务执行,在任务执行过程中,保存相关的统计参数,最后对这些参数进行处理,反映各个调度算法的实际运行性能,程序中可以通过修改任务的相关参数改变任务特点,测试不同任务环境情况下,调度算法的性能适应性。程序是通过C语言编写的,为了对运行结果图像化,采用了EasyX的图形库。由于计算机中实的任务调度过程比较复杂,在实验中为了简化程序的实现,在某些方面进行了特殊处理。
    $ i3 W4 s/ \+ H1 }
      c3 _$ W( s( c/ o编程平台:VC6.0+EasyX图形库环境。, I& N0 d( ]1 o9 f+ I
    6 F: e5 u& W. I% k9 t- _
    以下截取部分程序运行图::
    ( G) ^3 r) C0 x/ ?0 s8 Z  d+ t' ]# w* Y/ }
    源代码:
    * O. p- l5 q! S: C+ g! g5 Q% L9 O% K' j" f  k' P4 p: S
    #include<stdio.h>
    8 x& N% f3 I% k" j: [1 Z#include<stdlib.h>, G; H7 f& n% e- ^* x( e' V
    #include<easyx.h>: v% [/ w" \2 n3 w+ [4 X: @
    #include<time.h>
    $ ?7 K/ M! }( l$ O#include<conio.h>( J  ]5 P" \8 N2 M; x
    #include<graphics.h>
    ; d9 \5 R9 Z% w: X#define initProcessNum 10
    % V. V' Z. O% j, H+ b#define initProcessID 1000- s5 Z1 r4 J. P3 R5 y6 [# K! |
    #define MAXProcessRunTime 10000' [- p2 @. S4 {8 P# H* M7 n- u
    #define MAX_MEMORY  4000
    * s' D( ]& _1 r7 ~% j) o#define exchange_IO_Compute 10
    , D5 J4 q( M! `6 U- Z  Y- m2 U) E5 N#define exchange_process 25+ P; g/ s1 x/ M
    #define task_completed 16 b* T* h% U9 R
    #define task_not_completed 0
    # A: ~7 u9 N; R6 G1 K( Z  ~#define initclocknum 100
    ' S& N/ Q( o/ Z7 ?9 ?& Eenum condition
    , T0 g( T- A' D' g{3 R: ^8 J2 D4 B1 v  ^
    dead,computing,IO_waiting,ready
    / U% B! E) S- z' o# `+ l, U4 a# j% s};! L0 G4 N/ n6 U2 w, J
    struct process
    8 _1 g2 S+ ^! w/ t4 C) J{' ~! \9 A7 F8 S: H
    int processID;/ c0 {2 d! u' J. `; P. c/ S
    int comeingTime;  E( N( T0 Z) H" ^
    int ioNum;, F6 {/ f, R/ T: W1 E4 }
    int computeNum;8 z& O$ e( R9 [, k) X" B$ b
    int * ioClock;0 f$ l: w+ h4 Q
    int * computeClock;7 B1 \$ z2 Z" r
    int ioTime;9 F0 I6 z  u  E5 D5 ^
    int computeTime;8 B/ H& e0 \( `" V9 S
    int askMemory;
    7 [0 n: T% h' u  h$ E6 S2 C6 ncondition flag;
    . C. e/ B( J# ?0 ^1 ~: pint produceTime;  //生成时间,以下三个数据成员用以计算相关性能8 q' F1 k3 W* r- e' L9 z
    int runningTime;  //第一次占用CPU的时间" y! A3 s# T, A
    int completedTime; //进程完成时的时间: z( s+ B$ N0 q! H; D
    };" ~" m& |+ H! y. g
    typedef struct processCmpletedInfo  //保存完成一个作业的相关信息$ p2 h/ [; h+ {' V5 s- Z
    {4 ]5 Y- c* T1 P' W  v) f
    int processID,comeingTime,askMemory;
    3 k9 F* O# m1 r# d+ b0 O, O8 h+ D1 [, _int compute,waitio,exchange,completedTime,runningTime;( R7 n; V" I) Q
    processCmpletedInfo * next;0 K5 a. P  E/ J; J- g
    }PCI;
    8 f! M9 B/ Q3 j1 L1 |5 ]0 ustruct processPool
    3 J" |; \: w& T6 G: z8 m" K& ~{6 A4 Q' n& a1 f3 s- \
    process * p;
    % d5 Y8 k9 A. ]6 I7 F( eint proNum;& `! j; D" H: y5 p) D
    };
    3 A- K5 O5 }* o$ ?8 S, ^" j! Wint MAX_COMING_TIME=0,ID_FIFO=0,systemClock=0,FLAG_FIFO=0,FLAG_TT=0,FLAG_PF=0,FLAG_SJF=0,FLAG_HR=0,FLAG_show=1;# F& R! w% R' R7 X- q# |& {# j
    int InitPool(processPool * p);/ v9 M  \3 d- o: H7 z
    int produce_one_task(processPool * p,int i,int id);
    2 S: K6 Y0 \0 [! T1 k# K/ Rint FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw);4 u  A  E" [1 @7 n- m6 Z  ?
    int TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);. g8 W2 m9 o( G* {' L/ ~& Q
    int TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos);
    # P1 {6 t9 G0 oint FIFO_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);
    % {8 m' C' m: Z& I& R7 `" ]8 Q3 Uint ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
    0 U2 x0 N  b1 n" t) c" ^int SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);
    0 P; \, m5 O. P8 l/ K! i) nint PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
    1 x$ A2 a% [7 H* c* }int Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);
    6 L  M" r4 d7 g4 o) K8 d: q1 O/ dint High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int disatch);- Y# h. W7 s0 s  A/ p; b2 h$ N& @
    int High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
    8 T) N9 f6 \. |. _, S( `4 D2 X2 e+ J* X; V7 P1 w

    - y1 T6 _4 i. @' N5 ^7 ~int sort_by_comingtime(processPool * p,int pos);
    ) ?7 ]5 A1 n; dint showProcessInf(processPool p);4 m" C' M7 R/ E( y
    int drawPerformance_FIFO(int x,int y,int memorry);
    - ?5 V* j1 [/ w+ X" Cint drawPerformance_HR(int x,int y,int memorry);( j9 v  g0 o4 U2 x
    int drawPerformance_PF(int x,int y,int memorry);
    + i* Y! }" p. m5 Y& c! C( |int drawPerformance_TT(int x,int y,int memorry);
    $ G+ J! X2 ~6 _$ Z& pint drawPerformance_SJF(int x,int y,int memorry);
    8 j7 |! E6 p; ~: z, F# L; w; t- qint MouseListening();
    8 y: `0 g" e0 M7 Uint MouseListening2(int *flagShow,int * showTime);
    $ ~& i  d6 j1 E$ mint showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR);) P( _1 S# T8 F8 B

    1 O7 c" X  n- `- d
      E) {$ _7 ?9 I+ C1 v0 X. a- Xvoid main()
    5 p4 o' A# O- Z{
    1 @: D( d3 q. G; ^PCI* FIFO_save_head=NULL,** FIFO_pri=NULL,* Timet_save_head=NULL,** Timet_pri=NULL,* SJF_save_head=NULL,** SJF_pri=NULL,
    ( D2 X4 J" ^' B) P# ]7 u' ~5 V*Priority_save_head=NULL,** Priority_pri=NULL,*HR_save_head=NULL,** HR_pri=NULL,* p;
    ( k/ \8 k1 _" F4 R( {; K" u, q/ c3 Wint i=0,FIFO_memory=MAX_MEMORY,count=0,Timet_memory=MAX_MEMORY,SJF_memory=MAX_MEMORY,Priority_memory=MAX_MEMORY,HR_memory=MAX_MEMORY,
    ' D' l7 T5 Q5 C) Y# [8 |flagDraw=0,showTime=100000;
    6 [! r( G8 P( ^  |7 BprocessPool FIFO_p, FIFO_mmy,Timeturn_p,Timeturn_mmy,SJF_p,SJF_mmy,Priority_p,Priority_mmy,HR_p,HR_mmy;/ ~* z$ D; ~8 G1 r
    FILE *fp=NULL;
    + Z) i2 p+ |+ K" ]& r. d& H//processPool HR_p,HR_mmy;8 {5 G. M/ H; b1 |4 q

    ! I/ g2 q/ s; Q% Z- a0 t, Q- |6 j$ A) K' }7 x8 Q3 @! F
    srand((unsigned)time(0));
    6 G0 q/ R# s# bsystemClock=0;
    3 r' ^0 Q/ u( M7 H  Winitgraph( 1200,650,SHOWCONSOLE );
    * N2 k( d- R( e0 Psettextcolor(GREEN);9 W+ L- O2 f8 s$ e0 e2 f7 G
    setlinecolor(GREEN);# @, H. u+ G" }/ m
    setfillcolor(GREEN);! Z3 x6 p  B" V6 _5 M2 {
    InitPool(&FIFO_p);; `% g3 G" }; o" H# ^
    sort_by_comingtime(&FIFO_p,-1);: m% P6 t) k# [  v
    InitPool(&Timeturn_p);- U: i4 P9 E8 [. j
    InitPool(&SJF_p);
    , j) a6 f8 `! v. r7 P1 hInitPool(&Priority_p);
    $ [2 W/ e3 u+ `3 z7 RInitPool(&HR_p);
    $ d' j) F7 {7 U6 j8 f% b- D//showRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);
    ) T- O% j/ R; R//Sleep(10000);* g$ M- J8 E1 S) c5 K: s& g
    $ m6 z) p8 s5 l( w/ b9 w3 n

    ! b/ [1 v5 o. c2 z- B0 U2 h* G, KTimeturn_mmy.p = (process*)malloc(initProcessNum*sizeof(process));8 E3 k' n; o9 g; r8 Z
    SJF_mmy.p = (process*)malloc(initProcessNum*sizeof(process));
    ( h0 V  H( W. _9 q6 OPriority_mmy.p = (process*)malloc(initProcessNum*sizeof(process));5 ?2 b2 V3 t, ~: {
    HR_mmy.p = (process*)malloc(initProcessNum*sizeof(process));' Z( |; e' f5 H) U  a7 m
    for(i=0; i<initProcessNum ;i++)
    ) H3 `* }- D& d, Y- M5 W  w' T{& V6 T) ^( l4 a* A, q
    Timeturn_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
    % N- P3 R$ Y6 ?! N9 S4 J) h' ZTimeturn_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));8 X5 n+ A& i0 k2 p  v# C
    SJF_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));% D3 }7 m( }* Q* [/ e5 p
    SJF_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));/ U% T; U* _+ u) n/ h$ C
    Priority_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
    + A1 [; s$ d+ H. \$ P* a. d5 MPriority_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
    ( J, S! @0 |3 g; NHR_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));8 o- _" }+ G4 \/ r
    HR_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
    # u' ?2 ?& ^# X2 ^}5 z( M2 \, J- h% c6 n
    Timeturn_mmy.proNum = 0;
    ; ~# i# O0 n7 lTimeTurining_storage_to_memory(&Timeturn_p,&Timeturn_mmy,&Timet_memory,-1);3 X# V- p. x0 j& F- t
    SJF_storage_to_memory(&SJF_p,&SJF_mmy,&SJF_memory);
    " Z! N$ @& N  k' G0 w  PPriority_storage_to_memory(&Priority_p,&Priority_mmy,&Priority_memory);: p% a4 ^. s: |/ `
    High_response_ratio_s_to_m(&HR_p,&HR_mmy,&HR_memory,0,1);
    & G8 d9 x8 E* j//showProcessInf(Timeturn_mmy);7 h+ ~" i0 g; t
    FIFO_pri = &FIFO_save_head;" {4 Z7 m& N7 }
    Timet_pri = &Timet_save_head;& x# X0 g5 @! [' Q0 G
    SJF_pri = &SJF_save_head;9 W' Z0 X5 `8 ~( d# i; v
    Priority_pri = &Priority_save_head;
    * v; U/ B  m) ?/ T5 d3 S. t    HR_pri = &HR_save_head;/ i. u, N7 Z" S. \: V; R7 x
    setbkcolor(WHITE);; t; c" k$ L' P1 |6 V3 z% j" c: P
    while(1)
      @) C7 h- f$ R{
    + d4 P" D( S5 |if(MouseListening()==1): D3 J* `+ h( E+ S+ O
    flagDraw=1;
    5 @" t0 a. x- p2 N" C8 Cif(count==100), k7 A$ N. x9 _& J2 u5 n
    {; ^  N/ }% i, m7 r
    if(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,1)==task_completed). |+ e- _7 x6 F6 t9 `2 ]
    {% T. G+ ]$ u% v* E
    FIFO_pri = &((*FIFO_pri)->next);- m4 W- m5 O. J5 {- e+ x" @' s

    % [  }4 q* k' `: A3 k1 d, z  n//printf("hello");
    7 H* ~3 b9 H3 G2 \}
    / s0 C  p6 k( ^2 j2 |/ }5 Y  q6 Kif(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,1)==task_completed)" N4 K; l; u! A4 K. O+ T+ B+ L
    {3 u: \, V1 {. p0 G$ H
        Timet_pri = &((*Timet_pri)->next);; y  \) D& Y) e8 l6 R$ T: M% v
    //printf("hello");
    $ F. A0 A' @$ Q& J}
    & d, m" k  Q+ i+ k) {8 U6 n' qif(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,1)==task_completed)' W7 \" z& Q* M6 F7 j! S& y$ R7 F
    {
    ! H' b3 {6 l* j8 j* \: ~SJF_pri = &((*SJF_pri)->next);8 X6 ^& w5 t  F% _
    //printf("hello\n");# [* w6 A! t, G( |
    }
    $ x4 W6 j/ v. Dif(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,1)==task_completed)* m* K4 b8 F9 ^. i5 g/ }
    {) Q5 c1 v9 J$ M* Y% C" H5 G7 ^7 U
    Priority_pri = &((*Priority_pri)->next);/ n, v  {+ P6 S0 O# s6 m" I) [
    //printf("hello\n");# x( t& h% g" c" |% @( j8 q
    }
      x* N; k" A* \) {- Fif(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,1)==task_completed)) Z) S/ r) n# R
    {7 X4 g& |2 |+ M. e% `! O5 e/ S( Z
    HR_pri = &((*HR_pri)->next);( f+ {5 s1 C. D5 Y4 ]; l  ?
    //printf("hello");
    * T4 ~+ g; W2 a7 a  X}
    / |3 r4 [' r8 ^$ tcount=0;
    9 w: |# n9 g% o, j% Q4 W) _}- a4 _0 G/ f( w  e3 T1 ]
    else8 n. H; D5 g4 u
    {
    0 J5 X/ a6 _) Oif(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,0)==task_completed)
    9 S( l8 U6 S0 S- P{# s$ O) |+ H( o, h3 `5 T, F
    FIFO_pri = &((*FIFO_pri)->next);+ {- `9 N7 r% I) B
    // printf("hello");
    ( K% t3 K3 ?/ ?% P; N1 u3 E}
    " r2 \# `- y; n: h8 _& }+ `if(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,0)==task_completed)
    ; d8 L4 F5 I: A9 S% w3 V  c' T{' \0 S& I) [" u0 ?% o. v
    Timet_pri = &((*Timet_pri)->next);5 d" K: _& _& A( d! S* S% @
    // printf("hello");
    ; v. z0 v5 |! Z4 d+ E}
    0 t" I/ g4 ^" |3 y/ kif(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,0)==task_completed)
    # P3 P8 g9 c& J4 `+ K8 z{  ^4 w1 [& z4 I5 K# b
       SJF_pri = &((*SJF_pri)->next);9 p9 Y# x5 Y. ?  _. w
    // printf("hello\n");7 x4 u5 m2 J. {. H/ U" }
    }
    & g5 O6 w* H# O6 H0 Vif(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,0)==task_completed)3 U2 o8 C) @7 s& S3 m/ g
    {
    ! W/ E4 r" h% R4 F* E+ r" n  aPriority_pri = &((*Priority_pri)->next);
    % M, n* y* T$ Z% d8 L& @6 V. O. H//printf("hello\n");' k" `; |0 f  y8 y9 i1 z7 }
    }
    9 h2 ?* i, F) X- A# l/ j/ d; c* }if(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,0)==task_completed)
    # a1 f6 r9 ~: B{
    + F8 O& l0 T5 p( z0 H- h3 ~" DHR_pri = &((*HR_pri)->next);
    , v% K( j3 ^7 k; @- W$ m//printf("hello");. t0 q2 G) w% g( T% A# r
    //Sleep(1000);" l- @$ J% N2 E: \6 f7 u- ~( l
    }
    - D4 w1 ]" d6 ^& }; Z4 Ccount++;
    % _5 A" B: b1 w2 H9 j}; q, ^4 z: i9 f) t; b
    if(systemClock==showTime)
    , C! x; o0 h( D2 E, M' q{
    4 o/ Z8 Z. N9 G: L8 z$ L. K8 j/*PCI * p=FIFO_save_head;
    $ t7 k9 H- @# @int i=0;# z# ~8 Z/ O  U+ \9 T5 d6 m+ t7 {
    for( ;p!=NULL;p=p->next)
    ' V2 \& J4 z* q8 P2 S{
    6 j& C% v9 K2 C" M; lprintf("Id %d\n",p->processID);8 d& l- O$ L- ^1 {6 `$ e- u( Z
    printf("comeingtime %d\n",p->comeingTime);0 D+ a* w8 z) G. Y
    printf("runningtime %d\n",p->runningTime);
    3 e# g* a- W/ @( rprintf("asdmemory %d\n",p->askMemory);% \; ^9 A# o# u' |; W) G
    printf("completedtime %d\n",p->completedTime);0 p$ O4 x; `% o/ X% q+ T2 G
    printf("compute %d\n",p->compute);9 I" X+ E/ i' _; S! A5 V1 i
    printf("exchange %d\n",p->exchange);
    ( X! ^1 ]2 V: P. m" Zprintf("waitio %d\n",p->waitio);% p$ E9 k9 `: s! x
    i++;
    6 m$ x" u6 s' L
    / B" ~4 s5 K; v2 g1 S7 B* [
    2 z# E" [5 B5 k6 W( z}
    * X/ j6 K4 J1 }' ?printf("%d\n",i);*/
    . p8 e  Q1 \% B, w' a2 B: D- I. oif( (fp  = fopen( "data.txt", "a" )) == NULL )- |6 A  K( y( Z- B
    {
    0 K. k! q) K( x6 P, L9 Z7 M0 ^" Zprintf( "The file 'data.txt' was not opened\n" );
    5 [5 i! X: @6 ^& B//return 1;5 s/ I9 W/ K3 _& A0 i1 z5 e2 A$ a. h
    }2 G) n5 W  y4 o% J
    else
    3 ?/ N8 m" i. X: w* B2 p, q6 T; y{
    5 ~! M  P) F; T: I" J5 qfprintf(fp,"FCFS \n");
    % r1 g2 B. _. z& i6 I" Q5 Dfor(p=FIFO_save_head;p!=NULL;p=p->next)4 L6 a4 B/ m4 f! [! ^; r5 I0 N' n2 Q
    fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,: s% B2 A% b2 P! R' J
    p->exchange,p->waitio,p->runningTime);$ h; w- K1 Q: U( k3 N
    fprintf(fp,"\nTime turn \n");9 _4 O3 v- o( z8 X: o
    for(p=Timet_save_head;p!=NULL;p=p->next)
    8 a' _% s( _5 l8 j! a& pfprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,7 w6 b/ Y3 ^+ ~8 r% N
    p->exchange,p->waitio,p->runningTime);
    8 S: s3 ~8 X: F; ^' Vfprintf(fp,"\nShort Job First \n");
    " I6 L! A, y! W' L+ h7 z; y( t3 ~( Kfor(p=SJF_save_head;p!=NULL;p=p->next)& c- y; J- p, y! A4 g
    fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
      \: p3 {5 \  H# y  n/ K! X5 Pp->exchange,p->waitio,p->runningTime);
    ; u' \- h: L  Y8 J7 u0 @fprintf(fp,"\nPriority  \n");
    . j+ q0 G9 w9 w+ f( X# Mfor(p=Priority_save_head;p!=NULL;p=p->next)
    3 V1 Y) ?  h# }" [- j2 F0 W* z3 Sfprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
    " s) g* G0 k2 Q( |- ^p->exchange,p->waitio,p->runningTime);
      q* A; h! _3 k- |fprintf(fp,"\nHigh response \n");0 D) @# q4 U, r* }0 ?
    for(p=HR_save_head;p!=NULL;p=p->next)
    5 [- s" O7 |2 F& q' P5 O# G8 u1 L+ lfprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,1 @7 B( H7 T! @- i/ o. y( F
    p->exchange,p->waitio,p->runningTime);
    0 p) P, T- \; a) ^" e8 ^( m% Ofclose(fp);
    ( g# @* n! O+ |! m6 w& z}
    ) t3 Z$ U9 \% [# I6 z( }) p$ i+ `showRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);. j- |4 Q6 B, ^' U* |1 r2 G4 |) v5 U
    MouseListening2(&flagDraw,&showTime);
    0 U) u% p9 L" U- R2 c0 s) t6 T}
    , u1 D7 o) Q5 L0 G7 ~% N# ZsystemClock++;
    0 Y/ A, l5 [# r7 Aif(flagDraw==0)
    ( j$ f# V$ z4 w  Sleep(10);
    : j. j1 _4 ^7 z0 h$ h" @: ?}, q3 U% U1 }; t8 e) b

    5 G. u% ~: F5 k. a; s7 v; M$ P5 Y8 z0 Z% m% A# U. d$ K/ S( U& I9 z
    }0 q& O  o: H6 Z% d3 L) l
    int showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR)% ~" W7 l1 @+ P" L7 N1 S
    {
    ) H/ A( [2 m- A$ |& ^PCI * p=NULL,* name[5];
    ' ^" h: [1 @! D: ?& Cint count=0,i=0;
    5 \0 `/ Y9 m- }char ch[5][10]={"FCFS","timet","SJF","PR","HR"};$ p% E7 p! C' ]/ |, z. ]# T+ f
    double turnover=0,wait=0,c=0,w=0,change=0,pos[4]={0,0,0,0};
    & N4 A! _* G: k  \9 {struct info% a; i' T' c7 m1 m
    {
    , L- q4 c* s1 \char name[10];, Z9 y2 [8 j) o, g. `
    double throughput,turnover,wait,CPU_rate;
    ) z( G/ Z8 }5 ~) a}inf[5];3 V" S. n7 [; U+ U4 V
    name[0]=FIFO,name[1]=timet,name[2]=SJF,name[3]=PR,name[4]=HR;7 b- M/ C9 P9 M" t9 ~& Q* U; e' [, P
    printf("调度算法..........A\n");+ j$ ?6 {8 A  ~% I, y
    printf("吞吐量............B\n");
      R) L! w9 G+ D5 C4 E% i. U9 `8 Xprintf("平均周转时间......C\n");, W. F0 `, Y3 x
    printf("等待时间..........D\n");
    2 b2 Z/ c0 ?9 `; sprintf("CPU利用率.........E\n");7 v3 }' z$ Z# O* i- s
    printf("A\tB\tC\t\tD\t\tE\n");
    $ G7 Z" h3 S* h  Z- {: O. j  r+ _for(i=0;i<5;i++)
    3 Q3 y/ |- z' B! u{
    # d. X, ^8 @2 Bcount=0,turnover=0,wait=0,c=0,w=0,change=0;
    8 K: o4 H! W- B1 e4 q% ~  A& k+ qfor(p=name; p!=NULL; p=p->next)
      g2 m+ f/ M- X9 Y/ D" |{
    0 \- n( Y/ Q; x6 U5 \- |6 B4 [# Hcount++;
    0 G  Q3 b. ]7 D3 E, hturnover += p->completedTime - p->comeingTime;
    . s+ ?& X7 _( y' G; ]wait += p->runningTime - p->comeingTime;
    ' d" M7 K( l/ X- p% ^c += p->compute;( P) L+ w2 K7 o. O% \- X" Y
    w += p->waitio;
    ) [: G0 @" u. Rchange += p->exchange;5 @9 f3 |- M0 ~, O  _6 S
    }! A+ [7 y* P2 f1 x
    turnover = turnover/count;" [+ R2 E  {: `3 C2 Z
    printf("%s\t%d\t%.2f\t\t%.2f\t\t%.2f\n",ch,count,turnover,wait,c/(c+w+change));- L% I. y7 u  I. z$ x: v$ b
    strcpy(inf.name,ch);
    1 J, ^1 o* ?5 s7 Q" Y! h% S5 v" Einf.throughput=count;6 {, Y+ C" u: \/ h
    inf.turnover=turnover;! X) S4 m: k* I: N# _, w. P9 w  \
    inf.wait=wait;
    : @7 h& I, [, D: D$ kinf.CPU_rate=c/(c+w+change);
    ( A5 j* ?1 b$ R8 Y7 n* D}+ T3 h' K* e% @0 j" L
    //画图# M. F( ^7 k( c2 `2 p7 Z$ y2 F
    //cleardevice();) v, A3 l7 i1 `* S/ l5 e
    line(0,600,1200,600);: s/ _) y1 C6 ~) z0 r, f
    line(10,600,10,200);
    5 f) p' Y) a  ?$ n( Qline(10,200,5,205);
    5 u4 F  i& D0 u9 Fline(10,200,15,205);9 @4 c8 a  {6 |0 ^2 N
    line(310,600,310,200);
    ( ~9 Q( u; K3 X% ]$ E8 o2 U# I* Cline(310,200,305,205);$ s( ?) l; g7 B' T# l. u
    line(310,200,315,205);/ P3 m! U. q5 `
    line(610,600,610,200);1 _& s9 N# K: S! V
    line(610,200,605,205);, Q9 f7 f% u9 C* K  @$ O
    line(610,200,615,205);
    ) K) g6 v4 q9 z$ \line(910,600,910,200);+ C0 m  {1 w! J3 h1 a5 A- }
    line(910,200,905,205);
    " |( h" p1 n* xline(910,200,915,205);//最高的长度400,宽度均为40) u3 x5 |. P: `3 x9 D: s3 @
    for(i=0;i<5;i++). p% h9 P7 i! F( o
    {
    9 S% \! D2 m- u2 f% }; P, Uif(inf.throughput>pos[0])
    2 E! C1 _: h) D. Lpos[0]=inf.throughput;
    ( N" q8 n4 c6 ?7 m$ Yif(inf.turnover>pos[1]). A4 V& }; I7 m! l+ D/ o
    pos[1]=inf.turnover;2 F3 a5 s9 Y1 \! M5 q
    if(inf.wait>pos[2])9 E8 P  a7 e3 i# `8 {8 ]- x
    pos[2]=inf.wait;8 c9 U/ q' B. Q) V7 [
    if(inf.CPU_rate>pos[3])! p& q# g% ?7 @9 ~6 }/ x1 \
    pos[3]=inf.CPU_rate;
    " d3 k# {6 v1 G- F! ^8 E9 }' E}
    9 j3 c6 l3 w9 y: C/ rsettextstyle(30, 15, _T("楷体"));8 M) @- z  T4 y- ~" f
    for(i=0;i<5;i++): x7 q5 g7 {: ]0 a% l& R
    {1 O% V# }* j8 f& n, o
    switch (i)
    8 F8 B4 J4 u% K. w* J7 w) g9 a! @{
    " o) R) O7 h% ?0 h3 _- Ycase 0:7 O  ?/ M6 M" w9 p, k
    setfillcolor(BLUE);
    / K# j& O1 S. p& [4 E% ~fillrectangle(100,50,150,100);
    - H/ b! ]: v  n. N! @. K1 k4 x) touttextxy(160,50,"FCFS");
    6 ^; {  e2 k9 W+ V5 Z+ R. x1 bbreak;- O1 c1 q7 R) e( L
    case 1:
    : v/ I  w  y( J+ `* _% O; s' y* Csetfillcolor(RED);# S/ N9 D% F/ c* l( N! l& X. b  I
    fillrectangle(250,50,300,100);* C# i# y2 A! B
    outtextxy(310,50,"timeTurn");
    5 p# s# }6 B. ubreak;
    , K; L, q( ]# O% S5 Vcase 2:9 K* O$ E5 `5 N- Q' i$ n% d
    setfillcolor(YELLOW);
    0 U9 V" d: X2 Z6 Tfillrectangle(450,50,500,100);
    - Y+ {* t2 g2 Vouttextxy(510,50,"SJf");2 m$ O( `4 A- d3 f
    break;
    ! @' s- {. ?9 N" F" ycase 3:
    - }/ ~: ?9 L4 Bsetfillcolor(BROWN);9 Y: t2 F+ r) U) t' ?* a
    fillrectangle(580,50,630,100);" I3 E5 F" K3 i- O
    outtextxy(640,50,"PR");
    8 r# Q- W5 ]1 }/ s( E+ ]' U0 obreak;3 n3 T! r' z9 I) x2 G8 m
    case 4:
    4 z0 h7 y/ ~& c$ R; Y1 p* w1 U7 csetfillcolor(GREEN);
    * z- }$ Y1 U1 E5 v3 E2 {fillrectangle(690,50,740,100);. C) `' F- ^4 L- R) X
    outtextxy(750,50,"HR");) I% A6 r3 M9 H
    break;% ^" `# k' k  ~+ }: W6 ?
    }
      m7 f7 `, g$ @0 ]$ hfillrectangle(50+i*40,600-(int)(inf.throughput*400/pos[0]),90+i*40,600);
    . j) S$ o" _  u/ {2 R$ afillrectangle(350+i*40,600-(int)(inf.turnover*400/pos[1]),390+i*40,600);5 k/ i5 s0 |! z4 h; i3 r) b% V7 z( l
    fillrectangle(650+i*40,600-(int)(inf.wait*400/pos[2]),690+i*40,600);
    / c& J3 u  M$ `$ M- ~fillrectangle(950+i*40,600-(int)(inf.CPU_rate*400/pos[3]),990+i*40,600);
    $ q* u. @2 f$ T/ {1 _
    8 m0 ?* t0 n  P- h2 }( I& J! {5 I2 R
    }0 s$ I. h* N* P! D/ R) p
        outtextxy(100,150,"吞吐量");) s1 C: F/ f" v: T! g5 A! s1 S
    outtextxy(350,150,"平均周转时间");
    5 }' z# E& F5 `$ Q7 \outtextxy(650,150,"平均等待时间");
    8 b! u6 E6 |9 Z" Kouttextxy(950,150,"CPU利用率");& N6 \  ]+ e( K+ F" \
    return 0;* |9 z/ D5 _8 c0 L( V
    }
    5 p. R" ?/ B2 t- I& O/ Sint MouseListening()
    ) D' Q  D3 D3 \* T{% d; A, ~. S( |. Y' q
    MOUSEMSG p;
    7 N7 ~# E$ L8 a+ o9 C& Z% _if(MouseHit())1 w' A& J- E$ `% s" E3 e, m
    {
    + D3 {8 M1 U8 T8 r) o& y* m* Gp=GetMouseMsg();
    - p+ I. o% t! e  r, v( P( }4 xif(p.mkLButton==true)2 R' Z; K  S! e0 _
    {& z' A( g1 `# q
    if(p.x>0 && p.y>0 && p.x<400 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)7 c( C  U* f6 N4 `) t7 E. U" \
    FLAG_FIFO = 1;
    5 ~# x7 I( w3 w. H- f% Celse if(p.x>400 && p.y>0 && p.x<800 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
    ) l# a7 l, V& b! E' `FLAG_TT = 1;
    8 ?* Z2 J- \* [else if(p.x>800 && p.y>0 && p.x<1200 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)% x; y0 \  |" C$ k% j5 F
    FLAG_PF = 1;6 Z& w4 Y4 }- |8 ?6 L3 a! l
    else if(p.x>0 && p.y>325 && p.x<400 && p.y<650 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)8 J$ v6 Z7 V3 @. h5 |
    FLAG_SJF = 1;
    * m. [' s6 ]9 ~, `1 ?7 pelse if(p.x>400 && p.y>325 && p.x<800 && p.y<650 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
    / g- r( k" I9 N: o7 F3 k, [FLAG_HR=1;
    4 ^* f' Z  C. I0 n: M0 f! Nelse if(FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO >0)
    7 w0 l9 _% j& W. g6 x" R{' n3 a5 Y& m3 T- }+ q" \: w6 j
    FLAG_HR=FLAG_SJF=FLAG_PF=FLAG_TT=FLAG_FIFO=0;$ e" D1 @  n; v" @. X5 R) V6 F
    clearrectangle(800,325,1200,650);
    * N" h! u; g/ c0 c+ B7 v}6 L% X# A- n+ t! _, y% m+ H
    else if((FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0 && p.x>890 && p.y>455 && p.x<1110 && p.y<510 )
    # K8 v3 f1 O, a{! m. j7 K( L" t6 a% d0 u9 F
    FLAG_show=0;
    & x/ ]3 H/ ^8 e4 T7 }+ ^+ ~6 Xcleardevice();
    + s. g& M0 j' S# F) Sreturn 1;6 O7 ^) N! L0 p2 B7 l( R
    }9 A0 v8 r* W" H- ~7 q+ D6 q) f
    }
    ' [; E. r+ s# N8 a7 P) X7 G}
    % |5 e! G& l- t) Kreturn 0;0 N, C; |2 \  N: ~4 o& C
    }
    - E& a) `5 N2 U& x$ l' D) ]int MouseListening2(int *flagShow,int * showTime)
    - z- ~0 L+ s1 L  a{( K; ]' T) \; o/ |% E2 i& Q) A
    MOUSEMSG p;
    . }, u# R" ~0 Q5 H) @rectangle(1150,0,1200,50);
    4 g0 |4 ]1 B$ m" louttextxy(1160,10,"X");
    5 C8 {( v. A8 L8 gwhile(1)
    , F! Z. d% ?. N( M0 R! J2 a{
    ( p6 M$ @) W7 C* Cif(MouseHit())
    " v$ d3 b: I5 ]; o{) ]* s! w3 @# C1 V( v7 Q
    p=GetMouseMsg();
    / Z; O- c$ M+ Iif(p.mkLButton==true)1 ^' c5 i" z2 i
    {2 W8 ~3 v; B/ ~4 M, ?* v, Z
    if(p.x>1150 && p.y>0 && p.x<1200 && p.y<50 )% ^0 U% `6 w# A" d  g9 j2 q
    {
    7 C, D& I$ L3 {7 ?" Z(*flagShow) = 0;
    , O* F3 M' [9 t  v  m1 k- B(*showTime) += (*showTime);
    % A/ v5 U5 h+ G$ LFLAG_show=1;' M3 m8 t/ S0 @: z  k1 [: `" T" R
    break;2 A9 p/ l5 H3 v# ~0 D9 I5 M
    }
    9 _4 {* Y0 c) ~( e  G* [3 t/ J* p/ A8 @
    }5 w1 w3 @; b; @
    }1 F! X0 ?) z& v& u
    Sleep(20);# j  N- X+ }0 ^, P# y
    }
    . R: |' t" Y6 n$ W% c2 U& E1 [% ocleardevice();, h5 P( A% A/ l
    return 0;+ Q( Q+ C* e4 I! C% j" `7 g! S
    }% H# w- V5 g$ v. B& x
    int drawPerformance_FIFO(int x,int y,int memorry,int com,int wai,int cha)
    " J- B9 E- t) g# N* _. m7 Z3 m* w{
    1 g; v" e( B9 Y( K- |$ S, estatic int info[11][3],num=0;
    ' H" f2 j8 z) k; F( Cint i=0,j=0,pos[10][3][2];5 {. q9 f, l& u
    float temp,t;- z/ \8 L' I9 J% Y5 J$ a! N1 r# P
    //画按钮,不属于FIFO图的范围8 W! Z$ A2 \9 g; L" \  F
    if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0 && FLAG_show==1)8 Q1 M+ A7 }2 F1 f  B, F' Z) `
    {) {; _8 D# B1 B1 M0 ?: N- N$ ^& \
    settextstyle(30, 15, _T("楷体"));7 @1 a1 {2 d/ _) ~% t
    rectangle(890,455,1110,510);+ w" m( I6 |$ a
    rectangle(900,465,1100,500);- t+ H' L1 J$ M: W
    outtextxy(910,468,"查看运行结果");% R# x6 v! _5 s7 f- x7 o9 d5 j
    }
    9 {1 C6 @4 h" z//结束画按钮
    * l8 q' [* d( Q' \info[num][0] = com;
    . g6 t' G# s) q9 finfo[num][1] = wai;
    7 K1 x/ ?# J& S/ r; l. R! _info[num++][2] = cha;
    & u8 M7 q- k2 X/ a- z4 lif(num>10)  //存储10个点
    * F/ C4 }; I* k{5 t; G7 [  \) _4 k( G, G
    for(i=0 ;i<10;i++)
    ; y; M' `" {) F  i{
      p; H, x  w+ _( ^% Kinfo[0] = info[i+1][0];
    : J/ v2 n4 O# T5 q  dinfo[1] = info[i+1][1];4 J# t' L  D0 w( b% _" |/ s
    info[2] = info[i+1][2];, `+ k* E+ e! P
    }7 }9 \1 W* B/ @. v+ S2 f
    num--;
    * z; m9 q) A, s2 s}' Z( [4 P1 ]9 N" u* n% L$ a7 \, w" S
    if(FLAG_show==0)
    % Y4 D- ^. h6 Wreturn 0;7 g6 h7 m$ P. z" T* v' J) ]& c
    for(i=0; i<num; i++)- R" t6 t: j# F: j$ M7 l
    {
    # J! s: Q) p! [& q1 ~1 O, M" |: o+ Lt = (float)info[0];! A5 V9 _% A+ \
    temp = (t/101)*90;
    5 A/ h- f5 q7 F2 A, A& }* apos[0][0] = (10-num+i)*25+x+100;  m3 M2 D; c. D0 X. J
    pos[0][1] = y+110-(int)temp;! D$ j+ V$ y- v: F1 Q7 F; ^
    t = (float)info[1];
    / n- C+ C; K0 _: ?- a( U2 itemp = (t/101)*90;
    ) b% x( `- j5 R; ipos[1][0] = (10-num+i)*25+x+100;8 T5 ~+ b; w* B. {4 s8 O
    pos[1][1] = y+210-(int)temp;' r6 u2 a$ X* G- r8 T8 Q& |0 L7 R+ |. X
    t = (float)info[2];3 G% \9 T' P! S& }  H6 i" L
    temp = (t/101)*90;" F8 h6 E6 {# o  X1 x4 y' r6 n1 B
    pos[2][0] = (10-num+i)*25+x+100;8 u- {4 |/ c) x& `. t" S$ J0 p! h
    pos[2][1] = y+310-(int)temp;; `& |" X1 p9 Q0 u7 O- ^+ `
    }( k0 S: ^& `: ~7 b$ V
    if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
    1 F& e& c- W( H+ B: r8 ^. p{
    . C% x4 b" A: jclearrectangle(x,y,x+400,y+315);+ Q" \. ~( X+ h  [  Z( n# ?% H
    settextstyle(20, 10, _T("楷体"));$ K# b$ P( g$ y$ v8 l7 h! y
    rectangle(x,y,x+400,y+325);  [0 ^2 Q$ y) O/ q* D. ]# V
    outtextxy(x+40,y+10,"CPU");       //画柱状图
    ' _9 @+ i9 q( B' k1 t7 m8 \outtextxy(x+45,y+10+100,"IO");- Q9 y3 F# [1 l7 t. p
    outtextxy(x+40-15,y+10+200,"change");
    * o( i2 u$ {& F8 x) x. N0 Zrectangle(x+35,y+30,x+75,y+110);
    4 Q" P  |( C% i  T) P! Frectangle(x+35,y+130,x+75,y+210);
    7 A( p0 d4 L: F9 |rectangle(x+35,y+230,x+75,y+310);6 r- `8 U" u, `5 b* h+ B) ~/ T
    outtextxy(x+180,y+310,"FCFS");
    * d8 B$ x' w9 R0 ?: P6 E. rt = (float)com;6 x7 @0 Q( a2 s: H' `
    temp=(t/101)*80;9 c, `+ I& s5 y6 E8 T0 I  L
    fillrectangle(x+35,y+110-(int)temp,x+75,y+110);  j6 u( v& u. Q6 X. L
    t = (float)wai;9 v) k6 b7 s! n; k
    temp=(t/101)*80;9 w9 v0 p* ^2 j* s: j4 g2 c- i, R" A
    fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
    2 y% i1 |7 q- N$ jt = (float)cha;% |' P9 z/ C* M0 D# i
    temp=(t/101)*80;
      [2 B1 Q- b8 i4 ^; ~fillrectangle(x+35,y+310-(int)temp,x+75,y+310);! a3 i1 F& U4 A+ l! @/ f: b! @
    for(i=0; i<3; i++)   //画坐标   high=90,length=2507 L4 I* _  \: E% q: n" i0 e
    {
    $ _/ s# J0 h' \3 C, aline(x+100,y+110+100*i,x+350,y+110+100*i);
    - Y) s) B( M3 Z5 z! Q3 C  @- G$ Nline(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
    $ [+ j9 l5 }+ aline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);* O7 W4 b' ^% T+ Z" x$ h

    # u/ ^- n. }. lline(x+100,y+110+100*i,x+100,y+20+100*i);! f8 v2 `3 X6 c8 @
    line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
    5 F; }+ Y) q3 F, P0 lline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);3 s7 T6 u8 z$ m6 z8 e* p
    for(j=0;j<num-1;j++)4 r) h" X/ o5 y- A) H
    {
    ; b$ O/ r- \9 }. Uline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);, e" O2 c( @+ a: L* o3 q4 C6 @. R, ~
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);- C& Y3 `: `( Z9 Z- \- g* Z5 h
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    / k4 d9 I" Z7 C* e: \( T}
    1 `/ r1 |) w6 J, a7 O& \3 R}2 N) F. f* z5 D  [4 V# n
    }
    / G$ d9 F# S! Melse if(FLAG_FIFO==1)
    9 j' Q* W. Q: f9 U. e{
    ; b: e- z* N- Xx=0,y=0;
      V; x# [/ C" O9 M' ~+ Nfor(i=0; i<num; i++)
    0 p1 O( x: o0 P3 [: z{
    + \5 T) T8 g  v& g  ht = (float)info[0];$ w$ _3 e! \' s
    temp = (t/101)*180;
    : v7 r0 ?3 x, r5 v: M8 Fpos[0][0] = (10-num+i)*50+x+650;5 d" S4 o- K+ z) R) Q  \; R
    pos[0][1] = y+210-(int)temp;3 V' {/ k% o& q5 N5 |
    t = (float)info[1];0 `! k2 U( A* Y2 `4 [6 ?$ u! f
    temp = (t/101)*180;1 T" e& M% x4 L0 U; `
    pos[1][0] = (10-num+i)*50+x+650;$ Y3 \+ t/ f% `4 i6 ~/ ~5 I4 f( i
    pos[1][1] = y+420-(int)temp;
    ; z' ]' D4 i& J* y9 p0 Lt = (float)info[2];! e# [% |; ?' t
    temp = (float)(t/101)*180;
    + h' J: S" y) ?( ?2 V& g+ }3 h5 w/ F( zpos[2][0] = (10-num+i)*50+x+650;  X5 l6 T- s% n3 @
    pos[2][1] = y+630-(int)temp;2 F. ^& x- S6 p, @0 x, S9 y  r
    }
    3 o! K/ R( Z! T, }2 uclearrectangle(x,y,x+1200,y+650);
    4 E3 W9 Q2 E- n: @settextstyle(40, 20, _T("楷体"));
    ( q/ x& Z; R* J" c0 M( b6 \outtextxy(x+50,y+50,"FCFS");8 W1 ]2 u$ z; e( f# A" r: l/ N& ^, h
    outtextxy(x+280,y+20,"CPU");       //画柱状图
    ' s& |% m  ?7 touttextxy(x+285,y+20+200,"IO");& ]% v9 i% Z' J- ?3 b9 F
    outtextxy(x+250,y+20+400,"change");
    + d, N0 a3 j$ Q: ~( R$ hrectangle(x+270,y+65,x+330,y+215);
    4 g9 Q! S! ~0 i* D% z. orectangle(x+270,y+265,x+330,y+415);
    ( H* U6 `' I$ @8 b+ O. ~7 {( trectangle(x+270,y+465,x+330,y+615);
    4 j! {5 l8 {3 C1 R# p- @  [outtextxy(x+290,y+620,"TT");: m5 k+ H; @2 I; e
    t = (float)com;$ k, Z' T$ N6 s7 ~
    temp=(t/101)*150;
    & V* |! c# A( N7 x; Bfillrectangle(x+270,y+215-(int)temp,x+330,y+215);, F$ {2 |3 e0 i, g1 n  e
    t = (float)wai;
    1 L: H# d  c/ Y5 `3 ttemp=(t/101)*150;
    0 f4 H) n6 j) u" |8 ?/ gfillrectangle(x+270,y+415-(int)temp,x+330,y+415);4 M( S& W) H+ g  y- z  N
    t = (float)cha;
    - D" t3 C7 }+ N: z! E0 C! X8 mtemp=(t/101)*150;% h* ~" ~! |9 O" A
    fillrectangle(x+270,y+615-(int)temp,x+330,y+615);
    8 v' f' P7 N# D( u: Y' W* W4 Vfor(i=0; i<3; i++)   //画坐标   high=90,length=250
    % t1 o3 I! |6 A: v# C{
    ( [0 q7 s' R8 H" cline(x+650,y+210+210*i,x+1150,y+210+210*i);8 k0 X: K4 }; a' I
    line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);& L( R. V- ]7 m  V( H  J8 \
    line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
    # Q3 K% b# \- J6 j) q
    6 x% c  _+ p7 v' ~2 X9 c4 W7 ^line(x+650,y+210+210*i,x+650,y+20+210*i);) w" H9 Z' ^7 p: R: o1 r# J0 `7 Z
    line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
    8 M4 `/ X$ ~' [5 `9 lline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
    6 Z- g. e3 Q' u, [7 kfor(j=0;j<num-1;j++)
    1 d1 w+ C+ G2 E. v/ B9 e{6 |! e3 D1 ~/ ]2 I- b' o$ ^& l" q
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);' A4 ~1 `2 w" ^! p
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    * J8 [) U3 s; @9 X9 N' k! A- M7 qline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    4 [  J$ i( m3 J* ^7 O4 S+ f}# a* {' y- q" U4 S& C1 T; u$ D0 R
    }
    * o$ e! V! I9 K9 D}
    9 e+ d. p% R, b$ e# C5 z6 Y1 I: B
    $ M6 o" Y7 d( `  P
    : ?0 ]4 [. J7 z- rreturn 0;
    5 C  u$ `" |  R% Z}
    6 Y- f% U+ r( u9 Y, t, r0 V: V5 ]int drawPerformance_HR(int x,int y,int memorry,int com,int wai,int cha)/ y) ?, h- e" v/ \5 P% J" M
    {
    + |& c3 \1 c1 y, g/ B4 `8 q: Astatic int info[11][3],num=0;
      A* v8 g6 V! ~4 ^, p# gint i=0,j=0,pos[10][3][2];
    ) x1 R0 J  ?" m0 Pfloat temp,t;
    - s0 `9 o0 f, ^info[num][0] = com;; V5 C$ q6 t! r% {- V$ G: `
    info[num][1] = wai;
    , f' w; K3 M0 Vinfo[num++][2] = cha;  `2 x- Y% c8 w2 U. t4 l4 z+ V
    if(num>10)  //存储10个点
    4 i7 A9 ]9 z/ I3 e# K: o{' E! U& {; B% F: X0 B9 |
    for(i=0 ;i<10;i++)9 F5 B4 `- m, g; Q5 P
    {7 b1 ~# X/ |2 L$ ~. c, ^4 U0 D8 a
    info[0] = info[i+1][0];
    / D0 F0 z8 P0 |* O/ Rinfo[1] = info[i+1][1];. R& K# w* ?6 T7 D2 s
    info[2] = info[i+1][2];
    , z. O' G1 b2 x$ U}
    $ t+ z' A8 x& w% j/ ?num--;
    ; x2 Y* l4 c: n}6 t+ J; l/ W; z9 _% Q% v9 w7 B
    if(FLAG_show==0)& Y$ A. O4 h1 J3 D
    return 0;5 i. N# |- R; \: K  ]
    for(i=0; i<num; i++)
    + ^! f8 y2 \' U; k{
    8 U6 }2 J) d/ g; P+ [0 T7 f' X; r$ ot = (float)info[0];
    0 h/ \) v3 K1 h1 I, h3 a0 K9 j! wtemp = (t/101)*90;
    4 @" E& }; G: B6 s4 z8 |2 U, p; tpos[0][0] = (10-num+i)*25+x+100;
    + n+ n: B: c, W9 S9 F7 [# z5 N4 fpos[0][1] = y+110-(int)temp;
    , f4 W$ j% T4 ^3 ?" Nt = (float)info[1];3 [' A; k; Q: X
    temp = (t/101)*90;$ T  T5 x; I8 y0 \; n
    pos[1][0] = (10-num+i)*25+x+100;3 \5 S- C* y8 Q' d7 P
    pos[1][1] = y+210-(int)temp;( x5 @- }. @! u
    t = (float)info[2];
    5 B& J6 q3 ~; W( d: @! ^4 ^temp = (float)(t/101)*90;
    & K! s4 m6 C5 W* u: ?pos[2][0] = (10-num+i)*25+x+100;
    * c& L* w+ q! u; P- d7 S9 `( m# S: b4 Ypos[2][1] = y+310-(int)temp;6 u% m8 W4 `/ R! M; m% U
    }
    4 p. ^0 f* F$ f, Y. z0 f1 \if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)% d8 X- x  J" n  F* O% z
    {
    / O0 V) T( G5 p; M0 Z6 @clearrectangle(x,y,x+400,y+315);
    + G7 H( D; v/ R" q9 @settextstyle(20, 10, _T("楷体"));& T9 y" e! h3 i0 x+ p& d/ x
    rectangle(x,y,x+400,y+325);9 T. c8 U4 U2 Z8 j) K
    outtextxy(x+40,y+10,"CPU");       //画柱状图
    9 _/ R8 u* m9 G# l1 r% b: p8 Iouttextxy(x+45,y+10+100,"IO");
    . _1 F( B; ?& S  f( Aouttextxy(x+40-15,y+10+200,"change");
    & _6 }. g. V/ Qrectangle(x+35,y+30,x+75,y+110);* g0 A' O) I; v: L
    rectangle(x+35,y+130,x+75,y+210);: z: [: Y" x% P
    rectangle(x+35,y+230,x+75,y+310);  N; Z" X6 A/ I, R0 P9 O
    outtextxy(x+180,y+310,"HR");) u4 `* a3 x% x# A6 D
    t = (float)com;7 z$ A2 A* n$ I& N/ `$ p, s% z
    temp=(t/101)*80;1 i6 y7 I' C8 Z. n6 R; A
    fillrectangle(x+35,y+110-(int)temp,x+75,y+110);$ M- S8 |; {/ N
    t = (float)wai;* V" R5 W9 Y( W
    temp=(t/101)*80;
    / m6 q3 t+ r2 H& r6 g" {fillrectangle(x+35,y+210-(int)temp,x+75,y+210);0 F- j, D6 U" g- V( V
    t = (float)cha;0 d0 r3 j* W( P+ |2 n, A
    temp=(t/101)*80;
    ! u) O( d- P, U$ `. dfillrectangle(x+35,y+310-(int)temp,x+75,y+310);5 r0 L5 ?' s2 x
    for(i=0; i<3; i++)   //画坐标   high=90,length=250
    # X3 z; W, n( D- v4 f6 e{
    * X; H- J+ ~8 l  f- p/ Q/ G0 x5 ?line(x+100,y+110+100*i,x+350,y+110+100*i);/ J" I) R9 O2 G
    line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);" \( Z( J6 _, n6 M5 ?* e
    line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
    & E$ Y" \2 Z$ D% v2 _+ u3 D- _1 q2 W! l* F  Z; d0 p
    line(x+100,y+110+100*i,x+100,y+20+100*i);* k* Y5 C5 V& a* l$ _
    line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
    # L7 \9 `( b2 |' jline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);/ B$ s) G% J) O
    for(j=0;j<num-1;j++)
    ! s' m# |( N  y& H; [{; k' }8 `, |+ K/ v' ]  O0 e
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    ! b- ~& K8 y" F. y. V* Kline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);3 Z0 T) _: j9 E( y) n
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    9 s( ]/ R8 d+ Y) K9 z* z3 ~) x}
    , k( n$ }; @& C, {$ s}4 S# M, n. [& f: Y% F2 A
    }
    1 K! z$ f# V6 }/ R! {else if(FLAG_HR==1)
    " @8 C) d: E# p{
    . ~) J8 w: T7 v6 mx=0,y=0;7 o+ n1 E$ ]1 i# ?, I
    for(i=0; i<num; i++)
    1 t$ m) B. k( T- B* }: u{
    ( A- ~) V# G" y9 C1 N8 Ot = (float)info[0];6 n8 b' s. `3 p# `# ], d; L
    temp = (t/101)*180;
    . Y7 k" g+ |2 ^$ Apos[0][0] = (10-num+i)*50+x+650;
    2 p$ G: k4 N. h" P# F1 Q- T+ Rpos[0][1] = y+210-(int)temp;5 R+ O3 G8 o( J: X  q! e# ~
    t = (float)info[1];" z. [8 x1 _2 K7 A" C, e) b* Y
    temp = (t/101)*180;
    . r5 ]5 J) f7 y* ?pos[1][0] = (10-num+i)*50+x+650;* O+ l9 `! E0 m
    pos[1][1] = y+420-(int)temp;, Z7 F& J8 }% g2 O
    t = (float)info[2];3 ]0 H" c, P; a( L7 j) L8 k
    temp = (float)(t/101)*180;
    ; D/ l  E, e, |' I7 H# {) m6 ~9 Upos[2][0] = (10-num+i)*50+x+650;; E+ e  m1 f& C* I  A
    pos[2][1] = y+630-(int)temp;3 @2 _5 X9 s( V. o
    }/ U: T' e2 G1 z& ^2 r' a# ~
    clearrectangle(x,y,x+1200,y+650);, ]& Y% ]+ l) `5 P8 C' S( K1 q% Y
    settextstyle(40, 20, _T("楷体"));. k! f% _5 w. ^! u
    outtextxy(x+50,y+50,"HR");
    6 E" s6 Y7 I+ I; J/ Qouttextxy(x+280,y+20,"CPU");       //画柱状图
    - [8 x# I' T" p) @. douttextxy(x+285,y+20+200,"IO");8 z, y9 q# T7 S7 ~# l
    outtextxy(x+250,y+20+400,"change");
    & z& |% C6 O* @2 c' o% Lrectangle(x+270,y+65,x+330,y+215);: I' m, k+ O% |* R& O& O" k
    rectangle(x+270,y+265,x+330,y+415);5 y3 \7 d3 a$ J  O3 M2 j" e
    rectangle(x+270,y+465,x+330,y+615);+ c  H: Z; e% v1 f2 f
    outtextxy(x+290,y+620,"TT");1 J  R, m1 h. W3 T/ W. w4 M
    t = (float)com;
    : D6 b, G" y' x, a, N* i/ ktemp=(t/101)*150;8 l' t, e3 q' @
    fillrectangle(x+270,y+215-(int)temp,x+330,y+215);
    & f+ ^' R7 M" U2 Et = (float)wai;" _# b& J  _8 m3 Z# I
    temp=(t/101)*150;/ e8 U/ T3 f) Y; A
    fillrectangle(x+270,y+415-(int)temp,x+330,y+415);8 o! ^! t( h$ s  k4 T
    t = (float)cha;, @( W+ G3 w) L* D+ ?
    temp=(t/101)*150;
    ; N2 v0 j" Q- {- q5 vfillrectangle(x+270,y+615-(int)temp,x+330,y+615);( d8 I5 l# S. n( t
    for(i=0; i<3; i++)   //画坐标   high=90,length=250
    % ~& J' j+ v) |. s{" w. h) F, O& ~+ G( ~/ a/ B
    line(x+650,y+210+210*i,x+1150,y+210+210*i);: z1 n3 Z% S% T, G2 y* B
    line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);7 q6 N$ ]+ u% W3 ?, o
    line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);* A4 \9 ^* F2 `+ d# X. ?

    : f' Z2 m* O9 nline(x+650,y+210+210*i,x+650,y+20+210*i);
    * n* ?' h  w& y2 Aline(x+650,y+20+210*i,x+650-10,y+20+10+210*i);& P$ @, a! \. f( d% j* D- E3 h
    line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);$ h, m1 p7 j: ~2 p
    for(j=0;j<num-1;j++)
    8 Y7 Q( @: k) p" D{4 ~5 B1 k5 ^& p7 f  C* w+ M9 u
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    0 Y2 Y$ E9 a, k2 Hline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);% d2 r! R5 b" q; \0 m
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    6 S, z% ~. }9 B0 p1 g) U# C}) X2 z' d% C9 P/ M2 X
    }$ c' ?3 U9 z& f
    }
    - L  `% _9 B0 }, R1 x& `2 U1 y9 d
    " l' n5 K' T- M( v
    . |- ?# `0 `) |: J/ o( ?( Hreturn 0;
    ( X, Q- U4 D/ Y% z}6 d; V, N: ^& f# `) B% ^
    int drawPerformance_TT(int x,int y,int memorry,int com,int wai,int cha)
    1 q* K  f( K2 L' P3 r' K  i$ K{
    ) ^$ `6 Q2 _" [" a8 s. l. m2 ]7 Rstatic int info[11][3],num=0;
    2 Q$ m: G" y0 W- [+ d4 oint i=0,j=0,pos[10][3][2];
    ' j! F4 G/ h& L' W7 Bfloat temp,t;' Z/ k+ b* Z8 b: H
    info[num][0] = com;: z3 w& i9 g- W* t: E- J
    info[num][1] = wai;
      c" J8 C' b/ B  y5 Ninfo[num++][2] = cha;
    . s' G6 B- W3 g3 a' Z" Kif(num>10)  //存储10个点
    * {6 W0 _4 w, Y8 r: w{
    2 A5 }+ h  P0 `* y- wfor(i=0 ;i<10;i++)  U; e4 ^' b% i4 s1 n; i
    {& O; M' p, d: e6 `/ X4 z  q
    info[0] = info[i+1][0];  m5 D8 U3 ]( o
    info[1] = info[i+1][1];
    5 h; S" B' L; q4 Finfo[2] = info[i+1][2];0 F0 l0 M) K2 l: G
    }
    0 z0 O; Z$ O$ i7 j2 Anum--;
    3 i  h$ q3 s0 _& ~9 ?* f}% Q8 p6 L' ]9 `+ J% J" f
    if(FLAG_show==0)
    2 T% p8 x0 Y$ L3 w4 Mreturn 0;
    & j" ?; s) Z' c! U$ ~9 h6 sfor(i=0; i<num; i++)
    : z. |- U# G+ a7 [, K1 n" f* j& K8 m{( B+ f0 r! K% ^+ c. e7 U
    t = (float)info[0];
    . G4 X. T% T- ?, Wtemp = (t/101)*90;4 z* a+ H$ ?& F2 e
    pos[0][0] = (10-num+i)*25+x+100;
    - p+ B. z/ N! j7 {pos[0][1] = y+110-(int)temp;: _: N7 g* t2 v8 V
    t = (float)info[1];
    9 g) p- ]7 i9 Q# Ntemp = (t/101)*90;
    : Q, P! e+ q" b' Xpos[1][0] = (10-num+i)*25+x+100;
    . ?2 h2 r" U9 E& r3 `pos[1][1] = y+210-(int)temp;% R) K% Z& K4 W; d' b7 e
    t = (float)info[2];& W; }8 y9 N; c( d
    temp = (float)(t/101)*90;
    ) l' j" p9 J) }- e; C( z3 Opos[2][0] = (10-num+i)*25+x+100;9 n4 D: p3 F1 l4 k
    pos[2][1] = y+310-(int)temp;
    6 w$ z, g& i# t# l' u5 l  p; e2 l2 n, r}! G' p) D- {, o; N+ O- ~4 ^5 H
    if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
    $ @) T* z* s: B9 j{
    % T4 x) Y* m# k0 z6 Q; g6 {* gclearrectangle(x,y,x+400,y+315);
    # d. o0 I8 j  h9 gsettextstyle(20, 10, _T("楷体"));  I1 v$ x1 f$ E0 w, ?
    rectangle(x,y,x+400,y+325);. Y3 t9 m+ o5 y
    outtextxy(x+40,y+10,"CPU");       //画柱状图1 p/ n6 S9 k+ z. ~- d
    outtextxy(x+45,y+10+100,"IO");
    % W9 S) J3 e- \5 n. louttextxy(x+40-15,y+10+200,"change");
    + D' d0 C  L! Q. r) }rectangle(x+35,y+30,x+75,y+110);
    + m  w4 [6 K+ s% I2 o: grectangle(x+35,y+130,x+75,y+210);
    1 K" g* o0 a  _% d! Lrectangle(x+35,y+230,x+75,y+310);
    , l) L6 y2 m$ W/ N, U. oouttextxy(x+180,y+310,"TT");
    $ Y4 j$ G, |6 y! i3 T8 n+ ~t = (float)com;% \8 F8 ~% K7 y4 p. ^6 R
    temp=(t/101)*80;# a# c: J9 a( [0 P. ]$ j
    fillrectangle(x+35,y+110-(int)temp,x+75,y+110);" W/ B, y& k2 I: p
    t = (float)wai;
    5 }! ?& ^3 ^% ]7 ptemp=(t/101)*80;' Y7 j) M2 ?) p5 J: ^! `1 r
    fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
    - _8 E. E- ~' A3 st = (float)cha;
    ( c+ ^/ Z' k) [5 stemp=(t/101)*80;
    ' s; c. J8 @3 J* Y1 [7 |9 |# Kfillrectangle(x+35,y+310-(int)temp,x+75,y+310);
    & r+ P0 p5 t5 Pfor(i=0; i<3; i++)   //画坐标   high=90,length=250
    3 R0 A1 S# t0 p4 r% I# a+ T{+ o' x6 y0 r1 F' e. a
    line(x+100,y+110+100*i,x+350,y+110+100*i);1 @9 }9 q9 r! Z/ `! e2 G- J
    line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
    2 D6 Z& e' g" y7 B* a% vline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
    8 j- j. j- O' \( ~% o: S. t$ U5 D. w! o. e+ p% h" R' u
    line(x+100,y+110+100*i,x+100,y+20+100*i);) c% H5 |! d0 C7 }) @# N
    line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);* E( v3 }- V0 C+ t1 C5 A
    line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);
    ) {6 e- r* n; }2 ]  Gfor(j=0;j<num-1;j++)$ n" q* S2 |: H* L  b+ `# r
    {
    * a6 e9 j+ j/ a+ jline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);  m+ F* `3 f+ W0 l1 G- M
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    3 _* ?. m1 ^% b6 i: x9 D" }: _line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    * J, R  v- [6 c}5 ~; ~: U8 g/ n! F& h3 u
    }+ s/ V+ x( x0 R$ B! J" V
    }
    ! i. l5 B. v7 b5 k+ Selse if(FLAG_TT==1)
    $ P4 b) R- F( K3 w{6 l& Q6 v) t4 l0 i& [% z' R
    x=0,y=0;
    , R1 \6 |" b$ l2 f  dfor(i=0; i<num; i++)
    - k- M) r+ ?9 @) E7 E+ c{3 ^  ~) O7 H' D; z. {& |
    t = (float)info[0];
    : }5 q) \- X# R9 Q& ktemp = (t/101)*180;
    0 T8 S. v% E6 x# k7 B, j! \# e! Hpos[0][0] = (10-num+i)*50+x+650;
    - e  U% f7 k1 b5 Dpos[0][1] = y+210-(int)temp;
      w. Z. l& L5 B: d2 B; [* gt = (float)info[1];
    4 L( `( w# P9 l+ ftemp = (t/101)*180;
    $ B; v! T9 r( x4 P  ~# X6 f+ [pos[1][0] = (10-num+i)*50+x+650;* K$ S+ u4 E  Z5 @
    pos[1][1] = y+420-(int)temp;, u, O4 q0 y1 X. B. [
    t = (float)info[2];' q$ W$ r2 r6 l
    temp = (float)(t/101)*180;" Z6 Z1 Y2 t/ v3 C
    pos[2][0] = (10-num+i)*50+x+650;
    . Z! s. h6 V% Zpos[2][1] = y+630-(int)temp;
    $ D3 ^$ X% T  a# `: T/ F/ q}+ H2 A# y7 G, M7 f' _5 X0 @
    clearrectangle(x,y,x+1200,y+650);
    4 F( \6 {" v% w2 ^! k0 h$ _- Msettextstyle(40, 20, _T("楷体"));
    + S; @% Z* g" Z0 i$ k' houttextxy(x+50,y+50,"TT");7 ^6 h% E0 n. m9 r( w2 X
    outtextxy(x+280,y+20,"CPU");       //画柱状图
    + h; f3 i6 ~  R" u- @! r# nouttextxy(x+285,y+20+200,"IO");! |. d6 p, W. _5 r, s3 \
    outtextxy(x+250,y+20+400,"change");
    , ?6 w$ I2 M% F& J3 Xrectangle(x+270,y+65,x+330,y+215);2 E* b5 b- R7 F% k8 {1 {, N
    rectangle(x+270,y+265,x+330,y+415);0 r3 N# y8 ?9 X' q. B+ B
    rectangle(x+270,y+465,x+330,y+615);4 q7 Y9 Q# V! d; t
    outtextxy(x+290,y+620,"TT");
    1 W, f! F8 A. }* F" st = (float)com;
    2 _1 K9 ], }: |4 O9 qtemp=(t/101)*150;
    $ f4 g8 F( z/ r% Ofillrectangle(x+270,y+215-(int)temp,x+330,y+215);( R2 Q4 \, K8 h; H
    t = (float)wai;
    ) d: ?! D" U# V; ktemp=(t/101)*150;
    ( O& S9 u2 ]! G1 v1 l& Q- Wfillrectangle(x+270,y+415-(int)temp,x+330,y+415);7 w1 K" p# \* \4 P! T* V( w
    t = (float)cha;
    $ k  w, Q3 X9 S! I3 Ctemp=(t/101)*150;
    % Z+ M! a" {$ D% ^fillrectangle(x+270,y+615-(int)temp,x+330,y+615);+ Z- n$ b( `. d. s) r0 R2 Z( S3 R
    for(i=0; i<3; i++)   //画坐标   high=90,length=2501 l) ]: d9 i5 S" f
    {
    % I7 r/ }9 l! x" Yline(x+650,y+210+210*i,x+1150,y+210+210*i);
    2 h3 \5 l& `) g; jline(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
    5 z+ J1 G- S! R# zline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
    $ P  E7 N! e* M! H) v  U% f9 L4 Z. P6 ?6 K+ n' D% F; K# i
    line(x+650,y+210+210*i,x+650,y+20+210*i);
    , M* F9 u5 |- ?- w; \line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);8 \- e+ {' m* w& b2 ~3 e' K1 Q
    line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
    8 Q$ d$ {, E7 b; @( [7 ?for(j=0;j<num-1;j++)
    : l+ E; {# p1 P{% I$ Y5 q+ s( d) u6 M
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);# b1 O+ e7 S7 U8 Q
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    & `8 x# z9 E8 r( V+ vline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    0 n4 Y% T7 I# B8 K" q4 d}, w, v0 z+ J# U' ^$ x. _& A
    }3 n" T6 q# _! c' M
    }2 ?2 f7 Q) G, v
    3 f/ |; I; U4 N- V! M9 z! O. i

    & s" e3 X! M  U! t$ E$ J  Hreturn 0;
    ; q  `: G7 l- O  B( `}( L7 `. E  T# N5 v, o. T
    int drawPerformance_PF(int x,int y,int memorry,int com,int wai,int cha)
    * K. X4 K4 [# B7 C% F- x- A{0 l" i& B, O; e( l: b+ w* W- s
    static int info[11][3],num=0;
    * W- O# z3 G9 R, z5 N1 }int i=0,j=0,pos[10][3][2];
      f4 D: f0 s2 w( h. f' q% Ufloat temp,t;4 k" t& Y! b  b' |
    info[num][0] = com;$ f0 p2 A' `/ ?  ?
    info[num][1] = wai;& A+ D, _! V# s2 [. `+ m
    info[num++][2] = cha;+ |+ I5 t' n. A2 U2 ^9 N
    if(num>10)  //存储10个点
    4 s' _( a1 h; Y4 e' i{$ S6 k; o1 v* ]6 _6 A5 B9 l, _
    for(i=0 ;i<10;i++)
    " C) \: L6 ~) \! D9 B* o{& c3 c) h, m5 r9 u! _$ k
    info[0] = info[i+1][0];5 Z+ I2 F5 h' o; r( v1 J: W* r
    info[1] = info[i+1][1];- V+ F8 a  ?- N* O! H! T$ l9 e
    info[2] = info[i+1][2];1 `' o) N+ x9 H/ h4 @/ S
    }# G8 }! V& @7 b7 H
    num--;, r/ R( _5 I" h6 H, z8 m/ A9 C
    }3 R/ B, T& a3 d) R* d$ F
    if(FLAG_show==0)
    1 g# h1 ?. ]/ Zreturn 0;# H  a% s) c: e  t2 k0 I+ |/ V
    for(i=0; i<num; i++)
    . g) p1 R) A* a& {{& V6 y8 m. p, W. E' I* g$ g
    t = (float)info[0];
    & d& v/ o2 J/ g0 |+ X) {temp = (t/101)*90;2 i+ m9 Z; c: i9 z. V
    pos[0][0] = (10-num+i)*25+x+100;  @2 D+ A3 q& {2 w7 ?: p
    pos[0][1] = y+110-(int)temp;
    0 p2 Z# ~  Z1 i* ?! Bt = (float)info[1];+ {% e8 E4 }  v2 L4 e
    temp = (t/101)*90;5 A) w% B2 k) b
    pos[1][0] = (10-num+i)*25+x+100;
    / f3 S) Y; c# h4 }4 C) C0 M( B) hpos[1][1] = y+210-(int)temp;4 s" c4 z7 Y; d' o) g# q7 I- X. M
    t = (float)info[2];" b( i( O( B+ ^+ I- u1 C, H# u
    temp = (float)(t/101)*90;% L+ P& h" z' W  ~/ h( P
    pos[2][0] = (10-num+i)*25+x+100;: W: I9 G7 }# k* K5 Y
    pos[2][1] = y+310-(int)temp;
    5 J! R+ Q' P3 ]}
    1 P, K5 B! u+ H5 C2 ?6 Lif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
    8 l* K( Y7 N. n1 x6 x1 W{
    7 }5 l6 u$ e$ C. B3 _" }clearrectangle(x,y,x+400,y+315);0 m! Z6 T7 C9 R2 J, }
    settextstyle(20, 10, _T("楷体"));. E0 s2 v" Z$ Y
    rectangle(x,y,x+400,y+325);
    2 C; z9 K5 c. ?# mouttextxy(x+40,y+10,"CPU");       //画柱状图7 ^0 c! m) \/ p4 I3 A
    outtextxy(x+45,y+10+100,"IO");7 H$ f5 |4 z3 S; S) E3 ?1 j
    outtextxy(x+40-15,y+10+200,"change");) H- ?0 l) r' ^9 a1 T+ \( M: [
    rectangle(x+35,y+30,x+75,y+110);
    6 ^/ u5 j3 G# T; `) Vrectangle(x+35,y+130,x+75,y+210);$ Z' \( P/ T' L# e
    rectangle(x+35,y+230,x+75,y+310);3 O3 Z; o1 C$ L1 s  A
    outtextxy(x+180,y+310,"PF");5 r$ r* l1 y; Y% Q$ c
    t = (float)com;* {* J  R3 m! Q$ q
    temp=(t/101)*80;
    ; C4 ?' w* p" \: s0 p/ Gfillrectangle(x+35,y+110-(int)temp,x+75,y+110);; k, Y2 \/ B+ q3 l4 O" R, o
    t = (float)wai;
    ) q4 k% \7 D* _( Rtemp=(t/101)*80;
    7 p0 D$ `3 p9 |/ p/ W% K: qfillrectangle(x+35,y+210-(int)temp,x+75,y+210);) c# ~  W' q9 Y
    t = (float)cha;
    - m" j7 |: J; ~temp=(t/101)*80;* G0 o& ^' K3 J1 o, w, \6 b7 R
    fillrectangle(x+35,y+310-(int)temp,x+75,y+310);
    4 x" G/ {& X  n8 `: ffor(i=0; i<3; i++)   //画坐标   high=90,length=2507 T1 S6 D1 h3 m/ _- m+ R/ n* G
    {/ W5 P6 v2 ]$ ]% h9 H  b
    line(x+100,y+110+100*i,x+350,y+110+100*i);. O0 G) R$ Q( q
    line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);8 a0 C+ L% o0 r( W( U) e& G. [
    line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
    + I" V% f* z. _9 E+ l7 i0 o2 P: \% q, u
    line(x+100,y+110+100*i,x+100,y+20+100*i);
    % `2 W/ G* k" V! R1 V0 ~7 v! ?; Cline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
    $ T+ o, R& P# s$ t/ ]# a2 Nline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);
    0 r2 E6 ?+ |0 Z3 bfor(j=0;j<num-1;j++)! f1 P8 R' v7 j' s5 F9 \/ M, K
    {
    ' m! Q# `) P' z1 ]line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    5 i- B9 X7 e' dline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);" W0 [. a9 x# c( X# e" z
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    * y2 r, o" L# B. q/ A3 P8 X( ]}( s$ R. d; ]; r; K8 ?) U
    }! B0 ?. O- P9 F: a/ Y
    }! O0 y- k! w5 T4 C3 X  t
    else if(FLAG_PF==1)! ~) q7 S" o0 K, ?9 W7 U* l; f
    {
    - b* P/ o+ |5 \2 q0 m8 g0 Cx=0,y=0;3 D- E' f  i1 D0 K, m. I
    for(i=0; i<num; i++)
    " K* m0 E) t  M. L; ]{
    3 |  v6 Q! ?  T, }  R. E4 St = (float)info[0];
    6 e* F( ^0 f; D$ A2 t6 z' ~temp = (t/101)*180;
    0 Z* I8 [" E* f5 t) a5 G. Gpos[0][0] = (10-num+i)*50+x+650;/ v1 A& }+ S- M0 j$ D/ i1 {
    pos[0][1] = y+210-(int)temp;' g& [7 p0 a6 X& I
    t = (float)info[1];
    * T" x( o! H8 e0 T* W$ rtemp = (t/101)*180;
    * T* ]6 l: w/ U6 e6 E. ]- apos[1][0] = (10-num+i)*50+x+650;
    " x' K  g) r' @9 b  S2 k0 lpos[1][1] = y+420-(int)temp;1 \" C6 A& ?, c  G
    t = (float)info[2];' V+ a+ z1 G7 U5 I5 D0 c
    temp = (float)(t/101)*180;
    , f8 I2 q9 c- E7 Jpos[2][0] = (10-num+i)*50+x+650;
    4 [3 t: W" x$ k/ d; _9 ^2 Qpos[2][1] = y+630-(int)temp;2 l" Z6 m# z7 v5 C: R- {/ B
    }
    0 C, Y7 |% \( P% U% k9 Tclearrectangle(x,y,x+1200,y+650);
    ( `* X0 E' m$ B( y% j0 jsettextstyle(40, 20, _T("楷体"));
    / _- U% d5 d& g" Q9 o2 Kouttextxy(x+50,y+50,"PF");) k) ]9 e$ G! X' ?
    outtextxy(x+280,y+20,"CPU");       //画柱状图; Y( R! k' F) P  j' V1 W
    outtextxy(x+285,y+20+200,"IO");
    ; n% t4 J4 X( G5 \2 e' L: Nouttextxy(x+250,y+20+400,"change");
    : A; T& ?1 W- d8 jrectangle(x+270,y+65,x+330,y+215);# K* Q8 j: F9 I  q3 R
    rectangle(x+270,y+265,x+330,y+415);7 x/ r: L: B- t( U9 ~( O; K
    rectangle(x+270,y+465,x+330,y+615);
    * ]" A1 ?$ O3 P# Q. Oouttextxy(x+290,y+620,"TT");
    # P3 y6 b( V1 R9 _) x  H/ U1 B0 Pt = (float)com;
    4 H9 J0 s. l+ L2 K' b7 ltemp=(t/101)*150;
    . c0 Z4 H# G, }fillrectangle(x+270,y+215-(int)temp,x+330,y+215);
    * C) }4 M5 _0 l; \  A+ Nt = (float)wai;
    ' M. l6 M/ p' @4 U! w" G# l* m" }temp=(t/101)*150;1 K% v8 O; v% q2 x; k/ B: y
    fillrectangle(x+270,y+415-(int)temp,x+330,y+415);8 w" z5 ^; J+ z/ s& L1 D
    t = (float)cha;3 i- P. W/ L9 p) ~
    temp=(t/101)*150;7 @9 X. G. ~, q& _6 w
    fillrectangle(x+270,y+615-(int)temp,x+330,y+615);3 ]3 \& p7 k$ ~( Z$ q6 S1 j
    for(i=0; i<3; i++)   //画坐标   high=90,length=250
      W7 a* ?! z: z: y) T" \0 X{; R. Z+ V3 P" N
    line(x+650,y+210+210*i,x+1150,y+210+210*i);
    ; t- ^( Q6 }/ o5 C2 P* v2 C7 Rline(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);! i# F' v2 J2 y! }1 I+ ]
    line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);4 R0 o/ o% G% B( q/ @6 \
    + R$ H" m% K( ?& N
    line(x+650,y+210+210*i,x+650,y+20+210*i);
    0 W* l' `+ t# P8 |0 J$ ~line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
    ) C% p* R! w, h  f5 b2 p. Y- l0 oline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
      w* s2 h6 f& {for(j=0;j<num-1;j++)
    ) }3 K3 H+ y* ]6 @0 ?{
    , v% F0 v+ G$ wline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);. H# q6 x# X) l" q0 c
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
      [2 p! l0 F- p) Kline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    4 u7 a& {- @7 }- u, ~# s% C# Q}8 ~# E5 e, j/ I
    }# \( J& a2 y, w$ ?7 X) k, K! S
    }
    . A' }- n0 ?; e4 N7 Greturn 0;' M2 E" L9 R5 V
    }
    " N7 M7 f/ X; z0 i! @int drawPerformance_SJF(int x,int y,int memorry,int com,int wai,int cha). a3 c# p/ y% Y
    {
    7 ~/ C4 g: _" y, `# g3 s6 I  U; hstatic int info[11][3],num=0;
    8 ~5 f+ ^, I) I: G$ Vint i=0,j=0,pos[10][3][2];
    5 |& ?$ e( r8 e6 n4 C+ ?float temp,t;+ O2 }5 u! m1 j& o
    info[num][0] = com;
    $ q6 G  w+ f1 h, Y" ninfo[num][1] = wai;
    2 X1 Y! y) f4 k) c& zinfo[num++][2] = cha;0 W8 x2 g7 p6 `- k8 ?& o
    if(num>10)  //存储10个点* ?9 d( o( w* T
    {3 w/ H. h' T# X$ z
    for(i=0 ;i<10;i++)
    7 G; C8 f" S' K9 x5 }& ^{
    " Z- O* g' H& \; hinfo[0] = info[i+1][0];# q- |: M7 m4 l( W0 {: O
    info[1] = info[i+1][1];" @. q, c+ w2 ^9 N; ?- d8 b3 b
    info[2] = info[i+1][2];
    + l: ]4 W# z/ D/ w}7 `( @7 M. d: K2 R4 ^1 W% D; Q- g
    num--;3 o: K' q3 I) Y  M
    }! O9 i, l9 _" Q& {" z
    if(FLAG_show==0)# \1 l! w4 J9 g, |/ A
    return 0;
    * j% ]6 N' i1 tfor(i=0; i<num; i++)8 B7 w; s: [& E
    {  P! l9 n  v7 U2 d
    t = (float)info[0];
    ; B4 ?; n& Y8 P  R& p8 @1 D+ ntemp = (t/101)*90;& W4 y+ J$ |- f% l4 v+ I3 z
    pos[0][0] = (10-num+i)*25+x+100;
    ! L4 [4 v) v. S& [( I2 epos[0][1] = y+110-(int)temp;
    5 ^1 ?! @7 o7 ?+ Xt = (float)info[1];
    ( N7 f& q  s2 itemp = (t/101)*90;) h4 U6 D$ x) t- n& V+ F
    pos[1][0] = (10-num+i)*25+x+100;; W5 w$ n4 i! \3 ?( e: i" w
    pos[1][1] = y+210-(int)temp;% S! l# p2 W* K3 u& u
    t = (float)info[2];
    4 n& {% ?7 v1 @8 \: Xtemp = (float)(t/101)*90;
    0 S6 _8 O8 U* a! |$ p; Fpos[2][0] = (10-num+i)*25+x+100;
    8 a4 ]- H# n0 G' r. O5 rpos[2][1] = y+310-(int)temp;
    * ]  z  v, n4 M1 X3 y4 f}
    # C7 T& j+ C5 r. Oif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)9 R$ f/ s( P& g5 t7 W
    {
    ) e% J7 `: \4 |clearrectangle(x,y,x+400,y+315);
    2 |* Y+ g0 Y3 [4 b' _. ~settextstyle(20, 10, _T("楷体"));
    ' m, U. r4 r7 S) ]rectangle(x,y,x+400,y+325);. l, g2 n9 \8 i& P' @. {7 L
    outtextxy(x+40,y+10,"CPU");       //画柱状图
    . q! }$ V, A/ F+ C- |2 |, Jouttextxy(x+45,y+10+100,"IO");
    4 U7 R, x$ T# b8 b, _outtextxy(x+40-15,y+10+200,"change");
    $ l; n2 A+ i! d) J! g( f" X+ j0 D2 Frectangle(x+35,y+30,x+75,y+110);5 ^9 O6 M( `/ V. G0 c. B
    rectangle(x+35,y+130,x+75,y+210);
      t6 V, V$ [" T  p% Wrectangle(x+35,y+230,x+75,y+310);
    ( `- B5 ]6 J6 O; uouttextxy(x+180,y+310,"SJF");
    3 `. K# T4 }/ O4 @t = (float)com;8 e' K: j: P9 t2 k- Z' E" i6 t
    temp=(t/101)*80;
    0 J. `3 S- s2 e( |- b$ Dfillrectangle(x+35,y+110-(int)temp,x+75,y+110);4 j% `9 S1 {% }
    t = (float)wai;
    ' c' w- ]4 }( B/ r7 Vtemp=(t/101)*80;! ~1 a1 J+ ~$ e5 Q* Z5 M  v
    fillrectangle(x+35,y+210-(int)temp,x+75,y+210);/ }$ f; i7 @1 j
    t = (float)cha;' C* k# t- E' P
    temp=(t/101)*80;
    # J! ?: n3 T; C7 d7 wfillrectangle(x+35,y+310-(int)temp,x+75,y+310);, b/ C6 G( @7 [) S1 L6 B
    for(i=0; i<3; i++)   //画坐标   high=90,length=250
      B: u2 I% q$ ]8 c2 A; p1 N6 L. g. n8 @{
    " I" x" h: ?8 j2 P. L& Fline(x+100,y+110+100*i,x+350,y+110+100*i);% t- [! Q7 M$ R# r
    line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
    3 v0 @4 [9 D2 y( X! ~9 b0 x# vline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);$ C+ `$ R- O* z% r& b! E& Q2 Q
    1 H; e+ Y; `! t# j1 X  T7 M" {8 q
    line(x+100,y+110+100*i,x+100,y+20+100*i);
    ( L: y- V7 ^4 ~4 iline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);& P' c2 C5 Y: {) q8 m0 a
    line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);9 d& |. d- C3 ?" |$ j/ Y
    for(j=0;j<num-1;j++)4 c4 l6 i8 a$ e5 Z
    {9 J( W( P+ o, G$ U5 ^4 m% \& v: B
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);  N" ^$ b0 I% I; C6 F8 U
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);% Z" b5 {* j9 o$ C
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); + S5 h3 \4 @- y# z$ O( O
    }
    ( p# }9 t/ k7 ^$ h  Y" ]9 a, t}
    5 O7 G2 B  _) W7 D5 Z: }9 W2 {}- `' M$ w/ S' U* z. V  F1 V2 e
    else if(FLAG_SJF==1)
    3 \% G4 Z# z$ r9 a{
    * e9 S# |9 a( M# }$ kx=0,y=0;  D) A) H  ~% ?  ~+ G
    for(i=0; i<num; i++). s! K% m/ A$ @$ p2 k2 }) x
    {
    9 E+ ]1 g) M$ Y: Ht = (float)info[0];
      F; w) d4 g' _6 r2 ^# Stemp = (t/101)*180;
    & a* F  n$ v5 p8 Apos[0][0] = (10-num+i)*50+x+650;. H# N& B1 g+ |2 d' ]
    pos[0][1] = y+210-(int)temp;
    ( U1 K; y+ q' z: G3 P* gt = (float)info[1];
    % R; c! C* E2 _# W7 wtemp = (t/101)*180;! F4 u& V/ E, Q: y/ l9 d
    pos[1][0] = (10-num+i)*50+x+650;# _) Q% {" l9 G$ F3 B) A) Q8 m
    pos[1][1] = y+420-(int)temp;
    + j* z! y5 O3 At = (float)info[2];
    2 C: K; d6 |7 V: qtemp = (float)(t/101)*180;* o2 R: M- b: A1 j
    pos[2][0] = (10-num+i)*50+x+650;
    4 W7 B% g# _8 F1 ]$ b4 Ppos[2][1] = y+630-(int)temp;' x/ J5 [+ r9 t) B3 x9 x7 V% H
    }6 O0 `5 c; f( t. Z
    clearrectangle(x,y,x+1200,y+650);. M- m4 F& |$ e5 q% r: u+ S2 W: o2 s
    settextstyle(40, 20, _T("楷体"));2 V- q2 V+ p3 ?" J
    outtextxy(x+50,y+50,"SJF");4 D1 G9 s& ^. o; [0 ]6 B
    outtextxy(x+280,y+20,"CPU");       //画柱状图' }* W2 q1 r' D: Y" M* p5 ]: S% q
    outtextxy(x+285,y+20+200,"IO");# j# G! A. X" U/ N* U% p* |
    outtextxy(x+250,y+20+400,"change");; [8 O5 ~+ C% a; B$ q( F
    rectangle(x+270,y+65,x+330,y+215);6 i" r. P& s" H
    rectangle(x+270,y+265,x+330,y+415);3 m. X- T( p: ]9 m0 K
    rectangle(x+270,y+465,x+330,y+615);
    3 ?: W$ b! T3 @0 Z' {2 routtextxy(x+290,y+620,"TT");% J5 s. ~3 H! k) T. R
    t = (float)com;% R  h/ h0 P  p; J) z3 V3 c1 \
    temp=(t/101)*150;
    # j9 O- a$ z! \. a4 [. z6 t7 |. A# Pfillrectangle(x+270,y+215-(int)temp,x+330,y+215);- v' c3 b; ?0 q  u
    t = (float)wai;* n, Y5 d7 B9 ?0 k) ]1 d8 h
    temp=(t/101)*150;* Q& {+ d9 ?) @" b
    fillrectangle(x+270,y+415-(int)temp,x+330,y+415);0 ?2 G! f; Q) O$ H6 v
    t = (float)cha;( r0 t, H1 s% ?# N2 x* J; Q$ z
    temp=(t/101)*150;: k" j6 M8 d) P" Y% ]
    fillrectangle(x+270,y+615-(int)temp,x+330,y+615);
    + A( g% |; Z2 }% Q, yfor(i=0; i<3; i++)   //画坐标   high=90,length=250  A4 j7 n# Q& [0 \5 D# ?
    {
    & `& D' I( o: t- Y: e# cline(x+650,y+210+210*i,x+1150,y+210+210*i);5 T1 O; u3 L% i7 Z1 w* a. S& \
    line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
    2 h. c. E1 Q$ D* X; hline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
    7 F3 H+ J: E' @2 U/ z$ K( m8 q3 u8 ~# Z
    line(x+650,y+210+210*i,x+650,y+20+210*i);
    % |; Z, u9 m& M$ }3 jline(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
    ! x5 Q( c4 R3 \" ^0 rline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
    9 E% H7 X6 H7 t: Y. Qfor(j=0;j<num-1;j++)
    5 D: ?" i' |2 c{* b: r- p. F0 v9 i* Q
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    % x$ K/ X: N, q1 ^0 ]9 e' yline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    " K* ]; v: v& Wline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 4 [9 E0 y+ |5 D$ a0 |" d& w
    }
    , t& Q- m: s7 S+ s$ w. k, W: T. Q}& ~! u. G4 a; J, a
    }
    2 l7 K' _3 z! G5 preturn 0;. T5 A5 G/ ~3 L
    }) Y+ R( x7 t9 [
    int High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)2 j# y4 U1 Q2 @" A
    {
    : ]" s% i( d& ^( [1 }static int compute=0,waitio=0,change=0;
    / e( b& \! B3 V2 N9 k, ^3 Cstatic int computeLast=0,waitioLast=0,changeLast=0;
    / v2 \3 y& \; `- K/ }3 ^int i=0;; m, k: @# [! z& v( k  Q! e, T$ R; h
    if(draw==1)
    + I+ A$ w7 l3 u3 N: j  G2 j7 ^{
    $ N; t  ?% M, U9 M8 j, X5 j" ?//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
    * T/ I+ `5 W* \7 ?1 ?% s* odrawPerformance_HR(400,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
    ' v- W% v, ?8 V, ccomputeLast=compute;
    8 e* _: s: k0 U' BwaitioLast=waitio;
    . I( w; u' N9 q( u, vchangeLast=change;. v6 i, ]9 T1 K
    }) ]1 s7 l4 s/ F( `8 \% I; V
    if((* memory).p[0].flag==ready)
    . r% H1 P% X0 c2 x% H  N. u) E% m(* memory).p[0].flag=computing;
    1 G5 B4 a1 ~$ h# N" d3 \3 k- o) Aif((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)
    1 E5 s6 D& s6 x+ z& n  A" I{
    6 Z; \0 u2 a. s, [9 f" X1 Ti=(*memory).p[0].computeNum;
    # L4 G- D3 V0 e' @if(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed# m* c' x: T6 I5 U
    {
    / P1 w  m! R# O$ u8 Y0 v$ w& Z(*memory).p[0].flag=IO_waiting;  f1 q3 U& d+ P
    (*memory).p[0].computeNum--;( Y9 L. k) {3 ?) V
    change += exchange_IO_Compute;
    / x! h8 i/ k& u% \* s  {compute++;
    2 d" `+ i5 h. P/ V* x7 f/ ]}
    0 N0 z1 v4 W! a4 ^( r+ ielse
    ; O, |* s' a. y3 p{
    $ p  Z3 e8 u* a  M; Zcompute++;' c, X* {! U1 s3 [
    }
    + V' G  r0 |9 ^$ t, Y4 V}" N0 x" B) G! m, g
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
    3 T* s% `- C2 f8 V{
    ' c/ C4 O' B4 l; b9 g' r7 s
    - W5 T# r6 ~5 q, r* D0 M1 mi=(*memory).p[0].ioNum;# J3 H. Y# g9 m& }
    if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed
      v. {8 p" f' {' h4 i{
    . I/ Z9 t% N# Z; K(*memory).p[0].flag=computing;
    3 u1 j# y' ?" p$ u  ^(*memory).p[0].ioNum--;. o! R  R6 Y% O- q
    change += exchange_IO_Compute;4 _4 n) i+ \* J3 ?  O
    waitio++;' B$ c  e- a( h
    }0 n" d$ m* R. G6 E0 J5 r% K0 l! K
    else' C9 N. Z8 @1 R$ U' G# U0 N
    {8 B( g# v8 q5 a3 @" p/ j
    waitio++;
      P0 M/ U6 z  G$ _+ T}
    ( K$ ?2 V* w1 D}5 O& Y2 M# H$ Q( G# j
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)
    $ j4 H" [6 ?7 Z) W$ i+ L/ n  R{
    ! ]) P7 \) L! r, q2 s(* memory).p[0].flag=IO_waiting;4 `2 ~. h2 ]7 p. k; E: w* J! T
    change += exchange_IO_Compute;* @+ l& b  N. z; C
    }( i: [6 r4 K& W8 I' h3 ~8 e( X
    else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)0 l  \. }1 {& X# W
    {, V8 W% v) s  v. ?
    (* memory).p[0].flag=computing;
    ' ]2 R: n4 m& ~6 X9 z$ @7 W$ Hchange += exchange_IO_Compute;
    3 R" q: y! |9 M+ B1 E5 b' u}
    1 \% p5 S" o8 J. M8 o% K; {if((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0)  //一个作业已经完成
    ( R+ b! S& C. x' G0 q9 s" S{
    ) J  ~* }6 S( s) s(*save) = (PCI*)malloc(sizeof(PCI));# u$ @. ^3 a" A1 r  p# k
    (*save)->next = NULL;
      I8 v& O( `* T2 c4 W5 C(*save)->processID = (*memory).p[0].processID;
    9 T7 h) C( _- M(*save)->comeingTime = (*memory).p[0].produceTime;  D% W, S2 q6 O9 I- o
    (*save)->askMemory = (*memory).p[0].askMemory;
    6 Y, j- }& z& [2 ?: p2 Y0 `(*save)->compute = compute;' g6 Y1 K0 F, l- ^: f3 p
    (*save)->waitio = waitio;, b8 p' m6 Q# `# ^5 c+ `# @
    (*save)->exchange = change;
    # ]( y5 V: A( \4 D2 d8 {1 `(*save)->completedTime = systemClock;
    8 F2 Y, C! ]+ C$ O4 i. E(*save)->runningTime = (*memory).p[0].runningTime;# c" I2 I2 \' P% t4 G1 k
    *spareMemory = MAX_MEMORY;         //*spareMemory + (*memory).p[0].askMemory;
    . C) X. q' w8 J% _compute=waitio=change=0;" ^( }& l4 ^: P
    computeLast=waitioLast=changeLast=0;# c  f7 m/ b0 c" {, }4 O
    High_response_ratio_s_to_m(&(*storage),&(* memory),&(*spareMemory),1,1);
    1 P* I* M. `) Achange += exchange_process;# E; X8 ]& ?- s, F: i* V. @
    return task_completed;
    5 R+ _) [4 z, e& ~; A/ L}; _& l3 T- B" f& M" C+ U
    else! q& r/ ~* t+ Z8 V; X8 i
    return task_not_completed;
    : Z2 ~. ~3 B* {" `7 j. z) N6 v}
    0 b* I, e% Q1 ?1 f% @: a$ |/ aint High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int dispatch)% Y7 G6 C  w9 c4 W
    {
    $ H, K; S$ q/ o$ t) }* pstatic int waitTime[initProcessNum],i=0,j=0;
    , I: Y' B1 A1 w% S/ E! A/ G7 Nstatic double HR_ratio[initProcessNum];# _3 \, v$ t; V' ]3 b
    if(flag==0)                    //初始化数组5 y8 i- f2 b, p, C2 Q$ C. Z8 R3 O: K$ W
    {  u* V) U& g: l5 H  E
    for(i=0; i<initProcessNum; i++)
    ' j( Y# c4 p1 ?% i. V2 c{5 m% U! x, V0 O+ {$ ?9 E, s
    waitTime=0;
    $ K  }/ e! d: G1 \' `! `) FHR_ratio=1;
    : A4 |0 l; G8 S0 M. M- z}
    * m5 e: W$ E" N4 Q  R: I0 u$ Z" f}
    * C( @: x* ], b* ]  k2 Bfor(i=0; i<(*storage).proNum; i++)  //等待时间增加,重置响应比
    7 d; W, ~4 U; v1 |+ t3 ~/ I( r{3 Z5 o, {' ]' V
    waitTime++;& M/ w& u( t- i9 O0 A' z
    HR_ratio = (waitTime+(*storage).p.computeTime+(*storage).p.ioTime)/((*storage).p.computeTime+(*storage).p.ioTime);* a; w7 Y( V- Y  A8 j+ g
    if(HR_ratio > HR_ratio[j])$ l# K$ z1 B. [* \
    j = i;1 A8 f: r: b9 o* k. C
    }1 Y) k# K, L( V9 ~2 t& K+ z
    if(dispatch==1)                    //需要调度一个进程到内存中执行
    : l5 F* ~/ a) v  f4 y  ^/ n0 ?{1 E5 \3 {" H! d* O9 |
    if((*storage).p[j].askMemory < *spareMemory)
    " g' i+ t+ a% R$ L  {" b& ^{0 g/ {8 m* D* f
    (*memory).p[0].askMemory = (*storage).p[j].askMemory;
    6 g& ?% z. r  e) U(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
    5 H% U! Q2 V4 B/ N3 K7 ?% w: P(*memory).p[0].computeNum = (*storage).p[j].computeNum;
    - O! K$ [) O4 C6 X- \4 g# {! d(*memory).p[0].ioNum = (*storage).p[j].ioNum;
    7 S1 H- J4 W8 [1 E% }1 ^(*memory).p[0].processID = (*storage).p[j].processID;
    2 q: J, @% p4 \1 p6 @(*memory).p[0].flag = (*storage).p[j].flag;
    " E" u2 s) m. [2 M(*memory).p[0].ioTime = (*storage).p[j].ioTime;0 f4 e6 W7 X9 d5 w1 q2 m
    (*memory).p[0].computeTime = (*storage).p[j].computeTime;' t9 @, n4 m) C
    (*memory).p[0].runningTime = systemClock;- O& {) G) I5 G: {# J) `
    (*memory).p[0].produceTime = (*storage).p[j].produceTime;# ^8 M; Y2 N5 H& ]" C
    for(i=0; i<(*memory).p[0].ioNum; i++)
    % }3 {, i4 D' d+ _* _(*memory).p[0].ioClock = (*storage).p[j].ioClock;& {5 J8 B- W  F
    for(i=0; i<(*memory).p[0].computeNum; i++)2 T6 m7 t4 B6 Q1 }1 K
    (*memory).p[0].computeClock = (*storage).p[j].computeClock;
    & W& H# ~" L. i$ U; Z(*memory).proNum=1;/ K" J# P+ ]/ S8 q2 b( V. e2 @
    *spareMemory = *spareMemory - (*memory).p[j].askMemory;) V9 X8 t* w% `, b$ C7 c: [0 f
    produce_one_task(&(*storage),j,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程8 N9 z- Z  L$ B4 P
    (*storage).p[j].produceTime = systemClock;
    ) ~1 @) A" Z, ?, y' I6 yMAX_COMING_TIME = (*storage).p[j].comeingTime;
    5 }& n! J& \" a9 I# l( VwaitTime[j] = 0;
    & F1 u3 p: z* n4 [. B/ VHR_ratio[j] = 1;
    % c2 M0 k* i! h, T8 F' `7 J}' ~4 P; Q: j8 e, q' u
    else0 B' w. C+ r* |; `: V
    {- D! Y& T3 V7 y6 \1 B4 a* d
    printf("A process ask for a memory overed the system capacity\n ");
    : `, S( \/ V$ _% L  s2 {1 Oexit(1);
    6 d6 x! ^4 }: s5 ~  T$ n}# r' ~5 c& w; z+ h7 r
    }4 t/ w  g' x8 v/ S: O" n0 `+ p
    return 0;' Q- j! ^, i2 ^" c5 `
    }
    & ^! a+ I. ?" ?0 a' @' \int PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
    6 ]3 S. u7 Y7 q' b0 N# N{
    . G% d1 |8 V7 t# V6 \  nstatic int compute=0,waitio=0,change=0;
    7 Y" U: y/ m0 C+ b2 ?* Fstatic int computeLast=0,waitioLast=0,changeLast=0;
      E1 X0 l0 |- W6 Kint i=0;
    - I# D9 V/ s  c# h& ?4 Hif(draw==1)
    $ y# D) W) A2 X- x{$ i6 M" l' }6 `4 C
    //printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);+ N0 _  @0 ]. N9 e* Z0 V
    drawPerformance_PF(800,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
    4 F0 ~* b3 ?9 R! ~1 e' o8 Z) w
    / q- N! d0 O2 t; Q. Z. j' W3 }7 Q9 e* M$ @/ Q0 I% O: \8 F
    computeLast=compute;( S8 T0 P5 a) `  @
    waitioLast=waitio;* d0 D& D) U" O* f8 B" g# H
    changeLast=change;
    1 C1 B! m2 L( Y: T( [. q}
    $ [9 F# o' d3 Pif((* memory).p[0].flag==ready)
    ; [) w" O) i/ n5 g- W' b(* memory).p[0].flag=computing;$ x- z% ], z9 d; m9 s& i; a+ t6 Y4 A
    if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)
    ( v& f- Q$ Q9 P, |7 g{
    ; r! `. p- ]9 X1 [& H0 |2 C; ui=(*memory).p[0].computeNum;
      A+ t0 c8 z, O  t5 l3 nif(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed
    " C6 T& t) |0 Z  V' p! z2 n! j{
    ) R* n4 K' V5 z8 W- g! g; j, X(*memory).p[0].flag=IO_waiting;$ y5 q* Y; U. c- @. |
    (*memory).p[0].computeNum--;
    # |% t/ s1 G% Bchange += exchange_IO_Compute;
    8 o- E2 j9 V+ W4 B% c' c0 e2 Wcompute++;5 N0 L7 b: l( v' q
    }5 `; |0 e8 E0 x$ W9 l4 s9 q
    else
    7 p8 E: b" p( \+ x* m% @% c7 d{
    . J2 Q/ }+ e" C+ V, \compute++;# f! V+ ~. S3 T' W/ n# u
    }# k! L, R. w, Q4 H5 b! C# c5 h9 _
    }
    7 d5 V/ U7 e( z# x) N6 y/ O. Lelse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
    : Z, g1 C! K0 `{
    5 z+ L9 T7 S: O2 G1 F: O; [$ p6 k/ A' M: `& G5 w1 t
    i=(*memory).p[0].ioNum;, z- N3 E: u; L" l/ @
    if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed
    ( y1 I( W  K$ \7 b1 B( P$ I{
    ) I+ L# b$ N# l) t(*memory).p[0].flag=computing;+ v' ^* J- y4 l1 Y" F1 m4 H2 w
    (*memory).p[0].ioNum--;" ^. y0 D: |+ G3 q" N
    change += exchange_IO_Compute;; P5 G, k! d. P  i
    waitio++;
    8 ?0 l8 f' L8 m% m8 K& z1 @}
    % ~- L7 b- b/ Y6 L' |; Y7 T" Kelse6 e8 _5 H0 h# K' B
    {
    ; g5 D; Y# A7 U6 _+ `  L  Kwaitio++;; m, Y$ m$ w, ^- O
    }
    * X! ~0 N$ Y/ T( I. P}
    : a4 C+ m- L7 P8 N3 N9 v- selse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)
    , j7 V9 H1 e! i{; C2 C  |0 c3 ?% N
    (* memory).p[0].flag=IO_waiting;
    1 @) P  E6 r! B$ s' Q0 pchange += exchange_IO_Compute;1 ~' B& ], V. m' h) ?7 L
    }9 O' r$ A$ v, Z) P
    else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)3 B% f, R9 v& U: P4 A7 C
    {/ m3 [) y$ ~) x; Y2 J
    (* memory).p[0].flag=computing;( D3 q3 j5 U. o' L* v0 p- S  j
    change += exchange_IO_Compute;9 x% y+ ^% O$ s, r+ ^
    }
    ) R4 G' @3 n: _7 ]" b5 H& Uif((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0)  //一个作业已经完成5 I* D1 q# R" N: C$ z4 t
    {. F1 E. N2 w# z& U
    (*save) = (PCI*)malloc(sizeof(PCI));
    * s: G& p/ K2 n/ Q% g9 L(*save)->next = NULL;- `$ ~& P: A, \% Q5 ?7 U8 g
    (*save)->processID = (*memory).p[0].processID;5 z# D# B- [+ E
    (*save)->comeingTime = (*memory).p[0].produceTime;
    ( a4 C, k1 z. \- w5 ?3 w7 ~+ K(*save)->askMemory = (*memory).p[0].askMemory;8 E/ e! @( f/ N4 @% D! T5 b
    (*save)->compute = compute;
    : j6 u; T' Q. t8 j) g! z- y(*save)->waitio = waitio;
    6 B& X3 b3 u% ?) R! H(*save)->exchange = change;4 E$ ?4 Q8 [# M6 J; W% d8 p
    (*save)->completedTime = systemClock;( ]% p: n, `3 [" ~  Y0 Q6 E* u
    (*save)->runningTime = (*memory).p[0].runningTime;( Q0 u0 Y% u7 t6 x1 C: j
    *spareMemory = MAX_MEMORY;      //*spareMemory + (*memory).p[0].askMemory;7 T& m& g* f* R. o  z
    compute=waitio=change=0;( K) b( H4 O% _' j: N
    computeLast=waitioLast=changeLast=0;, r! m( U" E( b. i
    Priority_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));
    2 C& a5 p/ }9 j: t: P7 ~change += exchange_process;
    4 b/ h7 P4 I! m+ g9 b# ureturn task_completed;7 a+ g8 ]7 Z, p  @# g- L
    }
    " @$ c2 d3 T" e, ^else
    . e" R& j# G' i+ ^5 e; |return task_not_completed;
    6 {! g" B0 M, c6 j4 N+ l}
    0 N7 K8 U7 S. ^6 B2 B% dint Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)
    6 q9 q6 \! m; Y2 I{
    . y$ k; R/ B6 Wint priorityNum[initProcessNum],i=0,j=0;
    # K* l6 B, p3 W* G) Y6 e: C' y" qdouble temp=0;
    * r5 |, c8 ^1 ]; K8 N1 s. nfor(i=0; i<(*storage).proNum; i++)    // setting priority to each process
    ' O- j7 ~) D: Z! E5 Z/ B{* [2 L/ \/ `% C  }
    temp = (*storage).p.computeTime/(*storage).p.ioTime;
    $ X, d, j, A4 Fif(temp > 0.8)
    9 j  j7 j. U. R! S& W' s( x# NpriorityNum = 6;+ P5 P8 z: @8 n; d. P
    else if(temp > 0.7)
    8 x; k; j6 [  ]% f5 S, {priorityNum = 5;- a  i3 f) n+ C; K& W3 J+ i5 J4 ?0 W
    else if(temp > 0.6)
    8 o  y$ t6 m6 K/ w# P4 v9 ~2 spriorityNum = 4;  d- r2 ~) ~4 F' p# l$ u9 X/ b
    else if(temp > 0.5)
    ' r7 w' E- a* g3 f) VpriorityNum = 3;  ?* E; ~% f& Z; |) n" g5 n
    else if(temp > 0.4)9 s1 k7 }+ \8 _! l4 M% H
    priorityNum = 2;
    ( n3 Q* Q- q/ [9 {2 Zelse; x  ^$ d# B) T- k9 k4 T) [$ s
    priorityNum = 1;$ [) f. j7 W# I4 S, ~/ g
    if(priorityNum[j] < priorityNum)
    $ h7 C$ v! W! _! M3 I% V4 P+ \j = i;7 J$ f0 ~% m! F9 Z
    }
    6 e% u0 R! \9 U( W7 X: A1 T/ Pif((*storage).p[j].askMemory < *spareMemory)- Q+ |+ P  ^  i. Q* x# w: j( h3 c
    {
    " R. `5 |9 b8 n' k. \; e(*memory).p[0].askMemory = (*storage).p[j].askMemory;
    ' H( \- d9 H& p) R$ u5 q, a(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
    * h5 c! f% w8 }, g(*memory).p[0].computeNum = (*storage).p[j].computeNum;
    5 h. |; b, z! _6 I5 T(*memory).p[0].ioNum = (*storage).p[j].ioNum;2 i4 J* i  Y. }! b- E" s# v4 x
    (*memory).p[0].processID = (*storage).p[j].processID;
    , ?6 A2 n/ R# A2 w0 I: v& B(*memory).p[0].flag = (*storage).p[j].flag;9 _" p) T. |* e3 |
    (*memory).p[0].ioTime = (*storage).p[j].ioTime;* D9 R( `* g+ l' D
    (*memory).p[0].computeTime = (*storage).p[j].computeTime;5 h+ Q9 b1 ]$ u$ U; d7 i9 W. z* q
    (*memory).p[0].runningTime = systemClock;8 \0 j) r8 d& o# ]  I, n
    (*memory).p[0].produceTime = (*storage).p[j].produceTime;
    4 R( b( v. A# i1 E( V( C* C+ [  \for(i=0; i<(*memory).p[0].ioNum; i++)
    1 N- N: K0 M  f% d' D(*memory).p[0].ioClock = (*storage).p[j].ioClock;
    3 @  L+ h% o3 |) f4 e1 {, C; dfor(i=0; i<(*memory).p[0].computeNum; i++)
    $ X4 \) o8 U/ L  r(*memory).p[0].computeClock = (*storage).p[j].computeClock;
    ) [% e- c1 w* _" V. H. R(*memory).proNum=1;, ?2 N; x7 m, A% j, d, o9 z
    *spareMemory = *spareMemory - (*memory).p[j].askMemory;' Z6 C: |! C6 Z; d/ J
    produce_one_task(&(*storage),j,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程
    ; \# s  m( [* |2 p3 tMAX_COMING_TIME = (*storage).p[j].comeingTime;
      g+ c) y! B7 {6 t3 _}8 l. `$ J! U" G9 E
    else
    : w7 p. S5 l# d& @% b{' ~" m# b6 H( A( [# Y4 b
    printf("A process ask for a memory overed the system capacity\n ");
      c# N% u. S! E' }4 I0 bexit(1);0 W. E! V+ o( _$ A; ]
    }2 _* X, j  |, s! d! T, p" h$ ?. n5 F2 C
    return 0;
    ) P6 c7 D2 c, L+ L}+ ?/ c9 e3 I% Y, \) M) D
    int ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
    6 b+ ^3 R& H* {: I{
    / F8 M# ~- x. R* M2 Q) i( gstatic int compute=0,waitio=0,change=0;
    3 L8 b4 d  d2 {static int computeLast=0,waitioLast=0,changeLast=0;* t/ V- Z& x) f* s! r
    int i=0;
    ; T5 Y! p9 q& n, b  v+ @if(draw==1)
    ) M  D1 x& s& o0 T! j{
    + U& \) Q1 f% E8 v; c- _//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
    , \1 T. \6 e! R/ odrawPerformance_SJF(0,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
      X7 P2 j( B1 m1 h8 e
    3 b7 O( i% y, U# P" _3 J$ ~. R# b. H# `" M( g
    computeLast=compute;0 a0 a5 L# C% h6 F1 w
    waitioLast=waitio;) ?" B" @  d3 P% P$ M1 b8 ]& H" C& Q
    changeLast=change;- t* x  n# H' C# h
    }
    0 [& j9 ?* L2 u( D; P9 B$ Iif((* memory).p[0].flag==ready)/ @/ Z) Y- X. u' `+ y' h% E
    (* memory).p[0].flag=computing;
    5 k5 [2 P! N* g3 q& ]4 nif((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing): k, }0 |4 o5 u* a( F4 g
    {3 _9 \' x! H3 ]0 X
    i=(*memory).p[0].computeNum;. _- t6 _$ k5 m4 Z  S
    if(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed
    8 e9 R9 y4 c9 L$ H4 @1 ~{, @1 P' G$ ~+ R% n( o6 ?% V
    (*memory).p[0].flag=IO_waiting;; K1 S5 N) t) P
    (*memory).p[0].computeNum--;6 `$ P. o6 N+ v+ O
    change += exchange_IO_Compute;
    3 m7 x- }6 s$ i  hcompute++;
    $ [, `. b. A1 a4 t3 O5 g% O}
    " |# o9 \. g# d8 A. ~else
    ; y! M" k8 ^) P, j" I{
    6 M8 ^0 S4 e+ Ucompute++;3 W# f( `# g0 \7 r& ~3 z" v) ^9 O
    }
    ; ?; R& ?( l% N" R, @! y& b}
    0 E( G/ v9 }& D' t: Zelse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
    3 |' \$ i* X# B/ T) e, t{
    9 l! ^8 x; \2 p) F( y  J: E( I4 f
    i=(*memory).p[0].ioNum;% X4 n1 M% U; J9 k  y9 [
    if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed
    3 T) R8 M* j2 H- h; G+ C{  ?" P9 k; A# w) b  k8 `
    (*memory).p[0].flag=computing;
    * e4 c4 i0 b3 \  c4 Z(*memory).p[0].ioNum--;
    , o+ v4 `$ l; ~. Kchange += exchange_IO_Compute;3 k( V" V8 h& ?, w- |
    waitio++;; V/ d# c3 q! Y; H
    }& E6 m3 K7 M" B2 [: F
    else
    ' Q; q) _0 a2 U1 O( P  _2 L{
    / n# j# `; e0 ?waitio++;
    1 d3 s2 e# k! C' ~  \( k) E( J6 k}. q4 C! [9 @; l( y
    }% A/ C( V6 k! G% w
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)4 R8 n9 F- Y5 ~0 G$ `7 z( c
    {& q, q$ Q0 `- G8 C
    (* memory).p[0].flag=IO_waiting;
    % q* y( i6 o6 r9 Rchange += exchange_IO_Compute;0 ?6 }! E/ M8 r& `" L( J) N7 E; x
    }+ Y$ Y7 Q# e6 ]# |- k
    else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)
    3 M( X' u8 ?) E: u0 v+ z{- {; T: `" f6 [  J5 x4 B/ ~
    (* memory).p[0].flag=computing;  U; ?( q+ y) O2 g$ Q5 s, d. V
    change += exchange_IO_Compute;
    3 v0 G1 X4 N/ [0 S}
    6 M8 n0 g# R& J; v8 g% `2 u/ qif((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0)  //一个作业已经完成( G. g4 G% @6 `# U
    {% O4 j. t, U6 |& r) H: A
    (*save) = (PCI*)malloc(sizeof(PCI));
    9 ~( s7 @: X( e8 Y; e  t5 s  I(*save)->next = NULL;
    $ Q$ u2 z, U1 K/ \(*save)->processID = (*memory).p[0].processID;
    % Q1 t& L+ t+ E, G0 Y4 ?8 q(*save)->comeingTime = (*memory).p[0].produceTime;: v! h5 Z8 b/ d" _7 \
    (*save)->askMemory = (*memory).p[0].askMemory;
    % P) F( O2 G7 Q8 P4 H! F6 X, B6 v(*save)->compute = compute;; `, t  X1 M" ]: q/ Z
    (*save)->waitio = waitio;. K+ w, p0 H1 I+ p6 Y* q
    (*save)->exchange = change;2 l6 i6 Z2 r1 A" W* H
    (*save)->completedTime = systemClock;
    , A  T6 S" _, E7 u(*save)->runningTime = (*memory).p[0].runningTime;$ p2 U5 x! a% Z1 A
    *spareMemory = MAX_MEMORY;//*spareMemory + (*memory).p[0].askMemory;+ E/ D  z( |4 i" ~. t0 [/ f! U3 ]
    compute=waitio=change=0;7 O# P$ d& ?/ g
    computeLast=waitioLast=changeLast=0;7 I7 y2 a4 W. a' m, q
    SJF_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));
      [0 O) `" {) B3 G( M& M/ c6 Jchange += exchange_process;. `9 I/ ?. d4 f& Y
    return task_completed;
    / m: ]' r' Z9 f& z5 D( c8 K1 k}1 r. V5 ]$ G; w* l4 [; B3 m
    else, U! o& X0 ]) _# w. D# B
    return task_not_completed;2 N/ D% S1 w# A6 u& N2 a
    }
    - x  d/ d9 {3 Vint SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)- b9 V9 I7 K* X- E
    {/ D' L: M1 l3 Z  U
    int i=0,j=0;1 _( p( w" t) p" A
    for(i=1; i<(*storage).proNum; i++)
    , p! i8 S* M; @0 p: }{
    ( O8 m# a/ O3 Xif(((*storage).p.computeTime+(*storage).p.ioTime)<((*storage).p[j].computeTime+(*storage).p[j].ioTime))$ {. d& P3 p1 X4 v
    j=i;( K/ o4 w" x( H5 [
    }  K' j: z3 g/ F% |
    if((*storage).p[j].askMemory > *spareMemory)
    ! p# s/ U, m0 G* \{
    - i. ]8 z6 [  |& x) |9 fprintf("The memory asked is overflowed than the system memory.\n");9 O) K$ [% _6 z$ f( i8 K, ~! c
    exit(0);
    9 i" J- Y% _8 H; b5 \}
    6 q! z. F: {7 P  belse
    8 L2 g' q5 @- J{
    4 f9 E# s' B. c6 \- F2 y- L+ g& {(*memory).p[0].askMemory = (*storage).p[j].askMemory;, D% {) E* Z& m; {3 I8 V
    (*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
    4 L; |, S: R) f1 |4 z! o- [1 \(*memory).p[0].computeNum = (*storage).p[j].computeNum;  q4 D! G( z/ @4 z" }# D
    (*memory).p[0].ioNum = (*storage).p[j].ioNum;$ J7 ^1 w/ v$ ?% q0 T
    (*memory).p[0].processID = (*storage).p[j].processID;* k: X7 I, ]7 H
    (*memory).p[0].flag = (*storage).p[j].flag;/ @& j, F' O3 q, k( t3 _
    (*memory).p[0].ioTime = (*storage).p[j].ioTime;; A# K% {% M1 a: L' L  F* }& u
    (*memory).p[0].computeTime = (*storage).p[j].computeTime;
      ]& W! Q3 ]7 D! p$ A( D(*memory).p[0].runningTime = systemClock;; t7 U' ]1 B4 e4 j  o$ _
    (*memory).p[0].produceTime = (*storage).p[j].produceTime;
    6 C+ j( g+ e, M& dfor(i=0; i<(*memory).p[0].ioNum; i++)% k/ d$ S# |4 ^+ S1 `* V# \
    (*memory).p[0].ioClock = (*storage).p[j].ioClock;
    ( ^8 H0 \6 [- f3 V" V# c" _for(i=0; i<(*memory).p[0].computeNum; i++)! Z- w9 _) a& Y, C* s
    (*memory).p[0].computeClock = (*storage).p[j].computeClock;& Y1 v. L3 m8 a! F& P' ?
    (*memory).proNum=1;3 [7 w6 y0 g' l9 M; q% U# O
    *spareMemory = *spareMemory - (*memory).p[j].askMemory;
    % z& Y+ d3 M/ j! k% Sproduce_one_task(&(*storage),j,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程0 A9 s; h6 o4 a
    MAX_COMING_TIME = (*storage).p[j].comeingTime;
      p7 c5 Y) N- ]' j}  k7 M3 r: `) A* T
    return 0;/ k) _- D5 V' X" c/ e
    }( P; n9 o$ N# W! Y- f
    int TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
    3 }  d6 A* A1 G2 [{( M6 w. P; i/ h$ \5 o
    static int compute=0,waitio=0,change=0,clockSegment=100,poi=0;
    8 k! H4 H  q/ ystatic int computeLast=0,waitioLast=0,changeLast=0;
    4 S* h, {3 h; b. {5 Qint i=0,j=0,k=0;
    , R, N/ f; X% y* z0 b$ N( z2 Fif((*memory).proNum<=0)& I( q3 ]# B+ T9 ?3 |
    TimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),-1);2 x2 D3 K! o  O- r+ u
    if(draw==1)& _8 U8 g" m& h9 E
    {
    , T' _- w1 k  E//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);$ `7 o- h: G8 p2 m9 {3 e+ o! e
    drawPerformance_TT(400,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
      r6 f% i. E$ `: G$ q/ p! k( ?$ ?+ T  S' ?$ u

    , j* ~3 g( I8 C5 X, d1 xcomputeLast=compute;, E, |$ u& R& m
    waitioLast=waitio;3 @: e, A) T3 `" V2 u9 C- j) `, n1 z
    changeLast=change;
    # l. z6 z+ l; E" {9 X" ]}
    4 Q2 o1 Q/ z; q; d+ \3 P6 [5 ^" ]if(poi>=(* memory).proNum)
    * I- U' A6 P' V( zpoi = 0;
    ) R( }- h+ |8 L- n( nif((* memory).p[poi].flag==ready)  u+ T" I; V& P) ]$ d2 G
    (* memory).p[poi].flag=computing;
    ' x3 M( j3 R' W8 _if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==computing)
    " I; |: Y7 C9 h8 \# x( j% n{5 g" @! S0 ?& }* K1 F  p4 z0 K, Q* X
    i=(*memory).p[poi].computeNum;, X4 i2 z- \& _  @
    if(--((*memory).p[poi].computeClock[i-1])<=0)// one compute tase is completed! Z* ~8 A0 L5 [: K, t2 Y
    {# O3 _6 f! s1 }- M" A3 t
    (*memory).p[poi].flag=IO_waiting;" L" }4 a5 H3 |& w! o: A
    (*memory).p[poi].computeNum--;
    ; `  l+ f) ^8 Dchange += exchange_IO_Compute;" l5 Z+ x6 l( i" l$ F" y$ s7 g' A
    compute++;
    1 F# k  b+ X' c# }1 W}+ F8 X. N6 [+ U+ ]
    else; z+ m+ Y7 ?" [! Y' T5 G& Q
    {1 R& B4 C9 b: r' D2 i5 x! }
    compute++;
    ' b' M) ], q9 h; P}" F% O6 Q3 A3 p% w& e6 G
    }
    . W% J1 |. U/ I- t$ u* r# v, D0 R6 gelse if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==IO_waiting)( }; k2 a% s1 g7 \; N. H
    {
    . D) w; O/ f7 ?
    3 U9 B) @2 t5 k; M* ri=(*memory).p[poi].ioNum;
    7 H8 u1 [1 R/ {: R- [5 c! Qif(--((*memory).p[poi].ioClock[i-1])<=0)// one io tase is completed
    5 G* _. A, C# X* Q( L8 Z{, i/ P* G- }9 \# U% ?# {
    (*memory).p[poi].flag=computing;
    / W7 t8 E, k) |' v. i. C- d% Q(*memory).p[poi].ioNum--;
    ( d' J& V. ?4 Uchange += exchange_IO_Compute;+ Q) \- y: J6 p- T9 [) |9 E
    waitio++;1 B' M3 S' C; v
    }8 j  s9 `& S* c' b7 G9 s
    else, ]% Z' {2 @5 {3 X; G* t9 @: l( K
    {
    . D- P3 M  F( z/ |! Lwaitio++;, x5 z( g6 L8 |- \- h3 I
    }
    0 g( a* |3 ~3 s: ^}
    5 ~7 |4 D2 ]0 Z$ gelse if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==computing)
    , ~$ {" u; }% e) d: }2 e& x{, \5 K" S/ E# D( l: Z. A( j0 j& [
    (* memory).p[poi].flag=IO_waiting;
    * }: h/ g: p( a  Gchange += exchange_IO_Compute;
    * j6 t& @% r. l! ^}
    : q1 Q7 b$ S1 |& k8 delse if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==IO_waiting); {$ d! C( i, f2 r6 ?
    {
    / d8 J. p: g# f( Z; g(* memory).p[poi].flag=computing;- \) |8 m. M* k2 h
    change += exchange_IO_Compute;  _0 T1 K2 p0 J
    }
    - M) @/ z" L1 d8 _1 P: p4 H- E7 Cfor(i=0; i<(*memory).proNum; i++)  //其他等待io的进程可以并行推进/ o7 J) O& X8 B6 l9 p# Q
    {
    . m( t0 t* _2 A5 J; L& r9 W& aif(i!=poi && (*memory).p.flag==IO_waiting)
    % _! X1 V. f$ O, Z% U" b. `, p{" S: P# k! a' i4 I2 U. d$ P9 ?
    j=(*memory).p.ioNum;
    ) U1 d2 c0 }1 \% Jif(j>0)  t7 J/ q$ X8 A8 j; h
    {
    3 B. n3 P" W* t& d$ u, Mif(--((*memory).p.computeClock[j-1])<=0)// one compute tase is completed/ A/ Z. z5 x7 N& D* D, Z
    {
    - C2 [$ U8 s+ a+ ?) F+ x, ?% ~: i(*memory).p.flag=computing;6 r+ w" u/ y  `: R8 U
    (*memory).p.ioNum--;
    6 [! N6 G% q; n; K  |* L) Xchange += exchange_IO_Compute;
    ) V# a' l2 u3 {9 T7 l}
    - r' W( U  a5 u- v( U* y1 X}
    2 m, I  X, X; i+ d( b) j9 W}
    " t2 T# G3 i0 t0 X4 n}
    + N2 A' A, `( B$ n/ `for(i=0; i<(*memory).proNum; i++)  //处理已经运行完毕的进程
    7 e5 d  T; U; C# P$ m& F# q3 K{
    0 J1 D! o& G# Oif((*memory).p.ioNum <= 0 && (*memory).p.computeNum <= 0) // a task is completed
    - O* m- G/ @8 a/ K; g( H2 d- ?# u{
    3 P- a# E, m; N3 x: _+ j, h(*save) = (PCI*)malloc(sizeof(PCI));; W& v" X) i1 }" H; ?" K" G% h4 c
    (*save)->next = NULL;: X7 Z4 Q8 f; \/ H: r" t  H
           (*save)->processID = (*memory).p.processID;
    ! H+ J0 ?  ?8 v, o! H(*save)->comeingTime = (*memory).p.produceTime;8 D  M, K* X- i$ \- g
    (*save)->askMemory = (*memory).p.askMemory;* T$ s$ _2 X5 T' m+ t
    (*save)->compute = compute;
    / k' ~0 n( k! y$ S8 I; \1 Q(*save)->waitio = waitio;& }; ^" ~7 v+ K- q9 J) l
    (*save)->exchange = change;3 o) c8 S# n$ p& G5 j2 l
    (*save)->completedTime = systemClock-(*save)->comeingTime;
    4 P! D) Y2 N- v' C1 P" O& d- b(*save)->runningTime = (*memory).p.runningTime;% p! o! a4 d6 l  M9 e
    (*save)->completedTime = systemClock;
    & }+ V2 l0 F8 m  V2 k*spareMemory = *spareMemory + (*memory).p.askMemory;
    ' z# D& z# v* S4 H8 E% Zcompute=waitio=change=0;4 m$ R3 P+ a; L% L
    computeLast=waitioLast=changeLast=0;
    / u% b+ k9 y: \% z5 hif(TimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),i)==1) // 调入一个新进程进入% g. ]* D; Q+ L2 ]! S
    {
    9 P9 |( x8 P4 a) K, Tif(i==poi) //占用CPU的进程已经运行完,将时间片分给其他进程
    & E. n% i2 g" f' M{
    8 Q) z7 f+ S" T+ xpoi++;
    2 z9 E/ D9 o, Z& \3 H2 ~   clockSegment=2000;
    5 U8 j$ T2 l9 Z4 c7 T# h}
    $ E7 o9 R  H6 }( p. I/ s}
    , u4 C5 G/ u' H# y' Velse  //没有足够内存调入新进程( a% V$ ^5 v% h. ?
    {
    # S; o! ?1 ^+ K. u5 h( Kif(i < (*memory).proNum-1)1 ]1 j) W" o' C' C& h7 U
    {
    0 t  `8 D: o" J) v& ^: sfor(j=i; j+1<(*memory).proNum; j++)
    & l5 E- D: F- ]' y# ?{' q* j0 ^4 a8 f1 x1 v/ Q
    (*memory).p[j].askMemory = (*memory).p[j+1].askMemory;! w8 ~6 L( H) q
    (*memory).p[j].comeingTime = (*memory).p[j+1].comeingTime;1 L  x3 n& K1 V& x) M
    (*memory).p[j].computeNum = (*memory).p[j+1].computeNum;
    . n4 q" p* p$ ~7 T(*memory).p[j].ioNum = (*memory).p[j+1].ioNum;6 F/ B8 U) O* e, v! l
    (*memory).p[j].processID = (*memory).p[j+1].processID;
    1 B3 g( T/ I, \" \  v5 ?(*memory).p[j].flag = (*memory).p[j+1].flag;
      m$ ?1 |( [( |3 {/ k(*memory).p[j].ioTime = (*memory).p[j+1].ioTime;
    # e7 c' p5 ]3 b  P% |" h(*memory).p[j].computeTime = (*memory).p[j+1].computeTime;
    ( H. ^$ m% J) j' f(*memory).p[j].runningTime = (*memory).p[j+1].runningTime;
    " [  g8 P0 z/ m: ?! `- H! l! ^(*memory).p[j].produceTime = (*memory).p[j+1].produceTime;
    7 N1 ]* T- q3 G! j- `( c4 v(*memory).p[j].completedTime = (*memory).p[j+1].completedTime;
    3 g( R0 r/ ?7 Kfor(k=0; k<(*memory).p[j].computeNum; k++)
    3 ]- F" w+ y5 e(*memory).p[j].computeClock[k] = (*memory).p[j+1].computeClock[k];& _7 D; v8 C. \$ D$ G. l0 l- ^
    for(k=0; k<(*memory).p[j].ioNum; k++)
    5 F$ l, ?" g3 i2 T(*memory).p[j].ioClock[k] = (*memory).p[j+1].ioClock[k];
    8 B# y8 N/ r# w}0 y! k% I' F9 \4 g
    if(i<poi)1 G2 H. @( `& o6 l3 C
    poi--;: X1 i; ]& I; r
    else if(i==poi)
    / M# n! ?- O8 AclockSegment=2000;% _4 U% V( W6 W. B# S& R7 |1 V
    }1 g3 Y% w4 k) Q, m7 |2 R
    i--;2 r1 X  |' y2 r. u6 o
    (*memory).proNum--;# E! z3 b( c  k2 f/ l7 @7 x6 K
    }
    0 a6 d. H) D" W" d. H  E9 Greturn task_completed;
    5 u: }# U; a! {- W2 t, I}
    5 F0 h8 k% e+ l  @}0 z% u1 @7 p+ J- s4 G
    --clockSegment;
    , G0 E  S* w( @: ~! U+ Iif(clockSegment<=0)2 B. Z6 P7 Q& k' I9 |
    {
    % k. k: r/ Y/ s: ipoi=poi+1;
    - |( \$ j" k4 [4 A+ m. U! R4 Mif(poi>=(*memory).proNum)3 p; ]% v2 y) m" c' |
    poi=0;8 B, A1 O/ A" ~2 ?2 {
    clockSegment=100;  E0 B" [# @( z! k( K
    }
    $ `! o/ j  }# C7 P5 _; zreturn task_not_completed;
    ( @! I  C* \  ]$ U  J  W3 K4 y}  d; g  t% b/ A2 S, T' ^  O
    int TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos)
    $ ^! f$ `' e) }' i- q{
    ; l  v" }7 D2 v) \$ h1 \int i=0,j=0,k=0,flag=0,translation=0;  N; o$ w% f7 @/ J2 Q6 ]
    for(i=0; i<(*storage).proNum; i++)+ p  ~$ p- f* x! K4 a
    {
    ' u4 o8 r* }/ c% E" wif((*storage).p.comeingTime>MAX_COMING_TIME)
    7 J8 F0 m. g5 ?4 C, j7 [MAX_COMING_TIME = (*storage).p.comeingTime;% B+ D" N1 z; \8 ^! Y/ Y
    }
    % |1 O3 j; K% J2 v! M$ q+ xif(pos>=0)
    0 I, j0 m1 u1 J: Q/ y# Q: v{
    / Y8 X2 I  n: B8 t+ T( Z1 k. Jfor(i=0; i<(*storage).proNum; i++)
    9 v! F/ j2 I: z- `  u& e8 D{4 p+ Z: ~9 ^- l7 ^. Z
    if((*storage).p.askMemory <= *spareMemory)% V* F5 w: T8 v$ f; F0 \3 o
    {5 I2 {( y1 I1 I) [
    j=pos;
    # R- H1 p9 h- A& d0 G$ a& O9 X0 F(*memory).p[j].askMemory = (*storage).p.askMemory;& g2 H% v8 r; x# z/ r
    (*memory).p[j].comeingTime = (*storage).p.comeingTime;
    " P" }  K9 q" R(*memory).p[j].computeNum = (*storage).p.computeNum;. U$ Z: n: s2 V/ C
    (*memory).p[j].ioNum = (*storage).p.ioNum;# f9 N7 h9 [0 W7 e+ I: z' k* E
    (*memory).p[j].processID = (*storage).p.processID;5 R8 n6 C5 Q/ D, Y
    (*memory).p[j].flag = (*storage).p.flag;- @, O, X/ G9 F/ w, S. p0 Q
    (*memory).p[j].ioTime = (*storage).p.ioTime;  [# _: O' t5 N% U
    (*memory).p[j].computeTime = (*storage).p.computeTime;4 `- H9 U; b) ?8 J
    (*memory).p[j].runningTime = systemClock;8 C9 w9 I4 r$ J# |' q- c
    (*memory).p[j].produceTime = (*storage).p.produceTime;
    " ]! c: ^% _/ T* t2 kfor(k=0; k<(*memory).p[j].ioNum; k++)1 `8 {: J3 T# w* G6 K9 J* d. i9 W
    (*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];! w- j- ?$ P" B. v1 u
    for(k=0; k<(*memory).p[j].computeNum; k++)) f- M/ D: v! n3 l! X
    (*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];8 z% _# ?+ r/ `& E, o$ e1 e: c
    *spareMemory = *spareMemory - (*memory).p[j].askMemory;' {* X7 r, y/ z) v
    produce_one_task(storage,i,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程
    ; F$ D, |* \! t( x$ dMAX_COMING_TIME = (*storage).p.comeingTime;
    # w3 _1 w* _; N; ?! K# rtranslation=1;2 d* m% T5 D$ k$ ?& e
    break;
    ! P4 c5 F& D0 {9 Z% ~. @/ _( u}
    , r) f/ d+ L8 g, Q}: R2 P) k6 k& A5 p" s! ~
    }# p) X: t) {) b5 |% c: O6 j
    else  |& ]+ T3 u( Q- {4 z, L
    {, T/ a7 h# b' ^. ?- ?3 [* h
    while(1)
    ' t2 E+ w$ N1 S# j6 K{- e8 f1 W6 r% t; \' }' R! f. K1 Y
    flag=0;. J! Y5 s" z% V; n  b
    for(i=0; i<(*storage).proNum; i++)6 E# T4 b7 g* Y* S3 a
    {
    - l5 s, K( b1 {% t& \% S4 B! W4 Gif((*storage).p.askMemory <= *spareMemory)( Y5 [* c" x& b1 O
    {$ F7 t! ]1 g) w" S
    j=(*memory).proNum;
    ) W4 p' u. j% o$ H3 U(*memory).p[j].askMemory = (*storage).p.askMemory;9 n5 m$ g2 T9 I0 L' k: m& E7 g% l
    (*memory).p[j].comeingTime = (*storage).p.comeingTime;4 a$ ~- q% T. ]  U9 @( G/ {9 T
    (*memory).p[j].computeNum = (*storage).p.computeNum;/ a8 q! t9 }. S
    (*memory).p[j].ioNum = (*storage).p.ioNum;" |9 t0 w  v2 y* b# l+ g) y
    (*memory).p[j].processID = (*storage).p.processID;; N+ U" v" d  Q9 q. q6 B! n
    (*memory).p[j].flag = (*storage).p.flag;
    # b* l; y0 _7 c0 `(*memory).p[j].ioTime = (*storage).p.ioTime;  |, l; }! t2 [
    (*memory).p[j].computeTime = (*storage).p.computeTime;% [3 g. F$ B) o7 ]# [7 g* r! D
    (*memory).p[j].runningTime = systemClock;) q6 Y; p: s$ h. b: t, B" C- U
    (*memory).p[j].produceTime = (*storage).p.produceTime;
    , j5 @. z2 @* G& u1 b6 t9 \for(k=0; k<(*memory).p[j].ioNum; k++)
    5 ^8 \5 F8 [' t0 x(*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];
    - T+ A3 {/ F6 K6 L* o6 Dfor(k=0; k<(*memory).p[j].computeNum; k++)
    6 [# y0 i  u8 F* j: \(*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];
    8 p! ?8 T) [! P/ C+ Q) J(*memory).proNum++;
      v  E$ U( Z# c8 h5 a*spareMemory = *spareMemory - (*memory).p[j].askMemory;" P# M. C- b! W5 r0 ]1 i4 c
    produce_one_task(&(*storage),i,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程
    8 z, @/ L/ ^/ i  y4 E) TMAX_COMING_TIME = (*storage).p.comeingTime;
    $ R' L2 w- p5 s7 w( Iflag=1;4 L8 ]) I) _6 X, p% O: b
    translation=1;
    $ Q. b' z# R' }; w5 B}
    + s% {- L, H2 y: ?& L}
    ; [4 q$ h' F$ w$ `+ H. V& Dif(flag == 0)
      [9 ^; ]" }( l0 g. c2 d  z0 ]break;
    - q# C' I. D. E: f9 ~8 \}# z4 k2 u1 I8 M* |
    }9 C) \$ [: ?" |, |7 p3 r
    return translation;
    $ `+ H$ c) `: H4 W}, I6 H- B4 d- T8 O6 Z* `
    int FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw)- z. h3 Q- ?, n5 Q9 C" ?& [
    {4 l1 S  O( L: s8 [! X' m- |
    static int compute=0,waitio=0,change=0,flag=0,flagiocpt=0;2 k& B- w& a) o  A
    static int computeLast=0,waitioLast=0,changeLast=0;0 ?6 [5 F( s  y# K
    int i=0;
    % N( @, |- M2 A4 E/ c& Fif(draw==1)5 A& @- ^7 f) k- Z, q! @. G! j
    {
    ' w( y! ~( D4 Z! ~# H2 J. R7 O//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
    . {/ R6 d2 ^" V2 ldrawPerformance_FIFO(0,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
    , M- A5 M) t8 t$ l! r% u1 s/ ~8 H! h) B5 T* [2 e4 N8 |% g5 k" M0 X
    / G- l/ Q8 l$ ?* v" @# X
    computeLast=compute;( F3 d; q4 A0 s/ Z% n3 x5 j6 O
    waitioLast=waitio;" N' ]+ R; \* I  s; g
    changeLast=change;1 k1 M" y! k9 |/ \: n
    }
    & E9 c4 j6 s$ Tif(flag==1)  
    ) k; Y9 C9 z( u( \7 _( r{9 F5 i3 u/ I* K$ n6 U5 Y; D
    if((*memory).p[0].ioNum>0||(*memory).p[0].computeNum>0)  //task is not completed
    3 C$ |4 f& s/ g2 u$ k5 m9 o$ S{3 P9 y7 R$ O# N, x5 }3 @
    if(flagiocpt==0)   // implement compute
    - v- ]* Y- P3 ?{
    . D6 G+ Y6 A: J, [- k7 W9 l; }i=(*memory).p[0].computeNum;% X0 K4 S' t; M+ I# I
    if(i>0 && (*memory).p[0].computeClock[i-1]>0)
    5 y: x/ L/ C, f9 x{: A0 g  U' @1 N: T" Y. k0 u
    if(--((*memory).p[0].computeClock[i-1])<=0)// ome compute tase is completed
    / P2 t9 e; x- `" x# Y) E{; a' K0 x2 C1 t$ m
    flagiocpt = 1;2 K" Y8 V. G( w& g+ [
    (*memory).p[0].computeNum--;
    8 s% u) o) F9 \7 _change += exchange_IO_Compute;
    1 }6 M9 p( n1 w$ }& [compute++;* D4 I; K0 S1 y  |5 ?8 K
    }
    1 b: |5 X) x! j" o6 h* |else8 c9 m, M7 K$ t
    compute++;  i, a( P6 c6 y8 G

    + ^& e: G! x1 O  z, _; `}
      @1 N9 f6 m$ i; c6 |else
    1 g" ~' h0 z* i0 B2 v1 ~/ uflagiocpt = 1;
    . J/ g( ~( T% e, ?9 ~}2 n9 }0 p+ \% O+ i2 D
    else  //wait io
    ! o1 p! ~; E2 m( N/ Q0 ?* I7 R( x$ I{
    9 l" y* s4 I2 [i=(*memory).p[0].ioNum;
    - z  x9 `0 U( [$ O" l: E$ s- }if(i>0 && (*memory).p[0].ioClock[i-1]>0)" K2 x" R8 [* w+ Q
    {3 O9 n9 C! p2 T$ Y2 K( ~8 ~
    if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed  C  A" \$ ]" l4 |: _' |1 r# _9 g
    {5 J9 `8 i) C! V0 y" j; h
    flagiocpt = 0;& T9 }8 v6 |1 O' D7 {8 D. H; {
    (*memory).p[0].ioNum--;9 P/ c8 \( X; Z  C6 O
    change += exchange_IO_Compute;
    : ]0 j1 [9 j: U; L; F- Qwaitio++;1 J/ {5 Z/ Y" I! X  X
    }
    . d/ H$ \6 k) G, X) H& |else8 o( g7 {4 T7 e* Y. `1 }
    waitio++;0 B2 R6 Y+ o6 ~/ ~' R2 X. e% [
    1 u& [2 a* Z* s/ l
    }8 d6 ]& j" M! a* b. U
    else6 I: }0 E) C% B9 n" X- k
    flagiocpt = 0;" A& \: C# {8 y3 \
    }
    * T, C- |' s# g9 a}( B! G7 G+ n+ o2 {
    else  //task is completed
    . s: }) R1 y4 C{
    3 L' K/ Q8 K2 A+ S% Y(*save) = (PCI*)malloc(sizeof(PCI));
    & g- I7 `# o2 F7 L2 R1 C& H(*save)->next = NULL;
    5 \. x6 G0 V2 ]. l6 Y8 q9 v) m5 y       (*save)->processID = (*memory).p[0].processID;
    # e* `; z; _6 ^+ P' R2 s(*save)->comeingTime = (*memory).p[0].produceTime;- f3 p0 N* e4 F# ]. ?; ?* {3 p
    (*save)->askMemory = (*memory).p[0].askMemory;( ?* L0 ^6 B- _
    (*save)->compute = compute;3 U! ^: J* N: Q# l6 a
    (*save)->waitio = waitio;
    - b9 W5 j  @2 v6 H' X( B0 u4 I$ a(*save)->exchange = change;
    4 a3 l% q8 x3 J(*save)->completedTime = systemClock-(*save)->comeingTime;8 |4 o8 C5 D# Y* L! a" l* e
    (*save)->runningTime = (*memory).p[0].runningTime;8 k3 x% C2 b4 v5 r5 J/ V( v
    (*save)->completedTime = systemClock;6 {) c  E3 M, N/ @+ y+ t# A5 o
    //*spareMemory = MAX_MEMORY;8 L& i: {! q( W+ L  R( M
    free((*memory).p[0].ioClock);2 M7 ]4 s; o8 u7 g
    free((*memory).p[0].computeClock);( ?' z  D0 R9 u* z9 i6 z
    free((*memory).p);/ o$ y* r6 }0 y& X" U* {5 [
    flag=0;
    8 c/ H' V/ }! Pcompute=waitio=change=0;# |& \0 H: q% o0 g6 p: Q/ q' @
    computeLast=waitioLast=changeLast=0;
    9 U7 K& c2 f. t* |! ]# X" breturn task_completed;
    # {' N4 l& o5 O% w% y5 L( u  G}+ J0 L5 [  l* U' L) C
    }. n8 Y3 t# h8 k. y3 z- j1 m
    else         
    9 @  @8 Y5 m  e% X2 r5 M' k{
    9 [7 {  R# r  \; mFIFO_storage_to_memory(&(*storage),&(*memory),&(*spareMemory));3 b) W$ e) k# Z# G* N
    change += exchange_process;$ M. a! E( s, `6 ]
    //*spareMemory -= (*memory).p[0].askMemory;
    : q+ ]  ]( g) kflag=1;
    " D* ]% r+ v# {6 ]2 [' _//showProcessInf(*memory);
    0 r% n  T1 P+ s  y3 R: breturn task_not_completed;
    & V& x# ^" i  E$ _4 F# N* ~6 D- Z$ E$ J}% l5 e; S) n1 G( H+ x2 u2 I- B# ]! k) O
    return task_not_completed;
    0 i2 g/ S7 m- P2 c2 E+ h2 g}
    / j3 T4 [1 ^, R- y: Eint FIFO_storage_to_memory(processPool *storage,processPool* memory,int * spareMemory)
    ) W# ]6 t3 D/ ?9 v* H" u; Y' h' {{
    6 B: f& ^0 w4 G  Wint i=0,j=0,k=0;
    ; `/ z& P( M+ ~3 @' U# s* JMAX_COMING_TIME = (*storage).p[initProcessNum-1].comeingTime;: L) D8 V/ M" f3 c1 d  y
    (*memory).p = (process*)malloc(initProcessNum*sizeof(process));
    . l+ h, }: s. ^2 m  B; z/ O5 qmemory->proNum = 1;
    $ @% h! V" c. e- P9 i1 kfor(i=0; i<initProcessNum; i++)1 A0 p, e1 h$ y+ q2 \0 l, W; b* Y% J
    {) q& m1 o7 }! Q! ^6 f3 y
    if((*storage).p.askMemory <= *spareMemory)1 K: M& a9 E# Q3 b& G
    {. C5 X% F9 w- z( ~5 V
    (*memory).p[0].askMemory = (*storage).p.askMemory;6 e3 X3 J: l3 ^" {
    (*memory).p[0].comeingTime = (*storage).p.comeingTime;: l+ `0 D' J% z3 E# \( g7 X, y6 L- R/ @
    (*memory).p[0].computeNum = (*storage).p.computeNum;
    8 u/ @8 A  d$ u/ \(*memory).p[0].ioNum = (*storage).p.ioNum;/ G* x4 o( L  Q6 {# g
    (*memory).p[0].processID = (*storage).p.processID;0 J' T: O) ^; E. e6 M) F
    (*memory).p[0].flag = (*storage).p.flag;
    " N: T2 V1 U1 F(*memory).p[0].ioTime = (*storage).p.ioTime;( Z7 J' Q' q' J' S7 k
    (*memory).p[0].computeTime = (*storage).p.computeTime;6 p! Z, Z& |) c. Z
    (*memory).p[0].produceTime = (*storage).p.produceTime;
    : Q+ Q/ u/ w) J. i8 F7 w3 G(*memory).p[0].runningTime = systemClock;1 g( u! Z, o  p4 u' V8 d) T
    (*memory).p[0].computeClock = (int*)malloc((*memory).p[0].computeNum*sizeof(int));/ y, G1 y. `  r5 \
    (*memory).p[0].ioClock = (int*)malloc((*memory).p[0].ioNum*sizeof(int));/ I+ h8 {: s! M) [8 t, l# k
    for(k=0; k<(*memory).p[0].ioNum; k++)
    ' W- P" V+ p- G9 S) B(*memory).p[0].ioClock[k] = (*storage).p.ioClock[k];4 K8 f- V& o( @* {: U; [
    for(k=0; k<(*memory).p[0].computeNum; k++)
    : v% V' L2 Z; I& O- }+ \(*memory).p[0].computeClock[k] = (*storage).p.computeClock[k];1 a, M0 ?, N4 {. y, Z1 ^! p* `
    break;
    6 t' B: k% {# W& ]3 ~}
    + W# {8 p4 o) T- C}5 b- G3 x. t5 M
    if(i<initProcessNum)  //调用一个作业进入内存后,并再生成一个作业等待调入3 Y0 v, Y4 W! Q8 Z" P$ z
    {+ h- V; T5 `6 |5 `8 [& M
    produce_one_task(storage,i,ID_FIFO++);+ n/ Q. I1 v; x* v
    MAX_COMING_TIME = (*storage).p.comeingTime;
    + T8 f8 T6 n! C8 zsort_by_comingtime(storage,i);3 _6 B6 L# |. z, E, \% y# N
    }& I/ P0 ?, E" ~& P2 H
    return 0;
    . B! S7 g( |# m# _+ Z}
    # q0 \) i* j( _0 xint sort_by_comingtime(processPool * p,int pos). w. Y8 @& v) B' C5 w8 n
    {
    $ N) J; b( p" _% Y  H0 V+ qint i=0,j=0;/ @' L5 t5 @" r. x
    process temp;
    4 a. v, v( x+ O7 Dif(pos<0)0 l2 d& V3 w' N" W  @, J6 S
    {8 U- a8 Y0 l$ |' G; b
    for(i=0; i<initProcessNum; i++)3 a4 q1 [% r, W0 k, |6 n8 p4 y
    for(j=0; j+1<initProcessNum-i; j++)
      ?% n& e2 M. m* d. ?, ~" _{
    , B4 l: d6 Z' N. W# D' Q0 Nif((*p).p[j].comeingTime>(*p).p[j+1].comeingTime)
    4 Z! K) Z: R# u! c5 V{
    * \" b- c8 p" l3 z8 i& Jtemp = (*p).p[j];$ h) U& @* M1 z" l  T- ~0 Z
    (*p).p[j] = (*p).p[j+1];
    ! H9 C  c$ r8 F5 \) w8 N5 v7 z(*p).p[j+1] = temp;+ K# h2 L  M; Q6 l2 j
    }
    ) z$ d; w% F! f" C2 U}1 g8 L2 s. ]  o0 J! i
    }
    ; k1 A( f% g9 `, @, u- welse if(pos<initProcessNum)
    ! s' L8 H& u1 A4 `! ?  d{( J; ~$ w9 j( ?, I
    for(i=pos-1; i>=0 && (*p).p.comeingTime > (*p).p[i+1].comeingTime; i--)
    ; c6 N0 b% a9 c' [2 L{2 v7 v- I- I! O. R
    temp = (*p).p;
    + H& ?; w/ v* v+ L. }(*p).p = (*p).p[i+1];" h7 i( }2 W/ L+ Q
    (*p).p[i+1] = temp;+ M1 c: l+ x, ~
    }
    9 K- t% z5 Q5 q0 @: b1 Mfor(i=pos+1; i<initProcessNum && (*p).p[i-1].comeingTime > (*p).p.comeingTime; i++)) E9 G' p7 K$ G6 e& k
    {. N- |, F# I, d# Y! f) M$ A- }, S
    temp = (*p).p[i-1];( D$ i; _" V6 I
    (*p).p[i-1] = (*p).p;! `3 \: b9 q7 r- H7 q1 P
    (*p).p = temp;4 g" f# F; k5 ?0 C
    }0 N( O" h# ]& }0 G. \  ^. L* T7 J
    }; v1 y: F$ G* M+ P& u: `
    else
    4 I$ c( f, j2 O/ [+ {. G# Y. d5 wprintf("position eror\n");5 ~/ Q6 `* x* @8 H) z+ s" E
    return 0;
    ( y; E- B5 A$ E7 b: H6 j) w4 H}
    7 Y  ~* k* C8 z8 ^; d! i! }int InitPool(processPool * p)( c" S) o" |1 \9 D! S
    {; L3 `! v4 |& @7 m) ^2 G
    int i=0;* t( ]( _- m, }5 v
    (*p).proNum = initProcessNum;
    $ S% S8 H, Y! m(*p).p = (process*)malloc(initProcessNum*sizeof(process));- N2 L" F6 ~+ @2 C8 X0 {  K
    for(i=0; i<initProcessNum; i++)                                        //init process information7 _" r7 g7 _2 w
    {
    ' ?' f& K; u* W5 Z(*p).p.computeClock = (int*)malloc(initclocknum*sizeof(int));; k9 q, D" U( x( y5 T0 W$ k3 g
    (*p).p.ioClock = (int*)malloc(initclocknum*sizeof(int));9 _$ `) ]# H' H( s) t$ z2 o1 Z
    produce_one_task(&(*p),i,ID_FIFO++);
    & V. D4 S# |( B: _! D8 |2 v}
    " k  V2 d5 {) Q, ^4 c4 X4 k6 \return 0;8 _! p1 T9 m3 O. f
    }
    2 Q( i( O  J6 y3 I  E% Z: Kint produce_one_task(processPool * p,int i,int id)8 E2 y& ]' e. G: O0 x
    {
    , k8 f# ]$ R& s3 W! x: G1 }% {int time=MAX_COMING_TIME,j=0,totallTime=0;1 U" V6 [. |7 P0 T
    (*p).p.processID = initProcessID+id;           
      q- G8 Q9 K- R(*p).p.comeingTime = time+rand()%(MAXProcessRunTime/5);0 g: D1 D8 O) w" m
    (*p).p.produceTime = systemClock;
    6 N3 @" R- ]9 x, P: H( Q7 H3 m(*p).p.ioNum = rand()%4+20;                                        //IO number setting to 2--5;
    4 b2 `2 N/ T8 Y. E5 B) H* p(*p).p.computeNum = rand()%4+30;                                   //computNum setting to 3--6;& I0 C% U3 h/ y/ m9 n
    totallTime = (*p).p.computeNum  + (*p).p.ioNum;
    ; s  s5 M" _% O4 c9 T(*p).p.computeTime=0;
    7 r, L0 C9 l% q7 j1 y5 Mfor(j=0; j<(*p).p.computeNum; j++)
    : y- ^/ S- Y& O5 |4 F! U{
    ) q* C" T0 V! ?  g; ?  G(*p).p.computeClock[j]=rand()%(MAXProcessRunTime/totallTime)+1;& X* m) k- i# W; X6 A; Z/ C
    (*p).p.computeTime += (*p).p.computeClock[j];/ R# c" ?! B' y( u0 _7 y' ~7 J
    }
    - D$ p: `4 i( ^0 B5 I(*p).p.ioTime=0;
    9 Z( `: Z: r/ e. M3 {7 B/ B: |for(j=0; j<(*p).p.ioNum; j++)) U. q' D0 J! ]
    {; p6 N" a# E  ~3 H2 p
    (*p).p.ioClock[j]=rand()%(MAXProcessRunTime/totallTime)+1;
    3 ^+ _1 S3 a1 T- q: i7 P9 g(*p).p.ioTime += (*p).p.ioClock[j];, E( L# J% f0 U; n
    }) C: [8 R7 u/ v) _  |
    (*p).p.askMemory = rand()%(MAX_MEMORY/4);
    , k; f4 _7 l  ]2 k(*p).p.flag = ready;
    : X: H' d) t; J, X; w) c7 Rreturn 0;$ k& |6 o/ Y. B- O7 b
    }
    8 t( g- c# E! u0 Eint showProcessInf(processPool p)
      x! {$ X  @! k6 i{
    * R/ u# t4 J) X6 Z: `# ?) oint i=0,j=0;; L' B% ]6 G3 {$ h
    for(i=0;i<p.proNum;i++)+ A7 V+ _' J+ [3 p+ a
    {
    : y/ u- n0 _& s( K3 aprintf("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! {2 i( Q3 p& _- D) e
    ,p.p.askMemory);
    + G2 H. H: i/ Dfor(j=0;j<p.p.ioNum;j++)4 ?5 a* ~2 b; b3 k$ Y+ ^$ N" l
    {
    1 A' }' C& |! \( z3 Q, Oprintf("%d ",p.p.ioClock[j]);
    # }3 J4 X* K# S( c# ]6 x& s$ M! U}; i" l* b+ X1 k+ u' i
    printf("\n");7 i5 S% E  M# @" o' E5 u- c
    for( j=0;j<p.p.computeNum;j++)% L! }- R& c0 V, g5 @' A9 [( I
    {
    ' {: Z4 U( t5 C; V( v; |9 ]printf("%d ",p.p.computeClock[j]);
    % h% H' p( s% Z9 P}
    ) Y- W; J8 K* S: q  }$ X# Iprintf("\n");
    ; T. v3 D7 C+ D' g3 n/ O& Z3 j}$ `( {3 I0 W2 @+ G+ g, ^
    return 0;7 j3 a7 u7 t  b& u( L- ~
    }9 ]' S( t0 W8 X1 }& I9 ~8 z+ q# g
    ————————————————3 n4 x6 U4 c6 U9 w% F: E3 E3 ]- _7 m
    版权声明:本文为CSDN博主「wang_dong001」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。8 o  `+ z  ^0 a! L$ E; F4 c% f
    原文链接:https://blog.csdn.net/wang_dong001/article/details/47843519- J+ e/ L9 _3 [8 Z4 e" e6 |

    . q: e# V7 X6 M+ l4 U" u5 b* g& o: }5 q$ ^
    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-9-8 07:53 , Processed in 0.433063 second(s), 51 queries .

    回顶部