版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计 课程设计(论文)题目: _进程调度院(系): _专业班级: _学 号:_学生姓名:_指导教师:_教师职称:_起止时间:_课程设计(报告)任务及评语教研室:号学程序设计 (报告) 题目程序设计(报告)任务JZJZ 77 JXJX JZJZ - - JXJX 、LInLIn刀 序 1235612356 j j 7 7 是果也 zfzf z(z( z(xz(x z(xz(x z(z( fxfx 、t tJ J指导教师评语及成绩日4 4月1x1x 字年 z:iz:i 1x1x 师201201 成院(系):第1章课程设计的目的与要求 .111课程设讣口的.11.2课程设讣的实验环境.11
2、3课程设计的预备知识.114课程设讣要求.1第2章课程设计内容 .221程序功能介绍.222程序整体设计说明.322 1设讣思路 .42.2.2数据结构设计及用法说明 .5223程序结构(流程图) .52. 2. 4各模块的功能及程序说明.822.5程序结果 .82. 3程序源代码及注释 .8第3章课程设计总结.18参考资料 .20第1章课程设计的目的与要求1.1课程设计LI的本课程设计是汁算机科学与技术专业重要的实践性环节之一,是在学生学习完程 序设计语言(C)课程后进行的一次全面的综合练习。本课程设计的目的和任务:1.巩固和加深学生对C语言课程的基本知识的理解和掌握2.掌握C语言编程和程序
3、调试的基本技能3.利用C语言进行基本的软件设计4.掌握书写程序设计说明文档的能力5.提高运用C语言解决实际问题的能力1.2课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。C语言程序设计及相应的开 发环境。1.3课程设汁的预备知识熟悉C语言及C语言开发工具。1.4课程设计要求1.分析课程设计题U的要求2.写出详细设计说明3.编写程序代码,调试程序使其能正确运行4.设计完成的软件要便于操作和使用5.设计完成后提交课程设计报告第2章课程设计内容2.1程序功能介绍在多道程序环境下,进程数H往往多于处理机数tl,致使他们争用处理机。这就要 求系统能按某种算法,动态地把处
4、理机分配给就绪队列中的一个进程,使之运行。分配 处理机的任务是山进程调度程序完成的。一个进程被建立后,系统为了便于对进程进行 管理,将系统中的所有进程按其状态,将其组织成不同点进程队列。于是系统中有运行 进程队列、就绪队列和各种事件的进程等待队列。进程调度的功能就是从就绪队列中挑 选一个进程到处理机上运行。本课题模拟实现进程调度算法,选用了优先数调度算法和时间片轮转算法。2. 2程序整体设计说明进程调度的设计方法lo数据结构(1)优先级与时间片的设计进程因等待放弃CPI;时,优先级置为1 (高优先级)进程因时间片到放弃CPU时,优先级置为0 (低优先级)优先1对应时间片4;优先级0对应时间片1
5、0o(2)进程控制块(PCB)的内容进程标识3-9进程优先级0, 1进程优先级0, 1进程等待时间20链接指针2:程序算法PCB结构,变量与主程序struct PCBint pname;int pri:int runtime;int waitting;struct PCB*next;pcb7;struct PCB*running, ready, wait;int sin二0;main()创建 PCB3PCB9并插入 ready 队列;/ *pname 分别为 39,pri=O,runtime=10, waittime二0 */for(;)/*系统程序,完成初始化和处理机分派功能*/castsi
6、g=O:swtch;sig=l:waiter;sig=3:proc3;sig=4:proc4;sig=5:procS;sig=6:proc6;sig=7:proc7;sig=8:procS;sig=9:proc9;2. 2. 1设计思路1设讣进程进程控制块PCB表结构,分别适用于优先数调度算法和循环轮转调度算 法。PCB结构通常包括以下信息:进程名,进程优先数(或轮转时间片),进程所占用 的CPU时间,进程的状态,当前队列指针等。根据调度算法的不同,PCB结构的内容可 以作适当的增删。建立进程就绪队列。对两种不同算法编制入链子程序。编制两种进程调度算法:1) 优先度调度;2)循环轮转调度。本程
7、序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态 为就绪状态。为了便于处理,程序中的运行时间以时间片为单位计算,各进程的优先数或轮转时间数 以及进程需要运行的时间片数的初值均山用户给定。在优先数算法中,初始优先数为50-NEEDTIME,进程每执行一次,优先数减3, CPU 时间片数加1,进程还需要的时间片数减1,在轮转算法中,采用固定时间片,时间片数 为2进程每执行1次,CPU时间片数加2,进程还需要的时间数减2,并排列到就绪队列 的尾上。2.2.2数据结构设计及用法说明主要数据结构定义进程Typedef struct nodeint Pname; /进程名int Rti
8、me;/进程要求执行时间int rtime;/进程已执行时间char state;/进程状态st rue t node * nex t; /指针Pnode;主要代码结构输入运行的进程数先定义第一个进程输出剩余的进程,输入时釆用尾插法,最终建立一个循环链表对循环链表根据算法思想进行相关的处理。2.2.3程序结构(流程图)程序流程图如图2.1、2.2所示。图2.1程序流程图224各模块的功能及程序说明第一模块:标题输出函数;使用if-else语句编辑。第二模块:进程PCB输出;使用if-else语句编辑。第三模块:输出函数:使用辻语句和wh订e语句编辑。第四模块:优先数的插入算法;使用while语
9、句和if-else语句编辑。第五模块:轮转法插入函数;使用for语句和if-else语句编辑。第六模块:优先数创建初始PCB信息;使用if-else语句和for语句编辑。第七模块:轮转法创建进程PCB;使用辻-else语句和for语句编辑。第八模块:优先数调度算法;使用if-else语句,wh订e语句和辻语句编辑。第九模块:时间片轮转法;if-else语句,wh订e语句和辻语句编辑。第十模块:主函数;使用if-else语句编辑。2. 2. 5程序结果程序运行结果如图23所示图2. 3运行结果2. 3程序源代码及注释 /*8. 3. 2源程序*/ include stdio. h #includ
10、e stdlib. h #include string h typedef struct nodechar name 10 :/*进程标识符*/int prio; /*进程优先数*/int round;/*进程时间轮转时间片*/int cputime: /*进程占用CPU时间*/staten,z);int needtime; /*进程到完成还要的时间*/int count:/*计数器*/char state; /*进程的状态*/struct node *next: /*链指针*/PCB;PCB *finish, *ready, *tail, *run; /*队列指针*/int N; /*进程数
11、*/*将就绪队列中的第一个进程投入运行*/firstin()run二ready;/*就绪队列头指针赋值给运行头指针*/run-state二R ;/*进程状态变为运行态*/ready二ready-next;/ *就绪对列头指针后移到下一进程*/*标题输出函数*/void prtl(char a)if(toupper(a)=,P) /*优先数法*/printf C namecputime needtime priority staten)elseprintf C namecputime needtime count round/*进程PCB输出*/void prt2(char a,PCB *q)i
12、f (toupper (a) =,P)/*优先数法的输出*/printfC %-10s%-10d%-10d%-10d %cn, q-name, q-cputime, q-needtime, q-prio, q-state);else/*轮转法的输出*/printf C %-10s%10d%-10d%-10d%-10d %-cn, q-name, q-cputime, q-needtime, q-count, q-round, q-state);/*输出函数*/void prt(char algo)PCB *p;prtl (algo) :/*输出标题*/if(run!=NULL) /*如果运行指
13、针不空*/prt2 (algo, run) ; /*输出当前正在运行的PCB*/p二ready;/*输出就绪队列PCB*/wh 订 e(p!二 NULL)prt2(algo, p);p=p-next;p二finish; /*输出完成队列的PCB*/wh订e(p!=NULL)prt2(algo, p);p=p-next;getch() ;/*压任意键继续*/*优先数的插入算法*/insert1(PCB *q)PCB *pl, *s, *r;int b;s=q; /*待插入的PCB指针*/pl二ready; /*就绪队列头指针*/r=pl; /*r做pl的前驱指针*/b二 1;wh订e (pl!二
14、NULL)&b) /*根据优先数确定插入位置*/ if(pl-prio=sprio)r 二pl;pl=pl-next;elseb 二0;if(r!=pl) /*如果条件成立说明插入在r与pl之间*/ r-next=s;s-next=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
15、na10;ready二NULL; /*就绪队列头指针*/finish二NULL; /*完成队列头指针*/run二NULL; /*运行队列指针*/printf (Enter name and time of processn) ; /*输入进程标识和所需时间创建PCB*/for(i=l;iname, na);p-cputimez:O;p-needt ime=t ime;p-state=,w,;p-prio=50-time;if (ready !=NULL)就绪队列不空调用插入函数插入*/insert 1 (p);elsep-next=ready; /*创建就绪队列的笫一个PCB*/ready=p
16、;clrscr ();printf(,zprt (alg) ;/*输出进程PCB信息*/run=ready; /*将就绪队列的第一个进程投入运行*/ready=ready-next; run-state二R ;/*轮转法创建进程PCB*/ void create2(cha:r alg)PCB *p;int i,time; char na10: ready二NULL; finish二NULL;run二NULL;printf (Enter name and time of round processll);for(i=l;iname, na);p-cputime=O;p-needt ime=t i
17、me;p-count二0; /*计数器*/p-stdte二飞;p-round=2;/ *时间片*/if(ready!=NULL) insert2(p);elseout put of priority: nzz):out put of roundnzz);p-next=ready;ready=p;tail=p;clrscr ();printf(,zpp intf( *n)prt (alg) ;/*输出进程PCB信息*/run二ready; /*将就绪队列的第一个进程投入运行*/ready 二:ready-next;run-state=* R ;/*优先数调度算法*/priority(char a
18、lg)while (run!=NULL) /*当运行队列不空时,有进程正在运行*/runcput ime=run-cput ime+1;run-needtime二:run-needtimeT ;run-prio=run-prio-3; /*每运行一次优先数降低3个单位*/ if (run-needtimeO) /*如所需时间为0将其插入完成队列*/run-next=finish;finish=run;run-state二F ;/*置状态为完成态*/run二NULL; /*运行队列头指针为空水/if (ready !=NULL) /*如就绪队列不空*/f让stin() ; /*将就绪对列的第一个
19、进程投入运行*/else /*没有运行完同时优先数不是最大,则将其变为就绪态插入到就绪队列*/if(ready!=NULL)&(run-prioready-prio)run-state二W;insert 1(run);firstinO ; /*将就绪队列的第一个进程投入运行水/)prt (alg) : /*输出进程PCB信息*/*时间片轮转法*/roundrun(char alg)wh订e(run!=NULL)run-cput ime=runcput ime+1;run-needtime二run-needtimeT ;run-count=run-count+1;if(run-needtime0
20、) /*运行完将其变为完成态,插入完成队列*/run-next二f inish;finish二run;run-state二F;run二NULL;if (ready!=NULL)firstinO; /*就绪对列不空,将第一个进程投入运行水/else辻(run-countrun-round) / 水如果时间片到*/run-count=0; /*计数器置 0*/if (ready !=NULL) /*如就绪队列不空*/run-state二W ; /*将进程插入到就绪队列中等待轮转*/ insert2(run);f让stin() ; /*将就绪对列的笫一个进程投入运行*/prt (alg) : /*输
21、出进程信息*/*主函数*/main()char algo; /*算法标记*/clrscr ();printf (type the algorithm:P/R(priority/roundrobin) n,z): scanf C%c, &algo) ; /*输入字符确定算法*/printf(Enter process numbern);scanf(%r,&N); /*输入进程数*/if (algo* P? algo* p*)createl (algo) : /*优先数法*/priority(algo);elseif (algo二二R algo=,r)create2 (algo): /*轮转法*/
22、 roundrun(algo);第3章课程设计总结通过完成本次进程调度程序设汁的任务,使我熟练和掌握了这学期所学的有关 Turboc2. 0中的一些主要知识点和应用点,如函数定义,语句的判断等等。原来我还不 知道进程调度这个名词,通过这次课程设讣,也让我充分了解留什么是进程调度。可以 所学有所学,所有所用,不至于自己所学知识山于没有经历可用过程,而放弃对它的兴 趣。本次作为一门软件设计的课程,具有极强的实践性,使我加强了灵活应用理论知识 的能力及面向对象程序设计技能。此次,应用程序的设计和创建,经历了平时在课堂中和考试中,决不会有的重重难 题和问题。而这些问题,乂都是课本上很少提到的、更深一层
23、的知识领域和应用领域。 这些问题,并不是我们平时只靠课本,就可以轻易解决的。所以,锻炼了我们面对难题, 自己思索,自己探索,自己查资料发现问题、解决问题的独断能力。当然,此次任务的完成,也体现出同学之间的团结精神。所遇种种难以解决的问题, 大家都会把它当作共同遇到的问题,在一起共同探讨,共同发挥自己所学和所知,投入 式的互相帮助和解决困难。“实践是检验真理的唯一标准”。没有实践,就不会发现和深刻体会它的真实所在。 只有通过检验的真理,在自己的心里,才会认可它的真实性。面向对象程序设计的完成, 使我们懂得了真理的重要性,理论和实际的相结合,才能真正把握所学和所掌握的知识。理论的拥有并不能代表我们的实力和能力,一切的事件和其成功都是理论和实践的 结合。总之,我们学习和掌握的知识,只有通过实际应用,才能真正的理解和掌握,才 能更好的去应用。在为期不到两周的课程设计中,我体会颇多,学到很多东西。我懂得了如何用 Turboc2. 0编写应用程序,我加强了对,利用设计这次简单计算器的机会的认识,复习 了自己以前的知识,自己的逻辑思考能力也提高不少。从而对Turboc2. 0 乂有了更深入 的认识!在这次课程设计中,我还懂得了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2031年中国速冻甜玉米仁行业投资前景及策略咨询研究报告
- 2025至2030年中国防滑EVA底露趾毛巾拖鞋数据监测研究报告
- 2025至2030年中国磁选机数据监测研究报告
- 2025至2030年中国变速器支承数据监测研究报告
- 二零二五年度个人心理咨询合同范本下载心理健康护航2篇
- 2025版水电站消防安全检测与维护保养合同范本3篇
- 二零二五年度城市供水供电综合保障服务合同3篇
- 二零二五年度城市社区蔬菜直供购销协议2篇
- 数据结构试题及答案-经典期末试题
- 企业聘用合同书
- 初中公寓主任述职报告
- 中国绿色食品市场调查与分析报告
- 九年级下册沪教版上海化学5.2酸和碱的性质研究 课件
- ISO17025经典培训教材
- 手卫生依从性调查表
- 湖北教育出版社四年级下册信息技术教案
- 背景调查报告
- 五年级语文下册全册教材分析
- 业主委员会成员推荐表
- 九年级下册-2023年中考历史总复习知识点速查速记(部编版)
- GB/T 18103-2022实木复合地板
评论
0/150
提交评论