进程处于挂起状态表示_挂起进程转换图

进程处于挂起状态表示_挂起进程转换图文章目录引言挂起状态是什么?挂起状态和阻塞状态有什么区别?如何主动挂起程序总结引言以前对于这个概念始终比较模糊,遂在解决后记录博客,希望帮助到有同样问题的朋友。挂起状态是什么?我们一般认为进程有五个状态,即新建态,就绪态,阻塞态,运行态,终止态。而在这些状态之外还存在着一个状态,我们称之为挂起状态,它既可以是我们客户主动使得进程挂起,也可以是操作系统因为某些原因使得进程挂起。总而言之引入挂起状态的原因有以下几种:用户的请求:可能是在程序运行期间发现了可疑的问题,需要暂停进程。父进程的请求:

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

引言

以前对于这个概念始终比较模糊,遂在解决后记录博客,希望帮助到有同样问题的朋友。

挂起状态是什么?

我们一般认为进程有五个状态,即新建态,就绪态,阻塞态,运行态,终止态
在这里插入图片描述
而在这些状态之外还存在着一个状态,我们称之为挂起状态,它既可以是我们客户主动使得进程挂起,也可以是操作系统因为某些原因使得进程挂起。总而言之引入挂起状态的原因有以下几种:

  1. 用户的请求可能是在程序运行期间发现了可疑的问题,需要暂停进程
  2. 父进程的请求考察,协调,或修改子进程
  3. 操作系统的需要对运行中资源的使用情况进行检查和记账
  4. 负载调节的需要有一些实时的任务非常重要,需要得到充足的内存空间,这个时候我们需要把非实时的任务进行挂起,优先使得实时任务执行
  5. 定时任务一个进程可能会周期性的执行某个任务,那么在一次执行完毕后挂起而不是阻塞,这样可以节省内存
  6. 安全系统有时可能会出现故障或者某些功能受到破坏,这是就需要将系统中正在进行的进程进行挂起,当系统故障消除以后,对进程的状态进行恢复

既然我们知道了挂起状态引入的原因,那么我们再来看看带有挂起状态的进程状态转移过程:
在这里插入图片描述

相比于一般的五个状态的进程状态转移图,我们引入了两种挂起状态的类型,即就绪挂起状态阻塞挂起状态。它们的区别就是就绪挂起状态其实还是在内存中的,而后者是在外存中的。接下来我们说一说新加入的几个状态转化的步骤:

  1. 运行状态->就绪挂起状态:这里发生在客户在程序正在运行是直接挂起程序。注意这里的箭头是单向的,所以在就绪挂起状态结束以后实际上是执行激活步骤,进入就绪状态,等待处理机调度。
  2. 阻塞状态->阻塞挂起状态:当内存空间比较紧缺的时候,如果有存在在内存中的,而且是处于阻塞状态的进程,那么就让他更需要内存的程序占用内存,自己进入阻塞挂起状态,PCB等数据存入外存。因为现在这个进程也不能进入就绪状态,这个程序在内存中是没有什么作用的。
  3. 阻塞挂起状态->就绪挂起状态:当阻塞状态等待的IO事件或其他事件到来的时候状态发生改变。
  4. 就绪挂起状态->就绪状态:如果内存中没有就绪态进程,操作系统需要调入一个进程继续执行。此外,当处于就绪/挂起状态的进程比处于就绪态的任何进程的优先级都要高时,也可以进行这种转换。这种情况的产生是由于操作系统设计者规定,调入高优先级的进程比减少交换量更重要
  5. 就绪状态->就绪挂起状态:通常,操作系统更倾向于挂起阻塞态进程而不是就绪态进程,因为就绪态进程可以立即执行,而阻塞态进程占用了内存空间但不能执行。但如果释放内存以得到足够空间的唯一方法是挂起一个就绪态进程,那么这种转换也是必需的。并且,如果操作系统确信高优先级的阻塞态进程很快就会就绪,那么它可能选择挂起一个低优先级的就绪态进程,而不是一个高优先级的阻塞态进程。

挂起状态和阻塞状态有什么区别?

