进程调度
进程调度是,当操作系统有多个进程需要执行时,操作系统来决定资源分配和进程执行顺序的一个机制。
常见的进程调度算法有:
- 先来先服务算法(FCFS):按照进程提交的顺序进行服务
- 短作业优先算法(SJF):优先处理预计运行时间短的进程。
- 优先级调度算法:根据进程的优先级来分配资源,优先级高的进程优先获得资源(执行)。
- 时间片轮转算法:将CPU时间分割成一系列的时间片,每个进程被分配一个时间片,在该时间片中,进程可以执行其代码。
先来先服务算法
先来先服务(Fist-Come,Fist-Served,FCFS)算法。
是一种非抢占式的进程调度算法,根据进程到达时间的先后顺序进行调度(执行)。即先来先执行。
流程:当有新进程到达时,会将新进程放入队列的末端,等到队列前面的进程,系统每次选择队列中的首个进程进行执行。
特点:
- 非抢占式:一旦进程或作业开始执行,就不会因为其他进程或作业的到来而中断。
- 按到达时间先后顺序:先到达的进程或作业将被优先执行。
- 公平性:每个进程或作业都有机会按顺序执行,不会有的进程或作业永远得不到执行。
- 简单性:算法的实现较为简单,易于理解和实施。
应用场景:
- 批处理系统
- 交互式系统
- 实时系统
通常与其他调度算法相结合更符合实际情况。
短作业优先算法
短作业优先(Shorted Job First,SJF)算法。
也是一种非抢占式的进程调度算法那。
核心思想是优先调度执行时间最短的作业(进程),
以减少作业的平均等待时间来提高系统的吞吐量和响应速度。
流程:当一个新作业到达系统时,系统会将其与当前在执行的作业进程比较(剩余执行时间),若新作业的执行时间更短,则系统会暂停当前作业,转而执行新作业。
实现方法:
在系统开始工作时,需要维护一个就绪队列,该队列包含所有 已到达且尚未
被调度 的作业。从队列中选择执行时间最短的作业进行调度。
倘若有新作业到来,进行比较,若正在执行的作业被暂停,则将其移到阻塞队列中等待唤醒。(一个新的队列,优先级高于就绪队列)
当新作业执行完后,检查阻塞队列中是否有未完成的作业,若有则执行,否则从就绪队列中选择执行时间最短的作业进行调度。
优缺点:
优
-
减少平均等待的时间:由于短作业会被优先执行,因此可以显著减少作业的等待时间
-
提高系统吞吐量:短作业的快速执行有助于释放CPU资源,使得系统能够在短时间内完成更多作业,从而提高吞吐量。
缺
- 对长作业不利:长作业可能需要等待较长时间才能得到执行,这可能导致长作业饥饿。
- 预测执行时间:在实际应用中,作业的实际执行时间可能与估计的时间不符,这会影响调度性能。
应用场景:
适用于对响应时间和效率有较高要求的系统。
可用于批处理系统、交互式系统以及实时系统。
通常与其他调度算法相结合更符合实际情况。
优先级调度算法
思想:
在优先级调度算法中,系统会为每个进程设置一个优先级,进程的优先级决定了其被调度的顺序。优先级高的先被调度。
可以有效地减少长作业的等待时间,提高系统的吞吐量和反应速度。
优先级调度算法可以分为非抢占式和抢占式。
- 非抢占式优先级调度算法中,一旦进程开始执行,就不会因为其他进程的到来而中断。
- 而抢占式优先级调度算法中,当有优先级更高的进程到来时,正在执行的进程会被中断,优先执行高优先级的进程。
优先级可以分静态与动态。
- 静态优先级在创建进程时就要确定,并在进程的整个运行期间保持不变。
- 动态优先级则可以根据进程的行为(如等待时间的长短)而发生动态变化,以达到更好的调度效果。
算法实现:
-
收集进程信息:进程的达到时间、执行时间、优先级等信息;
-
就绪队列:将所有已到达且尚未被调度的进程加入到一个就绪队列中。每次调度时,都选择优先级更高的进程进行执行。
-
阻塞队列:跟短作业优先一样。如果进程在运行过程中发生阻塞,则将其移到阻塞队列中等待唤醒。
-
进程完成后的处理:当一个进程完成执行后,检查就绪队列中是否还有未完成的进程,如果有,则继续执行下一个优先级最高的进程。
-
性能评估:在调度过程中,需要计算作业的周转时间和带权周转时间,以此来评估调度算法的性能。
时间片轮转算法
时间片轮转算法(Round-Robin,RR)
一种简单的进程调度算法,主要用于分时系统。
将CPU时间分割成一系列的时间片,每个进程被分配一个时间片的执行时间,若进程在一个时间片没有执行完毕,那么它将会被暂停,等待下一个CPU周期的分配到时间片时再次继续执行。
时间片轮转算法保证了每个进程在一定时间内均能被获得CPU执行时间,从而实现了进程间的公平竞争。
实现原理:
先将所有就绪的进程按先来先服务的原则,加入一个执行队列。每次调度选择队首进程来执行,执行时间为一个时间片,该时间片执行完后,判断进程是否结束,结束则退出,否则加入到就绪队列的尾部,等待下一次执行
优点:
-
简单且公平,每个进程都有平等的执行机会。
-
易于实现,适合于单处理器环境。
-
可以有效地控制CPU使用率,提高系统响应速度。
缺点:
-
在高并发情况下,进程切换的开销可能导致效率下降。
-
对实时性支持较差,不适合对实时性要求高的系统。
- 在多核CPU环境下,无法充分利用处理器的并行能力