QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2464|回复: 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

    / _' K* A% A* z( X; t7 Y经典任务调度算法的模拟程序
    2 J# v5 p' ?$ W6 W本科毕业设计写了一个经典任务调度算法的模拟仿真程序,测试了五种调度算法的运行性能。在程序中虚拟了任务的进程,按照不同调度算法策略从进程池中选取任务执行,在任务执行过程中,保存相关的统计参数,最后对这些参数进行处理,反映各个调度算法的实际运行性能,程序中可以通过修改任务的相关参数改变任务特点,测试不同任务环境情况下,调度算法的性能适应性。程序是通过C语言编写的,为了对运行结果图像化,采用了EasyX的图形库。由于计算机中实的任务调度过程比较复杂,在实验中为了简化程序的实现,在某些方面进行了特殊处理。* J# u8 `7 |7 K& D. o

    ( }% Q% j, }7 c3 a% {; _3 a编程平台:VC6.0+EasyX图形库环境。
    * ]8 ]1 s. z5 l! V( u
    : t8 N9 q1 ?9 b以下截取部分程序运行图::; t+ t) }$ z& K* e

    - f/ C9 @  f' s9 s$ P5 Y8 K, z源代码:
    & I# g, O0 C) `- [* W, H3 [0 z1 f7 d0 E4 O
    #include<stdio.h>/ D# D# b7 L9 {: A9 U
    #include<stdlib.h>
    - B3 T$ C/ S9 U3 A0 ]#include<easyx.h>; V3 ~( P8 j$ K' r1 @2 c" T
    #include<time.h>3 k: {; O, u' [- e$ C1 Q5 U' e
    #include<conio.h>
    - J4 \9 W5 I+ ^  F0 C/ ]8 m. A#include<graphics.h>
    # }3 I# _# g  t$ @' s2 z#define initProcessNum 10
    6 ]/ W/ |) p5 @% }4 q3 M9 w7 ~#define initProcessID 1000
    0 s" _8 J: S" h$ J: h9 S#define MAXProcessRunTime 10000
    + Y& B  e$ y0 p3 E& d#define MAX_MEMORY  4000
    3 ]7 S, X1 {5 [: F/ q#define exchange_IO_Compute 10
    / F4 G+ O1 c! n- |  o#define exchange_process 25
    & @6 B; \; u( J2 H3 G$ x- C* t#define task_completed 1
    - o# S' O: n3 ^% j#define task_not_completed 0
    3 w8 L$ u( t% g, U+ X#define initclocknum 100
    ( ^2 M; V& O; s  D6 penum condition
    : ?/ `/ v) k  w* B/ N{2 s& J" R: B6 |/ z+ a. N; B
    dead,computing,IO_waiting,ready
    2 t7 A( ~( i  V. o$ I};; ]; G4 p+ h; P, |
    struct process
    ' L4 y' o% ~8 D2 N+ R1 n{& i: k' ?" m, i6 z; h  \( p
    int processID;
    , I1 a- d# h0 @int comeingTime;, ]; a* [4 X; |% Z( d% ~" i
    int ioNum;, N" m- r9 t* Z9 j( |. f$ ]1 y- v
    int computeNum;
    , l, p6 V9 W9 eint * ioClock;+ b5 p6 Z5 H  s; R
    int * computeClock;" x8 {  ?& D9 ?! Y4 w( `8 G
    int ioTime;8 k: a4 ]1 X: L+ _: P" ?
    int computeTime;
    ; E3 N- a8 a6 eint askMemory;
    6 d, {. i' k# Y/ d% a* zcondition flag;; q7 q3 L* t% w1 b
    int produceTime;  //生成时间,以下三个数据成员用以计算相关性能# u6 {) w7 I$ }: n1 G
    int runningTime;  //第一次占用CPU的时间
    1 X% m# J. m% f' b0 I7 i6 `+ Gint completedTime; //进程完成时的时间6 V6 W  K2 M6 l! T
    };: L& {1 Q0 X( T8 a- G" p1 k
    typedef struct processCmpletedInfo  //保存完成一个作业的相关信息# f3 D+ t4 s- e$ p. T8 h
    {
    6 \5 i% |$ |& B/ |4 h; Lint processID,comeingTime,askMemory;
    # g. }6 t* H8 N/ r1 d/ m7 Gint compute,waitio,exchange,completedTime,runningTime;  J1 c( g9 q; |4 q& e0 O
    processCmpletedInfo * next;
    % b  o! m' m5 H; K1 m}PCI;9 V" i) B" l2 L! Z
    struct processPool
    5 ]* }. L* I  V) N' \/ k$ N{  a# u+ h( x: u
    process * p;
    # x1 n6 F+ P  C( i7 U) D7 Dint proNum;
    ! _* D0 a6 V; ~' R+ H- _};
    # o1 n. p( F! t/ u. J% [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;4 o  q+ s  C( j1 M' _& \
    int InitPool(processPool * p);7 b4 o' f& B& Z+ G: q5 H# [' _7 I
    int produce_one_task(processPool * p,int i,int id);
    1 D# z; E" g4 `3 w' W3 v0 n+ bint FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw);
    * I- b; F! g$ R0 V: ^5 Vint TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
    0 a3 O2 _, B/ Z- b  uint TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos);* Z2 |+ w& [- G" X, j9 Y, X- w7 A
    int FIFO_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);
    7 |& ^  r9 P" \5 Z/ l; O8 L9 v4 Iint ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);
    7 h; |. p8 ~) \+ w  l/ Xint SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);. H9 O) E- X: `' f
    int PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);% E2 i! o/ U4 X# H% v3 Y
    int Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory);9 G7 `. e5 f# q) n/ W& I8 s
    int High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int disatch);9 m  @4 h0 M0 c0 ?
    int High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw);/ d5 ]1 I. a$ r0 y5 j
    $ ~! E+ a- L( `" f
    4 X/ F, F* Z! O3 k1 [
    int sort_by_comingtime(processPool * p,int pos);  w, s" P4 h. U" X) p, l
    int showProcessInf(processPool p);/ c! S* N3 T+ C$ f) g. B
    int drawPerformance_FIFO(int x,int y,int memorry);# t/ Y. ~3 f* x$ O
    int drawPerformance_HR(int x,int y,int memorry);. {% m4 _: l! S3 ~
    int drawPerformance_PF(int x,int y,int memorry);; Q0 I1 q. x: W& a; X( o& }" I
    int drawPerformance_TT(int x,int y,int memorry);
      S8 D+ W2 c/ t* Jint drawPerformance_SJF(int x,int y,int memorry);
    4 S8 D5 ^& `3 f5 J: ?int MouseListening();
    1 [( P# A) Y. D7 Iint MouseListening2(int *flagShow,int * showTime);$ H1 T' J. L  w2 H' F
    int showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR);
    ' O. g! R7 w& w# E; V, r# W' l9 E$ I% O/ Y# L+ U* q* h
    2 n! a- g8 u; j: M3 h/ {1 Y' R1 t
    void main()2 b' z; S) b9 {3 c3 D& N8 Z+ I
    {- i( m$ H4 _$ b" h+ `
    PCI* FIFO_save_head=NULL,** FIFO_pri=NULL,* Timet_save_head=NULL,** Timet_pri=NULL,* SJF_save_head=NULL,** SJF_pri=NULL,% \; M8 G( Z' Z) S" ~
    *Priority_save_head=NULL,** Priority_pri=NULL,*HR_save_head=NULL,** HR_pri=NULL,* p;
    ( G0 @6 T, d. \% g( b4 v: y' V( A( Aint i=0,FIFO_memory=MAX_MEMORY,count=0,Timet_memory=MAX_MEMORY,SJF_memory=MAX_MEMORY,Priority_memory=MAX_MEMORY,HR_memory=MAX_MEMORY,
    % X8 N% o+ Q# r$ l3 k7 {: VflagDraw=0,showTime=100000;
      c& N) X+ t5 y: a" _" r: vprocessPool FIFO_p, FIFO_mmy,Timeturn_p,Timeturn_mmy,SJF_p,SJF_mmy,Priority_p,Priority_mmy,HR_p,HR_mmy;
    * g5 v8 L2 V5 z" Q5 R! WFILE *fp=NULL;
    ( }: ]. T! N$ J9 F//processPool HR_p,HR_mmy;
    ) o+ [  P; [* k% M3 v( D/ B! t/ i' M) i' ~3 v2 M) h
    ) g; C, _3 [3 f8 H$ D1 h; K2 {9 Z
    srand((unsigned)time(0));  ?$ ?( V2 [- k
    systemClock=0;$ V# n$ P& r1 j# Y8 L  [  e$ ~. W
    initgraph( 1200,650,SHOWCONSOLE );
    $ L( {( `2 Z. m6 |8 h) Y  Csettextcolor(GREEN);
    / a2 F" m% n1 j. C' S: X/ wsetlinecolor(GREEN);
    8 f, ^! @. C, o/ q8 h8 Msetfillcolor(GREEN);
    7 \1 \7 U7 o  m- \6 L6 O5 Y# _2 OInitPool(&FIFO_p);
    , X& K+ r: M' z5 qsort_by_comingtime(&FIFO_p,-1);
    ; L# G/ X: n0 t; FInitPool(&Timeturn_p);( T5 X: ]3 z- v4 G# x. o7 B
    InitPool(&SJF_p);  b6 F' ?% }0 a( L" _* F
    InitPool(&Priority_p);
    ) f, R( K3 v4 u+ [0 \" k' V- ]InitPool(&HR_p);
    $ s* [+ X% _$ K4 i//showRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);
    . i3 p/ }; `' \, E//Sleep(10000);
    ; O* w5 B6 U- z8 v. M4 @! b, ?" |8 _# T; b# i) H2 i

    . `( X. s5 O' l+ M1 G- F2 o8 L; PTimeturn_mmy.p = (process*)malloc(initProcessNum*sizeof(process));" Y# [: ~, z& _! v. r1 K" v
    SJF_mmy.p = (process*)malloc(initProcessNum*sizeof(process));& h1 K: h, L" N3 \: O6 L' |
    Priority_mmy.p = (process*)malloc(initProcessNum*sizeof(process));
    ! }! q) E4 P5 f- |: zHR_mmy.p = (process*)malloc(initProcessNum*sizeof(process));6 b. ]" X- l% {! X
    for(i=0; i<initProcessNum ;i++)7 B3 B$ ?3 x% w% v  U% ~& n1 s
    {2 ^7 S) `) R  @# |
    Timeturn_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));7 f  `# n4 N9 a$ R- n) H) u  ]( E8 N
    Timeturn_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
    ; b0 |! B" w& [' oSJF_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));+ F2 T: I2 C3 I" ~
    SJF_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));4 B: q2 k- l- r: G
    Priority_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
    - K- G" J/ e/ ]Priority_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
    : P. R' D" Y" b( y: m# oHR_mmy.p.ioClock= (int*)malloc(initclocknum*sizeof(int));
    , I  }4 a8 J( V9 {' iHR_mmy.p.computeClock= (int*)malloc(initclocknum*sizeof(int));
    & J: G7 t$ j8 b: ~2 M2 m# d( r; I}! P; G5 Z$ p3 y8 I- l) q- H
    Timeturn_mmy.proNum = 0;
      p3 g5 w& Z5 a% Q% eTimeTurining_storage_to_memory(&Timeturn_p,&Timeturn_mmy,&Timet_memory,-1);
    . |/ g' c4 Y* h1 R+ F: V/ _( ySJF_storage_to_memory(&SJF_p,&SJF_mmy,&SJF_memory);
    + e2 F. s1 y$ [( F) U- c* DPriority_storage_to_memory(&Priority_p,&Priority_mmy,&Priority_memory);
    ! h8 _* K0 Z) @High_response_ratio_s_to_m(&HR_p,&HR_mmy,&HR_memory,0,1);  F4 M7 R) z( u; X$ U" g
    //showProcessInf(Timeturn_mmy);
    ( W; E( b$ l! d% RFIFO_pri = &FIFO_save_head;
    , ]) J1 f! t& @Timet_pri = &Timet_save_head;5 ~! @$ C# z# h/ M
    SJF_pri = &SJF_save_head;
    ' S' x+ N& d7 I! m- wPriority_pri = &Priority_save_head;
    ) z9 R: l+ S0 S" l! Q    HR_pri = &HR_save_head;
    ( a% I- [( g- l" g' @setbkcolor(WHITE);
    - M9 @" ~" \0 p2 {2 u1 `while(1)8 y( ]: E: [5 A5 k
    {! n: X& b/ `9 u9 e* g! m% c
    if(MouseListening()==1). T7 z% G3 x) g5 k0 L  I5 y: I# ?
    flagDraw=1;5 J) q, j. K# O, H  Y2 L
    if(count==100)
    8 d$ {" U8 o- Z  e. ]0 e{( N' I; d$ t+ s0 i7 o7 g
    if(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,1)==task_completed)0 `4 R4 d% U0 S; m) w
    {
    % V4 U, ]6 a& h0 E4 zFIFO_pri = &((*FIFO_pri)->next);
    * g% _, e5 v, O9 _7 j8 v; q
    5 W. V2 @1 W& K! r9 D: G$ X//printf("hello");% K, \8 ~1 }; ^/ [- p
    }5 x4 C1 b; k% Q9 b4 _. w/ |
    if(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,1)==task_completed)
    ' W! `# C3 U$ a, S8 P{
    & z; ]' g+ v% Q    Timet_pri = &((*Timet_pri)->next);4 g" x7 \7 k) l- K$ G& {$ S
    //printf("hello");4 G" C8 N" o2 o
    }) Q1 y% F; m8 [
    if(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,1)==task_completed)+ _" v% m3 W+ L1 n4 i* w1 |( l
    {
    6 r0 t7 q% G) r' y3 h* WSJF_pri = &((*SJF_pri)->next);5 I, ~5 A, d" n& b  R
    //printf("hello\n");
    - R# `6 Z8 Q) s; i. V* Y, x. R& N}7 k7 ?  [* Z. K, u+ B- _: m2 B7 b
    if(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,1)==task_completed); x" _" d( ~+ L' j  O6 h+ e" A
    {: u! y' s3 l- [4 _7 H
    Priority_pri = &((*Priority_pri)->next);
    : L; {. ~4 n, t  h8 `$ H//printf("hello\n");# L, z! c) |& Q5 Q' M9 o
    }" A$ Y4 c: c  |. V! I" y
    if(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,1)==task_completed)4 L5 w  b& q. I& A4 O3 ?6 O, _0 f
    {
    ) I' d: h" s1 @HR_pri = &((*HR_pri)->next);% m* d7 s* _7 R6 U; V2 u0 a$ E$ F
    //printf("hello");
    1 x8 m* C; m; q* t* j}4 ]+ R1 i8 A/ m& @: g& G# b
    count=0;( u4 Y4 ~. g+ g- u* g3 U
    }( ]" ]5 K" w" y
    else
    ; x5 \. u9 \' W* {3 A2 P{
    ) n$ z+ u1 \# Z. v' W5 x& Sif(FIFO(&FIFO_p,&FIFO_mmy,&FIFO_memory,FIFO_pri,0)==task_completed)2 f, B+ j+ S* S# y  ?% F
    {
    , b3 {) M* D" L6 ~& _FIFO_pri = &((*FIFO_pri)->next);# }. s- c$ i; c3 ^. W) ~, K1 Y/ f( C
    // printf("hello");2 S6 Q2 Z3 B( P( K7 C2 {
    }
    2 `2 O& I+ c/ f: X- cif(TimeTurning(&Timeturn_p,&Timeturn_mmy,&Timet_memory,Timet_pri,0)==task_completed)% a' e, A6 P9 C  ?' {9 _
    {
    9 Y% h) s  m1 {5 `- H' u) U# q" t" QTimet_pri = &((*Timet_pri)->next);
      @3 a" Q  G7 g% D& m+ z// printf("hello");! w% L) v9 S1 \: y; ~8 P% [
    }. p" m" ~  o- s4 e0 ~5 A
    if(ShortJobFirst(&SJF_p,&SJF_mmy,&SJF_memory,SJF_pri,0)==task_completed)
    $ I) z8 ^! D5 c{
    , ?) v2 M- i! F& n   SJF_pri = &((*SJF_pri)->next);
    0 t$ M$ X7 G" b+ ]. u// printf("hello\n");
    9 U2 C# {! f2 z- Y2 V& s, y( y}, P3 R# C! C4 Q( ~$ B0 _* [" W
    if(PriorityDispatch(&Priority_p,&Priority_mmy,&Priority_memory,Priority_pri,0)==task_completed). S  P- k6 e( ]  u3 e$ Y% m
    {
    # p. D/ V! p! r. `9 g# c7 s. rPriority_pri = &((*Priority_pri)->next);
      C& v$ Z; N+ A# N0 `//printf("hello\n");
    4 V- H3 B* W& u1 |) }7 |}  i7 v' l$ n6 x/ S
    if(High_response_ratio_dispatch(&HR_p,&HR_mmy,&HR_memory,HR_pri,0)==task_completed)+ p8 W; t. G' T, A
    {
    6 ?: ^' C, q# [6 Z( q" d1 ]3 NHR_pri = &((*HR_pri)->next);
    - }; a) ]" q) _  V. q//printf("hello");
    " ~; C* L0 M* ]8 Y//Sleep(1000);
    8 o' V( Y* U: X" K* z* R1 v7 ~+ F}
    9 r' ?5 L( Y- Z0 i; ucount++;9 Z8 N* w6 J4 X( ]- ~. W  a7 q
    }/ S. J0 i* x/ S& {- \
    if(systemClock==showTime)6 _$ h0 n3 Y& T6 ^
    {
    - H2 y9 t8 h! ?7 [/*PCI * p=FIFO_save_head;
    # u( H( [; Y- }$ n, ]int i=0;5 _/ k9 r% C# P  W
    for( ;p!=NULL;p=p->next)* v: N  ~8 j0 m  n/ U
    {
      v" Z/ R$ F- G5 i3 lprintf("Id %d\n",p->processID);. s+ T5 O+ E' }; W
    printf("comeingtime %d\n",p->comeingTime);
    . s3 z4 F2 Z8 i6 X7 Jprintf("runningtime %d\n",p->runningTime);
    * i) W, E$ @- h( Zprintf("asdmemory %d\n",p->askMemory);
    - O3 @* @, U0 A7 Q& |printf("completedtime %d\n",p->completedTime);
    5 P$ c" n3 p  w, G* y. w( N0 rprintf("compute %d\n",p->compute);
    / B  M4 j# d3 Mprintf("exchange %d\n",p->exchange);' l( V9 s9 r2 [" N
    printf("waitio %d\n",p->waitio);* X* Q& y2 _3 H8 K
    i++;' s9 l" x1 S+ a% l; ?# b
    5 }+ O$ X: h$ c6 I
    6 T$ B! P& Z6 P3 M5 U
    }* H1 [5 R- D4 a, ~4 _
    printf("%d\n",i);*/
    1 I2 a1 D3 d. w  Wif( (fp  = fopen( "data.txt", "a" )) == NULL )
    5 s! s( U8 X) K1 A9 W{& w1 ~1 N: @3 ?2 D8 k2 c
    printf( "The file 'data.txt' was not opened\n" );
    - |& b# L. E+ C% k/ f; \//return 1;
    " g( O8 x" w3 ~9 l}1 I# P' a& ]1 N7 B# L/ Z! J8 y
    else' d9 {5 w* o6 Z" J
    {5 L. I- D" F% X3 E
    fprintf(fp,"FCFS \n");4 D% h9 [# j* G: H
    for(p=FIFO_save_head;p!=NULL;p=p->next)7 m  S+ ~3 ^7 G. G" \7 S9 B  j
    fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,0 b* ^. {( @, b8 [
    p->exchange,p->waitio,p->runningTime);6 p1 `% B7 C$ h- {  N) z# o6 O: J
    fprintf(fp,"\nTime turn \n");
    4 i, F/ Y3 h( Jfor(p=Timet_save_head;p!=NULL;p=p->next)
    , U7 c. i! [) c0 ofprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
    7 h4 _+ ^  P: M. w( cp->exchange,p->waitio,p->runningTime);3 M' i9 G+ ?; {! j( F/ s* h& |
    fprintf(fp,"\nShort Job First \n");
    . s2 I3 A: u* k, A& yfor(p=SJF_save_head;p!=NULL;p=p->next)
    $ Z8 O$ E4 P0 j2 q; X; Wfprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
    ( J- }2 I9 E) s8 S5 d8 O. ip->exchange,p->waitio,p->runningTime);. }6 B6 l$ h  u9 d' R0 c
    fprintf(fp,"\nPriority  \n");
    " C) \" n/ G4 W) g9 {2 \1 Z$ N/ |6 hfor(p=Priority_save_head;p!=NULL;p=p->next)
    ! S0 o- {; A; Q9 }( Ufprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,/ Y7 _  ]* E0 L  y
    p->exchange,p->waitio,p->runningTime);
    7 p' H! H4 h* l! Sfprintf(fp,"\nHigh response \n");
    ; D/ ^& z- o  u, _0 q/ N9 N# @) gfor(p=HR_save_head;p!=NULL;p=p->next)
    & c. G9 n1 J4 z! g& k: j8 }fprintf(fp,"%d %d %d %d %d %d %d %d\n",p->processID,p->askMemory,p->comeingTime,p->completedTime,p->compute,
    . f2 C3 ^7 J4 d6 {: H  op->exchange,p->waitio,p->runningTime);
    # q. N! ~* b; h9 M  B/ T# c6 Bfclose(fp);
    ' }  @' U2 [" `6 S! e$ h}
    0 G( }8 O4 \9 ^1 z  P& SshowRunningResult(FIFO_save_head,Timet_save_head,SJF_save_head,Priority_save_head,HR_save_head);
    + I5 ]% ^: W7 C# f; wMouseListening2(&flagDraw,&showTime);0 `) p. t# D& B$ `5 @
    }
    + _1 K$ l# R: [: }systemClock++;
    / `" S" H2 w, i0 H  @) ?2 Tif(flagDraw==0)6 n3 F6 k9 A! @
      Sleep(10);
    4 U# m/ f) i  j  f}  ^* O) B4 F( k; d+ k
    . ^( `8 o# |; Q3 Q( r4 w5 ~" A

    , Y, `+ ^3 E5 S' L. \6 [}
    8 h  E5 d* a  a, L4 y* oint showRunningResult(PCI* FIFO,PCI * timet,PCI * SJF,PCI* PR,PCI* HR)
    6 S3 k7 e) x  q4 W* c0 c{
    ! L- v# ^( Y* I) D1 KPCI * p=NULL,* name[5];7 f1 `/ F- k% }2 O0 P
    int count=0,i=0;( @7 g/ W! _9 k: P; X; H
    char ch[5][10]={"FCFS","timet","SJF","PR","HR"};
    0 S9 e% Y7 y% t4 U* t4 sdouble turnover=0,wait=0,c=0,w=0,change=0,pos[4]={0,0,0,0};( O6 Q/ ]$ m: ^9 J
    struct info% w* [& n! |7 B9 p
    {
    2 Y! r6 S7 N' r3 l9 t2 Xchar name[10];
    ' ]" {3 ^8 N, ~+ ?& N: Gdouble throughput,turnover,wait,CPU_rate;
    9 P5 S* U* w. i/ m0 _  S}inf[5];, H  T( p1 ?: w. k% b6 J' C
    name[0]=FIFO,name[1]=timet,name[2]=SJF,name[3]=PR,name[4]=HR;
    8 d8 O6 f9 c1 ?4 f7 \printf("调度算法..........A\n");
    ! V( H' K  H  |$ {. b2 r: d( |5 `printf("吞吐量............B\n");
    2 U7 _0 S) K! W( ^3 W! R" x1 cprintf("平均周转时间......C\n");
      ~# s: O# m) C6 Q3 o/ \printf("等待时间..........D\n");; j+ [: K2 ]) }' A& q; e
    printf("CPU利用率.........E\n");
    1 v) R) }; x: L' b( O0 Dprintf("A\tB\tC\t\tD\t\tE\n");
    1 d% r+ T! M1 n  p( pfor(i=0;i<5;i++)5 o5 L$ l, V5 m; b$ j4 k
    {; I3 o$ A  D, V& f! I/ P5 B5 B( e  U4 \
    count=0,turnover=0,wait=0,c=0,w=0,change=0;
    9 v" m  L$ b( f, U; t/ @for(p=name; p!=NULL; p=p->next); H6 Q- f# U. u5 ^! V
    {
    ( R7 z2 t  [1 u; H- @count++;
      r1 |, _6 Z+ T8 Qturnover += p->completedTime - p->comeingTime;
    7 e2 M7 \+ k# U1 n/ H; M# `: Y- V3 dwait += p->runningTime - p->comeingTime;$ _1 @2 A, A; V- b) k$ e, O# [
    c += p->compute;
    # M7 k# Z4 C9 u5 @; m# jw += p->waitio;
    6 X  H& g7 T7 m0 [, T" G* i% P* \change += p->exchange;8 W7 |* w& @! `6 P
    }
    " u: d8 ?7 @% b8 f) T) \/ Pturnover = turnover/count;* w$ W' o* y  h/ Y
    printf("%s\t%d\t%.2f\t\t%.2f\t\t%.2f\n",ch,count,turnover,wait,c/(c+w+change));
    ' g% d4 y+ F4 j7 d" c" cstrcpy(inf.name,ch);  j0 E6 d, G2 Y" K$ h, W0 l
    inf.throughput=count;
    ' r6 y# f5 m! K1 s/ A' d! `" ~inf.turnover=turnover;
    , H" b5 N& ~9 h# jinf.wait=wait;
    1 l1 w4 d' t7 j$ D# g( j* H1 qinf.CPU_rate=c/(c+w+change);  F' U3 Y4 ^9 ]; `! y
    }, C3 [$ _6 z9 ^9 O4 ]- [
    //画图3 h% M3 k4 a( d$ g( [
    //cleardevice();% [; M* B2 o0 C& a' b3 f
    line(0,600,1200,600);
    2 N- ]! Y2 E0 r9 }- rline(10,600,10,200);. t8 v& y( U. F  N' X  Z
    line(10,200,5,205);6 }1 e' `. c6 {6 O* y. ]0 p
    line(10,200,15,205);
    / x9 m1 R  ?& g" c- Wline(310,600,310,200);( Z, X% {8 i( j) j$ o, X
    line(310,200,305,205);
    0 d7 V8 Z. }$ a6 m0 eline(310,200,315,205);
    1 w+ i, `0 B% Q  K5 L: ]line(610,600,610,200);
    & v0 Q# Z- O8 y+ ]9 _5 t# Lline(610,200,605,205);
    # v5 b  z: \  E0 ?% q! Tline(610,200,615,205);4 W' A% o# c( i- s# L; c
    line(910,600,910,200);
    2 Q* C2 N5 w6 m$ ~$ Z3 lline(910,200,905,205);1 g* {+ k! C; z- m7 u! s& s1 e* X
    line(910,200,915,205);//最高的长度400,宽度均为40! O# |1 k2 w) n4 Q
    for(i=0;i<5;i++)3 V( ]" S$ g$ X' v% x9 U0 K
    {2 f. V+ a1 q7 k* d8 t
    if(inf.throughput>pos[0])
    ( c4 _, o- p: o! [2 ?) lpos[0]=inf.throughput;$ r4 j& G# I. x9 l
    if(inf.turnover>pos[1])
    5 B' m/ ?7 d: h- qpos[1]=inf.turnover;
    2 f) @5 g6 d7 a) cif(inf.wait>pos[2])
    7 I2 }& ~. r4 s' `: f5 C0 B5 [4 Ppos[2]=inf.wait;4 }3 w: o; w3 C
    if(inf.CPU_rate>pos[3])6 k( L; U1 Z  B: y7 z) E& g
    pos[3]=inf.CPU_rate;9 ~2 Y6 I1 j" A( x: J3 B
    }) f( [7 p+ q7 o3 s4 l
    settextstyle(30, 15, _T("楷体"));
      w( b2 |. m9 {7 C4 {2 u$ Q* dfor(i=0;i<5;i++)
    & e, v* f( J( g, G{
      k) ]; A1 ^/ t- B2 C3 A3 w# j5 aswitch (i)
    : H. D8 m& u* u6 ?) J4 h( b8 [4 M{+ r* p8 I+ n" k, x" Z1 S" g- V! k
    case 0:
    7 V8 q: y  X4 _setfillcolor(BLUE);
    & g2 I8 r9 b0 e4 n* mfillrectangle(100,50,150,100);
    , l" @8 j8 @- p. _! fouttextxy(160,50,"FCFS");
    0 M* c' m) z3 i  Q. @7 obreak;
    2 t5 F- L0 }5 t  Tcase 1:5 n4 o/ h  p( m6 b1 J+ e4 b
    setfillcolor(RED);) E6 ?6 n. D$ i. G
    fillrectangle(250,50,300,100);, c' ~/ i- d. v
    outtextxy(310,50,"timeTurn");
    ! ]+ t" k( ]+ F' @' Pbreak;
    5 I6 s+ G( w9 m) B. Icase 2:1 n) ^. T/ }/ t5 \5 H; P& _3 e3 _, l
    setfillcolor(YELLOW);  X* q! R6 B6 f! h/ t6 S
    fillrectangle(450,50,500,100);
    * j6 A! J  z0 a+ ?. @+ ?outtextxy(510,50,"SJf");
    6 F# C% T7 G: T7 lbreak;0 L7 W" g+ B( j) H, y
    case 3:  B+ O9 V' g; l" I( o! v
    setfillcolor(BROWN);% m  Q% K' u2 d/ M1 H9 |0 b$ I7 z
    fillrectangle(580,50,630,100);
    ! p' k9 f7 P, S0 p" E( k% |/ w2 p4 Couttextxy(640,50,"PR");$ w8 q2 ~3 @( I9 P
    break;
    8 A" s+ t) H7 a( Qcase 4:
    9 e$ p4 a  e" Hsetfillcolor(GREEN);
    4 e! V- r& L2 J; a* g- K; n9 @fillrectangle(690,50,740,100);. j2 z* [2 o" I! [
    outtextxy(750,50,"HR");
    # z5 [  {" R& a2 S2 @1 f9 Hbreak;
    4 o+ `/ o/ h# J2 W  y+ t- W}
    2 g' c2 |: N6 H" a4 V% U' ~# L7 Lfillrectangle(50+i*40,600-(int)(inf.throughput*400/pos[0]),90+i*40,600);
    & i" b) y9 N# l5 q! l9 Ufillrectangle(350+i*40,600-(int)(inf.turnover*400/pos[1]),390+i*40,600);: C5 C3 H+ r1 g- c9 m- f
    fillrectangle(650+i*40,600-(int)(inf.wait*400/pos[2]),690+i*40,600);
    6 a, D) K8 {2 y3 ~! Tfillrectangle(950+i*40,600-(int)(inf.CPU_rate*400/pos[3]),990+i*40,600);
    * H0 q- t+ i- C  u( {" J9 E$ e! z5 q; @( C* J

    , j0 \0 f* s6 g! W; q6 |1 j}' ?  b; u, B4 {, d/ u8 @, r
        outtextxy(100,150,"吞吐量");8 ?6 K8 }; z) Q: X
    outtextxy(350,150,"平均周转时间");5 a8 {" d" T: ^9 z: d, i1 t# J& E
    outtextxy(650,150,"平均等待时间");) V$ Y# |6 s6 a( ]* l) n
    outtextxy(950,150,"CPU利用率");
    ( j$ D; u# [( Q6 ~6 B0 Vreturn 0;
    5 o* g3 Z* j# i* x; {  ?}
    ' d3 L9 O7 e  n* ^% F% wint MouseListening()5 q: K% k0 m/ q9 v
    {
    5 M# [1 J1 B, K4 H* l5 N9 YMOUSEMSG p;
    % l, I$ ^8 C0 A2 s6 ~if(MouseHit())
    + f2 y3 L" Z; Y/ j{
    : @( i% s% F) L2 H- hp=GetMouseMsg();; Q/ g' Z* ?6 e! v
    if(p.mkLButton==true)( H/ ?! o" E2 o* R6 @
    {( U; \$ G( E# h( _0 [- X3 \
    if(p.x>0 && p.y>0 && p.x<400 && p.y<325 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0). G( _7 g! `* }9 q+ K: ^; q* L: l
    FLAG_FIFO = 1;* @( C  X9 v3 q8 [- p
    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)' m  a$ u3 N0 s/ ^) i3 ~
    FLAG_TT = 1;% ~' A' A" y" ~! c4 l
    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)9 a1 Q6 F3 {; p
    FLAG_PF = 1;
    # ?# K( g5 h5 e5 h$ N  i" s5 ]: U/ ?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)
    - V1 d% F1 _: f/ K! D1 b7 ?1 IFLAG_SJF = 1;
    - {- f$ O$ P! relse if(p.x>400 && p.y>325 && p.x<800 && p.y<650 && (FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0)
    " V+ a" z" a8 g$ {/ G9 B, H( bFLAG_HR=1;; o( u% G1 {8 C7 K- y
    else if(FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO >0)
    : ?% R* l) ^# ~9 p' I! K+ w{
    0 p5 X" K. _+ jFLAG_HR=FLAG_SJF=FLAG_PF=FLAG_TT=FLAG_FIFO=0;1 [. h& U5 Y2 y4 B; l
    clearrectangle(800,325,1200,650);! A& }: @" G3 B5 r  A
    }1 i+ d- r$ j, e+ k; |* Z+ X
    else if((FLAG_HR + FLAG_SJF +FLAG_PF + FLAG_TT + FLAG_FIFO) == 0 && p.x>890 && p.y>455 && p.x<1110 && p.y<510 )" _# L: @; F4 D! Y' h0 k) {
    {
    : ?6 D0 O. l9 n7 j5 u) gFLAG_show=0;
    7 }9 X! A. p- ~9 fcleardevice();5 q/ x% G% i- D( D& B' r+ X8 D7 O! R
    return 1;. U1 W+ h! v) H' T; Z
    }6 z- h! ?1 G) L  D& X
    }' }' _( t: \6 @* c% R) W7 Z
    }' l* q+ M7 k4 a9 ^. W3 N7 L
    return 0;
    6 h; N1 Q+ n2 r2 O$ G# h}
    % S+ h, l: w" Z" f; {2 M2 g! eint MouseListening2(int *flagShow,int * showTime)
    " s3 G. a( e4 T, ~6 h{4 p  ^. {9 i& F+ S5 M) o
    MOUSEMSG p;' `9 ^' E) l# x
    rectangle(1150,0,1200,50);
    & s7 M; ?" P3 R4 o* Uouttextxy(1160,10,"X");
    & \! I, }& C. b' k; |# K+ A1 a, ywhile(1)! W( b) s, t9 @# g- Y* P6 X: X
    {
    $ V6 @% T6 B; t* ?+ \! c3 rif(MouseHit())
    4 V0 u/ u5 X2 D8 ~; X- a8 w{5 y' Q, q& s" S# v' @
    p=GetMouseMsg();
    2 u# G0 |9 g- R+ A% I1 s- [( Iif(p.mkLButton==true)& y7 h. k: K. E5 I) [
    {
    5 l7 Q6 A$ z7 t; Eif(p.x>1150 && p.y>0 && p.x<1200 && p.y<50 )% i1 X' `/ D$ M5 c: ?1 E2 H& L4 f
    {
    . a1 N/ U4 x1 M( ?(*flagShow) = 0;
    0 c8 A- D5 f& {0 B! h. m6 U(*showTime) += (*showTime);$ {& g1 d5 s7 {) B- r
    FLAG_show=1;+ a  z8 Y% _- k
    break;
    . T' ^% y, O9 c# G3 N5 G/ Z& N) c}
    9 N6 t# `; D2 }: \) q% i. J& \- i8 M$ h1 P, g
    }
    $ I( T' y  g- g6 ~. q}  h' ?" t2 L# k4 J) R0 _; j0 {6 @4 G
    Sleep(20);2 g7 p2 o- X: |7 s/ h* z+ F, s
    }0 x5 q; A8 [5 ~& [
    cleardevice();( Y% N7 s  P0 H
    return 0;
    ) S2 x* g: f4 X& X! T' o}- V: b$ J. |2 h# i
    int drawPerformance_FIFO(int x,int y,int memorry,int com,int wai,int cha)8 V9 ^9 D( ~; c" B8 n) E; v* |
    {
    ( f0 {. a9 Y  J6 W' N. qstatic int info[11][3],num=0;; J8 k3 S/ {, I
    int i=0,j=0,pos[10][3][2];3 a5 h3 M4 j1 G7 j
    float temp,t;
      n' D7 `8 X$ U+ Y//画按钮,不属于FIFO图的范围8 c2 I% z+ I; d& x
    if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0 && FLAG_show==1)* A0 J3 V9 y6 V& Z8 e- O
    {1 a! M: K( h  Y1 ^( H1 i
    settextstyle(30, 15, _T("楷体"));# F, \1 N! Q* d4 z5 p4 M
    rectangle(890,455,1110,510);, m0 o7 C; s# S8 _. G8 y( T
    rectangle(900,465,1100,500);
    5 a: y$ ~; u% B' vouttextxy(910,468,"查看运行结果");; h' A- j2 E& ?. v, Y" b
    }, `3 g1 Q6 q1 C6 e7 P/ P6 q
    //结束画按钮) y/ h! W+ i8 w3 L1 L
    info[num][0] = com;  s: {2 n) ^  q7 p8 O
    info[num][1] = wai;
    ( ~9 o3 b& z1 j+ ainfo[num++][2] = cha;- m! Z- }! y1 q/ K
    if(num>10)  //存储10个点8 M  J6 h) s. U/ C& D6 Q5 m
    {3 e* {. t2 B- w2 L" N1 S7 U9 Z& s
    for(i=0 ;i<10;i++)% Y; m3 h& D& c. q- ?
    {! G) f! i0 q3 {1 a
    info[0] = info[i+1][0];
    0 b$ n8 Y8 a; ~+ \4 |+ jinfo[1] = info[i+1][1];
    ( s, F0 ~* I- Sinfo[2] = info[i+1][2];: q6 @" ~) D8 T+ l' L. ~+ Y/ B
    }* W: x! Q' n& ~
    num--;
    & Y$ l- {" a. z0 N}
    4 r; d7 ?+ H! L$ |if(FLAG_show==0)
    * h- }' N! H+ Sreturn 0;
    6 y3 \, C* q. O0 B4 sfor(i=0; i<num; i++)
    * G8 u5 }% u; o9 n{, t, v$ L0 U0 U( b: [1 h5 ]
    t = (float)info[0];
    0 N$ R$ N2 k8 g, O1 R( @: _' S! Stemp = (t/101)*90;
    . P- q# Z, W( W/ D3 g% _5 Z! Zpos[0][0] = (10-num+i)*25+x+100;
    ( V% N/ k+ k; @8 y( [: E# _pos[0][1] = y+110-(int)temp;5 g9 P7 I, u" Y
    t = (float)info[1];) S1 h, N% f$ X( n. c2 g' g; W
    temp = (t/101)*90;
    ' a& j$ z, E5 r9 w  ~5 w. Q5 ]- zpos[1][0] = (10-num+i)*25+x+100;
    2 O# s( Z6 i' y9 k: D! `pos[1][1] = y+210-(int)temp;- r) `8 O3 p& s# }$ F! J
    t = (float)info[2];# J5 u, q- L+ q" [9 z% ~/ V
    temp = (t/101)*90;0 ?: U! Z$ l, x4 P! _" ?
    pos[2][0] = (10-num+i)*25+x+100;
    4 j) y- b5 l4 o0 |/ Gpos[2][1] = y+310-(int)temp;
    3 W" s& A% Y# y& y% ?+ z( C  `}# Y# _& T! w! F8 C% K
    if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)" u0 L7 x% u+ D5 a. x: _
    {
    " L0 P8 K, d& P' b" a& H7 L  {clearrectangle(x,y,x+400,y+315);1 Z- F% E. S9 A& b# I) h: _
    settextstyle(20, 10, _T("楷体"));
    : }/ B* a6 H# Yrectangle(x,y,x+400,y+325);
    * l: a) V5 v5 `# N8 q9 M: w. fouttextxy(x+40,y+10,"CPU");       //画柱状图, v( ?. ?9 k: f( w1 F
    outtextxy(x+45,y+10+100,"IO");% M5 f# R+ q( h( H
    outtextxy(x+40-15,y+10+200,"change");
    9 U& A  J" p' ?5 q$ f& p& Yrectangle(x+35,y+30,x+75,y+110);% C: j  |' S6 y. k( M1 b) E7 d
    rectangle(x+35,y+130,x+75,y+210);
    2 \+ D3 K) S% C2 {% _8 _: }( irectangle(x+35,y+230,x+75,y+310);2 Y( V$ T  T% A
    outtextxy(x+180,y+310,"FCFS");( A. c3 r) E# C- ]+ x( S/ r+ Z
    t = (float)com;& I4 V( S9 {$ O
    temp=(t/101)*80;
    , ?* f$ c/ B) H4 A! h* vfillrectangle(x+35,y+110-(int)temp,x+75,y+110);0 V* A% H  n! {2 M! X% j
    t = (float)wai;9 T4 l& o! g: `$ h! E
    temp=(t/101)*80;  R1 G) B6 h& r9 a5 G4 o
    fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
    $ [0 I3 V" l6 @7 b3 J) p: z" K' |t = (float)cha;, m( M- ~! ]' Z! L+ n
    temp=(t/101)*80;
      K' K: O2 n! q8 I) Z. Wfillrectangle(x+35,y+310-(int)temp,x+75,y+310);8 {+ C, ^/ L  O: x. G8 g0 d9 V+ v
    for(i=0; i<3; i++)   //画坐标   high=90,length=250
    6 D" @7 s7 K: V{6 Y0 z4 I& ^8 S1 D9 m% f+ p
    line(x+100,y+110+100*i,x+350,y+110+100*i);
    ( t0 C7 }( \% Kline(x+350,y+110+100*i,x+350-5,y+110-5+100*i);5 ], P; I: M; r) N+ K
    line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
    ; U; \$ ?9 H) K9 z' O
    6 d0 J( G$ q, r1 @* e/ D5 P3 pline(x+100,y+110+100*i,x+100,y+20+100*i);
    7 {1 c! f" T# r  ^/ P- lline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
    ) {: E; _( h# b- f. Rline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);
    3 J" x# C4 I3 O: H! Tfor(j=0;j<num-1;j++)( D! R0 [* @. W+ M! R* R
    {
    8 u& y8 F, L  v4 ]# G* i: nline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    1 n( ?0 v: Y7 t4 S; eline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);. U  z' \2 _. d1 I
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    ! S! u' ?" ~) y/ C' D}
    5 ]7 G* t7 r. g* e! k; J& n}
    ) [$ {  y; d3 l7 z+ }}0 ?9 ]: w; y$ [3 v
    else if(FLAG_FIFO==1). b! ^: K* X4 Y
    {4 x1 d/ S; {& F3 S3 w1 T
    x=0,y=0;
    # w9 b# Z1 p; t& o: f! rfor(i=0; i<num; i++)9 ]% x2 E5 S( N0 d1 t* i
    {+ ?, v, \$ X( J& U; ?7 x( a
    t = (float)info[0];
    . I8 m# J% i6 b$ A% Ktemp = (t/101)*180;- t( Q7 l( p  V
    pos[0][0] = (10-num+i)*50+x+650;
    ) M" I# Y( v. e5 b% U9 O. ppos[0][1] = y+210-(int)temp;5 d* [* G9 h4 [
    t = (float)info[1];" u; R( t- W$ d% Y5 ?+ Q8 E
    temp = (t/101)*180;
    ! g! C) h) f  c. \' Z" s1 ^2 ipos[1][0] = (10-num+i)*50+x+650;
    % v: u1 W4 Y  l8 k4 Vpos[1][1] = y+420-(int)temp;
    ; [) D( ]7 s. c. a3 At = (float)info[2];) @" z) i2 g: u8 P
    temp = (float)(t/101)*180;
    + I5 r' G$ @  i  a6 apos[2][0] = (10-num+i)*50+x+650;
    2 o: i  a6 [* a- F0 `$ x6 T9 Ipos[2][1] = y+630-(int)temp;' ]  t8 b5 v& J# h  m
    }
    " ~  }- x) D+ tclearrectangle(x,y,x+1200,y+650);$ `0 e- G7 X6 W! D: h) w, m
    settextstyle(40, 20, _T("楷体"));) \% H& @! C0 M2 q, u: n
    outtextxy(x+50,y+50,"FCFS");1 ^3 S3 W8 f6 j6 @& {
    outtextxy(x+280,y+20,"CPU");       //画柱状图9 Q4 z+ \* p, G' ~, K
    outtextxy(x+285,y+20+200,"IO");
    5 n  ]* v' |* ^- a5 h; x1 Louttextxy(x+250,y+20+400,"change");. B7 h" B7 Y  x
    rectangle(x+270,y+65,x+330,y+215);
    4 @. {  E, r/ C' y) p* Nrectangle(x+270,y+265,x+330,y+415);
    # E9 {+ y; C5 lrectangle(x+270,y+465,x+330,y+615);+ `/ Z! e/ @" T
    outtextxy(x+290,y+620,"TT");# e, J- _1 X* P1 f
    t = (float)com;# k. l% w$ `; q3 Z
    temp=(t/101)*150;- \  K7 Y' e  ^# V' {
    fillrectangle(x+270,y+215-(int)temp,x+330,y+215);
    8 R" V4 `$ ^, Gt = (float)wai;
    * q, k: T$ X. W) Y$ g# _3 ltemp=(t/101)*150;, U; N( O7 N8 }. K/ U; h/ _* k3 Z
    fillrectangle(x+270,y+415-(int)temp,x+330,y+415);
    8 x: g9 {/ `- J1 o  ^( _t = (float)cha;
    ( T" X- n* \8 d( T! ~, T& ?temp=(t/101)*150;
    ; e/ K# _0 B. p5 x& nfillrectangle(x+270,y+615-(int)temp,x+330,y+615);. i6 u5 U/ v- D: k
    for(i=0; i<3; i++)   //画坐标   high=90,length=250
    5 J' q* W0 O9 l! l& P+ J. ~{& R" A: ?& Z+ c) O( z
    line(x+650,y+210+210*i,x+1150,y+210+210*i);7 Q& d, D% ^: b' ^( q1 e
    line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
    % d7 f, L1 F( `  g- ^# }line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);# _# L/ f$ T5 |! H; J

    + H& e  s! Z4 t$ i1 Bline(x+650,y+210+210*i,x+650,y+20+210*i);
    8 A6 H5 B5 ^* ]6 a8 Bline(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
    : s4 E4 J4 r! W  x+ I$ A5 y" d0 O7 wline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
    4 }3 U9 V& d! w' V4 s0 {for(j=0;j<num-1;j++)
    9 Z9 I( a9 Q& M* Z7 r{- A; `2 C  ~3 g6 y) n4 x2 s
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);. i1 C; ^( O* k1 i4 @: V
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    % U% N4 b* B- U  T; ~. a1 Eline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); + S" Y; X" |. o
    }, B  O/ x+ H1 P
    }
    / i: L, h; d! r4 \; t; ~. L}
    ; f, X7 |1 s- _6 B. C* J$ o0 d; f3 c6 h( `$ }- T4 Q$ |6 X
    6 T# P3 A" B; V3 V" \3 {6 j
    return 0;4 m; }" L' k0 J  V; J, B2 j
    }  E6 z& M$ D  x& a4 D: L/ I
    int drawPerformance_HR(int x,int y,int memorry,int com,int wai,int cha)
    ( N) k* c/ a3 B( [! @{# p3 C, @; h' ~! o& l/ N1 n
    static int info[11][3],num=0;
    . h/ \% n$ k7 Vint i=0,j=0,pos[10][3][2];
    3 ?' f. p& M6 D/ p  Rfloat temp,t;6 v( s! B; c* p* H) B1 O
    info[num][0] = com;
    ) u5 P, B/ [. l+ E  Jinfo[num][1] = wai;4 g% j4 \, }' B7 @0 p( X4 s4 o  _* T
    info[num++][2] = cha;$ T0 U4 ~3 b( P" R% T
    if(num>10)  //存储10个点
    % D; w3 k( Z( |/ N0 z{# `: F) M6 O  ^6 x3 z4 j2 x
    for(i=0 ;i<10;i++)
    1 u3 z  c  z7 e1 b) p+ }- @{( ^0 n; ~, f$ I4 G* f
    info[0] = info[i+1][0];
    2 h9 {  `7 }+ Z8 xinfo[1] = info[i+1][1];
    + z0 ^2 P+ I7 N$ I4 Xinfo[2] = info[i+1][2];" ?! E; ^* c: k: A# n
    }
    ) F8 s4 S5 r" z# @num--;5 W/ [+ X# Q9 {1 C6 A
    }% L0 M/ i) p% B  W
    if(FLAG_show==0)+ F4 G( j9 e- J' |# T" Q, \$ ?
    return 0;
    3 g( a7 A6 h) Kfor(i=0; i<num; i++)
    7 \6 x4 v+ T: d- F{
    5 ^7 }+ X; N8 Z& U" u6 V9 O- H8 zt = (float)info[0];
    + ?( n5 @. J3 v9 a# M- dtemp = (t/101)*90;! K3 c8 y& H+ b3 h7 {
    pos[0][0] = (10-num+i)*25+x+100;
    7 T. B) v6 D4 U$ g2 Jpos[0][1] = y+110-(int)temp;: b; E. Q! l9 H! c
    t = (float)info[1];8 s- w1 E5 K6 D0 R2 I) O
    temp = (t/101)*90;
    2 m) l7 \# d1 @7 c8 v- {" N8 @0 l! p. d% upos[1][0] = (10-num+i)*25+x+100;& Q7 D( U/ c' s( \! m! d
    pos[1][1] = y+210-(int)temp;
    2 l" l5 J. X9 m7 `/ @3 ~: Ft = (float)info[2];
    ! M. J2 i6 H; W( Vtemp = (float)(t/101)*90;, Z) u, V0 W% X& ?! x1 i0 Y( m
    pos[2][0] = (10-num+i)*25+x+100;
    & F1 i2 i  r' k, g; D. y0 A7 @8 G4 Ypos[2][1] = y+310-(int)temp;
    : k) D  F" N( b2 z5 k}
    * A5 t& a. l( Q5 I4 }if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
    : U+ d" q: Y9 _" e1 b9 o, W0 N{
    # o9 V5 l& E, c4 r6 r/ _clearrectangle(x,y,x+400,y+315);) A( {* K5 `6 _" g) _9 D
    settextstyle(20, 10, _T("楷体"));
    2 E7 j7 [! `5 }- h# u7 d# J) Jrectangle(x,y,x+400,y+325);
    # P: t$ d( M3 Z5 n, [outtextxy(x+40,y+10,"CPU");       //画柱状图2 X  M4 ]' H3 P' u% ^
    outtextxy(x+45,y+10+100,"IO");: @1 w' P0 `+ K, p
    outtextxy(x+40-15,y+10+200,"change");# ]: v) e  {/ ~6 {+ O
    rectangle(x+35,y+30,x+75,y+110);7 p5 d. q: s) n9 ~
    rectangle(x+35,y+130,x+75,y+210);+ i: M/ @4 a8 Y% o6 g
    rectangle(x+35,y+230,x+75,y+310);3 G/ g1 s8 ]0 Z+ B6 M( P: J
    outtextxy(x+180,y+310,"HR");1 Q$ P3 j/ B8 k3 Z3 Z
    t = (float)com;
    # A! |4 D7 ~* f* _! L- D1 N* R/ Itemp=(t/101)*80;% f0 W( f6 w+ ^6 j8 }7 J- @# _" ]
    fillrectangle(x+35,y+110-(int)temp,x+75,y+110);6 l! {: w3 ~8 F2 X9 j% }
    t = (float)wai;
    / ^% w, h4 }8 W/ ?( Z; Gtemp=(t/101)*80;
    $ D/ ^! ^; f0 m7 `1 ~7 Efillrectangle(x+35,y+210-(int)temp,x+75,y+210);
    ) w; {9 W; A6 N& m: Vt = (float)cha;
    7 F+ P  L0 R3 ^6 Btemp=(t/101)*80;6 x; H  k% `3 N9 o
    fillrectangle(x+35,y+310-(int)temp,x+75,y+310);  P; |2 ]- c) i) H
    for(i=0; i<3; i++)   //画坐标   high=90,length=250. u  z$ e( `& J: l5 `/ e
    {" z' X# W( X/ Q+ J8 A
    line(x+100,y+110+100*i,x+350,y+110+100*i);0 g9 g1 ]7 G/ s/ I
    line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);5 y7 e, F( l2 @2 N: i! j
    line(x+350,y+110+100*i,x+350-5,y+110+5+100*i);1 {+ d8 U" p4 W0 x1 X. }1 r

      X" E3 z* d$ A& M1 Qline(x+100,y+110+100*i,x+100,y+20+100*i);' C: o( ?' A5 K% [, V
    line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
    8 O4 @) p* M3 j7 W$ x! pline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);" [  t, @; i6 W0 J* x9 D( t
    for(j=0;j<num-1;j++)& ^8 @7 V9 x; ^
    {
    3 w6 T$ w7 u: L9 \5 sline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);/ j  I& i/ P* s! Q
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    : x+ ^4 H7 I! |# w/ @8 {- mline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 6 Q8 I+ B) [, r3 x- O
    }8 Z$ j+ C2 K. V
    }
    & s% @4 D$ d+ F1 a4 ^- i" T}
    + M" i" R) x& t: F! g$ velse if(FLAG_HR==1)& o4 x" O$ ^4 l8 V, T
    {' r/ A* B( w% P  ^* v' ]9 m. P
    x=0,y=0;
    : o( y+ |/ |5 Y- b' H/ E! n8 lfor(i=0; i<num; i++)4 e) r2 B& S4 \
    {! |  w$ h1 k; w8 ]! v; v( g1 x
    t = (float)info[0];1 C2 V. \" s, L; v5 B
    temp = (t/101)*180;1 D4 l" J2 i$ L
    pos[0][0] = (10-num+i)*50+x+650;
    & t0 z, v0 \7 P2 \6 c( Apos[0][1] = y+210-(int)temp;
    ) Y# i& d* ^' n4 Q! ^  Bt = (float)info[1];' O. H% v6 {. N' _  D% I  b, C
    temp = (t/101)*180;# Q2 k! _- I7 [
    pos[1][0] = (10-num+i)*50+x+650;
    9 Z% f8 V/ a2 z4 W, Xpos[1][1] = y+420-(int)temp;
    * x( D. d: c+ B& w: |: \% ^t = (float)info[2];$ K! C2 l- u+ ~* X  x
    temp = (float)(t/101)*180;8 o( E/ y+ Q: Z6 \
    pos[2][0] = (10-num+i)*50+x+650;  l0 j+ t! w- n# T7 H
    pos[2][1] = y+630-(int)temp;* f7 S3 M+ b. j% p- P
    }
    9 Q/ S2 j& s- w8 l+ L: Q* nclearrectangle(x,y,x+1200,y+650);4 J1 O5 O. r6 k$ [" N  |
    settextstyle(40, 20, _T("楷体"));. }% F# x2 ]' c1 u  [
    outtextxy(x+50,y+50,"HR");# I! D/ {  C% L, F7 r9 Z
    outtextxy(x+280,y+20,"CPU");       //画柱状图
    1 b+ C! D6 h* q/ g8 G* Fouttextxy(x+285,y+20+200,"IO");
    % ^% c0 _3 N" E, douttextxy(x+250,y+20+400,"change");9 Y4 I2 p& w' o" |6 i
    rectangle(x+270,y+65,x+330,y+215);
    4 m' P" {1 k& |- b; c) G7 t6 G. T  Erectangle(x+270,y+265,x+330,y+415);
    ' p+ J- C+ T6 m# R. U/ ], z, Lrectangle(x+270,y+465,x+330,y+615);- y8 a/ E: q% j4 a0 A
    outtextxy(x+290,y+620,"TT");
    * H& ?: ]" z+ ?8 }( P2 n* n# a0 Wt = (float)com;& G. b3 q7 v( Z
    temp=(t/101)*150;& }& @& d: K1 ^0 n8 c0 F; f) y! l
    fillrectangle(x+270,y+215-(int)temp,x+330,y+215);2 Z; \5 I( n- b( z0 e- p
    t = (float)wai;( U) ^  F, D# D
    temp=(t/101)*150;
    : T! m, }. e4 X; @! o9 xfillrectangle(x+270,y+415-(int)temp,x+330,y+415);. @) T" a" x; K
    t = (float)cha;
    $ @% ~  e8 A& e/ s- t4 Mtemp=(t/101)*150;
    # [& P" @) y( I8 u. sfillrectangle(x+270,y+615-(int)temp,x+330,y+615);
    ; v! L9 P5 o% k5 W1 n( f9 rfor(i=0; i<3; i++)   //画坐标   high=90,length=250" \9 I, o: O  I
    {- ~! k' \4 k/ p! i5 B8 |1 N
    line(x+650,y+210+210*i,x+1150,y+210+210*i);8 Q( v& n7 J4 }# l' \' Z) s
    line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
    ' H; O0 X2 O" y: B4 E$ kline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);/ s. r: _% i( V+ k. m* l
    5 K8 s5 f) ^; ]  `8 ?1 p* x
    line(x+650,y+210+210*i,x+650,y+20+210*i);
    1 P) A" y% ?5 x, [line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
    ( J  k4 q1 z1 y$ e5 l8 N9 m: i' Yline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
    5 [4 i! r; J) ?: i+ C9 o$ W3 U9 qfor(j=0;j<num-1;j++)
    - F% r9 [) ~" P( u{
    ( ]. P" g' q0 `. aline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    ' N% v4 c5 p- {2 H& z, Bline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    # e( A1 Z7 w/ A+ Iline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 4 \" P0 j; o0 V* i
    }7 H) O0 |9 B8 y2 p% h
    }$ ]: m4 o+ j) h+ @. Q/ x
    }/ B0 b  ^- \2 A, I1 z  E: Y2 T

    * `1 `' V8 r+ s: ^+ s2 J, o, [
    " H! }- U0 b5 K1 Xreturn 0;
    2 \9 {4 z% l9 s7 [) [}/ p) d. g; k- ~5 ?9 K2 t9 s. W9 `
    int drawPerformance_TT(int x,int y,int memorry,int com,int wai,int cha)
    9 u+ r  q1 O9 h5 e1 [9 o{
    4 X( Z0 z/ i+ [- x. }static int info[11][3],num=0;9 [$ \. }! x; Y9 F) s; {9 E! E
    int i=0,j=0,pos[10][3][2];9 W$ B+ e2 Y! m5 S( n6 Z& H
    float temp,t;
    5 ~9 A8 v$ n1 Z9 @$ o; d0 ], Hinfo[num][0] = com;
    " U1 F. M+ W& A: s# e. [info[num][1] = wai;
    % W6 N% J; _8 T& finfo[num++][2] = cha;
    - @" s) X0 O2 W: xif(num>10)  //存储10个点
    " U9 N6 `; }: X! E9 I6 ?# i5 [( I{
    7 B- n" ^1 k$ x0 |; I/ x; ffor(i=0 ;i<10;i++)4 E. y" N- r2 g, N# ^1 n
    {3 C1 |' e, ^4 t2 I
    info[0] = info[i+1][0];
    * J+ ]# K7 W: t+ t* \/ Qinfo[1] = info[i+1][1];
    - V' n* W" L) d9 ~$ J" x8 pinfo[2] = info[i+1][2];0 @/ T1 U: J$ j9 X) p
    }2 R, q  I7 N2 L) `
    num--;: m* i: G. c: P" f
    }
    + ?8 ]8 w2 }0 J; K0 _) M. K# j" W( ~$ Fif(FLAG_show==0)! q4 w9 c" B+ e& E+ a$ h2 k- j2 x
    return 0;
    & _. Z7 C, Q0 Z9 M9 N- |for(i=0; i<num; i++)' m1 q0 N5 m" H. d# x% K
    {6 L! O0 y6 p# v( d4 |4 u8 F" T0 O
    t = (float)info[0];6 d4 E) X* O2 v
    temp = (t/101)*90;
    - G" B/ i; A' M/ F1 _# O+ O5 {# n  q5 @pos[0][0] = (10-num+i)*25+x+100;* V+ V/ S, s  O1 E
    pos[0][1] = y+110-(int)temp;5 u! |9 Q7 L, c( Q
    t = (float)info[1];1 i, G0 B; Z0 q1 {9 q9 F1 }
    temp = (t/101)*90;* D4 S% }0 n1 F: _7 D
    pos[1][0] = (10-num+i)*25+x+100;
      D% H2 i" }. u8 V8 ypos[1][1] = y+210-(int)temp;0 q- n/ G6 [  w7 z
    t = (float)info[2];
    * H7 G- f- u& q& ]: ^3 ?temp = (float)(t/101)*90;7 \0 [- Z* r4 U( y
    pos[2][0] = (10-num+i)*25+x+100;
    4 j, \' W6 W, r. Cpos[2][1] = y+310-(int)temp;9 h3 V# x& W& K: I
    }7 _; u) E8 d; c" [0 }) V
    if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
    5 ?( h: y8 P; \" }0 b$ c{
    + o( I0 s( S" n  W. ~; I* e; n  n6 Zclearrectangle(x,y,x+400,y+315);
    5 X( v1 c0 ~# c0 _% g# m3 ?) ~, y' C9 i- Fsettextstyle(20, 10, _T("楷体"));
    , w$ o# V9 u/ O: brectangle(x,y,x+400,y+325);
    - w0 _1 b. [! ~outtextxy(x+40,y+10,"CPU");       //画柱状图
    ) n6 n8 u+ A  Nouttextxy(x+45,y+10+100,"IO");8 h0 y0 q5 f8 }; f5 O8 G# j# @! |
    outtextxy(x+40-15,y+10+200,"change");4 z; T/ @- o6 v' o
    rectangle(x+35,y+30,x+75,y+110);
    2 c6 k  K- u$ w1 j3 M. Frectangle(x+35,y+130,x+75,y+210);
    % J! v# T6 H% i7 @2 l1 d( vrectangle(x+35,y+230,x+75,y+310);
    * O6 S5 n& L  E' Fouttextxy(x+180,y+310,"TT");/ d  u, F5 m4 d) L7 `5 L2 s: X: Q' \
    t = (float)com;+ N8 y, I1 {4 `  P( j! E
    temp=(t/101)*80;
    2 E" v  D4 `: |% |! L& O$ i1 O4 \fillrectangle(x+35,y+110-(int)temp,x+75,y+110);* A0 r* q- \1 D
    t = (float)wai;
    * S* I; P) V0 f5 H! F- _# ftemp=(t/101)*80;  ?  J" Y# ~$ s7 M1 P& b) P
    fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
    . N6 ~3 \3 h9 b9 D/ \0 B' v, R' yt = (float)cha;, N7 P- P; f1 E5 c
    temp=(t/101)*80;( i# R3 v6 H" ?
    fillrectangle(x+35,y+310-(int)temp,x+75,y+310);
    - h9 s* R3 r& e* C/ I# m% x; O; Kfor(i=0; i<3; i++)   //画坐标   high=90,length=2505 ]! L5 W6 F+ I( `
    {! }/ D, p" n+ x; Y
    line(x+100,y+110+100*i,x+350,y+110+100*i);) Z4 @5 c5 u9 z  M% ~4 O
    line(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
    " V- W2 k. h3 K* o0 g5 Eline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
    , Z1 K6 V' O0 V4 Q$ s) n: F- Z% I( x9 [9 j$ X) k& \
    line(x+100,y+110+100*i,x+100,y+20+100*i);5 [% g8 R. l3 D8 d) n1 Y
    line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);% s! Y( S/ @* }: d
    line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);; j6 C. A  g: F* G% j) a( B8 G
    for(j=0;j<num-1;j++)
    # {2 n% V- n0 O( M{$ V6 i6 H5 J. m* \3 Q
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);* [2 Q* |5 o" r
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);+ |; l4 S+ w$ ]# f; `  R2 {
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); + J& e* T! {! ~' l( A
    }
    0 X+ O8 ?) A/ P, U}
    % M8 [+ h& W0 T}9 L9 o" D' v) k4 \
    else if(FLAG_TT==1)! i& L0 A  W6 W
    {
    ! M7 F) ^: X7 |  ix=0,y=0;# S) }3 j/ V; _
    for(i=0; i<num; i++)6 p* V! v( A9 f; I1 ]
    {0 D; s) J0 m$ {( U; x# [
    t = (float)info[0];# S8 l" n8 @8 j; g, _: L
    temp = (t/101)*180;
    ; i& t5 z; r3 b  a! C- ~& ?pos[0][0] = (10-num+i)*50+x+650;
    $ i/ j) y# Z7 ^4 R. C; G  Ipos[0][1] = y+210-(int)temp;
    # Y1 C6 A1 `- f+ Wt = (float)info[1];
    * P" J) R: p/ |* z, j: Atemp = (t/101)*180;; y, T2 F7 D) o* E3 l& A
    pos[1][0] = (10-num+i)*50+x+650;
    & S* P3 p9 H7 I. y" A  U4 F/ Vpos[1][1] = y+420-(int)temp;) d% ^  \5 {& u
    t = (float)info[2];: o5 |. r- T; N* }/ c/ X
    temp = (float)(t/101)*180;
    8 `) F5 w4 ~, w" T; A/ ~0 S+ Jpos[2][0] = (10-num+i)*50+x+650;" V. i/ b  H! h7 y
    pos[2][1] = y+630-(int)temp;  l/ ]$ p5 `$ W+ c( l. v/ Y% x  w
    }
    ( V) k# c! e, D/ yclearrectangle(x,y,x+1200,y+650);2 H: W& W0 m0 O; _) K" ?9 v3 [. [0 f
    settextstyle(40, 20, _T("楷体"));6 D2 j2 g$ d# B$ B6 O" W
    outtextxy(x+50,y+50,"TT");
    $ T& P: z2 _+ m6 ~  A+ ]! f: Fouttextxy(x+280,y+20,"CPU");       //画柱状图1 v4 c. \% r! r2 B* Z
    outtextxy(x+285,y+20+200,"IO");
    8 z9 n$ y1 r: C# o+ c; X. fouttextxy(x+250,y+20+400,"change");
    * F- z0 x4 O* Y) s# D; yrectangle(x+270,y+65,x+330,y+215);
    2 }1 H- T4 z* P5 H& Yrectangle(x+270,y+265,x+330,y+415);0 b. Z7 j' M+ ]- i
    rectangle(x+270,y+465,x+330,y+615);
    3 U4 o+ _2 `% \0 }outtextxy(x+290,y+620,"TT");
    / Q% H; x4 z2 G) B+ e* f1 Yt = (float)com;$ ?8 b' D# t& m; X" u+ d$ x
    temp=(t/101)*150;
    & s$ f) A1 p7 p0 g+ h5 ^5 Sfillrectangle(x+270,y+215-(int)temp,x+330,y+215);# }0 m1 A* J/ z
    t = (float)wai;
    2 P7 z  H8 ]3 Vtemp=(t/101)*150;" d9 p% I/ W; P+ y0 \
    fillrectangle(x+270,y+415-(int)temp,x+330,y+415);2 F7 L9 O/ H2 q+ ]0 g3 Y2 F
    t = (float)cha;
    / m6 i8 j4 ]7 x' }  Q* X# Wtemp=(t/101)*150;
    3 Z8 d7 F( @& P5 j5 H1 ~fillrectangle(x+270,y+615-(int)temp,x+330,y+615);+ v6 Y( l( G- H9 Q
    for(i=0; i<3; i++)   //画坐标   high=90,length=250; G& W* }4 B& n3 ?: P% s
    {% k- a+ u% M9 ^+ P, y6 T) ~6 R
    line(x+650,y+210+210*i,x+1150,y+210+210*i);$ e& B# I- q; |5 Q' P
    line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
    2 d5 L* }, m7 Nline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
    3 c; w7 e' ]* |  X0 D( P3 A$ O/ L# y1 a, h& F. X
    line(x+650,y+210+210*i,x+650,y+20+210*i);
    $ X1 n- w  A  n. ?( B/ Wline(x+650,y+20+210*i,x+650-10,y+20+10+210*i);1 Q" @+ d/ G7 l- r& s( Q
    line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);
    8 n9 K: _" I/ J6 d* S. Ufor(j=0;j<num-1;j++)- I& o# |# [6 |- ?
    {
    9 ~5 z- g  @1 e! o# a9 z: Q+ aline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);8 V; `4 o5 v1 \) m7 T/ a! I
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);- f. t5 `7 Z5 q0 r
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); 3 s: h2 V6 w' [2 ?
    }, F4 [$ s1 c0 D( L  x
    }
    4 u- X; d- G) G6 J1 l}
    : W, I% d5 B3 C) m- ~/ R2 m9 M
    . k, P- k; S& v7 U) t* U+ ]- }1 P7 |! H0 G
    return 0;
    ( g/ O! |4 {) z( w3 n, K* @" S. e}
    6 t/ T" [" Q) ]  x: H: B/ \4 _5 v! }( {int drawPerformance_PF(int x,int y,int memorry,int com,int wai,int cha)! [/ N- {' O9 L4 A6 r
    {
    5 m: b4 S6 E& b: ]9 K" i+ Vstatic int info[11][3],num=0;( }$ R3 y+ w9 X% O1 v: j! @1 f( ~
    int i=0,j=0,pos[10][3][2];. g+ F2 I0 x5 N. W. m4 K" i
    float temp,t;8 N& F& @& X& U3 ^8 T' h
    info[num][0] = com;
    ( L5 l6 W* ^: Y( j# K% w) R3 `info[num][1] = wai;
    / M7 y& c( d& j9 Ginfo[num++][2] = cha;
    - r% n$ A3 O+ I* |if(num>10)  //存储10个点
    5 M( l* h" h8 M2 M{
    , S' U' _! V! ?7 @; \for(i=0 ;i<10;i++)
    + Z' C! C1 I# p4 _! m4 {{
    $ R1 ~5 H9 d7 m. \/ N3 o4 Yinfo[0] = info[i+1][0];
    8 Q3 T  f! o- ?) G! @0 L' hinfo[1] = info[i+1][1];$ X. p5 L8 p% j# ]6 e
    info[2] = info[i+1][2];
    ; b3 ]1 M# K4 e! F$ l8 h* l% J) q}
    ! M6 ?' L. L) p" Z8 C2 @9 rnum--;
    4 O# O" m% \) S0 i( _- t}4 x. k, t6 g( K) [" t2 \9 G
    if(FLAG_show==0)
    1 f& m  s& d' I  T0 breturn 0;7 V. j* }0 j* B% c, ^" N
    for(i=0; i<num; i++)
    : C. f: G, u6 h% `3 Z* A{
    $ _& F1 s" v# B4 a7 J& x% E) lt = (float)info[0];1 q( q! s/ e! v- p& X) R
    temp = (t/101)*90;- Y4 L7 k# S7 B! f- d2 n+ E' o$ t
    pos[0][0] = (10-num+i)*25+x+100;
    4 ~7 s0 E1 e9 l2 v+ i1 Y! \. Spos[0][1] = y+110-(int)temp;
    3 B* [% g0 S$ f0 Yt = (float)info[1];
      @$ _, p  V/ E$ Ztemp = (t/101)*90;1 b9 |" Z  [" c. m
    pos[1][0] = (10-num+i)*25+x+100;
    ) m1 u) D7 L; C9 k9 }pos[1][1] = y+210-(int)temp;
    & ^) d" K2 u- a3 O; qt = (float)info[2];- J( W, U% U, u+ T
    temp = (float)(t/101)*90;
    0 |0 E6 u! z& Zpos[2][0] = (10-num+i)*25+x+100;
    ' S# @2 D6 ~4 n3 Xpos[2][1] = y+310-(int)temp;( I% ?5 t9 @$ z0 M4 U
    }
    & k$ u' l' Z  E% H# s& Pif(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0); c" i- x# A2 Y, B( S
    {
    + z3 N# |2 [, j* Z* i' W/ ^8 i) w) U4 ]clearrectangle(x,y,x+400,y+315);
    # A) o! F$ m7 ^' o" n/ T. Rsettextstyle(20, 10, _T("楷体"));
    ! g# K) Y5 t# \* E0 y; |. Jrectangle(x,y,x+400,y+325);
    & s) h+ U1 v! S" B# Z; aouttextxy(x+40,y+10,"CPU");       //画柱状图
    / V$ }8 _8 d& w  a% }outtextxy(x+45,y+10+100,"IO");7 q: B0 G4 g' p: `; b+ ^
    outtextxy(x+40-15,y+10+200,"change");
    , R, v( x/ e8 f2 |3 drectangle(x+35,y+30,x+75,y+110);9 k+ y. ~+ B) y) N0 G+ \0 x5 Z; W
    rectangle(x+35,y+130,x+75,y+210);
    & T$ x) W6 e/ g. p! Brectangle(x+35,y+230,x+75,y+310);
    5 I. i* B3 s+ i: |' Gouttextxy(x+180,y+310,"PF");
    8 ?( B# S, a# m4 K" qt = (float)com;; V+ L% Z  X: q& @+ [' m6 ^
    temp=(t/101)*80;
    8 v6 [: b/ `! H6 Efillrectangle(x+35,y+110-(int)temp,x+75,y+110);7 e. i: B: j: g; f+ y1 p. ], G: x
    t = (float)wai;. E) }- k8 F% s8 Y7 }; \
    temp=(t/101)*80;/ S& c; {+ \3 ]: s4 Q) C, e
    fillrectangle(x+35,y+210-(int)temp,x+75,y+210);
    # a# F& Y  g& N! i6 B/ T& c* nt = (float)cha;
    ( ~5 [2 R. V% V$ i6 Xtemp=(t/101)*80;5 A2 {/ [4 T7 ?& S
    fillrectangle(x+35,y+310-(int)temp,x+75,y+310);
    8 `4 B- J2 [& s  N  efor(i=0; i<3; i++)   //画坐标   high=90,length=250# K; B! g0 z3 \/ b: H/ r
    {6 s) T5 G6 o' J$ }: T9 V
    line(x+100,y+110+100*i,x+350,y+110+100*i);
    $ Q0 ]% U( `$ t5 T* m: d2 i; d6 `) Fline(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
    5 M- h9 C, c  nline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);
    1 x) P% y6 Z7 V+ z: s: Y+ b( s1 m; J) d7 Z. z$ b
    line(x+100,y+110+100*i,x+100,y+20+100*i);' m: s3 J4 W2 C/ V, x
    line(x+100,y+20+100*i,x+100-5,y+20+5+100*i);
    / z( k2 u5 B+ l: uline(x+100,y+20+100*i,x+100+5,y+20+5+100*i);
    6 d; N) g* _, i- L/ Q" o3 tfor(j=0;j<num-1;j++)! Q9 g/ B( d  |. v; p
    {
    ( W- v) }% h, o& Nline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);& J7 Y  w) c& e* \
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    ; F6 T7 S: ]( d7 [" I# W: jline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); # r$ Y' t$ e( C* v0 |
    }' R* Y% |+ n" N/ D) F! Z1 J, ~0 S; I
    }
      |6 `, R' h& k0 g3 y6 G}
    9 d' Z5 L" @% Gelse if(FLAG_PF==1)
    / D  }6 @7 ~. J1 Y5 V6 e  X{: M8 S3 K/ ~- x( d' }* [' W1 \
    x=0,y=0;4 f- g' h. W2 ^
    for(i=0; i<num; i++)
    9 ?: u5 l5 V, B1 {/ j3 v{
    / W/ W9 \; W! B& w5 `; j* F! nt = (float)info[0];
    ; a7 y3 G7 r/ a* s, ztemp = (t/101)*180;6 U) z& k  q. N
    pos[0][0] = (10-num+i)*50+x+650;( D! [) X+ I) s  T. U/ |, y- X
    pos[0][1] = y+210-(int)temp;9 y$ J/ x) m/ D; _  C+ y5 M- [
    t = (float)info[1];
    $ K+ i' x& S) _- m; F0 E* mtemp = (t/101)*180;
    ( B; l+ I0 k  ]1 npos[1][0] = (10-num+i)*50+x+650;
    + x2 i6 e; ?+ Gpos[1][1] = y+420-(int)temp;
    . H! T0 F% f& A8 kt = (float)info[2];+ o; y7 x4 G& D& M2 k! Q: N, }3 J" y" s
    temp = (float)(t/101)*180;
    2 y2 K3 i' t, Q( j9 gpos[2][0] = (10-num+i)*50+x+650;
    * H7 O3 c& C2 l$ E( H0 b( ipos[2][1] = y+630-(int)temp;/ ?$ L- z1 ^( J5 R% F
    }
    7 y0 B8 Q7 ?# r/ c' H) ~  T) \" M; F; K1 `clearrectangle(x,y,x+1200,y+650);
    9 s& s+ M' g1 y1 r8 T% u8 Y# ysettextstyle(40, 20, _T("楷体"));
    - V" o3 d( u/ X0 S0 W$ @7 @outtextxy(x+50,y+50,"PF");* P) p8 `4 d2 C- @" \# E
    outtextxy(x+280,y+20,"CPU");       //画柱状图  j% t% y* [; K+ `% B9 d( V
    outtextxy(x+285,y+20+200,"IO");
    1 u3 q3 p3 w6 G  U4 ^, aouttextxy(x+250,y+20+400,"change");
    9 _) S- x( m, Hrectangle(x+270,y+65,x+330,y+215);: s6 W+ e: v8 o: \/ i* J
    rectangle(x+270,y+265,x+330,y+415);
    6 B. l1 f8 m2 [6 G3 B0 T4 O' Trectangle(x+270,y+465,x+330,y+615);
    4 ^% t8 m% X* R6 x) |, z8 \outtextxy(x+290,y+620,"TT");( F3 M8 t% f& {5 {% G9 L2 j
    t = (float)com;. L+ b+ @) D' z: F
    temp=(t/101)*150;: v. \! [! H8 H& @: |0 V# E$ B
    fillrectangle(x+270,y+215-(int)temp,x+330,y+215);: q  o' U7 W. p2 \9 _, l
    t = (float)wai;
    . q) X% Q. W  X$ q: j, s, c4 htemp=(t/101)*150;
    2 j, b/ t- {% E( s- s8 Zfillrectangle(x+270,y+415-(int)temp,x+330,y+415);
    3 @3 t1 H* o5 }6 Ut = (float)cha;* z3 r7 D# ^9 y+ A( E; Z$ S+ Z9 O
    temp=(t/101)*150;( x  H, ?! A0 ?: C
    fillrectangle(x+270,y+615-(int)temp,x+330,y+615);% X6 W6 d# o; s7 I
    for(i=0; i<3; i++)   //画坐标   high=90,length=2502 d& L  ]$ P4 R. u# r
    {
    - u2 ^, A" `+ C: j* Q. Nline(x+650,y+210+210*i,x+1150,y+210+210*i);( c7 U2 ~5 ]7 H4 [7 g) d7 n
    line(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);
    & @1 v( {- m6 O+ P) r5 e2 @% Qline(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);
    + o- u5 {. F3 p2 \& A: c- K7 e; n: R9 c# |
    line(x+650,y+210+210*i,x+650,y+20+210*i);
    " \# F1 W' |* D+ P. ?line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
    # t! O+ W+ f9 r, C9 E1 u% {line(x+650,y+20+210*i,x+650+10,y+20+10+210*i);2 G: w/ o) h% A3 w0 F' i
    for(j=0;j<num-1;j++)% }3 U- j  ^6 z! y. Y1 B
    {1 C: P: ]8 m0 Q
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);7 Y: o7 s" Y( Q
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);" A% z& n( }# l" i: z
    line(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    5 ?& Q% W1 U$ l: A# ~2 a; _7 e}6 [3 C# p2 c+ J) v
    }% C4 p! t9 z8 }$ d
    }( N! u/ [+ M, d- ]/ Y: z
    return 0;5 n2 {1 N: @8 I1 r
    }
    & K! J5 Q! G2 L6 J; l4 G5 r4 mint drawPerformance_SJF(int x,int y,int memorry,int com,int wai,int cha)
    1 Y$ A+ t1 F6 n" o{. u+ \" w, \. y
    static int info[11][3],num=0;
    7 h. B  J( Z: T; h. _: e% @1 uint i=0,j=0,pos[10][3][2];
    7 w& y4 }7 V" {4 H' xfloat temp,t;+ ?! e# u6 [) K, _! B% X1 l7 d
    info[num][0] = com;+ |# `- F% G5 J) S+ L$ M
    info[num][1] = wai;
    - z& _9 v' i: r4 n! C: Pinfo[num++][2] = cha;
    & F& l- F# R8 E' Pif(num>10)  //存储10个点5 @$ b; o2 N- E1 w
    {9 z2 y; n3 c1 l! L( _/ s) d
    for(i=0 ;i<10;i++)5 w& S$ g8 ^8 H/ m3 t  h0 D
    {" l; J1 y/ W# c" Q
    info[0] = info[i+1][0];
    - V- z: a0 b+ G/ linfo[1] = info[i+1][1];
    ! ~/ ]% S, r* \: h: F! e" }info[2] = info[i+1][2];
    , }. g6 t8 H6 ~8 [}1 z6 p  B8 w& l# o
    num--;: i$ g8 j" r, g5 N
    }
    6 x; }0 \7 A& w1 D7 a" Mif(FLAG_show==0): h& Z4 h3 j$ O  L% O. L
    return 0;6 I8 ~7 w2 H! A9 M: D+ {. N4 w
    for(i=0; i<num; i++)
    2 P& r) r6 G$ k; ]" b0 l) F{
    1 X/ E, m& F) |# I- l2 s* mt = (float)info[0];
    4 Y7 b1 k) }/ @# K. `% |temp = (t/101)*90;* j: \8 P) }1 [# h, ~$ ~4 M
    pos[0][0] = (10-num+i)*25+x+100;
    " X* f  y  W+ D9 xpos[0][1] = y+110-(int)temp;& i6 u7 ~, [# f( Q+ X7 G
    t = (float)info[1];4 E4 M: S- F7 e
    temp = (t/101)*90;1 [! g8 Z0 [: Y6 D$ G) f
    pos[1][0] = (10-num+i)*25+x+100;0 K1 A% I8 b3 ^' o
    pos[1][1] = y+210-(int)temp;6 o3 H! J  O# W: k3 B
    t = (float)info[2];  o0 O2 Y: h% [; _
    temp = (float)(t/101)*90;
    # S+ s: O" U+ r4 Opos[2][0] = (10-num+i)*25+x+100;" z' u2 S( N) h. T
    pos[2][1] = y+310-(int)temp;
    $ ~# A+ j" ~" c}
    5 T! A) E) i" S2 ?if(FLAG_FIFO+FLAG_HR+FLAG_SJF+FLAG_PF+FLAG_TT==0)
    & U: C% E7 u/ @{ ( E' c# B6 Z1 H
    clearrectangle(x,y,x+400,y+315);
    8 w+ A. T6 O+ B% x* ?9 dsettextstyle(20, 10, _T("楷体"));, A$ u7 b( J: l4 r, h  p
    rectangle(x,y,x+400,y+325);
    " f5 M% c- _6 E; S2 C6 h1 Kouttextxy(x+40,y+10,"CPU");       //画柱状图
    1 o' @2 [( W8 h+ ~outtextxy(x+45,y+10+100,"IO");
    / a/ L6 \: K' gouttextxy(x+40-15,y+10+200,"change");6 n! @- M6 j# Y* X  L
    rectangle(x+35,y+30,x+75,y+110);
    + D1 I; l  j- v8 z8 W! U. V5 D+ nrectangle(x+35,y+130,x+75,y+210);7 Q# r9 I1 O( B& e# E1 U8 v. \
    rectangle(x+35,y+230,x+75,y+310);
    " C, X; n% k4 O/ |! douttextxy(x+180,y+310,"SJF");
    / t( Z! K$ s3 w; c, k  bt = (float)com;
    7 Y+ C8 ]; R& n  |; ?4 m" b+ htemp=(t/101)*80;0 e4 Z) t4 r9 ?+ A
    fillrectangle(x+35,y+110-(int)temp,x+75,y+110);
    , H6 y9 m  p9 k" \t = (float)wai;: B0 U. E2 W: d  J/ A/ X- U8 u7 r
    temp=(t/101)*80;, E% z/ n1 L9 Y( A: d
    fillrectangle(x+35,y+210-(int)temp,x+75,y+210);5 Q6 t5 [& I  f
    t = (float)cha;. g" E  a# W4 ]2 k; n
    temp=(t/101)*80;
    ; g" ?2 x) O8 \fillrectangle(x+35,y+310-(int)temp,x+75,y+310);0 v3 x" @: _: D
    for(i=0; i<3; i++)   //画坐标   high=90,length=250
    $ V) d0 e. [/ L- ^* }, S" g{# x- l0 `- M0 P4 y" {4 h
    line(x+100,y+110+100*i,x+350,y+110+100*i);
    ( U. S& Y9 z3 f) w7 u" Mline(x+350,y+110+100*i,x+350-5,y+110-5+100*i);
    & E+ d; I8 v8 dline(x+350,y+110+100*i,x+350-5,y+110+5+100*i);: u% c* j5 x: f7 w

    # R+ g; l) D3 ]6 _3 \5 dline(x+100,y+110+100*i,x+100,y+20+100*i);
    . s9 T$ R5 Z9 D5 o6 @" O+ O$ s% Iline(x+100,y+20+100*i,x+100-5,y+20+5+100*i);+ W0 D1 w8 N/ f
    line(x+100,y+20+100*i,x+100+5,y+20+5+100*i);4 `  F- @/ T# i  U" g0 l
    for(j=0;j<num-1;j++)
    : J7 b) `5 y& o{' {" j( P4 F" ~+ n" _! H
    line(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);
    ; [* E  Z( x* U! B' sline(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
      _1 F% g) b! x, F) C) uline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]);
    / @# l- {% `' M: @4 y  \0 P}' h* V7 r* Y) A0 |6 c9 G7 n
    }
    4 ~0 V( k% g. w" L* d}
    " _) N/ J" \2 [, n: m: f+ celse if(FLAG_SJF==1)
    - x2 H/ E8 U' X{' R, Y, O' I: M- ]4 ^* y" {3 y
    x=0,y=0;
    ) X2 L& j2 o) X% d6 U1 ^4 ^. I) Dfor(i=0; i<num; i++)1 T2 V1 w  f% `2 [5 Z  o
    {
      S, I* ?8 q6 a8 x& }7 J: Ct = (float)info[0];) L8 A% o' f) o0 H0 i8 v5 K
    temp = (t/101)*180;% I. K& s  b  q1 ]3 u( X% e' f- e
    pos[0][0] = (10-num+i)*50+x+650;
    6 U7 A) n7 H  h+ s1 e. ~/ L5 upos[0][1] = y+210-(int)temp;
    ! X# N& _: a+ e4 D7 F# e, it = (float)info[1];& U: [, ?+ J8 ]+ b- j5 g4 @
    temp = (t/101)*180;5 F0 k# E9 Q# w  N. O; J) W
    pos[1][0] = (10-num+i)*50+x+650;# D3 S  ^' V  |  G5 w
    pos[1][1] = y+420-(int)temp;
    ! w- [, Z+ }5 E, a4 ]t = (float)info[2];/ o9 V8 L: C8 q2 S* v
    temp = (float)(t/101)*180;
    0 [# E! O& X' w+ w0 r& ipos[2][0] = (10-num+i)*50+x+650;. J1 U* q& s; X9 n
    pos[2][1] = y+630-(int)temp;
    2 |) V0 D' T+ I7 X; _}) y& u: `4 R$ c/ t# z, K
    clearrectangle(x,y,x+1200,y+650);
    ' i& q( Q& s, g% [& N6 n9 lsettextstyle(40, 20, _T("楷体"));/ e5 K$ ~" b, }6 |
    outtextxy(x+50,y+50,"SJF");1 D: _1 Q. q6 O* W6 X# V/ j' w% M
    outtextxy(x+280,y+20,"CPU");       //画柱状图+ \+ ?2 J) K; |3 l- _+ n1 ?
    outtextxy(x+285,y+20+200,"IO");* W( N* @  o* ?, P, i. s
    outtextxy(x+250,y+20+400,"change");
    8 w# z% I/ |# urectangle(x+270,y+65,x+330,y+215);
    # ^; U7 C. H$ a! f! Frectangle(x+270,y+265,x+330,y+415);
    0 G$ s/ N5 d8 Q$ k# F6 Jrectangle(x+270,y+465,x+330,y+615);
    / o3 g3 W& a6 b- Jouttextxy(x+290,y+620,"TT");
    # B9 M% a, K+ c" V0 Qt = (float)com;  _( m+ e0 E+ o1 {, R# ^/ C
    temp=(t/101)*150;" E. ~/ t; u5 S4 G# s# G
    fillrectangle(x+270,y+215-(int)temp,x+330,y+215);
    ' v, j& A( a& Tt = (float)wai;
    & Y- h2 Q; U% }! itemp=(t/101)*150;/ `0 V- H1 p, _+ m* R
    fillrectangle(x+270,y+415-(int)temp,x+330,y+415);  V7 D/ H0 O1 Q; s7 F
    t = (float)cha;
    # S8 ?+ `& H& z+ ^; Vtemp=(t/101)*150;
    / g9 u9 ]- Q, Kfillrectangle(x+270,y+615-(int)temp,x+330,y+615);
    / D) a: B4 D9 q) z' q  d+ Afor(i=0; i<3; i++)   //画坐标   high=90,length=250
    ) t& V$ S- G* f' h% @{
    4 \1 d3 D4 R. u, Lline(x+650,y+210+210*i,x+1150,y+210+210*i);
    # E4 L5 |! w' `% T% eline(x+1150,y+210+210*i,x+1150-10,y+210-10+210*i);* H6 e+ a3 D% I! l& B
    line(x+1150,y+210+210*i,x+1150-10,y+210+10+210*i);' a& h" B( O$ p

    " \3 b% }) K8 g7 L7 mline(x+650,y+210+210*i,x+650,y+20+210*i);6 Q% m; g% l1 {1 W9 Q
    line(x+650,y+20+210*i,x+650-10,y+20+10+210*i);
    7 ~& b+ V/ x# i, C6 l7 z; Y0 mline(x+650,y+20+210*i,x+650+10,y+20+10+210*i);, q# J$ a  E. p1 u1 b  o
    for(j=0;j<num-1;j++)0 V' M$ M) Z5 s4 k% Y
    {
    / U4 J1 d5 W# m" eline(pos[j][0][0],pos[j][0][1],pos[j+1][0][0],pos[j+1][0][1]);  ?# }: s. X. Z- C+ O- [
    line(pos[j][1][0],pos[j][1][1],pos[j+1][1][0],pos[j+1][1][1]);
    ! v) `4 B6 q" i5 T( mline(pos[j][2][0],pos[j][2][1],pos[j+1][2][0],pos[j+1][2][1]); - ?9 _' [0 e% F8 z
    }  d& p% C/ g% F; T0 l$ e% r9 H; Q) V
    }
    : t' H. }$ G6 f# s3 t}: o) S" w" L* [8 X& q
    return 0;1 g5 K8 }/ R' x" l: H9 f! l
    }. F9 m. h/ L. A" i5 p) l
    int High_response_ratio_dispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
    1 v8 x: j# t: \3 D2 U! r; R7 _{2 ]5 i1 A! Z8 ~# _; O5 Y/ B
    static int compute=0,waitio=0,change=0;- C' v$ L2 Y4 b% w& ?* ]( p* P# K
    static int computeLast=0,waitioLast=0,changeLast=0;' {# s- P. y: A" h( Y( r& X+ C
    int i=0;4 @# ~/ l0 @% ^* |3 k: r
    if(draw==1)5 I7 ~. P% P; [+ C; m
    {+ c3 v& {* e4 X
    //printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
    % G" E& I8 I1 \( f9 l+ DdrawPerformance_HR(400,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);0 ~/ ?; R+ j2 ]0 j
    computeLast=compute;3 d: ^9 @( s& p1 \0 x- w
    waitioLast=waitio;
    $ S7 {) Z- G( q' _2 E2 ~  h. ^: ZchangeLast=change;1 p4 K3 |5 ?) a# ^
    }7 M6 o+ n+ x4 z4 Y0 Z, T3 h3 }
    if((* memory).p[0].flag==ready)
    - y- b+ a: x. Z. A# j% x(* memory).p[0].flag=computing;. v/ A, k$ f  W+ R4 q2 y
    if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)  D! N& Y7 r" d+ X( Q, D2 j
    {7 q7 J% R: w# K
    i=(*memory).p[0].computeNum;
    " k& n7 f. y' Iif(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed* V9 m" |  ?# x; L8 s1 x  f
    {
    : Q2 l0 ]- U' s5 |5 n- S$ ]+ k(*memory).p[0].flag=IO_waiting;& `: ?# e" s3 I' z" X% g
    (*memory).p[0].computeNum--;6 `' _4 K5 Q1 A) N4 R: A# j
    change += exchange_IO_Compute;
    7 X! J; X2 ~$ f- }compute++;3 K0 b) i* {( |2 P
    }& w+ I$ N' Q0 Z* _3 O# B$ S4 Y. y
    else
    4 X, b+ v3 Y* S) ?4 ?{
    - N7 J  a/ @' y4 @" J9 z1 F9 ecompute++;) Y# p8 P& [9 s: J( Q* a
    }
    ( I9 n9 l& S' |) q% T& D, R- M}9 n( l( h6 {3 ^1 U5 @/ j; m0 X. X
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)0 E/ Y& Q* w; ~- y& y1 P+ z
    {2 K9 }$ d  f% |

    9 J+ y. x. j" [: k( t! `( t, Ri=(*memory).p[0].ioNum;
    * {4 o) q' L; w# M+ @# oif(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed
    7 t0 p% f3 C" Y/ p; y. d{
    4 e' }" ^: s4 B1 W) X(*memory).p[0].flag=computing;
    . [0 t4 H8 ]- `# X+ d; u(*memory).p[0].ioNum--;: K% A% }7 k% ~/ P6 t9 |
    change += exchange_IO_Compute;1 D) N6 y2 a. P) k4 |
    waitio++;
    * U& v9 I! w/ J}
    ; f  h2 w6 _# T- A' m+ Q! H- P! L1 n" Z" Nelse
    5 A: s3 e1 R% W$ Y7 ]; S  f{
    0 g9 u) V& U$ uwaitio++;
    3 c+ P# _0 ?% w2 }" _7 m9 P. W0 K}% t; Y, d3 F6 D# o
    }
    ! U8 D+ V3 C+ s5 V+ t3 Helse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing). k1 x! k5 ^; M. z' a( }1 T
    {
    8 }) w9 x  [$ P6 l! i(* memory).p[0].flag=IO_waiting;# C5 C% P1 Y0 ^5 k
    change += exchange_IO_Compute;/ L$ f2 Q6 R+ m% y; V- s
    }
    7 {, N5 T0 f5 Z, T7 Y9 `else if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)
    % [5 U# G; s2 {  F. s! o+ l8 V{4 S( Y) m( P& `) m! S
    (* memory).p[0].flag=computing;: f3 l; Z$ F8 M, h# W( p
    change += exchange_IO_Compute;
    ! ]/ {" K( U  C}" C$ [* g% s0 C" G
    if((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0)  //一个作业已经完成
    5 z( m1 c& X9 _% q. n9 w0 Q{
    2 c/ l* W% o8 |( X(*save) = (PCI*)malloc(sizeof(PCI));
    " g$ f9 Q* Q1 b) ~$ k3 D# }(*save)->next = NULL;
    " M& d7 C& n  W  k(*save)->processID = (*memory).p[0].processID;! ^/ q9 F! L3 W4 W- M
    (*save)->comeingTime = (*memory).p[0].produceTime;
    . Q( F0 v  W: ]; T1 }! a2 ?) F(*save)->askMemory = (*memory).p[0].askMemory;; u' N! F. \* q1 P
    (*save)->compute = compute;
    7 X3 E* T) D) X+ e( p0 X4 w/ G(*save)->waitio = waitio;
    9 X, c7 L$ K) }(*save)->exchange = change;
    & D' t- Y" c0 I- w8 k0 U& b(*save)->completedTime = systemClock;
    5 E4 q( {$ U  B) e0 q$ K8 U. I(*save)->runningTime = (*memory).p[0].runningTime;
    2 G% n- J, Y, e4 _: l0 a( F0 E7 ^*spareMemory = MAX_MEMORY;         //*spareMemory + (*memory).p[0].askMemory;
    1 z$ W( \6 r2 F: bcompute=waitio=change=0;: Q4 q$ K4 j0 A+ b# L$ J+ Y  i
    computeLast=waitioLast=changeLast=0;
    . O# \1 x! P5 b/ j( ]High_response_ratio_s_to_m(&(*storage),&(* memory),&(*spareMemory),1,1);
    0 f8 k* j& _$ Hchange += exchange_process;3 h& t) M% D+ }' n& J
    return task_completed;
    ) ^( b, f" i! C' K% q& V/ T1 z}7 u" r& K5 _% d9 ^$ `" |- V4 [
    else3 ^" t9 w% z; A+ |
    return task_not_completed;' z7 o5 s, {0 `: x
    }
    7 s* l" w; r. X4 c% X+ `int High_response_ratio_s_to_m(processPool *storage,processPool* memory,int *spareMemory,int flag,int dispatch)* g( c: i: m7 p0 U  K9 z) V
    {% W) z- M! P2 r  N7 q9 F( r
    static int waitTime[initProcessNum],i=0,j=0;/ Z1 e( d; ~$ S  j, S
    static double HR_ratio[initProcessNum];
      \: e. E1 U3 S/ ]& @8 {+ w, ]if(flag==0)                    //初始化数组; Q+ H! H! K# p2 q5 X7 l$ i
    {
    # P$ V$ ?3 R$ T, Sfor(i=0; i<initProcessNum; i++)
    ; f* H2 T5 L! Y( p# t{
    # ^  O1 q+ `' h+ twaitTime=0;
    2 J( T" ]$ r1 y7 kHR_ratio=1;; X, t& m& h- S/ m! h7 j
    }
    " Q0 x8 X( G, E( ?. W8 [, o}
    % h$ X$ e6 I1 s! E' m; X9 r2 Rfor(i=0; i<(*storage).proNum; i++)  //等待时间增加,重置响应比
    . [; U  ^; A" ~+ Z0 N5 ^9 \$ c{, ?7 T7 X0 Z4 e
    waitTime++;
    6 Z; o; l* D  V" g, aHR_ratio = (waitTime+(*storage).p.computeTime+(*storage).p.ioTime)/((*storage).p.computeTime+(*storage).p.ioTime);
    6 q3 H4 Y2 u( t& U% _if(HR_ratio > HR_ratio[j])
    / z+ Z; v/ _. P' w) R1 Nj = i;: r  ~, q) o0 j) ]2 i
    }' {. E# }  ]7 E: q0 M
    if(dispatch==1)                    //需要调度一个进程到内存中执行0 K1 Z9 F$ J! X6 b$ `' t1 `
    {
    : C( q* r0 [+ W" d  Vif((*storage).p[j].askMemory < *spareMemory)
    % v- T  h- D/ c( i/ d4 \  M; Q{
    ) {- K0 Q8 |0 b" M' s+ o  }: a6 w(*memory).p[0].askMemory = (*storage).p[j].askMemory;
    1 N% u/ @7 c* E6 D' G0 ?4 p(*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
    ) t0 m& ]& D6 ~# G(*memory).p[0].computeNum = (*storage).p[j].computeNum;
      O7 o- W3 [) v5 ]6 I9 l+ y; M" E(*memory).p[0].ioNum = (*storage).p[j].ioNum;
    9 ?9 y( q: |1 u! W+ O. l& x(*memory).p[0].processID = (*storage).p[j].processID;; d1 x0 C$ O# ]  d
    (*memory).p[0].flag = (*storage).p[j].flag;" R$ q# M, k' @/ b* m
    (*memory).p[0].ioTime = (*storage).p[j].ioTime;( b1 d0 u  t$ N. z2 k- Z. `
    (*memory).p[0].computeTime = (*storage).p[j].computeTime;
    7 A  P9 w/ D6 V. P1 j(*memory).p[0].runningTime = systemClock;  q( L# m) t0 }4 T( k, D# g* ~
    (*memory).p[0].produceTime = (*storage).p[j].produceTime;
    : C5 y& G; e' ?for(i=0; i<(*memory).p[0].ioNum; i++). x5 |/ [( f% _; W! s: e  e; g" A
    (*memory).p[0].ioClock = (*storage).p[j].ioClock;; f9 X: X* B# r& M
    for(i=0; i<(*memory).p[0].computeNum; i++). F' y3 m* d! m( V& Y0 v
    (*memory).p[0].computeClock = (*storage).p[j].computeClock;7 O8 J: l1 q  T  }0 I9 W- y+ A! V
    (*memory).proNum=1;
    # p# Y) f3 l0 m*spareMemory = *spareMemory - (*memory).p[j].askMemory;
    7 X+ l6 P- H3 H, |3 K9 l# _produce_one_task(&(*storage),j,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程6 ?& {% q, P6 U# d
    (*storage).p[j].produceTime = systemClock;5 V0 f: y& q! I+ N9 f- f
    MAX_COMING_TIME = (*storage).p[j].comeingTime;3 T& m" D1 O0 u9 A( v. B0 `
    waitTime[j] = 0;
    1 d% q* a$ Y* I( N! BHR_ratio[j] = 1;
    * F7 h- O2 H+ i  b}
    0 ^8 J4 [4 Q  V9 L. Velse# G: v# @% j- L; g6 `& L
    {
    1 h: J, K. b6 o1 f4 X8 gprintf("A process ask for a memory overed the system capacity\n ");  D$ D3 S+ L. H8 N/ g
    exit(1);5 S7 S8 I, U# r
    }
    2 @' G. M) C% s4 b" m}
    ) s# x" e' D: Zreturn 0;
    4 B+ q. h  e0 a# Q" e/ Z% ^8 _}! q3 N+ ^- d% }! f- h5 n
    int PriorityDispatch(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
    9 D: B, s: Z! B! a, j" A{2 ^# r; W- }0 v# Y
    static int compute=0,waitio=0,change=0;
    * u3 o: d5 M. dstatic int computeLast=0,waitioLast=0,changeLast=0;
    8 N# @% ]# {( }% Hint i=0;4 `( z/ e( C* Z' m9 t
    if(draw==1)
    ) G) j, W6 x/ t3 d: K. |: n{
    & ^/ E, {, d) s- [9 \. a//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);( Y# Y/ p/ L" B- \- r
    drawPerformance_PF(800,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);. W0 x/ k6 y. a% ]% l) a  q
    3 I" @# L4 J! x6 {% h
    1 d: I+ \6 o% j8 |0 b3 U' F
    computeLast=compute;
    4 V9 w9 [' _' C6 SwaitioLast=waitio;
    6 k; Y' Q% `7 w. d  T! ]9 hchangeLast=change;
    $ q7 c+ l( J; L, H}
    / `! g+ r* Y$ d, B6 K4 T1 q: Uif((* memory).p[0].flag==ready)
    % q8 U! T7 a- n, y+ @; o/ c(* memory).p[0].flag=computing;
    & q3 ^: P+ b4 L5 Q% _& Gif((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)9 l; i: O+ V3 b4 `2 A* @
    {
    & i" y/ j# P" a0 E2 Vi=(*memory).p[0].computeNum;
    & ?4 _# [) N5 J' \5 Uif(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed" A; J. r$ D! X
    {  s8 [( T2 W9 {  J# d: x" b% q5 Z) N
    (*memory).p[0].flag=IO_waiting;
    ; e. T: _. z6 k. K" e2 I7 h7 a(*memory).p[0].computeNum--;4 A7 Z+ N3 k' G% e$ s0 R+ k) o
    change += exchange_IO_Compute;  J( X0 N4 F1 D/ H# J7 |
    compute++;
    / X; j( T! W1 m1 j. R}# D0 [+ E4 C5 N& M- \
    else
    7 r: T% Q8 F2 A8 f2 n{6 J+ J4 O4 T* @; }" R8 {/ ^; {+ ^
    compute++;
    5 f; V8 V+ e" l6 |}
    ( o0 a6 E) V. _}
    & [) j, d- h/ ?) S* pelse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)  W1 P1 \8 F+ v5 ^
    {- H8 y9 Q/ Z0 f8 z

    9 G* P3 M( X& y5 g9 v, q' Fi=(*memory).p[0].ioNum;
    + d& U$ ^- \  ~+ Kif(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed+ B) T5 J7 ?1 k" B( d
    {
    * I( a( O7 T- \2 r$ A(*memory).p[0].flag=computing;
    ' D- n4 W2 `! X& ~(*memory).p[0].ioNum--;) z+ v8 M  L1 L: D7 U. a
    change += exchange_IO_Compute;
    9 u# B3 G5 q. Ywaitio++;4 b: @' B2 f3 k. Z9 l4 R5 d; l
    }7 @' y+ f* [8 ^9 R
    else
    2 @7 [8 J5 G1 z* O) t( Y( x9 I{. _+ Y3 g7 d) F
    waitio++;
    ( u3 `, L; N, s( v7 y}
    0 e' |% c9 H" l1 K- I7 A- ], H}
    + E, E8 ~$ m9 C: f. \: O$ Belse if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)
    + _/ `3 ~) \) ?& K  {{1 _9 o% u' h% d
    (* memory).p[0].flag=IO_waiting;3 y* ?/ ^# b7 L  V. m
    change += exchange_IO_Compute;
    ' m- r1 K1 B' r6 N. ]}
    8 e8 U# x3 X* ]+ b1 l/ _, Q% D3 selse if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)8 o; Q* Z- c6 d  I
    {
    9 `. y5 A" U$ M' \+ n& g(* memory).p[0].flag=computing;4 H/ g; m/ B+ L, s! u
    change += exchange_IO_Compute;0 s$ K5 K- J8 X
    }
    , a9 d1 C8 ^. U  d4 pif((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0)  //一个作业已经完成
    " V+ v8 l, [$ F. q. y2 ?, M) R9 R{
    8 z- T4 f, Q9 c% S/ v! y/ V5 |(*save) = (PCI*)malloc(sizeof(PCI));4 B- R) S! J! s  H
    (*save)->next = NULL;* j  c  ^- Q: s1 p3 |
    (*save)->processID = (*memory).p[0].processID;
    * O: K8 d* w2 m# D  E! M# o! f! T(*save)->comeingTime = (*memory).p[0].produceTime;
    / G# W! f3 e* ?7 q& a& W! ?(*save)->askMemory = (*memory).p[0].askMemory;) E4 _( G% v) @7 p, g! F  E
    (*save)->compute = compute;
    - p: f4 Q9 L. u* }  R  M% I) E' V(*save)->waitio = waitio;
    ) |( [, }. z3 `4 Q0 @% m6 S4 E(*save)->exchange = change;
    ! ^: Z0 F/ O8 n' @4 B0 x. b8 j(*save)->completedTime = systemClock;, r0 [, B0 l4 h# c" B1 A
    (*save)->runningTime = (*memory).p[0].runningTime;  G) {  n& \' ]( s$ H
    *spareMemory = MAX_MEMORY;      //*spareMemory + (*memory).p[0].askMemory;
    / z) {$ i% Q) Y1 y  `5 ccompute=waitio=change=0;
    3 R! h, r4 i7 n0 x4 A- |computeLast=waitioLast=changeLast=0;; F* q+ E6 q5 n, u/ K7 C
    Priority_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));8 M- t9 _. x0 p5 _6 `
    change += exchange_process;
    & w8 g' ]' m( c4 S3 _2 ]return task_completed;
    ' b6 v; p& L6 k* ?* `}8 O, i; e1 Z, ?4 G5 Z. R& i) o
    else
    0 B( K0 H' S, g0 Q3 U' j; preturn task_not_completed;
    . M3 A) ~  S9 T}
    , V  {9 h( B5 a( d) e9 m2 Q' Jint Priority_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)# l, v+ ^9 w0 j) ?1 [, m% I
    {. r; w1 G* D# K2 |& e" h
    int priorityNum[initProcessNum],i=0,j=0;" i9 N" z2 J1 z3 `5 [; l
    double temp=0;
    ! G3 ?% D' x5 z) c5 X, ^0 O9 xfor(i=0; i<(*storage).proNum; i++)    // setting priority to each process
    ( h2 m% g# k. R. @, }{3 L4 ?- K+ [% Q0 p' w  u
    temp = (*storage).p.computeTime/(*storage).p.ioTime;, H) V" N: ~3 q( Q; ?0 Y& G
    if(temp > 0.8)% s1 J8 F) ~$ i8 A* r# R) M4 F
    priorityNum = 6;/ O" y2 T5 Z4 R/ e2 }7 j
    else if(temp > 0.7)2 e& E; J$ e" b8 h" |
    priorityNum = 5;
    8 C2 n! F0 @7 u* ^. V' k8 melse if(temp > 0.6)
    ( {4 Y3 n* L, e6 i2 UpriorityNum = 4;
    ) h4 W8 P, ]  ~* pelse if(temp > 0.5)
    5 I6 {7 V! x) T- W1 u( I* QpriorityNum = 3;: q4 _+ ^  h5 C
    else if(temp > 0.4)9 o/ \. q, Y- q0 V; X# W
    priorityNum = 2;  o: w) l) Q% y# ]6 L2 P1 i* _
    else- W# j0 P% a1 I( E7 O
    priorityNum = 1;( F6 T1 V& W0 {  z' o! o8 K
    if(priorityNum[j] < priorityNum)
    9 W$ Y5 i. m! {! Fj = i;" t5 Q% g  I- H' \0 a- A0 A, C  e9 T
    }8 ~" a3 G7 l* V3 R$ x
    if((*storage).p[j].askMemory < *spareMemory)$ r6 Y9 r0 O+ s9 i- G
    {
    ' @/ o  G* I( S" O(*memory).p[0].askMemory = (*storage).p[j].askMemory;) z- W* z1 @, D! H' `( F
    (*memory).p[0].comeingTime = (*storage).p[j].comeingTime;
    # D3 Z4 ?* w/ W/ h2 b(*memory).p[0].computeNum = (*storage).p[j].computeNum;( w3 ?8 }% H( Q! U3 ]8 }, p
    (*memory).p[0].ioNum = (*storage).p[j].ioNum;/ F' W  q; ~: k6 i6 I' r/ O& @
    (*memory).p[0].processID = (*storage).p[j].processID;8 e( j0 G( @+ ]1 e8 B) K3 C
    (*memory).p[0].flag = (*storage).p[j].flag;/ J6 S7 L/ @# R$ ^  y( K
    (*memory).p[0].ioTime = (*storage).p[j].ioTime;
      {! D0 T8 p0 c, T% ~: e2 b* r' l(*memory).p[0].computeTime = (*storage).p[j].computeTime;. }+ N4 H; k% Q# L. [) t# k
    (*memory).p[0].runningTime = systemClock;
    ' w6 G( Y" t" ](*memory).p[0].produceTime = (*storage).p[j].produceTime;7 }9 ^- P- t  `
    for(i=0; i<(*memory).p[0].ioNum; i++)5 M; X; s3 h* ^: w" u
    (*memory).p[0].ioClock = (*storage).p[j].ioClock;; p- x, l* s* p" m  h9 k  M
    for(i=0; i<(*memory).p[0].computeNum; i++)
    + c1 S, T' m4 e1 f(*memory).p[0].computeClock = (*storage).p[j].computeClock;
    2 ~* ^: {0 a* w(*memory).proNum=1;: J2 X/ \. T1 e  b  N2 S) X
    *spareMemory = *spareMemory - (*memory).p[j].askMemory;/ y1 Y( C/ j, U  |7 B4 _2 o/ k
    produce_one_task(&(*storage),j,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程+ t6 B- a- A* u% m
    MAX_COMING_TIME = (*storage).p[j].comeingTime;; Q; Y* G& i1 ~; _0 _4 A
    }* Q, u  s- r* R  d- W
    else
    / H  h: R+ Q3 i+ a9 m9 o. U{) b0 A& K" S8 U& K1 `
    printf("A process ask for a memory overed the system capacity\n ");
    " Z: Y3 ~+ Z/ U* u& n$ M0 E- Xexit(1);
    ; T! M, a' {  }}
    5 |/ U7 o. \) K6 |- A+ greturn 0;
    7 N6 _; R& ?% G9 l}
    7 F6 ?6 `5 m% `" x2 O# \int ShortJobFirst(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw); N, [- u' c$ a  F2 ^9 ~
    {
    0 K! _# X0 v5 [2 X( K* Ystatic int compute=0,waitio=0,change=0;
    - A! y/ P6 `' istatic int computeLast=0,waitioLast=0,changeLast=0;
    6 w$ K% @9 S, P! Wint i=0;
    , M4 j6 P, s, ~* S* c, a7 V- sif(draw==1)
    + f/ w7 U) t% b' ~4 i{
    7 {/ f/ y( x1 a" e/ u2 ]//printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);: |4 E0 m4 I1 W1 H7 r
    drawPerformance_SJF(0,325,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);2 W/ L5 h6 A: F
      Z- W, b; X4 c
    / Q  a$ p4 F. k( C# T- X; p2 e3 R! g
    computeLast=compute;
    / ~2 d/ Z7 d  M' JwaitioLast=waitio;2 `' y1 B) a3 @, g, i/ G
    changeLast=change;8 F& M# e: z: {) @' D
    }: C, J7 F2 z8 |( E' K
    if((* memory).p[0].flag==ready)( N9 b' q1 |9 s* M& M
    (* memory).p[0].flag=computing;+ X0 m0 g- H+ C
    if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==computing)+ U) ~, b% H! W
    {2 z/ e: w0 T- M' {) H
    i=(*memory).p[0].computeNum;
    6 l. t$ N8 Z& p: w) i: ]if(--((*memory).p[0].computeClock[i-1])<=0)// one compute tase is completed  _7 _- E0 |8 ?
    {
    4 q- Q# N" D) \& y" q, l(*memory).p[0].flag=IO_waiting;
    3 M3 `2 Z; n. d6 `9 B$ x7 j! C7 k(*memory).p[0].computeNum--;
    , l7 ^" D% b. I2 n) ichange += exchange_IO_Compute;
    + j0 @$ F3 S, \+ j( S, D; m- C3 Dcompute++;1 R" e" c$ Q. t5 u1 {% X: X' I
    }/ U/ g1 x4 j5 [5 k4 ]
    else* U" s$ H8 m# I9 `" r* |* r' l
    {0 ?8 s" S5 B4 z% r) _
    compute++;- N& m' m8 P7 D1 G: k' c  o
    }' P, w% U& h2 |$ x
    }3 H1 j; l( y( }& ]0 h, I7 `
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==IO_waiting)
    / v8 T5 H( U7 C  u& e& [5 q, Y{
    + I) w: b. S3 _! e0 I, R6 k/ w
    8 T; a3 w, M5 Fi=(*memory).p[0].ioNum;
    " w. h0 a' j: ?+ X2 yif(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed
    * x) p6 J$ J4 i3 b3 p! R{, z: D: |+ P+ [/ ]: E" f+ Q/ h/ X- c
    (*memory).p[0].flag=computing;% d7 S& _2 ?: L# A1 X/ Y
    (*memory).p[0].ioNum--;6 f3 N$ w% S6 _% l
    change += exchange_IO_Compute;
    % s+ Y$ ~- M+ u6 L+ `waitio++;
    ' f" w- L: S; M7 a1 P}4 e. h2 i& v* P
    else
    - k- \0 R6 U# M{  Q- P8 \$ j4 U: Q, s
    waitio++;
    9 E; G7 p$ ?3 T$ f$ Y" P: T}
    . H/ @2 @& L$ x# Y}: V5 f0 }& x# i9 u6 o3 J
    else if((* memory).p[0].ioNum>0&&(* memory).p[0].flag==computing)
    7 }9 }) e# D0 m4 R* {0 U. U{
    " j* E; }/ Y$ P, X4 w! S(* memory).p[0].flag=IO_waiting;
    0 g3 \& g. `( ?$ m3 h' Ychange += exchange_IO_Compute;
    ) g& n2 s4 P' E1 y0 i8 w}
    : ^) Y3 w7 A. B2 B( h' eelse if((* memory).p[0].computeNum>0&&(* memory).p[0].flag==IO_waiting)8 J! w- ^) `+ F# \! ^
    {* R# U" N# ?# D0 F
    (* memory).p[0].flag=computing;& J. r8 b# p1 o! w/ j
    change += exchange_IO_Compute;# O0 {  w5 x6 ?; u. S. ]3 N
    }
    ) b, x4 R& Z% {+ _! K' |if((* memory).p[0].computeNum<=0&&(* memory).p[0].ioNum<=0)  //一个作业已经完成
    ! [7 z( R  g7 S6 w5 x{4 j! R& z' u/ \! [$ }  L3 }; }
    (*save) = (PCI*)malloc(sizeof(PCI));/ H5 h9 K6 l! [8 c3 I) y5 e8 u
    (*save)->next = NULL;
    / }; p0 e/ n' k, l3 g" Z* o(*save)->processID = (*memory).p[0].processID;
    ; ]. v6 @% w9 k7 C) ~% W(*save)->comeingTime = (*memory).p[0].produceTime;
      x7 V% c. l6 A( Q9 w: F1 J(*save)->askMemory = (*memory).p[0].askMemory;# |" y0 w% y) i( ?# @8 B% P' V1 b5 S
    (*save)->compute = compute;! C$ v; |# V; v/ o/ ^" h
    (*save)->waitio = waitio;
    , e) ]9 K1 @5 }, {(*save)->exchange = change;
    * W3 @; k9 t; n8 J; X) {" B; x6 U  p( [(*save)->completedTime = systemClock;( Y' z, p. M1 o, [; @: N- Q
    (*save)->runningTime = (*memory).p[0].runningTime;8 s+ P* S! h% S! \# \# s! A) d
    *spareMemory = MAX_MEMORY;//*spareMemory + (*memory).p[0].askMemory;
    9 m( U, M% J7 |( Wcompute=waitio=change=0;1 C* V( K+ D2 r% l9 L% F
    computeLast=waitioLast=changeLast=0;3 q3 S; E/ _# t  e* k
    SJF_storage_to_memory(&(*storage),&(* memory),&(*spareMemory));1 y: F+ z6 a# _# g  H" L% c
    change += exchange_process;$ w, F/ O* B6 j8 o( ?8 M( v0 d; H2 I
    return task_completed;: U! J$ Z/ h5 ~9 ^4 ]% |% _! }( u
    }
    " H% B9 v+ u, \. w0 N$ ielse- d* b4 W& r6 Y0 H8 j8 ]1 r) T
    return task_not_completed;  s8 N. j1 B* |; g
    }) o+ f! j0 H- N
    int SJF_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory)
    $ Q; a- N7 A* d) @: a( O! y{
    - ^% v* x. t$ {. J: Q) J7 ]5 `# I* L) Eint i=0,j=0;
    $ l1 [, Z7 \4 }% E% Xfor(i=1; i<(*storage).proNum; i++)) U: ~# q9 {0 X; g& O
    {
    , J( x% k2 \6 A* o- D/ @if(((*storage).p.computeTime+(*storage).p.ioTime)<((*storage).p[j].computeTime+(*storage).p[j].ioTime))+ h6 E/ x* C6 M- Z" D
    j=i;/ B! S& y/ F( q7 e% e- Q
    }  u4 B# j0 n! [/ J/ Q3 U! [- U7 f
    if((*storage).p[j].askMemory > *spareMemory)* L# j" r( H5 x/ }! K$ K/ Z
    {5 x" r1 F7 M- j
    printf("The memory asked is overflowed than the system memory.\n");9 a, |9 k/ F1 N2 L
    exit(0);
    % g2 \9 l% v8 y' s}1 m) V* c, u3 o5 P* X& R7 ?
    else
    2 @( Y" b; ^! Q8 L+ X6 J0 a. x* h{
    0 _% p; t% D. P+ K) [- G# ~(*memory).p[0].askMemory = (*storage).p[j].askMemory;3 A& v% \$ c! n6 t
    (*memory).p[0].comeingTime = (*storage).p[j].comeingTime;% ?$ s. {! e; Q. {( Q5 a( d
    (*memory).p[0].computeNum = (*storage).p[j].computeNum;7 }9 N% H: r$ ]0 c# z/ Z4 {' r5 e4 [9 P
    (*memory).p[0].ioNum = (*storage).p[j].ioNum;
    2 v) Q" d) s) S$ x3 C(*memory).p[0].processID = (*storage).p[j].processID;
    ( ^9 R* ?( n+ ?6 E1 N4 M(*memory).p[0].flag = (*storage).p[j].flag;
    2 m# \% b" Z% {, P! g4 K(*memory).p[0].ioTime = (*storage).p[j].ioTime;
    ( G4 ?8 y2 T8 _: G6 `: ](*memory).p[0].computeTime = (*storage).p[j].computeTime;
    % B9 t: _7 M: t(*memory).p[0].runningTime = systemClock;
    1 k0 _3 N5 t( n: f# t9 T0 T0 o* ~8 u! T(*memory).p[0].produceTime = (*storage).p[j].produceTime;) ^9 g3 [# q1 l7 ?* j8 l4 U$ r  S: \
    for(i=0; i<(*memory).p[0].ioNum; i++)
      j; W+ g+ R; f! w9 c; T/ j* q% g(*memory).p[0].ioClock = (*storage).p[j].ioClock;# e% ^3 f. M) q; ?# a5 x
    for(i=0; i<(*memory).p[0].computeNum; i++)
    1 M: |1 W9 G* L1 K' N6 P/ D(*memory).p[0].computeClock = (*storage).p[j].computeClock;0 T: U) `4 L4 V3 E
    (*memory).proNum=1;
    6 S; m, m' Y  z*spareMemory = *spareMemory - (*memory).p[j].askMemory;
    3 K1 R. n. m: B# V; s6 rproduce_one_task(&(*storage),j,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程- b  F6 _2 M1 I/ K
    MAX_COMING_TIME = (*storage).p[j].comeingTime;
    . W5 S# Q( |! Y2 H. _# N5 o}
    % S  Q8 E7 H3 }# s8 h8 \return 0;
    2 u) K0 C5 j2 u; n}
    $ ]) X, `+ f/ e: L) ?. F0 R+ _' u2 \int TimeTurning(processPool *storage,processPool* memory,int *spareMemory,PCI ** save,int draw)
    5 z8 ~! d# U) w* f3 [* o{! t5 Z( H, d6 e4 x4 I
    static int compute=0,waitio=0,change=0,clockSegment=100,poi=0;' N6 W) F! E. Q
    static int computeLast=0,waitioLast=0,changeLast=0;
    . Q, a+ q7 N: Q2 T; l/ B# H0 Aint i=0,j=0,k=0;  N* g- r; X8 L6 ~9 S+ g# D& _, C
    if((*memory).proNum<=0)% d* O% E" K' B. O
    TimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),-1);
    " b& i8 o! P0 r$ ~9 X! y+ f5 t0 `if(draw==1)3 E. \' ]0 B" d1 D6 M
    {/ D5 s! e3 q" k' X3 o8 G9 A6 n
    //printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);
    $ [  M# G1 Y# h8 F: [) a$ L. EdrawPerformance_TT(400,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);
    7 V4 g% s* Z  p7 }) U
    7 \5 {+ w2 ^# e6 [6 V- s7 G$ r& I" X# ^" O
    computeLast=compute;
    + I& X/ ~. E$ U% X7 L6 r& c: s% T3 ^waitioLast=waitio;
    6 I+ x7 p. w  w- a2 UchangeLast=change;
    4 r+ ?* ~  u' a& M8 P' W$ ]}9 d! ?, h& ]+ ~9 V, B
    if(poi>=(* memory).proNum)# l4 D: ~. f: Q* ~) K8 ^
    poi = 0;
    ; ]. l; |0 ^7 N9 Rif((* memory).p[poi].flag==ready)
    : [$ K5 j. n# {7 I& n(* memory).p[poi].flag=computing;8 K- p' _; m: b- ], W
    if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==computing)
    - G! f8 v) o6 {# A8 p{
    ( e$ b, X) Q) x' `i=(*memory).p[poi].computeNum;! B4 A' B' \) F
    if(--((*memory).p[poi].computeClock[i-1])<=0)// one compute tase is completed' Y9 D  O  @8 f6 o+ s, N7 M
    {# |4 f" x- A/ s6 j
    (*memory).p[poi].flag=IO_waiting;  C" F7 u' Y: @9 T5 S
    (*memory).p[poi].computeNum--;
      w  V) x( Z+ r. t  d- @+ s4 B' Schange += exchange_IO_Compute;
    " {3 s0 V) z1 Z- J1 A8 _! scompute++;
    * {4 h: k- B2 i: H7 {}
    2 f; o; ?" _# {1 I" Xelse+ q/ I1 y0 C' \& _. ~3 ]
    {( S+ c2 h; {) Y6 ~. b& W* h( s) D
    compute++;
    1 f$ a; r  I5 p}* D1 t8 i  g* d( O5 T0 u
    }
    1 N# U0 I6 V3 E$ K$ b- B1 ^else if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==IO_waiting), i& K. |' Q5 X. ^( U
    {
    ) ^- S4 j0 b. Q; ]( F3 C1 S" s3 B$ h" L
    i=(*memory).p[poi].ioNum;
    - d% a/ l6 u( x, }6 Y* I( lif(--((*memory).p[poi].ioClock[i-1])<=0)// one io tase is completed
    ' m$ `& p4 G5 u' Y{" b( o  S3 u7 k3 ~; p
    (*memory).p[poi].flag=computing;* @$ @; `3 _; R1 P; p2 I1 s& U
    (*memory).p[poi].ioNum--;! R$ g9 f' K; {* i. D
    change += exchange_IO_Compute;
    " g, n4 ]8 V0 V7 R$ zwaitio++;, O1 n& Q; [! g  P! Q
    }
    # n# _6 i7 E5 o. X& e4 m3 telse$ P4 Q" i: F7 o9 P( C4 n) Z
    {
    9 R9 {* `7 g9 U* R) zwaitio++;4 H% M; T7 L2 Y3 S+ z. z
    }
    ( h+ y1 ^4 e' p}
      Z7 L3 \% A6 R! @8 j# I9 Kelse if((* memory).p[poi].ioNum>0&&(* memory).p[poi].flag==computing)$ a4 d1 }( y* ^, _+ n7 ?$ A0 C3 F
    {
    2 i( X( L$ k6 O4 T1 p- K8 T(* memory).p[poi].flag=IO_waiting;8 c1 ^- V! G, W& [4 a0 o3 ]1 |
    change += exchange_IO_Compute;
    2 Y  @) [+ L+ ~1 \$ f}8 U$ t/ Q9 O  k4 O
    else if((* memory).p[poi].computeNum>0&&(* memory).p[poi].flag==IO_waiting)
    2 a4 ~& `# G5 `4 ^, @- s# R; |1 @{* J- v" x. [" G! d
    (* memory).p[poi].flag=computing;
    4 Y: W: k% V  _+ J0 v# o. _/ b( [" ?change += exchange_IO_Compute;6 ?* i$ q+ D0 B) `  X
    }
    + @$ s' D( ~! [1 @9 G& A1 J( Kfor(i=0; i<(*memory).proNum; i++)  //其他等待io的进程可以并行推进0 s: d% y& m9 r# @
    {
    # ^# Y2 \( ?2 n$ X# Qif(i!=poi && (*memory).p.flag==IO_waiting)5 L2 Q$ v6 ]! l  _. Z- S( D! C( y
    {
    4 e8 z+ j8 \' d1 n0 Gj=(*memory).p.ioNum;
    % v' D+ q; r/ E/ A1 |if(j>0)
    1 d# y* v0 V& G( r) z% n; K$ ?" z$ v{. O7 e2 n6 w& r
    if(--((*memory).p.computeClock[j-1])<=0)// one compute tase is completed/ L; v  W* X9 N; o
    {
    . k/ p; I. @, F6 i6 e(*memory).p.flag=computing;
    ; }# r$ M1 e2 L7 l  z# n(*memory).p.ioNum--;
    3 z6 ~9 P/ R1 r% Uchange += exchange_IO_Compute;/ }% _& }/ D9 c' l8 H9 V
    }  y/ s: R, t4 `  C% @
    }+ q3 W' a7 f. Y" o' I, f1 J
    }
    " y1 B7 Y3 R- P6 K}0 `* Y$ k$ N. g# S* a
    for(i=0; i<(*memory).proNum; i++)  //处理已经运行完毕的进程% y' j8 v& M3 e1 z" W; C) n; z, U8 G0 v
    {
    " c) u' p( ~. ~3 z# K; wif((*memory).p.ioNum <= 0 && (*memory).p.computeNum <= 0) // a task is completed
    # Y  p2 ~; E; {9 I) P5 p! @{: Z9 c  x4 I# H5 A8 o  D
    (*save) = (PCI*)malloc(sizeof(PCI));2 m$ \5 t- _$ `/ {/ w% J( q
    (*save)->next = NULL;9 D* T8 W5 n2 a
           (*save)->processID = (*memory).p.processID;! Y5 O+ f- j; S5 R
    (*save)->comeingTime = (*memory).p.produceTime;
    - |. X0 L3 b/ B+ \- N* I6 K: g(*save)->askMemory = (*memory).p.askMemory;
    $ L  U' m( `* s7 Q9 _(*save)->compute = compute;
    3 U- V5 P+ P9 {. G(*save)->waitio = waitio;& i8 o; d9 O( d6 m# K
    (*save)->exchange = change;+ _; w6 D2 o" j6 @+ }  t
    (*save)->completedTime = systemClock-(*save)->comeingTime;
    9 P0 p2 p- N, Q7 ^# n(*save)->runningTime = (*memory).p.runningTime;
    ; D: [! F( s4 I5 |(*save)->completedTime = systemClock;
    6 \2 `1 Q) H& Y0 I+ B*spareMemory = *spareMemory + (*memory).p.askMemory;9 [' b+ m. u# D/ l2 i1 |0 R, }
    compute=waitio=change=0;: w6 P) ^7 j4 M( _$ V
    computeLast=waitioLast=changeLast=0;, [/ ?  P/ m" A0 q. {7 v
    if(TimeTurining_storage_to_memory(&(*storage),&(*memory),&(*spareMemory),i)==1) // 调入一个新进程进入
    % f6 h0 \' Y/ y% h' r; [1 d! I{
    : h  M+ Q: [9 Y1 [6 r5 T& uif(i==poi) //占用CPU的进程已经运行完,将时间片分给其他进程
    3 u6 Y! m( x& e% p2 c% ?3 {{
    , L. q6 y' o; \7 i) Q  w% R# G$ Opoi++;. v. R' ?% H0 Q& k6 Y' o$ d7 q7 {& o
       clockSegment=2000;' s5 ^3 b  O& e
    }" Q& o, V1 {& x7 c5 X
    }3 K& [; q+ C8 o) T
    else  //没有足够内存调入新进程+ U8 s: @# Q  s* C; k- w1 J7 Z
    {" b4 J- g) @; j. C" }# j4 Z# d+ ~
    if(i < (*memory).proNum-1)9 h- k7 n. B( C, \3 O% T. E* C
    {
    ) b$ M- L0 s$ f! k# Q" n3 l& Efor(j=i; j+1<(*memory).proNum; j++)! R- {1 o0 P( h* j# Y% f
    {
    3 c# O7 E, _1 g' C; f(*memory).p[j].askMemory = (*memory).p[j+1].askMemory;
    ; T" y0 E1 k5 X: Q2 B( Q0 M(*memory).p[j].comeingTime = (*memory).p[j+1].comeingTime;7 `* f3 B& H5 x8 N  z4 I: m% t3 I
    (*memory).p[j].computeNum = (*memory).p[j+1].computeNum;
    % r. U/ h8 Z, z5 b7 t1 R; w(*memory).p[j].ioNum = (*memory).p[j+1].ioNum;
    7 A9 I; }5 Z- G+ H) G: l( X(*memory).p[j].processID = (*memory).p[j+1].processID;
    3 K7 H3 t) |0 P9 y4 h. a(*memory).p[j].flag = (*memory).p[j+1].flag;- ~8 T2 U" H5 O$ {. K
    (*memory).p[j].ioTime = (*memory).p[j+1].ioTime;/ q5 K7 W. l8 ^5 b; u
    (*memory).p[j].computeTime = (*memory).p[j+1].computeTime;
    - [" p% y% d1 b4 S- G6 o(*memory).p[j].runningTime = (*memory).p[j+1].runningTime;
    4 ^& s2 E2 ]  E& y3 V, O  U8 M, M(*memory).p[j].produceTime = (*memory).p[j+1].produceTime;
    ' f8 x: e1 ]9 L6 }9 f- M(*memory).p[j].completedTime = (*memory).p[j+1].completedTime;5 C1 x2 R/ g. T, n! [& q) f7 j
    for(k=0; k<(*memory).p[j].computeNum; k++)# p% A) O. f2 t' J: _: C) A
    (*memory).p[j].computeClock[k] = (*memory).p[j+1].computeClock[k];
    ( h( C: b9 S. p. ]' |for(k=0; k<(*memory).p[j].ioNum; k++)
    2 q+ ?* p: V4 |. y8 L(*memory).p[j].ioClock[k] = (*memory).p[j+1].ioClock[k];
    $ _' }( l) e" o0 `}
    : E# G- ^& w& @4 e  Uif(i<poi)/ \" [8 R: V! b' O, L  W
    poi--;# {3 v7 I  A- D4 e  A' ~0 ?
    else if(i==poi)! _! ?$ M9 X8 w! R- G
    clockSegment=2000;
    0 K9 t8 h! F9 a9 w$ s! K3 }" `0 ~}* Z, w: {( K" a& P/ P( g
    i--;) m) }7 D7 n  y. I3 Z( e
    (*memory).proNum--;7 B0 r: o# I0 F, R3 @& `
    }
    + \  P0 p% y$ G8 P- O/ l& Freturn task_completed;
    : Z- X; `4 b) |8 K, D}: F( }4 f4 P3 z+ T4 X* J
    }1 F$ c) y- p; [
    --clockSegment;0 h. g& r8 ^3 l# w$ }0 I
    if(clockSegment<=0)
    7 b- i# }. ^8 x: k# d$ W{1 M: ~- F' x' n* ~
    poi=poi+1;! Y' s3 f5 q6 Y8 d, A; P
    if(poi>=(*memory).proNum)
    8 z( e+ |& R7 o( l) i3 mpoi=0;
    ! q6 i' P/ F. TclockSegment=100;
    6 S. J1 J" C, E6 _' U: @}) m  o9 ^5 P0 }  H, R
    return task_not_completed;4 V. I8 B0 A; y) V
    }
    1 C0 g8 M: v( O; b7 @. Nint TimeTurining_storage_to_memory(processPool *storage,processPool* memory,int *spareMemory,int pos)- X/ `. X) B9 r& A  Z
    {/ P0 L' ?' o% |* O6 \
    int i=0,j=0,k=0,flag=0,translation=0;. c# m$ q' L3 {5 Y& i
    for(i=0; i<(*storage).proNum; i++)1 W) O/ j1 T( @; H+ c" k
    {( ?1 h! {" _$ Z0 k
    if((*storage).p.comeingTime>MAX_COMING_TIME); b1 Z, n4 J2 _- a
    MAX_COMING_TIME = (*storage).p.comeingTime;
    ! ?+ b- w/ ^) @. F( x& K) _}" |5 Q; }1 s; _; N
    if(pos>=0)4 U  B& }- o0 t) i
    {3 P/ o# S3 Q* Y
    for(i=0; i<(*storage).proNum; i++)
    ! B: K7 ?# f/ u9 b{
    ! P  s& P" `# ~$ X! G$ u2 L$ mif((*storage).p.askMemory <= *spareMemory)% V4 `# h' i  Q& p# ~* f; R9 E3 n
    {
    : v3 o2 A4 k' k. }7 o" x" b# X4 Rj=pos;
    7 {; f6 k- ?6 l$ P0 x' t(*memory).p[j].askMemory = (*storage).p.askMemory;
    ' t" t* P5 \7 a( K) U5 |(*memory).p[j].comeingTime = (*storage).p.comeingTime;
    $ Y1 g# F1 N3 d4 h0 _(*memory).p[j].computeNum = (*storage).p.computeNum;
    0 n; K6 j, Z  k9 p# s# R2 S(*memory).p[j].ioNum = (*storage).p.ioNum;
    ) F. E6 t/ G6 H% Y* d5 N) s; o( _; s! j(*memory).p[j].processID = (*storage).p.processID;
    ( g. H* I2 |7 O( Y3 S3 [2 L(*memory).p[j].flag = (*storage).p.flag;
    # H: l6 m2 o9 R(*memory).p[j].ioTime = (*storage).p.ioTime;
    $ B; _2 r: q3 @/ m, H(*memory).p[j].computeTime = (*storage).p.computeTime;- t5 R+ e3 V( s1 ?7 ?5 e
    (*memory).p[j].runningTime = systemClock;, y( D2 a( T9 W
    (*memory).p[j].produceTime = (*storage).p.produceTime;
    / o  r! j& [6 Mfor(k=0; k<(*memory).p[j].ioNum; k++)
    - W/ b" w7 F) U5 u(*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];
    ) @9 I# u' i, L& l" X& Xfor(k=0; k<(*memory).p[j].computeNum; k++)
    7 ^/ l( B, B: [! d(*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];4 E0 V0 V( @6 G
    *spareMemory = *spareMemory - (*memory).p[j].askMemory;, k; S' c( A! ?# o, P
    produce_one_task(storage,i,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程9 ?3 o: r3 j" e- ~; `# E) Q
    MAX_COMING_TIME = (*storage).p.comeingTime;8 {8 }! n1 }& m; i
    translation=1;
    ; P. v8 u+ D. p5 g& xbreak;! w. L- \, L, E5 s  C
    }
    ( h8 t7 h, f3 [! e/ w! \- B}
    4 Q/ x7 _/ f3 U% B9 g}
    % X+ o. l8 V. y) Z1 R/ Melse
    + Y* D  T# }( ^{
    8 ]8 n! M1 `3 |8 wwhile(1)
    4 B0 `& v) N1 _) D% R{4 C  I' _6 g; r: r
    flag=0;/ [( j: d$ \6 U( `
    for(i=0; i<(*storage).proNum; i++)+ P. @, Q/ q4 i9 |1 Z- a8 c/ ^* T
    {! T- e- H0 W( W8 t
    if((*storage).p.askMemory <= *spareMemory)& x9 f. b9 L, `/ D3 w0 C0 H! P2 n
    {
    % f$ L+ I4 }, w" {j=(*memory).proNum;& H# b2 e: Y/ E5 M8 z' x. n
    (*memory).p[j].askMemory = (*storage).p.askMemory;
    2 x0 ]5 N+ F4 K0 v(*memory).p[j].comeingTime = (*storage).p.comeingTime;$ r* n* t& W) [8 o/ ]
    (*memory).p[j].computeNum = (*storage).p.computeNum;
    " s+ R0 y. |  e+ {$ G4 j  L(*memory).p[j].ioNum = (*storage).p.ioNum;$ M; j+ q% F8 ?
    (*memory).p[j].processID = (*storage).p.processID;# j( y4 `  B) E& B
    (*memory).p[j].flag = (*storage).p.flag;
    ' \9 T5 S+ Y) Q  y' `$ M(*memory).p[j].ioTime = (*storage).p.ioTime;
    3 ]& s* N/ x3 X2 e(*memory).p[j].computeTime = (*storage).p.computeTime;# H! q0 @- q. Z1 R0 J" L) C, H9 `
    (*memory).p[j].runningTime = systemClock;
    3 r' r$ M0 g: X$ Y(*memory).p[j].produceTime = (*storage).p.produceTime;
      ?: Z3 T1 p  x3 y8 W) Hfor(k=0; k<(*memory).p[j].ioNum; k++): I1 E3 w% K/ z6 ?. b/ U
    (*memory).p[j].ioClock[k] = (*storage).p.ioClock[k];
    ) x$ w% a8 E: L  k+ P/ tfor(k=0; k<(*memory).p[j].computeNum; k++)5 t! m2 y& u! z+ L
    (*memory).p[j].computeClock[k] = (*storage).p.computeClock[k];7 Y% z: W, k" q; f
    (*memory).proNum++;
    9 d1 N: \$ ^' v; t9 }2 p*spareMemory = *spareMemory - (*memory).p[j].askMemory;( T8 k! _7 q5 p( W$ @  v
    produce_one_task(&(*storage),i,ID_FIFO++);           //调入一个进程后,再在进程池中新生成一个进程
    : @. u+ a3 }0 _' W) cMAX_COMING_TIME = (*storage).p.comeingTime;( U5 C& x6 Y* _. X$ j
    flag=1;! M8 x1 q( E" N: x
    translation=1;
    0 N# [( Y7 B) n$ u- P}3 [, F( s0 Y, g4 Q# B5 @2 E
    }- X/ h3 s9 }1 y9 n8 }8 _$ x$ M# W: l
    if(flag == 0)
    ) b3 H+ K3 u) Y# V1 p9 Obreak;
    - ?  x$ Y, r# @' i* d5 o}, Y5 |3 d5 U9 W' z& Q* r
    }; d$ K. Y* W# H
    return translation;7 o0 J( y$ ?; d, G+ M$ {) C' A) J* f
    }( Z8 F: O6 z0 j8 v" \
    int FIFO(processPool *storage,processPool* memory,int * spareMemory,PCI ** save,int draw)
    , r5 }+ D+ Q6 c* C{$ s7 P+ f# |5 g) {6 q
    static int compute=0,waitio=0,change=0,flag=0,flagiocpt=0;4 d. [. k) x2 ?) O
    static int computeLast=0,waitioLast=0,changeLast=0;
    + ^  m" Y" v8 B1 p# Hint i=0;
    7 |# Y; L2 J) j! m' Wif(draw==1): b; p4 z7 g' ~3 \/ l1 k$ v  F
    {) Q* K! M! \' g- f- G- e
    //printf("%d %d %d\n",compute-computeLast,waitio-waitioLast,change-changeLast);& u! _9 C9 ]) r: w9 J8 w
    drawPerformance_FIFO(0,0,MAX_MEMORY-(*spareMemory),compute-computeLast,waitio-waitioLast,change-changeLast);0 ]( ?: o# Z5 h; D- S

    " q2 C* i; F+ M* d1 t
    4 F4 A% x7 k0 m" W' mcomputeLast=compute;3 w- i; }4 M9 }) T- }8 h1 Y) x; j
    waitioLast=waitio;
    - E3 \# V7 @/ d: l4 _changeLast=change;
    , B) t' J; E. U& V! X}& R4 q# D$ t% u" X
    if(flag==1)  2 P; t; Q5 w2 D
    {5 k- W& c6 V! h7 Y; `' E. D& Z
    if((*memory).p[0].ioNum>0||(*memory).p[0].computeNum>0)  //task is not completed) g; Z4 N- \- H
    {
    ' a( f- Y' K) \7 ~' o9 h; z3 b# d: L# yif(flagiocpt==0)   // implement compute% {6 g0 s+ [, B' c+ k
    {
    4 H% @( h* `) \( G* r+ j. Ui=(*memory).p[0].computeNum;1 s" G1 ?- |/ @- T& i: E
    if(i>0 && (*memory).p[0].computeClock[i-1]>0)2 B& {- B4 S- U! a+ q1 C
    {
    4 w/ n( o  e: y9 E. d3 sif(--((*memory).p[0].computeClock[i-1])<=0)// ome compute tase is completed
    * A. E* z; Z4 {, R; j9 d2 H{  _# y8 W8 U  J2 Q7 ^8 d, l9 L
    flagiocpt = 1;
    ' R; ^8 `0 i' D(*memory).p[0].computeNum--;
    / |3 g0 Q9 S7 u. \) g! o: a+ N; v( }change += exchange_IO_Compute;2 a! j% @. d5 I+ B0 D2 P; N1 D% ~
    compute++;
    : Y2 `$ z) Z: Z5 X}6 j4 |; F) R$ D. \" L5 o" e8 l3 Y) g
    else
    $ U( \5 u8 j/ @( kcompute++;
    , y* T( @/ z5 a, a7 W& M0 b8 @0 z1 h1 ?% ?/ ^9 U
    }
    & U1 b* y& z& ~6 O6 d2 ?else
    ) O+ @( o: M- P" d" j# P! z6 tflagiocpt = 1;/ B# E6 S( i/ o  ?) B
    }( Z/ T: C9 {+ K0 t  f0 C. ~
    else  //wait io8 C+ ~" ~" q9 ]6 U
    {) ?8 r! Q4 t7 }; A
    i=(*memory).p[0].ioNum;
    - ]% h* O1 {" o1 ~9 |; Z, N) m  M9 e3 Uif(i>0 && (*memory).p[0].ioClock[i-1]>0)
    4 R8 u9 U  T& V+ Y. w, }{
    8 U+ [8 ?: N* s1 I: D+ |if(--((*memory).p[0].ioClock[i-1])<=0)// one io tase is completed$ o& R( \! f: K2 `5 Z: R# S( C0 Q
    {$ o4 G' Q) |9 y/ |% T$ Q
    flagiocpt = 0;
    9 ]3 l8 ?1 ^( Y9 E(*memory).p[0].ioNum--;+ [$ ~2 K8 ]  I2 Q/ }& ~/ J4 Q
    change += exchange_IO_Compute;
    9 v* x. W8 [$ Q9 q; a8 ~9 @waitio++;8 t* s( h; c+ ~) `' D+ T
    }
    - Z. p+ Q. \" Q* W0 xelse, S) R, q* @8 L" t6 `) e9 q
    waitio++;, w& L, f: O% C) B5 |

    % G- ]& C! v. a0 m1 M2 J2 L* q}' v1 J- d0 v; `+ o) F9 p# U  r) j
    else+ |% s2 u' R, {
    flagiocpt = 0;
    5 y1 k3 I" P; M5 p4 h2 o! {* a}8 u( h- s! p1 U0 j
    }* y( P2 ^; `. ]1 N8 i2 s* l: q9 @
    else  //task is completed  e4 {& t" G" N% X
    {
    - q5 P7 n3 U" V' F  v(*save) = (PCI*)malloc(sizeof(PCI));
    $ b% X% z2 e# w(*save)->next = NULL;& N5 s: e; a  ?
           (*save)->processID = (*memory).p[0].processID;
    5 I$ n- q! g( p% K! w4 f$ N. r: f(*save)->comeingTime = (*memory).p[0].produceTime;
    " F4 w9 q+ ~# r5 N* ]5 G" P/ `+ v(*save)->askMemory = (*memory).p[0].askMemory;# ]  ]+ o. ?. `/ A+ |5 C
    (*save)->compute = compute;
    " I9 L  `. [" P6 l(*save)->waitio = waitio;; q! l) F0 D, K7 |) z% I: x1 Y
    (*save)->exchange = change;8 O/ U" l5 R3 J
    (*save)->completedTime = systemClock-(*save)->comeingTime;
    - t+ [$ y( h+ _(*save)->runningTime = (*memory).p[0].runningTime;, ]$ Z9 D% G. p, a1 q) w2 D
    (*save)->completedTime = systemClock;
    . W- [& Y0 z* W( L) ?//*spareMemory = MAX_MEMORY;4 |1 _3 K* s3 e* t
    free((*memory).p[0].ioClock);. }* B4 n' y3 L; x7 U' T
    free((*memory).p[0].computeClock);
    . G  a3 W5 E2 K  A9 N2 \free((*memory).p);
    9 L6 ?- ^7 ?2 pflag=0;
    ; Q/ {) e) z' O* Wcompute=waitio=change=0;
    ) @( m0 J8 A& y) i! `2 i/ j8 Z9 VcomputeLast=waitioLast=changeLast=0;& j  Z, r! g2 J& J5 Y/ e7 V# _
    return task_completed;8 K# y& P- B/ d% B
    }/ [: A- a9 _$ X
    }
    ' w- i( I8 r: Y! B: s/ Lelse         # I% E- f8 ~4 Z7 I. W6 G
    {1 y/ P4 O+ x, K7 k8 T: b( g. Y
    FIFO_storage_to_memory(&(*storage),&(*memory),&(*spareMemory));
    8 ^- H+ u( H- t; Nchange += exchange_process;8 w3 z0 D; f5 O/ M; E0 v3 D& L2 z* K
    //*spareMemory -= (*memory).p[0].askMemory;! J0 P* W2 U4 X0 I4 G2 d) [" g
    flag=1;
    4 x' {+ [4 A  J) k//showProcessInf(*memory);' ]7 g6 Q  ]9 S
    return task_not_completed;  {0 T0 m$ D1 m% v3 g
    }: F& c) O0 M8 T! e- D( P' v! G
    return task_not_completed;& i* R+ E/ \: b0 \/ ]. s
    }5 C0 ^; T1 E* O! h% k+ P# m# N
    int FIFO_storage_to_memory(processPool *storage,processPool* memory,int * spareMemory)) {2 c$ [9 E0 ]( Q( l
    {
    5 F7 [' @8 _6 mint i=0,j=0,k=0;
      ~- n4 \0 {, d2 r* p* c$ Z5 jMAX_COMING_TIME = (*storage).p[initProcessNum-1].comeingTime;
      ^( ~0 c/ E) f) N3 ~2 Z( E3 R, i(*memory).p = (process*)malloc(initProcessNum*sizeof(process));
    . r! E2 ]1 u7 @- F4 `  k) G! J) omemory->proNum = 1;
    6 X4 N" d* a& C; ~) J* Dfor(i=0; i<initProcessNum; i++)
    % g/ L+ h7 P. h, |{
    # O- J& T# e* b5 Uif((*storage).p.askMemory <= *spareMemory)
    ! `' ]. r. E, I{4 D; Z! T( P; U
    (*memory).p[0].askMemory = (*storage).p.askMemory;2 m9 B9 B" s; R
    (*memory).p[0].comeingTime = (*storage).p.comeingTime;3 b* e1 S) v: i- F, U
    (*memory).p[0].computeNum = (*storage).p.computeNum;/ ~& k  c. \& ?0 P7 G. X- _/ T
    (*memory).p[0].ioNum = (*storage).p.ioNum;
    % q* E6 X' ]% j( w0 X$ e4 S(*memory).p[0].processID = (*storage).p.processID;
    4 C0 y# f7 g& L* P9 `% ]5 ~: q( e(*memory).p[0].flag = (*storage).p.flag;
      c* }6 C- Q0 s- A7 Y(*memory).p[0].ioTime = (*storage).p.ioTime;
    8 U9 f5 _8 W" X, n(*memory).p[0].computeTime = (*storage).p.computeTime;! [8 a" D# L  Z% a6 B
    (*memory).p[0].produceTime = (*storage).p.produceTime;6 X& q; R- P) B! H) C$ d
    (*memory).p[0].runningTime = systemClock;
    / l- j  c0 H- n; l! W(*memory).p[0].computeClock = (int*)malloc((*memory).p[0].computeNum*sizeof(int));
    3 b( G- c/ S- q4 r(*memory).p[0].ioClock = (int*)malloc((*memory).p[0].ioNum*sizeof(int));: z8 @7 y8 _3 l: J3 M! [
    for(k=0; k<(*memory).p[0].ioNum; k++)  S2 O3 ?0 t4 X: g
    (*memory).p[0].ioClock[k] = (*storage).p.ioClock[k];; g# z- u/ s  ?0 e6 I5 t) s1 X: j8 J
    for(k=0; k<(*memory).p[0].computeNum; k++)
    7 E- I% \6 [1 r(*memory).p[0].computeClock[k] = (*storage).p.computeClock[k];
    ' v+ I. D( P8 gbreak;
    2 g1 C) m4 c4 D: }}; O% S- p- B. G6 i
    }
    $ y0 w. w9 Y5 k" z4 l% u4 u3 f- Gif(i<initProcessNum)  //调用一个作业进入内存后,并再生成一个作业等待调入
    / f2 u1 v; m# @* M4 v; s; u( h: z{2 w% Z+ ]7 b( z* ?7 j/ @: N) v
    produce_one_task(storage,i,ID_FIFO++);" M4 S6 ?4 ~6 [, j
    MAX_COMING_TIME = (*storage).p.comeingTime;7 f, Q% w4 R" m8 O
    sort_by_comingtime(storage,i);
    * u5 z; t) {/ p2 I}
    - L" ~' {  H5 J/ A# Ereturn 0;
    5 J- Z: m. I0 R( x; [}
    * ~5 O* y; e! Q" H) u- sint sort_by_comingtime(processPool * p,int pos)
    5 ~$ o0 D" k) K& O8 W{# Z' @' Y* p/ E& B7 x
    int i=0,j=0;
    ( s' X) X, x' L+ i/ X7 bprocess temp;
    ! j) s) @% K: L7 R7 Zif(pos<0)& h2 Z2 z5 B# g+ \1 F
    {/ z/ b! ^' \% \8 T! @
    for(i=0; i<initProcessNum; i++)
    : D6 u- F; j) C3 Kfor(j=0; j+1<initProcessNum-i; j++)
    % Y7 _* D! G) G  E7 P+ j{8 @% h2 Y5 ~1 u$ o
    if((*p).p[j].comeingTime>(*p).p[j+1].comeingTime)9 c0 I5 B2 w9 L0 g
    {
    : p5 @6 B: e4 H$ _4 c; n  itemp = (*p).p[j];) X! I; {* E7 v; l% C; h9 R
    (*p).p[j] = (*p).p[j+1];
    8 U0 \1 _( X* O3 s( v* m(*p).p[j+1] = temp;
    8 m& Z) Y/ X, ^% X4 |# i/ G1 P}. D3 w, }; Y' o! y  T1 \3 Y
    }+ Q& n4 q' t+ r+ ?7 a  q
    }
    % v/ B# D5 a: z5 [, f5 Lelse if(pos<initProcessNum)
    : S" k5 U" t  T" Z: ]/ M' x& ]5 Q{
    0 p7 n5 N5 Q9 y2 _for(i=pos-1; i>=0 && (*p).p.comeingTime > (*p).p[i+1].comeingTime; i--)
    $ K  ^+ s/ e; {& V{
    7 H9 O6 T2 [; v' ytemp = (*p).p;
    2 V! {8 D' U; R( }(*p).p = (*p).p[i+1];
    & z, Z% Y, H, Q& ^(*p).p[i+1] = temp;
    : M( t$ ~$ p! `& c. i}
    6 X6 i! R1 \; efor(i=pos+1; i<initProcessNum && (*p).p[i-1].comeingTime > (*p).p.comeingTime; i++)! d7 ~" ?1 X/ D/ s
    {" H% c" c8 K1 O+ ~! [5 j
    temp = (*p).p[i-1];1 I; T4 X* y0 |" D9 V7 y3 _3 A: A
    (*p).p[i-1] = (*p).p;
    9 @$ O) u6 u) e% ]5 p(*p).p = temp;
    3 _( f+ y  w, F& z}
    % ~  |+ Y2 K" b}* \3 x# L( E1 u3 s
    else
    1 C4 `/ ?' ]7 Uprintf("position eror\n");
    $ p( d& `$ Q* m/ creturn 0;+ t+ ]5 t7 u8 B0 b& F' |
    }  j4 V0 n4 O% v
    int InitPool(processPool * p)
    $ r- E8 B9 J4 S# a# u( t$ V0 A{
    1 m3 r( |7 H0 O7 uint i=0;
    : v! _% X" U" A; U(*p).proNum = initProcessNum;
    , Q7 t1 Y: F! ?8 B( t" e(*p).p = (process*)malloc(initProcessNum*sizeof(process));- Y) r3 o9 q- ]) F
    for(i=0; i<initProcessNum; i++)                                        //init process information/ }4 F$ o) U5 F* h4 h- C
    {  _8 P; |( d0 D
    (*p).p.computeClock = (int*)malloc(initclocknum*sizeof(int));# E3 X; |3 i9 D2 d2 F( p9 D7 b
    (*p).p.ioClock = (int*)malloc(initclocknum*sizeof(int));
    1 l3 L9 ?8 _$ ?& n$ N, mproduce_one_task(&(*p),i,ID_FIFO++);1 j  T+ c5 N( G2 k  I
    }
    $ ~6 u, q0 \1 g9 _$ xreturn 0;
    : E" H; L+ d% f7 q. \}1 L- {# y  y1 c, @" l: J
    int produce_one_task(processPool * p,int i,int id)
    + l2 n8 b' T$ F0 s) U) }# p{" @) f* j- W3 p' _! J& \# f: _1 _# k8 P
    int time=MAX_COMING_TIME,j=0,totallTime=0;2 r. Z- h; t8 z+ Y7 j8 Z3 W! ?. f- D
    (*p).p.processID = initProcessID+id;           ' K, W) V! l5 v4 a. I
    (*p).p.comeingTime = time+rand()%(MAXProcessRunTime/5);) M, S, d, O/ g7 b
    (*p).p.produceTime = systemClock;& b1 a, u. P  Y8 Z
    (*p).p.ioNum = rand()%4+20;                                        //IO number setting to 2--5;; V+ ^+ q( G: W: m6 j3 [: s
    (*p).p.computeNum = rand()%4+30;                                   //computNum setting to 3--6;- Z, q" z4 Q% W; f; Q: P
    totallTime = (*p).p.computeNum  + (*p).p.ioNum;
    9 K! L, [+ X$ w( m+ @$ ^6 s1 S) j4 I1 y# R(*p).p.computeTime=0;
    " P& x" n6 c5 _  z( P! Y+ r0 \! Kfor(j=0; j<(*p).p.computeNum; j++)
    1 x: b' @3 l; F{
    $ ]1 y. B4 u& v(*p).p.computeClock[j]=rand()%(MAXProcessRunTime/totallTime)+1;
    9 N2 S+ R3 |% C/ l(*p).p.computeTime += (*p).p.computeClock[j];7 w0 M6 U+ r  k+ I" \. b4 c
    }
    ( P$ f! _, M1 `# h+ _. M(*p).p.ioTime=0;  r3 q. x% S$ w8 a7 f" r2 D- [
    for(j=0; j<(*p).p.ioNum; j++)3 C. o/ L) ?" ^* F5 _1 I
    {) v2 _* F9 M' {- L0 G/ W3 j3 U
    (*p).p.ioClock[j]=rand()%(MAXProcessRunTime/totallTime)+1;# \/ Y" v) d; ?3 W6 F* |; @( q- Y4 X
    (*p).p.ioTime += (*p).p.ioClock[j];
    % x+ C: o+ i7 I% S}( L: t' \  c9 P
    (*p).p.askMemory = rand()%(MAX_MEMORY/4);
    6 E3 m& I% L7 I2 @9 j  \3 j& |(*p).p.flag = ready;) Y2 f4 U2 y$ B
    return 0;% Z- ~# Y6 C3 \% C: I5 S
    }
    ; T3 c. k" `# ^5 W( a* J1 v9 sint showProcessInf(processPool p)
    3 u% w  u/ R* I6 h1 A{
    9 r# B3 o# `( Y: w! b4 P( c% ?& \int i=0,j=0;8 Y) v& S8 b: j
    for(i=0;i<p.proNum;i++). ^! g1 L( A% ]/ \( l4 B" [1 w) @1 n
    {
    1 b4 k( d4 u3 T/ E/ L; Lprintf("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
    + w% L3 ^2 r) ^0 @( y! ^,p.p.askMemory);
    9 V" X/ G' a+ {1 rfor(j=0;j<p.p.ioNum;j++)
    . H% R7 D! t& _8 C1 z{; l* {7 V6 c2 m: Q
    printf("%d ",p.p.ioClock[j]);0 _- O. A4 z9 Z5 X; C. b1 o
    }
    $ f2 B! z$ G# M0 T5 yprintf("\n");
    & |: B, W: B5 f) X1 Afor( j=0;j<p.p.computeNum;j++): S( A8 a3 I/ a9 W  e( q, V
    {- S( L7 _! D+ w9 `4 ^
    printf("%d ",p.p.computeClock[j]);
    : G) }1 @7 Z# b5 \0 a}* c; u9 M; H; e! ?3 \
    printf("\n");
    + y) D# g/ M) X}! H5 V; u. @: A( W$ a( s" W3 G
    return 0;
    ( v$ b) Y3 k+ K}- i3 s9 S. f9 H5 h' A- t
    ————————————————& w" M  `4 r) Q+ G  i
    版权声明:本文为CSDN博主「wang_dong001」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    4 [' @) [' ]5 x# b" b$ t: F5 k原文链接:https://blog.csdn.net/wang_dong001/article/details/47843519# {4 W  e' ~. Q1 \

    8 J/ U! E8 z, [, q! d3 b. Z
    9 g2 J/ c: v( Y/ s& l. X$ ~
    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-10 09:03 , Processed in 0.440295 second(s), 51 queries .

    回顶部