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)那列

Linux 进程调度简单理解

二、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 < 120 )
           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的值。

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

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:Linux进程调度简单理解-创新互联
当前地址:http://azwzsj.com/article/ddshsc.html