【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















































相关文章
|
12天前
|
算法 调度 UED
深入理解操作系统:进程调度与优先级队列
【10月更文挑战第31天】在计算机科学的广阔天地中,操作系统扮演着枢纽的角色,它不仅管理着硬件资源,还为应用程序提供了运行的环境。本文将深入浅出地探讨操作系统的核心概念之一——进程调度,以及如何通过优先级队列来优化资源分配。我们将从基础理论出发,逐步过渡到实际应用,最终以代码示例巩固知识点,旨在为读者揭开操作系统高效管理的神秘面纱。
|
14天前
|
缓存 监控 Linux
linux进程管理万字详解!!!
本文档介绍了Linux系统中进程管理、系统负载监控、内存监控和磁盘监控的基本概念和常用命令。主要内容包括: 1. **进程管理**: - **进程介绍**:程序与进程的关系、进程的生命周期、查看进程号和父进程号的方法。 - **进程监控命令**:`ps`、`pstree`、`pidof`、`top`、`htop`、`lsof`等命令的使用方法和案例。 - **进程管理命令**:控制信号、`kill`、`pkill`、`killall`、前台和后台运行、`screen`、`nohup`等命令的使用方法和案例。
45 4
linux进程管理万字详解!!!
|
5天前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
41 8
|
14天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
47 4
|
15天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
16天前
|
消息中间件 存储 Linux
|
5月前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
126 13
|
4月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
4月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
166 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
3月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。