【Linux】Linux进程的理解 --- 冯诺依曼体系、进程描述符、状态、优先级、切换…-1

简介: 【Linux】Linux进程的理解 --- 冯诺依曼体系、进程描述符、状态、优先级、切换…-1

五、进程优先级(受nice值调控的priority值 )

1.什么是优先级?


1.先还是后获得某种资源的能力,被称之为优先级。

2.先获得就是优先级高,后获得就是优先级低



2.为什么会存在优先级?

1.
因为资源是有限的。


2.

比如现在有20多个进程要访问CPU,但CPU只有一个,另外20个进程要访问网卡,另外40个进程要访问磁盘,但是资源太少了,但访问的又太多了,此时就会出现优先级的情况。想要访问,可以!但需要排队,这就出现了优先级。


3.Linux优先级特点

1.

进程的优先级和状态一样,本质都是PCB里面的一个数字(也可能是多个数字),操作系统通过这些数字来辨别进程的状态和优先级

2.
通过ps -al指令可以查看到进程的详细信息,PRI和NI的值合并在一起代表Linux进程的优先级。PRI其实就是最终优先级,只不过它受NI值的调控。


0f5e366fe5ad453fbafa2cf82530c506.png



4.修改Linux下的优先级(top指令 + root身份)



1.

最终优先级=老的优先级(固定为80)+nice值,Linux支持进程在运行中,通过修改nice值的改变来进行进程优先级的调整。


2.

PRI的值越小代表优先级越高,输入sudo top指令(用管理员的身份去做),然后按下r,输入对应的进程pid(表示你要修改哪个进程的优先级),然后输入整数值,这个值就是你要修改的nice值。


3.

优先级过度设置,会导致CPU调度失衡,所以nice值是有范围的,不能让你随意过度的调整,nice值的范围是-20到19,一共40个优先级级别,所以最终优先级的范围就是60到99

ba89b83f88da4e2881050b472d64923f.png


4.
下面是nice值分别调整为-100和100后,进程的优先级分别为60和99的结果,这也就说明,OS不会让我们过度随意调整nice值,nice值的调整是有一个限度范围的。

57c4266496884823af947d076c664860.gif


2e371c3318334c2ca5a71e842fd241f3.gif


六、四个补充的进程概念(注意区分并行和并发)


竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级,值得注意的是进程排队的时候,OS操作的是进程对应的PCB而不是进程对应的代码和数据。


独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰!就算是父子进程在运行时也是互不干扰的。例如下面的子进程挂掉,变为僵尸进程,但父进程依旧可以运行,所以进程间运行是互不干扰的。

8aba7778815d4457b866cc494cfb9580.gif


并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行。有几个CPU,就可以同时运行几个进程。


并发: 多个进程在一个CPU下采用进程切换的方式来实现多个进程的运行(不是同时运行),在一个时间段内,让多个进程都得以推进,称之为并发。


如果只有一个CPU,那么在任何时刻,只能有一个进程正在运行!多个进程的运行依靠的是进程切换,呈现给使用者的就是我们好像看到多个进程在同时运行,但其实不是这样的,任何时刻只能有一个进程在运行。


不是一个进程必须在CPU上跑完才能被CPU拿下来,当代计算机采用的是时间片轮转的策略,一个进程可以跑一会儿就换到下一个进程,在一个时间段内,每个进程都可以跑多次,呈现出来的现象就是多个进程同时运行,例如我的计算机现在可以打开画图工具,还可以开直播和别人聊天,还可以打开xshell进行linux的学习,但这些进程并不是同时在一个CPU下运行的,只是采用了进程切换的方式来完成的。


CPU可以在几毫秒的时间内,就将每个进程都运行好几次,CPU读取代码的速度非常快!


时间片轮转(百度百科)

七、进程切换(进程的上下文保护和恢复)


