资源描述:
《《操作系统原理与linux》课程设计报告new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《操作系统原理与Linux》课程设计报告专业班级学号姓名指导教师完成时间成绩进程调度算法一、设计题目:进程调度算法二、设计目的通过对进程调度算法的编写加强对操作系统的加深了解,从而进一步的让我们清楚个进程之间的运行情况,对优先权算法与轮转调度算法的模拟加强对进程概念和进程的调度过程的理解,掌握进程状态之间的切换,同时掌握进程调度算法的实现方法和技巧。三、设计要求要求实现先来先服务,短作业优先,时间片轮转,优先权调度算法四种算法并进行对比分析.四、设计思想说明1、先来先服务算法:按照进程进入就绪队列的先后次序,分派CPU,当前进程占用CPU,直到执行完或阻塞,才出让CPU(非抢占
2、方式)。在进程唤醒后(如I/O完成),并不立即恢复执行,通常等到当前进程让出CPU。先来先服务算法的实现过程如图所示。设置信号量:就绪队列互斥信号量s,初值为1;就绪队列中进程个数n,初值为0。2、短作业优先:选择就绪队列中估计运行时间最短的进程投入运行。通常后来的短作业不抢先正在执行的作业。比FCFS改善平均周转时间和平均带权周转时间,缩短作业的等待时间提高系统的吞吐量。3、时间片轮转调度算法:通过时间片轮转,提高进程并发性和响应时间特性,从而提高资源利用率。将系统中所有的就绪进程按照FCFS原则,排成一个队列。每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长
3、度从几个ms到几百ms。在一个时间片结束时,发生时钟中断。调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过CPU现场切换执行当前的队首进程。进程可以未使用完一个时间片,就出让CPU(如阻塞)。4、优先权调度算法:优先选择就绪队列中优先级最高的进程投入运行。分为:非抢占式优先级算法:仅发生在进程放弃CPU。抢占式优先级算法:可剥夺当前运行进程CPU。五、系统结构的说明六、数据结构的说明用C语言或C++语言来实现对N个进程采用优先算法以及轮转算法的调度。队列指针Next用来将多个进错控制块PCB链接为队列。voidinit();/*产生idle进程,输入用户进程数目,
4、调用insert()*/voidprint(PCB*pcb);/*输出进程属性信息*/voidprint_init(PCB*pcb);/*输出所有PCB的初始值*/voidinsert();/*生成进程属性信息,插入进程就绪队列*/voidRun_priority(PCB*pcb);/*运行进程,随机阻塞进程、产生新进程,插入就绪队列,唤醒阻塞进程*/voidblock(PCB*pcb);/*调用destroy()将进程插入阻塞队列*/voidwakeup();/*唤醒进程,插入就绪队列*/voidproc_priority();/*优先权调度算法模拟*///voidRun_l
5、oop(PCB*pcb);voidproc_loop();/*轮转法调度算法模拟*/voidupdate(PCB*pcb);/*更新进程信息*/voidpushback_queue(PCB*queue,PCB*item);/*将item插入到队列的尾部*/voidinsert_queue(PCB*queue,PCB*item);/*将item插入到队列中,使得插入后,队列中按照优先级从高到低有序*/voidsort_queue(PCB*&queue);/*对queue中的结点进行排序,按照优先级从大到小*/PCB*ready_queue,*block_queue,*idlepr
6、ocess;/*就绪队列,阻塞队列及闲逛进程指针变量*/七、程序清单:短作业优先:#includestructsjf{charname[10];floatarrivetime;floatservicetime;floatstarttime;floatfinishtime;floatzztime;floatdqzztime;};sjfa[100];voidinput(sjf*p,intN){inti;printf("intputtheprocess'sname&arrivetime&servicetime:forexmple:a0100");for(i=
7、0;i<=N-1;i++){printf("inputthe%dthprocess'sinformation:",i+1);scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);}}voidPrint(sjf*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,floatzztime,floatdqzztime,intN){intk;