【操作系统】7种进程调度算法,及其甘特图的绘制(练习markdown画图)

1. 先来先服务调度算法(FCFS)

  • 最简单的调度方法。
  • 基本原则是,按照进程进入就绪队列的先后次序进行选择。
  • 非剥夺方式。

从表面上看,这个方法对于所有进程都是公平的。
但是这个方法并非公平,因为当一个大进程先到达就绪状态时,就会使许多小进程等待很长时间,增加了进程的平均周转时间,会引起许多小进程用户的不满。

目前,先来先服务调度算法已很少用作主要的调度算法,尤其是分时和实时系统中。但它常被结合在其他的调度算法中使用。例如,在使用优先级作为调度依据的系统中,往往对许多具有相同优先级的进程使用先来先服务的原则。

2.优先级调度算法(HPF)

  • 按照进程的优先级高低来进行调度,使高优先级进程优先得到处理机

进程的优先级可以由操作系统按一定原则赋予,也可以在操作系统外部安非,甚至可由用户支付高额费用来购买。

在许多采用优先级调度算法的系统中,通常使用动态优先级。一个进程的优先级不是固定的,可能会随许多因素的变化而变化,例如,进程的等待时间、已使用的处理机时间或其他资源的使用情况。

优先级调度算法又可分为下述两种:

非剥夺的优先级调度算法。一旦某个高优先级的进程得到处理机,就一直运行下去,直到由于其自身的原因(任务完成或等待事件)而主动让出处理机,才让另一个高优先级进程运行。

可剥夺的优先级调度算法。任何时刻都严格按照优先级高的进程在处理机上运行的原则进行调度,或者说,在处理机上运行的进程永远是就绪进程队列中优先级最高的进程。在进程运行过程中,一旦有另一个优先级更高的进程出现(如一个高优先级的等待状态进程因事件的到来而成为就绪状态),进程调度程序就迫使原运行进程让出处理机给更高优先级的进程使用,或称为抢占处理机。

3. 时间片轮转调度算法(RR)

  • 多用于进程调度。

  • 其进程就绪队列往往按进程到达的时间来排序。

进程调度程序总是选择就绪队列中的第一个进程,也就是说,按照先来先服务原则进行调度,但进程仅占用处理机一个时间片。在使用完一个时间片后,即使进程还没有完成其运行,它也必须让出(被剥夺)处理机给下一个就绪的进程。而被剥夺的进程返回就绪队列的末尾重新排队,等候再次运行。

时间片轮转调度算法特别适合分时系统使用。当多个进程驻留主存时,在进程间转接的开销一般不是很大。

• 如果时间片值很大,大到一个进程足以完成其全部任务所需的时间,那么此时间片轮转调度算法就退化为先来先服务调度算法了;
• 如果时间片值很小,那么处理机在进程间的切换工作过于频繁,使处理机的开销变得很大,而处理机真正用于运行用户程序的时间将会减少。
• 通常,最佳的时间片值应能使分时用户得到好的响应时间。

特别要注意的是,时间片是否用完的判定程序是由时钟中断处理程序激活的,因此时间片值必须大于时钟中断间隔

4. 短进程优先调度算法(SPF)

  • 从进程的就绪队列中挑选那些运行时间(估计时间)最短进程进入主存运行。
  • 非剥夺算法。保证进程尽可能快地完成运行并退出系统。

这样减少了在就绪队列中等待的进程数,同时也缩短了进程的平均等待时间,提高了系统的吞吐量。但从另一方面来说,当后续短进程过多时,大进程可能没有机会运行,导致“饿死”。

短进程优先调度算法要求事先能正确地了解一道作业或进程将运行多长时间

短进程优先调度算法和先来先服务调度算法都是非剥夺算法,因此均不适用于分时系统,因为不能保证对用户及时响应。

5. 最短剩余时间优先调度算法(SJF)

  • 将短进程优先调度算法用于分时环境的变形。
  • 基本思想是,让“运行到任务完成时所需的运行时间最短”的进程优先得到处理,包括新进入系统的进程。
  • 是剥夺算法,允许被一个新进入系统的且其运行时间短于当前运行进程的剩余运行时间的进程所抢占。

这个算法使短进程一进入系统就能立即得到服务,从而缩短进程的平均等待时间

优点:可以用于分时系统,保证及时响应用户要求。
缺点:系统开销增加。(1)要保存进程的运行情况记录,以比较其剩余时间长短:(2)剥夺本身也要消耗处理机时间。

6. 最高响应比优先调度算法(HRRN)

  • 针对短进程优先调度算法的缺点提出了最高响应比优先调度算法。
  • 非剥夺算法。
  • 对FCFS和SPF的平衡。

