进程调度
文章目录
- 进程调度
- 前言
- 进程和作业区别
- CPU调度程序
- 抢占调度
- 调度程序
- 上下文切换
- 调度准则
- 调度算法
前言
对于单处理器系统,同一时间只能有一个进程可以运行,其他的进程都应该等待,知道CPU空闲可以调度为止。
多道程序的目标是:CPU始终允许一个进程运行并以最大的CPU利用率。
一个进程执行直到他应等待为止,通常等待某个I/O请求的完成,而这时CPU就会处于闲置状态。
多个进程同时处于内存中时,当一个进程等待时,操作系统会从该进程接管CPU控制,并将CPU 交给另外一个进程
来使用。
-
长期调度程序
- 长期调度就行一个阀门,用于限制系统中真正被短期调度的进程数量,避免短期调度的开销过大。当长期调度为某个程序创建了进程 并将其状态设置为就绪状态后,会由短期调度进一步管理该进程。因此,长期调度决定了当前真正可被调度的进程的数量。
- 长期调度可以根据当前系统中的CPU、I/O利用率情况,选取合适的计算密集型或I/O密集型进程,交由短期调度管理。如此,可以有效地控制系统中的资源利用情况,避免出现激烈的资源竞争或某项资源的利用率过低的情况。
-
短期调度程序(CPU调度程序)
短期调度主要进程在就绪状态、运行状态、阻塞状态间的转换
进程和作业区别
- 作业是用户需要计算机完成某项任务而要求计算机所做的工作的集合,一个作业的完成需要经历作业提交、作业收容、作业执行和作业完成四个阶段。而进程是已提交的作业的执行过程,是资源分配的基本单位
- 作业是用户向计算机提交的任务实体。在用户向计算机提交作业之后,系统将他放入外存中的作业等待队列中等待执行,而进程则是完成用户任务的执行实体,是向系统分配资源的基本单位。任一进程,只要被创建,就会有一部分存在在内存当中
- 一个作业可由一个以上的进程构成,而一个进程却不能构成多个作业
CPU调度程序
每当CPU空闲时,操作系统就应从就绪队列中选择一个进程来执行,进程选择采用短期调度程序,调度程序从内存中选择一个能执行的进程,并为其分配CPU。
就绪队列不必时先进先出队列,也可以时优先队列、树、简单的无序链表等,
抢占调度
需要CPU调度的情况可分为四种情况:
- 当一个进程从运行状态切换到等待状态(例如:I/O请求,或者wait()调用)
- 当一个进程从运行状态切换到就绪状态(例如:发生中断)
- 当一个进程从等待状态切换到就绪状态(例如:I/O完成)
- 当一个进程终止。
如果调度只能发生在第一个和第四种情况,则调度方案称为 非抢占的,否则称为抢占的
调度程序
与CPU调度功能有关的另一个组件就是调度程序,调度程序是一个模块,用来将CPU控制交给由短期调度程序选择的进程,这个功能包括:
- 切换上下文
- 切换到用户模式
- 跳转到用户程序的合适位置,以便重新启动程序。
这个过程应该尽可能块,因为使用比较频繁,调度程序停止一个进程转而启动另一个进程所花费的时间称为调度延迟
上下文切换
切换CPU到另一个进程需要保存当前进程状态和恢复另一个进程状态,这个任务称为上下文切换。
在进行上下文切换时,内核会将旧进程的状态保存在PCB 中。
调度准则
- CPU利用率
- 系统吞吐量
一个时间单元内进程的完成数量
- 周转时间
从进程提交到进程完成的时间称为周转时间,周转时间是所有时间段之和,包括等待进入内存、在就绪队列中等待、在CPU上执行和I/O执行。
- 等待时间
在就绪队列中所花的时间之和
- 响应时间
提交请求到产生第一次响应的时间
调度算法
- 先来先服务(FCFS)调度算法 该算法用于作业调度也可用于进程调度,FCFS算法属于非抢占调度算法,主要特点是:算法简单、但效率底,对长作业有利,而不利于短作业。
- 短作业优先(SJF)调度算法 短作业优先调度算法是指对段作业(进程)优先调度的算法。SJF也有以下特点:
- 该算法对长作业不利,可能使得长作业长期不被调度,出现讥饿现象。
- 该算法完全没有考虑作业的紧迫程度,因而不能保证紧迫性的作业被及时处理。
- SJF调度算法的平均等待时间和平均周转时间最少。
- 优先级调度算法 在作业调度中,优先级调度算法每次从后备作业队列中选择优先级别最高的一个或者几个将他们装入内存,并分配资源创建进程放入就绪队列。在进程调度中,优先级调度算法从就绪队列中选择优先级别最高的进程,为其分配处理机,使之运行。根据调度方式,可以将优先级调度算法分为:
- 非抢占式优先级调度算法。
- 抢占式优先级调度算法。
- 时间片轮转调度算法 时间片轮转算法主要用于分时系统。进程调度算法按照先到先服务的规则选择就绪队列的第一个进程执行,但是仅能执行一个时间片,当使用完时间片后,即使进程没有完成运行也必须释放CPU,返回到就绪队列的尾部。该算法主要特点是时间片的长短对系统性能影响很大:
- 如果时间片比较长,则时间片轮转调度算法就退化为FCFS调度算法。
- 如果时间片比较短,那么处理机将在进程间过于频繁的切换,系统开销很大。
- 多级队列调度算法 它将就绪队列分为多个独立的队列,例如系统进程队列、交互进程队列…。根据进程属性,一个进程被永久的分配到一个队列中,每个队列都有自己的调度算法。另外,队列之间必须有调度,通常采用固定优先级抢占调度。每个队列与更低层队列相比具有绝对的优先级。每个进程永远只在一种队列中,这种调度的优点是低调度开销,缺点是不够灵活。
- 多级反馈队列调度算法 它的主要思想是根据不同的CPU区间特点来区分进程,如果进程使用过多的CPU时间,那么他会被转移到更低优先级队列,此外在较低优先级队列中等待时间较长的进程会被移动到更高优先级队列。这种调度方式可以阻止讥饿的发生
此部分摘取自:https://blog.csdn.net/TuxedoLinux/article/details/85232496