当前位置: 首页 > news >正文

Linux系列-进程的状态

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”  

操作系统就是计算机领域的哲学,是为了保证在所有情况下都适用,加载到内存叫做新建状态。

并行和并发

计算机同时进行多个任务,在用户感知的时候,每个任务都在跑,但实际上我的电脑是单CPU。跑一个程序,然后放下去,再跑下一个,构成循环,一次类推。

一个CPU执行进程代码,不是把进程代码执行完毕,才开始执行下一个代码。而是给每一个进程。

而是给每一个进程预分配一个短暂的时间片。

基于时间片,进行调度轮转,这个叫做并发。

为什么当进程进入死循环,但是电脑不会卡死,因为CPU会当进程时间到了之后执行下一个进程。

CPU切换和运行的速度非常快,用户感知不到。

CPU的效率非常快,有一个进程,其实相当于每一个进程用的都是25分的CPU。

并行:多个进程在多个CPU下面同时运行。

时间片:

Linux/Windows操作系统,民用级别的,大部分都是分时操作系统。

这个分时操作系统就是给每一个任务分配一个时间片,每一个进程运行耗尽时间片,从CPU下来,然后下一个上去。

与分时操作系统相对应的是实时操作系统,其中,分时操作系统追求调度任务的尽量公平。

而实时操作系统追求高优先级的任务尽快完成。

等待的本质

内存中存在操作系统,灭一个操作系统都得向CPU提供一个运行队列的东西(requeue)。

struct runqueue,两个CPU,有两个runqueue的结构。

队列里面有:

Int nums;//几个进程
.......其他属性
task_struct *head;

执行的时候,head指向的第一个task_struct从链表上剥离下来,放到CPU中执行,然后head指向下一个task_struct,时间片到了之后,然后这个task_struct就放到链表的最后面。

先进先出的时间片轮转。

进程的运行状态:

只要该进程在运行队列中,该进程就叫做运行状态,这个运行状态指的是已经准备好了,可以被CPU随时调度。

其实在进程的执行过程当中,少不了外设的访问,比如如果代码中有scanf,当执行到这个的时候需要访问键盘,但如果这个时候键盘的数据没有准备好,这个被CPU运行的进程,就会被设置为阻塞状态。

scanf内部封装了系统调用(让操作系统去查看键盘有没有数据),如果没有,操作系统会把这个进程直接放到设备的运行队列当中,不放到调度队列里,把当前的进程的PCB连入设备的wait_queue中,不要等待CPU的资源,等待设备的数据,这个时候就处于阻塞状态。

CPU有自己的运行队列

我们可以用先描述在组织来反映进程的管理,也可以反映出对底层硬件的管理。操作系统要管理底层的硬件吗,当然是要管理的,那怎么管理呢?,先描述,在组织。

操作系统会创建一个device的结构体,最终形成一个队列来对其进行管理。

struct device
{int type;int status;//管理时间//其他属性struct device *next;task_struct *wait_queue;//等待队列
}

然后我们将不同硬件之间采用链表进行连接。

构成

struct device*devices;

只有操作系统知道键盘有数据,

当硬件上有数据了,硬件会通过一定的方式告诉操作系统,操作系统是硬件的管理者。

当操作系统发现键盘上有数据,只需要把设备上等待的第一个进程重新放入调度队列当中。

所谓的运行状态,阻塞状态,本质就是让PCB处在不同的队列当中。

而CPU基于时间片进行轮转,所以会重新调度起来。

在操作系统上调度这个进程可以通过队列的尾插算法,队列的头部删除等队列的增删查改。

进程会卡住,是因为CPU不调度它了(等待外设/进程太多)

如果启动的应用特别多,手机会特别卡,CPU调度一个进程的周期变长了。

等待的本质是:连入目标外部设备,CPU不调度。

状态

常见的状态是在结构体中表达出来的,如:

#define RUNNING 1
#define BLOCK 2struct task_struct{int status;}

挂起

挂起的情况发生的背景主要就是当内存资源严重不足时。

当阻塞的时候,代码和数据仍在CPU,但是不会调度(因为要等待外设的响应),若是这个时候内存资源严重不足,为了保护系统资源的安全,把指定的特殊进程的数据,换出到磁盘,等待外设就绪,把这个代码和输出换入到内存,然后把PCB加到内存的运行队列中,磁盘中有一个专门换入换出的区,叫做swap分区。

换出不止换出一个进程,所有等待的外设进程,都有可能被换出。

阻塞挂起状态

阻塞挂起状态就是在阻塞的背景下,把进程挂起。

除了阻塞挂起,还有运行时挂起最尾部的相关进程,甚至可能把调度的放到调度分区,以后用到的时候再换入。

swap分区做挂起,是在用时间换空间。

swap分区不会太大,应该是和内存等量大小的。

