Linux内核------进程的基本知识

进程:

传统上,Linux操作系统下运行的应用程序,服务器和其他程序都称为进程。当然进程不仅仅表示一段处于执行期的可执行代码,还包括其他资源,例如打开的文件,挂起的信号和内核内部数据等。其实还有个概念叫,线程或者说轻量级进程,不过在Linux中线程和进程其实是类似的。可以把线程看做和其他进程共享某些数据和资源的进程。

进程的表示:

通常进程是由一个叫task_struct的结构表示的,或者叫进程描述符(process descriptor)。它包含了内核管理进程的所有信息。task_struct的很多成员并非简单的类型变量,而是指向其他数据结构的指针。其实task_struct中有很多成员,将进程和各个子系统连接起来。由于数量是在太庞大,想立刻搞清楚的话,那基本就在细节里彻底迷失自己啦。但是可以把它们分成很多部分,每个部分表示了进程的一个特定方面。下面就来看看它们吧。

1.状态和执行信息:进程ID(PID),到父进程及其他有关进程的指针等等。

2.有关已经分配的虚拟内存的信息。

3.进程身份凭据:用户ID,组ID和权限等等

4.使用的文件的信息

5.线程信息记录该进程特定于CPU的运行时间数据(没看懂是啥意思....)

6.进程间通信的有关信息

7.该进程所用的信号处理程序,用来响应到来的信号

其中进程标示符,即PID,是内核对进程的唯一标识。当有一个新的进程创建的时候,系统就会给它分配唯一的一个PID进行标示。

进程的状态:

在task_struct中的state域描述了进程当前的状态。每个进程必然处于下列的五种状态中的一种。

1.TASK_RUNNING:即进程正在执行或者在运行队列中等待执行

2.TASK_INTERRUPTIBLE:进程处于睡眠状态,正在等待某事件或资源,一旦收到内核发出的事件已发生的信号,状态即变为TASK_RUNNING

3.TASK_UNINTERRUPTIBLE:内核指示而停用的睡眠进程,不能被外部信号唤醒,只能由内核亲自唤醒

4.TASK_STOPPED:进程停止执行。如调试期间接收到任何信号都会使进程进入这种状态

5.TASK_TRACED:被其他进程跟踪的进程

还有一种所谓的僵尸状态,即EXIT_ZOMBIE。这种程序已经死亡了,因为它的资源,例如内存,和外设的连接等都已经被释放了,但是它们在进程表中仍然存在,所以它们并没有真正死亡,具体为啥嘛...以后再说

进程家族树:

在Linux中树形结构是普遍存在的,例如文件系统以及现在要说的进程。其中init进程是整个进程树的根,所有进程都直接或间接来自于该进程。而每个进程几乎都有自己的孩子进程和父进程。进程具体是怎么创建以及撤销的,那也是后面的事啦。总之进程树和文件树类似,init就是根目录,而一个进程创建子进程就相当于在一个目录下创建新的目录,撤销当然是类似的。

好啦,关于进程的最基本的知识差不多就是这些啦!更复杂的事情等到以后再说吧!

注:本篇文章的内容(包括以后的类似文章)主要参考Love的《Linux内核设计于实现》以及WolfganglMauerer的《深入Linux内核架构》。由于自己在阅读学习的过程中感觉各本书的侧重点以及深入程度都不一样,给初学者带来不小麻烦。所以在这里把自己所学的总结一下,尽量给出内核知识比较精简的知识结构,以便于更好的从宏观上把握,确保不会迷失于繁琐的细节。总的说来,主要是帮助自己梳理了知识,加深了理解吧。如果有帮助到大家,那是最令我开心的事情了!

Linux内核------进程的基本知识,布布扣,bubuko.com

时间: 2024-10-05 08:00:14

Linux内核------进程的基本知识的相关文章

linux内核——进程管理

在讲进程之前先说一下进程的堆栈的吧: 1.进程的堆栈 内核在创建进程的时候,在创建task_struct的同时,会为进程创建相应的堆栈.每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间.当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈:当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈. 2.进程用户栈和内核栈的切换 当进程因为中断或者系统调用而陷入内核态之行时,进程所使用的堆栈也要从用户栈转到内核栈. 进程陷

