“我报名参与金石计划1期应战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情”
什么是进程调度?
进程调度实际上包括三种调度:
1.短程调度(将进程从ready状况转移到running状况)
2.长程调度(将进程从new状况转移到ready状况)
3.中程调度(将进程从CPU上移出,并放入到磁盘中,当需要时再从磁盘中取出以进行康复,进程会从被中止的地方重新开始履行,从而降低多道程序程度)
咱们所讲的进程调度算法一般是针对进程的 短程调度而言。
进程调度算法有哪些?
先到先服务算法(FIFS)、最短作业优先(SJF)、优先级调度、轮旋调度(又称旋转罗宾法、RR调度)、多级行列调度、多级行列反应调度
1.先到先服务(FIFS)
先请求的进程优先得到服务(即根据ready行列的次序,排在前面的进程先得到服务)
- 长处:完成简略、易理解;公平性
- 缺陷:均匀等候时刻往往很长
2.最短作业优先(SJF)
优先服务作业时刻最短的作业。实际上难以完成,因为无法知道下次cpu履行的长度。但可以用公式(代表最近一次的信息,存储了曩昔的信息)来对下一次cpu履行的长度进行猜测。
- 长处:均匀等候时刻短
- 缺陷:公平性不足,简单导致饿死现象的产生(因为每次都优先服务作业时刻最短的进程,这会导致作业时刻长的进程一直在等候,永久无法得到服务)
最短作业优先可以分为抢占式和非抢占式两种
1.抢占式(又称最短剩余时刻优先算法):
允许安排妥当行列中的进程抢占正在cpu上运转的进程(假如安排妥当行列中某一进程的作业时长小于正在履行的进程的 剩余作业时长)。
- 长处:均匀等候时刻比非抢占式要短。
- 缺陷:上下文切换频频,花费更多的时刻用于上下文切换。
2.非抢占式:
能确保进程一旦被换上cpu,那么该进程会一直履行直到停止或者要等候I/O。
- 长处:相对于抢占式而言,上下文切换的次数要少。
- 缺陷:均匀等候时刻一般而言要比抢占式的长。
3.优先级调度
给每个进程分配优先级,高优先级的进程首先取得cpu时刻。(最短作业优先(SJF)便是优先级调度的一个以作业时刻为优先度的特例)
- 缺陷:优先级调度算法简单导致无量阻塞(即饿死)的现象呈现,即优先级低的进程或许永久也无法得到履行。为了解决这一问题,老化技术(逐渐增加在体系中等候很长时刻的进程的优先级)是一种计划。
4.轮旋调度(RR调度)
RR调度是一种抢占式调度。轮流按安排妥当行列的次序为每一个进程分配时刻片,当一个正在履行的进程的时刻片用完了,那么将该进程放回安排妥当行列中,并从安排妥当行列中换上另一个进程,为其分配时刻片。
- 长处:确保了公平性;且每一个进程在一个时刻段上都能得到履行。
- 缺陷:均匀等候时刻较长。
时刻片巨细的选取决定了该算法功能的高低:假如时刻片很大,那么RR算法近似于FIFS算法;假如时刻片很小,那么体系将花费大量的时刻用于上下文切换,效率很低;大多数进程都能在一个时刻片内履行完成是咱们想要追求的目标。
一般而言,80%的进程的cpu履行时刻应该小于时刻片。
5.多级行列调度
将进程分红不同的行列,每一个行列内有各自的算法,每个行列间有不同的优先级。一般将进程分为前台进程(优先级高)和后台进程两个行列。行列间的调度算法有两种:固定优先级抢占式调度(当前台进程行列为空时才调度后台进程履行);行列间区分时刻片(每个行列有必定份额的cpu时刻)。
6.多级行列反应调度
在多级行列调度的基础上,允许进程在行列间进行搬迁。(假如进程使用过多的cpu时刻,那么它会被移到更低的优先级行列,即不会让某一个进程一直长时刻地履行;假如进程在较低优先级行列中等候时刻过长,那么会把它放到更高优先级的行列,以避免饿死现象的呈现)
目前而言,使用最广的是轮旋调度算法,其满意了进程的公平性(最主要是用户的体验上的公平性) ,且均匀等候时刻较短。轮旋调度算法的要害点在于怎么设置一个合理的时刻片巨细。