定义
进程是操作系统中正在运行的程序的一个实例。它是系统进行资源分配和调度的基本单位,包含程序代码、数据和执行状态等信息。
关键特性
- 独立性:每个进程拥有独立的地址空间和资源。
- 动态性:进程有生命周期(创建、运行、终止)。
- 并发性:多个进程可并发执行(通过 cpu 时间片轮转)。
进程的组成
组成部分 | 说明 |
---|---|
代码段 | 存储可执行的程序指令(即程序的二进制代码)。 |
数据段 | 存储全局变量和静态变量。 |
堆(heap) | 动态分配的内存区域(如 malloc() 或 new 分配的变量)。 |
栈(stack) | 存储函数调用时的局部变量和返回地址。 |
pcb | 进程控制块(process control block),记录进程的元数据和状态。 |
pcb 内容示例
struct pcb {
int pid; // 进程 id
int status; // 状态(运行/就绪/阻塞等)
int priority; // 优先级
void *code_ptr; // 程序计数器(指向下一条指令)
// ... 其他信息(寄存器值、内存分配、打开文件列表等)
};
进程的状态
- 创建(new):进程正在被创建。
-
就绪(ready):进程已获得所需资源,等待 cpu 时间。
-
运行(running):进程正在 cpu 上执行。
-
阻塞(blocked):进程因等待事件(如 i/o)暂停运行。
-
终止(terminated):进程执行完毕或被强制结束。
进程调度
-
操作系统通过调度算法决定哪个进程获得 cpu 时间,常见算法包括:
-
先来先服务(fcfs)
-
短作业优先(sjf)
-
时间片轮转(round robin)
-
多级反馈队列(multilevel feedback queue)
进程创建与终止
-
创建方式:
- 系统初始化时创建(如守护进程)。
-
通过 fork() 复制现有进程(常见于 linux)。
-
用户请求创建(如双击运行程序)。
-
终止方式:
- 正常退出(执行完毕)。
-
错误退出(如段错误)。
-
被其他进程强制终止(如 kill -9 pid)。
进程间通信(ipc)
进程间通过以下机制交换数据:
-
管道(pipe)
-
消息队列(message queue)
-
共享内存(shared memory)
-
信号(signal)
-
套接字(socket)
进程 vs 线程
特性 | 进程 | 线程 |
---|---|---|
资源占用 | 独立内存空间,开销大 | 共享进程资源,开销小 |
通信方式 | ipc 机制(如管道) | 直接读写共享内存 |
崩溃影响 | 不影响其他进程 | 可能导致整个进程终止 |
切换成本 | 高(需切换地址空间) | 低 |