目录
1 进程调度的概念和作用
1.1 调度的概念
在多道程序系统中,进程的数量往往多于处理机的个数,进程争用处理机的情况就在所难免。处理机调度是对处理机进行分配,就是从就绪队列中,按照一定的算法(公平、髙效)选择一个进程并将处理机分配给它运行,以实现进程并发地执行。
1.2 调度的层次
(1)作业调度,又称高级调度。其主要任务是按一定的原则从外存上处于后备状态的作业中挑选一个(或多个)作业,给它(们)分配内存、输入/输出设备等必要的资源,并建立相应的进程,以使它(们)获得竞争处理机的权利。简言之,就是内存与辅存之间的调度。对于每个作业只调入一次、调出一次。
(2)中级调度,又称内存调度。引入中级调度是为了提高内存利用率和系统吞吐量。为此,应使那些暂时不能运行的进程,调至外存等待,把此时的进程状态称为挂起状态。当它们已具备运行条件且内存又稍有空闲时,由中级调度来决定,把外存上的那些已具备运行条件的就绪进程,再重新调入内存,并修改其状态为就绪状态,挂在就绪队列上等待。
(3) 进程调度,又称为低级调度。其主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。进程调度是操作系统中最基本的一种调度,在一般操作系统中都必须配置进程调度。进程调度的频率很高,一般几十毫秒一次。[1]
1.3 进程调度的概念
进程调度是操作系统进程管理的一个重要组成部分。其任务是选择下一个将要运行的进程。即在CPU变为空闲时(如占用CPU的进程执行IO操作),操作系统拿走其CPU控制权,从其他就绪队列中,选择一个进程来执行。
进程调度的原因:当前的计算机CPU是有限的,进程数量比较多的(CPU核心数只有6核,进程数量却非常多),为了保证CPU的公平,于是有了并发式执行和并行式执行,并发执行则是在宏观上这些进程同时执行,而在微观上并不是同时,采用“轮流”的方式在CPU执行。并行式执行则是由于CPU上有多个核心,每个核心上都可以跑一个进程,某时刻两个进程就是在两个CPU上同时执行。[2]
1.4 进程调度的作用
(1)记录系统中所有进程的状态,优先数及资源请求情况。
(2)确定调度算法
(3)为进程分配处理机
1.5 进程调度的方式
所谓进程调度方式是指当某一个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更髙的进程进入就绪队列,此时应如何分配处理机。通常有以下两种进程调度方式:
(1)非剥夺调度方式,又称非抢占方式。是指当一个进程正在处理机上执行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程完成或发生某种事件而进入阻塞状态时,才把处理机分配给更为重要或紧迫的进程。在非剥夺调度方式下,一旦把CPU分配给一个进程,那么该进程就会保持CPU直到终止或转换到等待状态。这种方式的优点是实现简单、系统开销小,适用于大多数的批处理系统,但它不能用于分时系统和大多数的实时系统。
(2) 剥夺调度方式,又称抢占方式。是指当一个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给这个更为重要或紧迫的进程。.釆用剥夺式的调度,对提高系统吞吐率和响应效率都有明显的好处。但“剥夺”不是一种任意性行为,必须遵循一定的原则,主要有:优先权、短进程优先和时间片原则等。
2 内核任务调度策略
2.1 常见的三种调度策略
(1)SCHED_OTHER分时调度策略。
(2)SCHED_FIFO实时调度策略,先到先服务,一旦占用cpu则一直运行,一直运行直到有更高优先级任务到达或自己放弃。
(3)SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平。
2.2 最短作业优先调度算法(SJF)
最短作业优先(Shortest-Job First)调度算法克服了先来先服务调度算法(FCFS)的对短进程不利的缺点,它在就绪队列中选择处理时间最短的进程,如果时间相同则可以按照FCFS准则来处理。它提高了系统的吞吐量,但是反过来又对长进程不利。它分为抢占式和非抢占式两种情况。抢占式的SJF叫最短剩余时间优先算法(shortest-remaining-time-first);非抢占式的SJF更确切地称为最短下次CPU执行算法(shortest-next-CPU-burst)。[3]
优点:SJF的平均等待时间最小,是最优的调度算法。
缺点:获取下次CPU执行长度比较困难。
用途:经常用于长期调度。
2.3 轮转调度算法Round-Robin(RR)
时间片是指一个较小的时间间隔,通常为10-100毫秒。在简单的轮转算法中,系统将所有的就绪进程按先来先服务(即FIFO)规则排成一个队列,将CPU分配给队首进程,且规定每个进程最多允许运行一个时间片;若时间片使用完进程还没有结束,则被加入就绪FIFO队列队尾,并把CPU交给下一个进程。时间片轮转算法只用于进程调度,它属于抢占调度方式。
优点:CPU分配相对公平,平均响应时间较短。
缺点:不利于紧急作业,而且当进程的运行时间都相近时,平均的等待时间比较长,甚至不如先来先服务算法。
用途:经常被用于分时系统中的进程调度。
3 调度函数schedule()
时间片是指一个较小的时间间隔,通常为10-100毫秒。在简单的轮转算法中,系统将所有的就绪进程按先来先服务(即FIFO)规则排成一个队列,将CPU分配给队首进程,且规定每个进程最多允许运行一个时间片;若时间片使用完进程还没有结束,则被加入就绪FIFO队列队尾,并把CPU交给下一个进程。时间片轮转算法只用于进程调度,它属于抢占调度方式。
优点:CPU分配相对公平,平均响应时间较短。
缺点:不利于紧急作业,而且当进程的运行时间都相近时,平均的等待时间比较长,甚至不如先来先服务算法。
用途:经常被用于分时系统中的进程调度。
参考文献
[1]汤小丹,梁红兵,哲凤屏等.计算机操作系统(修订版)[M].西安:西安电子科技大学出版社,2003.
[2]张凤芝,王肃静,宁禄乔.操作系统原理教程[M].北京:北京希望电子出版社,2002.
[3]雷振阳,雷向东,龙军等.多核系统中并行实时任务调度策略.信息技术,2022.
[4]万海龙.linux嵌入式开发基本研究.西部皮革.2017.