1.
一个CPU会有大量的寄存器,虽然寄存器很多,但是只有一套寄存器,寄存器分为用户可见的寄存器和用户不可见的寄存器(状态寄存器、权限寄存器等),对于寄存器的深入了解,可以看看
寄存器详谈(转载自知乎博主轩辕之风的文章)


2.

CPU永远做三件事情,取指令(代码被编译器翻译成二进制指令),分析指令,执行指令,在CPU中有一个叫做eip的寄存器,专门用来标识下一次应该从当前进程的具体的位置读取相应的代码和指令


3.

当进程在运行的时候,一定会产生非常多的临时数据,这些临时数据只属于当前进程,虽然CPU内部只有一套寄存器硬件,但是寄存器里面保存的数据是属于当前进程的,寄存器硬件和寄存器内的数据是两码事。


4.

进程在运行的时候,的确是占有CPU的,但进程并不是一直占有CPU直到进程运行结束,这个我们前面说过,计算机有时间片轮转的策略,每一个进程在运行的时候,都有自己的时间片,所以在进程重新被CPU调度的时候,CPU必须知道上一次这个进程运行到什么时候了,当进程被换下去的时候,进程的运行信息会被存在操作系统里面(具体什么位置这里不详谈),以便下次CPU重新调度时进程能够正常运行,这叫做进程的上下文保护。当进程被CPU重新调度上来时,首先要做的第一件事情就是读取操作系统中进程运行的相关数据,这叫做进程的上下文恢复。


5.

在任何时刻,CPU中的寄存器虽然被所有进程共享,但寄存器内的数据是每个进程私有的,这些寄存器内的数据就是进程的上下文数据,这些寄存器内的数据是时刻在不断变化的,OS会实时加载当前运行进程的上下文数据到寄存器里面。


89297b27ce7e45f8b7bce1caa9bfa068.png















































相关文章
|
5月前
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
237 67
|
4月前
|
Web App开发 Linux 程序员
获取和理解Linux进程以及其PID的基础知识。
总的来说,理解Linux进程及其PID需要我们明白,进程就如同汽车,负责执行任务,而PID则是独特的车牌号,为我们提供了管理的便利。知道这个,我们就可以更好地理解和操作Linux系统,甚至通过对进程的有效管理,让系统运行得更加顺畅。
115 16
|
4月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
93 20
|
3月前
|
监控 Shell Linux
Linux进程控制(详细讲解)
进程等待是系统通过调用特定的接口(如waitwaitpid)来实现的。来进行对子进程状态检测与回收的功能。
74 0
|
3月前
|
存储 负载均衡 算法
Linux2.6内核进程调度队列
本篇文章是Linux进程系列中的最后一篇文章,本来是想放在上一篇文章的结尾的,但是想了想还是单独写一篇文章吧,虽然说这部分内容是比较难的,所有一般来说是简单的提及带过的,但是为了让大家对进程有更深的理解与认识,还是看了一些别人的文章,然后学习了学习,然后对此做了总结,尽可能详细的介绍明白。最后推荐一篇文章Linux的进程优先级 NI 和 PR - 简书。
102 0
|
3月前
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
65 0
|
3月前
|
Linux 调度 C语言
Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
67 0
|
7月前
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
6月前
|
存储 Linux 调度
【Linux】进程概念和进程状态
本文详细介绍了Linux系统中进程的核心概念与管理机制。从进程的定义出发,阐述了其作为操作系统资源管理的基本单位的重要性,并深入解析了task_struct结构体的内容及其在进程管理中的作用。同时,文章讲解了进程的基本操作(如获取PID、查看进程信息等)、父进程与子进程的关系(重点分析fork函数)、以及进程的三种主要状态(运行、阻塞、挂起)。此外,还探讨了Linux特有的进程状态表示和孤儿进程的处理方式。通过学习这些内容,读者可以更好地理解Linux进程的运行原理并优化系统性能。
217 4
|
存储 缓存 Linux
【Linux】进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解
【Linux】进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解