C语言进程调度

上传人:jin****ng 文档编号:171968880 上传时间:2022-11-30 格式:DOCX 页数:22 大小:145.84KB
返回 下载 相关 举报
C语言进程调度_第1页
第1页 / 共22页
C语言进程调度_第2页
第2页 / 共22页
C语言进程调度_第3页
第3页 / 共22页
点击查看更多>>
资源描述
C语言程序设计 课程设计(论文)题目:进程院(系):专业班级:学 号:学生姓名:指导教师:教师职称:起止时间:号 学程序设计 (报告) 题目程序设计(报告)任务指导教师评语及成绩日4月1X 弄年 肘201 成院(系):课程设计(报告)任务及评语教研室:目录第1章 课程设计的目的与要求11.1课程设计目的11.2课程设计的实验环境 11. 3课程设计的预备知识11.4课程设计要求1第2章课程设计内容22. 1程序功能介绍22. 2程序整体设计说明22. 2. 1设计思路32.2.2数据结构设计及用法说明42.2.3程序结构(流程图)52.2.4各模块的功能及程序说明72. 2. 5程序结果72. 3程序源代码及注释7第3章 课程设计总结17参考资料19第1章 课程设计的目的与要求1.1课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完程 序设计语言(C)课程后进行的一次全面的综合练习。本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 堂握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 堂握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。C语言程序设计及相应的开 发环境。1. 3课程设计的预备知识熟悉C语言及C语言开发工具。1. 4课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告第2章课程设计内容2. 1程序功能介绍在多道程序环境下,进程数目往往多于处理机数目,致使他们争用处理机。这就要 求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之运行。分配 处理机的任务是由进程调度程序完成的。一个进程被建立后,系统为了便于对进程进行 管理,将系统中的所有进程按其状态,将其组织成不同点进程队列。于是系统中有运行 进程队列、就绪队列和各种事件的进程等待队列。进程调度的功能就是从就绪队列中挑 选一个进程到处理机上运行。本课题模拟实现进程调度算法,选用了优先数调度算法和时间片轮转算法。2. 2程序整体设计说明进程调度的设计方法lo数据结构(1)优先级与时间片的设计进程因等待放弃CPU时,优先级置为1 (高优先级)进程因时间片到放弃CPU时,优先级置为0 (低优先级)优先1对应时间片4;优先级0对应时间片10。(2)进程控制块(PCB)的内容进程标识39进程优先级0, 1进程优先级0, 1进程等待时间20链接指针2:程序算法PCB结构,变量与主程序struet PCBint pname:int pri;int runtime;int waitting;struct PCB*next;pcb7;struct PCB*rimning, ready, wait;int sin二0;main ()创建 PCB3-PCB9并插入 ready 队列;/ *pname 分别为 3-9,pri=0,runtime=10, waittime=0 */for(;)/*系统程序,完成初始化和处理机分派功能*/castsig=0:swtch;sig=l:waiter;sig二3:proc3;sig二4:proc4;sig二5:proc5;sig二6:proc6;sig二7:proc?;sig=8:procS;sig二9:proc9;2. 2. 1设计思路1设计进程进程控制块PCB表结构,分别适用于优先数调度算法和循环轮转调度算 法。PCB结构通常包括以下信息:进程名,进程优先数(或轮转时间片),进程所占用 的CPU时间,进程的状态,当前队列指针等。根据调度算法的不同,PCB结构的内容可 以作适当的增删。建立进程就绪队列。对两种不同算法编制入链子程序。编制两种进程调度算法:1) 优先度调度;2)循环轮转调度。本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态 为就绪状态。为了便于处理,程序中的运行时间以时间片为单位计算,各进程的优先数或轮转时间数 以及进程需要运行的时间片数的初值均由用户给定。在优先数算法中,初始优先数为50-NEEDTIME,进程每执行一次,优先数减3, CPU 时间片数加1,进程还需要的时间片数减1,在轮转算法中,采用固定时间片,时间片数 为2进程每执行1次,CPU时间片数加2,进程还需要的时间数减2,并排列到就绪队列 的尾上。2.2.2数据结构设计及用法说明主要数据结构定义进程Typedef struct nodeint Pname: /进程名int Rtime;/进程要求执行时间int rtime;/进程已执彳亍时间char state: /进程状态st rue t node * nex t;/扌旨针Pnode;主要代码结构输入运行的进程数先定义第一个进程输出剩余的进程,输入时釆用尾插法,最终建立一个循环链表对循环链表根据算法思想进行相关的处理。2.2.3程序结构(流程图)程序流程图如图2.1、2.2所示。图2.1程序流程图YCreate2(algo):图2. 2程序流程图OVER2. 2. 4各模块的功能及程序说明第一模块:标题输出函数;使用if-else语句编辑。第二模块:进程PCB输出;使用if-else语句编辑。第三模块:输出函数;使用辻语句和while语句编辑。第四模块:优先数的插入算法;使用while语句和if-else语句编辑。第五模块:轮转法插入函数;使用for语句和if-else语句编辑。第六模块:优先数创建初始PCB信息;使用辻-else语句和for语句编辑。第七模块:轮转法创建进程PCB:使用if-else语句和for语句编辑。第八模块:优先数调度算法;使用if-else语句,while语句和if语句编辑。第九模块:时间片轮转法;if-else语句,wh订e语句和if语句编辑。第十模块:主函数;使用if-else语句编辑。2. 2. 5程序结果程序运行结果如图2. 3所示图2. 3运行结果2. 3程序源代码及注释 /*8. 3. 2源程序*/ iiinclude stdio. h iiinclude stdlib. h nclude string, h typedef struct nodechar name 10 :/*进程标识符*/int prio; /*进程优先数*/int round; /*进程时间轮转时间片*/int cputime; /*进程占用CPU时间*/int needtime; /*进程到完成还要的时间*/int count;/*计数器*/char state; /*进程的状态*/struct node *next; /*链指针*/PCB;PCB *finish, *ready, *tail, *run; /*队列指针*/int N; /*进程数*/*将就绪队列中的第一个进程投入运行*/f irstin ()run二ready;/*就绪队列头指针赋值给运行头指针*/run-state二R ;/*进程状态变为运行态*/ready=ready-next;/*就绪对列头指针后移到下一进程*/*标题输出函数*/void prtl(char a)i(toupper (a)=- PJ) /*优先数法*/printf (z, namecputime need time prior ity stat en)elsestaten);printf ( namecputime needtimecount round/*进程PCB输出*/void prt2 (char a, PCB *q)if (toupper (a)=,P )/*优先数法的输出*/printf (,z%-10s%-10d%-10d%-10d %cn, q-name,q-cputime, q-needtime, q-prio, q-state);else/*轮转法的输出*/printf (“%-10s%-10d%-10d%-10d%-10d %cn,z, q-name,q-cputime, q-needtime, q-count, q-round, q-state);/*输出函数*/void prt (char algo)PCB *p;prtl (algo) :/*输出标题*/if(run!=NULL) /*如果运行指针不空*/prt2 (algo, run) ; /*输出当前正在运行的PCB*/p二ready;/*输出就绪队列PCB*/while(p!=NULL)prt2 (algo, p);p=p-next;p二finish; /*输出完成队列的PCB*/while(p!=NULL)prt2 (algo, p);p=p-next;getch() :/*压任意键继续*/*优先数的插入算法*/insertl(PCB *q)PCB *pl, *s, *r;int b;s=q; /*待插入的PCB指针*/pl二ready; /*就绪队列头指针*/r=pl; /*r做pl的前驱指针*/b=l;while (pl !=NULL)&b)/*根据优先数确定插入位置*/if (pl-prio=s-prio)r=pl;pl二pl-next;elseb=0;if(r!=pl) /*如果条件成立说明插入在r与pl之间*/ rnext=s;snext=pl;elses-next=pl;/*否则插入在就绪队列的头*/ready=s;/*轮转法插入函数*/insert2(PCB *p2)tail-next=p2; /*将新的PCB插入在当前就绪队列的尾*/tail二p2;p2-next二NULL;/*优先数创建初始PCB信息*/void createl(char alg)PCB *p;int i,time;char na10;ready=NULL; /*就绪队列头指针*/finish二NULL; /*完成队列头指针*/run二NULL; /*运行队列指针*/printf(Enter name and time of processll); /*输入进程标识和所需时间创建PCB*/for(i=l;iname, na);p-cputime二0;p-needtime二time;p-state=,w;p-prio=50一time;if (ready !=NULL) /*就绪队列不空调用插入函数插入*/insertl(p);elsep-next=ready; /*创建就绪队列的第一个PCB*/ready二p;clrscr ();printffoutput of priority: nz/):prt (alg) ;/*输出进程PCB信息*/run-ready; /*将就绪队列的第一个进程投入运行*/ready二ready-next; run-state=,R ;/*轮转法创建进程PCB*/ void create2 (char alg)PCB *p;int i,time; char naLlO;ready二NULL;finish=NULL;run=NULL;printf (z,Enter name and time of round processn); for(i=l;iname, na);p-cputime二0; p-needtime二t ime; p-count=0; /*计数器*/ p-state二;p-round=2;/ *时间片*/if (ready!=NULL)insert2(p);elsep-next二ready;ready二p;tail=p;clrscr ();output of roundn);prt (alg) ;/*输出进程PCB信息*/printffrun-ready; /*将就绪队列的第一个进程投入运行*/ready二ready-next;run-state= R ;/*优先数调度算法*/priority(char alg)while (run!=NULL) /*当运行队列不空时,有进程正在运行*/run-cputime二run-cputime+1;run-needtime二run-needtime-1;run-prio=run-prio-3; /*每运行一次优先数降低3个单位*/ if (run-needtime=0)/*如所需时间为0将其插入完成队列*/run-next=finish;finish二run;run-state二F ;/*置状态为完成态*/run=NULL;/*运行队列头指针为空*/if (ready !=NULL) /*如就绪队列不空*/firstinO ; /*将就绪对列的第一个进程投入运行*/else /*没有运行完同时优先数不是最大,则将其变为就绪态插入到就绪队列*/if (ready! =NULL) & (run-prioready-pzrio)run-st ate二W;insertl(run);firstinO ; /*将就绪队列的第一个进程投入运行*/prt (alg) ; /*输出进程PCB信息*/*时间片轮转法*/roundrun(char alg)while(run!=NULL)runcputime二run-cputime+1;runneedtime二run-needtimeT ;runcount二run-count+1;if (run-needtime=0) /*运彳亍完将其变为完成态,插入完成队列*/runnext=finish;finish二run;run-st ate二F;run二NULL;if (ready!=NULL)firstinO; /*就绪对列不空,将第一个进程投入运行*/elseif (run-count=runround) /* 女 口 果时间片到 */runcount=0; /*计数器置 0*/if (ready !=NULL) /*如就绪队列不空*/run-state=,; /*将进程插入到就绪队列中等待轮转*/ insert2(run);firstinO ; /*将就绪对列的第一个进程投入运行*/prt (alg) : /*输出进程信息*/*主函数*/main ()char algo; /*算法标记*/clrscr ();printf (type the algor it hm: P/R (priority/roundrobin) n,?);scanf &algo) ; /*输入字符确定算法*/printf (Enter process numberll);scanf &N) ; /*输入进程数*/if (algo二二,P | | algo=,p)createl (algo) : /*优先数法*/priority(algo);elseif (algo If | | algo* r )create2 (algo) ; /*轮转法*/ roundrun (algo);第3章课程设计总结通过完成本次进程调度程序设计的任务,使我熟练和掌握了这学期所学的有关 Turboc2. 0中的一些主要知识点和应用点,如函数定义,语句的判断等等。原來我还不 知道进程调度这个名词,通过这次课程设计,也让我充分了解留什么是进程调度。可以 所学有所学,所有所用,不至于自己所学知识由于没有经历可用过程,而放弃对它的兴 趣。本次作为一门软件设计的课程,具有极强的实践性,使我加强了灵活应用理论知识 的能力及面向对象程序设计技能。此次,应用程序的设计和创建,经历了平时在课堂中和考试中,决不会有的重重难 题和问题。而这些问题,乂都是课本上很少提到的、更深一层的知识领域和应用领域。 这些问题,并不是我们平时只靠课本,就可以轻易解决的。所以,锻炼了我们面对难题, 自己思索,自己探索,自己查资料发现问题、解决问题的独断能力。当然,此次任务的完成,也体现出同学之间的团结精神。所遇种种难以解决的问题, 大家都会把它当作共同遇到的问题,在一起共同探讨,共同发挥自己所学和所知,投入 式的互相帮助和解决困难。“实践是检验真理的唯一标准”。没有实践,就不会发现和深刻体会它的真实所在。 只有通过检验的真理,在自己的心里,才会认可它的真实性。面向对象程序设计的完成, 使我们懂得了真理的重要性,理论和实际的相结合,才能真正把握所学和所掌握的知识。理论的拥有并不能代表我们的实力和能力,一切的事件和其成功都是理论和实践的 结合。总之,我们学习和掌握的知识,只有通过实际应用,才能真正的理解和掌握,才 能更好的去应用。在为期不到两周的课程设计中,我体会颇多,学到很多东西。我懂得了如何用 Turboc2. 0编写应用程序,我加强了对,利用设计这次简单计算器的机会的认识,复习 了自己以前的知识,自己的逻辑思考能力也提高不少。从而对Turboc2. 0 乂有了更深入 的认识!在这次课程设计中,我还懂得了程序开发的一些比较重要的步骤,比如需求分 析、总体设计、数据库设计,程序模块设计(含功能需求、用户界面设计、程序代码设计 与分析、运行结果)、系统使用说明等。本次的课程设计,让我巩固了原来所学习的C语言理论知识,而且还扩大了知识面, 更多接触了课本所没有的东西。初步掌握了文本菜单的制作、函数功能的实现等编程。 总之,这次课程设计让我对系统的设计有了一个初步的了解,同时也对c语言的应用有 了一个好的开始,加深了我对C语言的理解。相信经过这次的课程设计,我的C语言应 用能力将有比较大的提高。参考资料1C语言程序设计教程(第二版)秦友淑编著华中科技人学出版2002年12月2C高级实用程序设计王士元编著 清华大学出版社2000年3月3Turbo C使用人全第一册,第二册徐金梧等编译北京科海培训中心4C语言程序设计张磊高等教育出版社 书号:ISBN-7-04-016437-6 - X5C语言最新编程技巧200例作者:鲁沐浴,电子工业出版社,1997, 16C语言程序设计实用技巧与程序实例作者:梁 翎,李爱齐,上海科普出版社,1996, 57张基温.C语言程序设计教程.上海:高等教育出版社,19928崔武子.C程序设计辅导与实训清华人学出版社.20019毕万新.C语言程序设计.2005年版.大连.人连理工大学出版社.200510徐德民.最新C语言程序设计.北京:电子工业出版社,199011李春葆张植民肖忠付,C语言程序设计题典,清华人学出版社,200212张小潘/译,美科汉/著,C语言编程(第3版),电子工业出版社,200613夏云庆编著VisualC+6. 0数据库高级编程北京希望电子出版社14谭浩强.C语言程序设计.北京:清华大学出版社,2000:74-8015谭浩强主编,C程序设计题解与上机指导(第3版),清华人学出版社,2005
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 建筑环境 > 建筑资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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