# 计算机操作系统——进程管理(考研复试终极整理版) --- ## 一、进程的定义与组成 ### 1. 进程定义 **进程**是程序在某个数据集合上的**动态执行过程**,是操作系统进行**资源分配和调度的基本单位**。 - **核心公式**:`进程 = 程序段 + 数据段 + PCB` - **关键特性**: - **动态性**:进程由创建到撤销具有生命周期 - **并发性**:多个进程可交替执行 - **独立性**:进程是资源分配的基本单位 ### 2. 进程组成 - **程序段**:存储执行代码(如 `main()` 函数) - **数据段**:存储程序运行期间处理的数据 - **PCB(进程控制块)**:操作系统管理进程的核心数据结构 - **PCB内容**: - **标识信息**:进程ID(PID)、父进程ID(PPID) - **处理机状态**:程序计数器、寄存器值、栈指针 - **控制信息**:进程状态、调度优先级、资源分配表 --- ## 二、进程的状态与转换 ### 1. 基本状态模型 - **三态模型**: - **运行态**:占用CPU执行 - **就绪态**:具备运行条件,等待CPU调度 - **阻塞态**:等待资源或事件(如I/O完成) - **五态模型**(扩展): - **创建态**:进程正在被创建(分配资源、初始化PCB) - **终止态**:进程资源被回收,PCB被撤销 ### 2. 状态转换 ```mermaid graph LR 创建态 --> 就绪态 就绪态 --> 运行态 --> 就绪态(时间片用完) 运行态 --> 阻塞态(等待资源) 阻塞态 --> 就绪态(资源就绪) 运行态 --> 终止态 ``` ### 3. 挂起状态 - **定义**:进程被换出到外存,释放内存资源 - **触发条件**:内存不足或用户主动挂起 --- ## 三、进程控制与调度 ### 1. 进程控制原语 - **创建原语**:分配PCB、加载程序到内存(如 `fork()`) - **终止原语**:回收资源、撤销PCB - **阻塞原语**:主动进入阻塞态(如 `wait()`) - **唤醒原语**:由其他进程或系统触发(如 `signal()`) ### 2. 进程调度算法 | **算法** | **核心思想** | **优缺点** | | ---------------- | ------------------ | -------------------------------- | | **FCFS** | 先来先服务 | 简单但长作业等待时间长 | | **SJF/SPF** | 最短作业/进程优先 | 平均周转时间最短,但可能导致饥饿 | | **时间片轮转** | 按时间片轮流执行 | 公平但上下文切换开销大 | | **多级反馈队列** | 优先级队列动态调整 | 兼顾长短作业,实际系统常用 | --- ## 四、进程同步与通信 ### 1. 进程同步机制 - **互斥**:同一资源仅允许一个进程访问(如打印机) - **同步**:协调进程执行顺序(如生产者-消费者问题) - **实现工具**: - **信号量**:`P()`(等待)和 `V()`(释放)操作 - **管程**:封装共享数据和操作的高级同步机制 ### 2. 进程通信方式 - **共享存储**:基于内存的共享(如共享内存区) - **管道通信**:单向字节流(如 `pipe()`) - **消息传递**:通过发送/接收原语交换数据(如消息队列) --- ## 五、死锁与处理 ### 1. 死锁必要条件 1. **互斥条件**:资源独占使用 2. **不可剥夺条件**:资源只能主动释放 3. **请求与保持条件**:持有资源时请求新资源 4. **循环等待条件**:进程间形成环形等待链 ### 2. 死锁处理策略 | **策略** | **方法** | **示例** | | -------------- | -------------------------------- | ---------------------------- | | **预防** | 破坏必要条件(如资源一次性分配) | 破坏请求与保持条件 | | **避免** | 银行家算法动态检测安全性 | 安全序列判断资源分配是否安全 | | **检测与解除** | 资源分配图检测,强制终止进程 | 撤销循环等待链中的进程 | --- ## 六、高频考点与答题要点 ### 1. 进程 vs 线程 - **资源分配**:进程是资源分配的基本单位,线程是CPU调度的基本单位 - **开销**:线程切换开销小,共享进程资源 ### 2. 系统调用 vs 库函数 - **系统调用**:需陷入内核态(如 `read()`) - **库函数**:在用户态执行(如 `printf()`) ### 3. 进程调度方式 - **抢占式**:优先级高的进程可抢占CPU(如实时系统) - **非抢占式**:进程主动释放CPU(如FCFS)