欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

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

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

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

    1、时间片轮转算法和优先级调度算法 C语言模拟实现 收藏时间片轮转算法和优先级调度算法 C语言模拟实现 收藏 一、目的和要求进程调度是处理机管理的核心内容。本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会和了解优先数算法和时间片轮转算法的具体实施办法。二、实验内容1.设计进程控制块PCB的结构,通常应包括如下信息:进程名、进程优先数(或轮转时间片数)、进程已占用的CPU时间、进程到完成还需要的时间、进程的状态、当前队列指针等。2.编写两种调度算法程序:优先数调度算法程序循环轮转调度算法程序3.按要求输出结果。三、提示和说明分别用两种调度算法对伍个进程进行

    2、调度。每个进程可有三种状态;执行状态(RUN)、就绪状态(READY,包括等待状态)和完成状态(FINISH),并假定初始状态为就绪状态。(一)进程控制块结构如下:NAME进程标示符PRIO/ROUND进程优先数/进程每次轮转的时间片数(设为常数2)CPUTIME进程累计占用CPU的时间片数NEEDTIME进程到完成还需要的时间片数STATE进程状态NEXT链指针注:1.为了便于处理,程序中进程的的运行时间以时间片为单位进行计算;2.各进程的优先数或轮转时间片数,以及进程运行时间片数的初值,均由用户在程序运行时给定。(二)进程的就绪态和等待态均为链表结构,共有四个指针如下:RUN当前运行进程指

    3、针READY就需队列头指针TAIL就需队列尾指针FINISH完成队列头指针(三)程序说明1. 在优先数算法中,进程优先数的初值设为:50-NEEDTIME每执行一次,优先数减1,CPU时间片数加1,进程还需要的时间片数减1。在轮转法中,采用固定时间片单位(两个时间片为一个单位),进程每轮转一次,CPU时间片数加2,进程还需要的时间片数减2,并退出CPU,排到就绪队列尾,等待下一次调度。2. 程序的模块结构提示如下:整个程序可由主程序和如下7个过程组成:(1)INSERT1在优先数算法中,将尚未完成的PCB按优先数顺序插入到就绪队列中;(2)INSERT2在轮转法中,将执行了一个时间片单位(为2

    4、),但尚未完成的进程的PCB,插到就绪队列的队尾;(3)FIRSTIN调度就绪队列的第一个进程投入运行;(4)PRINT显示每执行一次后所有进程的状态及有关信息。(5)CREATE创建新进程,并将它的PCB插入就绪队列;(6)PRISCH按优先数算法调度进程;(7)ROUNDSCH按时间片轮转法调度进程。主程序定义PCB结构和其他有关变量。(四)运行和显示程序开始运行后,首先提示:请用户选择算法,输入进程名和相应的NEEDTIME值。每次显示结果均为如下5个字段:name cputime needtime priority state注:1在state字段中,R代表执行态,W代表就绪(等待)态

    5、,F代表完成态。2应先显示R态的,再显示W态的,再显示F态的。3在W态中,以优先数高低或轮转顺序排队;在F态中,以完成先后顺序排队。view plaincopy to clipboardprint?1. /* 2. 操作系统实验之时间片轮转算法和优先级调度算法 3. ByVisualC+6.0 4. */ #include #include #include typedefstructnode charname20;/*进程的名字*/ intprio;/*进程的优先级*/ intround;/*分配CPU的时间片*/ intcputime;/*CPU执行时间*/ intneedtime;/*进

    6、程执行所需要的时间*/ charstate;/*进程的状态,W就绪态,R执行态,F完成态*/ intcount;/*记录执行的次数*/ structnode*next;/*链表指针*/ PCB; PCB*ready=NULL,*run=NULL,*finish=NULL;/*定义三个队列,就绪队列,执行队列和完成队列*/ intnum; voidGetFirst();/*从就绪队列取得第一个节点*/ voidOutput();/*输出队列信息*/ voidInsertPrio(PCB*in);/*创建优先级队列,规定优先数越小,优先级越高*/ voidInsertTime(PCB*in);/*

    7、时间片队列*/ voidInsertFinish(PCB*in);/*时间片队列*/ voidPrioCreate();/*优先级输入函数*/ voidTimeCreate();/*时间片输入函数*/ voidPriority();/*按照优先级调度*/ voidRoundRun();/*时间片轮转调度*/ intmain(void) charchose; printf(请输入要创建的进程数目:n); scanf(%d,&num); getchar(); printf(输入进程的调度方法:(P/R)n); scanf(%c,&chose); switch(chose) caseP: casep

    8、: PrioCreate(); Priority(); break; caseR: caser: TimeCreate(); RoundRun(); break; default:break; Output(); return0; voidGetFirst()/*取得第一个就绪队列节点*/ run=ready; if(ready!=NULL) run-state=R; ready=ready-next; run-next=NULL; voidOutput()/*输出队列信息*/ PCB*p; p=ready; printf(进程名t优先级t轮数tcpu时间t需要时间t进程状态t计数器n); w

    9、hile(p!=NULL) printf(%st%dt%dt%dt%dtt%ctt%dn,p-name,p-prio,p-round,p-cputime,p-needtime,p-state,p-count); p=p-next; p=finish; while(p!=NULL) printf(%st%dt%dt%dt%dtt%ctt%dn,p-name,p-prio,p-round,p-cputime,p-needtime,p-state,p-count); p=p-next; p=run; while(p!=NULL) printf(%st%dt%dt%dt%dtt%ctt%dn,p-na

    10、me,p-prio,p-round,p-cputime,p-needtime,p-state,p-count); p=p-next; voidInsertPrio(PCB*in)/*创建优先级队列,规定优先数越小,优先级越低*/ PCB*fst,*nxt; fst=nxt=ready; if(ready=NULL)/*如果队列为空,则为第一个元素*/ in-next=ready; ready=in; else/*查到合适的位置进行插入*/ if(in-prio=fst-prio)/*比第一个还要大,则插入到队头*/ in-next=ready; ready=in; else while(fst

    11、-next!=NULL)/*移动指针查找第一个别它小的元素的位置进行插入*/ nxt=fst; fst=fst-next; if(fst-next=NULL)/*已经搜索到队尾,则其优先级数最小,将其插入到队尾即可*/ in-next=fst-next; fst-next=in; else/*插入到队列中*/ nxt=in; in-next=fst; voidInsertTime(PCB*in)/*将进程插入到就绪队列尾部*/ PCB*fst; fst=ready; if(ready=NULL) in-next=ready; ready=in; else while(fst-next!=NUL

    12、L) fst=fst-next; in-next=fst-next; fst-next=in; voidInsertFinish(PCB*in)/*将进程插入到完成队列尾部*/ PCB*fst; fst=finish; if(finish=NULL) in-next=finish; finish=in; else while(fst-next!=NULL) fst=fst-next; in-next=fst-next; fst-next=in; voidPrioCreate()/*优先级调度输入函数*/ PCB*tmp; inti; printf(输入进程名字和进程所需时间:n); for(i

    13、=0;iname); getchar();/*吸收回车符号*/ scanf(%d,&(tmp-needtime); tmp-cputime=0; tmp-state=W; tmp-prio=50-tmp-needtime;/*设置其优先级,需要的时间越多,优先级越低*/ tmp-round=0; tmp-count=0; InsertPrio(tmp);/*按照优先级从高到低,插入到就绪队列*/ voidTimeCreate()/*时间片输入函数*/ PCB*tmp; inti; printf(输入进程名字和进程时间片所需时间:n); for(i=0;iname); getchar(); sc

    14、anf(%d,&(tmp-needtime); tmp-cputime=0; tmp-state=W; tmp-prio=0; tmp-round=2;/*假设每个进程所分配的时间片是2*/ tmp-count=0; InsertTime(tmp); voidPriority()/*按照优先级调度,每次执行一个时间片*/ intflag=1; GetFirst(); while(run!=NULL)/*当就绪队列不为空时,则调度进程如执行队列执行*/ Output();/*输出每次调度过程中各个节点的状态*/ while(flag) run-prio-=3;/*优先级减去三*/ run-cpu

    15、time+;/*CPU时间片加一*/ run-needtime-;/*进程执行完成的剩余时间减一*/ if(run-needtime=0)/*如果进程执行完毕,将进程状态置为F,将其插入到完成队列*/ run-state=F; run-count+;/*进程执行的次数加一*/ InsertFinish(run); flag=0; else/*将进程状态置为W,入就绪队列*/ run-state=W; run-count+;/*进程执行的次数加一*/ InsertTime(run); flag=0; flag=1; GetFirst();/*继续取就绪队列队头进程进入执行队列*/ voidRou

    16、ndRun()/*时间片轮转调度算法*/ intflag=1; GetFirst(); while(run!=NULL) Output(); while(flag) run-count+; run-cputime+; run-needtime-; if(run-needtime=0)/*进程执行完毕*/ run-state=F; InsertFinish(run); flag=0; elseif(run-count=run-round)/*时间片用完*/ run-state=W; run-count=0;/*计数器清零,为下次做准备*/ InsertTime(run); flag=0; flag=1; GetFirst();


    注意事项

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

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开