如果换入换出解决不了,那就可能把某些进程直接干掉。所以就出现了闪退的情况。这种情况再Linux中尤其常见。

Linux中的状态

R

运行状态

S

休眠,阻塞等待状态。

printf是在云服务器上跑的,可以被信号直接中断,所以这个s也叫做,可中断睡眠,浅睡眠。

D

disk sleep 磁盘休眠,也是阻塞等待的状态的一种。

不可中断睡眠,深度睡眠。

磁盘,存取数据,是永久存储的,不可以中断等待,禁止操作系统删除这个进程。

等待磁盘的时候必须设置为D状态,D状态也是一种瞬时的状态,若是查到了一个D状态,一般都是磁盘/系统快挂掉了。

T

kill -18/19

19是暂停一个进程

18是继续一个进程,这个时候继续的时候,是杀不掉这个进程的,因为这个时候状态显示的是S,后面是没有加号的,这个时候只能使用kill命令来杀掉进程。

ctrl c能终止的叫做前台进程,杀不掉的叫做后台进程。

前台进程的时候,输入ls pwd是没有影响的。

若是我们想要这个进程直接变成后台进程,应该怎么操作呢?

运行的时候,使用这个命令:

./code &

为什么要把命令放在后台呢,因为耗时的操作,让系统自动完成,所以把他放在后台(比如下载页面的时候最小化,就是后台)。

现在的APP,退出的时候还存在,但是处于暂停的状态,这个时候就处于后台,不影响前台的任务。

t

进程做了非法但是不致命的操作,被OS暂停了。

当一个进程被追踪的时候,断点停下。

X

死亡状态,杀掉了或者跑完了,进程最开始为什么要被创建,是为了完成用户的任务的,通过进程执行的结果,来告知父进程或者操作系统,我把任务完成的如何了。

我们可以使用下面的这个命令来查看进程执行的结果。

echo $?

这个程序查看的是最近程序退出时候的退出码。

0表示执行成功,非0表示这个程序是错误的。 

我们在执行C语言当中的main函数的时候,main函数的返回值是为了告诉父进程这个进程的执行结果是不正确的。

返回0是因为自己总认为自己执行的是正确的。

该状态就是改PCB当中的属性。

比如说我们写一个程序,当有printf的时候是S状态,是因为根据冯诺依曼体系,它是要往缓存上写的,而且要等待外设准备就绪,所以要一直处于IO状态。去了printf就是R状态。

Z

也叫做僵尸状态,先得进入Z状态,才会进入X状态,进入Z状态,维持退出信息,方便父进程和操作系统来进行查询,X状态是不需要队列的,Z状态是不需要队列的。

 好了,本次的文章就到这里了,我们下次再见。 

相关文章:

Linux系列-进程的状态

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 操作系统就是计算机领域的哲学,是为了保证在所有情况下都适用,加载到内存叫做新建状态。 并行和并发 计算机同时进行多个任务,在用户感知的…...

SpringBoot项目中常用的一些注解

一、核心注解 SpringBootApplication 作用:标注一个主程序类,表明这是一个Spring Boot应用程序的入口。说明:这是一个复合注解,组合了Configuration、EnableAutoConfiguration和ComponentScan。 EnableAutoConfiguration 作用&…...

【网络】自定义协议——序列化和反序列化

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是序列化和分序列,并且自己能手撕网络版的计算器。 > 毒鸡汤:有些事情,总是不明白,所以我不…...

Pytorch如何精准记录函数运行时间

0. 引言 参考Pytorch官方文档对CUDA的描述,GPU的运算是异步执行的。一般来说,异步计算的效果对于调用者来说是不可见的,因为 每个设备按照排队的顺序执行操作Pytorch对于CPU和GPU的同步,GPU间的同步是自动执行的,不需…...

使用 Java 实现邮件发送功能

引言 1. JavaMail API 简介 2. 环境准备 2.1 Maven 依赖 2.2 Gradle 依赖 3. 发送简单文本邮件 4. 发送 HTML 邮件 5. 发送带附件的邮件 6. 注意事项 引言 在现代应用开发中,邮件发送功能是非常常见的需求,例如用户注册验证、密码重置、订单确认…...

html第一个网页

创建你的第一个HTML网页是一个激动人心的步骤。以下是创建一个简单网页的基本步骤和代码示例&#xff1a; 基础结构&#xff1a;所有的HTML文档都应该包含以下基本结构。 <!DOCTYPE html> <html> <head><title>我的第一个网页</title> </he…...

前后端交互接口(三)

前后端交互接口&#xff08;三&#xff09; 前言 前两集我们先做了前后端交互接口的约定以及浅浅的阅读了一些proto代码。那么这一集我们就来看看一些重要的proto代码&#xff0c;之后把protobuffer给引入我们的项目当中&#xff01; gateway.proto 我们来看一眼我们的网关…...

