进程状态

Linux进程状态

Linux进程状态进程描述
R运行状态
S睡眠状态
D磁盘休眠状态
T停止状态
t被追踪状态(调试状态)
X死亡状态
Z僵死状态

其实大致也就可以分为三种运行阻塞挂起

运行状态

每个cpu里都有一个运行队列,进程在运行队列里,不管他是否正在被运行。这种进程就属于运行状态,也就是运行态,在Linux系统中就是R状态。cpu里有一个函数叫调度器,当一个进程要运行的时候,有调度器上传,cpu既可以运行该进程了。一个进程不是在cpu里一直运行,直到该进程运行完毕。而是运行一段时间,无论你是否运行完毕,都要退出。这个时间叫时间片。假设时间片是10毫秒,每个进程都只能运行10毫秒,然后后下来排队,其他进程运行。所以,在一段时间内,每个进程都可以运行。这种情况叫并发执行,一个cpu,一段时间内,多个进程都运行了。大量把进程从cpu上拿下来,放上去,就叫进程切换

阻塞状态

当一个进程为了等待某种资源时,而处于等待状态的进程就属于阻塞状态,一般是放到等待队列里。比如一个进程需要等待键盘设备,操作系统考虑到既然该进程需要依靠其他进程或者数据等才能运行,就不会把它放到运行队列中。而是会把它放到等待队列中,直到他需要的进程或者数据等准备好了,才会把该进程放到运行队列。此时该进程的状态就是,阻塞状态。

挂起状态

还是刚刚,那个情景,该进程需要等待键盘外设,可是突然内存资源严重不足。操作系统就会把该进程的代码和数据放到磁盘上,减轻内存压力,只保留PCB。此时该进程的状态就是挂起状态,更准确说是阻塞挂起状态,因为PCB还是保留在等待队列中。有些地方会把挂起状态进行很多分类。其实,都是挂起状态,记一个就好。当一个进程的PCB保留在内存中,代码和数据却在磁盘上,此时该进程就是挂起状态

接下来我们看看Linux进程状态的分类

R,运行状态,一般情况是查不到这个状态的。因为CPU的运行特别块,你几乎察觉不到,是瞬时的。

S和D分别时浅度睡眠和深度睡眠两种状态,浅度睡眠可以被唤醒,深度睡眠除了断电没有办法阻止。咱们先不管他是什么深浅睡眠,既然是睡眠状态,那就表明该进程目前不运行,当这个进程是为了等待某种资源而进入睡眠,那他就是阻塞状态。但是,如果他就是单纯的进入睡眠状态,不是为了等待某种资源,那他就是普通睡眠状态。

sleep(1)

使用sleep函数可以使进程进入浅度睡眠

那什么是深度睡眠呢?深度睡眠是指当进程在执行某项重要任务时,不可以突然的终止执行,为了防止资源泄露等问题,给该进程了一种权限,谁也不可以终止该进程,直到该进程运行完毕,即使该进程为了等待硬件的资源,而处于等待队列里,也不可以终止该进程。比如,io流输出的时候,向磁盘写入的时候。注意,操作系统也不可以终止该进程。

T和t两种状态分别是停止状态和被追踪停止状态,T状态可以通过SIGSTOP信号停止进程,通过SIGCONT信号继续运行。t状态,一般就是gdb调式的时候,可以任意打断点,停止进程。

X是死亡状态,就是进程被杀死时状态,是瞬时的,一般查不到。Z是僵尸状态,当一个进程结束运行时,会短暂处于这个状态,等待父进程回收。如果,该父进程一直不回收,那子进程就一直处于Z状态,该进程也叫僵尸进程,操作系统会一直维护这个进程,如果僵尸进程过多,就会导致内存资源浪费,内存泄漏,等等

孤儿进程

当一个子进程的父进程提前退出,而子进程却在运行的时候,此时,该进程就是孤儿进程。因为他没有父进程回收,这会导致内存泄漏。操作系统为了处理这个麻烦,就会让1号进程回收该进程,比如bash命令行。

进程的其他概念

