【linux】进程1 -- 状态和优先级

linux进程 在系统当中查找一个最合适调度的进程的时间复杂度是⼀个常数,不随着进程增多而导致时间成本增加,我们称之为进程调度O(1)算法! 阅读详情


进程

课本概念:程序的一个执行实例,正在执行的程序,操作系统进行资源分配和调度的基本单位等
内核观点:担当分配系统资源(CPU时间,内存)的实体。

linux下,我们使用的命令,如ls等,运行起来就是一个进程。可以说,学习操作系统,首先就要学习进程。

PCB

对于进程,操作系统必要管理它。如何管理?将进程的信息封装为PCB(process control block),通过管理进程的PCB来管理进程。简单来说,PCB是进程属性的集合。
在这里插入图片描述

linux查看进程

linux下的进程信息存储在/proc目录下
在这里插入图片描述
大多数的进程信息也可以通过ps和top等用户级工具来获取

ps命令用于显示当前正在运行的进程信息
a: 显示所有用户的进程。通常情况下,ps命令仅显示与当前终端关联的进程,但使用-a选项可以显示所有用户的进程。
j: 使用BSD风格的输出格式。这种格式下,ps命令会以进程状态、作业控制信息等形式显示进程信息。
x: 显示与终端无关的进程。通常情况下,ps命令仅显示与当前终端关联的进程,但使用-x选项可以显示与当前终端无关的进程。
在这里插入图片描述

top命令用于动态显示系统中运行的进程的相关信息,包括进程的CPU利用率、内存利用率、进程ID等
在这里插入图片描述

进程属性

task_struct结构体

在linux操作系统下的PCB:task_struct(结构体)

task_struct的内容分类:

  1. 标识符: 描述本进程的唯一标示符,用来区别其他进程。
  2. 状态: 任务状态,退出代码,退出信号等。
  3. 优先级: 相对于其他进程的优先级。
  4. 程序计数器: 程序中即将被执行的下一条指令的地址。
  5. 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  6. 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  7. I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  8. 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  9. ……

重点介绍 标识符,状态,优先级

一、进程标识符

进程标识符,即PID:描述本进程的唯一标示符,用来区别其他进程。
在这里插入图片描述
这里PPID – parent PID, 即该进程的父进程的PID.

linux也提供了系统接口来获取进程的PID
在这里插入图片描述
返回值类型pid_t, 本质是整型
在这里插入图片描述

父子进程

fork()函数是Linux系统中用于创建新进程的一个系统调用。它的作用是创建一个与当前进程几乎完全相同的子进程,这个子进程有着与父进程相同的代码、数据和上下文,但是有着独立的内存空间。
在这里插入图片描述
看下方代码:当代码执行到fork()时,进程会生成一个子进程,父子进程共享fork之后的代码,在子进程中ifork返回0,即下方的id = 0, 在父进程中,fork返回子进程的pid, 即下方id = 19786 ,通过之后的if–else语句就可以使父子进程执行不同的代码。如果fork创建子进程失败则会返回-1

在这里插入图片描述

二、进程状态

在操作系统理论中,进程一般有3种基本状态:运行、就绪和阻塞。
在这里插入图片描述
但上面的只是操作系统理论,实际的操作系统下的进程状态更复杂。

以linux为例,解释一下:运行,阻塞,挂起
在这里插入图片描述
在计算机操作系统中,进程可能会由于各种原因而进入阻塞挂起状态,其中包括等待输入/输出(I/O)操作完成、等待系统资源分配、等待进程间通信等。

实际上的linux对进程状态的定义:

在这里插入图片描述

R即运行状态,S即阻塞状态,这都好理解,但有3个状态很奇怪:D、T、Z

插一个小知识:我们使用ps命令查看进程会发现有些进程的状态会带个+号,如R+
这里的 +表示该进程是在前台运行

在这里插入图片描述
如果在运行时加上&,可以让程序变为后台运行。此时如果想终止进程则需要kill -9 PID
在这里插入图片描述

磁盘睡眠 – D

进程的磁盘睡眠状态(Disk Sleep State)通常是指进程处于等待磁盘I/O操作完成的状态。这种状态通常出现在进程请求进行磁盘读取或写入操作时,但磁盘尚未完成相应的I/O操作,因此进程被阻塞,等待磁盘响应。在这种状态下,进程不会消耗CPU时间,而是被挂起,直到磁盘I/O操作完成。是阻塞挂起状态的一种形式

