欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    时间片轮转算法和优先级调度算法-C语言模拟实现.doc

    • 资源ID:92330281       资源大小:40.50KB        全文页数:12页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    时间片轮转算法和优先级调度算法-C语言模拟实现.doc

    时间片轮转算法与优先级调度算法语言模拟实现 收藏 一、目得与要求进程调度就是处理机管理得核心内容。本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会与了解优先数算法与时间片轮转算法得具体实施办法。二、实验内容1、设计进程控制块PCB得结构,通常应包括如下信息:进程名、进程优先数(或轮转时间片数)、进程已占用得CP时间、进程到完成还需要得时间、进程得状态、当前队列指针等。  2、编写两种调度算法程序:优先数调度算法程序循环轮转调度算法程序3、按要求输出结果。三、提示与说明分别用两种调度算法对伍个进程进行调度。每个进程可有三种状态;执行状态(UN)、就绪状态(EDY,包括等待状态)与完成状态(SH),并假定初始状态为就绪状态。(一)进程控制块结构如下:      AE进程标示符      RION进程优先数进程每次轮转得时间片数(设为常数2)      CPUTIME进程累计占用CPU得时间片数      NEEDTME进程到完成还需要得时间片数      STE进程状态      EXT链指针注:    、为了便于处理,程序中进程得得运行时间以时间片为单位进行计算;    2、各进程得优先数或轮转时间片数,以及进程运行时间片数得初值,均由用户在程序运行时给定。(二)进程得就绪态与等待态均为链表结构,共有四个指针如下:      RU当前运行进程指针      RADY就需队列头指针      TAI就需队列尾指针      FINIS完成队列头指针(三)程序说明    1、 在优先数算法中,进程优先数得初值设为:      50NEEDIME每执行一次,优先数减1,CU时间片数加,进程还需要得时间片数减1。在轮转法中,采用固定时间片单位(两个时间片为一个单位),进程每轮转一次,CPU时间片数加2,进程还需要得时间片数减2,并退出CPU,排到就绪队列尾,等待下一次调度。    2、 程序得模块结构提示如下:整个程序可由主程序与如下个过程组成:(1)INSERT1在优先数算法中,将尚未完成得PB按优先数顺序插入到就绪队列中;(2)INSR2在轮转法中,将执行了一个时间片单位(为),但尚未完成得进程得PB,插到就绪队列得队尾;()FIRSTIN调度就绪队列得第一个进程投入运行;()PINT显示每执行一次后所有进程得状态及有关信息。(5)CREAE创建新进程,并将它得PCB插入就绪队列;()PRICH按优先数算法调度进程;(7)RUDSCH按时间片轮转法调度进程。主程序定义CB结构与其她有关变量。(四)运行与显示程序开始运行后,首先提示:请用户选择算法,输入进程名与相应得NEEDTI值。每次显示结果均为如下5个字段:      name  cpime  eeime   ririt   tate注:    1.在stat字段中,"R"代表执行态,W"代表就绪(等待)态,"F"代表完成态。2.应先显示"R"态得,再显示"W"态得,再显示"F"态得。  .在W"态中,以优先数高低或轮转顺序排队;在""态中,以完成先后顺序排队。iew picopy to cipbordprint?1. /*   2. 操作系统实验之时间片轮转算法与优先级调度算法   3. By Viual C+ 6、0   4. */    #nclue <tdi、h>    iclude tdlib、h>    #iclude <trng、h>    typedef stuct node         char ame0;    /*进程得名字*      int pio;     /进程得优先级*/     it round;     /*分配C得时间片*/      int cputme;    /*PU执行时间*/     nt needtime;    /*进程执行所需要得时间*     char state;     /*进程得状态,W就绪态,执行态,完成态*/      i count;     /*记录执行得次数*/     truct node *next;   /*链表指针*/    CB;    PC *adyNULL,*runNULL,*finih=NLL; /*定义三个队列,就绪队列,执行队列与完成队列*/    int n;    voi GeFist();    /*从就绪队列取得第一个节点*/   vid Opu();     /*输出队列信息*/   void Insetrio(PCB in);  /创建优先级队列,规定优先数越小,优先级越高*/    o Iertm(C in);  /*时间片队列*/   void Insertis(CB *in);  /*时间片队列*/    od PrioCrate();    /*优先级输入函数*/   voi TimeCrate();    /时间片输入函数*/    vid riori();    /*按照优先级调度*/   void RoundRu();    /*时间片轮转调度*/    n main(void)          car choe;      prit(请输入要创建得进程数目:n);      saf(",&n);      getchar();      prntf(输入进程得调度方法:(P/R)n");      af(%c,hose);     sich(cose)            c '':      case '':       ProCreate();        Prioriy();           bek;      case 'R:      se '':        TmeCreate();       RouRun();        beak;      faul:break;           utpu();      etr ;       vod GtFrt()  /*取得第一个就绪队列节点*          run = red;          i(ea!NULL)              ru ->stae = 'R;       ray = rdy ->ext;        ru ->next  ULL;             vid Outpu()    *输出队列信息*           *p;       ady;      prit("进程名t优先级t轮数tpu时间t需要时间t进程状态计数器n");     wile(p!=NULL)             prit("%st%dt%dtdt%t%cdn,p->ame,->prio,->rund,>cutime,p>needte,p->sate,p->count);        p = p-nxt;            p  inis;      hie(p!=ULL)              pritf("%sdtt%dt%dt%t%dn,p>ame,p->pio,p-round,>cputme,p->netime,p->st,p->out);        p  p->nxt;            p  rn;      wie(!NUL)             rtf(st%dt%dtdt%dt%ctt%dn",p-name,p->prio,-rnd,p>cptime,->eedtime,p->sate,p->cunt);         = p>next;            id InsetPrio(PB *) *创建优先级队列,规定优先数越小,优先级越低/          PCB *st,nxt;      fst = xt = ready;           if(ad = ULL)  /如果队列为空,则为第一个元素             in->net = ready;        edy = in;           ls     /*查到合适得位置进行插入*             i(in -pri > t ->po)  /比第一个还要大,则插入到队头*/                 i-nxt  ead;         ready = in;               lse                  whie(ft->nex != NUL)  /*移动指针查找第一个别它小得元素得位置进行插入*/                      n  fst;           fs  ->next;                             f(st ->nex = NULL) /已经搜索到队尾,则其优先级数最小,将其插入到队尾即可*/                      i ex  fs -x;            f ->next = n;                    ee     /*插入到队列中*/                      nxt = in;           in >next = fst;                                vo Iertime(PCB *n)  *将进程插入到就绪队列尾部/         PCB *fst;      fst  ready;            i(ady = NULL)              in->nt = rdy;        ead  in;            lse              il(st->next != NUL)                 st = fst-next;                i -nex = fst -nxt;       fst ->nxt = in;              id Insertnih(CB *in)  /*将进程插入到完成队列尾部*/          PCB *fst;      ft = finsh;           f(fiish = NULL)             ->nxt  finish;        inish = in;            ele              whil(fst->next != LL)                 = fs->nxt;               n ->xt  st ->next;       ft ->net = in;             void rioCreate() /优先级调度输入函数*        PCB *tp;      int ;            prit("输入进程名字与进程所需时间:n);      f(i  0;i < nu; i+)              f(tmp = (PC )malloc(izf(PCB)))NLL)                  perror("mallo");          exi(1);                scan("%s,tmpna);        getcha();    吸收回车符号*/       scanf(%d",&(mp->nedtime);        tm ->cputime = ;        p ->stte W';       tmp ->po = 50  tp-eedme;  /*设置其优先级,需要得时间越多,优先级越低*/       tmp ->rud =         tmp >coun = 0;        InsrtPrio(p);      /*按照优先级从高到低,插入到就绪队列*/              voi Timeat() 时间片输入函数/          C *mp;     nt i;           prn("输入进程名字与进程时间片所需时间:");      for( = i < nu; +)              if(mp = (PCB *)mlloc(izof(PCB)=NLL)                  perror("malloc");          exit(1);               canf(",m->ame);        echar();        scan(%d",&(tp->nedime);        tmp -cutime = 0;       tmp >stae 'W'       tmp ->ri = 0;        p -rod = 2;  *假设每个进程所分配得时间片就是2*        tmp -coun = 0;       IsrtTm(tp);             void riory()   /*按照优先级调度,每次执行一个时间片*/          nt flag = 1;            Get();      whle(rn != NUL)  /当就绪队列不为空时,则调度进程如执行队列执行*/             Ouput();  /*输出每次调度过程中各个节点得状态*/       whie(la)                  run>i -= 3; /*优先级减去三*/         run->puime+; /*CPU时间片加一          run->eetme-;*进程执行完成得剩余时间减一          if(n->needtime = 0)/*如果进程执行完毕,将进程状态置为F,将其插入到完成队列*/                      un ->tte = 'F'           rnount+; /进程执行得次数加一*/           InertFih(un);            g = 0;                   s   将进程状态置为,入就绪队列*                      rn->state = '            run-count+; /*进程执行得次数加一            IsertTme(rn);            flg = 0;                          fl         Getirt();    /继续取就绪队列队头进程进入执行队列*             vod onRun()    /时间片轮转调度算法*               int fag = 1;           GtFirt();      ie(ru != NUL)             utput();        we(fla)                 uount;          rn->cputm+;          run->nedime-;          if(runeedtme = 0) /*进程执行完毕*/                      run ->tae = 'F';            nsetFinish(un);            flag = 0;                   e if(u->count = run>rud)/时间片用完                     rn->ste = 'W'            run->ount  0;   /*计数器清零,为下次做准备*/           InserTim(rn);            lag = ;                         ag = 1;        GetFrst();           

    注意事项

    本文(时间片轮转算法和优先级调度算法-C语言模拟实现.doc)为本站会员(可****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开