【进程篇】04.进程的状态与优先级
一、进程的状态
1.1 进程的状态

1.1.1 并行与并发
• 并行: 多个进程在多个CPU下分别,同时进行运行
• 并发: 多个进程在一个CPU下采用进程切换的方式,在一个时间片内,让多个进程都得以推进
1.1.2 时间片的概念
LInux/windows这些民用级别的操作系统都是分时操作系统,根据时间片进行调度轮转的,与之相对的是实时操作系统
1.1.3 进程具有独立性
上一篇博客中已经讲过。
1.1.4 认识运行、阻塞与挂起
• 在CPU中有一个runqueue,操作系统会根据FIFO获取进程并将进程基于时间片进行调度轮转,因而只要进程在runqueue中就已经是运行态。
• 操作系统会对设备进行管理,因此有了struct device 对设备进行先描述后组织。当进程执行到某一位置时,可能会调用外部设备(如键盘),这时就会将进程链入waitqueue中,这一状态称为阻塞态。
• 当内存内存资源严重不足时,操作系统会将等待队列的进程中的数据换出到磁盘中,而当用户完成指定操作后又会将数据换入到内存中,磁盘中支持此操作有专门的分区(swap分区)。这也就是阻塞挂起状态。
• 对于阻塞挂起状态本质就是以时间换空间的做法,现在大部分的公司都会禁掉该操作。
1.2 Linux的进程状态

