进程切换进程状态

文章目录

  • 前言
  • 一、进程切换
  • 二、运行状态(R)
  • 三、休眠状态(S)
  • 四、磁盘休眠状态(D)
  • 五、停止状态(T)
  • 六、死亡状态(X)和僵尸状态(Z)


前言

人在做一件事情都会有对应的状态是做完了,还是没有开始做或者正在做,而进程也是有自己状态的进程对应状态:在这里插入图片描述
这是一般操作系统的进程状态,其实操作系统进程状态都是差不多的,不过在Linuxx内核中进程状态分为:运行状态,休眠状态,磁盘休眠状态,停止状态,死亡状态,僵死状态。


一、进程切换

一个操作系统中注定会存在很多进程,然后去访问cpu的资源,那么这些进程是如何运行的,可不可以我某个进程对于cpu资源的访问是长久的,就是一直占用着cpu的资源,因为cpu资源只有一个,注定了进程之间是存在竞争关系的,对于资源的竞争,那么一个进程在cpu上运行,其他进程就只能等着这个进程运行完,但是若不加以限制,那么一个进程想长时间占用cpu资源,其他进程就会陷入一直等待由于有些进程长时间得不到cpu资源,就会饥饿然后会被饿死,这样操作系统一看不对啊,我让你进程执行某个功能,你死了还得了,他连忙修改进程对于cpu资源的访问机制,然后给每一个进程分配一个时间片信息,每个进程只能在cpu上访问规定时间,超过这个时间进程就会被替换下来,然后有其他进程访问cpu资源,而规定的这个时间是时间片(每个进程访问cpu资源的时间),最终在一个时间内,所有的进程都会被执行一遍,这样就展现了多个进程并发访问cpu资源的现象,其实都是一个一个访问cpu资源,只是时间太快根本无法察觉。而进程肯定不止只执行一次,因为可能他执行到它功能一半时它的时间片到了,然后他不得不被换下去,所有也注定了cpu上会存在大量进程被换出与放上去的动作,这个动作是进程切换。

二、运行状态®

当进程要放在cpu上运行的时候,肯定不止一个要运行,而是很多进程都要运行,那么如何保证他们要处于运行中,这在cpu中维护一个运行队列(struct runqueue)
struct runqueue
{
struct task_structhead;
struct task_struct
tail;
}
进程pcb内核数据结构以双链表形式组织,所有只需要将第一个进程链为head,最后一个链为tail,这样可以让进程进入运行队列中,进而若干进程在运行队列中进行排队,队列头部交给cpu运行,那么谁在cpu上运行谁没有在cpu上运行有一个调度器决定(根据进程优先级决定谁在cpu上运行)调度器能找到所有在运行队列中的进程,而在运行队列中的进程就是运行态!处于运行队列中的进程都是可以随时被运行的进程
在这里插入图片描述

这里运行状态是R+,为什么会有“+”号?,代表是在前台运行,此时在命令行输入指令相对来说是没有用的

在这里插入图片描述
而另外一个进程相当于后台进程

在这里插入图片描述

三、休眠状态(S)

计算机中底层存在各种设备也就是外设,而操作系统要对底层硬件做管理,用一种数据结构类型表示各种硬件,同样管理硬件也是先描述在组织。struct dev{…};其中有一重要字段信息pcb内核数据结构对象,因为外设要各自维护一个队列,当进程pcb内核数据结构加载好后,然后进程将对应信息写入pcb内核数据结构,但是当要写入数据的时候,若是要从键盘中读入数据,那么就要等待从键盘输入数据,但是键盘设备一直没有数据输入,那么这个进程就会一直在等待,在操作系统中,这样的进程可能会有很多,在等待各种设备就绪,然后从外设中读取数据或者将数据写进外设,进程会排队,那么这些进程在哪里排队?在对应所需对应设备维护的对待队列中排队,没错每个外设会给自己维护一个等待队列,因为设备可能忙不过来,可能刚好有进程正在使用外设但是又恰好有进程来了,你设备也不可能让他走,所有给它说我这里有个排队的地方,你去排队,一会就到你了,然后进程就乖乖去排队了。而处于设备维护的等待队列的进程它们处于一种对待的状态(也就是休眠状态),等到设备空了说,艾你可以去运行了,然后那个进程就立马去了,也就是处于休眠状态的进程可以被操作系统唤醒。

