一、进程的详细信息
通过命令ps -l可以查看当前正在运行的进程的详细信息,关于进程的参数如下:
- C:CPU占用百分比
- PRI:优先级
- NI:nice值
- TIME:进程占用CPU时间
二、PRI和NI
把主要进程分为两种:
1、I/O消耗型进程:I/O消耗型进程如字面意思一样,轮到它的时候会把大部分时间消耗在I/O请求和等待I/O上,真正使用CPU的时间很少。
2、处理器消耗型进程 : 处理器消耗性进程会把大部分时间用在使用CPU进行计算。
如果给这两种继承分配的时间片长度相等,就会体现出不公平。同时我们想给处理器消耗型的进程多一些处理器时间,而给I/O消耗性进程少一些处理器时间,于是Linux采取的不是简单的时间片调度算法,而是改进的优先级调度算法CFS。
Linux系统是抢占式的,CFS直接分配的不是时间片,而是CPU使用比,这个比例会收到nice值得影响,nice值低比重就高,nice高比重就低,nice值设置为一个范围从-20(高优先级)~ +19(低优先级)的数字来影响调度器对进程的调度。Linux使用的CFS调度器,决定抢占时机的就是上面说的CPU使用比。
nice值不是优先级,但会影响优先级 ,PRI(new)=PRI(old)+nice。
抢占能力高了,交互性相对而言就好。这里我理解的,不知道对不对,比如打LOL的时候,这个进程占用CPU是最高的(前提是你电脑没有开其它的消耗性能的进程),然后这个时候就体现交互性的重要性了,你放个R,游戏立马做出反应,这时候电脑立马就进行处理了。
然而最后影响CFS调度器调度进程的并不是优先级的nice值,因为CFS会让每个进程获得的处理器时间都是一样的(虽然不可能),所以有一个vruntime的值表示进程运行的虚拟时间(就是在处理器上跑的时间累加和),这个vruntime值越小,说明该进程应该被优先执行。