我与Linux的爱恋:进程优先级|进程切换


🔥个人主页guoguoqiang. 🔥专栏Linux的学习

文章目录

1.进程优先级

1.什么是进程优先级?

cpu资源分配的先后顺序,就是指进程的优先权(priority)。

优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。

还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整

体性能。

2.进程优先级的类型

进程优先级可以是静态的,也可以是动态的。静态优先级通常在进程创建时由用户或操作系统管理员设定,并且不会改变。动态优先级则可以根据进程的行为或系统状态自动调整。

静态优先级:在进程创建时由用户或操作系统管理员设置,通常使用整数值表示,数值越低表示优先级越高。

动态优先级:根据进程的运行情况自动调整,例如,一个进程如果长时间等待I/O操作,它的优先级可能会降低

3.进程优先级的作用

1.资源分配:操作系统通过进程优先级来决定哪些进程可以获得更多的CPU时间和其他资源。高优先级进程会优先执行,以确保系统的响应性和效率。

2.响应时间:在实时系统或对用户响应时间要求高的场景中,优先级管理能够确保关键任务得到及时处理。例如,交互式应用程序的优先级通常较高,以减少用户等待时间。

3.避免饥饿:适当的优先级调度可以防止低优先级进程长时间得不到执行,从而避免系统资源的饥饿状态。

4.系统性能:通过合理设置进程的优先级,操作系统可以优化整体性能,提高吞吐量,减少延迟,从而提升用户体验。

5.调度策略:不同的调度算法(如优先级调度、轮询调度等)依赖于进程优先级来决定执行顺序,影响系统的整体调度效率。

4.进程优先级的实现

进程优先级通常通过操作系统的调度器来实现,调度器会根据进程的优先级和其他因素(如进程状态、时间片等)来决定进程的执行顺序。

5.进程优先级的重要性

进程优先级在确保系统高效、稳定运行中起着关键作用。合理的优先级管理能够帮助操作系统在多任务环境中有效地分配资源,提升用户体验。

6.查看系统进程

在Linux或Unix系统中,可以使用ps -l命令查看系统进程的相关信息,包括UID、PID、PPID、PRI和NI等。

UID : 代表执行者的身份

PID : 代表这个进程的代号

PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号

PRI :代表这个进程可被执行的优先级,其值越小越早被执行

NI :代表这个进程的nice值

7.修改进程优先级

修改进程优先级主要是通过修改nice值实现的,nice值范围为-20至19,**数值越小,优先级越高。**可以使用nice和renice命令或通过top命令进行修改。

top命令进行修改

先按top 然后按r 输入进程pid 回车 然后再输入nice值

然后发现pid为19979的pri从80变成了90
renice命令

renice命令使用格式为:renice [nice值] -p [进程pid]

8.优先级调度原理

双140轮转队列

进程切换

进程切换(Process Switching),也称为上下文切换(Context Switching),是操作系统中的一个基本机制,它允许在单个处理器上快速高效地运行多个进程。进程切换是指操作系统保存当前运行进程的状态(上下文),并恢复另一个进程的状态以使其能够继续执行的过程。
进程切换的过程

保存当前进程的上下文:这包括将当前进程的寄存器值(如程序计数器、栈指针、通用寄存器等)保存到它的进程控制块(PCB)中。

选择另一个进程:操作系统调度器根据某种策略(如轮转调度、优先级调度等)选择下一个要执行的进程。

恢复新进程的上下文:将所选进程的寄存器值从其PCB中恢复到处理器中,以便该进程可以从中断点继续执行。

进程切换的原因

1.多任务处理:

操作系统需要在多个进程之间共享CPU资源,以实现并发执行。

2.I/O操作:

当一个进程执行I/O操作时(如读写文件、网络通信),它会被阻塞,操作系统会切换到其他进程以利用CPU资源。

3.时间片耗尽:

