一,进程概念
进程是正在执行的程序或命令,每个进程都是一个运行的实体或程序的执行实例,有自己的地址空间,并占用一定系统资源;从内核视角来看,是担当分配系统资源(CPU时间、内存)的实体;
- 即在操作系统中,所有可执行的程序或命令都会产生进程(如简单的命令ls、touch等,执行完即结束,如httpd启动后就一直驻留在系统中的常驻内存进程);
- 程序在执行时,执行者的权限和属性均会载入内存,操作系统会对进程分配一个ID,称为进程ID(即PID);
- 进程可以产生新的进程,称此进程为父进程,新进程为子进程,如bash中执行的ls、touch等命令(bash父进程、ls/touch子进程);即子进程是依赖父进程产生的,若无父进程,子进程也就不存在;
进程控制块 PCB
操作系统负责管理所有进程,包括进程的创建和消亡、进程状态的转换,及分配和回收进程所需的资源等;为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block);
- PBC是进程实体的一部分,是操作系统中最重要的记录性数据结构;
- PBC是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消;
操作系统创建进程时,会额外申请一块内存(即进程控制块),用于存储、管理和控制进程的信息;由操作系统负责管理和维护,进程和进程控制块数量是对应的;Linux系统的PCB/task_struct;
- task_struct(PCB的一种),描述进程的结构体;
- task_struct 是Linux内核的一种数据结构,会被载入到内存并包含进程信息;
- 运行在系统里的进程,都以task_struct链表形式存在予内核内;
task_struct 内容
- 标识符,描述进程的唯一标识符,区别其他进程;
- 状态,任务状态、退出代码、退出信息等;
- 优先级,相当于其他进程的优先级;
- 程序计数器,即将被执行下一指令的地址;
- 内存指针,包括程序代码和进程相关数据的指针,及与其他进程共享的内存块指针;
- 上下文数据,进程执行时寄存器中的数据;
- I/O状态信息,包括显式的I/O请求,分配给进程的I/O设备和被进程使用的文件列表;
- 记账信息,可能包括处理器时间总和,使用时钟数总和,时间限制,记账号等;
- 其他信息;