在这里插入图片描述
由于是休眠然后这个进程在等待,因此为S+状态,其实就算没有sleep,光是printf接口调用,几乎都会显示为休眠状态
在这里插入图片描述
同样表现为休眠状态,因为进程在cpu上执行特别的快,我们肉眼不可观察到,然后进程几乎所有时间都在等待显示器就绪,然后将数据写入到printf中显示出来,因此多数情况表现为S+

四、磁盘休眠状态(D)

当进程向磁盘中写入数据时,而磁盘也要在自己空间为进程拿来的数据找个地方写入,而写数据只有两种结果要么写入成功,要么写入失败,而磁盘对于写入的数据要返回一个结果给进程,在磁盘写入数据这个过程中,进程是在等待的,但是若是此时,操作系统内的进程已经是严重不足了,它巡视自己的所有进程,发现这个进程在这里闲着啥也不干,然后就决定把它给干掉,此时这个进程就被干掉,但是磁盘还在对于进程给的数据写入,若是磁盘发现要写入的数据写不下,太大了此时就会给进程返回写入失败,但是此时它返回结果没有进程接受,磁盘大概率会把数据丢掉,因为磁盘也有自己的事情要做,但是若是这数据又是很重要的,那么就会造成数据流失在这个过程中每个都各司其职谁也没有错,错的只有制度,在这个过程中进程被操作系统杀掉是它被唤醒然后接受了9号信号,而想要避免这样的情况发生,就不让他被唤醒就好了,让它将磁盘写入的数据拿到结果让他自然苏醒!进程这种状态叫做磁盘休眠也叫深度休眠状态。
在这里插入图片描述

五、停止状态(T)

T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
在这里插入图片描述
进程可以接收信号,通过kill -l可以查看所有信号,kill -对应进程信号编号 进程pid可以给进程发送信号,给进程发送19号信号可以让进程暂停,然后发送18号信号可以让进程从暂停状态中回复出来!

六、死亡状态(X)和僵尸状态(Z)

死亡状态就是进程没有了挂掉了,但是你不会在任务列表中看见这个状态,它是一瞬间的无迹可寻,死掉就死掉了!但是一个进程死掉之后他还会留有一些信息,会保存下来,会等待别人来回收它身上的信息。就像电影里面的那些锦衣卫办案一样,当一个人在大街上忽然倒地时,肯定有人报案然后锦衣卫迅速赶到将现场保存维护起来,等待法医鉴定死亡结果,之后再通知家属认领,才可以拿回去。进程当然不用这么多流程,但是一个进程死亡时,也是要将它的信息保存下来,然后一直保留着知道它的父进程来回收它的信息,而进程死亡之后将信息(pcb)保存下来这一个持续状态,为僵尸状态!它要一直保存进程pcb数据结构对象,然后直到它的父进程来回收它子进程的pcb,才会释放这个进程的pcb数据结构中所含字段信息,若是父进程一直不来回收它或者是忘记回收了,那么就会造成这个挂掉的进程一直在吃操作系统的内存资源,当不释放时就会进而引起内存泄漏问题,而解决方法可以让父进程等待子进程的退出(死亡)然后解决内存泄漏。
在这里插入图片描述
子进程退出了但是父进程还在运行,且不回收子进程所有它的子进程就会一直处于Z状态,但是若是有一天子进程还在运行的时候夫进程却退出了,那么就没有人来回收它,会就变成了孤儿进程了。
在这里插入图片描述
当没有人回收时,那么此时操作系统就要上场了,这个进程的父进程就变成了1号进程,总归要有人来管理回收这个进程不然真的造成内存泄漏得不偿失!所有没有父进程的进程就会由操作系统来接管,这个进程的父进程就变为了1号进程,而这种父进程比子进程先退出的进程,它由别的进程接管叫做孤儿进程!(我这刚刚是卡着了给这个孤儿进程发信号它都不理我,哈哈)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/473372.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ReaLTaiizor开源.NET winform控件库学习使用

