为了对进程从产生到消亡的整个过程进行跟踪和描述,就需要定义各种进程的各种状态并制定相应的状态转换策略,以此来控制进程的运行。
      不同的操作系统对进程的状态解释不同,但是最基本的状态都是一样的。包括一下三种:
       运行态:进程占用CPU,并在CPU上运行;
       就绪态:进程已经具备运行条件,但是CPU还没有分配过来;
       阻塞态:进程因等待某件事发生而暂时不能运行;
     进程在一生中,都处于上述3中状态之一。
       下面是3种状态转换图
             
        当然理论上上述三种状态之间转换分为六种情况;
        运行---》就绪:这是有调度引起的,主要是进程占用CPU的时间过长
        就绪---》运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
       运行---》阻塞:发生了I/O请求或等待某件事的发生
       阻塞---》就绪:进程所等待的事件发生,就进入就绪队列
       以上4种情况可以相互正常转换,不是还有两种情况吗?
         阻塞--》运行:即使给阻塞进程分配CPU,也无法执行,操作系统載进行调度时不会載阻塞队列进行挑选,其调度的选择对象为就绪队列:
        就绪--》阻塞:因为就绪态根本就没有执行,何来进入阻塞态?

现在知道了进程的三种基本状态,但是載操作系统具体现实中,设计者可以根据实际情况设置不同的状态,这样以来,就出现了以下几种状态:
      可运行态:他是运行态和就绪态的合并,表示进程正在运行或准备运行,Linux 中使用TASK_RUNNING 宏表示此状态。
       浅度睡眠态:进程正在睡眠(被阻塞),等待资源到来是唤醒,也可以通过其他进程信号或时钟中断唤醒,进入运行队列。Linux 使用TASK_INTERRUPTIBLE 宏表示此状态。
       深度睡眠态:其和浅度睡眠基本类似,但有一点就是不可其他进程信号或时钟中断唤醒。Linux 使用TASK_UNINTERRUPTIBLE 宏表示此状态。
       暂停状态:进程暂停执行接受某种处理。如正在接受调试的进程处于这种状态,Linux 使用TASK_STOPPED 宏表示此状态。
       僵死状态:进程已经结束但未释放PCB,Linux 使用TASK_ZOMBIE 宏表示此状态。
我们可以来看下以上宏在内核中的定义:
        #define TASK_RUNNING            0
 183 #define TASK_INTERRUPTIBLE      1
 184 #define TASK_UNINTERRUPTIBLE    2
 185 #define __TASK_STOPPED          4
 186 #define __TASK_TRACED           8
 187 /* in tsk->exit_state */进程的退出状态
 188 #define EXIT_ZOMBIE             16
 189 #define EXIT_DEAD               32
 190 /* in tsk->state again */我理解为进程的唤醒状态
 191 #define TASK_DEAD               64
 192 #define TASK_WAKEKILL           128
 193 #define TASK_WAKING             256
 194 #define TASK_STATE_MAX          512
 195
 196 #define TASK_STATE_TO_CHAR_STR "RSDTtZXxKW"

以下是LINUX进程间状态转换和内核调用图解

      好了,现在对进程的基本状态及转换做了一定介绍,你了解了吗?

进程的三种状态及转换相关推荐

  1. 进程的三种状态及其转换

    1.进程的三种基本状态: 进程在运行中不断地改变其运行状态.通常,一个运行进程必须具有以下三种基本状态:  ①就绪(Ready)状态  当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便 ...

  2. 进程的三种状态以及转换

    进程的三种基本状态: 1.就绪状态:当进程被分配到除了cpu以外的资源的时候,就会处于就绪状态. 2.运行状态:当获得足够资源之后,通过cpu调度,使得程序运行之后,称为运行状态. 3.阻塞状态:正在 ...

  3. 操作系统:进程的三种状态

    进程的三种状态 1.   就绪状态:进程获得了除了CPU之外的所有的必要资源,只要获得CPU就可以立即执行,此时的进程处于就绪态. 2.   运行状态:进程已经获得CPU,正在运行,在多处理其系统中, ...

  4. hibernate 三种状态的转换

    一.遇到的神奇的事情 使用jpa操作数据库,当我使用findAll()方法查处一个List的对象后,给对这个list的实体进行了一些操作,并没有调用update 或者 saveOrUpdate方法,更 ...

  5. SSH框架之-hibernate 三种状态的转换

    一.遇到的神奇的事情 使用jpa操作数据库,当我使用findAll()方法查处一个List的对象后,给对这个list的实体进行了一些操作,并没有调用update 或者 saveOrUpdate方法,更 ...

  6. 进程的三种状态及相互之间的转换

    1.进程的三种基本状态 进程在运行中不断地改变其运行状态.通常,一个运行进程必须具有以下三种基本状态.  就绪(Ready)状态 当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行 ...

  7. 59.进程的三种状态,以及之间转换的过程

    进程的三态图 哪三态? 就绪.运行.阻塞. 就绪<---->运行 运行---->阻塞---->就绪 1.就绪---->运行 进程调度程序为之分配了处理机后 进程调度程序 ...

  8. 进程的三个状态的转换

    一个进程在运行期间,不断地从一种状态转换到另一种状态,它可以多次处于就绪状态和执行状态,也可以多次处于阻塞状态. (1) 就绪->执行 就绪状态是指进程获得了调度程序为之分配的除了CPU时间之外 ...

  9. 进程的并发与并行,三种状态

    进程的特征: 1.动态性,是进程最基本的特性,可表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡,因而进程由一定的生命期. 2.并发性,是进程的重要特征,同时也是OS的重要特 ...

最新文章

  1. R语言ggplot2可视化分组的重叠图实战:grouped overlay plot
  2. 复杂查询练习_数据分析之路——复杂查询(4)
  3. JCO_(配置连接池)
  4. 在同一个Linux上配置多个git账户
  5. Java原来如此-随机数
  6. centos 删除crontab_centos下crontab的使用
  7. 第八篇:Spring Boot整合Thymeleaf_入门试炼04
  8. 收藏 | EfficientNet模型的完整细节
  9. asp教室使用_为什么要在教室中使用开放式硬件?
  10. 露天影院网站_为什么要在露天工作?
  11. 有关于iphone 音频 录制 播发
  12. redis复制key的数据_Redis常见面试题
  13. SSM中log4j2.xml配置文件的各项标签
  14. 工程技术学院c语言题库,2016年天津农学院工程技术学院C语言程序设计(同等学力加试)复试笔试最后押题五套卷...
  15. 基于深度学习的图像超分论文推荐
  16. sko.GA实现遗传算法的源码解析
  17. freeBSD的VNET_DEFINE跟SYSCTL_VNET_INT
  18. Adobe Audition CS6原生支持ape和flac
  19. MBA-day11数学-浓度问题-练习题
  20. 用Google Brain的机器学习项目:Magenta,教神经网络学抖音小姐姐作曲。

热门文章

  1. matlab 绘图常用命令
  2. win10解压安装mysql方法及遇见的问题(缺少MSVCR120.dll文件、服务无法启动)
  3. 【计算机考研408】2023考研408相关题目预测总结
  4. 运营都会写分析报告了!数据分析该怎么办?
  5. SAS PROC SQL基础操作语句
  6. keil编程时 error: #65: expected a “;“ 的解决办法
  7. snakeyaml 简介、中文文档、中英对照文档 下载
  8. 计算机文化基础(高职高专版 第十一版)第五章答案
  9. 【博弈论】HDU 2188
  10. 【中国寒龙出品】VB程序设计视频教程讲座第二十七课,欢迎各位订阅感谢朋友们的支持...