目录
一、进程优先级
1、基本概念
2、Linux中的优先级
1、PRI和NI
2、通过top命令更改进程NI值
3、四个特性
二、进程切换
一、进程优先级
1、基本概念
什么是优先级?优先级:进程获取cpu资源分配的先后顺序,就是指进程的优先权。优先权高的进程有优先执行权利。
为什么有优先级?优先级存在的主要原因就是CPU资源是有限的,一个CPU一次只能运行一个进程。如果进程太多,需要通过优先级来竞争资源。所以需要存在进程的优先级,来确定进程获取CPU资源的先后顺序。
2、Linux中的优先级
使用ps -l 命令可以看到下面的内容。其中 PID和PPID我们已经知道是什么了,下面我们来了解一下其它是什么。
UID : 代表执行者的身份。
PRI :代表这个进程可被执行的优先级,其值越小越早被执行。
NI :代表这个进程的nice值 。
1、PRI和NI
~ PRI即进程的优先级,通俗点说就是程序被CPU执行的先后顺序,此值越小,进程的优先级别越高。
~ NI就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值。
~ PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice,这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行。
~ 调整进程优先级,在Linux下,就是调整进程nice值。
~ nice其取值范围是-20至19,一共40个级别。
从上面的图中我们可以知道:PRI默认是80,NI(nice值)默认是0。
2、通过top命令更改进程NI值
top命令就相当于Windows操作系统中的任务管理器,它能够动态实时的显示系统当中进程的资源占用情况。
然后,按 r 键,系统就会提示你输入需要修改NI值的进程的PID。
输入进程PID并回车后,系统会提示你输入调整后的nice值。
修改完后,我们查看一下新的优先级:我们再用ps命令查看进程的优先级信息,即可发现进程的NI变成了14,PRI变成了94
若是想将NI值调为负值,也就是将进程的优先级调高,需要使用sudo命令提升权限。
3、四个特性
~ 竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级。
~ 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰。
~ 并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行。
~ 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发。
二、进程切换
上面讲到并发:多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发。
如何切换?
首先,先了解一下时间片:大部分电脑只有一个CPU,所以一次只能运行一个进程。进程在运行的时候占有CPU,但是却不是一直占有到进程结束,因为进程都有自己的时间片!有了时间片的存在,进程会出现没有被执行完就被停止执行的情况。
简单来说:时间片就是一个进程在一次占用CPU资源时所能占用的时间,时间一到,不管程序是否执行完,都将切换到下一个进程来使用CPU。如果没有执行完,只有等下次再使用了CPU资源了。
但是,等下一次再次使用CPU资源时,我们怎么才能继续从上次运行到的地方接着运行呢?
如果一个进程正在运行,CPU内的寄存器里面,保存的是该进程的临时数据(例如,运行完一个函数,该函数有一个返回值,而这个返回值就存储在寄存器中)。临时数据也叫做上下文数据。
当该进程因时间片到了,要被切换时,进程会带走自己的上下文数据(数据保存至PCB里)。下次回来的时候,能够恢复上去,能够按照之前的逻辑继续向后运行,就像没有中断过一样。
注:寄存器被所有进程共享,上下文有多个,分别对应不同的进程。