1、进程生命周期

Linux操作系统属于多任务操作系统,系统中的每个进程能够分时复用CPU时间片,通过有效的进程调度策略实现多任务并行执行。而进程在被CPU调度运行,等待CPU资源分配以及等待外部事件时会属于不同的状态。下图描述了进程之间的状态关系:

  • 运行状态:表示进程此刻正在运行。注,图示中的“运行”状态,并不对应TASK_RUNNING状态,TASK_RUNNING实际表示当前进程被填入CPU就绪队列,属于图示“等待”状态,后续在源码分析中会详细说明;
  • 等待状态:表示进程外部事件已满足,并已被分配CPU资源,但由于当前CPU被其他进程占用,尚未被调度;
  • 睡眠状态:表示进程需要等待外部事件满足方可被CPU调度。这里外部事件,比如在阻塞IO环境下,服务端进程等待客户端进程发送TCP三路握手连接请求;
  • 终止状态:表示进程退出事件发生,进程所属用户地址空间与内核地址空间被释放。
  • 对于进程终止的终止,这里有种特殊情况,父进程需要接收子进程退出时发出的SIGCHILD信号,完成对子进程task_struct进程结构体的释放任务,若父进程未能完成上述处理,则会导致名义上子进程已退出,但实际内核进程链表中仍然保留子进程信息,即僵尸进程。在Linux操作系统中,采用ps命令可以看到僵尸进程。(简述一下ps命令的原理:proc文件系统中以进程pid为名保存了系统中的进程信息,其通过遍历内核进程链表的方式获取进程信息,ps命令返回proc文件系统下的进程信息)

2、task_struct进程结构体

在Linux操作系统下,对进程的操作,都是通过task_struct数据结构来实现的。

结构体部分信息解释如下:

  • volatile long state,描述了进程的不同状态,对应了进程生命周期。
  • 若干struct list_head结构体,定义了进程内核链表指针,进程父进程,子进程等。
  • struct mm_struct *mm  进程地址空间。关于这一块内容涉及到了Linux内存管理,会在分析Linux内存管理时详细介绍。
  • Pid_t pid  进程ID。Linux操作系统中进程的唯一标识。注,进程页目录基地址也可以作为进程的唯一标识,用于访问进程地址空间。
  • Char comm[TASK_COMM_LEN] 进程名称。
  • Int prio, static_prio, normal_prio是与进程调度相关的优先级。具体的描述在分析到Linux进程调度的过程中再详细说明。

Linux进程调度与源码分析(二)——进程生命周期与task_struct进程结构体的更多相关文章

  1. openVswitch(OVS)源码分析之工作流程(哈希桶结构体的解释)

    这篇blog是专门解决前篇openVswitch(OVS)源码分析之工作流程(哈希桶结构体的疑惑)中提到的哈希桶结构flex_array结构体成员变量含义的问题. 引用下前篇blog中分析讨论得到的f ...

  2. Linux进程调度与源码分析(一)——简介

    本系列文章主要是近期针对Linux进程调度源码进行阅读与分析后的经验总结,分析过程中可能结合部分Linux网络编程的相关知识以便于理解,加深对Linux进程调度的理解和知识分享. 本系列文章主要结合L ...

  3. Linux进程调度与源码分析(三)——do_fork()的实现原理

    用户层的fork(),vfork(),clone()API函数在执行时,会触发系统调用完成从用户态陷入到内核态的过程,而上述函数的系统调用,最终实现都是通过内核函数do_fork()完成,本篇着重分析 ...

  4. Spring5源码分析之Bean生命周期

    Spring Bean生命周期的构成 Bean的完整生命周期经历了各种方法调用,这些方法可以划分为以下几类: Bean自身的方法: 这个包括了Bean本身调用的方法和通过配置文件中<bean&g ...

  5. linux调度器源码分析 - 初始化(二)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 上期文章linux调度器源码分析 - 概述(一)已经把调度器相关的数据结构介绍了一遍,本篇着重通过代码说明 ...

  6. linux调度器源码分析 - 运行(四)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 之前的文章已经将调度器的数据结构.初始化.加入进程都进行了分析,这篇文章将主要说明调度器是如何在程序稳定运 ...

  7. v78.01 鸿蒙内核源码分析(消息映射篇) | 剖析LiteIpc(下)进程通讯机制 | 百篇博客分析OpenHarmony源码

    百篇博客分析|本篇为:(消息映射篇) | 剖析LiteIpc(下)进程通讯机制 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析( ...

  8. Fresco 源码分析(二) Fresco客户端与服务端交互(1) 解决遗留的Q1问题

    4.2 Fresco客户端与服务端的交互(一) 解决Q1问题 从这篇博客开始,我们开始讨论客户端与服务端是如何交互的,这个交互的入口,我们从Q1问题入手(博客按照这样的问题入手,是因为当时我也是从这里 ...

  9. 框架-springmvc源码分析(二)

    框架-springmvc源码分析(二) 参考: http://www.cnblogs.com/leftthen/p/5207787.html http://www.cnblogs.com/leftth ...

随机推荐

  1. set(gcf,'DoubleBuffer','on')以及sort

    设置的目的是为了防止在不断循环画动画的时候会产生闪烁的现象,而这样便不会了.在动画的制作比较常用. Matlab排序函数-sort sort函数的调用格式: sort(X) 功能:返回对向量X中的元素 ...

  2. servlet的service特性就是http协议的特性 即连接完就断开

    servlet的service特性就是http协议的特性 即连接完就断开

  3. BZOJ 1797 最小割(最小割割边唯一性判定)

    问题一:是否存在一个最小代价路径切断方案,其中该道路被切断? 问题二:是否对任何一个最小代价路径切断方案,都有该道路被切断? 现在请你回答这两个问题. 最小割唯一性判定 jcvb: 在残余网络上跑ta ...

  4. 【题解】51nod 1806 wangyurzee的树

    看这道题目懵逼了好久, \(m <= 17\) 一眼容斥,然而并没有想到怎么求出生成树的个数.然后灵光一闪——我不是学过一个叫Prüfer编码的东西嘛?!那就完美解决啦~ Prüfer编码就是将 ...

  5. Vue推荐资料

    推荐博文(我是看过,才敢说的偶): 基础教学: 菜鸟语法教程:https://cn.vuejs.org/v2/guide/syntax.html  http://www.runoob.com/vue2 ...

  6. 51nod 1217 Minimum Modular(数论+暴力)

    根据抽屉原理显然m>=(n-K) 于是在[n-K,max(a1..an)+1]的范围中枚举m 考虑K=0的做法... 如果a[i]≡a[j](mod m),则有m|(a[i]-a[j]),只要O ...

  7. CF724E Goods transportation

    最大流既视感 然后 TLEMLE既视感 然后 最大流=最小割 然后 dp[i][j]前i个点j个点在S集合,最小割 然后 dp[i][j]=min(dp[i-1][j]+p[i]+j*c,dp[i-1 ...

  8. Selenium判断获取的元素是否可见(display:none)

    在爬虫中需要自动登陆并判断是否登陆成功,如果登陆错误的话还需要知道错误提示信息,此时需要判断提示信息是否可见 if self.element_exist_xpath('//*[@id="bu ...

  9. 基于Bootstrap的遮罩层,带有加载提示

    1.body中的html <div class="modal fade" id="loadingModal"> <div style=&quo ...

  10. Java中的String为什么是不可变的? — String源码分析

    原文地址:http://www.importnew.com/16817.html 什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为 ...