【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















































相关文章
|
14天前
|
缓存 监控 Linux
linux进程管理万字详解!!!
本文档介绍了Linux系统中进程管理、系统负载监控、内存监控和磁盘监控的基本概念和常用命令。主要内容包括: 1. **进程管理**: - **进程介绍**:程序与进程的关系、进程的生命周期、查看进程号和父进程号的方法。 - **进程监控命令**:`ps`、`pstree`、`pidof`、`top`、`htop`、`lsof`等命令的使用方法和案例。 - **进程管理命令**:控制信号、`kill`、`pkill`、`killall`、前台和后台运行、`screen`、`nohup`等命令的使用方法和案例。
44 4
linux进程管理万字详解!!!
|
5天前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
41 8
|
13天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
47 4
|
14天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
16天前
|
消息中间件 存储 Linux
|
22天前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
24 1
|
1月前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
【10月更文挑战第9天】本文将深入浅出地介绍Linux系统中的进程管理机制,包括进程的概念、状态、调度以及如何在Linux环境下进行进程控制。我们将通过直观的语言和生动的比喻,让读者轻松掌握这一核心概念。文章不仅适合初学者构建基础,也能帮助有经验的用户加深对进程管理的理解。
22 1
|
JavaScript 前端开发 Linux
《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #13 使用Block I/O控制器设置I/O优先级
本节书摘来自华章出版社《Linux内核精髓:精通Linux内核必会的75个绝技》一书中的第2章,第2.7节,作者 竹部 晶雄、平松 雅巳,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1277 0
|
4天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
22 3
|
4天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
17 2