处于磁盘睡眠的进程,不响应操作系统的请求,直到进程完成它的I/O操作。

要想看到磁盘睡眠,需要进行高I/O操作,不容易演示。可以使用dd命令来进行,由于dd命令的操作非常强大,但同时也非常底层,因此在使用时需要特别小心,避免造成意外的数据损坏或丢失。

暂停和跟踪暂停 – T和t

Linux操作系统的有个信号kill -19, 可以使进程暂停。T状态即进程处于暂停状态。注意不要于S状态混淆,S状态一定是进程在等待某种资源,但T状态不一定在等待某种资源。
那T和t有什么区别呢?

Stopped(停止)状态:
进程处于停止状态通常是由于接收到了一个信号,例如SIGSTOP(Ctrl-Z产生的SIGTSTP信号)或者SIGTSTP(通常由shell的暂停命令引发)。这种状态下的进程被挂起,暂时停止执行,但可以通过发送SIGCONT信号来恢复执行。

Tracing Stop(跟踪停止)状态:
进程处于跟踪停止状态通常是由于调试器(如GDB)或者ptrace系统调用的作用。在这种状态下,进程被调试器所追踪,通常是因为调试器在进行单步执行、观察或者修改进程的内存等操作。这种状态下的进程暂时停止执行,直到调试器允许其继续执行。

一般认为T和t没什么区别。
在这里插入图片描述

僵尸进程 – Z

当一个进程(子进程)完成执行后,它的退出状态需要被父进程获取。如果父进程没有主动获取子进程的退出状态,那么子进程就会变成僵尸进程,相当于一个人处于生死之间。
在这里插入图片描述
下方代码实现:父进程一直运行,子进程执行3次后结束
在这里插入图片描述
结果如下:子进程的状态由S+ --> Z+, Z即处于僵尸状态
在这里插入图片描述
僵尸进程虽然不会直接对系统造成严重影响,但长时间存在的僵尸进程会对系统的正常运行产生一些间接的危害,包括:可能导致资源耗尽,影响进程管理,降低系统稳定性。因此需要父进程处理僵尸进程。
父进程通常需要调用类似于wait()或waitpid()的系统调用来等待子进程的退出,并获取其退出状态。

当然如果父进程也结束,系统会自动把子进程释放。

孤儿进程

僵尸进程是子进程结束,但父进程未结束。如何父进程先结束,子进程后结束呢?那么子进程便会变为孤儿进程,并被托孤给1号进程,即操作系统。
在这里插入图片描述

三、进程优先级

在这里插入图片描述
PRI(Priority):PRI 表示进程的静态优先级或调度优先级。俗点说就是程序被CPU执行的先后顺序,此值越小,进程的优先级别越高。
NI(Nice Value):NI 表示进程的 Nice 值,是一个表示进程调度优先级的数值。它的作用是改变PRI的值。

通过PRI和NI可以调整进程的优先级,计算公式如下:

PRI(new)=PRI(old)+nice ’

这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行所以,调整进程优先级,在Linux下,就是调整进程nice值

注意:nice 的范围在 【-20, 19】
PRI(old) 最小是80,如果原来的PRI < 80, 则会直接从80开始算:
因此:PRI 范围【60, 99】,但在计算新的PRI时,最小从80开始
举例:原来 : PRI = 60 NI = 0;
更改:令PRI = 100
结果:PRI = 99 NI = 19

那如何更改nice值呢?

在Linux系统中,nice命令用于启动一个新的进程,并设置其优先级。而renice命令用于修改已经运行的进程的优先级。

nice命令的使用:

nice [OPTION] [COMMAND [ARG]...]

nice命令通过改变进程的优先级来影响其调度。数值越大,优先级越低。默认情况下,优先级是0。

例如,运行一个命令并设置其优先级:

nice -n <优先级> <命令>

例如,将ls命令的优先级降低为10:

nice -n 10 ls

renice命令的使用:

renice [优先级] -p <进程ID> [<进程ID>...]

renice命令用于修改已经运行的进程的优先级。可以指定一个或多个进程ID来修改它们的优先级。

