进程以及Linux中的进程相关概念(二)

4.进程对程序运行过程的描述

       程序的运行是一个动态的过程,我们人类对动态过程的描述都是通过采样的方法来实现的。所谓采样,就是获取一些离散的样本,然后连续播放以描述动态的过程。

       为了对进程从产生到消亡的这个动态变化的过程进行捕获和描述,就需要定义进程各种状态并制定相应的状态转换策略,从而实现对进程的控制。在操作系统理论中,引入了三种状态用于概括程序的行为。这三种状态是:

       运行态: 进程占有CPU,并在CPU上运行

       就绪态:进程已经具备运行条件,但由于CPU忙而暂时未能运行
       阻塞态: 进程因等待某种事件的发生而暂时不能运行
 
           它们之间的转换如下图所示:
          
 
                上述的这三种基本状态和它们之间的四种基本转换是比较简单的,当然也只是理论上的。

 

5.Linux中的进程状态及转换

       Linux中引入了四类六种进程状态:

       就绪态(TASK_RUNNING):正在运行或准备运行。

       睡眠态

                  –浅度睡眠(TASK_INTERRUPTABLE)
                  –致命睡眠(TASK_KILLABLE
                  –深度睡眠( TASK_UNITERRUPTABLE
       暂停态(TASK_TRACED)
       僵死态(TASK_DEAD - EXIT_ZOMBIE)
    

           Linux设计中,考虑到任一时刻在一个CPU上运行的进程最多只有一个,而准备运行的进程可能有若干,为了管理上的方便,把就绪态和运行态合并为一个状态叫“就绪态”,把所有就绪态进程放进一个队列中,调度程序从这个队列中选中一个进程投入运行。

       等待态根据被唤醒条件划分为三种:

       浅度睡眠的进程在等待的资源有效时会被唤醒,也可以被信号或时钟中断唤醒;

       深度睡眠的进程只有在等待的资源有效时会被唤醒;

       致命状态类似于深度睡眠,但可以响应一些致命信号,该状态在Linux2.6.25版本内核中被引入。

       向进程发送一个SIGSTOP信号,它就会因响应该信号而进入暂停状态(TASK_STOPPED)(除非该进程本身处于TASK_UNINTERRUPTIBLE状态而不响应信号)。(SIGSTOP与SIGKILL信号一样,是非常强制的。不允许用户进程通过signal系列的系统调用重新设置对应的信号处理函数。)
       向进程发送一个SIGCONT信号,可以让其从TASK_STOPPED状态恢复到TASK_RUNNING状态。
       当进程正在被跟踪时,它处于TASK_TRACED这个特殊的状态。“正在被跟踪”指的是进程暂停下来,等待跟踪它的进程对它进行操作。比如在gdb中对被跟踪的进程下一个断点,进程在断点处停下来的时候就处于TASK_TRACED状态。而在其他时候,被跟踪的进程还是处于前面提到的那些状态。

        对于进程本身来说,TASK_STOPPED和TASK_TRACED状态很类似,都是表示进程暂停下来。
        而TASK_TRACED状态相当于在TASK_STOPPED之上多了一层保护,处于TASK_TRACED状态的进程不能响应SIGCONT信号而被唤醒。只能等到调试进程通过ptrace系统调用执行PTRACE_CONT、PTRACE_DETACH等操作(通过ptrace系统调用的参数指定操作),或调试进程退出,被调试的进程才能恢复TASK_RUNNING状态。

        僵死状态:进程执行结束且释放了大部分资源(几乎所有的内存空间,没有任何可执行代码),也不能被调度,但尚未释放其PCB。而僵死进程的PCB中保存着对程序员和系统管理员非常重要的很多信息:进程如何死亡?这个进程占用的总系统CPU时间和总用户CPU时间分别是多少?发生缺页中断的次数和收到信号的数目又是多少?

 
           下面这张图示意了Linux中这几种进程状态之间的转换关系

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值