




免费预览已结束,剩余17页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大 学 C语言程序设计 课程设计(论文)题目: 进程调度 院(系): 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 起止时间: 课程设计(报告)任务及评语院(系): 教研室:学 号学生姓名专业班级程序设计(报告)题目进程调度程序设计(报告)任务程序设计的任务与要求:(1)掌握C语言编程的基础知识。(2)较熟练地编写C语言应用程序。(3)了解C语言的常用标准函数、编程技巧、异常处理。(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。指导教师评语及成绩成绩: 指导教师签字: 2011 年 1 月 4 日辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)目 录第1章 课程设计的目的与要求11.1 课程设计目的11.2 课程设计的实验环境11.3 课程设计的预备知识11.4 课程设计要求1第2章 课程设计内容22.1程序功能介绍22.2程序整体设计说明32.2.1设计思路42.2.2数据结构设计及用法说明52.2.3程序结构(流程图)52.2.4各模块的功能及程序说明82.2.5程序结果82.3程序源代码及注释8第3章 课程设计总结18参考资料20第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程序整体设计说明进程调度的设计方法 1。数据结构 (1)优先级与时间片的设计 进程因等待放弃CPU时,优先级置为1(高优先级) 进程因时间片到放弃CPU时,优先级置为0(低优先级) 优先1对应时间片4;优先级0对应时间片10。 (2)进程控制块(PCB)的内容 进程标识3-9 进程优先级 0,1 进程优先级 0,1 进程等待时间 20 链接指针 2:程序算法 PCB结构,变量与主程序 struct PCB int pname; int pri; int runtime; int waitting; struct PCB*next; pcb7; struct PCB*running,ready,wait; int sin=0; main() 创建PCB3-PCB9并插入ready队列;*pname分别为3-9, pri=0,runtime=10,waittime=0 */ for(;)/*系统程序,完成初始化和处理机分派功能 */ castsig=0:swtch; sig=1:waiter; sig=3:proc3; sig=4:proc4; sig=5:proc5; sig=6:proc6; sig=7:proc7; sig=8:proc8; 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;/进程状态struct node * next;/指针Pnode;主要代码结构输入运行的进程数先定义第一个进程输出剩余的进程,输入时采用尾插法,最终建立一个循环链表对循环链表根据算法思想进行相关的处理。2.2.3程序结构(流程图) 程序流程图如图2.1、2.2所示。Toupper(a)=Pprintf(“name cputprintf(“name cputRun=ready;PCB*p;Run!=NULLPrt2(algo,run);P=ready;P!=PULLPrt2(algo.p);NYNYOVER图 2.1 程序流程图YNYNYNYNYP=finish;MultiplexRun!=NULLRun-cputime=run-cRun-next=finishRun-next=finish;MultiplexPrt(alg);Run-count=ruMutltiplexCharalgo;Algo=P|algo=Createl(algo);Algo=R|algCreate2(algo);N图 2.2 程序流程图OVER2.2.4各模块的功能及程序说明第一模块:标题输出函数;使用if-else语句编辑。第二模块:进程PCB输出;使用if-else语句编辑。第三模块:输出函数;使用if语句和while语句编辑。第四模块:优先数的插入算法;使用while语句和if-else语句编辑。第五模块:轮转法插入函数;使用for语句和if-else语句编辑。第六模块:优先数创建初始PCB信息;使用if-else语句和for语句编辑。第七模块:轮转法创建进程PCB;使用if-else语句和for语句编辑。第八模块:优先数调度算法;使用if-else语句,while语句和if语句编辑。第九模块:时间片轮转法;if-else语句,while语句和if语句编辑。第十模块:主函数;使用if-else语句编辑。2.2.5程序结果程序运行结果如图2.3所示 图 2.3 运行结果2.3程序源代码及注释/*8.3.2 源程序*/#include stdio.h#include stdlib.h#include string.htypedef struct node char name10; /*进程标识符*/ int prio; /*进程优先数*/ int round; /*进程时间轮转时间片*/ int cputime; /*进程占用CPU时间*/ int needtime; /*进程到完成还要的时间*/ int count; /*计数器*/ char state; /*进程的状态*/ struct node *next; /*链指针*/PCB;PCB *finish,*ready,*tail,*run; /*队列指针*/int N; /*进程数*/*将就绪队列中的第一个进程投入运行*/firstin() run=ready; /*就绪队列头指针赋值给运行头指针*/ run-state=R; /*进程状态变为运行态*/ ready=ready-next; /*就绪对列头指针后移到下一进程*/*标题输出函数*/void prt1(char a) if(toupper(a)=P) /*优先数法*/ printf( name cputime needtime priority staten); else printf( name cputime needtime count round staten);/*进程PCB输出*/void prt2(char a,PCB *q) if(toupper(a)=P) /*优先数法的输出*/ printf( %-10s%-10d%-10d%-10d %cn,q-name, q-cputime,q-needtime,q-prio,q-state); else/*轮转法的输出*/ printf( %-10s%-10d%-10d%-10d%-10d %-cn,q-name, q-cputime,q-needtime,q-count,q-round,q-state);/*输出函数*/void prt(char algo) PCB *p; prt1(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(); /*压任意键继续*/*优先数的插入算法*/insert1(PCB *q) PCB *p1,*s,*r; int b; s=q; /*待插入的PCB指针*/ p1=ready; /*就绪队列头指针*/ r=p1; /*r做p1的前驱指针*/ b=1; while(p1!=NULL)&b) /*根据优先数确定插入位置*/ if(p1-prio=s-prio) r=p1; p1=p1-next; else b=0; if(r!=p1) /*如果条件成立说明插入在r与p1之间*/ r-next=s; s-next=p1; else s-next=p1; /*否则插入在就绪队列的头*/ ready=s; /*轮转法插入函数*/insert2(PCB *p2) tail-next=p2; /*将新的PCB插入在当前就绪队列的尾*/ tail=p2; p2-next=NULL;/*优先数创建初始PCB信息*/void create1(char alg) PCB *p; int i,time; char na10; ready=NULL; /*就绪队列头指针*/ finish=NULL; /*完成队列头指针*/ run=NULL; /*运行队列指针*/ printf(Enter name and time of processn); /*输入进程标识和所需时间创建PCB*/ for(i=1;iname,na); p-cputime=0; p-needtime=time; p-state=w; p-prio=50-time; if(ready!=NULL) /*就绪队列不空调用插入函数插入*/ insert1(p); else p-next=ready; /*创建就绪队列的第一个PCB*/ ready=p; clrscr(); printf( output of priority:n); printf(*n); prt(alg); /*输出进程PCB信息*/ run=ready; /*将就绪队列的第一个进程投入运行*/ ready=ready-next; run-state=R;/*轮转法创建进程PCB*/void create2(char alg) PCB *p; int i,time; char na10; ready=NULL; finish=NULL; run=NULL; printf(Enter name and time of round processn); for(i=1;iname,na); p-cputime=0; p-needtime=time; p-count=0; /*计数器*/ p-state=w; p-round=2; /*时间片*/ if(ready!=NULL) insert2(p); else p-next=ready; ready=p; tail=p; clrscr(); printf( output of roundn); printf(*n); prt(alg); /*输出进程PCB信息*/ run=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) /*如就绪队列不空*/ firstin(); /*将就绪对列的第一个进程投入运行*/ else /*没有运行完同时优先数不是最大,则将其变为就绪态插入到就绪队列*/ if(ready!=NULL)&(run-prioprio) run-state=W; insert1(run); firstin(); /*将就绪队列的第一个进程投入运行*/ prt(alg); /*输出进程PCB信息*/ /*时间片轮转法*/roundrun(char alg) while(run!=NULL) run-cputime=run-cputime+1; run-needtime=run-needtime-1; run-count=run-count+1; if(run-needtime=0)/*运行完将其变为完成态,插入完成队列*/ run-next=finish; finish=run; run-state=F; run=NULL; if(ready!=NULL) firstin(); /*就绪对列不空,将第一个进程投入运行*/ else if(run-count=run-round) /*如果时间片到*/ run-count=0; /*计数器置0*/ if(ready!=NULL) /*如就绪队列不空*/ run-state=W; /*将进程插入到就绪队列中等待轮转*/ insert2(run); firstin(); /*将就绪对列的第一个进程投入运行*/ prt(alg); /*输出进程信息*/ /*主函数*/main() char algo; /*算法标记*/ clrscr(); printf(type the algorithm:P/R(priority/roundrobin)n); scanf(%c,&algo); /*输入字符确定算法*/ printf(Enter process numbern); scanf(%d,&N); /*输入进程数*/ if(algo=P|algo=p) create1(algo); /*优先数法*/ priority(algo); else if(algo=R|algo=r) create2(algo); /*轮转法*/ roundrun(algo); 第3章 课程设计总结通过完成本次进程调度程序设计的任务,使我熟练和掌握了这学期所学的有关Turboc2.0中的一些主要知识点和应用点,如函数定义,语句的判断等等。原来我还不知道进程调度这个名词,通过这次课程设计,也让我充分了解留什么是进程调度。可以所学有所学,所有所用,不至于自己所学知识由于没有经历可用过程,而放弃对它的兴趣。本次作为一门软件设计的课程,具有极强的实践性,使我加强了灵活应用理论知识的能力及面向对象程序设计技能。此次,应用程序的设计和创建,经历了平时在课堂中和考试中,决不会有的重重难题和问题。而这些问题,又都是课本上很少提到的、更深一层的知识领域和应用领域。这些问题,并不是我们平时只靠课本,就可以轻易解决的。所以,锻炼了我们面对难题,自己思索,自己探索,自己查资料发现问题、解决问题的独断能力。当然,此次任务的完成,也体现出同学之间的团结精神。所遇种种难以解决的问题,大家都会把它当作共同遇到的问题,在一起共同探讨,共同发挥自己所学和所知,投入式的互相帮助和解决困难。“实践是检验真理的唯一标准”。没有实践,就不会发现和深刻体会它的真实所在。只有通过检验的真理,在自己的心里,才会认可它的真实性。面向对象程序设计的完成,使我们懂得了真理的重要性,理论和实际的相结合,才能真正把握所学和所掌握的知识。理论的拥有并不能代表我们的实力和能力,一切的事件和其成功都是理论和实践的结合。总之,我们学习和掌握的知识,只有通过实际应用,才能真正的理解和掌握,才能更好的去应用。在为期不到两周的课程设计中,我体会颇多,学到很多东西。我懂得了如何用 Turboc2.0编写应用程序,我加强了对,利用设计这次简单计算器的机会的认识,复习了自己
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跨境电商童装童鞋2025本土化品牌合作与共赢策略报告
- 光伏发电系统热管理-洞察及研究
- 人工智能技术优化物流园区选址-洞察及研究
- 学习科学的创新教学方法研究-洞察及研究
- 根瘤菌与宿主植物的表型关联研究-洞察及研究
- 大数据在货币政策监测中的运用-洞察及研究
- 大数据分析在化妆品防伪溯源中的角色-洞察及研究
- 2025至2030中国灯箱片行业规模预测及投资运作模式分析报告
- 大型机械设备采购合同模板
- 跨境电商物流风险识别与管控策略研究报告2025版
- 人才储备机制管理办法
- 中小学生心理健康测评表
- 沔城高中生研学活动方案
- 手术室工人的工作职责
- 拥军活动策划方案
- 社区治理志愿服务课件
- 养老服务机构客户服务管理制度及流程体系
- 脑梗死的中医护理查房
- 认知行为疗法-第1篇-洞察及研究
- 护理事业十五五发展规划(2026-2030)
- 2025年学宪法、讲宪法知识竞赛题库及答案
评论
0/150
提交评论