Linux系统—进程状态

为了对进程从产生到消亡的这个动态变化过程进行捕获和描述,就需要定义进程各种状态并制定相应的状态转换策略,以此来控制进程的运行。
因为不同的操作系统对进程的管理方式和对进程的状态解释可以不同,所以不同的操作系统中描述进程状态的数量和命名也会有所不同,但最基本的进程状态有以下三种,
(1)运行态:进程占有CPU,并在 CPU上运行。
(2)就绪态:进程已经具备运行条件,但由于 CPU忙而暂时不能运行。
(3) 阻塞态(或等待态):进程因等待某种事件的发生而暂时不能运行(即使CPU空闲,进程也不可运行)。
进程在生命周期内处于且仅处于三种基本状态之一。
进程的状态转换
这三种状态之间有以下4种可能的转换关系。
(1)运行态→阻塞态:进程发现它不能运行下去时发生这种转换。这是因为进程发生IO请求或等待某件事情。
(2)运行态→就绪态:在系统认为运行进程占用 CPU
的时间已经过长,决定让其他进程占用CPU 时发生这种转换。这是由调度程序引起的。调度程序是操作系统的一部分,进程甚至感觉不到它的存在。
(3) 就绪态→运行态。运行进程已经用完分给它的CPU时间,调度程序从处于就绪态的进程中选择一个投入运行。
(4)阻塞态→就绪态:当一个进程等待的一个外部事件发生时(例如输人数据到达),则发生这种转换。如果这时没有其他进程运行,则转换(3)立即被触发,该进程便开始运行。
从操作系统的原理知道,进程一般有三种基本状态执行态、就绪态和等待态,但是在具体操作系统的实现中,设计者根据具体需要可以设置不同的状态。
在Linux的设计中,考虑到任一时刻在CPU上运行的进程最多只有一个,而准备运行的进程可能有若千个,为了管理上的方便,把就绪态和运行态合并为一个状态叫就绪态,这样系统把处于就绪态的进程放在一个队列中,调度程序从这个队列中选中一个进程投人运行。而等待态又被划分为两种,除此之外,还有暂停状态和僵死状态,这几个主要状态描述如下。
(1)就绪态(TASK_ RUNNING):正在运行或准备运行,处于这个状态的所有进程组成就绪队列。
(2)睡眠(或等待)态:分为浅度睡眠态和深度睡眠态。
①浅度睡眠态(TASK_INTERRUPTIBLE):进程正在睡眠(被阻塞),,等待资源有效时被唤醒,不仅如此,也可以由其他进程通过信号或时钟中断唤醒。
②深度睡眠态(TASK_UNINTERRUPTIBLE):与前一个状态类似,但其他进程发来的信号和时钟中断并不能打断它的熟睡。
(3)暂停状态(TASK STOPPED):进程暂停执行,比如,当进程接收到如下信号后,进入暂停状态。
① SIGSTOP——停止进程执行。
② SIGTSTP——从终端发来信号停止进程。
③ SIGTTIN——来自键盘的中断。
④ SIGTTOU——后台进程请求输出。
(4)僵死状态(TASK_ZOMBIE):进程执行结束但尚末消亡的一种状态。此时,进程已经结束且释放大部分资源,但尚末释放其PCB。
图给出了Linux进程状态的转换及其所调用的内核函数。
Linux进程状态的转换如图所示,通过 fork()创建的进程处于就绪状态,其PCB 进人就绪队列,如果调度程序 schedule()运行,则从就绪队列中选择一进程投入运行而占有CPU。在进程执行的程中,因为输入/输出等原因调用inerruptible_sleep_on()或者sleep_on(),则进程进入浅度睡眠或者深度睡眠。由于进程进入睡眠状态放弃CPU,因此调用调度程序schedule()重新从就绪队列中调用一个进程运行。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪耀大叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值