QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2461|回复: 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 [" L# P. `( e, d' H/ A
    经典任务调度算法的模拟程序6 O4 Z% d, y3 V
    本科毕业设计写了一个经典任务调度算法的模拟仿真程序,测试了五种调度算法的运行性能。在程序中虚拟了任务的进程,按照不同调度算法策略从进程池中选取任务执行,在任务执行过程中,保存相关的统计参数,最后对这些参数进行处理,反映各个调度算法的实际运行性能,程序中可以通过修改任务的相关参数改变任务特点,测试不同任务环境情况下,调度算法的性能适应性。程序是通过C语言编写的,为了对运行结果图像化,采用了EasyX的图形库。由于计算机中实的任务调度过程比较复杂,在实验中为了简化程序的实现,在某些方面进行了特殊处理。
    3 y4 z+ ]7 o% Q- ?  i2 n
    : V* S6 ?' M+ p编程平台:VC6.0+EasyX图形库环境。5 Q% e+ [6 M' ~. i7 r7 _
    5 O  L+ g% J2 a. @8 b
    以下截取部分程序运行图::3 W; c$ F( M. ~

    ) R& K/ {$ O. D8 E源代码:
    ; ~% _: g% |  z% Z; ^+ G$ o" B( c  a  z* W8 t5 t
    #include<stdio.h>
    7 {9 b2 p" D% _/ b# I# J9 B, e#include<stdlib.h>: X% I$ E5 y+ y* x, p" Q( r
    #include<easyx.h>; `6 X& d+ z# ^7 A  i  Z, Y
    #include<time.h>! o3 T) H* w4 _0 @2 `; ?
    #include<conio.h>9 c, Q9 T/ \( D
    #include<graphics.h>
    2 S& v. t* z% }& [3 u#define initProcessNum 10
    2 u/ y8 L% Z4 ~; S5 A2 X$ d#define initProcessID 1000; `5 D% g: l6 z+ D0 o* R, ~/ P
    #define MAXProcessRunTime 10000
    3 V, ?2 b/ @8 p' [#define MAX_MEMORY  40002 ?: ]! n; m  ]1 n. Q
    #define exchange_IO_Compute 10
    ) F# K9 x+ Z5 C/ c#define exchange_process 25
    ' V# Y  y0 s! H, {, t7 @+ _#define task_completed 1: ]4 `; A( p  y: K* a+ n) d
    #define task_not_completed 06 o9 w5 ^$ [+ X0 m+ Q  }; R- `
    #define initclocknum 100) {' S7 Y3 k) t1 J; E  M( i& c2 r
    enum condition
    & P: q. r3 `, f  V{
    % K& P; z  l' v- p$ tdead,computing,IO_waiting,ready, N# d2 a4 Q- p8 T
    };
    & ^0 o& e; R4 \struct process
    * v6 e0 d  H) T, r4 E, e{
    3 }8 K/ G6 K& _6 T: s# Xint processID;
    2 s" A" [8 k  L4 H: bint comeingTime;
    5 m) v, a/ B% r% h: `3 P. z: w" Eint ioNum;
    4 f- P8 c9 z' e  @int computeNum;6 Q3 S( }7 ~/ H
    int * ioClock;
    ; {+ ]& a/ L' hint * computeClock;
    ( d5 C' x. x/ Kint ioTime;
    % u- f0 u; b, Lint computeTime;
    + n9 \/ a/ O! Lint askMemory;0 F# K  {( I& x0 }+ \
    condition flag;2 X! B; I( L: q2 N
    int produceTime;  //生成时间,以下三个数据成员用以计算相关性能
    " O! E9 N/ W3 [# M% |" w3 iint runningTime;  //第一次占用CPU的时间, o  I1 R  T' B: O: W( A
    int completedTime; //进程完成时的时间
    ! T  R! }/ o" M( y8 j};
    " j/ ?# Q' v. o$ R/ Q+ z% f( ptypedef struct processCmpletedInfo  //保存完成一个作业的相关信息$ C3 @" A4 j$ J& V
    {6 M9 h$ _0 T. K% F
    int processID,comeingTime,askMemory;# w% }7 Q/ a4 x( {( \0 `' s* p( S- n
    int compute,waitio,exchange,completedTime,runningTime;
    9 T1 v  a/ s* u% a" uprocessCmpletedInfo * next;8 E" @5 ]  ^" Q& t5 }8 O* B
    }PCI;& d* L6 A+ _9 W
    struct processPool& ^; a8 m5 [/ v# J" v) y
    {/ Z$ q  B3 i. H6 G
    process * p;3 P, S& B- u9 g& _; w
    int proNum;6 v7 [; H) l7 ?; \4 N
    };, ]& G' N: H, {/ n1 P% X, Z3 h
    int MAX_COMING_TIME=0,ID_FIFO=0,systemClock=0,FLAG_FIFO=0,FLAG_TT=0,FLAG_PF=0,FLAG_SJF=0,FLAG_HR=0,FLAG_show=1;
    ) Z5 M7 Q6 G: }0 {$ ?: dint InitPool(processPool * p);' ?! D1 g0 f- Q( t/ J
    int produce_one_task(processPool * p,int i,int id);/ d# K6 ]' f% q% ^
    int FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw);
    " d, N- c2 E! ]- xint TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
    0 A5 t/ r) G1 s) Kint TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos);5 J& T! o, ?! y8 t5 J
    int FIFO_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);! _8 j9 k: B3 g3 i  \9 [1 L9 {
    int ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);8 ^5 R2 o1 q$ E" Y  N9 n& c
    int SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);* J$ z+ N1 a8 T
    int PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
    & m4 D" l3 F- t& |- f8 Mint Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);2 H5 g: ^$ H7 ?' {
    int High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int disatch);; V% w7 D3 D) a1 b8 @
    int High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);8 y( r. k( _0 Y( x& I8 W- [
    & P5 y5 t( ^9 B, X, k! o2 i$ [2 D
    # r5 \5 ?/ J7 m7 _: y4 k) Q# ~! B9 Q
    int sort_by_comingtime(processPool * p,int pos);0 v0 l5 t5 U- r. F) o
    int showProcessInf(processPool p);
    8 X0 d3 u9 g0 _: z+ o6 W: B$ Gint drawPerformance_FIFO(int x,int y,int memorry);- [$ p1 f/ R- P1 |% S6 u
    int drawPerformance_HR(int x,int y,int memorry);
    $ J$ p/ b& d( sint drawPerformance_PF(int x,int y,int memorry);
    # G$ [% v$ e* T4 H/ h: m8 J& [int drawPerformance_TT(int x,int y,int memorry);
    $ b6 }$ o7 a$ e9 C1 S, V. z& oint drawPerformance_SJF(int x,int y,int memorry);
    ) a# k1 Y. I4 x( J" i' Dint MouseListening();
      b$ G- ^+ E# R, i7 _: B+ l; @int MouseListening2(int *flagShow,int * showTime);4 x/ n* L$ B  E- n% d! N% u
    int showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR);
    + ?$ @; l4 M, }* E2 N& b- K9 ~5 f1 K- q5 ^2 V% X" c3 y% K
    5 A& Q& D7 M  q7 ~2 V4 {6 P
    void main()
    # G3 J6 w, G: _6 L  {2 `+ C{
    , D( t, [. l: J* d- [: ~PCI* FIFO_save_head=NULL,** FIFO_pri=NULL,* Timet_save_head=NULL,** Timet_pri=NULL,* SJF_save_head=NULL,** SJF_pri=NULL,
    0 {$ v9 {" T$ U, ^; ~) i$ D*Priority_save_head=NULL,** Priority_pri=NULL,*HR_save_head=NULL,** HR_pri=NULL,* p;
    & R0 I8 T+ Z6 l% I; ^int i=0,FIFO_memory=MAX_MEMORY,count=0,Timet_memory=MAX_MEMORY,SJF_memory=MAX_MEMORY,Priority_memory=MAX_MEMORY,HR_memory=MAX_MEMORY,
    , x% e. c( ~8 ]- Q. z, q5 RflagDraw=0,showTime=100000;
    8 y" O4 ]% n0 \, K3 uprocessPool FIFO_p, FIFO_mmy,Timeturn_p,Timeturn_mmy,SJF_p,SJF_mmy,Priority_p,Priority_mmy,HR_p,HR_mmy;
    : F$ Q5 n: z* b7 T8 Z4 B& AFILE *fp=NULL;  r. U' `& e0 X  D4 |* e
    //processPool HR_p,HR_mmy;
    5 l- c6 P+ S/ h7 E2 D% O) N
    " P4 _5 I0 ]% X5 u! Z# T0 u4 S& P  [% s5 w0 Z( G( G
    srand((unsigned)time(0));
    ! t+ x3 l/ n7 ?. i: _systemClock=0;: M- ~: ]( k' u  V* }( G* u
    initgraph( 1200,650,SHOWCONSOLE );
    . s9 D) b7 c. L  _9 r) i) wsettextcolor(GREEN);
    % O% Q$ D/ w0 A# m* nsetlinecolor(GREEN);
    6 e3 j, A' N8 Y# O" L. D& ?setfillcolor(GREEN);4 e- T0 ]) x$ J3 m
    InitPool(&FIFO_p);
    - K$ a" y; y$ Y0 d, ]sort_by_comingtime(&FIFO_p,-1);( @# J/ f0 J6 S( q9 A" t0 ^
    InitPool(&Timeturn_p);
    1 W% ^2 P2 E1 h  |InitPool(&SJF_p);% D+ X4 a% ~: P. z8 k; ?9 u
    InitPool(&Priority_p);; v. _9 P" c2 v& O( C- N0 x
    InitPool(&HR_p);+ \% h) }  T" C
    //showRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);; B) h; K9 D3 x  k/ `( y
    //Sleep(10000);
    : Q" S8 p& [0 P9 P$ R* u. H( R
    : V; u, @! t. d9 y
    ' o8 a" N6 \3 T. L% s2 S5 qTimeturn_mmy.p = (process*)malloc(initProcessNum*sizeof(process));
    7 j; h  z9 [. ?! V9 X) o& v$ z! cSJF_mmy.p = (process*)malloc(initProcessNum*sizeof(process));# \5 p' j2 M9 _2 p6 R
    Priority_mmy.p = (process*)malloc(initProcessNum*sizeof(process));
    " Y- t% K+ ?& R. L) V& t% ]HR_mmy.p = (process*)malloc(initProcessNum*sizeof(process));& C2 @4 g3 w) @, x
    for(i=0; i<initProcessNum ;i++)) b  h8 I) r1 D" r& b/ G
    {; g7 ]* v1 Y* o! M- S4 W
    Timeturn_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
    : n6 a& S, k" B5 w: gTimeturn_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
    & P: q3 l; W* i4 q, L0 o  ?SJF_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
    3 S# f$ R6 K6 Z1 t, g+ USJF_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
    . z( b" D5 T/ t! sPriority_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));8 H+ d7 W6 k& `* \4 K0 B
    Priority_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
    ; e8 [; k/ d1 j& P- fHR_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));  r4 r) M7 R6 P- u: t
    HR_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));; ]. s6 ~3 ]; w6 Z
    }& T3 ~2 [& W* O
    Timeturn_mmy.proNum = 0;- `/ w) t' o2 K4 t( b3 O: c
    TimeTurining_storage_to_memory(&Timeturn_p,&Timeturn_mmy,&Timet_memory,-1);
    & a/ z* G( L) T( ]& g0 fSJF_storage_to_memory(&SJF_p,&SJF_mmy,&SJF_memory);
    4 O1 r2 A, S) X+ D* }! o; Y6 i1 `  T9 LPriority_storage_to_memory(&Priority_p,&Priority_mmy,&Priority_memory);
    - I5 O) `4 p8 W: s) P9 AHigh_response_ratio_s_to_m(&HR_p,&HR_mmy,&HR_memory,0,1);
      W# R2 s: D0 o% l! Q: e//showProcessInf(Timeturn_mmy);; x% x4 l# E& \6 E7 j4 j  D
    FIFO_pri = &FIFO_save_head;
    : |0 @; _6 p. @8 M) {4 o2 m, YTimet_pri = &Timet_save_head;! \/ e: G4 u$ s: D7 ^) @& A& s
    SJF_pri = &SJF_save_head;+ x$ v  F0 v  Z3 s' U) v  n
    Priority_pri = &Priority_save_head;/ J1 E. ~( J2 n+ b# I6 `1 X
        HR_pri = &HR_save_head;( M# b* w+ ^+ X/ Y
    setbkcolor(WHITE);
    & K6 f, N. H" t4 Pwhile(1)
    8 c/ z* t$ H& H5 |4 Z{
    + B) _2 M7 z3 E( \- w* Dif(MouseListening()==1)
      R0 h. b7 ?( q# wflagDraw=1;
    - r( o; w6 E! \  P0 Eif(count==100); ]5 B! F1 F# t- ~$ ^
    {
    5 L4 R0 z- W- b- w* c* eif(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,1)==task_completed)7 [  e2 ?+ ]" R, B: R; ]9 |7 ]
    {
    : h+ g; W+ Y8 eFIFO_pri = &((*FIFO_pri)->next);" T6 R9 w7 R+ \( F) S8 A) N7 H

    . j# G, f; c- H  Y//printf("hello");' F( p2 a7 i  O2 Q8 [% v* a( R
    }
    " H& Z% U5 \  P6 Vif(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,1)==task_completed)
    ( e2 c1 e! H* M& @{
    ; S& c# q  Y8 i/ P) M8 @) t* J0 [    Timet_pri = &((*Timet_pri)->next);
    * O$ B2 U* h  w+ \, [9 d//printf("hello");
    7 E- J0 L& d/ [! D, t6 R}
    8 }( u5 T2 g3 xif(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,1)==task_completed)
    & ]  c' l: U% y. X( h2 d& y$ L! z{/ R; V( u  u- S9 D3 `2 @% }
    SJF_pri = &((*SJF_pri)->next);
    ( D" W' D5 v& F9 J& O2 }/ e//printf("hello\n");2 c8 v' D  e9 L& c
    }) [4 ?9 k6 L7 Q6 m
    if(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,1)==task_completed)
    , J  a7 ~: u% H4 [; d1 M{
      m6 ]* [6 ^% iPriority_pri = &((*Priority_pri)->next);
    0 b& q/ D9 _- H: c# Q//printf("hello\n");
    - [! l) G# e( s6 y0 l}: N$ q& J: J0 [- _
    if(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,1)==task_completed)0 L' x6 y  I- W$ ], P1 {
    {
    2 J6 \( @1 L: n' J& kHR_pri = &((*HR_pri)->next);
    7 S# |9 Q% c1 [' j1 o$ o//printf("hello");) W6 k9 g3 _2 R; |7 r" }
    }1 O+ O0 G; @% ]' O7 r, Q
    count=0;
    ) S) u+ E% y4 [7 }6 d# Z+ d}( I, q# g" A: y: i+ F  c( v+ P
    else/ s7 J% P7 Q4 D6 b7 Q
    {$ l0 `4 g+ m7 Q% W3 A% Z
    if(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,0)==task_completed)
    ! p+ s& `5 U& C  D  Q{
    + ]! S( v  l0 c; NFIFO_pri = &((*FIFO_pri)->next);
    4 W, [3 f: r  k% g// printf("hello");
    8 z' B; K* z' V3 w  {; o; E/ n}: ]2 |( g( q  p! X  w
    if(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,0)==task_completed)" |. T6 \+ T$ o6 b# i
    {% F& S4 }" e. H  X5 W/ k
    Timet_pri = &((*Timet_pri)->next);* E9 h- e" l1 |, F9 N7 R
    // printf("hello");
    8 z& q  X) e- A7 Y  B$ S}$ D. T/ I' @) J) G$ Z3 ^9 X  J
    if(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,0)==task_completed). h+ D% B9 ~# y+ C
    {" t/ t) q& h. h; J& O9 t
       SJF_pri = &((*SJF_pri)->next);& J. C3 t; c0 e3 @% J1 I
    // printf("hello\n");; O4 u2 z% C6 ]$ k( K+ Q
    }, S8 `+ u- ~3 U, I9 z1 p0 E2 j
    if(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,0)==task_completed)8 K  ~) Q9 ^6 m& `
    {
    * C) y2 ], A3 b. ?8 s0 {: a6 HPriority_pri = &((*Priority_pri)->next);% S, C$ p6 S, A: y
    //printf("hello\n");0 v4 ^$ b' S. R. g# |7 q
    }3 U. n5 t; A( c( x0 w  G
    if(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,0)==task_completed): |1 O' [- A. u
    {9 Q) B- V6 ]9 R( b- Y% e
    HR_pri = &((*HR_pri)->next);
    - m0 F% x7 t. b/ Y1 v$ ]" E& k//printf("hello");$ I: ~  X; J  p
    //Sleep(1000);" f: D1 n* U' i- Q% ]( {
    }+ g; o7 l: X& ]5 n8 p0 d$ A
    count++;
    : l5 g8 w! p# T7 n% G. L+ l}
    1 a: I$ O1 E5 X/ g& _( s3 S; g+ }6 yif(systemClock==showTime)3 ?) ~7 S2 [9 S" I
    {% s; Q# E2 d  s( u$ g% O
    /*PCI * p=FIFO_save_head;
    / u  I) T3 c! o, d+ w" V, ]7 I# w5 gint i=0;4 Q7 e6 ^1 H3 K8 z. @- G
    for( ;p!=NULL;p=p->next)" s7 k) w: o/ z0 p
    {  P" o: Y4 J4 w' {9 h6 c. o
    printf("Id %d\n",p->processID);
    9 ~( Y- ]! L3 ^2 o7 x( h' p4 Cprintf("comeingtime %d\n",p->comeingTime);- u/ B/ D; J, v& a4 n$ \" ]
    printf("runningtime %d\n",p->runningTime);
    . v$ ^& _; T. N* a$ i! `7 `printf("asdmemory %d\n",p->askMemory);
    4 p7 E1 a* T& d' lprintf("completedtime %d\n",p->completedTime);, h1 `4 F: b4 j/ A: A; [
    printf("compute %d\n",p->compute);
    ( ?- R7 F3 s  {$ ]+ Cprintf("exchange %d\n",p->exchange);
    5 _- Y/ k$ p4 Y9 B! ]( [5 \printf("waitio %d\n",p->waitio);
    5 h" V# R% q. ]6 b$ s( Li++;, H1 z  n: R3 f- l7 \( |2 ~! Y/ W
    2 u7 K' S7 ?4 A& ]8 R2 r& q4 s

    9 A. P' H1 w; ?/ z0 z% f8 b}
      X& R8 S, _8 S2 m/ Mprintf("%d\n",i);*/: n5 W" p( p5 z7 B- b
    if( (fp  = fopen( "data.txt", "a" )) == NULL )5 C' g1 O3 r  M" V, z
    {
    ' e4 ?* I; X0 \7 ^2 r# B" _printf( "The file 'data.txt' was not opened\n" );3 ?/ i% p# v6 v+ }' q) X
    //return 1;# A( ?$ [$ S% y: E% ]: C0 A
    }$ C) `& n0 a* _; ], J
    else
    & S3 X+ y9 l$ f0 j{
    + u. U$ [1 J* ~2 tfprintf(fp,"FCFS \n");
    : V/ G3 G% n6 T5 N9 pfor(p=FIFO_save_head;p!=NULL;p=p->next)0 \% o. M5 y1 ~4 o2 u
    fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,, M: x% ~/ j/ j" G& y( d: J% K- d
    p->exchange,p->waitio,p->runningTime);
    ' ^( ~: j1 Q# e, O+ ^fprintf(fp,"\nTime turn \n");' b% t6 G' J' g
    for(p=Timet_save_head;p!=NULL;p=p->next). e. M9 A5 V7 \' v1 h* Y
    fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,$ C1 E% j" J! ~+ h8 a
    p->exchange,p->waitio,p->runningTime);' U0 x" @9 N. L
    fprintf(fp,"\nShort Job First \n");$ j+ {3 A- k9 L; l! Z9 H* d
    for(p=SJF_save_head;p!=NULL;p=p->next)% m8 |/ Y; \! V" r$ ~) b
    fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,! P, Z7 ?3 L. A4 {
    p->exchange,p->waitio,p->runningTime);
    5 J& j) _2 L! J: j9 u0 E% L; Qfprintf(fp,"\nPriority  \n");
      f# @( T' q( ?  h3 Vfor(p=Priority_save_head;p!=NULL;p=p->next)
    4 N9 ^; @3 Q9 T1 t+ V8 Rfprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
    6 h' k4 b3 A. D! x! wp->exchange,p->waitio,p->runningTime);
    # B! b4 y; m" ~4 Qfprintf(fp,"\nHigh response \n");3 j: W( O9 w* L) m9 U$ M1 r
    for(p=HR_save_head;p!=NULL;p=p->next)
    3 D/ H5 M0 V+ Z( y* ?' @fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
    8 w2 F3 b" f9 F/ a* T0 Zp->exchange,p->waitio,p->runningTime);( C% M: l3 s, O7 A! L1 z
    fclose(fp);) d- B  O# F# W* G+ `
    }
    6 Z* c, g4 i+ QshowRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);
    9 h8 r0 A: l) {MouseListening2(&flagDraw,&showTime);( N8 A% Z; S6 f) c/ N
    }- \! o3 B. G5 z
    systemClock++;
    $ N1 p; X  l* W( i2 I8 }if(flagDraw==0)
    ' P% h' L3 Z) J. m2 l  Sleep(10);+ X: l8 c5 B2 U7 k
    }
    ( o8 y6 _9 W; C. l- h2 Q: x
    5 @+ h3 j" |' v/ \/ H  m% Y1 h4 }; h+ |( |, ~$ l) G
    }
    * y; v* i. t  C. `$ S  yint showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR)- ?4 \5 k- O; L
    {. }. H  J/ I9 K* O! o1 V
    PCI * p=NULL,* name[5];
    # l- x4 M& E1 g6 \/ F! m7 K4 Sint count=0,i=0;8 z% x. @0 b1 b. ^% L
    char ch[5][10]={"FCFS","timet","SJF","PR","HR"};" c$ `6 M- I8 I; ^3 N) v" o% d
    double turnover=0,wait=0,c=0,w=0,change=0,pos[4]={0,0,0,0};
    ) V& A2 j# n3 `; V) F0 r3 v2 vstruct info0 @" S9 F/ S: H' z9 }7 t5 E
    {
    / v% K! T  h3 C2 H4 w8 Zchar name[10];
    % g* o: ]6 F2 ^, g% x5 qdouble throughput,turnover,wait,CPU_rate;9 x# R3 h  p; R( U, H  K  a
    }inf[5];6 m/ P, B* j: F% J1 o) N% T
    name[0]=FIFO,name[1]=timet,name[2]=SJF,name[3]=PR,name[4]=HR;- s) a  `9 d! Z7 Q0 u
    printf("调度算法..........A\n");0 r2 `$ s; N3 o
    printf("吞吐量............B\n");
    - D5 H6 M5 T2 dprintf("平均周转时间......C\n");" W( h: L0 e2 Z! R. i0 _+ h
    printf("等待时间..........D\n");/ c9 @! h4 b) B5 \
    printf("CPU利用率.........E\n");  J& U3 z8 T& \! }4 Q* E5 Z
    printf("A\tB\tC\t\tD\t\tE\n");% l4 x8 a8 z& V) Q+ U  Q
    for(i=0;i<5;i++)
    1 x8 h# E- u  O) e4 P' N! U/ r& J{
    8 u6 [; D" _4 U& xcount=0,turnover=0,wait=0,c=0,w=0,change=0;
    6 ~  |( N- _9 m, O- x+ o4 Nfor(p=name; p!=NULL; p=p->next). B% g% b* j6 e8 Q
    {
      k. I0 w3 `3 Ccount++;
    3 u) z2 T4 a1 P% w4 g* @7 `6 d0 kturnover += p->completedTime - p->comeingTime;8 q6 Q: D  Y' C! l9 e, @. D. ~
    wait += p->runningTime - p->comeingTime;7 P6 T! m3 ~' o: _+ B8 t# t; U* O
    c += p->compute;
    6 j1 [0 s; S+ pw += p->waitio;7 t9 f6 k) Z& \! H
    change += p->exchange;3 b6 }# o) h9 j' I, \7 _
    }) y4 J5 H+ L  E& w+ d
    turnover = turnover/count;. O. Y0 }+ a4 v0 s8 b2 q, O# I
    printf("%s\t%d\t%.2f\t\t%.2f\t\t%.2f\n",ch,count,turnover,wait,c/(c+w+change));7 s- H5 @' z9 }, a
    strcpy(inf.name,ch);
    9 ^0 k, f: q9 T& `; t8 Iinf.throughput=count;8 _" \' ]$ z& X; r' x* _) z
    inf.turnover=turnover;
    5 b) n3 l/ m1 K+ zinf.wait=wait;2 A3 c' }8 Z- L. }" b$ k
    inf.CPU_rate=c/(c+w+change);0 N. E) U' u/ g  |" W
    }
    $ n: U6 F- Q9 I//画图+ _3 n2 p+ O) D* l' R8 k! `# Q& c
    //cleardevice();
    4 r  Q0 B" w" m" I8 fline(0,600,1200,600);; L4 G5 O1 M* p% z7 M/ g9 u% ~
    line(10,600,10,200);) b7 y8 b; D- f. u* H4 A
    line(10,200,5,205);: P1 }% S2 m" h# o8 R
    line(10,200,15,205);$ t# g+ z* A) n# N
    line(310,600,310,200);
    4 w8 U0 Q; M% Vline(310,200,305,205);
    / E7 Y# z' u) yline(310,200,315,205);4 R% t3 K0 J/ u8 B2 o
    line(610,600,610,200);/ l' e" R8 s/ p$ y: `5 p$ J
    line(610,200,605,205);
    9 p5 K8 f: c' ^3 [line(610,200,615,205);
    " T1 }+ O) ~' t# ^) Kline(910,600,910,200);
    3 w. |9 D' Q. J+ S: ]' jline(910,200,905,205);
    1 O) O0 K( y; ~. [line(910,200,915,205);//最高的长度400,宽度均为40
    ) @& j/ U$ }% a' L8 S6 wfor(i=0;i<5;i++)
    5 ^8 _% g: X8 \, t, w: p{
    $ _$ M! f' p5 [if(inf.throughput>pos[0])
    7 p+ v- a" |2 Z+ P% S; ]% zpos[0]=inf.throughput;9 ?2 U6 q9 v1 V. T' T5 J
    if(inf.turnover>pos[1])/ ]' I. f3 K  T- c" A+ ^$ F
    pos[1]=inf.turnover;
    6 t3 Z* Q, m6 w9 U6 D- |! V; Uif(inf.wait>pos[2])
    * B6 x  ?/ h8 L2 Ipos[2]=inf.wait;
    0 `' w3 E- j: d5 N# A6 C" \if(inf.CPU_rate>pos[3]): H% o/ i- J/ g, I& \1 u7 y5 |
    pos[3]=inf.CPU_rate;
    ( S4 y. A: Y% b6 [! s( [}
      H1 x3 F$ M( `settextstyle(30, 15, _T("楷体"));8 H# S7 h" G5 @3 g1 d0 J- t
    for(i=0;i<5;i++)/ p8 N% z+ q3 X) }6 M2 R
    {* g4 f8 d  l1 ?8 [5 R. }
    switch (i)* G) m& V2 j; j6 w
    {
    . t9 j; z2 o( R2 X" E! I; O: l$ dcase 0:
    ! A2 p6 `( E% @7 m. p/ ?# lsetfillcolor(BLUE);
    4 {% T' l" D1 d& ?  Ifillrectangle(100,50,150,100);
    ( v0 i. N, B3 v# qouttextxy(160,50,"FCFS");" P: |  O7 N( {  S2 H7 n
    break;
    0 P# t; w- X3 U( z; C+ b% gcase 1:
    9 S0 I' V- E5 i9 z  h9 Ksetfillcolor(RED);7 t) [% v# f& w/ j; _( g* D& T1 v5 B
    fillrectangle(250,50,300,100);
    5 j, M- r) f& T) p7 j- |outtextxy(310,50,"timeTurn");: ~" y6 J* p2 W: j) |1 u# F# |
    break;4 Y# Q- h$ _$ R/ c& b9 ~, c" e; x
    case 2:  N  y: b* P! w# e
    setfillcolor(YELLOW);" w! C% c: ?, t) c5 V9 U
    fillrectangle(450,50,500,100);
    7 K3 S, N( V( U! I& N1 aouttextxy(510,50,"SJf");
    ' t1 `% [; h9 F! ?6 S! rbreak;+ G- ]$ d- V! D5 ]  E9 }
    case 3:
    4 U3 u& g1 r7 S% Z3 G; Ysetfillcolor(BROWN);2 C% A- j3 v) _) o
    fillrectangle(580,50,630,100);
    + ^% g3 W& ~9 n8 `outtextxy(640,50,"PR");
    ' Y, i! D$ C- {, tbreak;) R7 }4 X% r( ]+ G# [! ^6 @- S
    case 4:
    ! E7 s' ~' X' M3 D7 h  u3 g, W/ Esetfillcolor(GREEN);3 O8 K9 |4 j2 C+ {
    fillrectangle(690,50,740,100);
    : k, \5 R& `4 ?9 `" E2 j$ j5 Souttextxy(750,50,"HR");6 o" l% B* `+ n0 c; q
    break;2 z4 G- u; f. L- ?
    }
    0 W( ?# I% }4 X4 I; ]5 l1 jfillrectangle(50+i*40,600-(int)(inf.throughput*400/pos[0]),90+i*40,600);
    , n; u3 _. m+ W/ w) O! ~1 wfillrectangle(350+i*40,600-(int)(inf.turnover*400/pos[1]),390+i*40,600);
    2 ~  F  K+ Y' W7 y" e7 M7 k" ?# Jfillrectangle(650+i*40,600-(int)(inf.wait*400/pos[2]),690+i*40,600);/ N; t' C4 ^+ u) `
    fillrectangle(950+i*40,600-(int)(inf.CPU_rate*400/pos[3]),990+i*40,600);8 L( K" V4 i9 X' Q% V4 \

    4 n# O7 {3 E0 R1 b, e- n. F/ K' L& D. P
    }
    - m$ q8 H6 `& m* W: g0 e8 T    outtextxy(100,150,"吞吐量");2 g4 K8 J- D0 A! u. [$ V2 _# t  O. a
    outtextxy(350,150,"平均周转时间");
    - Z3 S; g: c1 louttextxy(650,150,"平均等待时间");
    / z6 \* B3 \8 t* ?outtextxy(950,150,"CPU利用率");
    8 o1 l6 X7 s6 n" f' sreturn 0;# O5 X% e, K9 Y- K
    }
    $ R) B. |: N4 V  b1 Q3 k8 `int MouseListening()/ \( o! C, I, \; M
    {
    8 P6 I% U9 j$ H( i/ ?( ]. p" q5 Y" `% r8 uMOUSEMSG p;
    - P- ~8 M" I, @2 N9 k5 b9 bif(MouseHit())
    9 C$ y0 N5 J  V# h8 @{
    ' J6 s6 B) m" o- H% Fp=GetMouseMsg();: k( @( R" a1 T
    if(p.mkLButton==true)
    % O5 J4 U" T- p- ~3 `: n{
    $ a3 L* |: x! g; x( W! |if(p.x>0 && p.y>0 && p.x<400 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
    , y6 v0 O7 C  b6 X2 KFLAG_FIFO = 1;+ u0 U2 m( k3 n: r' a; s/ |
    else if(p.x>400 && p.y>0 && p.x<800 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
    ' @$ P' v2 x8 w  Z7 V! NFLAG_TT = 1;7 j  L/ o3 i9 d2 s% V1 |  v
    else if(p.x>800 && p.y>0 && p.x<1200 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
    7 t  D: \$ r& r$ `2 aFLAG_PF = 1;5 ~: D1 P9 p# D; o3 k+ T
    else if(p.x>0 && p.y>325 && p.x<400 && p.y<650 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)1 i7 e+ u6 h: }) a, }* i2 e" b
    FLAG_SJF = 1;, p/ K. M% @# N8 C+ e- W( o% b
    else if(p.x>400 && p.y>325 && p.x<800 && p.y<650 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
    2 R) R: B6 `) B# UFLAG_HR=1;+ x; X( L/ b2 Q) b
    else if(FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO >0)
    , \* C* @% z3 N! N& b{' g( Z5 ]% I. O# g1 G
    FLAG_HR=FLAG_SJF=FLAG_PF=FLAG_TT=FLAG_FIFO=0;( ]- d4 l" f% j
    clearrectangle(800,325,1200,650);
      s2 c6 }7 @+ f. ^7 I3 t}
    ; l8 I1 {+ s$ }7 `* Melse if((FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0 && p.x>890 && p.y>455 && p.x<1110 && p.y<510 )5 V3 c" G6 r; q; K2 L
    {3 J, l) M0 V4 t7 B; s1 g/ G  q
    FLAG_show=0;
    7 m3 M# k& v1 H- u. `2 h; K: [cleardevice();
    8 K" G0 y8 M) B5 F! j: D, Oreturn 1;
    0 _! Z5 f, p9 t/ R1 a7 {, A}
    ) D8 [6 ~0 x1 t. t6 \}
    ) E# m. v0 T# c5 i}
    2 S. Z; f! n) w0 t/ Freturn 0;
      s" C9 C& m. l7 s1 C}
    ) U' W$ ?1 k+ ?( o3 g6 ^int MouseListening2(int *flagShow,int * showTime)
    * }( w, b' k- Y: o{$ x/ n5 a9 y( J. h/ U
    MOUSEMSG p;5 L% A, z, V4 O" ?7 y3 p; n: a
    rectangle(1150,0,1200,50);
    . R' t( l' K$ H7 E3 bouttextxy(1160,10,"X");
    . [  d5 [) e" i" Y8 Q0 e9 \5 {, Dwhile(1)
    ' R. W7 @( F7 l1 e- z{: W8 g$ |8 R! \/ [
    if(MouseHit())
    6 _8 h5 g2 Q' d9 {6 }$ G{; |" L* \( U+ h6 C
    p=GetMouseMsg();. A5 r2 Q3 i2 [& j% N, d
    if(p.mkLButton==true)
    + Y! w- h/ Y9 a" z  Q{: d/ d! x2 }" \: T7 f
    if(p.x>1150 && p.y>0 && p.x<1200 && p.y<50 )
    * o& z' G1 ^; _{5 S2 j  h( e/ N
    (*flagShow) = 0;7 k0 f& @+ Q) b. o
    (*showTime) += (*showTime);
    2 P  s% D# D4 N8 n1 v' bFLAG_show=1;
    $ z  e+ ?/ `1 r4 u6 qbreak;
    - l$ p# f/ A7 i) {}# [+ c$ X7 s4 s8 n
    6 O0 F  n$ A5 N
    }- @4 D! ]4 k( V9 P
    }
    7 u' @: w* e3 a$ j& P1 ?+ QSleep(20);
    % d) T; ]7 r: ~# j1 x  M}
    5 {) G3 k/ `$ P7 D4 ~  Acleardevice();# I" k) q. t/ `, _
    return 0;6 S5 X: x0 v4 Q6 S& C8 \, A* z: G
    }
    . `) D. y6 `6 M" _, C+ z2 xint drawPerformance_FIFO(int x,int y,int memorry,int com,int wai,int cha)5 J+ S; p) R3 `0 p+ ^$ {) Z
    {' L" ?: p+ w; p. m2 H
    static int info[11][3],num=0;
      c( X$ g4 J4 L' Fint i=0,j=0,pos[10][3][2];
    8 G5 j, i; f6 wfloat temp,t;
    ) ]+ \6 M- M5 _) z5 r$ r  G  M* F//画按钮,不属于FIFO图的范围
    ) H, F9 Y/ a: Y. ^  tif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0 && FLAG_show==1)5 F. B& h2 j8 h6 T3 f" U* W
    {4 O/ e8 s' j2 ?9 |
    settextstyle(30, 15, _T("楷体"));0 L4 H' m8 ^& d2 r, M: {6 D
    rectangle(890,455,1110,510);) P. Q$ l1 m0 j2 q# [
    rectangle(900,465,1100,500);
    + x. a; e0 T" l% B' B9 j( O6 nouttextxy(910,468,"查看运行结果");4 Y+ F& N+ E" j
    }
    - \& t! J4 C1 p; `  s+ s//结束画按钮
    + D" Q0 g; G: ?; }, K; j4 Yinfo[num][0] = com;
    , ~) |6 o, {, N4 i+ J# n& \- Sinfo[num][1] = wai;
    ( @  T( |2 [8 q" v3 Pinfo[num++][2] = cha;
    " J$ A- Q! A' S/ z' G$ uif(num>10)  //存储10个点0 H/ _+ T, |* F8 p: a, s& J# o$ \
    {1 e  S, P# n- l# ]; Q& \( B) _6 n
    for(i=0 ;i<10;i++)' w# m' N: V0 ~9 P% |" Q
    {* B6 R; N  m# r9 S5 K# R
    info[0] = info[i+1][0];
    - U1 E* r; P+ Tinfo[1] = info[i+1][1];8 j. ]7 J1 v& a8 ?, x- n* {
    info[2] = info[i+1][2];) k7 {& R, q. ^- a4 u" z
    }* O+ o" Y; j5 A$ h
    num--;
    ; n! f7 A; s/ @6 _9 \4 s9 I" t}5 T( s2 y. p# z* D) [
    if(FLAG_show==0)
    & o  G) w8 Y- H/ A: freturn 0;
    6 |2 k% Y3 Y9 K& u1 `' ifor(i=0; i<num; i++)) l# R# n5 @* h# R$ G
    {+ W6 S1 L, }" O1 t
    t = (float)info[0];
    4 f0 e/ T* n5 F/ V5 @6 Ptemp = (t/101)*90;/ R& H* ]  t2 `+ u1 L0 @5 E
    pos[0][0] = (10-num+i)*25+x+100;2 b, x; F$ B6 m/ I! C, f0 `
    pos[0][1] = y+110-(int)temp;' z+ n; d+ ^2 d) _' A& G
    t = (float)info[1];; W% R- |" B- [; p
    temp = (t/101)*90;
      D5 b' O5 s. K! Z( {4 T3 lpos[1][0] = (10-num+i)*25+x+100;
      ]- o9 n9 S3 @/ wpos[1][1] = y+210-(int)temp;
    ' [! z# ]% a9 q) ~9 [9 ht = (float)info[2];
    9 ?: Z+ u9 w  x" l1 r$ }3 R. [temp = (t/101)*90;
    9 f9 U5 O. k) m: i# Jpos[2][0] = (10-num+i)*25+x+100;. u/ A/ e/ p: z1 r( f9 W4 w
    pos[2][1] = y+310-(int)temp;
    ' \- Q* Y) a, m, ]6 c' |9 J}
    ; K, z# X) Q1 D' H$ A; X+ z! S9 tif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)# c" T& u3 q* S6 T  M
    {
    - \% P7 {6 [1 Z7 Rclearrectangle(x,y,x+400,y+315);, I( F8 l+ N: X. S
    settextstyle(20, 10, _T("楷体"));
    ; x' \6 l, X6 m3 ?+ Mrectangle(x,y,x+400,y+325);5 J- r8 g( i, X# e& f% p; F! S
    outtextxy(x+40,y+10,"CPU");       //画柱状图
    8 {) w. Q) V# C  ]0 o( Y8 D' P1 pouttextxy(x+45,y+10+100,"IO");8 b+ c$ L1 Y9 N: p
    outtextxy(x+40-15,y+10+200,"change");
    . d' |" Q) t- l% b, q- |" R- }, krectangle(x+35,y+30,x+75,y+110);/ D# R& e/ R7 m# l
    rectangle(x+35,y+130,x+75,y+210);
    % d: `5 {- N" O  v) q( {rectangle(x+35,y+230,x+75,y+310);
    : m; B5 `& m" L( Vouttextxy(x+180,y+310,"FCFS");0 `+ ~8 |2 F! k! A* \$ h3 f
    t = (float)com;; A$ i& q3 e+ w" h5 V  M
    temp=(t/101)*80;
    8 `+ s& [( b/ Q9 F2 ifillrectangle(x+35,y+110-(int)temp,x+75,y+110);& m) C7 e. @; [2 f) U
    t = (float)wai;* y0 e. l; l0 f/ h3 s+ I0 k9 v9 L; J
    temp=(t/101)*80;
    1 \) v5 g( L6 U2 C! a- P2 ^& R% gfillrectangle(x+35,y+210-(int)temp,x+75,y+210);
    2 s) ~- ?; Q$ Lt = (float)cha;
    7 ]2 ?2 [5 p6 {( T, Utemp=(t/101)*80;
    ; Q; i' c. ]1 Wfillrectangle(x+35,y+310-(int)temp,x+75,y+310);
    & H) \4 I- t. }, ~for(i=0; i<3; i++)   //画坐标   high=90,length=2507 O8 f8 u* t3 J5 d2 S; y
    {
    - _+ N$ o; B; j, I2 oline(x+100,y+110+100*i,x+350,y+110+100*i);- ?( S* \* ~6 L, N/ M! F7 x
    line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
    $ G- S* {% c4 H& }line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
    - j9 m+ d: m% n2 _+ d
    / S( j0 l5 w. U( B& uline(x+100,y+110+100*i,x+100,y+20+100*i);
    9 u! m  V+ z3 }3 x% e% F  {- nline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);4 H$ Z9 p( c2 f% Q( P
    line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);) _5 G% Z! a; ?' q) [, C
    for(j=0;j<num-1;j++)7 o5 [3 ]6 v! w9 W1 E/ `4 Q# T4 q
    {% u* G: p' m, s7 y; c6 W
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    5 ~5 i# O2 s& ^6 u8 Fline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    7 o0 i# T. s/ P3 kline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 8 s5 N$ t, q6 J6 t+ U2 ^9 F6 w
    }
    ' _- d5 X: i1 p2 V0 \+ Q$ K}) O! u3 ~2 |* G$ u' q" v% ]
    }$ W! J0 m# \. F, V2 z# x0 D
    else if(FLAG_FIFO==1)
    / ?9 T) e, o7 A3 r; E6 f{. b. c) j: i0 [
    x=0,y=0;5 i; W& W9 o  w: O3 b# d+ H
    for(i=0; i<num; i++)
    . C4 h/ T9 K+ s1 b{
    , M# d( k' {% J" Tt = (float)info[0];
    " }0 |  }9 A, A9 H/ o( btemp = (t/101)*180;' Y6 X( i  c1 x8 b! Z
    pos[0][0] = (10-num+i)*50+x+650;7 a# S$ E! M1 M; g
    pos[0][1] = y+210-(int)temp;# t4 N# ?) P' E$ K. v) y, |  C
    t = (float)info[1];
    ) Q( G& `& P9 q/ v, L/ h9 Ktemp = (t/101)*180;
    - s: P, e' S) {  K( zpos[1][0] = (10-num+i)*50+x+650;; `- l* M8 M- ~, ]
    pos[1][1] = y+420-(int)temp;, H- F2 W  ~- O; D: e
    t = (float)info[2];
    / ~2 d( p" e& |3 o) A: n" `temp = (float)(t/101)*180;! d8 E9 e" d, A  d% Z2 w
    pos[2][0] = (10-num+i)*50+x+650;2 o5 ?; |) [. J9 w+ V, N
    pos[2][1] = y+630-(int)temp;
    9 l/ b7 w2 E6 d/ m2 A. r( M& X5 `}; Q; L  r( Y7 W- O3 N
    clearrectangle(x,y,x+1200,y+650);
    . o7 s" T4 G1 Lsettextstyle(40, 20, _T("楷体"));& }5 U- V" V" b; a1 r8 o
    outtextxy(x+50,y+50,"FCFS");
    ; X2 b, O0 p( o1 L2 Q5 Pouttextxy(x+280,y+20,"CPU");       //画柱状图
    1 N$ L: K' ~9 D/ Z4 ?outtextxy(x+285,y+20+200,"IO");
    7 {8 @+ ^# U  Q; fouttextxy(x+250,y+20+400,"change");
    1 P5 b8 b  k) P7 o2 Trectangle(x+270,y+65,x+330,y+215);
    , E: h( M( P* W, Frectangle(x+270,y+265,x+330,y+415);
    & f, Q. e0 E+ `. z' grectangle(x+270,y+465,x+330,y+615);2 [% ?* H* Z0 X& K1 s6 k. m' q
    outtextxy(x+290,y+620,"TT");) }8 ]" H; G& }- d: u4 \9 h" q
    t = (float)com;; T: k8 o7 }4 o8 e; c
    temp=(t/101)*150;0 {0 }6 ~2 j5 N" u8 S/ Y
    fillrectangle(x+270,y+215-(int)temp,x+330,y+215);
    7 \, j! X' m. Kt = (float)wai;
    % u) b8 s- ~* Y1 o) Jtemp=(t/101)*150;! Y( Y8 |$ j5 X
    fillrectangle(x+270,y+415-(int)temp,x+330,y+415);
    . i  b, E6 z. o1 t1 n3 Vt = (float)cha;" ^- {. z$ [5 y+ u6 T2 e3 v
    temp=(t/101)*150;
    ' n/ ~7 y# j" L/ P( F% Sfillrectangle(x+270,y+615-(int)temp,x+330,y+615);
    & O/ S6 [. s+ v. Afor(i=0; i<3; i++)   //画坐标   high=90,length=250- t' L; s4 m/ ^
    {
    " n2 r6 h5 ^2 |2 B4 |% A3 Y( [( dline(x+650,y+210+210*i,x+1150,y+210+210*i);
    1 z+ V- h  C3 M3 p. pline(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);6 J% e% p* K6 T2 w5 G
    line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
    $ P$ B$ K+ Y. ]5 j+ o+ c' {) _0 k7 N+ C. C7 c% X
    line(x+650,y+210+210*i,x+650,y+20+210*i);
    ( `( `* L$ i, V$ P/ h7 |line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);: V. g3 {+ L7 l2 O+ Y
    line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);& r8 |6 Y$ `: g6 a' @7 e* }
    for(j=0;j<num-1;j++)0 t4 @: h9 [% E4 @9 t/ P
    {; P4 {- n9 w% Z4 h
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    0 e. \* N! I. {% m$ g, dline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);. D% a4 j$ B# f# Q
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); # j( ^9 f3 X& @. Q0 I
    }3 k3 a1 x2 o( \, I! M, q
    }  p( C5 q. M, }6 ]  w: q
    }  B( Z" A. t. W; V
    # F# w& e$ H5 r6 T

    + s: W( D0 H' _. S1 D0 treturn 0;" o4 f- F7 W6 S& P. \$ E4 j
    }: W$ I% {! e  V; I# {
    int drawPerformance_HR(int x,int y,int memorry,int com,int wai,int cha)
    & E/ f% a1 b7 E7 A$ u{
    * N* R# _8 m& jstatic int info[11][3],num=0;' m: ]. v8 g0 [" j  y2 L/ f
    int i=0,j=0,pos[10][3][2];
    : h, y% `, t! tfloat temp,t;( W! O! o3 z1 q' @+ P. |
    info[num][0] = com;+ k; J& g7 l+ G
    info[num][1] = wai;) m& Q3 R/ {: j
    info[num++][2] = cha;) V8 |( @" |7 X% Y; z2 u
    if(num>10)  //存储10个点9 P# Y3 g+ E0 {: d+ ~; W+ a
    {
    9 M0 K& M- e. Tfor(i=0 ;i<10;i++)% z8 m+ I3 N' `. j) M% \
    {
    3 \4 g. ]+ M) K$ [2 T- l) V1 A1 _info[0] = info[i+1][0];2 _. Z+ Z+ u; K+ ?0 f9 k3 J. z
    info[1] = info[i+1][1];/ v- \" l( S- l5 O* X1 [" t8 _
    info[2] = info[i+1][2];( T5 }2 O9 c. F0 z
    }
    $ J9 j7 w/ X0 b/ e3 R3 T9 Znum--;
    / T" w4 Y- \. y: u8 x8 N}- Z8 J% ~! g9 ^3 O3 V$ v* v
    if(FLAG_show==0)$ ^8 |9 Q7 l# s& y2 h
    return 0;" `/ E9 ~; a  D( H2 L: v
    for(i=0; i<num; i++)% z0 `3 ^' ]  C7 O
    {7 [# C- h8 z$ A" k( a. P
    t = (float)info[0];' q$ x3 H) i  i( p
    temp = (t/101)*90;
      ?, G' X1 v: P$ v3 y- W7 X- p4 H: cpos[0][0] = (10-num+i)*25+x+100;
    # e; w% E+ g3 G( }1 W8 C# g$ U1 Epos[0][1] = y+110-(int)temp;
    ; _: d* B* ?! S2 u0 Qt = (float)info[1];
      L+ i' }6 U4 D. [temp = (t/101)*90;3 V& a) i: g- c: `. h. E$ J
    pos[1][0] = (10-num+i)*25+x+100;
    4 p' G9 J3 B& |3 \. Tpos[1][1] = y+210-(int)temp;
      N* ~4 c/ z: ]; jt = (float)info[2];
    + m4 g8 ?/ I2 m0 y  rtemp = (float)(t/101)*90;' j8 l  M& t' O; J7 W' O8 N# }
    pos[2][0] = (10-num+i)*25+x+100;8 A; n, t# l% n0 g5 F" N
    pos[2][1] = y+310-(int)temp;$ M  {; T8 z' B5 a
    }
    1 @, P8 t6 e5 [8 cif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)4 `' |, |# V5 K4 y0 b) |
    {
    / u- }7 {& }$ ?$ zclearrectangle(x,y,x+400,y+315);0 b; I1 b+ P' u. i$ e
    settextstyle(20, 10, _T("楷体"));7 O1 j# r* p4 y
    rectangle(x,y,x+400,y+325);
    + L- D( C7 @, A: F2 I& wouttextxy(x+40,y+10,"CPU");       //画柱状图
    ! v( E5 D: }; n; e% G/ souttextxy(x+45,y+10+100,"IO");
    . V0 g) B. Q0 L0 U/ ?2 A; Q4 Qouttextxy(x+40-15,y+10+200,"change");+ P0 s, e  W: Y6 \! b1 E
    rectangle(x+35,y+30,x+75,y+110);) c- I7 ^6 ^4 b/ s$ z6 N4 n
    rectangle(x+35,y+130,x+75,y+210);
    2 Z( M. @( V. C9 N* P2 Lrectangle(x+35,y+230,x+75,y+310);$ U9 M* F0 N" b0 v" k$ A
    outtextxy(x+180,y+310,"HR");' p; ]6 x7 N8 M; F, U' d  R. t
    t = (float)com;7 ]' E" _; n7 J) i  L  N+ @0 [
    temp=(t/101)*80;
    & L. Z2 d7 G) Nfillrectangle(x+35,y+110-(int)temp,x+75,y+110);
    $ j  E2 G9 \# v) w0 Ut = (float)wai;
    - N* g2 J, e( G; B! itemp=(t/101)*80;1 V; W9 X  L6 {  q- y- ?$ o. @
    fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
    6 z: ?- ^5 p: D; Rt = (float)cha;  ~# H. r0 U5 e
    temp=(t/101)*80;
    $ u. X0 P( V: D0 n" [4 C, Cfillrectangle(x+35,y+310-(int)temp,x+75,y+310);4 G2 B, _% `: a% [$ c. \2 J' n( z
    for(i=0; i<3; i++)   //画坐标   high=90,length=2509 v5 S" R  ]) w4 J# S8 b; z) {" f# P7 ]
    {
    . q: Z" h7 q/ w5 D5 d" {( Bline(x+100,y+110+100*i,x+350,y+110+100*i);/ c% }. S) U8 e$ p1 q7 l
    line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);% i9 I5 m+ v: y( v
    line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
    ' f6 V: O! T4 G. ?8 K4 m  K
    * k2 ^& j: ]9 \3 d* z; `4 sline(x+100,y+110+100*i,x+100,y+20+100*i);
    ; z9 S- o1 z: \* }# h( L. f. jline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
    ; ~/ B, m' H8 T/ E- Mline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);
    , J& w  v# G. [* T4 d( j7 k* m* \for(j=0;j<num-1;j++)4 r8 B% t# y1 P% ~3 M
    {4 S$ t/ i' Q! x# @! W0 ^4 o
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    % `" t! Q- W2 m" v4 ~line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);& t4 d1 w3 y, V. I& w
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); $ |4 w8 M% u) v" P. F% ]- w, o
    }
    ) O: L* T- r* M& i}0 \6 `! ^7 }0 b/ @' B* X0 L& I" i
    }
    $ O- F- n: d0 I& Z5 {" delse if(FLAG_HR==1)
    * I# i0 S! D) M2 y{- C& i: z9 S! i: a  i" q8 N) ^
    x=0,y=0;% p* r% X9 o. M0 F% @+ G' Y
    for(i=0; i<num; i++)
    5 a& H0 ]8 C- Z4 z5 ^% |6 I% Z{+ E. C/ V; H7 ]) D# B
    t = (float)info[0];5 N/ `/ }; }, e9 n3 g' y8 i5 r
    temp = (t/101)*180;
    & I/ \% O' Q9 P, |% N' G1 Ypos[0][0] = (10-num+i)*50+x+650;" v( H; T5 J7 U$ I6 Y+ C' b
    pos[0][1] = y+210-(int)temp;
    ) {3 O5 [6 N1 @: O& u/ \, pt = (float)info[1];
    ! z4 [/ ~. m! M- h1 itemp = (t/101)*180;  N- f, \9 [; Y/ `' ]6 z
    pos[1][0] = (10-num+i)*50+x+650;
    & g3 g2 ]+ l0 d, `pos[1][1] = y+420-(int)temp;- o+ Y9 I+ w% R% V, N) t
    t = (float)info[2];7 y3 T; d  X+ l6 I% F3 l: T' p
    temp = (float)(t/101)*180;
    , l4 ]: ~" Z! B; U, apos[2][0] = (10-num+i)*50+x+650;
    9 E% D6 N% ?. X8 ^pos[2][1] = y+630-(int)temp;/ o7 d- I5 b! N) V: w" a
    }
    # l, R- K1 j# I( T" t5 Oclearrectangle(x,y,x+1200,y+650);
    7 U3 D# k. C! S# K0 v9 H$ fsettextstyle(40, 20, _T("楷体"));9 h: r' u/ y) {7 q8 ~0 Q
    outtextxy(x+50,y+50,"HR");
    1 {7 U  E: s) a# couttextxy(x+280,y+20,"CPU");       //画柱状图
    8 d5 S9 ]! ~3 k% kouttextxy(x+285,y+20+200,"IO");
      \) u: G/ {! c) Touttextxy(x+250,y+20+400,"change");+ h' V5 W( k# h' t+ u% i6 r9 V
    rectangle(x+270,y+65,x+330,y+215);- L! j# x7 {- h( j8 y
    rectangle(x+270,y+265,x+330,y+415);
    & I; z6 f# d- v( k0 d1 Qrectangle(x+270,y+465,x+330,y+615);
    % `# K4 t4 j" u: A- U: youttextxy(x+290,y+620,"TT");
    ) k3 P- y& B$ G. s( l8 g! Wt = (float)com;
    % \) Y% P/ g* q. M/ qtemp=(t/101)*150;8 p( z7 z, d4 n6 g- L' B
    fillrectangle(x+270,y+215-(int)temp,x+330,y+215);
    3 e) V- N: u# ]2 L2 I+ O* {t = (float)wai;
    9 ]+ ?2 G' D1 @4 Ftemp=(t/101)*150;
      e" C1 h! }/ y6 Yfillrectangle(x+270,y+415-(int)temp,x+330,y+415);
    8 }8 f, n* q' s/ s- K* O" Lt = (float)cha;
    # p& [: ]/ Z  @0 F. r0 Ktemp=(t/101)*150;
      n. t& }, u. W* m% d4 O% \; D) Yfillrectangle(x+270,y+615-(int)temp,x+330,y+615);$ Z& K# q+ }, K7 E4 \& Z$ y% E+ p
    for(i=0; i<3; i++)   //画坐标   high=90,length=250
    6 ?) |' L- Q( ?; @3 x{
    / s4 f$ T9 R! Z' l' L" wline(x+650,y+210+210*i,x+1150,y+210+210*i);
    - ]/ d9 V6 W6 O: rline(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);6 ~2 V0 R9 V; z: z9 f0 M
    line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);, c9 k9 @9 f( \# s

    : i# Q9 y5 N3 r8 zline(x+650,y+210+210*i,x+650,y+20+210*i);
    ( @4 [' s/ I) Eline(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
    1 [+ Z' I* I7 b6 I9 t7 D% @line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);/ Q. W; G4 q  q: l8 k: P5 u4 ^3 [# _
    for(j=0;j<num-1;j++)
    8 A1 [" t4 c7 r' T' m# u/ e7 W{
    4 u% g% r; f6 z: V0 O. h/ n$ c" Gline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    # x5 T/ v: _1 f% p! ?* Z( B  m1 Cline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    3 a1 L8 P# P" x* q8 ~line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    : u) H- K, q' c4 T3 Q}
    3 J9 x+ k, Q# z4 M) v}
      F- P9 Y. L2 J9 V+ M}: }4 `1 I$ X5 ?% c- h/ Q. `' a
    : _$ H1 C7 f$ V
    + ~$ \6 O8 ]# G! Y
    return 0;
    7 K. \* h; K9 G" h: V}/ `8 j- Y/ F" e8 s' F/ }
    int drawPerformance_TT(int x,int y,int memorry,int com,int wai,int cha)" n1 x' `0 |& J
    {
    - Z$ L$ h+ r2 w7 Wstatic int info[11][3],num=0;
      z8 y0 S* u. Cint i=0,j=0,pos[10][3][2];
    ; G3 E, E' N6 u* u  @0 S4 r0 yfloat temp,t;
    . X/ v5 a1 L8 e8 Qinfo[num][0] = com;
    1 W4 c$ Y  n7 O9 H+ O& t/ r' W% xinfo[num][1] = wai;
    6 u9 A0 W) I$ s3 I, ~  C- s. ginfo[num++][2] = cha;8 {) Q7 n& v% B6 y4 v7 U
    if(num>10)  //存储10个点
    ! G. G. _, A! D( ?/ P- I7 |5 G{
    + U- q, |& f, U3 @( N2 @+ o# m- }for(i=0 ;i<10;i++)
    5 P; R" X  b1 G& v9 \{
    7 s5 K$ J% I0 D- Winfo[0] = info[i+1][0];
    ! H4 ?; I/ m( w' ~( g& I# zinfo[1] = info[i+1][1];
    " o, V: d) g) s3 \' Rinfo[2] = info[i+1][2];  W3 d& O4 V, }7 a) U
    }) A3 \0 E* i& R+ z
    num--;
    " ?5 R6 I) _$ q+ O% M# R0 ?+ V}: E7 Y, W# C* w  ?3 S' ^
    if(FLAG_show==0)) b4 {; P% }4 B  Z
    return 0;* V! p5 O6 U2 I/ T2 @/ i
    for(i=0; i<num; i++)
    3 s- ^0 B6 ~0 m, ^  {{- z1 y( H' n" i- K
    t = (float)info[0];
    * m; z1 u2 e. A" a( Rtemp = (t/101)*90;
    ; |+ [$ [6 B# z, O! ipos[0][0] = (10-num+i)*25+x+100;
    ( P, J: e" s& Y) L# ]8 `pos[0][1] = y+110-(int)temp;
    2 `- Q* L" K7 F) {* P- r! N8 `  S6 l; @t = (float)info[1];
    + R; r+ A; \- S, K" Btemp = (t/101)*90;; H+ K6 ~- }8 m' O7 L
    pos[1][0] = (10-num+i)*25+x+100;
    ; O: l5 {4 b4 m$ S1 H/ fpos[1][1] = y+210-(int)temp;
    ! r9 T& p! W( q; ^t = (float)info[2];8 ]* P4 `5 K. z
    temp = (float)(t/101)*90;7 a) a0 P2 l6 W- c: _% c: [
    pos[2][0] = (10-num+i)*25+x+100;; N2 S- E2 b6 [! r* S
    pos[2][1] = y+310-(int)temp;
    9 [* \+ l; `& s}' N- `3 q! R- x
    if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
    1 w& m  g- y% B" I3 o' R{
    3 `' G) K* \# {- R* _7 Sclearrectangle(x,y,x+400,y+315);" [: [( \1 F9 B$ ^  W
    settextstyle(20, 10, _T("楷体"));
    / X+ H- I$ b$ B* jrectangle(x,y,x+400,y+325);8 h! w6 o. ?2 ]( u% ^2 X5 R
    outtextxy(x+40,y+10,"CPU");       //画柱状图
    ! f/ M, ?% e  O! f; n& Q) T* r7 m* x# wouttextxy(x+45,y+10+100,"IO");, J" L2 H* g' w+ Y. r
    outtextxy(x+40-15,y+10+200,"change");
    ( b6 p0 T0 Y' F: H: A$ |rectangle(x+35,y+30,x+75,y+110);
    ; C8 G. o- A; S0 Z* [( m# G- Prectangle(x+35,y+130,x+75,y+210);1 w5 m: I" O  A- \8 u4 Z4 ]$ m
    rectangle(x+35,y+230,x+75,y+310);  P/ X, H9 I  x, J7 \$ j
    outtextxy(x+180,y+310,"TT");
    / i! D+ P; p, p7 j9 N2 Z4 it = (float)com;
    ' F2 Y2 L8 Z5 i, x" }+ ^# Wtemp=(t/101)*80;  Q4 L5 I! K' m
    fillrectangle(x+35,y+110-(int)temp,x+75,y+110);
    1 v  S. [0 y% k: [* n# ?t = (float)wai;
    ) j8 {, J- s6 C3 |temp=(t/101)*80;
    $ |7 G0 m/ a( L9 ^fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
    0 B5 b6 |( r6 Nt = (float)cha;
    , v9 x$ z2 R, Q- D; ^temp=(t/101)*80;
    8 C- `; m1 \4 P  o# \* Ofillrectangle(x+35,y+310-(int)temp,x+75,y+310);8 F$ M* l7 d4 G: N, S& A* i0 ]
    for(i=0; i<3; i++)   //画坐标   high=90,length=250
    ) a  K5 o+ x6 M/ ~; D. r{0 G% Z/ N: V4 Y7 |. s$ a) j8 y! `
    line(x+100,y+110+100*i,x+350,y+110+100*i);
    ; }$ K, W6 ?: _: X2 }2 x! n( Jline(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
    5 T' y# ?  f6 y2 l/ o; yline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);& ~+ w" Z! S7 |

    : W. |( U$ {: }& }line(x+100,y+110+100*i,x+100,y+20+100*i);
    , D$ J+ W# E0 ~7 |7 E) oline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
    4 H" S7 `. A3 Eline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);/ V4 p$ l) H4 s( Q2 j' s) G
    for(j=0;j<num-1;j++)8 x6 g. S8 Q" Z( \2 _: a$ N. y+ v
    {
    7 l3 ^: F9 m& H- ]2 `+ rline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    / P3 W0 g- Y  y* X9 H9 Nline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    $ J) a, [6 p. |0 s" U! pline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    6 \/ D) K+ n5 t4 {4 l$ ]}; @# v- I6 C9 }/ m
    }1 ^  A# X5 G+ }( m( p
    }
    ' G$ M- m$ e6 s, c) R* Q* a) z* d9 Pelse if(FLAG_TT==1)! k; J! s# P0 ^& E" W
    {
    % a- g, h3 A' c$ \5 r3 R* ax=0,y=0;. e/ _1 p) j1 r% x: I7 ^) F
    for(i=0; i<num; i++)! G9 T5 O0 g( @; F
    {# ^! i2 r4 g3 e0 R' g. I$ E
    t = (float)info[0];
    ( I2 d, N/ x; Y3 i$ z7 I* _5 S7 wtemp = (t/101)*180;
    , i1 B; L0 F* w& G( E" B! e5 Hpos[0][0] = (10-num+i)*50+x+650;5 P$ `8 c3 h1 Y) |6 [6 j
    pos[0][1] = y+210-(int)temp;
    , W' Q# M  y4 a8 V. y$ S. nt = (float)info[1];
    + p# g( ^5 R$ D2 ^' `5 L5 E" x" t2 ~temp = (t/101)*180;
    ! `7 r' {/ b% S) D7 M! Gpos[1][0] = (10-num+i)*50+x+650;6 R: s8 D1 ^+ W# }7 e  E
    pos[1][1] = y+420-(int)temp;6 T6 c  Q8 o! x
    t = (float)info[2];
    . M) }) \' d4 u& H0 N2 ~temp = (float)(t/101)*180;) c  y( |9 Y/ x1 e
    pos[2][0] = (10-num+i)*50+x+650;
    % F! l7 @0 g) Q8 z# npos[2][1] = y+630-(int)temp;$ v, [3 @& K3 w3 g
    }
    1 t/ g5 U5 k  kclearrectangle(x,y,x+1200,y+650);& g8 h, L1 N. Z
    settextstyle(40, 20, _T("楷体"));
    # g+ b7 A& p5 M# youttextxy(x+50,y+50,"TT");
    % u$ Y- I2 d* `outtextxy(x+280,y+20,"CPU");       //画柱状图
    . y7 l; U( k! t6 e! R+ {$ p) K8 e1 E5 Aouttextxy(x+285,y+20+200,"IO");, O# c* E; {; F6 x
    outtextxy(x+250,y+20+400,"change");& V  \8 X" Q, z: N) F, L$ {& I
    rectangle(x+270,y+65,x+330,y+215);- [5 ^1 _2 w4 R3 c# u
    rectangle(x+270,y+265,x+330,y+415);
    6 b" n9 e) G: X6 |rectangle(x+270,y+465,x+330,y+615);" O7 V: ]2 Y7 j4 a3 u7 w! Z
    outtextxy(x+290,y+620,"TT");
    5 h, V3 B6 o/ i' f; O; ~/ R8 b: Ot = (float)com;
    # ~# |4 a% c5 c& l9 ltemp=(t/101)*150;
    1 _. V) `: I; n9 wfillrectangle(x+270,y+215-(int)temp,x+330,y+215);, S( R& m5 C3 P1 N5 G$ b/ A5 S
    t = (float)wai;) c4 B& S% @% T6 {
    temp=(t/101)*150;+ @3 A7 e0 G1 H' H7 n
    fillrectangle(x+270,y+415-(int)temp,x+330,y+415);
    4 t6 v5 _% K. B$ u) Wt = (float)cha;, @' v" U, j1 U- \) }
    temp=(t/101)*150;$ U. r8 R$ Q7 S
    fillrectangle(x+270,y+615-(int)temp,x+330,y+615);
    " R: I( Y- ?3 H; v. k$ Kfor(i=0; i<3; i++)   //画坐标   high=90,length=250
    $ _+ a; L% m1 B# B# L' V  }{+ ?% w( E9 W( f3 n
    line(x+650,y+210+210*i,x+1150,y+210+210*i);9 y+ a! q6 O9 C5 A
    line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
    % ^' }7 _2 F  d. f! }line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);4 _1 D8 H4 s1 X* k

    6 e: y# ^% d% H1 w9 X$ Tline(x+650,y+210+210*i,x+650,y+20+210*i);) P+ _" C5 N( m* n7 R" a
    line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);' [4 x4 _# S% s; t1 |# `& m
    line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
    . C% ~5 w4 w* s1 \* D9 Z. {for(j=0;j<num-1;j++)
    4 S7 {* H. [/ c# @4 M3 G( W{
    " D4 e. v5 S6 e, F& W: xline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);$ u' E0 M; ?5 S! e/ Q* `. L
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);7 Y2 p, l% ?. f4 `* h3 ]
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    : _3 g/ B6 O! O( W- U) ]}
    # ~8 w+ A6 @' S) K- N/ n; b}1 K8 ]1 e7 L' S4 M$ l9 U5 u
    }
    # d2 \* Y: x, F$ q" A1 {7 [; _6 n  Y
    * b$ u9 z- [) v; X* [$ F; G9 p
    return 0;
    $ ?! {# j& B! n1 F}5 X" q% m1 j/ S4 E
    int drawPerformance_PF(int x,int y,int memorry,int com,int wai,int cha)
    - l+ G6 F( G1 U% g# {/ B5 ^{6 M: D3 k4 Z. P& Y5 z
    static int info[11][3],num=0;
    % `7 V% C7 `- s0 U% A6 A. M0 \* Lint i=0,j=0,pos[10][3][2];: Q5 R$ K0 j; y' G: I8 o! y/ N
    float temp,t;# h  X$ B( J$ o% g( r7 n
    info[num][0] = com;9 i. E1 _7 T* R+ N: G
    info[num][1] = wai;/ s" P7 i& ~) D: O
    info[num++][2] = cha;1 x9 \) Q) C5 Z2 B
    if(num>10)  //存储10个点
    , e3 N5 z& b8 z{) K$ z2 a' A& C: _- U$ x
    for(i=0 ;i<10;i++)  F/ w: d) s6 R: p$ i
    {! o% l! g, h$ W7 ]% t$ E
    info[0] = info[i+1][0];, U# B* r0 k2 D; O4 w
    info[1] = info[i+1][1];. o& [/ e+ c: {0 f
    info[2] = info[i+1][2];
    5 W5 x# V& b7 ?( ^4 [}( [9 T; Y" V" q( K% x2 p& L* W
    num--;
    4 Q: O2 H- g2 c$ T$ U}0 M. ~8 [: x9 |& d$ o
    if(FLAG_show==0)
    8 a* S" F7 c: o& i: r; g) @( zreturn 0;: i9 R7 n# _7 ~9 ?' H! m& t) y! N
    for(i=0; i<num; i++)5 o1 S% b6 W  m4 I) M
    {& |# d' x3 H) t2 w! d2 }5 O' A
    t = (float)info[0];5 v% N: J& f1 O
    temp = (t/101)*90;
    5 {( [2 x" H0 [5 L% s3 bpos[0][0] = (10-num+i)*25+x+100;
    * c2 n* K+ {6 w! Upos[0][1] = y+110-(int)temp;$ r/ D3 Q2 v; u5 s8 Y
    t = (float)info[1];
    1 t/ X# N% d  ~3 }; Q" d, O3 k5 _temp = (t/101)*90;
    0 O$ w  \- z1 S- u  c6 T9 R9 o( Z$ u# l& Hpos[1][0] = (10-num+i)*25+x+100;6 \, J$ _1 D# h+ ^2 t# C1 }
    pos[1][1] = y+210-(int)temp;
    ; I( Z6 W( G/ Z1 U' o* Qt = (float)info[2];/ X- ^1 I2 U; @, h* T/ R
    temp = (float)(t/101)*90;+ y' @( w+ b7 B, }/ S+ d& D
    pos[2][0] = (10-num+i)*25+x+100;6 ?$ _; A- ]. o+ t; o& X- f( l
    pos[2][1] = y+310-(int)temp;
    - j- s3 R' Z: u7 v& c}" J  Z, Y: I' e9 @( ?( I  ~5 z
    if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)" ], \) p6 E6 S. x
    {
    4 n2 v+ ^& l- Q7 j; Wclearrectangle(x,y,x+400,y+315);
    8 M! J7 m) U: }/ u, J7 D/ o0 V9 Qsettextstyle(20, 10, _T("楷体"));2 ^" k. ^8 D( T6 W9 h
    rectangle(x,y,x+400,y+325);
    & f4 L+ v0 C! Z) \* g) souttextxy(x+40,y+10,"CPU");       //画柱状图+ z# L$ G& \( Z0 L+ g
    outtextxy(x+45,y+10+100,"IO");2 }1 c* w- e+ _: `( U8 i9 c
    outtextxy(x+40-15,y+10+200,"change");
    9 ~5 C) m5 L+ ]rectangle(x+35,y+30,x+75,y+110);
    : I8 p$ q. S1 g1 J! Krectangle(x+35,y+130,x+75,y+210);/ ^  p5 y$ k8 `* w& m
    rectangle(x+35,y+230,x+75,y+310);7 A! ^0 J7 u$ n- @
    outtextxy(x+180,y+310,"PF");
    3 ]# g9 R* F7 g/ z" Z) q: E& K" Qt = (float)com;+ B, b  C- n) w& D0 F
    temp=(t/101)*80;" R$ s6 V: _4 _4 I6 B
    fillrectangle(x+35,y+110-(int)temp,x+75,y+110);: ~3 y, S8 I0 A" @' R
    t = (float)wai;3 Y4 B4 Q: u$ ^1 K9 D! o! R
    temp=(t/101)*80;+ ?; _) i! g0 D
    fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
    4 Y9 v# e/ Q6 dt = (float)cha;
    5 \4 n3 q" \% K; z& i6 qtemp=(t/101)*80;) H7 o0 t5 o- j( P  K: a* J, V
    fillrectangle(x+35,y+310-(int)temp,x+75,y+310);1 a# A# y* v% e! j2 q" n: b
    for(i=0; i<3; i++)   //画坐标   high=90,length=250( d" Q3 u/ K6 }# F- t& a( I% g5 d" X
    {
    % H7 i* j. d3 a4 H4 o' b2 Dline(x+100,y+110+100*i,x+350,y+110+100*i);$ l& ?& W7 U" h+ }. R4 y$ t5 ~
    line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
    4 b8 O! S! w8 v1 X) O$ f* S" F- h' nline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);) {$ C0 n4 `/ D$ X
    ' A2 E" _6 b/ _7 W' }, t1 ]
    line(x+100,y+110+100*i,x+100,y+20+100*i);
    - N8 {- b/ q$ ], g/ Lline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
    $ _: ~3 l  Q! m( Q) Wline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);$ g+ N% b1 a" S1 P3 l( Q9 [
    for(j=0;j<num-1;j++), W% @# L$ p" d# b7 O5 O
    {+ _! A& r( i, \+ ]
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);0 w$ p- r( m5 }! W
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    ' R4 f4 U5 |( t% J0 i6 j* Qline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); , v! O% @9 d1 o* @8 Q
    }
    7 Q- y: n7 L. Q+ {0 _$ v, w}
    : }6 u1 L: k3 U0 k3 Q7 f% o/ ^; G3 e}
    9 n$ P. r, h" Melse if(FLAG_PF==1)) r2 g( e& |1 V: y; D5 E
    {7 n$ a. C: L% I+ g6 V
    x=0,y=0;( W" ]+ a' [8 R4 X+ }8 L
    for(i=0; i<num; i++)
    2 N/ A8 ]& N- ^4 g0 s{+ e0 |/ s0 Z: H. r" z) F7 I
    t = (float)info[0];* q# ?7 L( F4 P) z% v
    temp = (t/101)*180;+ n1 J; z; P: g' O
    pos[0][0] = (10-num+i)*50+x+650;
    1 n9 a; s; z. U% u" ~pos[0][1] = y+210-(int)temp;
    9 _7 {0 q3 F* i( zt = (float)info[1];
    * b! A% m7 e/ a. n# N' Stemp = (t/101)*180;+ ]% i8 i& o2 {8 g
    pos[1][0] = (10-num+i)*50+x+650;
    ' R' R" u# o2 ypos[1][1] = y+420-(int)temp;
    & p" w$ h- b! Q5 J4 Jt = (float)info[2];+ m% D0 ]5 q6 x. T; W4 W3 q: F: O
    temp = (float)(t/101)*180;
    , F0 l. a# X6 y* T8 V* Dpos[2][0] = (10-num+i)*50+x+650;
    2 L3 j; e" {* D1 npos[2][1] = y+630-(int)temp;; G% f; L' F; M; P
    }, r7 ?0 J" ~  `( f1 G2 T( v! q+ E& q0 C
    clearrectangle(x,y,x+1200,y+650);4 D5 g$ {0 V  D3 u5 ~$ h: h3 Y5 ?
    settextstyle(40, 20, _T("楷体"));
    & L3 P( z$ ~& u: x5 a' o$ t+ xouttextxy(x+50,y+50,"PF");
    / q! ^/ C; j( g: A) M, ~$ Aouttextxy(x+280,y+20,"CPU");       //画柱状图
    # M- K! A; ^# [4 t. qouttextxy(x+285,y+20+200,"IO");" f/ M" N. q, Q! T6 W2 I
    outtextxy(x+250,y+20+400,"change");' n" e. M' p/ I1 S  W
    rectangle(x+270,y+65,x+330,y+215);
    ( c0 r1 e* i" y/ |. yrectangle(x+270,y+265,x+330,y+415);5 E: b' V) S( t- h
    rectangle(x+270,y+465,x+330,y+615);
    " ]" L9 p/ ~% M  j, ^( F3 Douttextxy(x+290,y+620,"TT");8 }8 v- Z! @1 l- L; ~
    t = (float)com;- o( ]3 x& B! e# z: x# f) `
    temp=(t/101)*150;
    - l( w/ @  Q8 H6 h+ V: yfillrectangle(x+270,y+215-(int)temp,x+330,y+215);
    6 _. U) U& v8 T) M8 E; St = (float)wai;9 \' `' b; C" k' z+ g
    temp=(t/101)*150;
    2 k) f6 @0 K5 B1 Ufillrectangle(x+270,y+415-(int)temp,x+330,y+415);: E0 O" ~- N5 Y- X2 S! B7 _8 Q
    t = (float)cha;
    8 S. N: E% Y% X# Mtemp=(t/101)*150;! ?8 P! \" K' ?% q# Z: K
    fillrectangle(x+270,y+615-(int)temp,x+330,y+615);
    " i; b0 e/ t5 N% X2 A! f0 \' jfor(i=0; i<3; i++)   //画坐标   high=90,length=2500 x5 _9 E+ H3 _2 l$ l
    {
    6 f4 s$ [& _& Y6 K( g8 T2 t* ?line(x+650,y+210+210*i,x+1150,y+210+210*i);' ?- Q% l8 `4 e6 S
    line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);6 }: I9 c: f* h+ Z" K3 c$ E
    line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);& m+ X' o, S" i+ i! V6 l, v- I0 o
    6 w  X! V6 U- c- P8 B; Y
    line(x+650,y+210+210*i,x+650,y+20+210*i);
    4 Y2 }+ b$ ]3 M8 X. Tline(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
    6 C. S0 w) T& j6 p: X) `" W9 Vline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
    + Y! j9 e; R& X. mfor(j=0;j<num-1;j++)' J! C# {2 v2 N* v4 `2 R3 u6 m- _
    {
    2 Y* \" ]2 N  n. dline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);; l8 A7 I3 h; f! l
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    3 s  F  N- y2 Q3 }line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 1 S+ _$ |' m9 x7 f
    }
    ; ~- @5 a: y, C! Z- j}
    7 T3 Y# c% s% G}
    0 z; N4 V* L; Z8 Q7 m( Ereturn 0;7 x- m: M3 ^2 h* ^# V; n
    }
    : C2 B4 S, C( ]) |int drawPerformance_SJF(int x,int y,int memorry,int com,int wai,int cha)/ _5 ^+ h- }+ @. S
    {
      N, ^7 D! w8 i+ E! Qstatic int info[11][3],num=0;" L, }8 A6 e# ]8 m7 h1 u
    int i=0,j=0,pos[10][3][2];
    5 g5 p# X2 K/ i5 M# jfloat temp,t;
    . q' Q# X! R. z$ A4 S$ s1 Q' [info[num][0] = com;: ]5 F! h4 O) r! k9 l
    info[num][1] = wai;
    ) a' @% `. W7 z8 v! zinfo[num++][2] = cha;: G# E3 v. ]7 Q3 N( R- \. V
    if(num>10)  //存储10个点- d- e9 z4 v! l2 b, b6 Q6 L
    {( d- W! k7 ?2 K8 ?# S0 C" X
    for(i=0 ;i<10;i++)
    & N: z  i" Y7 E- ]5 o{4 ~5 j2 O' t3 P9 f' H3 A
    info[0] = info[i+1][0];: R4 U7 S% @8 k, G+ n- m2 w8 A
    info[1] = info[i+1][1];
    2 G) z5 T" b  J0 r+ N, K3 Vinfo[2] = info[i+1][2];
    : @* r$ O: [: ]}. Y+ b" ~% l8 Q" d- Z! ^
    num--;6 |* @" J/ t: y
    }
    2 s) X" v/ \! l' iif(FLAG_show==0)
      S4 _5 t0 d( g$ P5 e7 Hreturn 0;( Q2 T+ @3 B9 X! ]  G. X
    for(i=0; i<num; i++)1 z9 S  y1 S9 d, _- f* M
    {4 H" n; t+ M3 L+ y
    t = (float)info[0];! U4 s" ~2 Y+ Z
    temp = (t/101)*90;
    # U( Z: ^* l0 p" n7 Q! Z+ wpos[0][0] = (10-num+i)*25+x+100;* ?0 T" \$ h" r  ~1 ]# [/ p% O: O
    pos[0][1] = y+110-(int)temp;
    " Z% _. D1 Z8 B& ct = (float)info[1];, g4 X) ~; r* C, k, |
    temp = (t/101)*90;- `  b! a# e4 F3 {! Z
    pos[1][0] = (10-num+i)*25+x+100;6 ~' B7 L! a  R' s. T% U
    pos[1][1] = y+210-(int)temp;
    2 G0 g5 ?% x6 r- L. ]0 F: i1 ?t = (float)info[2];
    ; ?5 }8 {  v8 k$ T( v+ ctemp = (float)(t/101)*90;
    2 r" G& d7 O/ {6 S  V# ?2 M9 Upos[2][0] = (10-num+i)*25+x+100;. o$ p) C8 ?5 d# p( o5 g# w1 H6 _
    pos[2][1] = y+310-(int)temp;
    $ f6 R6 @: w* ]/ s/ N. E- x0 S}
    . [3 r: P: E( [+ _9 H% e# Gif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
    / O( G* j* Y4 o0 G' y& c, \{
    ; h3 K! {, V; }  E% |+ i6 Uclearrectangle(x,y,x+400,y+315);4 S' k, y% l( H! o( Z) J
    settextstyle(20, 10, _T("楷体"));
    * P) v/ H' e- \  c4 j( U. V) i0 Xrectangle(x,y,x+400,y+325);
    5 t* p3 j+ I1 S) Y+ J3 L! Routtextxy(x+40,y+10,"CPU");       //画柱状图
    & \. ]  P1 E; ]6 {, S. W6 Y/ aouttextxy(x+45,y+10+100,"IO");" v& H+ v$ R' v6 J7 f* \7 p
    outtextxy(x+40-15,y+10+200,"change");6 b8 @) ^  w' P9 h
    rectangle(x+35,y+30,x+75,y+110);. N; P; N( p$ z! q
    rectangle(x+35,y+130,x+75,y+210);& f7 V" b+ o( @+ O! P
    rectangle(x+35,y+230,x+75,y+310);
    7 Z( c+ |+ Y/ b( m' Touttextxy(x+180,y+310,"SJF");
    : U% a( B4 x8 }8 N7 Et = (float)com;
    6 r1 O. Z1 U4 m6 }temp=(t/101)*80;4 u  b2 T( K/ [' ^
    fillrectangle(x+35,y+110-(int)temp,x+75,y+110);
    + J6 n6 H7 u) o/ G' ]8 _t = (float)wai;2 b3 E, x+ E# Y7 l9 w
    temp=(t/101)*80;, M2 _$ f' K. T1 H% v0 R& |
    fillrectangle(x+35,y+210-(int)temp,x+75,y+210);/ I* I, |3 x0 c' k' p/ s* M9 w
    t = (float)cha;: o! g1 t# W5 v  g* X
    temp=(t/101)*80;! u' n$ B" S+ A$ m1 u1 o+ I
    fillrectangle(x+35,y+310-(int)temp,x+75,y+310);
    " f) Q7 ~2 |+ t* `3 z8 ?: S& Hfor(i=0; i<3; i++)   //画坐标   high=90,length=250
    , e9 D4 [6 ^' C3 O* [8 O/ Q{
    & V8 _5 k/ [3 `! J2 vline(x+100,y+110+100*i,x+350,y+110+100*i);6 C6 I/ ~3 r+ v- w1 W
    line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);  G  M" T' o2 y2 c
    line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);: L+ T$ p4 r& v) @

    ; n2 A# O( c+ p, q) t3 z! [3 V5 bline(x+100,y+110+100*i,x+100,y+20+100*i);1 R; C; @9 y+ |* e
    line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
    9 g( O/ p: f5 g* u- Y1 `7 Iline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);+ t" r. j+ _/ @0 r9 {$ ?6 b7 t
    for(j=0;j<num-1;j++)
    6 U! \  U% Y9 [$ F" Z4 b* H! _/ c{& P1 U$ J" F$ O; _* o1 H) `
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);( X  ^0 m* s7 A5 M4 w6 |1 _
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    9 X' f& c) e+ L, M: j1 q2 H, bline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    & c2 y2 P5 o9 J}0 y& |  \7 e1 r  s( I8 F* ~: [
    }
    * {# \( ]& j! L/ Y}/ o  c; y) H5 O/ h5 T
    else if(FLAG_SJF==1)
    & y9 [3 l) e/ m{
    7 l1 w5 o1 o$ R" Tx=0,y=0;% P9 G. C. H4 s# H! d
    for(i=0; i<num; i++)
    + R% r5 |. l0 e/ _* C{
    * b/ [7 E7 e* Z7 xt = (float)info[0];
    # w; I5 I5 m, H* U" Itemp = (t/101)*180;
    # i+ U) J/ T( B* E1 Z4 G& apos[0][0] = (10-num+i)*50+x+650;; T& A3 k7 {+ a
    pos[0][1] = y+210-(int)temp;
    7 \- J! m/ f9 |t = (float)info[1];
    % @1 @* U) l/ `/ C+ A+ G+ stemp = (t/101)*180;, K2 i. O0 A! m+ [, ]+ A
    pos[1][0] = (10-num+i)*50+x+650;/ \5 Y2 i$ h* J2 e! r
    pos[1][1] = y+420-(int)temp;
      y1 f( ~/ v! _& Xt = (float)info[2];- q) d4 P( P. w5 V
    temp = (float)(t/101)*180;  K' }+ w( x' H
    pos[2][0] = (10-num+i)*50+x+650;, s% T) B! k! Q/ x$ i
    pos[2][1] = y+630-(int)temp;
    3 D8 O, w8 z1 G) ]}* X) O3 J! d: X- B1 ~* F+ S4 a& B
    clearrectangle(x,y,x+1200,y+650);
    ) p# g3 i2 F8 v( H2 Y* csettextstyle(40, 20, _T("楷体"));1 O- f; |- P* W& x* C. ?) t
    outtextxy(x+50,y+50,"SJF");4 C* V! g% Z# A3 U! x
    outtextxy(x+280,y+20,"CPU");       //画柱状图
    $ j' {' _9 Z5 M' k' J# zouttextxy(x+285,y+20+200,"IO");
      x8 D+ H/ e2 v4 vouttextxy(x+250,y+20+400,"change");: V8 s# U' d; @2 \
    rectangle(x+270,y+65,x+330,y+215);
    4 `/ z5 A( b# {( A: urectangle(x+270,y+265,x+330,y+415);
    * R* S, k% n+ `2 Nrectangle(x+270,y+465,x+330,y+615);/ h; a6 s2 s& J( y5 V6 C
    outtextxy(x+290,y+620,"TT");
    + V7 g4 N: Z  C0 St = (float)com;
    8 L8 \; T/ }9 S! u; N- atemp=(t/101)*150;3 t: O, ^: E6 B
    fillrectangle(x+270,y+215-(int)temp,x+330,y+215);4 ^- M! g! F' V
    t = (float)wai;
    8 O6 M8 c: C9 b2 G: Ptemp=(t/101)*150;% V( l- r, J* u5 `% t+ |( O6 i
    fillrectangle(x+270,y+415-(int)temp,x+330,y+415);2 i8 K2 |  s  P" m7 _- q
    t = (float)cha;& {1 ^: t7 t' y4 \
    temp=(t/101)*150;$ r# \' w" Q2 X- k) k, i
    fillrectangle(x+270,y+615-(int)temp,x+330,y+615);! W0 ~& }) R. H
    for(i=0; i<3; i++)   //画坐标   high=90,length=250
    $ T- v1 F2 D9 v# G7 P{
    . J) f8 v9 a2 r/ C5 `% w- aline(x+650,y+210+210*i,x+1150,y+210+210*i);- I7 `  H+ }, {5 I% N
    line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);! W( v; ^$ R/ i0 p! n' c
    line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);- _0 {$ c7 k  o- q7 q/ D

    7 h' W* R. T4 ~) z) @  j4 zline(x+650,y+210+210*i,x+650,y+20+210*i);
    : O+ M& L( o/ |line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);! r! U9 c6 y$ O3 G% c% U
    line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
    6 w2 I' U7 A& bfor(j=0;j<num-1;j++)
    ! b9 K% `- y3 I3 z" G{
    . `2 D4 i, W- ]4 T. L7 A9 T6 qline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    ( _+ c. _, N' ^6 N# B9 jline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    9 T/ d( ~9 q+ p7 }line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    * u# \1 Z/ C* G}
    9 l) c7 E$ ~- k4 }4 K8 C" L" n}
    ' C; q* P4 ]* w# i/ p0 S3 K}( D0 ?, S5 Y+ @1 }  T
    return 0;
    6 y% L7 W* U( v# f# E}
    7 X( _. {# P% v. n0 s  d) }4 Fint High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
    / ]  F0 y" U& u) u{
    7 b+ i4 j  [7 C, I& X* t. M2 nstatic int compute=0,waitio=0,change=0;
    & v$ M5 B5 s, y* |0 ^static int computeLast=0,waitioLast=0,changeLast=0;- t- ~; X8 B- |8 z: y5 J3 h; h# T
    int i=0;) M3 M7 \; a- C( b
    if(draw==1)4 V3 w- S" n/ ^
    {
    ; j9 _' D( J2 l( L$ y//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);) Y3 }: v# u% r: {& D* j
    drawPerformance_HR(400,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
    # [/ X2 H- E7 H# {! [% v- |, e5 PcomputeLast=compute;# A" m2 _4 ]0 Q( w  |3 ]
    waitioLast=waitio;3 b  }  o4 l2 @: ^/ i+ {' ?
    changeLast=change;
    7 N" F* O$ [! ~1 i, i}
    / w# {' M& I0 Aif((* memory).p[0].flag==ready)" N* j8 N4 \; V! H# z6 Y3 ]$ S
    (* memory).p[0].flag=computing;  w* Z/ ^# T8 c  y) K* \8 Q3 v
    if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)
    % w+ s( F6 v2 s8 u0 d: C{
    ! J% C* E* K1 a8 J5 w) yi=(*memory).p[0].computeNum;$ W5 t! \' U: D- j! A: E
    if(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed
    ' L6 r' w  H% E0 _1 Z{/ @- n0 b: r+ M5 P) p
    (*memory).p[0].flag=IO_waiting;9 [' ^6 M# l. s2 D2 ~/ r8 v3 y
    (*memory).p[0].computeNum--;* G3 O+ @2 p/ V- j: H% s& W  O% `  R
    change += exchange_IO_Compute;
    $ G; l% R2 A2 b( s4 o/ [% s% Jcompute++;
    2 P' A. ~! ]) l3 w}1 F% F! H  X5 Y% s# ~& K! T
    else
    8 W& ]) p& b  O- |& `1 B& n/ R{+ k* e9 U! h+ t" w' [5 U
    compute++;; k5 C$ T, N: _, R2 f- L
    }" Y( e$ {1 V' J  X
    }4 E0 a' Z' H5 U( b; {- ]
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)3 v) c, v/ D7 D! n$ g7 z- T; A# [
    {9 K( V* B' L2 H- d' i/ n2 F

    % _* P; M" k, J/ e- {i=(*memory).p[0].ioNum;$ M5 v2 X$ J+ F; b3 Q
    if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed
    $ E6 o5 @  t* q! C) m, U{
    6 r0 T4 i& }! |; u; U# r7 t(*memory).p[0].flag=computing;2 x3 f( h2 ~* q) ^7 G; b3 c
    (*memory).p[0].ioNum--;
    + ?  v3 D1 n: F8 I; achange += exchange_IO_Compute;
    2 g9 C# T9 R" L( awaitio++;
    7 \, |3 [; K) \}
    " N/ k$ {# m6 s! \8 \5 e0 helse
    7 q% B! a1 S: w& J7 u, `{
    ' c; Y. H, R1 T( Awaitio++;  d0 w6 |4 h5 G
    }$ @: ~% f* ?4 u4 i; q- {
    }7 x' z4 e% i1 v% _- a0 ~, Q' P$ q
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)
    1 `; v& Q: t2 U' p  e{, ]( N4 F2 f; E% R" f" Q- l
    (* memory).p[0].flag=IO_waiting;
    6 f. @- i6 z; ~( P1 ^1 |8 }change += exchange_IO_Compute;( T6 [3 p* u0 C( x# _+ H
    }
    7 `# e6 _2 U# N( Qelse if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)
    & Q) `3 ]6 g* |  ^4 u7 t6 t( T) a{  \* S! K1 V7 W9 P% i7 c" P% t
    (* memory).p[0].flag=computing;
    ) b0 l3 A2 p8 t1 k, A$ |) V2 t, Lchange += exchange_IO_Compute;0 Y) @( t4 S) ~% F- }7 h4 U3 C
    }# z  c  h( i, C( X& h, ]' h9 @
    if((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0)  //一个作业已经完成4 ~3 T2 N4 S) H1 o2 v& |
    {
    + m- q7 z, J( i$ t* ^+ P0 ](*save) = (PCI*)malloc(sizeof(PCI));
    ; v8 P3 r2 x+ [0 ~; ](*save)->next = NULL;
    5 j" F' m, l1 A9 r6 f( o3 \9 w& ^(*save)->processID = (*memory).p[0].processID;
    0 p# f8 }, l8 l' C, J2 k(*save)->comeingTime = (*memory).p[0].produceTime;" Z- W  r4 V" F% E5 X7 M+ p
    (*save)->askMemory = (*memory).p[0].askMemory;
    / N7 I6 P; h, @$ ^9 U(*save)->compute = compute;1 Q6 }# O. W6 D" p
    (*save)->waitio = waitio;3 l: \/ `4 ?9 L( o3 d, `$ a
    (*save)->exchange = change;
    4 J# z  c0 |, N(*save)->completedTime = systemClock;
      d, j2 X1 L7 o; j* \5 Y(*save)->runningTime = (*memory).p[0].runningTime;
    9 e* e8 @7 G! X. I4 q! H! k* k7 k*spareMemory = MAX_MEMORY;         //*spareMemory + (*memory).p[0].askMemory;
    8 `; E6 e! s3 [2 @( }, k2 }% Gcompute=waitio=change=0;
    0 v& ^2 \* b' a+ b5 b( fcomputeLast=waitioLast=changeLast=0;
    ' h) \/ |3 d- d% D  b& E& jHigh_response_ratio_s_to_m(&(*storage),&(* memory),&(*spareMemory),1,1);( b" t+ _+ @. C1 K
    change += exchange_process;* H8 }  ?: e; F) [) m* X3 p
    return task_completed;
    $ W9 R/ Q! g# @$ Y; q# p}/ P; a7 G! T4 J" _4 ^, o/ U
    else
    4 Y1 y! |) m, x3 P% k2 Greturn task_not_completed;
    9 m; @8 _. n" E. V}
    9 @* B3 C) Z9 g( sint High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int dispatch)7 l- @. `4 i, y+ V! ^
    {
    3 b  m6 J1 l5 e! Tstatic int waitTime[initProcessNum],i=0,j=0;
    0 K: Z+ m5 K' m% R1 Cstatic double HR_ratio[initProcessNum];
    0 d) W" L! h6 X6 p  v$ fif(flag==0)                    //初始化数组
    # m3 j+ k$ y/ u6 [6 a{
    # h, g% n0 E- K4 Efor(i=0; i<initProcessNum; i++)
    0 S- k3 ]1 i" G" T{" v1 D; p8 X( ?" Y6 o
    waitTime=0;( r! n/ T- `4 |. x$ b0 e! f9 O
    HR_ratio=1;
    8 a2 o' S) X. r) H2 p6 J5 S}
    6 d" j" j9 [5 _" i  r}
    - a7 A+ J% R6 Vfor(i=0; i<(*storage).proNum; i++)  //等待时间增加,重置响应比1 V% ~! E; L/ x( X1 o
    {
    # @1 L; Q% I. A+ j" uwaitTime++;0 R* o; E% x6 B- E# t
    HR_ratio = (waitTime+(*storage).p.computeTime+(*storage).p.ioTime)/((*storage).p.computeTime+(*storage).p.ioTime);9 @4 ?6 H+ A; K% G' \' {/ o
    if(HR_ratio > HR_ratio[j])7 r9 P8 g3 W3 r3 [/ g
    j = i;
    * t. r- Y+ q; A+ t# M}
    5 n2 }/ M- S* Bif(dispatch==1)                    //需要调度一个进程到内存中执行
    ! s+ @, i; g+ f, m2 V. k" u; ^5 F{
    ' z- J" w: W* {/ ]- p3 ?if((*storage).p[j].askMemory < *spareMemory)
    / L! c/ G6 _, k# q{
    ; N6 L- k: Y1 p; N$ O7 V+ y(*memory).p[0].askMemory = (*storage).p[j].askMemory;
    3 n- g" i! _3 Y) e, E5 \(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;( s9 x0 A6 B1 i0 s0 Q5 b3 m  _
    (*memory).p[0].computeNum = (*storage).p[j].computeNum;
    % ^" C3 r! o1 Z/ z(*memory).p[0].ioNum = (*storage).p[j].ioNum;) z7 Q% z& @5 g( H* i: U9 L
    (*memory).p[0].processID = (*storage).p[j].processID;0 N3 H) {' ^3 T5 `, ]3 J
    (*memory).p[0].flag = (*storage).p[j].flag;
      y7 b. T- f9 C2 g4 u(*memory).p[0].ioTime = (*storage).p[j].ioTime;+ V+ P  L8 w# V- g/ M- i( I
    (*memory).p[0].computeTime = (*storage).p[j].computeTime;
    9 J) M0 y" h* }1 X" u/ K(*memory).p[0].runningTime = systemClock;' J7 u. w+ q2 q, D  z$ H7 Z! e
    (*memory).p[0].produceTime = (*storage).p[j].produceTime;# R  i4 C& f% i' Y8 |
    for(i=0; i<(*memory).p[0].ioNum; i++)
    4 N4 Q2 T3 ?0 m2 [(*memory).p[0].ioClock = (*storage).p[j].ioClock;
    , m0 f' i2 q8 h0 U+ P- efor(i=0; i<(*memory).p[0].computeNum; i++)
    * m. J; b# \0 K" Y7 C3 l! r5 V- E(*memory).p[0].computeClock = (*storage).p[j].computeClock;! b8 b2 c. Z; J1 ?' b+ \
    (*memory).proNum=1;
    / {4 J, |2 X8 Q* R, ?/ c*spareMemory = *spareMemory - (*memory).p[j].askMemory;
    / b( j6 A1 v2 G4 _2 {& y+ t6 Kproduce_one_task(&(*storage),j,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程
    ) w2 o& J/ s( L9 ^% [(*storage).p[j].produceTime = systemClock;% x  S3 U' u. Z& U8 S: o0 Z
    MAX_COMING_TIME = (*storage).p[j].comeingTime;
    , B* N5 r' r3 m% e1 i3 C4 d0 k: jwaitTime[j] = 0;8 B0 J3 l, {" H! D& ~4 A
    HR_ratio[j] = 1;; P8 ~, r! \; e  g
    }
    0 J, E: x( m& Felse
    % U; p( y: q' r2 X. x{
    . W$ P% [; X& X* n; Uprintf("A process ask for a memory overed the system capacity\n ");; y8 w+ z$ I# N8 V
    exit(1);: m7 l! C5 e$ O  K8 T* q1 {( h
    }
      ]: L/ w) L# i4 o' s) n}
    0 O, v+ A3 ], y! X% [. Ereturn 0;
    ' ~( G" @5 ]: f& c3 i8 Q9 ^; D/ i. x& ~}
    * D8 ]& e4 P9 U0 Z  ^" C) Gint PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)  g: v% V# c  }' o; d
    {, q3 Z% a# N( l" ?* P$ }% C5 [
    static int compute=0,waitio=0,change=0;
    - C* \6 E8 E! _% h3 W& ostatic int computeLast=0,waitioLast=0,changeLast=0;
    . S2 K* F4 c" b# J& I% m0 iint i=0;
    . i" }& U' t) w! _3 Pif(draw==1)
    3 g8 n7 M/ A8 s: t" S! _{6 A& v! l( d9 S8 D" Z" q! c
    //printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);8 @5 b1 e3 l! K2 p% x
    drawPerformance_PF(800,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
    ( v/ c& \$ }7 _0 F
    ! s& n1 n' r5 t8 V( U
    6 [# F- Z# `3 O7 e5 ^% l9 scomputeLast=compute;
    7 f/ i* \' N: s6 v9 W3 C* I2 G- ywaitioLast=waitio;
    , d- M3 Y9 X$ H+ h9 V: d( cchangeLast=change;
    & i- @: `( Y+ w% G9 h}( R8 L" K6 N* e5 Q. l) C; W. \. h
    if((* memory).p[0].flag==ready)
    ; b9 G/ u9 y( \0 u2 Q2 W(* memory).p[0].flag=computing;1 e8 C1 `6 j9 Z( t( ~9 E
    if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)
    ; D+ M( m; y9 \6 ~{
    ; |. c! n/ N4 K5 Si=(*memory).p[0].computeNum;1 c. m# w% E) Q
    if(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed
    : i% J/ ]2 q  D; p  p{+ \) n! z2 H8 A) ]. B
    (*memory).p[0].flag=IO_waiting;
    5 b$ H; C, |  @$ u(*memory).p[0].computeNum--;2 r5 i! j* G$ u# J% Z
    change += exchange_IO_Compute;6 h3 k+ D6 l& ?6 R; w) t# ]2 L8 M
    compute++;
    + V9 f7 H0 n% g: u/ a: _}; ]0 c; m" e: N) n. @/ I% ], Z
    else
    " s. X. H( n) d0 o6 S6 P" `6 a' j' i{( T# s6 i9 [# M
    compute++;
    + b- }  f3 C6 Y6 p$ D2 t}& I9 l) i' A  L" _
    }  ^# S: h  B! h5 l
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
    4 P1 n5 ]$ ^3 y! R{! L1 Y1 s. r3 B  G# _2 W' A$ w

    ! i2 H! L- ]- w1 Ii=(*memory).p[0].ioNum;
    9 ^% H1 t- z" j0 b- h, Tif(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed9 I9 G# Z' E6 x( X. T
    {& D0 I4 b0 G3 Z0 A# }+ [
    (*memory).p[0].flag=computing;
    5 R1 o8 S/ [; f% O& Q4 W3 f(*memory).p[0].ioNum--;! m- A; _4 P: ~& }: `* t2 F
    change += exchange_IO_Compute;% H5 A' B; X$ h0 ?6 m
    waitio++;: [: h0 Q& ]3 F. o6 J
    }1 N+ x# i4 Z2 x* R) v6 F
    else
    ; _- C. B6 L5 }, H2 |& Q{, U; y8 t* j( M; \1 |0 h
    waitio++;6 A) S* _( a# V7 U: P+ Z* ^
    }/ ]+ d3 n+ _! L5 d4 I0 @, O. J
    }
    , A* t. ~5 r- felse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)8 d& L, M$ u8 c) ]* {
    {1 L8 A+ L, A2 z3 ^+ B" M9 d, u
    (* memory).p[0].flag=IO_waiting;, E, i- U7 K; y. l
    change += exchange_IO_Compute;9 |$ w! j3 m6 q9 i
    }+ ^/ I1 y9 O8 N! V- G. F
    else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)
    : D$ z6 J. ~; K; n$ A( [( A6 v{
    : @; B3 W; f2 u, f, p(* memory).p[0].flag=computing;4 R1 [( }! ]( I  B$ r
    change += exchange_IO_Compute;# \  B( e3 B( }# {
    }
    0 t0 l& a0 c8 Qif((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0)  //一个作业已经完成: F7 @+ N- k  ?7 ?
    {
    4 d* M& @* U, V! [: f(*save) = (PCI*)malloc(sizeof(PCI));7 e- ^# P% J8 M1 o7 B" V! V: c
    (*save)->next = NULL;% |1 U- Y5 h2 q4 |2 R# W% ~$ ~
    (*save)->processID = (*memory).p[0].processID;/ B) m; u7 u, D, X
    (*save)->comeingTime = (*memory).p[0].produceTime;
    & j8 ^. }  j  ^+ t8 E$ k(*save)->askMemory = (*memory).p[0].askMemory;: S0 ?' s) D( ?6 ~
    (*save)->compute = compute;
    ( O8 @. ~# S  j! @) R, Y(*save)->waitio = waitio;
    9 b6 p; H5 F* L: t& M2 L  x& M' V(*save)->exchange = change;
    9 B4 A9 q: C2 K/ l(*save)->completedTime = systemClock;
    3 L* Q0 U' `# F. W/ A& g+ |# Y(*save)->runningTime = (*memory).p[0].runningTime;
    4 e6 G; Q' g& J: Z$ l*spareMemory = MAX_MEMORY;      //*spareMemory + (*memory).p[0].askMemory;
    . q8 a. v; L+ ?" [, @' X* x4 Qcompute=waitio=change=0;
    , I) c- X* O  g! {6 |computeLast=waitioLast=changeLast=0;
    5 u$ ?9 [" B( u9 @. YPriority_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));
    5 }( _, G1 K: X5 A* N& F+ Fchange += exchange_process;
    * E( X# {- K8 i( q/ lreturn task_completed;
    " S6 R( H6 |& L/ W* i5 [}
    + @4 x, M! v+ s7 |1 Z4 gelse' p7 c$ y; _2 |  g! f  {
    return task_not_completed;8 y$ [: [2 u, R5 t( C
    }+ J+ [/ J0 @( o! ?
    int Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)
    1 K  r& n# O" E" r/ `{  J* I6 V& v" }% _# h& C
    int priorityNum[initProcessNum],i=0,j=0;6 ~' K. D/ y* u5 E1 |
    double temp=0;. ^0 Q9 L* ^- g, N
    for(i=0; i<(*storage).proNum; i++)    // setting priority to each process
    9 I( w; y( z$ f{
    ) {" E0 s6 n+ I- m. P' P7 }/ Otemp = (*storage).p.computeTime/(*storage).p.ioTime;% r: J* k4 Y/ @: x1 u* b5 R  R  Z
    if(temp > 0.8)3 i1 ?, q, ]' h6 ]
    priorityNum = 6;" m( M. Y+ y, f
    else if(temp > 0.7)- L3 o$ S" |; H) W+ H( a& X
    priorityNum = 5;( }+ J! u& }# y' o- h/ b3 L3 N
    else if(temp > 0.6)' s: v$ \( G, t
    priorityNum = 4;
    - @3 i$ N# j9 {2 Delse if(temp > 0.5)
    8 E2 D+ s& h; ~9 v( x! v4 mpriorityNum = 3;
    ) _$ F" @# g* W& ^: t% O: Gelse if(temp > 0.4)( t7 w' P& H; y6 I% r# ^
    priorityNum = 2;; ?1 g9 x/ L' [$ B3 D5 ]
    else9 Z" j. }* G: L0 Q; o, f4 V
    priorityNum = 1;. o3 Y4 s4 c+ `
    if(priorityNum[j] < priorityNum)* |! W' P6 A+ X: u
    j = i;& C& S+ b/ ~3 i+ o
    }+ E" m. @8 I$ |" J2 J2 J
    if((*storage).p[j].askMemory < *spareMemory), Q: d3 e7 I4 r  x. A
    {6 G2 ?  j# R8 v0 t1 e
    (*memory).p[0].askMemory = (*storage).p[j].askMemory;
    4 K: p! v( [2 A* w(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;# d& j( e2 `6 P: u& L5 z; T
    (*memory).p[0].computeNum = (*storage).p[j].computeNum;+ e- E9 H# V! k8 B( p! L
    (*memory).p[0].ioNum = (*storage).p[j].ioNum;9 n  S. Q9 A' W2 q) j# l1 U! \
    (*memory).p[0].processID = (*storage).p[j].processID;% H2 A' m& I2 q
    (*memory).p[0].flag = (*storage).p[j].flag;
    ' Z- q* I2 |' j  z9 I/ Y/ S(*memory).p[0].ioTime = (*storage).p[j].ioTime;! p2 F  K( T2 ^7 W5 }: U
    (*memory).p[0].computeTime = (*storage).p[j].computeTime;
    % q# b7 i. p9 Y+ B(*memory).p[0].runningTime = systemClock;
    2 |3 {9 j# @: ]" b7 d9 p(*memory).p[0].produceTime = (*storage).p[j].produceTime;: K7 ?& I, O. V, F4 O1 p
    for(i=0; i<(*memory).p[0].ioNum; i++)- J  v. z. x" J6 X2 h
    (*memory).p[0].ioClock = (*storage).p[j].ioClock;
      \1 `8 d0 r; Hfor(i=0; i<(*memory).p[0].computeNum; i++)& C/ `0 M, g# G4 ^/ b
    (*memory).p[0].computeClock = (*storage).p[j].computeClock;, K# g; U4 b$ B1 @3 A( Y# V
    (*memory).proNum=1;4 L6 j, j9 h5 A% g) z
    *spareMemory = *spareMemory - (*memory).p[j].askMemory;
    # P, Y) r( h+ J% K# ?6 Kproduce_one_task(&(*storage),j,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程
    # @* {, C3 d* W% sMAX_COMING_TIME = (*storage).p[j].comeingTime;# h/ N* G; g! U+ N3 B2 F* u
    }
    7 q: `9 x# ?) H) H( r4 j# c3 Qelse) n3 ^& i) H! C9 a4 W1 x
    {
    9 p. g7 g# g+ M. ]3 Gprintf("A process ask for a memory overed the system capacity\n ");8 |% {! d+ ]" a3 H# {
    exit(1);- d7 g& N/ p1 U$ Z
    }
    / e3 z1 o: C8 e& Ireturn 0;
    ; Y! M( c/ e# b6 ?' o1 I- u}
    - r# \# v" e1 Y7 X- z6 C  ^# N# gint ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
    6 i6 i' ~* ~9 k0 \. e& q{! H/ y) D$ D; o8 d5 w  `4 Q# G
    static int compute=0,waitio=0,change=0;
    $ g, J, P& S- J+ _  Hstatic int computeLast=0,waitioLast=0,changeLast=0;2 A, F9 X( B1 h3 |  u9 Z
    int i=0;+ N  U, k9 v# s4 G6 T6 S
    if(draw==1)5 Q6 y% m$ Y# g. f; i  K; V5 l1 f# M0 W
    {
    , b2 N7 d0 r+ F; l//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);* q0 J6 W$ W: k, h
    drawPerformance_SJF(0,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);& _0 |+ d! I# G$ C+ o
    , C0 I+ G2 R% @7 ~4 N" n" E

    / J4 e1 S7 s, B2 f: c5 ZcomputeLast=compute;: o% N+ h2 R9 s
    waitioLast=waitio;! }5 q: T0 g$ s" n
    changeLast=change;8 s+ K' x. |) u2 i9 J
    }
    6 v6 Y( h) s* Q( Oif((* memory).p[0].flag==ready)
      ^; y6 D% d6 t7 }(* memory).p[0].flag=computing;
    9 C* ]  e5 F) K8 aif((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)
    # Y0 ?) D) B2 Z% `8 u  `{
    6 C5 [8 f. ^) o( m8 l2 E1 Ti=(*memory).p[0].computeNum;
    2 ?7 J* d# J( mif(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed
    8 l4 V0 M" x! I1 r{
    4 {/ U/ M$ J+ d(*memory).p[0].flag=IO_waiting;3 e4 [1 C  H8 D! r' D2 f) D
    (*memory).p[0].computeNum--;: `$ a  E9 O' v- X" D
    change += exchange_IO_Compute;% Y) [7 ]+ V- H- N
    compute++;
    % U  Y9 }" V2 t& a; k: y" k}/ c8 n9 L: f# ^0 M+ p
    else5 Q! k. }/ N; k( f
    {
    + ]9 {  q  z( h9 W2 z  Vcompute++;
    ( q* {! D0 f3 i( n7 A% T}) J4 Q+ ~+ m! K
    }7 y  @$ u. Y* G1 I9 X7 B: a
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
    ) f5 o9 i) m2 S# V0 ^  f{. L) A) P+ w; a$ X& M; k

    / R% q4 r/ }4 B( }3 Q5 Si=(*memory).p[0].ioNum;' j0 m" T: x# X9 \5 n9 q
    if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed" b' F9 d8 U' s0 x  _' f
    {3 r8 C( F! D! i: o; T/ p
    (*memory).p[0].flag=computing;
    2 o. L, n8 w+ P8 L(*memory).p[0].ioNum--;* ~# c9 W: N$ m# U  Q0 t
    change += exchange_IO_Compute;7 [8 ]& @! D1 D" c; T9 R2 i
    waitio++;
      T+ O& F/ ]2 F) h' I. V% C; J; Z+ p1 b}  k1 {$ I% r  t: I' |
    else, X$ r6 h; @& I0 G5 [9 r
    {. ]( I9 u" Y# C$ r! L& ?( n- U
    waitio++;
    # C# x9 w" D: M; T2 }. s}
    ) ^7 S: z4 r* I5 ~8 x! ?0 L+ H}9 Y+ W! e2 [% }& {9 U
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing), Y( p% r+ ?6 m
    {
    / Y* |$ Q& {2 `1 B6 k; }(* memory).p[0].flag=IO_waiting;
    & e( B' K" l0 G) p" ]* L7 l' Echange += exchange_IO_Compute;
      J: F. [2 L0 ?* d) O}
    . L, J2 b) f) a2 h" A/ zelse if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)
    * Q( p% w; x. ]7 f: S$ p* y3 q{) N: x7 Y% b, D  T) W/ u; H
    (* memory).p[0].flag=computing;: z0 ?% Z4 b, h2 U3 w6 Z+ B6 I* D
    change += exchange_IO_Compute;
    , z% w" g" h" e  k1 B! u- r8 t}! |" J- e; M1 F* B& F* C2 L
    if((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0)  //一个作业已经完成& K$ ]4 i* W$ k7 S( Z9 o( i
    {
    - V# k5 [( _# G  e1 y/ ~+ x* z(*save) = (PCI*)malloc(sizeof(PCI));
    & d/ V# \, a# F. `(*save)->next = NULL;/ v1 D) @. Y* j# p+ q, c. X( \* }
    (*save)->processID = (*memory).p[0].processID;  @6 C% P* ~; [! F# v( @8 c1 u
    (*save)->comeingTime = (*memory).p[0].produceTime;
    3 Q9 @! X2 u! e* e" f(*save)->askMemory = (*memory).p[0].askMemory;, b8 m9 d1 d/ j' }6 l
    (*save)->compute = compute;5 C' L* s- E7 C9 z/ M
    (*save)->waitio = waitio;
    1 }5 m: c; N, y4 S5 W(*save)->exchange = change;! w1 e$ E* f* s. D& {+ s& r1 O, I
    (*save)->completedTime = systemClock;% q9 v* o: g& o+ z: E
    (*save)->runningTime = (*memory).p[0].runningTime;9 \7 \# K/ k5 f
    *spareMemory = MAX_MEMORY;//*spareMemory + (*memory).p[0].askMemory;
    0 @, T/ ]7 }& P- `* F6 ncompute=waitio=change=0;
    ' K- I7 s: e( B) k/ }1 m" H8 o- @computeLast=waitioLast=changeLast=0;( w' J( H$ C0 J2 y5 ]0 s
    SJF_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));5 i2 u* D; G9 N% {
    change += exchange_process;
    1 \/ s* Y$ K( E% `return task_completed;2 K. \6 g: ~2 H5 c6 k
    }
    % T! G5 }! s: u* D" Jelse! ~* A. ?$ d" R: d
    return task_not_completed;
    / h7 `7 ?, i& `* f( i3 ?3 Z% W5 b}
    7 F+ K: J( ~6 j9 }# cint SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)+ u) l* g% `  k* s9 V
    {
    ( n- R1 J! V- ]+ oint i=0,j=0;
    / D9 v8 p+ ^/ J' Pfor(i=1; i<(*storage).proNum; i++)- B! z: g) X2 P& _+ f
    {, _( W" r! U$ q+ U
    if(((*storage).p.computeTime+(*storage).p.ioTime)<((*storage).p[j].computeTime+(*storage).p[j].ioTime))6 k# J. W* c# i# m+ R  q
    j=i;& S3 n" N4 d& q8 p1 E4 a; B5 M
    }7 j) N0 U# ~7 v! B
    if((*storage).p[j].askMemory > *spareMemory)
    - {/ A9 t5 o# a2 F, {; V% X  _{$ a9 o, X# O$ ~" f4 N
    printf("The memory asked is overflowed than the system memory.\n");
    . d7 y+ r% ]) j4 z& F; Oexit(0);
    ' }! e* F, t8 O6 Y" y}
    ( o4 c2 m! D' N& Selse
    9 J) n, D9 Z) V6 Z$ b$ C" X{
    - T7 }' y" r% y, M/ E8 T1 D(*memory).p[0].askMemory = (*storage).p[j].askMemory;% x" x& b- l3 l
    (*memory).p[0].comeingTime = (*storage).p[j].comeingTime;& T: a4 s" q* i/ ?
    (*memory).p[0].computeNum = (*storage).p[j].computeNum;5 c2 @/ A0 X  Q+ }% C' Z1 A: k
    (*memory).p[0].ioNum = (*storage).p[j].ioNum;+ S$ y7 I- ^' p4 W! y7 V, a) J
    (*memory).p[0].processID = (*storage).p[j].processID;
    ' h5 i- k$ s9 U5 N$ _9 X/ _4 N(*memory).p[0].flag = (*storage).p[j].flag;
    , y, A' C& ~/ L% ?(*memory).p[0].ioTime = (*storage).p[j].ioTime;
    4 g$ z; z+ l  g: k8 |1 j+ U1 ?(*memory).p[0].computeTime = (*storage).p[j].computeTime;
    3 I/ W6 P! w2 N" J7 {(*memory).p[0].runningTime = systemClock;+ d+ g% U( H4 o6 V
    (*memory).p[0].produceTime = (*storage).p[j].produceTime;* h5 B) Z3 z% R+ z7 j8 M/ V
    for(i=0; i<(*memory).p[0].ioNum; i++)3 w2 o! M5 l8 A. I
    (*memory).p[0].ioClock = (*storage).p[j].ioClock;
    . Q8 R+ p1 x, m8 n5 T1 V6 }5 Jfor(i=0; i<(*memory).p[0].computeNum; i++)
    8 p" b2 r9 E3 K3 C+ a+ P2 l(*memory).p[0].computeClock = (*storage).p[j].computeClock;
    7 f# j) z+ y$ n2 c( O(*memory).proNum=1;
    - J8 F8 `! D8 u) |*spareMemory = *spareMemory - (*memory).p[j].askMemory;. k' V( x, h* `1 q
    produce_one_task(&(*storage),j,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程
    $ f" w% D) j0 e5 }5 C& W/ hMAX_COMING_TIME = (*storage).p[j].comeingTime;# _6 N( Y0 n; }: n' j2 n" B# B
    }
    2 q& j* ~. t% [/ {return 0;
    ; F/ J5 _2 G, k+ V/ F}
    , S$ q# x% z/ W- r& A3 b6 nint TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
    ! b- ?- v- Z- O' w+ b4 D5 f. ~{! f: K6 J+ N; L0 d( |
    static int compute=0,waitio=0,change=0,clockSegment=100,poi=0;8 j- b& N$ x1 S# K& w: t$ U, U% A
    static int computeLast=0,waitioLast=0,changeLast=0;
    , h( i8 |9 l2 i. Yint i=0,j=0,k=0;
    . q* V0 E$ |" U! D5 Zif((*memory).proNum<=0)
    3 Q2 x; P& g/ [- c" C# N( b/ YTimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),-1);
    * _5 z9 Z$ H9 C+ V3 S  `6 Rif(draw==1)2 Q' C& g5 Y$ R0 q
    {
    ' {5 q/ N$ a1 B$ a9 d& t//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
    9 O6 @+ A5 i  j4 _drawPerformance_TT(400,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
    8 q3 y/ r, v! V$ Z2 q6 Y
    + _* b' ]$ b! K7 J5 I/ u8 \8 p# F. m% L
    computeLast=compute;1 y/ V/ W1 t9 w; y( i! G/ Y$ m( |& m
    waitioLast=waitio;1 K$ k1 q, H# S2 G' `
    changeLast=change;8 C2 N$ ^. V0 Y5 O
    }  m( a7 V8 d0 |3 e
    if(poi>=(* memory).proNum). Q  A$ [  K" g
    poi = 0;& L5 i, \% j2 H# M* t  a
    if((* memory).p[poi].flag==ready)% [1 Q# E0 H4 D& Z9 O6 }% h
    (* memory).p[poi].flag=computing;
    # x7 W: D% U7 l4 i# S1 @if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==computing)  t; r# t9 m0 B. ?5 w6 L
    {$ E' U  ]. w( F( u  M6 D- K# F
    i=(*memory).p[poi].computeNum;
    + J, e  [, d5 Kif(--((*memory).p[poi].computeClock[i-1])<=0)// one compute tase is completed, D6 A! P& \) T( _( U9 F1 U
    {* h9 m& ~7 [- `- @0 R9 J3 r+ E
    (*memory).p[poi].flag=IO_waiting;0 o% M9 j1 T) I* A: ?* r: \
    (*memory).p[poi].computeNum--;
    ! S# n. M# X$ [4 M& ^$ Wchange += exchange_IO_Compute;
    , P. @; n  m+ C  L9 a( k+ H; scompute++;  e' U& v. _; J* A" D
    }
    / u; W$ ]( i: k3 Y" nelse
    0 h: q$ C# m. i3 G/ ]; L% c{
    7 Y" P5 e" x3 Xcompute++;
      F  t3 u* n1 ?2 r& l}
    ) d  J9 \: h$ d9 E* T$ R7 }}
    / w) Z' ~0 \+ G& V4 i& u% melse if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==IO_waiting)) Z; F8 ?; ?  G- l+ P# l, H
    {& j9 |# `$ T7 a0 A3 J1 G

    3 t/ }' n- K0 m2 ki=(*memory).p[poi].ioNum;
    + P# ^* D. z$ B/ a! Kif(--((*memory).p[poi].ioClock[i-1])<=0)// one io tase is completed) ]& v% \2 q( {; x
    {/ K0 ?9 b$ M4 `6 Z0 I
    (*memory).p[poi].flag=computing;
    6 Z* x% e2 f+ @( |! P5 D(*memory).p[poi].ioNum--;
    2 p3 J' F% P8 H3 s3 T# l) }# bchange += exchange_IO_Compute;
    9 s* c6 Z7 u" c1 ^) N. ]/ b! hwaitio++;1 z/ e2 }1 M" n
    }
    * T6 V& @7 l3 j# {+ n7 melse2 o# x/ [7 o+ z+ }, t, \
    {
    8 e# F7 Y, B5 O# o4 ]: dwaitio++;& ^( c  ^0 L1 O  z6 O  Q: u
    }
    ! c5 f) z) Z6 _2 r' _0 a}9 V# `8 W  Z' [9 N" n
    else if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==computing)9 S% x- d- N0 ]/ P
    {
    + p) q9 }. y0 N(* memory).p[poi].flag=IO_waiting;5 f6 r8 c4 E: C/ h* d
    change += exchange_IO_Compute;. X) j5 X( B2 b+ K
    }
    : J3 _' X# p# H* l0 c) c" M" Kelse if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==IO_waiting)
    % C& b8 N( H) {+ q2 |; S! Q2 p{: d2 y+ C8 T* h: @% i  H- k. e
    (* memory).p[poi].flag=computing;& Q5 P6 B/ C6 f( F
    change += exchange_IO_Compute;
    % b& C, V; O3 o7 {}! q) w5 G& K2 S2 J. d1 d& |' `
    for(i=0; i<(*memory).proNum; i++)  //其他等待io的进程可以并行推进
    : B" |1 e3 L( y' n{7 K8 c' o' c5 x2 C3 }
    if(i!=poi && (*memory).p.flag==IO_waiting)
    $ a* D* U/ ?( \8 H; O9 g{
    ' p, @8 O4 k# P) f! f3 k6 i$ Bj=(*memory).p.ioNum;" B  m; N* t# b. i$ C. v
    if(j>0)0 W% v0 G* U/ d6 g
    {
    9 }; T; ^7 a. N% l. |$ Z. }if(--((*memory).p.computeClock[j-1])<=0)// one compute tase is completed; X0 W8 |2 m& K* }
    {
    2 A, Z+ r  {7 {3 |+ W# _(*memory).p.flag=computing;
    % Q' \+ M/ E, _& E$ c0 T(*memory).p.ioNum--;
    7 M* l* L7 F$ K* Z2 W2 W1 T/ Lchange += exchange_IO_Compute;
    ) j0 J/ o! b1 X/ d1 y}6 p" z7 P6 n9 `. ]$ p& {
    }' V' H* l" J$ R+ i2 z& ]3 Q/ s
    }3 D4 ~# v; k% t3 B/ s3 @
    }
    9 e" w, u! t; \# X- U/ J% N& pfor(i=0; i<(*memory).proNum; i++)  //处理已经运行完毕的进程) m% U% b* |$ A2 \( K% B
    {
    ! d) |; R# }$ V* W2 Oif((*memory).p.ioNum <= 0 && (*memory).p.computeNum <= 0) // a task is completed
    ; s1 P& m. a. i6 \7 W{2 W' L: W) L) n' Y
    (*save) = (PCI*)malloc(sizeof(PCI));
    ( a! t* o+ x6 N6 w(*save)->next = NULL;
    # Y' t# T$ C: ^2 Y& x! f       (*save)->processID = (*memory).p.processID;7 v& @3 ^! ^2 ?4 t) n& ]5 ]
    (*save)->comeingTime = (*memory).p.produceTime;
    # @8 H. V  n( d(*save)->askMemory = (*memory).p.askMemory;
    3 C$ a% O4 `% i7 R8 [: I(*save)->compute = compute;% [) P. S+ k" N/ U* p$ X
    (*save)->waitio = waitio;
    $ `4 V: x& ], n$ T(*save)->exchange = change;; p5 |# p0 K# ?% }
    (*save)->completedTime = systemClock-(*save)->comeingTime;' w! ~: C: l8 J7 h  F
    (*save)->runningTime = (*memory).p.runningTime;, ], j; q( t% \  }) `6 q  Q
    (*save)->completedTime = systemClock;9 z, I  Z) m9 Q+ ]% d
    *spareMemory = *spareMemory + (*memory).p.askMemory;' M% Q2 R, T2 k- b; R
    compute=waitio=change=0;' v6 O( \; U8 ]1 O, n  |( J
    computeLast=waitioLast=changeLast=0;3 J9 I5 z- T9 O  N
    if(TimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),i)==1) // 调入一个新进程进入. ^2 H* O+ u  @7 R% R$ Z: b
    {
    $ q$ @$ q. i6 dif(i==poi) //占用CPU的进程已经运行完,将时间片分给其他进程( j8 K) C: Y  e  W: h5 _! M
    {% Q3 {& D( S7 p* Q( {  Q5 y
    poi++;
    9 c; o( i3 ~" V0 g% P   clockSegment=2000;
    * _" N) D# X- c, t# Q  [  t# ^}  D. c) m8 t. J% q. R3 }
    }
    " P( D( L: J1 [7 R; g- [else  //没有足够内存调入新进程" J( s) L. ^3 @( u( ]
    {, _  j- i3 y: ^( c) X9 r
    if(i < (*memory).proNum-1)
    7 l! n6 v: q8 ?. T: J' t3 D+ Y9 g{: H% J9 n& Y8 W" K3 W
    for(j=i; j+1<(*memory).proNum; j++)
    . l) d& N) t% f# L{4 ^5 j5 t4 T$ Q9 m% G4 I, I
    (*memory).p[j].askMemory = (*memory).p[j+1].askMemory;' c; C- A, D4 D/ C5 w2 ~6 b0 h# K1 y- w
    (*memory).p[j].comeingTime = (*memory).p[j+1].comeingTime;
    ' Z  Q5 G; s- K& n! G(*memory).p[j].computeNum = (*memory).p[j+1].computeNum;* T6 v- [# d' j4 s  }/ [* U
    (*memory).p[j].ioNum = (*memory).p[j+1].ioNum;
    8 W) U1 D8 R0 h! a  v2 e. r(*memory).p[j].processID = (*memory).p[j+1].processID;- c$ P2 M* _" e- W% C5 A3 x9 h
    (*memory).p[j].flag = (*memory).p[j+1].flag;) @, M9 b) g6 ^5 h6 \
    (*memory).p[j].ioTime = (*memory).p[j+1].ioTime;( Z* _, d  H4 ~* U! e0 e, H& |
    (*memory).p[j].computeTime = (*memory).p[j+1].computeTime;
    : ?1 I) y% Z  s! x$ W0 d(*memory).p[j].runningTime = (*memory).p[j+1].runningTime;9 d2 _. l! p6 p  M
    (*memory).p[j].produceTime = (*memory).p[j+1].produceTime;
    3 j; K5 A/ _8 X4 K" q(*memory).p[j].completedTime = (*memory).p[j+1].completedTime;# \; v) G4 K+ |% M: e* [3 s
    for(k=0; k<(*memory).p[j].computeNum; k++)
    / x5 G+ i5 X. M. p( A, b(*memory).p[j].computeClock[k] = (*memory).p[j+1].computeClock[k];
    8 m' D' |* V; O; D, k- _* zfor(k=0; k<(*memory).p[j].ioNum; k++)6 o! o' o. E# F$ W1 r7 N
    (*memory).p[j].ioClock[k] = (*memory).p[j+1].ioClock[k];: g. \+ j+ W$ ?
    }
    ) p2 _0 ]7 K9 W5 ?! o# Qif(i<poi)
    ' M( H8 a+ X' j' S3 Tpoi--;
    . k& ^4 J+ S2 X6 t% Lelse if(i==poi)
    % L: t7 a1 `: EclockSegment=2000;0 w. M! @: B, `5 {
    }
    : W/ q2 N9 ~. `i--;5 e3 V3 r) h4 K
    (*memory).proNum--;" S  d4 O* J5 c6 e, G
    }
    ' a; q7 E  q% I: D; creturn task_completed;* Q% L7 g5 b) V0 |
    }) f. x5 M5 {" w. x' q. ?
    }
    8 S, C4 i' z. F+ l" [( v--clockSegment;
    6 M" X" G/ K& }( n' a7 S1 Mif(clockSegment<=0)) K6 F+ d% M8 a% ^/ I) x# l
    {
    ' h" T! H: X6 @, gpoi=poi+1;( ^6 u; }+ I1 `  Y3 j# T
    if(poi>=(*memory).proNum)2 |2 k' [6 X. `6 E* W
    poi=0;
    3 m8 ~6 x% G$ H3 x! n: d, W5 ZclockSegment=100;
    ; f4 l# N% I3 ?4 [+ H- a}
    5 q0 U1 ^% h+ l, i2 n% ereturn task_not_completed;% ]/ `2 j# e+ c6 g0 G/ Z2 r
    }' n: M; t) R* L: c
    int TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos)) h, t/ r3 B; Z3 m1 W2 M' R
    {
    7 v- \0 V' N. B7 \. g7 c4 N# Fint i=0,j=0,k=0,flag=0,translation=0;  r9 W3 s9 d$ f% e
    for(i=0; i<(*storage).proNum; i++)/ l4 V' _2 D, M, x0 I
    {
    0 y& N# v: V. q+ B% Sif((*storage).p.comeingTime>MAX_COMING_TIME)1 t7 D1 O3 [9 s/ |5 b
    MAX_COMING_TIME = (*storage).p.comeingTime;
    7 a7 p# ^- k9 b1 R  |}
    ! n  Y" R6 U  |) B( \7 l( n# T. `if(pos>=0)
    % x) _7 ~- n6 e* Z1 o{' _+ ?5 |3 W8 Y$ Z" q
    for(i=0; i<(*storage).proNum; i++)4 r4 V& F  a9 S% z+ H' r, {1 v
    {7 [+ ]# J  |4 b5 g' E) F' ]
    if((*storage).p.askMemory <= *spareMemory)5 Y' }6 `, M+ s) t2 U. V/ r8 D
    {+ n( a, d, x& p# v) `
    j=pos;# n- d& y, ~8 k6 A
    (*memory).p[j].askMemory = (*storage).p.askMemory;1 b+ T. ~" U2 C! R: X' D: H5 K
    (*memory).p[j].comeingTime = (*storage).p.comeingTime;
    9 y0 P( M& z, S( i+ p7 m(*memory).p[j].computeNum = (*storage).p.computeNum;1 D! g% f  ~- Y6 i2 g' M, [. C
    (*memory).p[j].ioNum = (*storage).p.ioNum;
    " X/ i* @/ F. F* U$ j4 Y& m(*memory).p[j].processID = (*storage).p.processID;/ y8 K6 @( W4 P" R1 ?+ ]( S* `
    (*memory).p[j].flag = (*storage).p.flag;" S( @6 c6 |/ v- p0 m4 g: S
    (*memory).p[j].ioTime = (*storage).p.ioTime;
    7 @; c2 P6 f- n, h0 ^0 W9 E(*memory).p[j].computeTime = (*storage).p.computeTime;
    8 \0 ~! F( u( }/ {8 e(*memory).p[j].runningTime = systemClock;1 F' _) P* ~) K% }4 H+ A- X& p
    (*memory).p[j].produceTime = (*storage).p.produceTime;, Z8 ]! S4 Z/ J) B8 R& `
    for(k=0; k<(*memory).p[j].ioNum; k++)' A' I( p" o% ]
    (*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];/ [5 [* B. M# f
    for(k=0; k<(*memory).p[j].computeNum; k++)# e' q" O- R- u. q
    (*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];
    3 N: k+ q+ x' T0 o*spareMemory = *spareMemory - (*memory).p[j].askMemory;
    & c3 P8 f# Z$ Q3 `8 ]produce_one_task(storage,i,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程* c' |$ k$ Z& G! D$ G* v) r+ g
    MAX_COMING_TIME = (*storage).p.comeingTime;. ~" G1 Z& v# b- o" i" [
    translation=1;, Q" f+ B8 w. f2 Q7 E! H" b
    break;
    0 Q" R  d9 \; }& Q' D}
    " \3 Y. e, B0 J) {  \5 O}
    7 ?: N" W  c) B5 V) I) i; A+ `}
    : F. n6 @% U+ [# telse
    ; m) ~1 U' A$ `# t: C+ b{4 ]7 m' z) b7 T- i0 b) B; Z
    while(1)
    & N, N% }' I4 d% G( T* |; G{. y+ g. Q* y9 g
    flag=0;1 P) E7 K# s  o1 a# I, ~) q
    for(i=0; i<(*storage).proNum; i++)
      Z% C+ ?+ a' n2 m1 N! K" k0 M- l{
    , N+ R- X1 B/ s) B' qif((*storage).p.askMemory <= *spareMemory)5 x- R- T) n- o" ?% f  K
    {
    . [- e, V4 i- j% ~- O/ N6 [j=(*memory).proNum;( P  \% J+ G9 t" Q7 }# R, G
    (*memory).p[j].askMemory = (*storage).p.askMemory;
      b/ |# F5 Y6 p(*memory).p[j].comeingTime = (*storage).p.comeingTime;
      _" T5 l# P$ B: @% X% s! k(*memory).p[j].computeNum = (*storage).p.computeNum;
    & n7 d# c- ^2 V3 r& m+ d(*memory).p[j].ioNum = (*storage).p.ioNum;
    * t6 {. L$ M. a8 k  d3 O8 o# R(*memory).p[j].processID = (*storage).p.processID;
    ' E; ^7 {5 k* a8 ^3 T(*memory).p[j].flag = (*storage).p.flag;
    ; y, N6 h0 S: B2 E3 l) c(*memory).p[j].ioTime = (*storage).p.ioTime;
    0 V  N! T5 E; m, |% N9 p  j0 Q. E(*memory).p[j].computeTime = (*storage).p.computeTime;+ p: ]# Q" X) n  D' C/ I
    (*memory).p[j].runningTime = systemClock;' {: f9 d5 D/ D  h1 `( s
    (*memory).p[j].produceTime = (*storage).p.produceTime;$ G/ G! t: T, Z/ t  _- X) y
    for(k=0; k<(*memory).p[j].ioNum; k++)
    1 ]7 r) p2 g/ |: v) U1 D. ]7 C(*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];
    . p9 g) `% C% M' h5 g0 u) g2 B  ~4 }1 Nfor(k=0; k<(*memory).p[j].computeNum; k++)
    . R/ f1 E- F2 Z+ R7 o" I$ z0 o7 l% o(*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];& w5 S5 {* a0 A/ ~0 G- W
    (*memory).proNum++;5 i: q7 n9 Z- s! E& Q
    *spareMemory = *spareMemory - (*memory).p[j].askMemory;
    % E3 Q* G0 ]2 [9 X% L& z  R% mproduce_one_task(&(*storage),i,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程
    - J+ C1 G& H% Y0 HMAX_COMING_TIME = (*storage).p.comeingTime;
    4 D. b# H8 p1 `% i; |flag=1;6 p& A& n( Z( n* R8 J# p# j
    translation=1;- i. |) |" y( H
    }
    , U0 `, j! o; Z}
    ! _" \, l9 T3 Q# p& i+ X9 [if(flag == 0)
      e0 g/ C- ?$ _5 {. E/ Obreak;8 s1 t9 ?+ K& a
    }
    5 O2 Q: T: V- Z- O' E}
    ( P; @' V/ G: r( N) F5 {return translation;7 K% D$ X1 K. q$ H* V6 F* |
    }
    3 S$ G, A4 P! @" Jint FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw)) q8 M8 E7 @! F  q7 |1 _  n) N5 Z
    {; `2 G: L3 H" T' I% t/ H
    static int compute=0,waitio=0,change=0,flag=0,flagiocpt=0;+ U! l) J3 H0 V9 j' U1 q9 P
    static int computeLast=0,waitioLast=0,changeLast=0;
    0 y9 n8 z9 [+ z! J/ zint i=0;
    . o! k# O8 f$ M- ^2 u3 ]if(draw==1)
    3 ~) d7 H( Q1 G3 Y" S6 z{
    / U6 Q% s+ t. v; l//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
      ^8 Y& u% z) A4 q9 W: m9 D( WdrawPerformance_FIFO(0,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);# d7 l& u6 V6 \' O1 s
    , A* m! x1 l; }
    6 M9 c' R) _' n" V4 q3 h8 ]1 w
    computeLast=compute;
    9 d. S- ^% a. y$ ~1 a$ iwaitioLast=waitio;
    7 f3 I# a* Z( q6 gchangeLast=change;' {$ r& H% a5 E1 V& z
    }
    5 s2 K" ^( N( i5 Zif(flag==1)  
    4 G: j$ M8 C1 U- x* E{
    " S" S& o8 U' E( rif((*memory).p[0].ioNum>0||(*memory).p[0].computeNum>0)  //task is not completed; K: e0 r/ E/ I" W9 m
    {6 Q6 ?6 |; Z6 u
    if(flagiocpt==0)   // implement compute
    3 [7 [6 b- t! q$ t7 ^{  q7 ?6 {' J7 W: z& g/ A: w3 n
    i=(*memory).p[0].computeNum;; e2 _( b& O: b
    if(i>0 && (*memory).p[0].computeClock[i-1]>0)
    / c0 ?- j0 `$ I% a" X/ [{0 n# h, z2 Q$ X3 w& C# Q9 W+ M1 W
    if(--((*memory).p[0].computeClock[i-1])<=0)// ome compute tase is completed( n3 m7 ~* }. b# k' m9 @. F' I
    {
    3 M7 Y3 j& _% jflagiocpt = 1;
    4 e9 R) z0 N- _& X! a0 k(*memory).p[0].computeNum--;
    / h2 Z# l! b  U3 dchange += exchange_IO_Compute;0 ]) _; _& L0 D
    compute++;
    % V+ }' X9 v, X3 B+ n* E7 {' T}1 \# E% b( x9 _. s' ?( F, w
    else/ z! U, S) f3 \  M# `
    compute++;
    : b9 ]. _* v5 M/ _  K2 x3 W  `& Y2 ^& `6 S* V
    }
    & O5 i7 y2 |+ Q3 y! W2 i. U2 ]8 qelse
    ' R/ d& i$ J: L8 E' M7 {$ O: ]% E: |0 mflagiocpt = 1;3 m6 S* ^5 x/ q$ E
    }
    $ U! m+ i0 b, {5 Aelse  //wait io1 V6 D/ l; x, ~6 k4 Z, G
    {5 L3 Z5 o  w% {! r
    i=(*memory).p[0].ioNum;
    9 S& _: f& J/ B& P  R& ?( Tif(i>0 && (*memory).p[0].ioClock[i-1]>0)
    3 B4 O& b0 I; d- d6 y7 C  D$ A{0 |" l. M; l/ O, g- i3 R
    if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed8 F9 v# T- B/ L1 A4 ~  P
    {/ a5 V0 w, R5 ~; b1 @- o) L
    flagiocpt = 0;; q' X( b0 @) e* V
    (*memory).p[0].ioNum--;
    ! @/ \- x( z2 E9 \change += exchange_IO_Compute;& k; S3 o  c+ u4 d0 o. t& D9 b& \* ~  |
    waitio++;! v9 F$ T8 X9 d* i- |" g
    }: _+ Q: s. F9 l& B' w* e
    else
    3 M8 n# q/ B. qwaitio++;
    # Z4 B9 b  N1 L
    & E& O3 d. i  ?}. K9 f: F7 k! l
    else, F& h0 x2 A' L% C
    flagiocpt = 0;; ?1 V3 S; B0 E& h
    }& x- J$ C* m" Y, C, j4 b2 d
    }
    ( l: `. h% P* Y$ y3 relse  //task is completed
    + r# {4 v+ Z8 `{% h5 v/ p7 s9 j7 f& ]7 Z# Y
    (*save) = (PCI*)malloc(sizeof(PCI));
    ) S- T3 f$ O% J; o8 {- d(*save)->next = NULL;( ^( w( L- x) c; T  c$ V
           (*save)->processID = (*memory).p[0].processID;2 D3 r/ s' o4 H: `* |. Y$ |
    (*save)->comeingTime = (*memory).p[0].produceTime;
    6 R& Z# H* D+ U' Y5 h% x(*save)->askMemory = (*memory).p[0].askMemory;
    5 _2 w) o0 E7 c, V+ l4 j(*save)->compute = compute;
    1 p0 @' @3 z* p& m(*save)->waitio = waitio;
    % F2 f; S* N! R(*save)->exchange = change;
    8 \" d: m/ s  m% [  O: f(*save)->completedTime = systemClock-(*save)->comeingTime;4 F' l) d# Y( c
    (*save)->runningTime = (*memory).p[0].runningTime;
    / P& v% i1 t$ }+ J8 k% R(*save)->completedTime = systemClock;
    ) ^7 j" l8 |/ d: ]//*spareMemory = MAX_MEMORY;
    * Z0 E8 Z* f+ z; r1 `9 v1 Y: P$ R. \free((*memory).p[0].ioClock);
    5 y, k3 d5 l2 h+ r' z) ^free((*memory).p[0].computeClock);
    - Y) O, d; s: A2 n3 U- Dfree((*memory).p);* Q4 Q" k9 m! }2 c4 Y6 _) `7 H* S
    flag=0;, r4 ]' n1 \$ e6 k1 l
    compute=waitio=change=0;+ J7 ]  }4 \) R
    computeLast=waitioLast=changeLast=0;
    2 c) m& d# J+ X: f: {+ p7 Z& k6 {6 areturn task_completed;
    $ @, N3 V& ?5 B, S5 E5 p. U* a}, _7 K) r; H9 V5 q
    }# D. ?1 {! c: Z$ H& ^
    else         6 i) y; p. P1 g+ F/ s! t
    {! j2 `) `6 e1 y3 m; P& V
    FIFO_storage_to_memory(&(*storage),&(*memory),&(*spareMemory));
    / a' |' R  \0 w9 Xchange += exchange_process;% ^+ H2 b0 k; h7 ?3 {4 a% z2 J2 S! p; X
    //*spareMemory -= (*memory).p[0].askMemory;) @% F* P2 d+ h2 ~2 z1 s
    flag=1;5 |* d+ K# Y8 ?% b# c' E5 S2 v8 o
    //showProcessInf(*memory);( r6 K. r- d& E& a
    return task_not_completed;, [' i5 X0 _) L  x% ^* C$ t; H/ F
    }
    - A' e- I4 l1 c' z: Oreturn task_not_completed;
    & h5 `" _' X: _1 n# B4 ?}
    + r, D" e" l! a- F% ?int FIFO_storage_to_memory(processPool *storage,processPool* memory,int * spareMemory)
    2 F- L; |! H6 T4 c{
    4 ^, q& |' X: w3 Vint i=0,j=0,k=0;8 J. t" Q- v; B! @; }9 X
    MAX_COMING_TIME = (*storage).p[initProcessNum-1].comeingTime;
    4 o. n: E& K- Q6 p(*memory).p = (process*)malloc(initProcessNum*sizeof(process));
    2 g9 k  v1 }/ l5 g0 s- dmemory->proNum = 1;
    $ ?' }2 I. g% M* l- `for(i=0; i<initProcessNum; i++)
    # [; t& C' J  y$ {, W. D{
      N1 `' L/ W# K* iif((*storage).p.askMemory <= *spareMemory)
    - `+ }+ S2 F8 i, n$ M: }{
    $ p! W4 j6 @% P7 D(*memory).p[0].askMemory = (*storage).p.askMemory;
    * r% c$ h" q5 a0 x5 n(*memory).p[0].comeingTime = (*storage).p.comeingTime;0 h$ t3 k$ I7 K
    (*memory).p[0].computeNum = (*storage).p.computeNum;# g6 \7 x8 R7 V) W) P4 l1 m
    (*memory).p[0].ioNum = (*storage).p.ioNum;
    ( z- Q2 v4 N% d2 j(*memory).p[0].processID = (*storage).p.processID;, a6 E, r- w1 M1 @
    (*memory).p[0].flag = (*storage).p.flag;
    9 d/ z! k* M3 Y% ?  r8 G(*memory).p[0].ioTime = (*storage).p.ioTime;
    7 p1 P0 x6 N( U" D  [(*memory).p[0].computeTime = (*storage).p.computeTime;0 L1 w9 a2 M/ y
    (*memory).p[0].produceTime = (*storage).p.produceTime;
    " g8 ?( F" E7 P$ n8 H(*memory).p[0].runningTime = systemClock;
    & H( c& x# X/ }(*memory).p[0].computeClock = (int*)malloc((*memory).p[0].computeNum*sizeof(int));4 [. ^. @( r9 w+ w7 h) o5 [& S
    (*memory).p[0].ioClock = (int*)malloc((*memory).p[0].ioNum*sizeof(int));1 p) z( J/ P1 M/ I' m2 U
    for(k=0; k<(*memory).p[0].ioNum; k++)$ Z, i( `- @2 W8 K* [
    (*memory).p[0].ioClock[k] = (*storage).p.ioClock[k];  \+ v/ m, n: a' P+ j
    for(k=0; k<(*memory).p[0].computeNum; k++)- l0 p. ?  R, s) o" P9 v/ L
    (*memory).p[0].computeClock[k] = (*storage).p.computeClock[k];
    - L! Y. g- q8 v* @& ~" ubreak;' }7 F. i$ ?& ~7 P) |
    }3 _* n( n0 [! ~
    }
    $ ?1 b! K5 y, Z* B5 e9 w. nif(i<initProcessNum)  //调用一个作业进入内存后,并再生成一个作业等待调入, ]9 U- J7 S: t5 C
    {
    ) C: L6 w0 f0 B9 ~produce_one_task(storage,i,ID_FIFO++);
    9 E9 j* E& n0 n- Q$ PMAX_COMING_TIME = (*storage).p.comeingTime;
    % O% [% z- S! V- M! w' o8 i2 qsort_by_comingtime(storage,i);  r& K4 y3 Z3 e( v* q
    }( E0 R* G" M: s- u+ d( k6 g
    return 0;
    ; A4 h, y) U' H6 T) r. {* U}* k3 }8 y$ G* o
    int sort_by_comingtime(processPool * p,int pos)& d5 \: e9 ?9 G: F1 F
    {
    8 b0 @& p  W! Wint i=0,j=0;/ r9 m6 C+ I2 |
    process temp;7 b5 q" C% \, s; V
    if(pos<0)8 I8 A$ G; X) M0 ?
    {( Y2 o0 ~% F- }- \+ v% D- o/ A
    for(i=0; i<initProcessNum; i++)
    " R2 ~# h9 U* E  Jfor(j=0; j+1<initProcessNum-i; j++)
    + ^7 a, j, ?3 O; }- [{3 M' [3 k6 E3 y/ S9 {
    if((*p).p[j].comeingTime>(*p).p[j+1].comeingTime)! }% [% [3 q! R+ H& j; Q7 d$ ^. \6 S' v
    {( ?$ W- p2 s3 Y* u
    temp = (*p).p[j];0 t  o$ |9 F! _  e4 z
    (*p).p[j] = (*p).p[j+1];! g' s' ~" ]. H" x% I, g
    (*p).p[j+1] = temp;( q: R* i. y* l1 a# ^! u
    }
    $ U; B  [, M5 Q; K9 k) t; v0 Y. `}& ]9 `1 a. l+ L% f5 a/ y
    }
    % z& \- P# u' e" X7 X! zelse if(pos<initProcessNum)
    + |6 O$ R7 @+ X, ^# q: `# g/ `{
    + ~+ ?" |( s+ Y' e2 c5 ~! j" l9 Pfor(i=pos-1; i>=0 && (*p).p.comeingTime > (*p).p[i+1].comeingTime; i--)
    8 Y8 R. Y1 P3 Q+ N{6 ?9 M! R* F0 ?  K( Z
    temp = (*p).p;9 H/ h5 J$ i* o, K. m* \- D
    (*p).p = (*p).p[i+1];
    " ?3 J5 K) b6 L. F(*p).p[i+1] = temp;' T. O9 M! J: R" Q; p1 ]5 P) S
    }
    % _! G0 \. R, F# Q( afor(i=pos+1; i<initProcessNum && (*p).p[i-1].comeingTime > (*p).p.comeingTime; i++)  \4 r; c9 p/ _' x
    {
    * m  j8 x* h- t) }# s* O$ ctemp = (*p).p[i-1];: J4 B1 J* c2 b3 r
    (*p).p[i-1] = (*p).p;
    : Q* q0 r( J) m(*p).p = temp;# d+ Y& E! `$ O* C0 r0 l
    }
    & u" {' m3 p6 a: z0 A}
    - y, L3 h: {  X# H0 gelse
    , E- @8 i7 [4 E( `/ yprintf("position eror\n");
    + x& M5 c1 [$ A5 J* F0 P* i* V* Yreturn 0;
    * p7 n2 ~" g6 a( a3 X; s& @8 A}
    1 j1 K+ N  D. d& I  }$ Pint InitPool(processPool * p)
    " a1 B1 U# o$ N7 R* O; l  L5 @{1 ]% r9 E3 q" e8 P1 w
    int i=0;
    ) j2 o' V* Q4 j(*p).proNum = initProcessNum;
    ; j% }' v$ ?% y7 \(*p).p = (process*)malloc(initProcessNum*sizeof(process));$ L, b% H8 Z0 j9 p% _
    for(i=0; i<initProcessNum; i++)                                        //init process information0 Y6 @6 C2 G& v& n# z5 t
    {
    ' J/ a3 ?9 |' a: d1 \: T(*p).p.computeClock = (int*)malloc(initclocknum*sizeof(int));
    # @4 k( U% r% Y) ]% U& t(*p).p.ioClock = (int*)malloc(initclocknum*sizeof(int));% B* j5 j' [- n0 J
    produce_one_task(&(*p),i,ID_FIFO++);
    - ]* ^# `0 v- I) g% \. ]  z) \3 _! }9 k}5 D9 }: N+ \2 T8 j  x
    return 0;9 T: g% b: p& r* ]
    }3 Z" w4 R9 Z3 Y* W. u1 V
    int produce_one_task(processPool * p,int i,int id)' d# S6 {# D0 Y' K3 }) w3 G: x6 J
    {4 }# [& l. w, O& e$ k0 Q
    int time=MAX_COMING_TIME,j=0,totallTime=0;
    # A6 ^( O  l+ J$ k(*p).p.processID = initProcessID+id;           
    # j7 w) G: M% P(*p).p.comeingTime = time+rand()%(MAXProcessRunTime/5);# G  `4 S- `7 ]# O+ @$ N+ G
    (*p).p.produceTime = systemClock;
    * w+ y$ Q% S3 J( `4 W) e/ u(*p).p.ioNum = rand()%4+20;                                        //IO number setting to 2--5;
    . S) b2 t9 W1 Y7 D2 s, @(*p).p.computeNum = rand()%4+30;                                   //computNum setting to 3--6;9 Q3 z& N/ c% V5 ^5 }
    totallTime = (*p).p.computeNum  + (*p).p.ioNum;# F$ M. ]( ~# O+ |4 j( y+ s
    (*p).p.computeTime=0;# }4 r: _% d' R6 X  O' Y
    for(j=0; j<(*p).p.computeNum; j++)
    ' T2 y8 t( r8 p! g7 O- o{& ^" V* D3 m# u  {8 I! X
    (*p).p.computeClock[j]=rand()%(MAXProcessRunTime/totallTime)+1;
    9 a: S* @1 y( o5 N* M3 i$ b(*p).p.computeTime += (*p).p.computeClock[j];
    * T, |" E% l7 k/ v6 s: K+ v}# v2 v$ r. a% X' r3 R6 G
    (*p).p.ioTime=0;
    ! z3 s7 W7 \' i* Sfor(j=0; j<(*p).p.ioNum; j++)
    . U3 a8 L& m; ?9 _) C, H, v{% y) C: z$ B9 {2 Y+ @
    (*p).p.ioClock[j]=rand()%(MAXProcessRunTime/totallTime)+1;
    9 P* B* o* R9 }(*p).p.ioTime += (*p).p.ioClock[j];
    2 {0 q/ E) A4 ^}6 N/ W! Z4 [2 V/ E! b5 u" j
    (*p).p.askMemory = rand()%(MAX_MEMORY/4);( i: [+ d) i& J) B. x
    (*p).p.flag = ready;
    . a3 i, i1 U8 Z$ o; J9 dreturn 0;9 j3 ^! W: g- b) B' _
    }4 x( d8 S2 i5 u
    int showProcessInf(processPool p)
    5 g8 ~, K* S! X% m. H{6 f# O, C, P  W) r2 C& b
    int i=0,j=0;( v& p  P( z: q2 }6 E0 k
    for(i=0;i<p.proNum;i++)
    3 v+ E- C4 o4 P& Y! K{+ F6 X; o2 H4 J
    printf("ID:%d,%d,%d,%d,%d,%d,%d\n",p.p.processID,p.p.comeingTime,p.p.ioNum,p.p.computeNum,p.p.ioTime,p.p.computeTime
      C! t' o# X- n& b/ T; o5 J7 P,p.p.askMemory);/ V0 ]  [' Z) \" Q0 t
    for(j=0;j<p.p.ioNum;j++)
    5 s, C) W; t0 n5 @1 Q{$ n  U% i$ G+ @& r; t* X
    printf("%d ",p.p.ioClock[j]);
    3 o5 Z) @! P) r" E! @}
    % f2 I4 g+ i/ r5 g4 G- cprintf("\n");
    7 ]9 |& ?8 T  r% s+ C/ Yfor( j=0;j<p.p.computeNum;j++)! ^" [8 M3 @" q: W/ k2 R$ H8 E" T
    {; o; U: S1 U- a5 \
    printf("%d ",p.p.computeClock[j]);
    * V1 l8 y/ `1 X5 E  k" Z$ P}% A! o, b2 \: v  Q: r
    printf("\n");! Z+ b* K/ d6 |$ o3 R8 [
    }
    3 h1 v3 Q0 b* b4 m1 r2 {return 0;
    " ^6 A& V1 S% \! f# f9 w3 t; L}/ b' u4 m2 m1 p0 s4 F; Z
    ————————————————  D3 ]+ }: a/ o: F3 z" Y
    版权声明:本文为CSDN博主「wang_dong001」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    % J: c' K, t3 S1 e0 b) W& e原文链接:https://blog.csdn.net/wang_dong001/article/details/47843519$ G3 X3 Q9 v+ R* b

    ) F# ]; C$ I  h8 h
      k6 u5 s& h% M7 l" u& O
    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-6-9 15:42 , Processed in 0.347783 second(s), 51 queries .

    回顶部