进程调度算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设计题目
进程调度算法的设计
二、设计目的
通过这次课程设计,加深理解有关进程控制块、进程队列的概念,并体会和了解优先数和循环轮转调度算法的具体实施办法。
培养程序设计的方法和技巧,提高编制清晰、合理、可读性好的系统程序的能力,同时加深对操作系统课程的理解。
通过对进程调度算法的设计,深入理解进程调度的原理。
进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
进程调度分配处理机,是控制协调进程对CPU的竞争,即按一定的调度算法从就绪队列中选中一个进程,把CPU的使用权交给被选中的进程。
进程通过定义一个进程控制块的数据结构(PCB)来表示;每个进程需要赋予进程ID、进程到达时间、进程需要运行的总时间的属性;在RR中,以1为时间片单位;运行时,输入若干个进程序列,按照时间片输出其执行序列。
三、设计内容
1.用语言来实现对n个进程采用不同调度算法的进程调度。
2.每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:(1)进程优先数ID,其中0为闲逛进程,用户进程的标识数为1,2,3…。
(2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,优先数越大,优先级越高。
(3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。
(4)进程总共需要运行时间Alltime,利用随机函数产生。
(5)进程状态,0:就绪态;1:运行态;2:阻塞态。
(6)队列指针next,用来将多个进程控制块PCB链接为队列。
3.优先数改变的原则
(1)进程在就绪队列中每呆一个时间片,优先数增加1。
(2)进程每运行一个时间片,优先数减3。
4.在调度前,系统中拥有的进程数PCB_number由键盘输入,经初始化后,所有的进程控制块PCB链接成就绪队列。
四、实验原理
1、先来先服务调度算法
该算法思想是按照进入就绪队列的先后次序来分配处理机。
FCFS采用非剥夺调度方式,即一旦某个进程占有处理机,就一直运行下去,直到该进程完成其工作或因等待某一事件而不能继续执行时才释放处理机。
2、短作业优先调度算法
该算法的基本思想是从就绪队列(内存)中选择一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度
3、轮转法
前几种算法主要用于批处理系统中,不能作为分时系统中的主调度算法,在分时系统中,都采用时间片轮转法。
循环轮转调度算法的具体原理是:每个进程被分配一个时间片,即该进程允许运行的时间。
就绪的进程都存放在一个就绪链表中,队首的进程将获得时间片。
如果在时间片结束时进程还在运行,则CPU将剥夺并分配给下一个进程。
调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。
五、具体要求
1、本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。
2、为了便于处理,程序中的某进程运行时间以时间片为单位计算。
各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。
3、在优先数算法中,优先数的值为50与运行时间的差值,即P_TIME-process->needtime。
进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。
在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了2个单位),这时,CPU时间片数加2,进程还需要的时间片数减2,并排列到就绪队列的尾上。
4、对于遇到优先数一致的情况,采用FIFO策略解决。
六、设计步骤
1、任务分析
(1)PCB结构通常包括以下信息:进程名,进程优先数,轮转时间片,进程已占用的CPU时间,进程还需要的CPU时间,进程的状态,当前队列指针等。
可根据实验的不同,PCB结构的内容可以作适当的增删
(2)本程序用两种算法对五个进程进行调度,每个进程可有三个状态:就绪、执行、完成。
并假设初始状态为就绪状态。
(3)为了便于处理,程序中的某进程运行时间以时间片为单位计算。
各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。
(4)在优先数算法中,优先数可以先取值为一个常数减去进程所需要的时间片数目,进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。
在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了2个单位),这时,CPU时间片数加2,进程还需要的时间片数减2,并排列到就绪队列的尾上。
(5)对于遇到优先数一致的情况,采用FIFO策略解决。
2、概要设计
(1)、本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。
(2)、为了便于处理,程序中的某进程运行时间以时间片为单位计算。
各
进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。
(3)、在优先数算法中,优先数的值为50与运行时间的差值,即P_TIME-process->needtime 。
进程每执行一次,优先数减3,CPU 时间片数加1,进程还需要的时间片数减1。
在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了2个单位),这时,CPU 时间片数加2,进程还需要的时间片数减2,并排列到就绪队列的尾上。
(4)、对于遇到优先数一致的情况,采用FIFO 策略解决。
3、流程图
开始
生成并按生成次序
排列进程控制块链
链首进程投入运行
时间片到,进程时间
片减1,优先级减3
撤销该进程
运行进程退出,取
链首进程投入运行
时间片为
0? 优先级大于队列中优先级最高的进程?
进程队列
为空?
结束
七、程序测试数据及结果
1、程序测试数据
2、运用优先数调度算法的执行结果
3、运用循环轮转调度算法的执行结果
八、设计总结
通过本次的课程设计,使我能够正确运用操作系统课程中所学的基本理论和知识,加深了对进程调度基本概念的理解,还有让我感受很深的是对C++语言的应用,由于对C++语言在平时运用的不够,在对C++语言的使用尤其是在编写代码方面很欠缺,在组织语言时出错不断。
在设计过程中,需要大量的相关资料,为了本次课程设计我在网上和图书馆查阅了大量资料,不断的发现问题、提出问题、解决问题。
在编程和调试的过程中,经常会出现意想不到的问题,并非每个问题都可以从相关资料中找到解决方法,有些问题是无法预料到的,这就需要通过自己理性的分析得出问题的解决方案。
我还希望我们可以有更多这样的学
习机会,使我们的知识体系变的更加牢固。