进程调度

前言

吐嘈抱怨的话不多说了,总之很多笔试题目上都有讲到进程调度,我也只能深入学习一下了

概述

Linux与任何分时系统一样,通过一个进程到另一个进程的快速切换,达到表面上看来多个进程同时执行的神奇效果。我们假定系统采用统一内存访问模型(uniform memory access),而且系统时钟设定为1ms

调度策略

Linux的调度基于分时技术(time-sharing):多个进程以“时间多路复用”方式运行,因为CPU的时间被分为“片”,给每个可运行进程分配一片。当然,单处理器在任何给定的时刻只能运行一个进程。如果当前进程的时间片到期时,该进程还没有运行完毕,进程切换就可以发生。分时依赖于定时中断,因此,对进程是透明的,不需要在程序中插入额外的代码来保证CPU分时。

调度策略也是根据进程的优先级对它们进行分类。有时用复杂的算法求出进程当前的优先级,但最后的结果是相同的:每个进程都与一个值相关联,这个值表示进程如何适当的分配给CPU。

在linux中,进程的优先级是动态的。调度程序跟踪进程正在做什么,并周期性地调整它们的优先级。在这种方式下,在较长的时间间隔内没有使用cpu的进程,通过动态地增加它们的优先级来提升它们。相应的,对于已经在CPU上运行了较长时间的进程,通过减少它们的优先级来处罚它们。

当谈及有关调度问题时,传统上把进程分类为“I/O受限”或“CPU受限”。前者频繁的使用I/O设备,并花费很多时间等待I/O操作完成。而后者需要大量CPU时间的数值计算应用程序。

进程的抢占

Linux的进程是抢占式的。如果进程进入TASK_RUNNING状态,内核检查它的动态优先级是否大于当前正在运行进程的优先级。如果是,current的执行被中断,并调用调度程序选择另一个进程运行(通常是刚刚变为可运行的进程)。当然,进程在它的时间片到期时也可以被抢占。

一个时间片必须持续多长

时间片的长短对系统性能是很关键的:它既不能太长,也不能太短。

如果平均时间片太短,由进程切换引起的系统额外开销就变得非常高。例如,假定进程切换需要5ms,如果时间片也是5ms,那么,CPU至少把50%的时间花费在进程切换上。

如果平时时间片太长,进程看起来就不再是并发执行。例如,让我们假定把时间片设置为5s,那么,每个可运行的进程大约5s,但是暂停的时间更长

调度算法

每个linux进程总是按照下面的调度类型被调度:

SCHED_FIFO
先进先出的实时进程。当调度程序把cpu分配给进程的时候,它就把该进程描述符保留在运行队列链表的当前位置。如果没有其他可运行的高优先权实时进程,进程就继续使用cpu,想用多久就用多久,即使还有其他具有相同优先权的实时进程处于可运行状态

SCHED_RR
时间片轮转的实时进程。当调度程序把cpu分配给进程的时候,把该进程的描述符放在运行队列链表的末尾。这种策略保证对所有具有相同优先权的SCHED_RR实时进程公平地分配CPU时间

SCHED_NORMAL
普通的分时进程


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值