例如,将进程ID为1234的进程的优先级设置为10:

renice 10 -p 1234

如果你想要提高某个进程的优先级,你需要具有足够的权限。通常,只有超级用户(root)才能提高进程的优先级,而普通用户只能降低自己创建的进程的优先级。

1.进程2.僵尸进程3.孤儿进程4.进程的优先级 冯·诺依曼体系结构 特点:在该体系结构中,外设不能直接与cpu连接,而是要先通过与存储器,存储器再与cpu通信。下面我们模拟一下两个人通过软件发送消息的过程: 操作系统(OS) 例如,在学校中,校长就是我们的管理者,比如校长在分发我们学生的奖学金时,首先通过学生的成绩来评选优秀的学生,而执行这件事的是辅导员,校长就可以通过辅导员来管理学生的奖学金。 例比到操作系统,操作系统在管... 阅读详情

相关推荐

LM358实战:手把手教你搭建电流检测电路(附电阻选型计算)

本文详细解析了使用LM358运算放大器搭建电流检测电路的全过程,包括基础原理、采样电阻选型、放大电路设计及PCB布局技巧。通过实战案例和精确计算,帮助工程师快速掌握低成本、高精度的电流检测方案,适用于电源管理、电机控制等多种应用场景。

weixin_30872157的博客 448

Linux-进程的状态详解

以上我们就详细的介绍了进程的所有的状态,而进程的状态信息都是储存在进程的PCB中,操作系统通过从PCB查看进程的状态来分配进程。

fengjunziya的博客 1898

Avalonia v11实战:手把手教你从零创建第一个跨平台桌面App(含设计器不显示的解决方案)

本文详细介绍了如何使用Avalonia v11从零开始创建跨平台桌面应用,包括环境准备、项目创建、界面设计及常见问题解决方案。特别针对设计器不显示等常见问题提供了实用解决方法,帮助.NET开发者快速掌握这一强大的UI框架,实现Windows、macOS和Linux多平台应用开发。

weixin_30417487的博客 164

操作系统——进程

操作系统 首先我先谈一下我关于操作系统的理解,操作系统本身就是一个比较大的进程,他对下负责管理计算机的软硬件以及为软件提供良好的运行环境,对上和用户进行交互。 用户通过shell命令操作系统调用接口,系统调用接口又连接着操作接口,操作接口下则是驱动软件,驱动软件负责调用系统的各种硬件。 所谓的操作系统,就是用户和内核之间的一层壳,因为用户直接使用内核可能会发生各种不可预料的事情,这才有了操作...

有没有兴趣和我一起去拯救地球啊 679

vivado中出现ERROR: [Labtools 27-2220]检测不出开发板

这个错误可能是由于 Vivado 工具中的 cs_server.exe 文件没有正确安装或者文件路径不正确导致的。你可以尝试以下步骤来。时间: 2023-08-16 12:05:50 浏览: 767。希望以上方法能够帮助你。

qq_40510975的博客 2388

基于XDMA 的PCIE读写DDR

基于XDMA 的PCIE读写DDR 概述:   想实现基于FPGA的PCIe通信,查阅互联网各种转载…基本都是对PCIe的描述,所以想写一下基于XDMA的PCIe通信的实现(PCIe结构仅做简单的描述(笔记),了解详细结构移至互联网)。 实现功能:PC通过PCIE读写DDR,同时用户通过逻辑代码可以读取被写入DDR内的数据(我是通过VIO实现DDR任意地址,任意数据大小的读取。)。 实践实践!!! 说明: 参考文档: PCI Express Base Specification Revision 3.0 P

Crazzy_M的博客 1万+

Linux进程管理---进程的状态(R,S,D,T,t,X,Z)

在了解了什么是进程,以及进程的创建之后,我们需要知道进程其实有不同的状态,一个进程可以有几种状态。

分享学习的知识,记录我的技术成长道路 5802

go实现MQTT broker(附完整源码)

