linux进程调度采用的,Linux 进程调度简单理解

一、Linux进程的R、S、D、T、Z、X状态

R(TASK_RUNNING):进程处于ready状态,及可执行状态

S(TASK_INTERRUPTIBLE):可以中断的睡眠状态

D(TASK_UNINTERRUPTIBLE):不可中断的睡眠状态,很少见

T(TASK_STOPPED or TASK_TRACED):暂停或者跟踪状态,收到sigstopt信号变为暂停状态,收到sigcont变为running状态;gdb调试及跟踪状态

Z(TASK_DEAD-TASK_ZOMBIE):退出状态,进程称为僵尸进程(子进程退出)

X(TASK_DEAD-EXIT_DEAD):退出状态,进程即将被销毁(一个进程cancel另一个进程)

在平时工作中其中R和S最常见,当进程接受消息队列,sleep等,进程处于阻塞状态(S)。

一般状态变化,R-S,S-R

通过ps -l查看进程状态 s(state)那列

01b4ba5f1f9ddd290613ce5caa30f29a.png

二、Linux提供两种优先级:普通进程优先级、实时进程优先级

1、实时进程优先级

实时优先级采用两种调度算法:SCHED_FIFO(先入先出调度算法)、SCHED_RR(时间片轮询调度算法)

实时优先级调度特点:只有静态优先级,不会调整优先级,默认优先级0-99(MAX_RT_PRIO=100)。nice值只影响100~100+40的进程优先级.

总结:对FIFO,只有当进程执行完毕才能轮到其他进程执行

对RR,一旦时间片消耗完,则将该进程放到队列末端,其他进程才能执行。

2、普通进程优先级

普通优先级采用的调度算法:SCHED_NORMAL(CFS调度器实现)

普通优先级调度特点:根据动态优先级调度,动态优先级由静态优先级调整而来。静态优先级由内核隐藏,但是提供接口:由nice值计算得到:

static_prio = MAX_RT_PRIO(默认100)+ nice +20

nice取值范围是 -20~19,所以静态优先级100~139

并且进程时间片也是有静态优先级得到:If( static_prio 

time = ( 140 – static_prio )*20

else if( static_prio >= 120)

time = ( 140 –static_prio )*5

动态优先级主要考虑的两个因素:静态优先级和进程平均运行时间bouns值,计算公式:

dynamic_prio = max( 100,min(static_prio-bouns+5 ,139)

bouns值的大小0-10,当大于5表示优先级提高,当小于5时优先级变低;Linux内核会根据进程的平均运行时间动态的改变进程的动态优先级。

一般来说,交互式进程的平均运行时间比较长,因此Linux内核会奖励从而增加bouns的值。

总结:实时进程只考虑静态优先级;普通进程一般不需要太在意进程优先级,因为内核会动态调整进程的优先级。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值