目录

前言

操作系统进程状态

运行状态

阻塞状态

挂起状态

Linux中具体的进程状态

R(running)运行状态

S(sleeping)阻塞状态

D(disk sleep)磁盘休眠状态

T(stopped)和t(tracing stop)

X(dead)终止状态

Z(zombie)僵尸状态

僵尸进程的危害


前言

我们在运行可执行程序形成进程后,操作系统要对多个进程进行管理,根据进程的状态对进程分类,不同类型的进程有不同的处理方案,下面将对不同进程的特点进行介绍。

操作系统进程状态

以上是进程状态之间的相互转化过程,下面将详细围绕三个状态展开:运行状态,阻塞状态,挂起状态。

运行状态

 运行状态就是正在运行的进程,很好理解;

问题是:CPU只有一个,但是进程有多个,可能多个进程都处于运行状态,操作系统是如何平衡这些进程的,如何保证这些进程都能够持续运行???

有多个进程都要运行,那就意味着在一段时间内每个进程都要得到执行。当然因为CPU只有一个所以在一个时间点只能对运行一个进程。 

在操作系统中有一个概念叫做运行队列,所有处于运行状态进程的PCB数据结构体对象都在这个队列中排队,一个个的运行;排队的先后顺序是根据进程的优先级决定的

在进程中有一个时间片的概念,时间片可以保证每个进程在CPU中运算,处理的时间差不多,是每个进程都有机会执行。

CPU对进程依次进行处理,那为什么我并没有感觉到我打开的程序有卡顿的情况???这是初学者经常会出现的误区,这是因为CPU计算处理的速度太快了,人根本感知不到。

阻塞状态

阻塞状态很形象,不明事宜进程被阻塞了,不能再继续运行。出现阻塞状态有很多原因通常是因为: I/O 操作完成、等待用户输入、等待资源分配。就是进程处于等待状态,没有处在运行队列中,即使CPU空闲也无法对这样的进程进行计算,处理。

处于阻塞状态的进程存放在哪里???

操作系统对与软硬件管理的基础是:先描述,再组织。操作系统也要对硬件进行管理,所以操作系统中理应存在描述硬件信息的结构体对象。所以处于阻塞状态的进程放在对应外设(等待从那里读取数据)结构体对象的等待队列中。

挂起状态

常见的挂起状态是阻塞挂起状态。

阻塞挂起状态:当操作系统中有多个进程在同时加载,计算机中内存不足时,操作系统就会将一些处于阻塞状态的进程的信息,数据,PCB结构体对象都置换到外设(硬盘)中去,来使得计算机中空出一些内存继续进行运算,当一些进程执行完后释放空间又够了,再将数据从外设加载到内存中让进程继续执行。信息被拷贝到外设的进程就称为处于挂起状态的进程。


Linux中具体的进程状态

上面介绍了操作系统中进程状态的总体划分,下面以Linux为例详细介绍以下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内核中定义的进程状态有7种:R(running)运行状态,S(sleeping)阻塞状态或浅度睡眠,D(disk sleep)深度睡眠,T(stopped)和t(tracing stop)暂停状态,X(dead)死亡状态,Z(zombie)僵尸状态。下面对这7种进程状态特点进行一一解释。

R(running)运行状态

依旧是将处于运行状态的进程放入到运行队列中进行调用,与前面说的一样没有特别之处。

S(sleeping)阻塞状态

也叫浅度睡眠状态,等待一些外设或I/O,用户指令......无法继续向后执行下去。

在上面谈到挂起状态:当内存不足时,操作系统会将一些进程的代码和数据以及PCB对象从内存置换到外设来空出内存供其他进程使用,被挂起的进程通常是处于阻塞状态的进程。

但是如果被挂起的进程正在等待磁盘信息的写入,等着磁盘告诉它是否写入成功的时候,突然该进程被挂起了,那磁盘内容是否写入成功就没人知道了,那数据如果没有写入成功还不知道,数据不久丢失了吗???

使得确实是这样的,所以操作系统有新增了一个状态D(disk sleep);

D(disk sleep)磁盘休眠状态

将正在等待磁盘写入或高I/O时才会出现,处于这种状态的进程不能被进程杀掉或挂起。

D状态的时间很短,一般在查进程状态时一般看不到这种状态,如果看到了说明磁盘现在写入的压力很大,很有可能操作系统快挂了。

T(stopped)和t(tracing stop)

T(stopped)和t(tracing stop)两个都表示暂停状态,只不过暂停的原因是不一样的。此处将其看作一样的。

