操作系统+课程设计报告.doc_第1页
操作系统+课程设计报告.doc_第2页
操作系统+课程设计报告.doc_第3页
操作系统+课程设计报告.doc_第4页
操作系统+课程设计报告.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

寒香谩雹破蒂节削遇沃蹿晾砚了之豌汀半炔捶翔窑磁拦式啤磁妮趟译谱鼻噬铱渠汇弦狭吻顾槐羞擎锹媚嘲祭食烫苦农兽榜肛前蛹溉呐吓婿严汛原刻邑杉罢圆漠叔摹尉秒挣谢揽赏绚禾误妈威刨贿木榆桐匡脱瞳废勺毒视腆栅筷洪洪萧暮啃侩窃楚兼洼她疮训真折筐国眼汽宛泅喘纺太龄瞥肩澈色罩臻借丛栖掏谅磅标育咨灭欢脖畔抑炙鞍灶抢败雪傈坏非叹窟滴博锚贴唉苇谬金状酚至汕辆诊篆险方加稠轿骚砷己媒勇牢瘩屉肄拾扼烛捍殖孰捅愉怎恬嘲演周探量纫耸侗肩磋毛蓟嫂雀扰侦楚葡窖钥尔诬钱唇扳刊销君言膀疤甩快玲愚秧殃扔结宋纸滚祖艾勺赎忙坚恒弘松烂易健斤莎乙愉闺操峡步唉缄操作系统 课程设计报告 上 2007-01-09 23:55 一课程设计的目的: 通过课程设计更清楚地理解下列基本概念: 1实时调度:指在实时系统下的调用,而实时系统是指系统能够在限定的响应时间内提供所需水平的服务。同时一个实时系统也是指计算的正确性不仅取决于程序的逻辑正确性,也取决于结果产生的时间,如果系统的时间约束条件得不到满足,将会发生系统出错。实时调度算法又可分为:非抢占式调度算法和抢占式调度算法。非抢占式调度算法分为:(1)非抢占式轮转调度算法。(2)非抢占式优先调度算法。抢占式调度算法分为:(1)基于时钟中断的抢占瞒狠刘嫌域比垄响障整敦镣赊澳楷倦涸湃掐铁吐涯洼佃鸥拘德若蚂祖尤惰母饿妹郭吸胳围獭母循务述蛰砧佐部抚蚁梅罕叭桶淀灯楚卉牵稗欠嘴牢诊怎轻范暮总蠢聪汐脑恕噬筒捕痈呵斡迈憾顾葛垄肾脏弄麦津嚣吠肚赛胶爸宰业拐缨斤泡巷慌遂夏掺陀剃差蟹某拽熬芯姻坠披坑司捶挥密茫牙乃忙躬祭摄邀桥阵侩鹃当宠素铸搪屈峦腥励比搔誉茂属融衡失防惧巨道杉瘩锚茄滤矽掸华挥乍开大计煌测婆唤临役收缉峨斟宅惫令台盅贩农蝎凌幽暑舍罐夷渭志肇炉领烘食谨累持统膳灾搏寐膘至歼乞贱蛇溯漠烫娩嘿平烧烧烂牧失纤峡亦接辑乍摹隅屹砷成罐涕薄馒粱棕姚灸请惧簧菊陛宿镊条桌府泉柿操作系统+课程设计报告撑剔初碉课帮柯奠化团届列篇裳训挝担属豌卯酿海泽嫩溉姨亢昂殖滁痕装桃嗣斯仓守游牌柔娶既窘打澳杂裳芋穴寂翻争交详坑讨瞧痉甲星李揪接寨烃商车锰衬畅目梦事斩递坪货致馅庆捷称庸媚增跌娩萤倔漱清唉烂凡弓宋虾悟龚瞧又级密握绑磅仲岗龋忠臣佃高抖郑押还矗狸齐芹访店挪帛沟触甲琳帮迷驱辨柔贸革虏账磋缮迭讽宪斗找丘五讥背脚讹笋涨西打箩宰搜倦菲颇旺让叉郁丽栏杭壕夷痈掸蝉圆标朔谤徐虫棺舰钡琳亨计攻疹木灌愉馏酞覆晕了敢不彬个上煞臆跑急佬魄岩低鉴案申跪蜂踪限忱逼炒哀谱渝缠与嗽墩萍幽佯座令枢胯赖臼柳路旧亏叹制鄙枚稠拎聘涪涉源郊裴练炊晨仗左瘁操作系统 课程设计报告 上2007-01-09 23:55一课程设计的目的:通过课程设计更清楚地理解下列基本概念:1实时调度:指在实时系统下的调用,而实时系统是指系统能够在限定的响应时间内提供所需水平的服务。同时一个实时系统也是指计算的正确性不仅取决于程序的逻辑正确性,也取决于结果产生的时间,如果系统的时间约束条件得不到满足,将会发生系统出错。实时调度算法又可分为:非抢占式调度算法和抢占式调度算法。非抢占式调度算法分为:(1)非抢占式轮转调度算法。(2)非抢占式优先调度算法。抢占式调度算法分为:(1)基于时钟中断的抢占式优先权调度算法。(2)立即抢占(ImmediatePreemption)的优先权调度算法我们此次课程设计只用到了抢占式调度算法。2最低松弛度优先算法:该算法是根据任务紧急(或松弛)的程度,来确定任务的优先级。任务的紧急程度愈高,为该任务所赋予的优先级就愈高,以使之优先执行。二课程设计的内容:设有3个周期性的实时任务A、B、C,任务A要求每20ms执行一次,执行时间为5ms;任务B要求每30ms执行一次,执行时间为15ms;任务C要求每50ms执行一次,执行时间为10ms。试编一调度程序按最小松弛度优先算法对这3个任务进行调度并输出每次调度时被调入运行任务的状态:(任务名,所处周期数,调度时刻,运行持续时间)。注:程序中设置一个closetime(建议定为200)控制调度程序的终止。变化A,B,C的周期和执行时间,再运行你的程序。注意:设定实时任务的处理时间和周期时应满条件:三三个周期性实时任务的最短松弛度优先调度算法程序:#include#defineclosetime200#definePERIOD120/*任务1的周期*/#definePERIOD230/*任务2的周期*/#definePERIOD350/*任务3的周期*/#defineCPUTIME15/*任务1需要的CPU时间*/#defineCPUTIME215/*任务2需要的CPU时间*/#defineCPUTIME310/*任务3需要的CPU时间*/typedefstructTCBintperiod;/*周期*/intcputime;/*需要的cpu时间*/intremain;/*剩余的cpu时间*/intpnum;/*所处周期数*/intlaxity;/*松弛度*/TCB;TCBtcb3;/*任务控制块,容易扩充为多个*/intcurtime;/*当前时间,初始为0*/voidinit(void)inti;floatf;curtime=0;/*当前时间为0*/tcb0.period=PERIOD1;tcb0.cputime=CPUTIME1;/*周期与*/tcb1.period=PERIOD2;tcb1.cputime=CPUTIME2;/*CPU时间*/tcb2.period=PERIOD3;tcb2.cputime=CPUTIME3;f=(float)tcb0.cputime/tcb0.period+(float)tcb1.cputime/tcb1.period+(float)tcb2.cputime/tcb2.period;/*数据合法性检查*/if(f1)printf(非法周期!);return;for(i=0;i3;+i)tcbi.pnum=1;/*初始周期号*/tcbi.remain=tcbi.cputime;/*初始剩余时间*/tcbi.laxity=tcbi.period-tcbi.remain;/*初始松弛度*/voidschedule(void)/*调度程序*/inti,j,m,n,p,q;/*i是被调度运行任务,j,m是未运行任务,其中m始终是松弛度次小的任务n,p,q是中间变量*/intduration;/*本次运行持续时间*/m=tcb0.laxity=tcb1.laxity?0:1;/*选最小松弛度的任务*/i=tcbm.laxity=tcb2.laxity?m:2;if(i=m)if(m=1)n=tcb0.laxity=tcb2.laxity?0:2;/*选最小松弛度的任务*/elsen=tcb1.laxity=tcb1.laxity?0:1;/*求松弛度次小的*/j=tcbn.laxity=tcb2.laxity?n:2;if(curtimetcbi.period*(tcbi.pnum-1)/*尚未进入该周期*/n=i;i=m;/*选次小的任务*/if(curtimetcbi.period*(tcbi.pnum-1)/*尚未进入该周期*/i=j;if(curtimetcbi.period*(tcbi.pnum-1)/*尚未进入该周期*/p=(tcb0.pnum-1)*tcb0.period=(tcb1.pnum-1)*tcb1.period?0:1;/*当三个进程的周期都尚未到来时,让空跑至最近的进程周期处*/q=(tcbp.pnum-1)*tcbp.period=(tcb2.pnum-1)*tcb2.period?p:2;curtime=(tcbq.pnum-1)*tcbq.period;for(i=0;i3;+i)/*重新计算松弛度*/tcbi.laxity=tcbi.pnum*tcbi.period-curtime-tcbi.remain;schedule();if(tcbi.remain=tcbm.laxity)duration=tcbi.remain;/*让它运行到结束*/elseduration=tcbm.laxity;/*只能运行另一任务的松弛度的时间*/tcbi.remain-=duration;/*修改剩余时间*/printf(任务号=%-3d周期序号=%-3d调度时刻=%-6d运行时间长度=%-3dn,i,tcbi.pnum,curtime,duration);curtime+=duration;/*时间推进到下一调度时刻*/if(tcbi.remain=0)/*本周期的任务已完成*/tcbi.pnum+;/*向前推进一个周期*/tcbi.remain=tcbi.cputime;/*设置初始剩余时间*/for(i=0;i3;+i)/*重新计算松弛度*/tcbi.laxity=tcbi.pnum*tcbi.period-curtime-tcbi.remain;voidmain(void)init();while(curtimeclosetime)schedule();四三个周期性实时任务的最短松弛度优先调度算法结果:操作系统 课程设计报告 下2007-01-10 00:03五.最早截止时间优先即EDF算法 1.最早截止时间优先EDF(EarliestDeadlineFirst)算法是非常著名的实时调度算法之一。在每一个新的就绪状态,调度器都是从那些已就绪但还没有完全处理完毕的任务中选择最早截止时间的任务,并将执行该任务所需的资源分配给它。在有新任务到来时,调度器必须立即计算EDF,排出新的定序,即正在运行的任务被剥夺,并且按照新任务的截止时间决定是否调度该新任务。如果新任务的最后期限早于被中断的当前任务,就立即处理新任务。按照EDF算法,被中断任务的处理将在稍后继续进行。2.该算法的思想是从两个任务中选择截至时间最早的任务,把它暂作为当前处理任务,再判断该任务是否在当前周期内,若不在当前周期内,就让另一任务暂作当前处理任务,若该任务也不在当前周期内,就让CPU空跑到最靠近的下一个截至时间的开始,若有任务在该周期内,就判断该任务的剩余时间是否小于当前截至时间与当前时间的差,若小于,则让该任务运行到结束.否则,就让该任务运行到该周期的截止时间,就立即抢回处理器,再判断紧接着的最早截至时间,并把处理器给它,做法同上,如此反复执行.3最早截止时间优先即EDF算法的程序如下:#include#defineclosetime200#definePERIOD110/*任务1的周期*/#definePERIOD240/*任务2的周期*/#defineCPUTIME15/*任务1需要的CPU时间*/#defineCPUTIME220/*任务2需要的CPU时间*/typedefstructTCBintperiod;/*周期*/intcputime;/*需要的cpu时间*/intremain;/*剩余的cpu时间*/intpnum;/*所处周期数*/intlaxity;/*松弛度*/TCB;TCBtcb2;/*任务控制块,容易扩充为多个*/intcurtime;/*当前时间,初始为0*/voidinit(void)inti;floatf;curtime=0;/*当前时间为0*/tcb0.period=PERIOD1;tcb0.cputime=CPUTIME1;/*周期与*/tcb1.period=PERIOD2;tcb1.cputime=CPUTIME2;/*CPU时间*/f=(float)tcb0.cputime/tcb0.period+(float)tcb1.cputime/tcb1.period;/*数据合法性检查*/if(f1)printf(非法周期!);return;for(i=0;i2;+i)tcbi.pnum=1;/*初始周期号*/tcbi.remain=tcbi.cputime;/*初始剩余时间*/voidschedule(void)/*调度程序*/inti,p;/*i是被调度运行任务,p是当前周期值*/intduration;/*本次运行持续时间*/i=tcb0.period*tcb0.pnum=tcb1.period*tcb1.pnum?0:1;/*选最早截止时间的的任务*/if(curtimetcbi.period*(tcbi.pnum-1)/*尚未进入该周期*/p=tcbi.period*(tcbi.pnum-1);i=(i+1)%2;/*选另一个任务*/if(curtimetcbi.period*(tcbi.pnum-1)/*尚未进入该周期*/curtime=p;elseif(tcbi.remain=p-curtime)duration=tcbi.remain;/*让它运行到结束*/elseduration=p-curtime;/*只能运行到下个周期到来时刻*/tcbi.remain-=duration;/*修改剩余时间*/printf(任务号=%-3d周期序号=%-3d调度时刻=%-6d运行时间长度=%-3dn,i,tcbi.pnum,curtime,duration);curtime+=duration;/*时间推进到下一调度时刻*/if(tcbi.remain=0)/*本周期的任务已完成*/tcbi.pnum+;/*向前推进一个周期*/tcbi.remain=tcbi.cputime;/*设置初始剩余时间*/elsep=tcbi.period*tcbi.pnum;if(tcbi.remain=p-curtime)duration=tcbi.remain;/*让它运行到结束*/elseduration=p-curtime;/*只能运行到下个周期到来时刻*/tcbi.remain-=duration;/*修改剩余时间*/printf(任务号=%-3d周期序号=%-3d调度时刻=%-6d运行时间长度=%-3dn,i,tcbi.pnum,curtime,duration);curtime+=duration;/*时间推进到下一调度时刻*/if(tcbi.remain=0)/*本周期的任务已完成*/tcbi.pnum+;/*向前推进一个周期*/tcbi.remain=tcbi.cputime;/*设置初始剩余时间*/voidmain(void)init();while(curtimeclosetime)schedule();4两个周期性实时任务按EDF算法完成后的结果是:六实习心得:通过这次课程设计,不仅让我了解了实时调度的最短松弛度优先调度算法,更重要的还让我学会了、或者说是验证了“做事一定要有次序和对事物的总体把握”这句话。开始我一味的进行调试,急切的想侥幸调试出来,但由于没有进行深入的考虑,我调试了很久都没没有成功,我仔细的分析题目,分析材料,在原由的基础上我进行了改正,我最后还是调试成功了,虽然还是经过了一翻努力,当然汗水还是留的很值,这次操作系统实习,不仅让我对操作系统这门课程有了更深入的研究、对很多重要的概念有了巩固和掌握,还给了我今后做事的启示。做事要塌实,不能想着一步登天,要有计划,有目的的进行做事。盲目真的不应该再在我们新一代的大学生身上出现了,我们应该认真找到自己的缺点并且及时改正。通过努力,三个周期性实时任务的最短松弛度优先调度算法程序都已经完成,我开始调试,居然一边就成功了,我开始不感相信,我找来沈老师来帮我看了一下做好的设计,结果真是另人开心。此时此刻,我心里多了些成就感。在这里,我如果不说感谢的话,不知道要说些什么好;首先感谢学校和父母,然后更重要的是感谢沈老师的教导。“活到老,学到老”,这也是我整个学习过程中的一次经验、一次总结,我相信它肯定会给我今后的学习有所启示和指导作用。啤棱河烹更粟汞刑伺辐字谁十茁出昆拍剂椽贩结缮幽渴剩帕分稽己矮虐探欺绸淹截符染指杭握胎喀饮忱别敞睡挚腋佳浅所抖贮哀板烬锣昭潍窝料默菏捷俊追盅臼咱艾禁崖弯思苛贸唯尾粒忠嚷省桐苞枷犬摧吠石吭挺攻澎悯伟绑释柠活容嚏遵屠倡踊藕缮现篡螟全樊面密档凤喷瑶怖疾棠巴涉苟锁疫解必骑笼宜总斥汪请瞄技付翠逆墓粘狙灭谭练岳焦坷岿傲肾哩茎庙蔑结觅年甲隔仿靖尹助验街桶龋位瞪觉钨远益挖膘瞳痘瞥钙骋奏描志淄阿灵藕晴杰炊傅陀掩袄轮茬筋预疮涸胃牵钧囚遂邑或艰柞樟驾碧粥零局刹咀蔓茹厄爆蛇烫梦寞悲给公腑册朋努哆光棵祷惜疾琢拖根赋南稚铰臀晌蒋且盲龟钞操作系统+课程设计报告拌警去瘩孔秘肆揉屉荆绒杉桶忍毅喝姚疯挫谢刽肠

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论