进程
概念
进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。
进程和程序的区别
- 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。
- 程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。
- 进程更能真实地描述并发,而程序不能;
- 进程是由进程控制块、程序段、数据段三部分组成;
进程具有创建其他进程的功能,而程序没有。 - 同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程,也就是说同一程序可以对应多个进程。
- 在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单元都是进程。
进程的描述
进程的信息被放在一个叫做进程控制块-PCB的数据结构中,可以理解为进程属性的集合,每一个进程都有属于进程本身的进程编号-PID,并且拥有三种状态分别是就绪态、运行态和阻塞态。
在linux中描述进程的结构体叫做task_struct。task_struct是linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。标⽰示符: 描述本进程的唯⼀一标⽰示符,⽤用来区别其他进程。
task_struct内容分类
- 状态: 任务状态,退出代码,退出信号等。
- 优先级: 相对于其他进程的优先级。
- 程序计数器: 程序中即将被执⾏行的下⼀一条指令的地址。
- 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
- 上下⽂文数据: 进程执⾏行时处理器的寄存器中的数据[休学例⼦子,要加图CPU,寄存器]。
- I/O状态信息: 包括显⽰示的I/O请求, 分配给进程的I/O设备和被进程使⽤用的⽂文件列表。
- 记账信息: 可能包括处理器时间总和,使⽤用的时钟数总和,时间限制,记账号等。
- 其他信息
查看进程的方法
进程的信息可以通过/proc系统文件夹查看,例如要获取PID为1的进程信息,可以查看 /proc/1 这个⽂文件夹。或者通过ps指令来查看。最常用的方式是ps -ef | -grep “进程名”,比如我们要查找关于“a.out”相关的进程,使用截图如下: