进程的挂起状态详细分析方法_线程挂起

进程的挂起状态详细分析方法_线程挂起通常我们所认为的进程有五大状态,新建态,就绪态,阻塞态,运行态,退出态。 下面是示意图: 事实上还存在被挂起的进程。    交换的需要前面图中三个基本状态(就绪态、运行态和阻塞态)提供了一种为进程行为建立模型的系统方法,并指导操作系统的实现。 但是,可以证明往模型中增加其他状态也是合理的。下面考虑一个没有使用虚拟内存的系统,每次执行中的进程必须完全载入内存。因此

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

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

  通常我们所认为的进程有五大状态,新建态,就绪态,阻塞态,运行态,退出态

  下面是示意图:

进程的挂起状态详细分析方法_线程挂起

  事实上还存在被挂起的进程。

  

  交换的需要 前面图中三个基本状态(就绪态、运行态和阻塞态)提供了一种为进程行为建立模型的系统方法,并指导操作系统的实现。

  但是,可以证明往模型中增加其他状态也是合理的。下面考虑一个没有使用虚拟内存的系统,每次执行中的进程必须完全载入内存。因此,所有队列中的所有进程必须驻留在内存中。

  内存保存多个进程,当一个进程正在等待是,处理器可以转移到另一个进程,但是CPU比I/O要快的多,以至于内存中所有进程都在等待I/O的情况很常见。因此,即使是多道程序设计,大多数时候处理器仍然可能处于空闲状态。

  一种解决办法是扩充内存适应更多的进程。有以下缺点:1.内存的价格 2.程序对内存空间需求的增长速度比内存价格下降的速度快。因此,更大的内存往往导致更大的进程,而不是更多的进程。

  另一种解决方案是交换。包括把内存中某个进程的一部分或全部移到磁盘中。当内存中没有处于就绪状态的进程时,操作系统就把被阻塞的进程患处到磁盘中的”挂起队列“(suspend queue),即暂时保存从内存中”驱逐“出来的被挂器的进程队列。操作系统再次之后取出挂起队列中的另一个进程,或者接受一个新进程的请求,将其纳入内存运行。

  “交换”(swapping)是一个I/O操作,因而可能使问题更恶化。但是由于磁盘I/O一般是系统中最快的I/O(相对于磁带或者打印机I/O),所以交换通常会提高性能。

  

  现在有两种进程模型,一种是包含单挂起态的模型,一种是包含两个挂起态的模型。

  分别如图:

进程的挂起状态详细分析方法_线程挂起

  包含两个挂起态的模型如图:

进程的挂起状态详细分析方法_线程挂起

  与之前五个转换模型相比,比较重要的新转换如下:

  • 阻塞->阻塞/挂起:如果没有就绪进程,则至少一个阻塞进程被换出,为另一个没有阻塞的进程让出空间。如果操作系统确定当前正在运行的进程,或者就绪进程为了维护基本的性能要求而需要更多的内存空间,那么,即使有可用的就绪态进程也可能出现这种转换。
  • 阻塞挂起->就绪挂起:如果等待的事件发生了,则处于阻塞/挂起状态的进程可转换到就绪/挂起态。注意,这要求操作系统必须能够得到挂起进程的状态信息
  • 就绪/挂起->就绪:如果内存中没有就绪态进程,操作系统需要调入一个进程继续执行。此外,当处于就绪/挂起状态的进程比处于就绪态的任何进程的优先级都要高时,也可以进行这种转换。这种情况的产生是由于操作系统设计者规定,调入高优先级的进程比减少交换量更重要。
  • 就绪->就绪/挂起:通常,操作系统更倾向于挂起阻塞态进程而不是就绪态进程,因为就绪态进程可以立即执行,而阻塞态进程占用了内存空间但不能执行。但如果释放内存以得到足够空间的唯一方法是挂起一个就绪态进程,那么这种转换也是必需的。并且,如果操作系统确信高优先级的阻塞态进程很快就会就绪,那么它可能选择挂起一个低优先级的就绪态进程,而不是一个高优先级的阻塞态进程。
 
