操作系统——进程调度

进程调度

进程调度是,当操作系统有多个进程需要执行时,操作系统来决定资源分配和进程执行顺序的一个机制。

常见的进程调度算法有:

  • 先来先服务算法(FCFS):按照进程提交的顺序进行服务
  • 短作业优先算法(SJF):优先处理预计运行时间短的进程。
  • 优先级调度算法:根据进程的优先级来分配资源,优先级高的进程优先获得资源(执行)。
  • 时间片轮转算法:将CPU时间分割成一系列的时间片,每个进程被分配一个时间片,在该时间片中,进程可以执行其代码。

先来先服务算法

先来先服务(Fist-Come,Fist-Served,FCFS)算法。

是一种非抢占式的进程调度算法,根据进程到达时间的先后顺序进行调度(执行)。即先来先执行。

流程:当有新进程到达时,会将新进程放入队列的末端,等到队列前面的进程,系统每次选择队列中的首个进程进行执行。

特点

  • 非抢占式:一旦进程或作业开始执行,就不会因为其他进程或作业的到来而中断。
  • 按到达时间先后顺序:先到达的进程或作业将被优先执行。
  • 公平性:每个进程或作业都有机会按顺序执行,不会有的进程或作业永远得不到执行。
  • 简单性:算法的实现较为简单,易于理解和实施。

应用场景:

  • 批处理系统
  • 交互式系统
  • 实时系统

通常与其他调度算法相结合更符合实际情况。

短作业优先算法

短作业优先(Shorted Job First,SJF)算法。

也是一种非抢占式的进程调度算法那。

核心思想是优先调度执行时间最短的作业(进程),
以减少作业的平均等待时间来提高系统的吞吐量和响应速度。

流程:当一个新作业到达系统时,系统会将其与当前在执行的作业进程比较(剩余执行时间),若新作业的执行时间更短,则系统会暂停当前作业,转而执行新作业。

实现方法

在系统开始工作时,需要维护一个就绪队列,该队列包含所有 已到达且尚未

被调度 的作业。从队列中选择执行时间最短的作业进行调度。

倘若有新作业到来,进行比较,若正在执行的作业被暂停,则将其移到阻塞队列中等待唤醒。(一个新的队列,优先级高于就绪队列)

当新作业执行完后,检查阻塞队列中是否有未完成的作业,若有则执行,否则从就绪队列中选择执行时间最短的作业进行调度。

优缺点

  • 减少平均等待的时间:由于短作业会被优先执行,因此可以显著减少作业的等待时间

  • 提高系统吞吐量:短作业的快速执行有助于释放CPU资源,使得系统能够在短时间内完成更多作业,从而提高吞吐量。

  • 对长作业不利:长作业可能需要等待较长时间才能得到执行,这可能导致长作业饥饿。
  • 预测执行时间:在实际应用中,作业的实际执行时间可能与估计的时间不符,这会影响调度性能。

应用场景

适用于对响应时间和效率有较高要求的系统。

可用于批处理系统、交互式系统以及实时系统。

通常与其他调度算法相结合更符合实际情况。

优先级调度算法

思想:

在优先级调度算法中,系统会为每个进程设置一个优先级,进程的优先级决定了其被调度的顺序。优先级高的先被调度。

可以有效地减少长作业的等待时间,提高系统的吞吐量和反应速度。

优先级调度算法可以分为非抢占式和抢占式

  • 非抢占式优先级调度算法中,一旦进程开始执行,就不会因为其他进程的到来而中断。
  • 而抢占式优先级调度算法中,当有优先级更高的进程到来时,正在执行的进程会被中断,优先执行高优先级的进程。

优先级可以分静态与动态。

  • 静态优先级在创建进程时就要确定,并在进程的整个运行期间保持不变。
  • 动态优先级则可以根据进程的行为(如等待时间的长短)而发生动态变化,以达到更好的调度效果。

算法实现:

  1. 收集进程信息:进程的达到时间、执行时间、优先级等信息;

  2. 就绪队列:将所有已到达且尚未被调度的进程加入到一个就绪队列中。每次调度时,都选择优先级更高的进程进行执行。

  3. 阻塞队列:跟短作业优先一样。如果进程在运行过程中发生阻塞,则将其移到阻塞队列中等待唤醒。

  4. 进程完成后的处理:当一个进程完成执行后,检查就绪队列中是否还有未完成的进程,如果有,则继续执行下一个优先级最高的进程。

  5. 性能评估:在调度过程中,需要计算作业的周转时间和带权周转时间,以此来评估调度算法的性能。

时间片轮转算法

时间片轮转算法(Round-Robin,RR)

一种简单的进程调度算法,主要用于分时系统。

将CPU时间分割成一系列的时间片,每个进程被分配一个时间片的执行时间,若进程在一个时间片没有执行完毕,那么它将会被暂停,等待下一个CPU周期的分配到时间片时再次继续执行。

时间片轮转算法保证了每个进程在一定时间内均能被获得CPU执行时间,从而实现了进程间的公平竞争。

实现原理:

先将所有就绪的进程按先来先服务的原则,加入一个执行队列。每次调度选择队首进程来执行,执行时间为一个时间片,该时间片执行完后,判断进程是否结束,结束则退出,否则加入到就绪队列的尾部,等待下一次执行

优点

  • 简单且公平,每个进程都有平等的执行机会。

  • 易于实现,适合于单处理器环境。

  • 可以有效地控制CPU使用率,提高系统响应速度。

缺点

  • 在高并发情况下,进程切换的开销可能导致效率下降。

  • 对实时性支持较差,不适合对实时性要求高的系统。

  • 在多核CPU环境下,无法充分利用处理器的并行能力
  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值