微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux进程调度

1.进程分类

        实时进程

                跟用户交互的进程,需要及时的响应,类似于编写Typora。

        普通进程

                不需要及时响应的进程,类似与压缩文件,视频的编码解码。

2.上下文切换

        cpu跑了多个进行 分割时间片的方法。比如存在p1、p2连个进程,p1--50ms后调用p2。p1进程的一些信息,程序计数器,变量,运行进度,context,执行环境,上下文,保存到内核的栈。p2的加载进来,运行p2环境等,这就是上下文的切换。

3.调度算法演变

        FIFO,先进先出。劣势:当第一个进程执行时间过长,影响其他进程的执行。

        STF,谁的进程时间短,谁先被调度。劣势:同时到达的情况下才会选择的机会。

        STCF,谁先完成,谁先被调度。抢占资源式的。同时有三个进程到达,p1 1000ms,p2 30ms,p3 5ms。那么在p1在执行的情况下,由于p2,p3的执行时间短,所以会p2,p3会抢占,然后先执行,最后执行p1。

        RR,轮询方式。当一个进程用完了分给他的时间片,他会被放入到进程队列的末尾,如此循环往复。

4.进程队列

        全局队列:多个cpu,只有一个队列。所有cpu都去一个队列拿进程。涉及给进程加锁,释放等方法,保证进程运行不会出错。

        局部队列:每个cpu都有自己的队列,从自己的队列取进程然后执行。当一个cpu队列数较少,会有其他cpu的进程分到这个cpu里面。

5.进程的优先级

        不是每个进程都有相同的优先级,有些进程是不能死的。

        ps 可以看到程序的nice值,nice值表示对别的进程的好感程度,一个进程对另一个进程nice值越大,越不会取抢占cpu。即nice值越高,优先级越低。

        优先级:优先级越高,cpu调度的时间越少。PR为优先级,NI为nice值。

 

        nice -n 9 bash  #(设置当前bansh的nice值为9)

        rnice -n 11 -p 2916(进程号)  #更改某个进程的nice值

        优先级和nice值的范围:nice值:-20-19和优先级:0-139

        实时进程优先级:0-100

        普通进程优先级:100-139

        静态优先级:nice值决定优先级,权力在用户,在一开始就设定,也可以进行更改。

        动态优先级:由内核来解决,有些进程运行会超时等情况,内核会修改进程得优先级

6.linux调度器

        O(n)调度器:cpu队列里面存放得是带有优先级得进程,会遍历这个队列找到优先级最高得进程进行调度。当队列中进程数过多,遍历数就会越大,效率比较低

        O(1)调度器:利用位运算来存储优先级,将优先级映射成了一个bitmap(以一个位0,1表示有没有值,如果这个优先级上面有进程,那么这个位置就被置为1,可以理解为将0-139分为数字存储,如果这个优先级上面有进程,则这一个优先级下的位会被置为1。直到改优先级下的所有进程被调度完,再去找其他优先级下的进程)

        CFS调度器:分时间片的概念 ,保证每个进程都能分到时间片。virtualtime概念,优先级高的进程,优先级高的进程执行10ms,virtualtime可能为1s。优先级低的进程10ms,virtualtime可能是10ms。

原文地址:https://www.jb51.cc/wenti/3282764.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