这里大多来自其他博主的文章,有以下几个方面的区别:

  1. 是否释放CPU:阻塞(pend)就是任务释放CPU,其他任务可以运行,一般在等待某种资源或信号量的时候出现。挂起(suspend)不释放CPU,如果任务优先级高就永远轮不到其他任务运行。一般挂起用于程序调试中的条件中断,当出现某个条件的情况下挂起,然后进行单步调试。
  2. 是否主动:显然阻塞是一种被动行为,其发生在磁盘,网络IO,wait,lock等要等待某种事件的发生的操作之后。因为拿不到IO资源,所以阻塞时会放弃 CPU的占用。而挂起是主动的,因为挂起后还要受到CPU的监督(等待着激活),所以挂起不释放CPU,比如sleep函数,站着CPU不使用。
  3. 与调度器是否相关:任务调度是操作系统来实现的,任务调度时,直接忽略挂起状态的任务,但是会顾及处于pend下的任务,当pend下的任务等待的资源就绪后,就可以转为ready了。ready只需要等待CPU时间,当然,任务调度也占用开销,但是不大,可以忽略。可以这样理解,只要是挂起状态,操作系统就不在管理这个任务了。

上面我们提到了sleep函数和wait函数,我们把它们单独拎出来看看:

sleep()和wait()函数的区别:

  1. 两者比较的共同之处是:两个方法都是使程序等待多少毫秒
  2. 最主要区别是:sleep()方法没有释放锁。而wait()方法释放了锁,使得其他线程可以使用同步控制块或者方法
  3. sleep()指线程被调用时,占着CPU不工作,形象的说明为“占着CPU”睡觉

sleep(2000)表示:占用CPU,程序休眠2秒。
wait(2000)表示:不占用CPU,程序等待2秒。

如何主动挂起程序

ctrl+z:挂起,程序放到后台,程序没有结束。
jobs:查看被挂起的程序工作号

恢复进程执行时,有两种选择:fg命令将挂起的作业放回到前台执行;用bg命令将挂起的作业放到后台执行
格式:fg 工作号;bg 工作号

总结

挂起状态一般不被放在进程的常用状态之一,常见的,”五大“状态里就没有挂起状态,但其实际上还是非常重要的,值得我们每一个人好好学习。

参考:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/222940.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java 错误: 找不到符号遇到的几种情况

    java 错误: 找不到符号遇到的几种情况今天在学习java面向对象的时候写了两个类,在运行时出现了以下错误:然后下面是我的两个java类publicclassArrayTool{ ArrayTool(){ } publicintgetMax(int[]arr){ intmax=0; for(inti=0;i

  • navicat 15版激活码【在线注册码/序列号/破解码】

    navicat 15版激活码【在线注册码/序列号/破解码】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • C#与.NET的区别和C#程序结构

    C#与.NET的区别和C#程序结构C#语言及其特点(1)语法简洁,不允许直接操作做内存,去掉指针操作(2)彻底的面向对象设计,C#具有面向对象所应用的一切特性:封装、继承、多态(3)与Web紧密结合,C#支持绝大多数的Web标准

  • 深入理解halcon相机标定[通俗易懂]

    深入理解halcon相机标定[通俗易懂]目录相机标定简介深度说明1、相机标定参数介绍2、标定板详细介绍问题1:halcon是否只能使用halcon专用的标定板?问题2:halcon标定板如何生成?问题3:halcon标定板如何摆放,拍照数量有无限制?标定步骤1、设置相机内部初始值使用set_calib_data_cam_param算子设置相机内部初始值畸变类型选择与参数确定技巧2、标定板初始化3、创建标定数据模型4、获取标定图片5、使…

  • A Game of Thrones(81)

    A Game of Thrones(81)45.EDDARD(0)Painisagiftfromthegods,LordEddard,”GrandMaesterPycelletoldhim.“Itmeanstheboneisknitting,thefleshhealingitself.Bethankful.”  “Iwillbethankfulwhenm…

  • 相机标定——张正友棋盘格标定法

    相机标定——张正友棋盘格标定法目录为什么需要相机标定?相机标定可以做什么?相机标定后可以得到什么?什么情况下需要借助相机标定的方法?相机标定的原理实现相机标定的方法 为什么需要相机标定? 一个是由于每个镜头的在生产和组装过程中的畸变程度各不相同,通过相机标定可以校正这种镜头畸变,生成矫正后的图像——矫正透镜畸变; 另一个是根据标定后的到的相机参数建立相机成像几何模型,由获得的图像重构…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号