Linux进程调度

进程调度

多任务系统

  • 非抢占式多任务:除非进程自己主动停止运行,否则它会一直执行。进程主动挂起自己的操作叫做让步
  • 抢占式多任务:由调度程序来决定什么时候停止,一个进程的运行, 以便其他进程能够得到执行机会。强制挂起动作叫做抢占

CFS(完全公平调度策略)

I/O消耗型进程: 通常都是运行很短的时间,在等待更多的I/O请求时最后总是会阻塞。如果分配运行时间少,对于响应就更慢

CPU消耗型进程:一直在消耗CPU.从响应时间来看,如果还有其他线程要用CPU,调度程序应该尽量降低它们的调度频率,延长其运行时间 来满足其他线程的响应

调读策略通常要在两个矛盾的目标中寻找平衡: 进程响应迅速(响应时间短)最大系统利用率(高吞吐量)

Linux为了保证交互式应用和桌面系统的性能,所以堆进程的响应做了优化(缩短响应时间),更倾向于优先调度I/O消耗型进程

CFS的出发点:理想状态下,每个线程将能获取1/n的处理器时间------n是指可运行进程的数量。

现实:允许每个进程运行一段时间,循环轮转,选择运行最少的进程作为下一个运行进程,而不再采用分配给每个进程运行一段时间片。

当可运行的任务数量趋近于无限时,那它们各自获取处理器使用和时间片都是0,都是切换消耗。故CFS为此引入每个进程获得的时间片底线,这个底线称为最小粒度。默认情况下这个值的1ms

进程优先级

  1. 运用 nice值 它的范围是-20~19,默认值为0;越大代表更低的优先级。如Mac OS X ,进程的nice值代表分配给进程的时间片的绝对值;而Linux系统中,nice值代表时间片的比例。 ps-el 命令查看系统中的进程列表。
  2. 第二种范围是实时优先级,其值是可配置的,默认范围是0~99. 越大代表优先级越高。

时间片

时间片是一个数值,它表明进程在被抢占前所能持续运行的时间。

时间片过长会导致系统对交互的响应表现欠佳,让人觉得系统无法并发执行应用程序;

时间片过短会明显增大进程切换带来的处理器耗时。会有相当一部分系统时间用在进程切换上,而这些进程能够用来运行的时间片却很短

Linux 的CFS 并没有指定默认或固定的时间片,而是将处理器的使用比划分给了进程,进程所获得的时间其实是和系统负载密切相关的。这个比例进一步会受进程nice影响。

当一个进程进入可运行态,它就被准许入运行,但是 是否要将一个进程立刻投入运行(发生抢占),其抢占时机取决于新的可运行程序消耗了多少处理器使用比。如果消耗的使用比当前线程小,则新进程立刻投入运行,抢占当前进程。否则,将推迟其运行。

CFS的实现

vruntime变量存放着进程的虚拟运行时间,以ns为单位,记录一个程序到底运行了多长时间以及它还应该再运行多久

  • 时间记账:所有调度器必须对进程运行时间做记账。分配一个时间片给进程。当系统时钟节拍发生时,时间片都会被减少一个节拍周期。
  • 进程选择:CFS用一棵红黑树来组织可运行进程队列,选择具有最小vruntime值的进程。运行红黑树最左边叶子节点
  • 调度器入口:选择哪个进程可以执行,何时将其投入运行。调用pick_next_task() 会以优先级为序,从高到低,检查每个调度类,并且从最高的调度器中,选择最高优秀级的进程
  • 睡眠和唤醒:睡眠 进程从红黑树进入等待队列,唤醒 进程从等待队列进入红黑树
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值