【Linux】进程优先级(PRI,NI)和进程切换

1、进程优先级

无论是外设还是CPU,所能提供给操作系统的资源很少,而操作系统中的进程又非常多,安排谁先使用资源,就需要进程优先级的存在。

  • 查看进程优先级

ps -al 查看当前运行进程的优先级信息。
在这里插入图片描述

ps -al | grep test 配合管道查看指定进程优先级信息。
ps -al | head -1 显示对应标题。
在这里插入图片描述
这么多的信息,我们只需要关注几个。
UID,PID,PPID我们很熟悉,对应用户ID,该进程ID,父进程ID。

PRI:老的优先级。(这个值默认都是80)
NI:在进程中,进行优先级调整的,都是通过修改NI值。(也称为nice值)
最终优先级 = PRI + NI,两者相加大的就是优先级高的。

  • 进程优先级的范围

通过sudo top,可以动态地持续监听进程地运行状态,并且还提供了一个交互界面,可以供用户操作。

进入top界面,输入r(表明修改nice值),再输入对应进程PID,再输入NI值。
在这里插入图片描述

在这里插入图片描述

先将NI设为100,通过查看进程优先级,发现NI只设为19,只变成了99。
在这里插入图片描述
再将NI设为-100,查看优先级,发现NI只设为-20,只变成了60。
在这里插入图片描述

结果来看,NI的范围只有[-20,19],所以最终优先级范围也就[60,99]

NI的范围小,对应进程优先级的区间小,那么多的进程,为什么这个区间不设大一点呢?
如果区间设置的很大或是无限制,要是出现恶意进程故意修改优先级使得其它进程无法正常运行,所以这样设置还是有道理的。

目前这个阶段,对进程优先级的感知还不强,也没有什么需要调整进程优先级的场景,具体看需求,现在认识一下。

2、进程切换

在此前,先来介绍几个概念:

  1. 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰。(父子进程,子进程死亡不影响父进程)。
  2. 并行: 一个CPU每时只有一个进程正在运行,多个CPU在任何一个时刻有多个进程同时进行运行,这就称为并行。
  3. 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间内,让多个进程都得以推进。(一个进程不是在CPU里运行完了就退出,而是可能运行个10ms,就进行等待状态或进入运行队列,再进行下一个进程,这样比如1s就能跑100个10ms的进程代码。)

下面进程切换就看具体做了什么。

首先,CPU的构成中有许多的寄存器,这些寄存器保存着当前运行的进程的数据。

寄存器被所有进程共享,寄存器内的数据,是属于当前运行进程的,这个数据也被称为 — 上下文数据

一个进程在CPU上单次运行的一段时间称为时间片

常见的寄存器eip(pc指针),存储当前指令下一条指令的地址。

当操作系统想要运行一个进程,会将对应进程PCB地址传给CPU的某一个寄存器。让CPU能找到这个进程PCB,从而找到对应代码和数据。

CPU是很 “ 笨 ” 的只能靠指令集读取指令,当进程运行将指令传给CPU,CPU靠指令集分析指令运行对应代码,当进程的时间片结束后,操作系统将保存此时CPU中寄存器内的数据,当再次轮到这个进程后操作系统将原本数据加载到寄存器中,eip就可以通过下一条指令地址让代码继续运行。

进程退出CPU,操作系统保留寄存器里的数据,进程回到CPU,操作系统将原本数据恢复到寄存器中。这就完成了进程切换。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值