程序猿之计算机操作系统 — 1.6 进程管理
在现代操作系统中,“进程”是资源分配与调度的最基本单位。程序必须以进程的形式存在并运行,因此在 CPU 执行程序之前,程序需要先被封装成一个进程。比如编译器、文本编辑器、浏览器等系统程序或用户程序,都是进程的实例。
进程的基本定义
程序本身是静态的、被动的,称为“程序实体”(passive entity),它只是存储在磁盘上的一组指令集合。而进程则是动态的、主动的(active entity),是程序执行的运行实例。一个单线程进程具有一个程序计数器(Program Counter,PC),它指向将要执行的下一条指令。因此,一个进程的执行过程是顺序的,从当前指令到下一条指令,直至结束。
在任意时刻,CPU 中每个核心只能执行一条指令,而系统中可能存在多个并发进程,因此操作系统必须决定哪个进程获取 CPU,并如何调度它们的执行顺序。多线程进程中,每个线程也拥有独立的程序计数器。
进程的资源需求
进程需要一系列资源以便运行,这些资源包括:
-
CPU 时间:用于指令的执行;
-
内存:存放代码、数据和栈;
-
文件:用于数据存储与交互;
-
I/O 设备:如键盘、打印机、网络接口等。
创建一个进程时,这些资源要么立即分配,要么通过系统调度机制按需提供。此外,进程可能还需要系统调用接口,以便从终端、网络或文件中获取输入信息,或将处理结果输出。
当进程终止时,其所占用的资源将被回收并供后续进程重复使用。
进程与线程的关系
操作系统中,进程是资源分配的基本单位,而线程是 CPU 调度的基本单位。一个进程至少包含一个线程(主线程),但也可以包含多个线程(如多线程服务器)。线程之间共享进程的资源(如内存、文件描述符),但它们拥有独立的执行栈和程序计数器。
因此,尽管多个线程可能运行在同一个进程上下文中,但它们在执行上是相互独立的,具备并发执行能力。
进程管理的核心功能
进程管理是操作系统的核心功能之一,它主要完成以下几项任务:
-
创建与终止进程:包括用户进程和系统进程;
-
进程调度与切换:决定哪个进程获得 CPU;
-
进程挂起与唤醒:控制进程的执行状态;
-
进程同步与互斥:协调多个进程对共享资源的访问;
-
进程通信机制:如管道、消息队列、共享内存、信号等。
系统中所有的进程通常由三个主要部分组成:
-
操作系统进程(执行系统代码);
-
用户进程(执行用户代码);
-
I/O 进程(管理外设和数据交互)。
所有进程通常由一个或多个 CPU 核心通过调度算法实现轮转执行。
理解
理论理解:进程是操作系统的核心调度单位
在操作系统中,“进程”与“程序”具有本质区别。程序是静态的指令集合,是存储在磁盘上的 passive entity,而进程是程序在执行中的动态表现形式,是 active entity。之所以要引入“进程”这一概念,核心目的是为了实现多任务的并发执行与系统资源的高效利用。通过进程,操作系统能够对 CPU 时间、内存空间、I/O 资源进行有效的管理与分配。