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 举报,一经查实,本站将立刻删除。