每个进程都有一个动态优先数,该优先数不但是要求的服务时间的函数,而且是该进程得到服务所花费的等待时间的函数。进程的动态优先数计算公式如下:
优先数=(等待时间+要求的服务时间)/要求的服务时间

要求的服务时间是分母,所以对短进程是有利的,因为区的优先数高,可优先运行。另外,因为等待时间是分子,所以长进程由于其等待了较长时间,从而提高了其优先致,终于得到了处理机。

“等待时间+要求的服务时间”是系统对作业的响应时间,
优先数=响应时间/服务时间,也称为响应比

7. 多级反馈队列调度算法(RRMF)

  • 系统中有多个进程就绪队列,各级队列中的进程具有不同的时间片值。随着队列级别的增高,其进程的优先级降低了,但时间片值却增大了。优先级最高的第1级队列中的进程的时间片值最少;调度时,选择高优先级队列中的第1个就绪进程

  • 各级队列均按先来先服务原则排序。

  • 提高系统吞吐量和缩短进程的平均等待时间而照顺短进程

通常,下放一级,其时间片值增大1倍。

调度方法:当一个新进程进入系统后,它被放入第1级队列的末尾。该队列中的进程按先来先服务原则得到处理机,并使用一个相应于该队列的时间片。假如进程在这个时间片内完成了其全部任务,或因等待事件或/O而主动放弃了处理机,该进程就撤离系统(任务完成)或进入相应的等待队列,从而离开就绪队列。若进程使用完了整个时间片后,其运行任务并未完成(也没有产生V/O请求),仍然要求运行,则该进程被剥夺处理机,同时它被放入下一级队列的末是,当第1级队列为空后,调度程序才去调度第2级队列中的进程。
在这里插入图片描述

例题

1. 研究FCFS,SPF,RR(10ms) 的平均等待时间。

进程到达时间(ms)区间时间(ms)
P1010
P2529
P383
P4107
P51212

解:
如下图为各个进程的甘特图(一格表示10ms)

2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 P1 P1 P1 P2 P2 P2 P3 P4 P3 P4 P5 P5 P3 P6 P4 P5 P7 P8 FCFS SPF RR 例题一

平均等待时间=每个进程的开始时间-到达时间

FCFS= ((0+(10-5)+(39-8)+(42-10)+(49-12))/ 5 =(0+5+31+32+37)/ 5 = 21ms
SRF= ((0+(10-8)+(13-10)+(20-12)+(32-5))/ 5 =(0+2+3+8+27)/ 5 = 8ms(抢占不抢占结果是一样的)
RR= (0+【(10-5)+ (40-20)+(52-50)】+(20-8)+(23-10)+28)/ 5 =(0+27+12+13+28)/ 5 = 16ms

2.(来自王道考研2020操作系统单科书)

在这里插入图片描述
解:
如下图为各个作业的甘特图(一格表示20ms)

2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 D2 D1 CPU CPU CPU D1 CPU D2 CPU CPU D1 P1 P2 P3 例题二

3.(来自王道考研2020操作系统单科书)

在这里插入图片描述
解:
如下图为各个作业的甘特图(一格表示5ms)

2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 2024-06-22 I/O2 I/O1 CPU CPU I/O1 I/O1 CPU CPU I/O2 I/O1 CPU CPU I/O2 CPU I/O1 I/O2 A B C 例题二

求助

上面的甘特图的时间轴都是YYYY-MM-DD,有大佬知道怎么改成毫米级的单位嘛?

  • 25
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在车间调度问题中,甘特图是一常用的可视化工具,用于展示任务的执行时间和顺序。在Python中,可以使用不同的算法来实现车间调度,并生成相应的甘特图。 引用\[1\]提到了使用遗传算法来求解柔性作业车间调度问题的代码实现。遗传算法是一模拟自然进化过程的优化算法,通过模拟遗传、交叉和变异等操作来搜索最优解。在遗传算法中,可以使用编码来表示任务的顺序和调度方案。 引用\[2\]中提到,遗传算法对于入门是非常有好的,其他类似进化算法几乎都是在此基础上演变的。因此,使用遗传算法来求解车间调度问题是一个不错的选择。 引用\[3\]中介绍了一基于工件排列的编码方法,即将工件按照加工顺序排成顺序队列,并根据前一阶段工件加工完成时间进行非降序排列。这编码方法可以用于表示任务的顺序。 综上所述,你可以使用Python编写基于遗传算法的车间调度算法,并根据工件的加工顺序和完成时间生成甘特图。具体实现的细节可以参考引用\[1\]中提到的代码实现。 #### 引用[.reference_title] - *1* *2* *3* [用Python实现基于遗传算法(GA)求解混合流水车间调度问题(HFSP)](https://blog.csdn.net/crazy_girl_me/article/details/120239280)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值