竞争性:系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高 效完成任务,更合理竞争相关资源,便具有了优先级

独立性:多进程运行,需要独享各种资源,多进程运行期间互不干扰

并发:多个进程在1个cpu采取进程切换,在一段时间内,让多个进程得以推进

进程切换,使用到两个队列,当时间片完,一个进程无论是否执行完,都要切换另一个队列。

并行:多个进程在多个cpu同时进行

cpu里的寄存器

两个问题:

函数返回值如何获取?通过寄存器存储,获取。

系统如何得知进程执行情况?程序计数器pc,eip记录进程执行指令的下一行指令地址。本质是寄存器

常见寄存器有:eax,ecx,ebx,edx

关于栈的寄存器有:ebp,esp

指令寄存器:eip

cpu里的寄存器,记录正在运行的进程数据。我们把这种数据叫做上下文。简单说就是,上下文就是寄存器记录的进程相关数据。

当进程退出的时候,需要把他的上下文数据保存并带走。保存的目的是为了恢复,因为进程再次运行的时候,需要从上次运行的地方继续运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/922065.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/922065.shtml
英文地址,请注明出处:http://en.pswp.cn/news/922065.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网领域中PHP框架的最佳选择有哪些?

物联网(IoT)作为近年来快速发展的技术领域,已经渗透到智能家居、工业自动化、智慧城市等方方面面。作为Web开发中广泛使用的语言,PHP凭借其易学易用、开发效率高和生态丰富的特点,也在物联网领域找到了用武之地。 本文…

java反射(详细教程)

我们平常创建类的实例并调用类中成员需要建立在一个前提下,就是已经知道类名和类中成员的信息,灵活性大大降低。甚至在一些项目中还需要修改源码来满足使用条件,大大降低了操作的灵活性。Java 反射(Reflection)是 Java…

消息队列-初识kafka

优缺点 消息队列的优点: 实现系统解耦: :::color5 系统解耦解释 有 MQ 时是 “服务 A 发消息到队列,其他服务从队列拿消息,新增服务接队列就行”;无 MQ 时是 “服务 A 直接调其他服务的接口 / 依赖,新增 / …

实践《数字图像处理》之Canny边缘检测、霍夫变换与主动二值化处理在短线段清除应用中的实践

在最近的图像处理项目中,其中一个环节:图片中大量短线(不是噪声),需要在下一步处理前进行清除。在确定具体实现时,碰到了Canny边缘检测、霍夫变换与主动二值化处理的辩证使用,相关逻辑从图片灰度…

vue3与ue5通信-工具类

工具 ue5-simple.js /*** UE5 通信工具* 两个核心方法:发送消息和接收消息*/// 确保全局对象存在 if (typeof window ! undefined) {window.ue window.ue || {};window.ue.interface window.ue.interface || {}; }/*** 生成 UUID*/ function generateUUID() {retu…

在kotlin中如何使用像java中的static