一、ReaLTaiizor项目介绍 1.1 介绍及地址 基于MIT license开源、免费、美观的.NET WinForm UI控件库:ReaLTaiizor ReaLTaiizor是一个开源免费的.NET WinForms控件库,它提供了广泛的组件和丰富的主题选项(用户友好、注重设计)&am…

Spring boot2.7整合jetcache方法缓存 处理数据发生变化时同步更新缓存 删除缓存操作

上文 Spring boot2.7整合jetcache方法缓存 我们做了个方法缓存的案例 可以将接口内容缓存起来 是能大大提高效率的 但是 我们接口的数据大多来自数据库 如果我们调用增删查改 它的数据变化了 那缓存的内容就会因为没有及时更新变的不准确 例如 我们这样 我们在上面 定义了 一…

微信小程序外卖跑腿点餐(订餐)系统(uni-app+SpringBoot后端+Vue管理端技术实现)

项目介绍 自从计算机发展开始,计算机软硬件相关技术的发展速度越来越快,在信息化高速发展的今天,计算机应用技术似乎已经应用到了各个领域。 在餐饮行业,除了外卖以外就是到店里就餐,在店里就餐如果需要等待点餐的话…

【图解物联网】第3章 物联网设备

3.1 设备——通向显示世界的接口 3.1.1 为什么要学习设备的相关知识 经过前两章的学习,想必各位读者已经掌握物联网这个词描绘出的世界和用于实现物联网的系统架构了。基于这点,这一章将会为大家介绍在物联网世界中起着核心作用的因素,即设…

FreeCAD傻瓜教程之创建参数化几何图形-螺旋体、平面、球体、椭球体、圆柱体、圆锥体、棱柱、椭圆

目的:学会用FreeCAD绘制参数化的几何图形。 一、使用的工作台和工具 1.1选择Part 工作台 1.2单击创建图元...工具 也就是上图黄色工具区域的倒数第2个 1.3 打开几何图元 下方的下拉列表 二、绘制螺旋体、弹簧、螺丝杆 2.1 选择几何图元列表中的 “螺旋体” 设…

01分布式搜索引擎ES

分布式搜索引擎ES 1.初识elasticsearch1.1.了解ES1.2.倒排索引1.3.es的一些概念 2.索引库操作2.1.mapping映射属性2.2.索引库的CRUD 3.文档操作3.1.新增文档3.2.查询文档3.3.删除文档3.4.修改文档3.5.总结 4.RestAPI4.0.导入Demo工程4.1.创建索引库4.2.删除索引库4.3.判断索引库…

利用autodl服务器跑模型

1. 租用服务器 本地改模型 服务器 将改进好的、数据集处理好的模型压缩为zip文件上传到阿里云盘打开服务器AUTODL服务器,在主页中选择容器实例 在此位置进行开关机操作,若停止服务器,必须关机,不然会一直扣钱 2. 运行模型 选择…

【数字IC/FPGA】书籍推荐(0)----《Verilog 传奇--从电路出发的HDL代码设计》

在下这几年关于数字电路、Verilog、FPGA和IC方面的书前前后后都读了不少,发现了不少好书,也在一些废话书上浪费过时间。接下来会写一系列文章,把一部分读过的书做个测评,根据个人标准按十分制满分来打分并分享给大家。 定位 书名…

