进程的概念
试想一下这样的场景:我们编写好的代码是怎么运行起来的呢?
我们编写好的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着 CPU 会执行程序中的每一条指令,那么这个运行中的程序,就被称为「进程」。
那进程的定义就是:进程是程序在某个数据集合上的运行过程,也是操作系统进行资源分配和调度的基本单位。简单来说,进程是程序的一次执行过程,它和程序的区别如下:
- 程序是静态的,它作为系统中的一种资源是永远存在的
- 进程是动态的,它是动态的产生,变化和消亡的,拥有其自己的生命周期
进程不仅包含正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说 CPU、内存、网络资源等。
进程的组成
进程主要由三个部分组成:
- 进程控制块 PCB(Process Control Block)
- 数据段
- 程序段
下面我们来一一讲解:
进程控制块 PCB
每个进程有且仅有一个进程控制块,或称进程描述符,它是「进程存在的唯一标识」,是「操作系统用来记录和刻画进程状态及环境信息的数据结构」,也是操作系统掌握进程的唯一资料结构和管理进程的主要依据。所以说 PCB 是提供给操作系统使用的。
简单点说就是操作系统需要对各个进程进行管理,但凡管理时所需要的信息,都会被放在 PCB 中,而且 PCB 是进程存在的唯一标识。创建进程和撤销进程等都是指对 PCB 的操作,当进程被创建时,操作系统为其创建 PCB,当进程结束时,会回收其 PCB。
PCB 主要包含下面的几类信息:
1)进程描述信息:
- 进程标识符 PID :标识各个进程,每个进程都有一个并且唯一的标识符
- 用户标识符 UID :进程归属的用户,用户标识符主要为共享和保护服务
2)进程控制和管理信息:
- 进程当前状态,如 new、ready、running、waiting 或 blocked 等
- 进程优先级:进程抢占 CPU 时的优先级
3)资源分配清单:
- 记录给进程分配了哪些资源。比如分配了多少内存、正在使用哪些 I/O 设备、正在使用哪些文件等
4)CPU 相关信息:
- CPU 中各个寄存器的值,当进程被切换时,CPU 的状态信息都会被保存在相应的 PCB 中,以便