通俗的说,就是挂起不挂起,不光要考虑为进程让出空间,不光要考虑是否就绪,还要考虑进程的优先级。

  还需要考虑的几种其他转换有:
  • 新建->就绪挂起及新建->就绪:当创建一个新进程时,该进程或者加入就绪队列,或者加入就绪/挂起队列。不论哪种情况,操作系统都必须建立一些表管理进程,并为进程分配地址空间。操作系统可能更倾向于在初期执行这些辅助工作,这使得它可以维护大量的未阻塞的进程。通过这一策略,内存中经常会没有足够的足够的空间分配给新进程。因此使用了(新建->就绪/挂起)转换。另一方面,我们可以证明创建进程时适时(just-in-time)原理,即尽可能推迟创建进程以减少操作系统的开销,并在系统被阻塞态进程阻塞时允许操作系统执行进程创建任务。
  • 阻塞/挂起->阻塞:这种转化在设计中比较少见,如果一个进程没有准备好执行,并且不在内存中,调入它又有什么意义?但是考虑到下面的情况:一个进程终止,释放了一些内存空间,阻塞/挂起队列中有一个进程优先级比就绪/挂起队列中任何进程的优先级都要高,并且操作系统有理由相信阻塞进程的事件很快就会发射管,这时,把阻塞进程而不是就绪进程调入内存是合理的。
  • 运行->就绪/挂起:通常当分配给一个运行进程的时间期满时,它将转换到就绪态。但是,如果由于位于阻塞/挂起队列中具有较高优先级的进程变得不再被阻塞,操作系统抢占这个进程,也可以直接把这个运行进程转换到就绪/挂起队列中,并释放一些内存空间。
  • 各种状态/退出:在典型情况下,一个进程在运行时终止,或者是因为它已经完成,或者是因为出现了一些错误条件。但是,在某些操作系统中,一个进程可以被创建它的进程终止,或者当父进程终止时终止。如果允许这样,则进程在任何状态时都可以转换到退出态。
  挂起的其他用途:到目前为止,挂起进程的概念与不在内存中的进程概念是等价的。一个不再内存中的进程,不论是否在等待一个事件,都不能立即执行。

  总结一下挂起进程的概念:
  
  1.进程不能立即执行
  2.进程可能是或不是正在等待一个事件。如果是,阻塞条件不依赖于挂起条件,阻塞事件的发生不会使进程立即被执行。
  3.为阻止进程执行,可以通过代理把这个进程置于挂起状态,代理可以是进程自己,也可以是父进程或操作系统。
  4.除非代理显示地命令系统进行状态转换,否则进程无法从这个状态中转移。

  下面一张表展示挂起进程的原因:
进程的挂起状态详细分析方法_线程挂起

  好,暂时就到这里了。

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214253.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 前端游戏巨制! CSS居然可以做3D游戏了

    前端游戏巨制! CSS居然可以做3D游戏了前言偶然接触到CSS的3D属性,就萌生了一种做3D游戏的想法.了解过css3D属性的同学应该都了解过perspective、perspective-origin、transform-st…

    2022年5月7日
    55
  • setrequestproperty()怎么使用_url主要功能

    setrequestproperty()怎么使用_url主要功能设置头信息的,比如格式,UA等,不设置自然有默认的,一般的请求倒不需要去设置,可以去看看android里的DefaultHttpClient里也有设置头信息的setRequestProperty 主要是用来设置下面的功能Javacode?12connection.setRequestProperty(“Con

    2025年9月11日
    6
  • Vue 插槽之 作用域插槽「建议收藏」

    现在我有如下需求,子组件<user/>中此时有一条用户的信息(userInfo);我要在父组件通过插槽展示这个用户的姓名(userInfo.name);注意:这里的父组件并没有这个用户的信息,子组件中有,如果直接在父组件{{userInfo.name}}获取这条信息是获取不到的;因为,只有<user/>组件可以访问到userInfo,而我们提供的内容是在父…

    2022年4月13日
    63
  • 逻辑斯蒂回归(Logistic Regression)

    logistic回归logistic回归经常被人译为“逻辑回归“,虽然我个人认为貌似并没有什么关联,但下面就姑且这么叫吧。逻辑回归虽然是名字里带着回归,但其实是一种解决分类问题的算法,说到分类就有分几类的区别,本篇我们只讨论用于二分类问题的逻辑回归。基本的线性回归的形式为:y=ωTx+by=ωTx+by=\omega^{T}x+b线性回归模型产生的预测值是一系列实值。为了使得输…

    2022年4月4日
    45
  • javascript中一个字符占几个字节

    javascript中一个字符占几个字节一般来说英文是1个,中文是两个。但是会根据编码方式不同而不同。以下是搬运:英文字母和中文汉字在不同字符集编码下的字节数英文字母:字节数:1;编码:GB2312字节数:1;编码:GBK字节数:1;编码:GB18030字节数:1;编码:ISO-8859-1字节数:1;编码:UTF-8字节数:4;编码:UTF-16字节数:2;编码:UTF-16BE字节数…

    2025年5月31日
    2
  • [转]EntityFramework的多种记录日志方式,记录错误并分析执行时间过长原因(系列4)…[通俗易懂]

    [转]EntityFramework的多种记录日志方式,记录错误并分析执行时间过长原因(系列4)…

    2022年3月12日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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