华为Mate70前瞻,鸿蒙NEXT正式版蓄势待发,国产系统迎来关键一战

Mate 70系列要来了 上个月&#xff0c;vivo、小米、OPPO、荣耀等众多智能手机制造商纷纷发布了他们的年度旗舰产品&#xff0c;手机行业内竞争异常激烈。 同时&#xff0c;华为首席执行官余承东在其个人微博上透露&#xff0c;Mate 70系列将标志着华为Mate系列手机达到前所未有…...

【安卓13 源码】Input子系统(4)- InputReader 数据处理

1. 多指触控协议 多指触控协议有 2 种&#xff1a; > A类&#xff1a; 处理无关联的接触&#xff1a; 用于直接发送原始数据&#xff1b; > B类&#xff1a; 处理跟踪识别类的接触&#xff1a; 通过事件slot发送相关联的独立接触更新。 B协议可以使用一个ID来标识触点&…...

Xserver v1.4.2发布,支持自动重载 nginx 配置

Xserver——优雅、强大的 php 集成开发环境 本次更新为大家带来了更好的用户体验。 &#x1f389; 下载依赖组件时&#xff0c;显示进度条&#xff0c;展示下载进度。 &#x1f389; 保存站点信息和手动修改 vhost 配置文件之后&#xff0c;自动重载 nginx 配置 &#x1f41e…...

Java反射原理及其性能优化

目录 JVM是如何实现反射的反射的性能开销体现在哪里如何优化反射性能开销 1. JVM是如何实现反射的? 反射是Java语言中的一种强大功能&#xff0c;它允许程序在运行时动态地获取类的信息以及操作对象。下面是一个简单的示例&#xff0c;演示了如何使用反射调用方法&#xff…...

RabbitMQ 管理平台(控制中心)的介绍

文章目录 一、RabbitMQ 管理平台整体介绍二、Overview 总览三、Connections 连接四、Channels 通道五、Exchanges 交换机六、Queues 队列查看队列详细信息查看队列的消息内容 七、Admin 用户给用户分配虚拟主机 一、RabbitMQ 管理平台整体介绍 RabbitMQ 管理平台内有六个模块&…...

【SQL】在 SQL Server 中创建数据源是 MySQL 数据表的视图

背景&#xff1a;Windows系统已安装了mysql5.7和sqlServer数据库&#xff0c;现在需要在sqlServer创建视图或者查询来自mysql的数据&#xff0c;视图的数据来源mysql数据库。下面进行实现在sqlserver实现获取mysql数据表数据构建视图。 1、打开 ODBC 数据源管理器&#xff0c;…...

现代Web开发:Next.js 深度解析与最佳实践

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 现代Web开发&#xff1a;Next.js 深度解析与最佳实践 现代Web开发&#xff1a;Next.js 深度解析与最佳实践 现代Web开发&#xf…...

LeetCode题练习与总结:赎金信--383

一、题目描述 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1&#xff1…...

eval: jdk1.8.0_431/jre/bin/java: Permission denied

当您在启动Tomcat或其他Java应用时遇到“Permission denied”错误&#xff0c;这通常表示当前用户没有执行指定Java可执行文件的权限。以下是解决这个问题的几种方法&#xff1a; 方法一&#xff1a;检查文件权限 查看文件权限&#xff1a; 使用ls -l命令查看Java可执行文件的…...

.Net IOC理解及代码实现

IOC理解 IoC(Inversion of Control)&#xff1a;即控制反转&#xff0c;这是一种设计思想&#xff0c;指将对象的控制权交给IOC容器&#xff0c;由容器来实现对象的创建、管理&#xff0c;程序员只需要从容器获取想要的对象就可以了。DI(Dependency Injection)&#xff0c;即依…...

履带机器人(一、STM32控制部分--标准库)

一、履带机器人整体逻辑框架 通过在PC端搭建上位机,使得在PC端可以给STM32发送控制指令并且接受STM32的状态信息。 通过RS485通信,使得STM32可以和电机进行通信,STM32发送启动、停止、转速、方向等指令,并接受电机返回的状态信息。 二、STM32逻辑框架 整体逻辑: 1、先…...

地理空间-Java实现航迹稀释

Java实现航迹点稀释算法&#xff08;Douglas - Peucker算法&#xff09;的示例代码&#xff0c;该算法可在保证航迹整体形状变化不大的情况下减少航迹点数量&#xff1a; import java.util.ArrayList; import java.util.List; class Point { double x; double y; public Point…...

qt QHttpMultiPart详解

1. 概述 QHttpMultiPart是Qt框架中用于处理HTTP多部分请求的类。它类似于RFC 2046中描述的MIME multipart消息&#xff0c;允许在单个HTTP请求中包含多个数据部分&#xff0c;如文件、文本等。这种多部分请求在上传文件或发送带有附件的邮件等场景中非常有用。QHttpMultiPart类…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...