go实现MQTT broker(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 575

Linux进程六种状态(R、S、D、T、Z、X)

Linux进程六种状态

WSYFQ的博客 5146

Transformer 跨界物理建模:探索模拟动态物理系统方法与实践(PINN、流体力学、有限元)

是一个由 Nicholas Zabaras 团队开发的开源项目,托管于 GitHub,旨在将 Transformer 模型(最初在自然语言处理领域大获成功)应用于物理系统的建模与预测。该项目基于论文 ​*“Transformers for Modeling Physical Systems”*​(Neural Networks, 2022),探索了深度学习中的 Transformer 架构如何通过自注意力机制和 Koopman 嵌入来模拟动态物理系统。

源代码杀手的博客 1191

SDA 还是 SDI:SAP HANA 数据虚拟化与数据集成的取舍、组合与实战

结论先放在前面:SDA 面向数据虚拟化与联邦查询,强调不落地、不复制、按需实时访问;SDI 面向数据集成与复制,强调抽取、转换、装载与近实时增量同步。两者共享 Remote Source 与 Adapter 的理念,但侧重点与运行时组件明显不同。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 585

进程-进程之进程状态(R、S、D、T、Z、X)

进程概念: 1)正在执行的程序 2)正在计算机上执行的程序实例 3)能分配处理器并由处理器执行的实体 进程的两个基本元素是程序代码和代码相关联的数据集。进程是一种动态描述,但并不代表所有的进程都在运行。这就可以引入‘进程状态’。 进程在内存中因策会略或调度需求, 会处于各种状态:Linux下的进程状态:static const char * const task_state_ar

草根学僧 1万+

基于matlab的阈值分割的车牌定位识别系统

车牌自动识别模块是现代社会智能交通系统(ITS)的重要组成部分,是图像处理和模式识别技术研究的热点,具有非常广泛的应用。车牌识别主要包括以下三个主要步骤:车牌区域定位、车牌字符分割、车牌字符识别。本案例通过对采集的车牌图像进行灰度变换、边缘检测、腐蚀及平滑等过程进行车牌图像预处理,并由此得到一种基于车牌颜色纹理特征的车牌定位方法,最终实现了车牌区域定位。车牌字符分割是为了方便后续对车牌字符进行匹配,从而对车牌进行识别。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 969

【Linux篇】进程状态(僵尸进程,孤儿进程),优先级与调度机制

解析了Linux中进程的多种状态,及优先级机制与调度方法

2301_81290732的博客 2487

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

进程状态的优先级/切换与调度

本文探讨了Linux进程的核心概念,包括进程状态、调度机制和优先级管理。首先对比了经典OS理论与Linux实际实现,指出进程状态在Linux中的具体表现形式(如运行、睡眠、僵尸等)。通过实验演示了僵尸进程和孤儿进程的形成机制,揭示了进程退出的内存管理问题。其次,详细解析了进程优先级的概念与调整方法,并通过时间片轮转机制说明并发执行的本质。最后深入剖析Linux内核的O(1)调度算法,展示其通过多级队列实现高效调度的原理。文章结合代码实例和状态监控,系统性地呈现了Linux进程管理的核心机制与实现细节。

lalalalalala的博客 1046

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Linux《进程概念(中)》

当中我们已经了解了进程的基本概念以及如何去创建对应的子进程,那么接下来在本篇当中我们就继续来进程的学习,在本篇当中我们要学习到进程的状态、进程的优先级、进程切换、Linux真实的调度算法——O(1)调度算法。

mljy.博客 2142

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【Linux】进程状态、进程优先级、进程切换和调度

本文详细介绍了计算机系统中的进程管理相关内容。首先讲解了冯诺依曼体系结构,指出CPU只能访问内存这一关键特性。接着阐述了操作系统的核心作用,即管理硬件资源和为程序提供执行环境。重点介绍了进程的概念,包括PCB(进程控制块)、task_struct数据结构以及如何组织进程。通过实例演示了查看进程信息、获取进程标识符pid/ppid的方法,并详细讲解了fork系统调用的使用,包括创建子进程和父子进程分流处理。文章通过代码示例和命令行操作展示了进程管理的核心概念与实践方法,为理解操作系统进程管理机制提供了实用指导

2301_79601095的博客 1060

【Linux】深入理解“进程”:进程状态 -> Linux内核O(1)调度算法

在Linux系统中 “进程” 无处不在,那什么是进程呢?本篇文章将带你深入地理解进程。看看和你以前对进程的理解有什么出入。

Miun123的博客 1671