Linux内核——进程管理与调度

进程的管理与调度 进程管理 进程描述符及任务结构 进程存放在叫做任务队列(tasklist)的双向循环链表中.链表中的每一项包含一个具体进程的所有信息,类型为task_struct,称为进程描述符(process descriptor),该结构定义在<linux/sched.h>文件中. Linux通过slab分配器分配task_struct结构,这样能达到对象复用和缓存着色(cache coloring)的目的.另一方面,为了避免使用额外的寄存器存储专门记录,让像x86这样寄存器较少的硬件体

linux内核--进程与线程

http://blog.csdn.net/yusiguyuan/article/details/12154823 在<linux内核设计与实现>中第三章讲解了进程管理,在关于进程和线程的概念之间的区别还是由点模糊.书中说道:     进程就是处于执行期的程序.但进程并不仅仅局限于一段可执行程序代码.通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,持利器状态,一个或多个具有内存映射的内存地址空间以及一个或多个执行线程,当然还包括用来存放全局变量的数据段等.     然而每一个线

Linux的进程及作业管理知识(上)

本章介绍一些linux进程管理基础知识和一些常用的工具 Linux进程的概念,这个一定要和程序区别开来: Process: 是运行中的程序的一个副本,是被载入内存的一个指令集合.进程ID(Process ID,PID)号码被用来标记各个进程 UID.GID.和SELinux语境决定对文件系统的存取和访问权限,这些属性通常从执行进程的用户来继承,并且进程存在生命周期 centos linux第一个进程通常是init或者systemd,它是所有进程的父进程,ID为1其他进程都是由父进程创建.进程类型

linux内核--进程管理

进程就是处理执行期的程序(目标代码存放在某种存储介质上).查进程并不仅仅局限于一段可执行程序代码.通常进程包括: 打开的文件 挂起的信号 内核内部数据 处理器状态 地址空间 一个或多个执行线程 存放全局变量的数据段 对linux而言,线程是特殊的进程,并不特别区分.在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存.虽然实际上可能是许多进程正在分享同一个处理器,但虚拟处理器给进程一种假象,让这些进程觉得自己在独享处理器.而虚拟内存让进程在获取和使用内存时觉得自己拥有整个系统的所有内存资

linux内核——进程,轻量级进程,线程,线程组

1.进程.轻量级进程.线程.线程组之间的关系 2.及它们的标识相关说明 一.进程.轻量级进程.线程.线程组之间的关系 借助上图说明: 进程P0有四条执行流,即线程, 主线程t0是它的第一个线程,且与进程P0相关联, 之后衍生出t1.t2.t3三个线程,这三个线程与轻量级进程P1.P2.P3一一关联, 所有的进程.轻量级进程.线程组成了线程组. 轻量级进程也是进程,只不过它与某进程的某特定线程相关联. 二.它们的标识相关说明 pid是进程标识符,tgid是线程组标识符 每个进程都有自己的pid,如

linux内核---进程通信---消息队列

转自:https://blog.csdn.net/ljianhui/article/details/10287879 原文地址:https://www.cnblogs.com/qing1991/p/10182521.html

Linux内核剖析 之 进程简介

1.概念 1.1  什么是进程? 进程是程序执行的一个实例,可以看作充分描述程序已经执行到何种程度的数据结构的汇集. 从内核观点看,进程的目的就是担当分配系统资源(CPU时间,内存等)的实体. 我们熟悉的fork()库函数,它有两种用法: (1).一个父进程希望复制自己,使父子进程执行不同的代码段,常用于网络服务程序. (2).一个进程要执行一个不同的程序,fork()后立即exec(),如shell. 1.2  什么是线程? 有时候,一个进程希望有多个执行流,如一款麻将游戏,三个由电脑控制的人

Linux内核分析——进程的描述和进程的创建

Linux内核分析——进程的描述和进程的创建 20135111李光豫 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验内容 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h#1235: 分析fork函数对应的内核处理过程sys_clone,理解创建一个新进