暂停状态和阻塞状态有什么区别呢???他们不都是停止运行吗???

其主要区别在于暂停的原因是什么;阻塞状态的进程是在等待资源就绪,而处于暂停状态的进程是用户操作的,比如kill -19 +PID让进程暂停,kill -18 +PID让进程继续;还有gdb在进行调试的时候停止在一个断点上也是处于等待状态。

X(dead)终止状态

终止状态,毫无疑问程序运行结束后的状态,程序运行结束后会放到垃圾回收队列里面,等待释放。

Z(zombie)僵尸状态

我们知道每一个进程都有父进程,在命令行上打开的可执行程序也有父进程。在打开命令行时操作系统会自动将命令行解释器加载到内存中形成一个进程,所以当使用命令行打开其他程序时,命令行解释器就是它们的父进程。

当一个进程在进入终止状态之前,不会立即进入到垃圾回收队列中,而是先维护一会进程的属性状态即PCB结构体对象,让与其有关的进程(父进程)知道该进程要被释放了,很容易理解当一个进程要结束了必须要让操作系统知道,否则一个进程都结束了,而操作系统不知道,那操作系统还怎么管理进程。处于维护进程状态,等待子进程获取其状态信息的进程就处于僵尸进程,即快要死了,但还没死。

进程推出前,如果都进程没有主动获取子进程的相关信息,子进程就会一直处于Z状态直到父进程来获取其进程信息。

那如果父进程先子进程结束,怎么办???

如果父进程先结束,那么子进程就会称为孤儿进程,子进程的父进程将变成操作系统,被操作系统领养,操作系统直到关机一直都在。

僵尸进程的危害

  1. 进程推出状态要一直维护,直到父进程来获取进程的相关信息;
  2. 父进程一直不来获取子进程的相关信息,PCB就需要一直维护,也需要一直保持Z状态;
  3. 如果一直不回收子进程就会导致PCB长时间占用内存,导致内存泄漏。

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

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

相关文章

李沐--动手学深度学习 LSTM

1.从零开始实现LSTM #从零开始实现长短期记忆网络 import torch from torch import nn from d2l import torch as d2l#加载时光机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps)#1.定义和初始化模型参数&#xff…

面经的疑难杂症

