第五章-----进程调度

第五章—–进程调度

标签(空格分隔): 操作系统之哲学原理



进程调度的定义

在多个程序并发的环境中,我们如何确定在任意时刻由哪个进程执行,哪个进程不执行?如何进行金成德调度尼

一般来说,进程使用CPU的模式有三种:

  • 一种是大部分时间在CPU上执行

    • 称为CPU导向(CPU_bound)或计算密集型程序:宇宙大爆炸各宗参数的程序,矩阵乘法程序
  • 一种是大部分时间进行输入输出

    • IO导向(IO_bound) 或输入输出mi’ji’xin:人机交互,游戏程序
  • 一种是介于前两种模式之间

    • 平衡型程序:网络浏览或者下载,网络视频

进程调度的目标

目标:极小化平均响应时间,极大化系统吞吐率,保持系统各个功能部件均处于繁忙状态和提供某种貌似公平的机制

当然对于不同的系统,在进程调度上的目标是不同的。批处理系统就不太在意响应时间,但是系统吞吐率,CPU利用率和周转时间很重要。交互式系统就需要响应时间够快。

这里有个术语就是适度性,例如,用户期待的是1秒的响应时间,那么我们就做1秒,不必提供0.1秒的响应时间,因为这意味着时间越短,设计与实现就会越复杂,然而时间优化并不会提高用户的满意度,相对于人来说,1秒和0.1秒的差别对比意义不是那么明显。


先来先服务调度算法(First Come First Serve)FCFS

简单来说就是先来先到,排队买包子,但是每个人买的包子数量不同,买的时候消耗时间的属性不同。
自然这种最初级的调度算法有很大的弊端,CPU利用率低下,响应时间也不高。于是想到了时间轮转算法。


时间片轮转算法

这个算法是对FCFS算法的一种改进,主要目的是改善短程序的响应时间,方法就是进行周期性的切换。每个人只能有五分钟的时间使用公共厕所,这五分钟不能被外界打扰,即使你早早结束,也要呆在里面等时间到。当然,时间片的选择很是重要,大多数人上厕所用不到五分钟。
系统响应时间依赖于时间片的选择。咱把时间片选大点,发现后来就变成了FCFS算法了,真是,。,。一家亲。这还不算啥,时间片选得过短也不行,因为进程切换需要消耗。规定上厕所时间为30秒,裤子都没脱就结束了也不行。

如何来选择合适的时间片?

需要知道进行一次进程切换的消耗和我们能够承受的整个系统的消耗。就可以得出合适的时间片。吃饭是要花钱的,当然吃肉的花销很大,要是你能经受得住,可以选择吃肉。
还要考虑的是,有多少进程在系统里运行,进程多就把时间片选短一点,进程少,长一点也无所谓。


短任务优先算法(Shorted Time to Completion First) SCTF

人们在一直的探索更好的调度,发现时间片轮转的算法也是有问题的。例如,一个任务只要使用CPU1s,相对其他的任务算是比较短了,但是由于时间片的种种原因,被轮到了最后一个,这样,系统的调度就可以有进一步的优化空间。于是干脆,所有短的任务全都优先执行。长得矮的站前面。

有两种模式

抢占与非抢占是对于CPU上的进程来说的

  • 抢占
    • 每增加一个新进程就要对所有进程(包括在CPU上的)进行检查,谁的时间短就运行谁
    • 在所有的抢占式算法中,抢占式SCTF算法最优
  • 非抢占
    • 让已经在CPU上的进程执行到结束或者阻塞的状态,在所有饿的候选进程中选择时间最短的来执行
    • 在所有的非抢占式算法中,SCTF算法最优

