博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程的状态(转)
阅读量:4617 次
发布时间:2019-06-09

本文共 1515 字,大约阅读时间需要 5 分钟。

原文:http://blog.chinaunix.net/uid-26126915-id-2948970.html

为了对进程从产生到消亡的整个过程进行跟踪和描述,就需要定义各种进程的各种状态并制定相应的状态转换策略,以此来控制进程的运行。

      不同的操作系统对进程的状态解释不同,但是最基本的状态都是一样的。包括一下三种:
       运行态:进程占用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进程间状态转换和内核调用图解
      好了,现在对进程的基本状态及转换做了一定介绍,你了解了吗?

转载于:https://www.cnblogs.com/loveyouyou616/p/7839993.html

你可能感兴趣的文章
Python 动态语言
查看>>
linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )...
查看>>
弹性盒布局
查看>>
Angular2 -- 生命周期
查看>>
重写与重载,背了八百遍终于明白了
查看>>
SQL逻辑查询处理顺序特别提醒
查看>>
HttpClient 教程 (一)
查看>>
【BZOJ】4671: 异或图
查看>>
【LOJ】#2115. 「HNOI2015」落忆枫音
查看>>
linux下open too many files错误Socket未正确关闭的处理方法
查看>>
chrome 命令
查看>>
数据库存储过程和触发器
查看>>
dispatch_source_t
查看>>
洛谷P1569属牛的抗议 超级强力无敌弱化版
查看>>
POJ3889Fractal Streets
查看>>
过滤重复值和取最近的时间
查看>>
机器学习面试--朴素贝叶斯
查看>>
回首过去我已无力改变,那就从此刻起努力吧!!!( 2015年10月23日)
查看>>
[转] 宏点滴
查看>>
码农提高工作效率
查看>>