1.介绍一下虚拟地址,虚拟地址是怎么映射到物理地址的? 虚拟地址是指在采用虚拟存储管理的操作系统中,进程访问内存时所使用的地址。每个进程都有独立的虚拟地址空间,虚拟地址通过操作系统和硬件(如MMU,内存…

去噪扩散概率模型(DDPM)全解:从数学基础到实现细节

一、 概述 在这篇博客文章中,我们将深入探讨去噪扩散概率模型(也被称为 DDPMs,扩散模型,基于得分的生成模型,或简称为自动编码器),这可以说是AIGC最近几年飞速发展的基石,如果你想做…

【系统分析师】2011年真题:案例分析-答案及详解

文章目录 试题1【问题 1】【问题 2】【问题 3】 试题2【问题 1】【问题 2】【问题 3】 试题3【问题 1】【问题 2】【问题 3】 试题4【问题 1】【问题 2】【问题 3】 试题5【问题 1】【问题 2】【问题 3】 试题1 随着宽带应用快速发展,用户要求系统服务提供商提供基…

【unitrix】 1.7 规范化常量类型结构(standardization.rs)

一、源码 这段代码实现了一个二进制数字标准化系统,用于将二进制数字类型(B0/B1)转换为更简洁的表示形式。 //! 二进制数字标准化模块 / Binary Number Normalization Module //! //! 提供将二进制数字(B0/B1)标准化为更简洁表示形式的功能…

NJet Portal 应用门户管理介绍

nginx向云原生演进,All in OpenNJet! 1. 应用门户简介 NJet 应用引擎是基于 Nginx 的面向互联网和云原生应用提供的运行时组态服务程序,作为底层引擎,NJet 实现了NGINX 云原生功能增强、安全加固和代码重构,利用动态加…

uni-app学习笔记三十六--分段式选项卡组件的使用

先来看效果: 上图有3个选项卡(PS:uniapp官方称之为分段器,我还是习惯叫选项卡),需要实现点击不同的选项卡时下方切换显示对应的数据。 下面介绍下实现的过程。 1.在uniapp官方文档下载并安装该扩展组件:u…

Qt:Qt桌面程序正常退出注意事项

一般情况下,Qt窗体的创建和显示命令如下: Main_window main_window; main_window.show(); 主窗体中设置属性Qt::WA_DeleteOnClose setAttribute(Qt::WA_DeleteOnClose); 则在main.cpp中可以将窗体创建为指针,这样在退出时可以正确释放指针…

【arXiv2024】时间序列|TimesFM-ICF:即插即用!时间序列预测新王者!吊打微调!

论文地址:https://arxiv.org/pdf/2410.24087 代码地址:https://github.com/uctb/TSFM 为了更好地理解时间序列模型的理论与实现,推荐参考UP “ThePPP时间序列” 的教学视频。该系列内容系统介绍了时间序列相关知识,并提供配套的论…

从0开始学习语言模型--Day02-如何最大化利用硬件

如何利用硬件 这个单元分为内核、并行处理和推理。 内核(Kernels) 我们说的内核一般指的就是GPU,这是我们用于计算的地方,一般说的计算资源就指的是GPU的大小。我们模型所用的数据和参数一般存储在内存里,假设把内存…

ElasticSearch配置详解:设置内存锁定的好处

什么是内存锁定 "bootstrap": {"memory_lock": "true" }内存锁定是指将Elasticsearch的JVM堆内存锁定在物理内存中,防止操作系统将其交换(swap)到磁盘。 内存交换是操作系统的虚拟内存管理机制,当…

成功解决 ValueError: Unable to find resource t64.exe in package pip._vendor.distlib

解决问题 我们在本地的命令行中运行指令"python -m pip install --upgrade pip"的时候,报了如下的错误: 解决思路 我们需要重新安装一下pip。 解决方法 步骤1: 通过执行下面的指令删除本地的pip: python -m pip uninstall pip…

仓库物资出入库管理系统源码+uniapp小程序

一款基于ThinkPHPuniapp开发的仓库物资出入库管理系统,适用于单位内部物资采购、发放管理的库存管理系统。提供全部无加密源码,支持私有化部署。 更新日志: 新增 基于UNIAPP开发的手机端,适配微信小程序 新增 字典管理 新增页面…

基于机器学习的逐巷充填开采岩层运动地表沉降预测

基于机器学习的逐巷充填开采岩层运动地表沉降预测 1. 项目概述 本报告详细介绍了使用Python和机器学习技术预测逐巷充填开采过程中地表沉降的方法。通过分析地质参数、开采参数和充填参数,构建预测模型评估地表沉降风险。 # 导入必要的库 import numpy as np import pandas…

MotleyCrew ——抛弃dify、coze,手动搭建多agent工作流

1. MotleyCrew 核心组件 - 协调器: Crew MotleyCrew 的核心是一个 “Crew” 对象,即多代理系统的指挥者。Crew 持有一个全局的知识图谱(使用 Kuzu 图数据库),用于记录所有任务、任务单元和其执行状态。 Cr…

掌握这些 Python 函数,让你的代码更简洁优雅

在 Python 编程世界里,代码的简洁性与可读性至关重要。简洁优雅的代码不仅便于自己后期维护,也能让其他开发者快速理解逻辑。而 Python 丰富的内置函数和一些实用的第三方库函数,就是实现这一目标的有力武器。接下来,就为大家介绍…

简说ping、telnet、netcat

简说 ping 和 telnet 命令的作用、用法和区别,方便理解它们在网络诊断中的用途。 🌐 ping 命令 ✅ 作用: ping 用于检测网络连通性。它通过向目标主机发送 ICMP Echo 请求 并等待回应,从而判断目标主机是否可达,并测…

基于STM32的超声波模拟雷达设计

一、雷达概述 雷达(Radio Detection and Ranging,无线电探测与测距)是一种利用电磁波探测目标位置、速度等信息的主动式传感器系统。其基本原理是发射电磁波并接收目标反射的回波,通过分析回波的时间差、频率变化等参数&#xff0…

飞书多维表格利用 Amazon Bedrock AI 能力赋能业务

背景 飞书多维表格是一款功能强大的在线数据管理与协作工具。它打破传统表格局限,将电子表格与数据库特性融合,支持看板、甘特图、表单等多种视图自由切换,可根据项目进度、任务管理等不同场景灵活展示数据。其丰富的字段类型能精准适配各类…

表格对比工具推荐,快速比对Excel文件

软件介绍 今天为大家推荐一款专为Excel用户设计的表格比较工具,简单易用,零基础也能快速掌握。 轻量高效的办公助手 Excel比较工具体积仅为11MB,占用空间小,运行流畅,适合各类电脑配置使用。 简洁明了的操作界面 软…