在 Kotlin 中,没有直接的 static 关键字,但有几种等效的方式来实现 Java 中静态成员的功能: 1. 伴生对象 (Companion Object) - 最常用 class MyClass {companion object {// 静态常量const val STATIC_CONSTANT "constant value"…

如何在 Spring Boot 中指定不同的配置文件?

介绍 Spring Boot 提供了多种方式来管理和加载配置文件,特别是在多环境配置下,比如开发、测试和生产环境。通过指定不同的配置文件,可以灵活地调整应用程序的行为,以适应不同的需求。本文将介绍在 Spring Boot 中如何指定使用不同…

在centOS源码编译方式安装MySQL5.7

一、前言 在生产环境中部署数据库时,很多人会选择直接使用 yum/apt 包管理器 安装 MySQL,这样简单快速,但缺点是版本受限,灵活性不足。对于需要指定版本、启用特定编译参数或优化的场景,源码编译安装 MySQL 就显得非常…

探讨Hyperband 等主要机器学习调优方法的机制和权衡

本篇文章Master Hyperband — An Efficient Hyperparameter Tuning Method in Machine Learning深入探讨了Hyperband这一高效的超参数调优方法。文章的技术亮点在于其结合了多臂老虎机策略和逐次减半算法,能够在大搜索空间中快速剔除表现不佳的配置,从而…

Mysql:InnoDB 关键特性

目录 一、插入缓冲(Change Buffer)→ 快递驿站的 “临时存放区” 二、两次写(Double Write)→ 重要文件的 “备份存档” 三、自适应哈希索引(AHI)→ 图书馆的 “热门书快捷查找区” 四、异步 IO&#x…

STM32-----SPI

SPI简介SCK:和I2C中SCL的时钟线一个作用,都是在高电平拿出数据,在低电平写数据MOSI:主机输出从机输入MISO:主机输入从机输出,只有当对应从机的SS为低电平,从机的MISO引脚才能设置推挽输出,当从机SS为高电平时&#xff…

华为考试:HCIE数通考试难度分析

随着信息技术的飞速发展,网络技术已成为支撑各行各业运转的重要基础,市场对高水平网络技术人才的需求持续增长。HCIE作为华为认证体系中的最高级别认证,代表了网络技术领域的专业顶尖水平。本文将对HCIE数通认证的考试内容、难度及备考策略进…

一些常用的激活函数及绘图

深度网络的一些常用激活函数,并通过matplot绘制出来: import matplotlib.pyplot as plt import numpy as npdef relu(x):return np.maximum(0, x)def leaky_relu(x, alpha0.01):return np.where(x > 0, x, alpha * x)def gelu(x):return 0.5 * x * (1…

AE苹果手机iPhone 17展示动画片头模板 App Promo Phone 17 Pro

专为 App 发布会、电商促销、新品宣传 打造的 iPhone 17 Pro 动画展示 AE 模板。 4K 超清分辨率 26 张可替换照片位,无需第三方插件,拖拽即可输出专业级手机宣传片。 核心亮点 4K 超清:38402160 分辨率,大屏投放与社媒高清压缩无…

基于Python的云原生TodoList Demo 项目,验证云原生核心特性

以下是一个基于 Python 的云原生 TodoList Demo 项目,涵盖 容器化、Kubernetes 编排、CI/CD、可观测性、弹性扩缩容 等核心云原生特性,代码简洁且附详细操作指南,适合入门学习。项目概览 目标:实现一个支持增删改查(CR…

go 日志的分装和使用 Zap + lumberjack

自带的log无法满足 按大小轮转 ,按天数清理旧日志 ,自动压缩 ,限制备份数量 ,防止磁盘写满 ,生产环境推荐 等 使用 Zap lumberjack package mainimport ("go.uber.org/zap""go.uber.org/zap/zapcore&q…

【.Net技术栈梳理】01-核心框架与运行时(CLR)

文章目录1 .NET Runtime(CLR-公共语言运行时)1.1 中间语言 IL1.1.1 从源代码到通用中间语言(IL)1.1.2 运行时加载:CLR登场1.1.3 核心步骤:即时编译 (JIT Compilation)1.1.4 执行与内存管理(GC&a…

Claude Code 平替:OpenAI发布 Codex CLI ,GPT-5 国内直接使用

openai推出的命令行编程工具codex已经可以使用最新 GPT-5 模型,拥有可媲美 Claude Code 的 AI 编码能力。本文将指导你在 Windows 系统上部署原生的 Codex CLI 程序,并接入超低价中转 API,让你在国内直接用上超高性价比的 OpenAI Codex CLI 应…

在VS2022的WPF仿真,为什么在XAML实时预览点击 ce.xaml页面控件,却不会自动跳转到具体代码,这样不方便我修改代码,

在VS2022的WPF仿真,为什么在XAML实时预览点击 WpfApp1\FunctionalModule\08Replace\Replace.xaml页面控件,却不会自动跳转到具体代码,这样不方便我修改代码,

Git Bash 别名

有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名。Linux 系统中很多 shell,包括 bash,sh,zsh,dash 和 korn 等,不管哪种 shell 都会有一个 .bashrc 的隐藏文件,它就…