“因聚而生,数智有为”实在智能Agent牵手华为生态合作

近日,2024华为中国合作伙伴大会顺利闭幕,实在智能受邀出席,携TARS大模型及实在Agent(智能体)数字员工精彩亮相,与华为生态伙伴共同探讨如何帮助客户抓住数智化转型的巨大机遇,加速培育“新质生产…

爬虫系列-CSS基础语法

🌈个人主页:会编程的果子君 💫个人格言:“成为自己未来的主人~” CSS全称层叠样式表 ,主要用来定义页面内容展示效果的一门语言,HTML:页面骨架,素颜CSS:页面效果美化&#xff1a…

CTF题型 匿名函数考法例题总结

CTF题型 匿名函数考法&例题总结 文章目录 CTF题型 匿名函数考法&例题总结一 .原理分析二 .重点匿名函数利用1.create_function()如何实现create_function代码注入 2.array_map()3.call_user_func()4.call_user_func_array()5.array_filter() 三.例题讲解1.[Polar 靶场 …

应急响应-Web2

应急响应-Web2 1.攻击者的IP地址(两个)? 192.168.126.135 192.168.126.129 通过phpstudy查看日志,发现192.168.126.135这个IP一直在404访问 , 并且在日志的最后几条一直在访问system.php ,从这可以推断 …

数据库:基本操作与用户授权

一 基本操作 1 SQL分类 数据库:database 表:table,行:row 列:column 索引:index 视图:view 存储过程:procedure 存储函数:function 触发器:trigger 事…

【大屏设计】如何进行软件系统网站大屏页面设计?不限于智慧城市、物联网、电商、园区领域

【大屏设计】如何进行软件系统网站大屏页面设计?不限于智慧城市、物联网、电商、园区领域 一、什么是网站大屏设计二、网站大屏设计原型素材三、网站大屏设计设计素材四、他山之石 一、什么是网站大屏设计 网站大屏设计是网站设计中至关重要的一部分,因…

浅谈前端路由原理hash和history

1、认识前端路由 本质 前端路由的本质,是监听 url 地址或 hash 值的改变,来切换渲染对应的页面组件 前端路由分为两种模式 hash 模式 history 模式 两种模式的对比 2、hash 模式 (1)hash 定义 hash 模式是一种把前端路由的路…

【运维笔记】VM 记录一次centos虚拟机和宿主机之间ping不通的问题

问题描述 环境:centos7,静态ipVM版本:VMware Workstation 16 pro,网络为nat映射模式问题: 一开始,虚拟机可以ping通宿主机,也可以ping通,也可以ping通外网(如 ping www.…

HarmonyOS(二十)——管理应用拥有的状态之LocalStorage(页面级UI状态存储)

LocalStorage是页面级的UI状态存储,通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility实例内,在页面间共享状态。 本文仅介绍LocalStorage使用场景和相关的装饰器:LocalStorageProp和LocalS…

GaussDB(分布式)实例故障处理

一、说明 GaussDB Kernel实例出现故障时,可以按照本节的办法进行实例快速修复。 1、执行gs_om -t status --detail查看集群状态,cluster_state为Normal,balanced为No,请重置实例状态。 2、执行gs_om -t status --detail查看集群…

【开源】SpringBoot框架开发校园超市管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 供应商模块2.2 超市商品模块2.3 超市账单模块 三、系统设计3.1 前端架构设计3.2 后端架构设计 四、系统实现五、核心代码5.1 查询商品5.2 删除商品5.3 查询供应商5.4 查询账单5.5 新增账单 六、免责说明 一、摘要 1.1 …

「数据分析」之零基础入门数据挖掘

摘要:对于数据挖掘项目,本文将学习应该从哪些角度分析数据?如何对数据进行整体把握,如何处理异常值与缺失值,从哪些维度进行特征及预测值分析? 探索性数据分析(Exploratory Data Analysis&#…