Linux进程调度算法

进程的状态

进程的基本状态

  • 就绪:进程已获得除处理机以外的所需资源,等待分配处理机资源
  • 执行:进程正在占用处理机资源执行
  • 阻塞:进程等待某种条件,在条件满足之前无法执行。例如发起I/O系统调用,等待I/O中断发生

挂起

挂起指将暂不执行的进程换出到外存,节省内存空间。
阻塞相比都是进程暂停执行的状态,但:

  • 阻塞表示进程正在等待一个事件的发生,阻塞状态下收到信号会切换为就绪状态
  • 挂起表示进程被换出到外存,挂起状态下被激活会被载入到内存,切换为非挂起状态

挂起状态进程按照是否阻塞分为:

  • 挂起就绪状态:进程在外存中,但只要被载入内存就可执行
  • 挂起阻塞状态:进程在外存中等待一个事件,即使被载入内存(激活)也无法执行

睡眠

Linux将进程的阻塞状态进一步细分为:

  • 暂停:不需要等待资源
  • 浅睡眠:需要等待资源且睡眠状态能被信号唤醒
  • 深睡眠:需要等待资源且睡眠状态不能被信号唤醒

进程调度算法

分类

  • 按照CPU分配方式:非抢占式,抢占式
  • 按照系统分时方式:批处理系统,交互系统,实时系统和多处理机调度

进程饥饿

  • 指某个进程无限等待,无法被调度

批处理系统调度算法

调度算法的目标:

  • 吞吐量(每小时最大作业数)
  • 周转时间(每作业从提交到完成时间的统计平均时间)
  • CPU利用率(最好令CPU始终忙碌)

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

  • 依据进程进入就绪状态的先后顺序排列,非抢占式 不公平
  • 优点:易于理解,便于实现,只需一个就绪队列
  • 缺点:平均等待时间波动大(例如短进程排在长进程后);I/O与CPU资源利用率低(CPU密集型进程会导致I/O设备闲置时,I/O密集型进程也等待)

2.最短进程优先算法(SPN或SJF)

  • 预知就绪队列中执行时间最短进程占用CPU进入运行状态,非抢占式 不公平
  • 优点:相对于FCFS提高了平均周转时间
  • 缺点:可能导致饥饿;对长作业不公平;需要预知未来(预估下一个CPU计算的持续时间:询问用户或用历史的执行时间来预估未来的执行时间)

3.最短剩余时间优先算法(SRT或SRTN)

  • 最短进程优先的抢占式版本,若新进程比正在执行的进程剩余时间短,则它优先执行, 抢占式 不公平
  • 优缺点同SPN

4.最高响应比优先算法(HRRN)

  • 响应比:作业等待时间/作业运行所需时间;响应比大的进程优先,非抢占式 不公平
  • 优先:同时考虑了等待时间和执行时间,既优先考虑短作业(进程),也防止长作业(进程)无限等待的饥饿

交互系统(分时系统)调度算法

1.时间片轮转算法(RR)

  • 将所有就绪进程排成一个队列,按照时间片轮转调度,用完时间片的进程排到队列末尾,抢占式 公平
  • 优点:没有饥饿问题
  • 缺点:当时间片太小时,产生大量的上下文切换,吞吐量低;当时间片太长时,等待时间过长,不能保证实时性,极限情况退化成FCFS

2.多级队列调度算法(MQ)

  • 优先级高的进程先运行,同优先级的进程轮转。当高优先级队列中没有进程后,再调度下一级队列。
  • 将就绪队列划分为多个独立的子队列,且每个队列拥有自己的调度策略(上述);队列间的调度采用固定的优先级:先处理前台队列,后处理后台队列。每个队列都得到一个确定的能够调度其进程的CPU总时间
  • 缺点:可能导致饥饿问题

3.多级反馈队列算法(MLFQ)

  • 进程可在不同队列间移动的多级队列算法(MQ);优先级高的队列先执行,优先级越高,时间片越短;若一个进程在当前队列规定时间片内无法执行完毕,则移动到下一个队列的队尾
  • 特征:CPU密集型进程的优先级下降很快;I/O密集型进程停留在高优先级
  • 缺点:可能导致饥饿问题:不断有新更高优先级的进程加入

4.公平共享调度(FSS)

  • 保证不重要的组无法垄断资源:未使用的资源按比例分配;没有达到资源使用率目标的组获得更高的优先级 公平

5.彩票法

  • 向进程提供各种系统资源的彩票。调度时随机抽取彩票,拥有该彩票的进程得到资源
  • 可给重要进程更多的彩票;协作进程可能交换彩票

实时系统的调度算法

目标:满足任务的截止时间。即若有一个任务需要执行,实时系统会马上执行该任务,不会有较长的延时。

1.速率单调调度算法(RM)

  • 通过周期安排优先级,周期越短优先级越高
  • 执行周期最短的任务

2.最早截止时间优先算法(EDF)

  • 截止时间越早优先级越高
  • 执行截止时间最早的任务

多处理机的调度

特征:多个处理机组成一个多处理机系统;处理机间可负载共享

对称多处理机(SMP)调度

  • 截止时间越早优先级越高,每个处理器运行自己的调度程序
  • 调度程序对共享资源的访问需要进行同步

分为静态进程分配和动态进程分配(负载均衡):

  • 静态进程分配:进程从开始到结束都被分配到一个固定的处理机上执行;每个处理机有自己的就绪队列;优点:调度开销小;缺点:但是各处理机可能忙闲不均
  • 动态进程分配(负载均衡):进程在执行中可分配到任意空闲处理机执行;所有处理机共享一个公共的就绪队列;优点:各处理机的负载是均衡的;缺点:调度开销大

优先级反置

  • 操作系统出现高优先级进程长时间等待低优先级进程所占用资源的现象
  • 基于优先级的可抢占调度算法存在优先级反置

解决方法:

  1. 优先级继承:占用资源的低优先级进程继承申请资源的高优先级进程的优先级;
  • 这种情况只在占有资源的低优先级进程被阻塞时,才提高占有资源进程的优先级
  1. 优先级天花板协议(PCP):占用资源进程的优先级和所有可能申请该资源的进程的最高优先级相同;
  • 不管是否发生等待,都提升占用资源进程的优先级
  • 优先级高于系统中所有被锁定的资源的优先级上限,任务执行临界区时就不会阻塞
posted @ 2022-10-31 11:10  yytarget  阅读(435)  评论(0编辑  收藏  举报