目录
一、优先级概念
二、查看系统进程
三、进程切换
一、优先级概念
二、查看系统进程
操作系统往往会需要处理很多的进程,可是进程很多处理的顺序总要有个先后,此时就可以引出一个概念:优先级。
ps-la,可以以列表的形式打印出当前用户所创建的进程。
在linux或者unix系统中,用ps –l命令则会类似输出以下几个内容:
先来简单认识一下第一行的字母分别有什么含义:
UID | 代表执行者的身份 |
PID | 代表这个进程的代号 |
PPID | 代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号 |
PRI | 代表这个进程可被执行的优先级,其值越小越早被执行 |
NI | 代表这个进程的nice值 |
其中PRI就是优先级,具象化一点就是PCB中的一个整形变量,Linux默认优先级是80,当然优先级的优先级是可以被修改的,其区间是[60,99]数字越小优先级越高,优先级一般不建议去调整。
使用top进入任务管理器,输入R后然后输入pid。然后输入数字,这里的数字是要加到PRI上的。
Linux允许用户修改优先级但是不允许直接修改优先级而是修改nice值,所以PRI=oldPRI+nice:
注意:这个oldpri每次都是从80开始的。
而为了符合Linux规定的优先级区间,nice值也是有区间的[-20,19] 。
而为什么要让优先级首先呢?主要是因为如果不加限制,那么很多程序员就可以把自己的优先级调的很小,这样会导致调度上不平衡,会导致优先级高的进程会优先得到资源,最终会导致常规进程很难得到CPU资源,从而迟迟不会被调度,最终会引发进程饥饿问题,所以操作系统必须要求优先级调整在可控范围之内。
所以进程存在以下四个特性:
其中并行需要多个CPU来进程,我们一般的电脑不会存在,而并发则是CPU基于时间片快速的对多个进程进行轮转操作来实现多个进程同时运行。
三、进程切换
既然需要并发,那进程间一定设计到切换,进程每次被调度CPU时都会给每个进程产生一个调度队列,然后链接到CPU的运行队列,CPU内存在大量寄存器,负责记录在执行进程时的各种属性信息,而当时间片到了的时候,PCB进程会把寄存器内的当前各种信息进行保存,CPU内部的所有数据,都被称为进程的硬件上下文数据。
此时执行下一个进程,再将下一个进程的属性数据覆盖加载到CPU中。当进程被二次调度时,将曾经保存的硬件上下文数据进行恢复然后沿着上次执行到的位置继续执行。
CPU的寄存器只有一套,寄存器里面的数据都是进程私有的。