后来人们发现这种短任务优先也有缺点,

  • 长时间任务无法得到CPU时间而处于饥饿状态。
  • 我们不知道每个进程要运行多久(注意是还要,就是说已经在执行了,不知道到技术还有多久,不是说的整个进程的运行时间
    解决第二问题有两种思路,第一种是根据程序大小来推测,不可取。第二种思路是先将每个程序运行一遍。记录所用的时间,在以后的运行中根据实测的数据来定位。

优先级调度算法

既然短任务优先有缺点,我们就来改进。不能再懒了,使用手动的办法给不同的任务设置不同的优先级,打破公平原则。我们可给重要的进程很高的优先级,让它先执行。但是,。,。低优先级的任务有可能出现饥饿。可是我们有办法呀,只要动态的调节优先级就好了,一个进程执行了特定的时间后,将优先级降低,或者将等待的进程优先级提高

这种算法还有一个缺点就是响应时间无法得到保证,因为进程的运行预先是不知道顺序的,也就无法估算时间。


混合调度算法

和缓存的组相联还是什么的有点类似,先将所有进程分成不同的大类,每个大类有不同的优先级,在每个大类里面使用时间片轮转,简直完美


其他调度算法

  • 保证调度
  • 彩票调度
  • 用户公平调度

保障调度

树上的解释是看的一愣一愣的,首先保障调度和时间轮转的任务一样,给每个任务一定的时间。但是保障调度可以和短任务优先一起用。大概就是这个意思,虽然没有多大的意义。保障调度不一定要轮转,可以按照优先级来呀,只是规定每个任务的可使用CPU时间是一样的

彩票调度

首先彩票调度是一种概率调度,这就很不得了。我给你一种虚拟的优先级,看上去你的优先级很大,但是只是概率。在每一次的调度切换中,每个进程都有机会。我想让某个进程先执行,多发几张彩票,概率就比较大了。当然我得给每个进程都至少发一张彩票保证不会有进程会出现饥饿。真是一种敷衍的好套路,于是要是每个进程的彩票一样多就成了保障调度,如果给短任务更多的彩票就成了短任务优先调度。

用户公平调度

前面讲的调度算法都是以进程为单位。但是有的用户无聊,通过启动多个进程来霸占CPU,简直是无聊至极。于是就有了用户进程调度,给每个用户进行分配,要是用户的进程多久多分点。

由于不同的操作系统的目标不同,不同的进程的性质和重要性不同,进程调度也就不同


实时调度算法

实时系统前面提到过,是需要提供时序可预测性的系统。调度算法是别处一格。前面的算法主要考虑的是平均响应时间和系统吞吐率,而实时系统必须考虑每个具体任务的响应时间必须符合要求,必须在规定的时间内完成,无需考虑如何降低系统的响应时间或吞吐率。

实时调度算法最经典两种:

  • EDF ,动态优先级调度优先,又称最早截止任务优先(Endliest Dealine First)
  • RMS,静态优先级调度,又称最短周琦优先(Rate Monotonic Scheduling,RMS)

EDF

EDF:最早截止的任务先做
如果将SCTF算法的任务所需时间变为截止时间,则抢占式SCTF就是EDF调度算法

RMS

虽然EDF在理论上是最优的,但是动态计算和动态抢占CPU均要消耗系统资源。于是考虑在进行调度前先计算出优先级,按照优先级来进行调度。不接受新的进程,也不进行优先级的调整


进程调度的过程

  • 因时序或外部中断或进程挂起而导致操作系统获得CPU控制权
  • 操作系统在所有就绪的进程中按照某种算法逻辑遴选进程
  • 如果选中的是非当前进程,则操作系统将当前进程(中断或挂起的进程)状态进行保护
  • 将选中的进程的环境布置好(设置寄存我i,栈指针,状态字等)
  • 跳转到选中的进程

高级议题:调度异常之优先级倒挂

优先级倒挂是怎么形成的尼?

一个低级优先级任务持有一个被高优先级认为所需要的共享资源。高优先级任务因资源缺乏而处于受阻状态,一直到低优先级任务释放资源为止。这样实际上是造成了两个任务的优先级倒挂。中优先级的任务就可以先于高优先级执行,高优先级进程被临界区外的低优先级进程阻塞。

危害:

  • 如果一个高优先级进程一直不能获取资源,可能造成系统故障或激发事先定义的纠正措施
  • 如果高优先级进程在等待资源时不时阻塞等待,而是循环(繁忙)等待,则它将永远无法获得所需资源。
  • 造成系统的性能降低

倒挂的解决方案

优先级倒挂两种形式:
- 不持有资源的低优先级进程阻碍需要资源的高优先级进程的执行
- 持有资源的低优先级进程阻碍需要资源的高优先级进程的执行

解决办法:

  • 使用中断禁止
  • 优先级上限
  • 优先级继承

国际惯例

在计算进程的响应时间的时候一定要记住,进程的时间是包括IO的,只是在计算CPU的时候不用包括IO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值