下面这段代码是Linux0.11版本中的状态源码:
/*
* 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 */
};
• R :运行状态
• S :浅度休眠状态,可以被kill
• D:磁盘休眠状态,不可被kill
D状态存在的意义在于,当内存资源严重不足时,操作系统可能会将正在向磁盘传输数据的进程杀掉以维持自身安全,但是数据是不可恢复的,一旦进程被终止,我们并不知道传输数据这个操作是否成功,因此引入了D状态,使得操作系统不能杀死处于D状态的程序。
• T:暂停状态,通常是进程做了非法但不致命的操作,只能用kill -9终止
• t :追踪暂停状态,常见调试时打断点
• X:死亡状态
• Z:僵尸状态,用于维护自己的task_struct,方便为了父进程读取进程退出信息
理解X状态和Z状态
• 进程创建的目的自然是为了完成用户的任务。那么进程就需要知道这个任务完成的情况,这样就需要将执行的进程的执行结果返回给父进程/操作系统。我们可以使用$?来查看最近的一个进程的退出信息。
•进程=内核数据结构(struct task_struct)+代码和数据。进程在退出时,首先立即释放的就是该进程的代码和数据。但是进程的退出信息需要返回给父进程/操作系统,而退出信息保存在task_struct中。因此进程的退出信息必须要被操作系统维护起来,方便用户的获取。*这时的进程状态就是Z状态。 *当进程的退出信息被父进程/操作系统获取之后,进程就销毁了,这时的进程就是X状态。
知道了当子进程退出,父进程没有退出时,子进程就是僵尸进程;那么当父进程退出,子进程没有退出时是什么情况呢?
这就是孤儿进程,子进程会被系统领养,当它退出时,系统会对这个子进程进行处理回收。
二、进程的优先级
2.1 概念
优先级本质上就是对某种资源获取的先后顺序,这种资源往往是稀缺的。在进程层次来看,优先级竞争的是CPU资源。
2.2 Linux进程优先级
我们可以使用ps -l 查到优先级信息:
[caryon@VM-24-10-centos ~]$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 6876 6875 0 80 0 - 29247 do_wai pts/0 00:00:00 bash
0 R 1001 6975 6876 0 80 0 - 38332 - pts/0 00:00:00 ps
在task_struct中有优先级属性,它是通过几个int类型的变量来表示优先级的。优先级的数字越小,对应进程的优先级越高。
上图中的PRI和NI两个属性影响进程的优先级,其中PRI是默认优先级(80),NI是优先级的修正数据([-20,20))。
优先级如何进行调整呢?
使用top指令,输入r,然后根据提示进行调整。
但是一般情况下我们不对优先级进行调整,即使调整也要保证nice值有一定的范围,这是因为我们的操作系统是分时操作系统,对进程的调度要尽量公平。
UID
上图中我们还看到了UID这一属性,UID全称User Identify,是用以标记进程是谁启动的。在文件显示时,我们可以使用ll -n来以数字显示文件的相关属性,这个数字也是UID。[caryon@VM-24-10-centos linux]$ ll -n total 2452 drwxrwxr-x 2 1001 1001 4096 Sep 16 11:39 test前面我们知道文件有自己的权限,即拥有者、所属组;我们还知道Linux下一切皆文件,所有的操作都是进程操作,因此进程会记录是谁启动的这个进程。通过UID与文件的拥有者、所属组进行对比实现了对权限的控制。
相关文章:
【进程篇】04.进程的状态与优先级
一、进程的状态 1.1 进程的状态 1.1.1 并行与并发 • 并行: 多个进程在多个CPU下分别,同时进行运行 • 并发: 多个进程在一个CPU下采用进程切换的方式,在一个时间片内,让多个进程都得以推进 1.1.2 时间片的概念 LInux/windows这些民用级别…...
ElasticSearch 数据聚合与运算
1、数据聚合 聚合(aggregations)可以让我们极其方便的实现数据的统计、分析和运算。实现这些统计功能的比数据库的 SQL 要方便的多,而且查询速度非常快,可以实现近实时搜索效果。 注意: 参加聚合的字段必须是 keywor…...
科研学习|论文解读——智能体最新研究进展
从2024-12-13到2024-12-18的45篇文章中精选出5篇优秀的工作分享 Can Modern LLMs Act as Agent Cores in Radiology~Environments? Achieving Collective Welfare in Multi-Agent Reinforcement Learning via Suggestion Sharing A systematic review of norm emergence in …...
面试小札:Java后端闪电五连鞭_8
1. Kafka消息模型及其组成部分 - 消息(Message):是Kafka中最基本的数据单元。消息包含一个键(key)、一个值(value)和一个时间戳(timestamp)。键可以用于对消息进行分区等…...
java error(2)保存时间带时分秒,回显时分秒变成00:00:00
超简单,顺带记录一下 1.入参实体类上使用注释:JsonFormat(pattern “yyyy-MM-dd”) 导致舍弃了 时分秒的部分。 2.数据库字段对应的类型是 date。date就是日期,日期就不带时分秒。 3.返参实体类使用了JsonFormat(pattern “yyyy-MM-dd”) 导…...
计算机毕业设计python+spark+hive动漫推荐系统 漫画推荐系统 漫画分析可视化大屏 漫画爬虫 漫画推荐系统 漫画爬虫 知识图谱 大数据毕设
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
数字IC后端设计实现篇之TSMC 12nm TCD cell(Dummy TCD Cell)应该怎么加?
TSMC 12nm A72项目我们需要按照foundary的要求提前在floorplan阶段加好TCD Cell。这个cell是用来做工艺校准的。这个dummy TCD Cell也可以等后续Calibre 插dummy自动插。但咱们项目要求提前在floorplan阶段就先预先规划好位置。 TSCM12nm 1P9M的metal stack结构图如下图所示。…...
(8)YOLOv6算法基本原理
一、YOLOv6 模型原理 发布日期:2022年6月 作者:美团技术团队 骨干网络:参考了 RepVGG 的设计,将重参数化能力进行补强,增强了模型结构的重参数化能力。使用了深度可分离卷积和跨阶段连接等技术,旨在提升…...
LNMP+discuz论坛
0.准备 文章目录 0.准备1.nginx2.mysql2.1 mysql82.2 mysql5.7 3.php4.测试php访问mysql5.部署 Discuz6.其他 yum源: # 没有wget,用这个 # curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo[rootlocalhost ~]#…...
在linux系统的docker中安装GitLab
一、安装GitLab: 在安装了docker之后就是下载安装GitLab了,在linux系统中输入命令:docker search gitlab就可以看到很多项目,一般安装第一个,它是英文版的,如果英文不好可以安装twang2218/gitlab-ce-zh。 …...
Python面试常见问题及答案12
问题: 请解释Python中的GIL(全局解释器锁)是什么? ○ 答案: GIL是Python解释器中的一种机制,用于确保任何时候只有一个线程在执行Python字节码。这在多线程场景下可能影响性能优化,但对于单线程…...
从0-1开发一个Vue3前端系统页面-9.博客页面布局
本节主要实现了博客首页界面的基本布局并完善了响应式布局,因为完善了响应式布局故对前面的页面布局有所改动,这里会将改动后的源码同步上传。 1.对页面头部的用户信息进行设计和美化 布局设计参考 :通常初级前端的布局会通过多个div划分区域…...
[手机Linux] 六,ubuntu18.04私有网盘(NextCloud)安装
一,LNMP介绍 LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin/Alibaba/Amazon/Mint/Oracle/Rocky/Alma/Kali/UOS/银河麒麟/openEuler/Anolis OS Linux VPS或独立主机安装LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQ…...
白话java设计模式
创建模式 单例模式(Singleton Pattern): 就是一次创建多次使用,它的对象不会重复创建,可以全局来共享状态。 工厂模式(Factory Method Pattern): 可以通过接口来进行实例化创建&a…...
助力 Tuanjie OpenHarmony 开发:如何使用工具包 Hilog 和 SDK Kits Package?
随着团结引擎从 1.0.0 迭代至 1.3.0,越来越多的开发者开始使用团结引擎开发 OpenHarmony 应用。 在开发的过程中,我们也收到了大量反馈,尤其是在日志、堆栈和性能数据方面,这些信息对开发和调试过程至关重要。同时,我…...
NSDT 3DConvert:高效实现大模型文件在线预览与转换
NSDT 3DConvert 作为一个 WebGL 展示平台,能够实现多种模型格式免费在线预览,并支持大于1GB的OBJ、STL、GLTF、点云等模型进行在线查看与交互,这在3D模型展示领域是一个相当强大的功能。 平台特点 多格式支持 NSDT 3DConvert兼容多种3D模型…...
电商数据采集电商,行业数据分析,平台数据获取|稳定的API接口数据
电商数据采集可以通过多种方式完成,其中包括人工采集、使用电商平台提供的API接口、以及利用爬虫技术等自动化工具。以下是一些常用的电商数据采集方法: 人工采集:人工采集主要是通过基本的“复制粘贴”的方式在电商平台上进行数据的收集&am…...
VUE+Node.js+mysq实现响应式个人博客|项目初始化+路由配置+基础组件搭建
Day 1 开发文档:项目初始化与基础架构搭建 一、项目初始化 1. 创建项目 首先,我们使用 Vite 创建一个基于 Vue 3 的项目: # 创建项目 npm create vitelatest my-blog -- --template vue # 这条命令会创建一个名为 my-blog 的新项目&#…...
Python如何正确解决reCaptcha验证码(9)
前言 本文是该专栏的第73篇,后面会持续分享python爬虫干货知识,记得关注。 我们在处理某些国内外平台项目的时候,相信很多同学或多或少都见过,如下图所示的reCaptcha验证码。 而本文,笔者将重点来介绍在实战项目中,遇到上述中的“reCaptcha验证码”,如何正确去处理并解…...
web3跨链预言机协议-BandProtocol
项目简介 Band Protocol 项目最初于 2017年成立并建立在 ETH 之上。后于2020年转移到了 Cosmos 网络上,基于 Cosmos SDK 搭建了一条 Band Chain 。这是一条 oracle-specific chain,主要功能是提供跨链预言机服务。Cosmos生态上第一个,也是目…...
基于Blazor与LLamaSharp构建本地大模型ChatGPT式Web应用
1. 项目概述与核心价值最近在折腾一个内部工具,想把本地大模型的能力和类似ChatGPT的对话体验结合起来,部署成一个Web应用。找了一圈,发现一个挺有意思的项目叫“BLlamaSharp.ChatGpt.Blazor”。光看这个名字,信息量就很大了&…...
陕西省ICPC省赛总结
个人反思 我个人感觉还是练的少,学的不够系统。具体反应到题上,表现在看到题没有思路,并且也不知道这道题用到什么算法思想,导致拿的书和本子几乎用不上。其次是思考不够深入,我的队友都能进行深入的思考,但…...
AI Agent在科学研究中的辅助作用
AI Agent在科学研究中的辅助作用 关键词:AI Agent, 科学研究辅助, 自主代理架构, 多模态推理, 文献挖掘, 实验设计, 未来展望 摘要:本文将像给小学生讲魔法实验室故事一样,深入浅出地拆解AI Agent这个“超级科研小助手天团”的核心原理、架构…...
AMD Ryzen调试神器SMUDebugTool:免费开源工具让你的处理器性能飞起来!
AMD Ryzen调试神器SMUDebugTool:免费开源工具让你的处理器性能飞起来! 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Tab…...
从零到一:在MissionPlanner中配置与可视化RC接收器RSSI
1. 什么是RSSI?为什么需要监控它? 如果你玩过无人机或者遥控模型,肯定遇到过信号突然中断的情况。那种眼睁睁看着爱机失控坠落的无力感,我深有体会。RSSI(Received Signal Strength Indicator)就是帮助我们…...
图像质量评估新视角:抛开PSNR和SSIM,聊聊如何用‘变异系数’量化局部细节清晰度
图像质量评估新视角:用变异系数量化局部细节清晰度的实战指南 在数字图像处理领域,评估图像质量一直是核心挑战。传统指标如PSNR(峰值信噪比)和SSIM(结构相似性)虽然广泛应用,但面对复杂场景时往…...
利用 Taotoken 统一 API 为内部低代码平台集成 AI 能力
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用 Taotoken 统一 API 为内部低代码平台集成 AI 能力 为内部低代码平台引入 AI 能力,正成为提升平台自动化和智能化水…...
Go语言设计模式:行为型模式
Go语言设计模式:行为型模式 一、行为型模式概述 行为型模式关注对象之间的通信和职责分配,描述对象如何协作以及如何分配职责。 Go语言中的行为型模式特点 接口驱动:通过接口定义行为契约并发安全:考虑并发场景下的协作组合实现&a…...
从‘尺子刻度’到‘信号保真’:用Python仿真带你直观理解ADC的INL、DNL和SNDR到底在说什么
从‘尺子刻度’到‘信号保真’:用Python仿真带你直观理解ADC的INL、DNL和SNDR到底在说什么 在数字信号处理的世界里,模数转换器(ADC)扮演着将连续模拟信号转换为离散数字信号的关键角色。但对于许多软件开发者或跨领域学习者来说,ADC的性能参…...
ElevenLabs语音克隆合规红线速查手册,2024最新GDPR+CCPA+中国《生成式AI服务管理暂行办法》三重适配指南
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs语音克隆合规性认知总览 语音克隆技术正以前所未有的精度重塑人机交互边界,但其法律与伦理风险亦同步升级。ElevenLabs 作为行业领先者,明确将《服务条款》第5.2条与《…...