在时间共享系统中,进程被分配固定的CPU时间片,当时间片耗尽时,操作系统会切换到其他就绪进程。

4.优先级变化:

高优先级进程可能需要抢占低优先级进程的CPU,导致切换。

5.进程状态变化:

进程可能因为各种原因(如资源可用、事件发生)从阻塞状态变为就绪状态,这也会导致切换。

6.系统调用:

当进程发出系统调用请求时,操作系统需要切换上下文以处理中断或服务请求。

进程切换的代价

1.时间开销:

切换过程涉及保存和恢复进程状态,时间开销包括寄存器保存、程序计数器更新等,通常为微秒级。

上下文切换的复杂性:

操作系统需要管理多个进程的状态信息,这增加了系统的复杂性和管理开销。

2.CPU缓存失效:

切换进程时,新的进程可能需要访问不同的内存地址,导致CPU缓存失效,增加内存访问时间。

3.资源竞争:

切换过程可能会导致对共享资源的竞争,影响系统的整体性能。

4.调度算法的影响:

不同的调度算法对切换频率和时间的影响不同,某些算法可能导致频繁切换,从而增加系统开销。

优化进程切换

快速上下文切换:通过硬件支持来加速上下文切换的过程。

减少切换次数:通过改进调度算法,减少不必要的进程切换。

优先级继承:在某些情况下,为了避免频繁的上下文切换,可以采用优先级继承机制。

进程的切换,最重要的一件事情是:上下文数据的保护和恢复。
竞争与独立

竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高

效完成任务,更合理竞争相关资源,便具有了优先级

独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰
并行与并发

并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行

并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发
进程抢占:

◉ 抢占式内核是一种操作系统调度策略,它允许操作系统强制将处理器从一个进程切换到另一个进程。当一个低优先级进程正在运行时,如果有一个高优先级进程准备好运行,操作系统会抢占低优先级进程的CPU时间,切换到高优先级进程。

关于进程的切换问题

计算机中的CPU内有大量的寄存器,它保存着正在执行的进程的临时数据。如果进程A正在被执行,CPU内的寄存器里面一定保存的是进程A的临时数据。寄存器中的临时数据,就叫做A的上下文

上下文数据不可以丢弃,由于计算机CPU数量小于进程数量,则当进程A暂时被切换下来的时候,进程A需要顺便带走自己的上下文数据。带走暂时保存的目的就是为了下次回来的时候,能恢复上去,就能继续按照之前的逻辑继续向后运行,就如同没有中断过一样。但如果没有保存上下文数据,进程A回来再执行时,就无法判断进程A原先执行到哪里了

注意:CPU内的寄存器只有一份,但是上下文可以有多份,分别对应不同的进程!!

相关推荐
weixin_514548895 分钟前
机器学习课程学习周报十五
人工智能·学习·机器学习
大拇指的约定6 分钟前
数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(三),单表查询
数据库·mysql·oracle
秋风起,再归来~8 分钟前
【Linux庖丁解牛】—Linux基本指令(中)!
linux·指令
Themberfue11 分钟前
基础算法之双指针--Java实现(下)--LeetCode题解:有效三角形的个数-查找总价格为目标值的两个商品-三数之和-四数之和
java·开发语言·学习·算法·leetcode·双指针
AIGC破防黑吗喽12 分钟前
Midjourney零基础学习
人工智能·gpt·学习·ai·stable diffusion·midjourney·ai绘画
Eternal-Student19 分钟前
预处理、编译、汇编、链接
linux·汇编·windows
阳光阿盖尔20 分钟前
redis——哨兵机制
数据库·redis·缓存·主从复制·哨兵
小小娥子21 分钟前
【Redis】Hash类型的常用命令
数据库·spring boot·redis
盒马盒马21 分钟前
Redis:cpp.redis++通用接口
数据库·c++·redis
LearnTech_12325 分钟前
【学习笔记】手写一个简单的 Spring MVC
笔记·学习·spring·spring mvc