Linux操作系统之进程状态、优先级和切换与调度

一个CPU拥有一个runqueue(就绪队列),runqueue内部含有一个存放两个元素的优先级数组(prio_array_t),这两个元素是一个结构体类型,分别表示活动队列与过期队列,这两个队列的结构是一致的。active指针永远指向活动队列expired指针永远指向过期队列nr_active表示当前活动队列中的进程数,在活动队列中,这些进程就是活跃的,是时间片还没有用完,将要准备执行的。过期队列中就是过期的,是当前一个调度内时间片用完了,但本身任务还没有完全执行完的。

2401_84420653的博客 1552

Linux下进程的状态和优先级

Linux内核源代码• R运行状态(running):并不意味着进程⼀定在运⾏中,它表明进程要么是在运⾏中要么在运⾏队列里• S睡眠状态(sleeping):意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠• D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束• T停止状态(stopped):可以通过发送SIGSTOP信号给进程来停止(T)进程。这个被暂停的。

2501_91740090的博客 1099

Linux_进程概念(A)-进程部分【Ubuntu】

进程概念,基本进程内容在系统当中查找一个最合适调度的进程的时间复杂度是一个常数,不随着进程增多而导致时间成本增加,我们称之为进程调度O(1)算法!

小志的博客 1万+

Linux 修炼:进程概念(中)

本文系统介绍了操作系统中的进程状态管理机制。首先概述了进程的常见状态(新建、就绪、运行、阻塞、终止、挂起)及其转换关系,特别说明了Linux系统中特有的状态表示(R运行、S睡眠、D磁盘睡眠、T停止等)。文章深入解析了僵尸进程、孤儿进程的形成原理,以及进程优先级调整机制(PRI和nice值的关系)。最后详细阐述了进程切换的上下文保存恢复过程,并介绍了Linux采用的O(1)调度算法,通过双队列结构和位图实现高效调度。全文结合代码示例和系统命令演示,全面呈现了进程管理的核心原理。

但凡的博客 1139

进程概念、进程创建、进程状态、进程优先级、进程切换、Linux2.6内核进程调度算法

本文系统介绍了Linux进程管理的核心概念和原理。主要内容包括:1)进程概念,强调进程=程序+PCB,以及OS通过链表管理PCB;2)进程创建,详细解析fork系统调用及其写时拷贝机制;3)进程状态,涵盖运行、阻塞、挂起等状态及其转换原理;4)特殊进程,包括僵尸进程和孤儿进程的形成与处理;5)进程优先级,说明优先级调整机制和范围限制;6)进程切换,解释硬件上下文保护与恢复机制;7)Linux 2.6调度算法,剖析O(1)调度器的队列设计和位图优化。全文揭示了进程管理的实现细节,展现了OS资源调度的精妙设计

C/C++技术栈 1102

【Linux】进程管理(1):进程及概念精讲

进程概念引入 二、进程的描述与组织:进程控制块(PCB)与进程标识符(PID) 三、fork函数:创建子进程 四、进程的地址空间:虚拟内存与写时复制 五、进程查看 六、进程状态 七、父子进程、孤儿进程、僵尸进程 孤儿进程: 僵尸进程 八、进程的优先级 九、环境变量 【选学】 十、Linux操作系统进程的调度 1、活动队列详解 2、过期队列详解 3、O(1)调度算法

2301_76606232的博客 1682

★ Linux ★ 进程(上)

★ Linux ★ 进程(上)

2302_80328146的博客 1423

linux:进程详解(1)

当多任务内核需要切换运行任务时,会先保存当前任务的运行状态(即CPU寄存器中的所有内容),将其存入该任务的堆栈中。• 进程信息存储在进程控制块(Process Control Block,简称PCB)这一数据结构中,它本质上是一个包含进程所有属性的集合。• 进程退出状态必须被保留,因为它需要向关注它的进程(父进程)汇报任务执行情况。• 并发:在单个CPU环境下,通过快速切换进程的方式,在特定时间段内让多个进程交替执行,实现并发效果。• 要理解正在运行的进程的概念,需要了解进程的不同状态。

2302_79860961的博客 1217
上一篇: 【linux系统】进程间通信1--管道
下一篇: 【linux系统】环境变量
ProcedureStone
博客等级 码龄4年 254粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值