天天看点

【Linux】Linux进程管理之task_struct结构体

一、描述进程—-PCB

进程:

  • 一个正在执行中的程序;
  • 一个正在计算机上执行的程序实例;
  • 能分配给处理器并由处理器执行的实体;
  • 一个具有以下特征的活动单元:一组指令序列的执行,一个当前状态和相关的系统资源集合;

进程内容:

  • 标识符:跟这个进程相关的唯一标识符,用来区别其他进程。
  • 状态:如果进程正在执行,那么进程处于执行态。
  • 优先级:相对于其他进程的优先级。
  • 程序计数器:程序中即将被执行的下一条指令的地址。
  • 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享内存块的指针。
  • 上下文数据:进程执行时处理器的寄存器中的数据。
  • I/O状态信息包括显式的I/O请求,分配给进程的I/O设备(例如磁带驱动器)和被进程使用的文件列表等。
  • 审计信息:可包括处理器时间总和,使用的时钟数总和,时间限制,审计号等。

进程状态:

对于一个被执行的程序,操作系统会为该程序创建一个进程或任务。 从处理器的角度看,它在指令序列中按照某种顺序执行指令,该顺序根据程序计数器中不断变化的值来指示,程序计数器可能指向不同进程中不同部分的程序代码,从程序自身角度看,它的执行设计程序中的一系列指令。

可以通过列出为该进程而执行的指令序列来描述单个进程的行为,这样的序列称为轨迹。可以通过给出各个进程的轨迹是如何被交替的来描述处理器的行为。

描述进程:

  • 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
  • 课本上称之为PCB(process control block),Linux操作系统下的PCB是:task_struct。

task_struck PCB的一种:

  • 在Linux中描述进程的结构体叫做task_struct。
  • task_struck是Linux内核的一种数据结构,它会被装载到RAM(内存)里并包含着进程的信息。

二、task_struck内容分类

  • 状态:进程的执行状态(执行态,就绪态,挂起态,停止态,僵死态)。
  • **调度信息:**Linux调度进程所需要的信息。一个进程可能是普通的或实时的,并且具有优先级。实时进程在普通进程前被调度,并且在每一类中使用相关的优先级。计数器记录允许进程执行的时间量。
  • 标识号:每个进程有一个唯一的进程标识号,还有用户标识号和组标识号。组标识号用于给一组用户指定资源访问特权。
  • **进程间通信:**Linux支持UNIX SVR4中的IPC机制。
  • 链接:每个进程都有一个到它的父进程的链接以及到它的兄弟进程(与它有相同父进程)的链接和到所有子进程的链接。
  • 时间和计时器:包括进程创建时间和进程所消耗的处理器时间总量。一个进程可能还有一个或多个间隔计时器,它通过一个系统调用定义一个间隔计时器,其结果是当计时器期满时,给进程发送一个信号。计时器可以单独使用或周期使用。
  • 文件系统:包括指向被该进程打开的任何文件的指针和指向该进程当前目录和根目录的指针。
  • 虚存:定义分配给该进程的虚存空间。
  • 处理器专用上下文:构成该进程上下文的寄存器和栈信息。
  • 运行:这个状态对应于两个状态。一个运行进程或者正在执行或准备执行。
  • 可中断:这是一个阻塞状态,此时进程正在等待一个事件(如一个I/O操作)的结束,一个可用的资源或另一个进程的信号。
  • 不可中断:这是另一种阻塞状态。它与可中断状态的区别是,在不可中断状态下,进程正在直接等待一个硬件条件,因此不会接受任何信号。
  • 停止:进程被终止,并且只能由来自另一个进程的被动动作恢复。例如,一个正在被调试的进程可以被置于停止状态。
  • 僵死:进程已被终止,但由于某些原因,在进程表中仍然有它的任务结构。

继续阅读