进程(Process)
定义
进程是操作系统中正在运行的程序的一个实例。它是系统进行资源分配和调度的基本单位,包含程序代码、数据和执行状态等信息。
关键特性
- 独立性:每个进程拥有独立的地址空间和资源。
- 动态性:进程有生命周期(创建、运行、终止)。
- 并发性:多个进程可并发执行(通过 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 机制(如管道) | 直接读写共享内存 |
崩溃影响 | 不影响其他进程 | 可能导致整个进程终止 |
切换成本 | 高(需切换地址空间) | 低 |