Day5 process 的生命周期

前言

昨天讲了process 怎麽来的,今天来讲讲process 的生命周期。

process 的生命周期(理论)

上图来自Operating System Concepts

在作业系统的圣经上,关於作业系统的行程的各种状态,细讲各个state以及state 转移的
new: 创立新的新行程
ready: 行程所需的资料已经移入记忆体,等待获得CPU资源
waiting: 行程因为等待某个资源暂时移出CPU
running: 行程正在CPU运行中
terminated: 行程结束

process 的生命周期(实际)

但是linux 又来了,linux 跟教科书写的资讯又不一样了! 实作与理论总是有一些落差的!在linux中没有所谓的 ready state,而是将ready state跟 running state合并,统一变成 Running state ,示意图如下。

TASK_RUNNING: linux 中将理论里的 ready 与 running混合成为单独的 TASK_RUNNING state,上图中右边的 TASK_RUNNING代表实际正在运行的行程,左边则是正在等待被指定CPU的行程,只是对linux来说这两种状态并没有特别区分,而是统一用 TASK_RUNNING 标记。

TASK_INTERRUPTIBLE/TASK_UNINTERRUPTIBLE: 当行程需要执行IO或是需要等待条件满足时,此时的等待时间是无法预估的,因此行程的状态会转移成TASK_INTERRUPTIBLE / TASK_UNINTERRUPTIBLE,这两个状态的差别就跟他的名字一样, TASK_INTERRUPTIBLE在条件满足/收到未被屏蔽的讯号时能够返回等待队列中,反之TASK_UNINTERRUPTIBLE并不能被讯号唤醒,只能够在条件满足时返回运行状态。

_TASK_STOPPED: SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOUT等信号会将行程暂时停止,进入_TASK_STOPPER的状态。
EXIT_ZOMBIE:行程已经不在运行队列中,只是记忆体仍然保有该行程的资料,尚未处理。

以上的定义出现在 /include/linux/sched.h

reference: linxu中进程的状态


<<:  [Day05] python 的第一个模型

>>:  selenium爬虫:使用xpath

从零开始学3D游戏开发 Roblox Studio 简介 Part.1

今天我们就从 Roblox Studio 的基本介面开始学起吧 PS:影片会在下午 6:00 准时上...

[Day6] 学 Bootstrap 是为了走更长远的路 ~ Grid 篇 (1)

前言 今天终於来到本系列文第一个重头戏, 也是 Bootstrap 非常实用的~~~~~ Grid ...

Day19 - Interpreting Machines - 2 :使用 interpret API

1. 写好 Machine Config 传入 createMachine API const do...

Day 6 Capsule的应用(下)

前言 今天把昨天讲的论文做一个总结,明天就要开始介绍attention了 A2D dataset 这...

【第三十天 - 结尾】

不知不觉来到铁人赛的尾声了,此次系列文的初衷除了自我复习与归纳之前参加比赛的经验,也希望尽量统整一...