进程的理解
进程的理解
目录:
- 什么是进程
- 主要特征
- 主要组成部分
- 进程状态
- 进程优先级
1.什么是进程
概念:
- 在操作系统中,**进程(Process)**是一个正在执行的程序实例。
- 可以将进程理解为一个动态的实体,它不仅包括静态的程序代码,还包括程序执行过程中涉及的所有信息,如内存空间、文件描述符、CPU状态等。
管理的本质:先描述,再组织
为了方便管理进程,将进程的信息抽象出来,放在叫做进程控制块(PCB)的数据结构中。PCB是操作系统用来管理进程的核心数据结构,包含了进程的所有重要信息。即进程=程序代码+PCB。
PCB的组成部分:
- 进程标识符(PID):唯一标识进程的整数,用于区分不同的进程。
- 进程状态:表示进程当前的状态,如就绪、运行、阻塞、终止等。
- 程序计数器(PC):指向下一个要执行的指令地址,操作系统通过它来恢复进程的执行。
- CPU寄存器状态:包括各个 CPU 寄存器的当前值,以便在进程切换时能够恢复执行。
- 内存管理信息:包括指向进程地址空间的基址和限长,或其他内存管理结构的信息。
- 调度信息:进程的优先级、调度策略等,用于决定进程的执行顺序。
- 进程间通信信息:进程使用的信号量、消息队列、共享内存等,用于进程之间的通信和同步。
- I/O状态信息:包含进程打开的文件描述符、网络连接等信息,帮助管理与 I/O 相关的操作。
- 用户信息:可能包括与用户相关的信息,如用户 ID 和组 ID,以确保安全性和访问控制。
2.主要特征
-
动态性:进程是程序在操作系统中的一次执行过程,因此是动态的。进程从创建到执行、暂停、终止等,一直处于变化之中。
-
独立性:每个进程都有自己的私有地址空间和资源,彼此独立。一个进程的运行不应直接影响其他进程,操作系统通过隔离机制确保进程之间的独立性。
-
并发性: 在多任务操作系统中,可以同时运行多个进程。多个进程可以并发执行,在多核系统上可以真正实现并行,在单核系统上则是通过快速切换实现“并行”。
并发:任务可以交替进行,而不一定是同时
并行:多个任务同时进行
-
资源管理:进程需要操作系统分配的各种资源(如CPU时间、内存、文件句柄等)才能正常运行。操作系统通过进程来管理和分配这些资源。
-
生命周期:每个进程从创建到退出经历一个完整的生命周期,包括创建、就绪、运行、等待(或阻塞)和终止等状态的转换。
3.主要组成部分
- 进程控制块(PCB):
- 每个进程在操作系统中都有一个进程控制块(Process Control Block),它记录了进程的相关信息,如进程ID、进程状态、优先级、CPU寄存器状态、内存分配信息等。
- PCB 是操作系统管理和调度进程的核心数据结构。
- 地址空间:每个进程有自己独立的地址空间,分为代码区、数据区、堆栈区等。
- 代码区:存储程序的执行代码。
- 数据区:存储全局变量和静态变量。
- 堆区:用于动态内存分配。
- 栈区:用于存储函数调用、局部变量、返回地址等。
- CPU状态:进程在运行时,需要CPU寄存器、程序计数器等状态信息。操作系统会保存和恢复这些信息,以便在进程切换时能够正确恢复进程的执行状态。
- 文件和资源:进程可能会打开文件、使用网络连接等。操作系统为每个进程维护一个资源表,记录它使用的资源句柄。
PCB中已经包含了CPU状态和文件和资源,也就是第3和第4点,而在描述进程的组成部分时再次提及它们,目的是强调它们在进程执行过程中的重要性。
4.进程状态
进程在其生命周期中经历多个状态。以下是进程的主要状态及其描述:
- 新建状态(New):进程正在被创建。此状态表示操作系统正在为新进程分配必要的资源,如内存、进程控制块等。
- 就绪状态(Ready):进程已经获得了必要的资源,但尚未被调度到CPU上执行。在这个状态下,进程随时可以执行,只待调度器选择它。
- 运行状态(Running):进程正在使用CPU执行指令。在这个状态下,进程被分配了CPU时间,并正在执行其代码。
- 阻塞状态(Blocked / Waiting):进程因为等待某些事件(如I/O操作完成、资源可用等)而无法继续执行。在这个状态下,进程不能被调度到CPU上运行,直到所等待的事件发生。
- 终止状态(Terminated):进程完成执行或由于异常情况退出。此状态下,进程的资源被释放,操作系统会更新其PCB以反映进程的终止。
- 挂起状态(Suspended):有些操作系统会引入“挂起”状态,表示进程被暂时移出内存,处于不活跃状态。此状态可以分为:
- 挂起就绪(Suspended Ready):进程被挂起,但可以被恢复到就绪状态。
- 挂起阻塞(Suspended Blocked):进程因等待事件而被挂起。
- 就绪挂起状态(Ready Suspended):进程虽然在就绪状态,但由于系统资源不足而被挂起。这时,进程不能立即运行,需等待资源可用。
上面的这些状态是站在所有操作系统的角度所谈的,下面将介绍Linux操作系统的进程状态。
/*
* The task state array is a strange "bitmap" of
* reasons to sleep. Thus "running" is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};
这是Linux操作系统kernel源代码里对进程状态的定义:
"R (running)"
: 任务正在运行或已准备好运行。"S (sleeping)"
: 任务处于睡眠状态,等待某个事件完成。"D (disk sleep)"
: 任务处于不可中断的睡眠状态,通常是在等待磁盘 I/O。"T (stopped)"
: 任务已停止,通常是由于信号或用户请求。"t (tracing stop)"
: 任务因跟踪而停止,通常是由调试器引起的。"X (dead)"
: 任务处于“死亡”状态,意味着已终止但资源尚未完全清理。"Z (zombie)"
: 任务是一个僵尸进程,已经终止但在等待父进程读取其退出状态。
在实际的操作系统中,挂起这一状态是不可见的,被操作系统藏起来,避免人为修改造成破坏。
特殊的进程状态
僵尸进程:是一种已经终止但尚未被父进程回收的进程。
父进程(Parent Process)是指生成子进程的进程。每个进程在启动新的子进程时都会成为该子进程的父进程。
产生过程:
- 子进程终止:子进程完成任务并退出。
- 进程状态保留:操作系统保留子进程的进程 ID (PID) 和状态信息,直到父进程通过
wait
系列系统调用读取它。 - 等待父进程回收:在父进程读取子进程的状态前,子进程保持僵尸状态。此时,它已释放资源,但仍在进程表中占用一个位置。
孤儿进程:是指其父进程已经终止,但它本身仍在运行的进程。
处理过程:
- 父进程终止:孤儿进程的父进程意外退出或因故障而终止,导致子进程失去父进程。
- 重新分配给
init
进程:在 Unix 和 Linux 系统中,所有孤儿进程会被自动重新分配给init
进程(通常 PID 为 1),该进程是所有进程的祖先。init
进程的职责之一是充当孤儿进程的新父进程。 - 继续执行并回收:孤儿进程在
init
进程的管理下继续执行,并在其结束时由init
进程回收,避免产生僵尸进程。
5.进程优先级
为什么会有优先级?
- 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级。
怎么理解权限和优先级?
- 权限是能不能做,优先级是谁先做
进程优先级是指操作系统用来决定进程获得 CPU 时间的相对重要性和顺序的数值指标。优先级高的进程有优先执行权利。配置进程优先权对多任务环境的Linux很有用,可以改善系统性能。
上图是Linux操作系统的实时进程状态图,输入ps -l
输出,简单解释下:
- F(Flag):进程的标志位,代表进程的某些属性。
- S(State):进程的状态
- UID(User ID):表示进程所有者的用户 ID。
- PID(Process ID):进程的唯一标识符。
- PPID(Parent Process ID):父进程的 ID。
- C(CPU Usage):进程的 CPU 使用率百分比。
- PRI(Priority):进程的优先级。
- NI(Nice Value):进程的 nice 值,影响优先级。
- ADDR:内存地址。
-
表示地址未被使用或不可用。 - SZ(Size):进程的内存占用大小,以页(page)为单位。
- WCHAN(Waiting Channel):如果进程在等待资源,这里会显示正在等待的内核函数。
- TTY(Terminal):进程关联的终端。两个进程都在
pts/0
上,这意味着它们是通过同一终端会话(伪终端)启动的。 - TIME:进程使用的总 CPU 时间。
- CMD(Command):进程启动时的命令。
其中,有关进程优先级的是PRI和NI。
- PRI是进程的优先级,其值越小优先级越高。
- NI是人为可以修改的地方,PRI(new)=PRI(old)+NI,我们通过更改NI值来影响进程的优先级,其中NI的取值范围是[-20,19)。
如何修改NI值?
输入
top
->r
->进程的PID
->NI值
相关文章:

进程的理解
进程的理解 目录: 什么是进程主要特征主要组成部分进程状态进程优先级 1.什么是进程 概念: 在操作系统中,**进程(Process)**是一个正在执行的程序实例。可以将进程理解为一个动态的实体,它不仅包括静态…...

LeetCode494:目标和
题目链接:494. 目标和 - 力扣(LeetCode) 代码如下 class Solution { public:int findTargetSumWays(vector<int>& nums, int target) {int sum 0;for(int i 0; i < nums.size(); i){sum nums[i];}if(abs(target) > sum)…...

vue3中自定义校验函数密码不生效问题
vue3中自定义校验函数密码不生效问题 由于在自定义的校验规则中只校验了有数据的情况,以至于在没输入时,校验不生效 (1)用户不输入校验不生效 const validateSurePassword (rule, value, callback) > {if (value ! ) {if (…...

RabbitMQ(死信队列)
一、本文抒写背景 前面我也在延迟队列篇章提到过死信队列,也提到过一些应用场景! 今天呢,这篇文章,主要就是实战一个业务场景的小Demo流程,哈哈,那就是延迟关闭订单。 二、开始啦!letgo! 首…...

HTTP代理的优点和局限性
在这个信息爆炸的时代,网络已成为我们获取知识、交流思想、开展商务的重要平台。但随之而来的隐私泄露、网络安全威胁、以及无处不在的网络监控,却让我们的每一次在线活动都充满了风险。 在这样的背景下,HTTP代理技术应运而生,它不…...

大厂面试真题-如果通过JVM自带的工具排查和解决线上CPU100%的问题
通过JVM自带的工具去定位和解决线上CPU 100%的问题,可以遵循以下步骤: 一、使用top和jps定位Java进程 使用top命令: 在Linux服务器上执行top命令,查看所有进程的CPU使用情况。找到CPU使用率最高的进程,并记录其PID&a…...

kubernetes中微服务部署
微服务 问:用控制器来完成集群的工作负载,那么应用如何暴漏出去? 答:需要通过微服务暴漏出去后才能被访问 Service 是一组提供相同服务的Pod对外开放的接口借助Service,应用可以实现服务发现和负载均衡Service 默认只…...

基于 Java 的天气预报系统设计与实现
随着互联网的飞速发展,天气预报系统变得越来越重要。它可以帮助用户了解未来几天的天气情况,便于出行、活动安排。本文将介绍如何使用 Java 构建一个简单的天气预报系统,涉及系统架构设计、核心功能开发以及完整的代码实现。 1. 系统架构设计…...

思迅商云8前台打开提示上传日志信息失败
请按照以下步骤核实处理: 1、重启sql服务后测试。 2、请先备份前台安装目录,之后删除安装目录下的log文件和localdate下的log文件,之后重新打开软件,若依旧不行则说明前台文件有损坏,需要重新安装客户端,…...

webstorm的缩进设置(过度缩进解释)
在编写前端代码时 缩进规范一般被认为是2个空格 而非默认的4个空格 当我们通过webstorm去编写前端代码时 我们可以通过setting->Code Style->html/css/js指定的界面中去设置tab/indent/continuation indent 具体的话 我们将html/css/js操作界面中的tab/indent设置为2个空…...

与ZoomEye功能类似的搜索引擎还有哪些?(渗透课作业)
与ZoomEye功能类似的搜索引擎有: Shodan:被誉为“物联网的搜索引擎”,专注于扫描和索引连接到互联网的各种设备,如智能家居设备、工业控制系统、摄像头、数据库等。它提供全球互联网设备的可视化视图,帮助用户了解网络…...

Java 计数排序
计数排序(Counting Sort)是一种非比较型排序算法,适用于一定范围内的整数排序。它的基本思想是通过计数输入元素中每个值出现的次数,然后计算每个值的起始位置,最终将元素放到正确的位置上。计数排序的时间复杂度为 O(…...

error: RPC failed; curl 16 Error in the HTTP2 framing layer
yschai@LAPTOP-F2L146JK:~$ git clone https://github.com/Chyusen/yschai.git Cloning into ‘yschai’… error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush after ref listing 使用Ubuntu在git clone github上的项目的时候,遇到以上报错…...

Python脚本分类和代码举例
Python是一种强大且灵活的编程语言,被广泛应用于数据分析、Web开发、自动化、人工智能等领域。在不同的应用场景下,Python脚本可以被分类为多种类型。本文将深入分析Python脚本的分类,同时提供相关代码示例,帮助读者理解和应用这些…...

【Redis十二】Redis的典型应用(缓存和分布式锁)
目录 Redis作为缓存 1.什么是缓存? 2.缓存的更新策略 3.缓存预热,缓存穿透,缓存雪崩和缓存击穿 Redis作为分布式锁 1.什么是分布式锁? 2.分布式锁的实现过程 Redis是目前后端开发中非常热门的组件之一,本篇文章…...

C++入门基础知识107—【关于C++continue 语句】
成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C continue 语句的相关内容!…...

【AI大模型】《多模态持续学习》最新进展综述
摘要—持续学习(CL)旨在使机器学习模型能够从新数据中不断学习,同时在不遗忘已获得知识的基础上进行扩展。随着机器学习模型从小规模到大规模预训练架构的演变,以及从支持单一模态数据到支持多模态数据,多模态持续学习…...

大厂面试真题-CPU飙升问题怎么定位
CPU使用率飙升是开发者和系统管理员常遇到的问题,定位CPU飙升问题通常涉及以下步骤: 一、使用系统监控工具 查看CPU使用图表:利用任务管理器(Windows系统)或top、htop(Linux系统)等工具&#…...

【每日刷题】Day137
【每日刷题】Day137 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 1576. 替换所有的问号 - 力扣(LeetCode) 2. 495. 提莫攻击 - 力扣…...

24.4 基于consul服务发现模式
本节重点介绍 : consul 安装consul go代码注册服务,注销服务,获取服务node_exporter改造为consul服务发现在数量比较大时,在注册服务的时候,关闭check,可以降低consul的压力 consul 安装 准备工作 # 下载consul wge…...

[红队apt]快捷方式病毒攻击流程
免责声明:本文整理攻击者操作,帮助了解攻击原理,提高防范能力 前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理攻击者是如何用快捷方式进行攻击的流程 快捷方式攻击原理 快捷方式可以指向执行某个程序。 我们利用快捷方式攻击的…...

一个架构师的职业素养:四种常用的权限模型
你好,我是看山。 本文收录在《一个架构师的职业素养》专栏。日拱一卒,功不唐捐。 今天咱们一起聊聊权限系统。 以大家熟知的电商场景举例: 用户可以分为普通用户、VIP用户:我们需要控制不同角色用户的访问范围。比如,京东的PLUS会员,可以进入会员专区,而且能够使用礼金…...

说起来很简单,做起来很复杂:解密Chat GPT背后的原理与技术
你或许已经体验过ChatGPT,它能快速回答各种问题,生成文案、编写代码,甚至陪你聊些有趣的话题。看似简单易用,背后却隐藏着强大的技术支持。 输入几句话,ChatGPT仿佛“理解”了你的问题,立即给出准确的回答…...

tcpdump-arm平台移植
准备工作 下载并解压 972 mkdir tcpdump973 cd tcpdump/974 ls975 wget https://www.tcpdump.org/release/tcpdump-4.99.5.tar.xz976 wget https://www.tcpdump.org/release/libpcap-1.10.5.tar.xz977 tar -xvf libpcap-1.10.5.tar.xz978...

LabVIEW中的非阻塞定时器
在LabVIEW编程中,通常需要在某些任务执行过程中进行非阻塞的延时操作。例如,显示某条信息一段时间,同时继续执行其他任务,并在延时时间结束后停止显示该信息。这类需求通常用于处理优先级不同的信息显示,如错误信息需要…...

MIDIPLUS 50周年丨中国国际乐器展览会首日盛况
10月10日,由中国乐器协会、上海国展展览中心有限公司、法兰克福展览(上海)有限公司共同主办的中国(上海)国际乐器展览会在上海新国际博览中心(上海市浦东新区龙阳路2345号)盛大开幕。 2024上海…...

基于springboot的家政服务管理系统(含源码+sql+视频导入教程+文档+PPT)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的家政服务管理系统1拥有三种角色 管理员:用户管理、服务管理、评价管理、预约管理、分配管理等 用户:登录注册、预约服务、取消服务、评价等 服…...

第十四届单片机嵌入式蓝桥杯
一、CubeMx配置 (1)LED配置 (1)LED灯里面用到了SN74HC573ADWR锁存器,这个锁存器有一个LE引脚,这个是我们芯片的锁存引脚(使能引脚),由PD2这个端口来控制的 (2ÿ…...

Zotero 如何实现数据同步 坚果云
如何在Zotero中设置webdav连接到坚果云? | 坚果云帮助中心...

基于Redis实现的延迟队列
1. 适用场景 日常开发中,我们经常遇到这样的需求,在某个事件发生后,过一段时间做一个额外的动作,比如 拼单,如果2小时未能成单,取消拼单下单,30分钟内未支付,取消订单 之前的我们的…...