# 2.3 进程控制 ## 一、进程控制的概念 ### 1.1 什么是进程控制 进程控制是操作系统对进程实施管理和控制的功能,包括进程的创建、撤销、阻塞、唤醒等操作。 ### 1.2 原语操作 进程控制通常通过**原语(Primitive)**来实现。 **原语的特点**: - 由若干条机器指令组成 - 执行期间不允许中断(原子操作) - 在核心态下执行 **常见的进程控制原语**: - 创建原语(Create) - 撤销原语(Destroy) - 阻塞原语(Block) - 唤醒原语(Wakeup) - 挂起原语(Suspend) - 激活原语(Active) --- ## 二、进程的创建 ### 2.1 引起进程创建的事件 1. **用户登录**:系统为用户创建一个进程 2. **作业调度**:批处理系统中,作业调度程序创建进程 3. **提供服务**:用户程序请求系统服务 4. **应用请求**:应用程序创建子进程 ### 2.2 进程创建的过程(创建原语) 1. **申请空白PCB**:从PCB集合中申请一个空白PCB 2. **分配资源**:为新进程分配资源(内存、文件等) 3. **初始化PCB**: - 初始化标识信息(PID、父进程ID等) - 初始化处理机状态信息(程序计数器指向程序入口) - 初始化控制信息(状态为就绪,优先级等) 4. **插入就绪队列**:将新进程插入就绪队列 ### 2.3 父子进程 **父子进程关系**: - 创建进程的进程称为父进程 - 被创建的进程称为子进程 - 子进程可以继承父进程的部分资源 **父子进程的特点**: - 子进程是父进程的副本 - 子进程有自己的地址空间 - 子进程和父进程可以并发执行 - 子进程可以共享父进程的部分资源 --- ## 三、进程的终止 ### 3.1 引起进程终止的事件 **正常结束**: - 进程执行完毕 - 进程执行了exit系统调用 **异常结束**: - 越界错误 - 保护错(访问不允许访问的资源) - 非法指令 - 特权指令错 - 运行超时 - 等待超时 - 算术运算错(除数为0) - I/O故障 **外界干预**: - 操作员或操作系统干预 - 父进程请求终止子进程 - 父进程终止,子进程被终止(级联终止) ### 3.2 进程终止的过程(撤销原语) 1. **读取进程状态**:从PCB中读取进程状态 2. **终止执行**:若进程正在执行,终止执行并重新调度 3. **终止子孙进程**:终止该进程的所有子孙进程 4. **回收资源**:回收进程占用的所有资源 5. **移除PCB**:将PCB从队列中移除并回收 --- ## 四、进程的阻塞与唤醒 ### 4.1 进程的阻塞 **阻塞原因**: - 请求资源失败 - 等待I/O操作完成 - 等待某信号或消息 - 等待同步条件 **阻塞原语(Block)的执行过程**: 1. **停止执行**:立即停止当前进程的执行 2. **保存现场**:保存CPU现场信息到PCB 3. **修改状态**:将进程状态改为阻塞 4. **插入阻塞队列**:将PCB插入相应的阻塞队列 5. **调度新进程**:转调度程序重新调度 ### 4.2 进程的唤醒 **唤醒原因**: - 等待的资源被分配 - I/O操作完成 - 等待的事件发生 - 收到信号或消息 **唤醒原语(Wakeup)的执行过程**: 1. **从阻塞队列移除**:从等待队列中找到该进程的PCB 2. **修改状态**:将进程状态改为就绪 3. **插入就绪队列**:将PCB插入就绪队列 4. **等待调度**:等待调度程序调度 **注意**:阻塞原语是进程自己执行的,唤醒原语通常由其他进程或中断处理程序执行。 --- ## 五、进程的挂起与激活 ### 5.1 进程的挂起 **挂起原因**: - 系统负荷过大 - 用户需要调试程序 - 父进程需要考察子进程 - 操作系统需要检查资源 **挂起原语(Suspend)的执行过程**: 1. **检查进程状态**: - 若进程处于活动就绪,改为静止就绪 - 若进程处于活动阻塞,改为静止阻塞 2. **换出内存**:将进程映像换出到磁盘(若需要) 3. **修改PCB**:修改PCB中的状态信息 ### 5.2 进程的激活 **激活原因**: - 系统负荷减轻 - 用户需要继续运行程序 - 资源充足 **激活原语(Active)的执行过程**: 1. **检查进程状态**: - 若进程处于静止就绪,改为活动就绪 - 若进程处于静止阻塞,改为活动阻塞 2. **换入内存**:将进程映像换入内存(若需要) 3. **修改PCB**:修改PCB中的状态信息 4. **可能重新调度**:若进程变为活动就绪,可能需要重新调度 --- ## 六、进程切换 ### 6.1 进程切换的概念 进程切换是指CPU从一个进程切换到另一个进程执行。 **进程切换的时机**: - 进程正常结束 - 进程被阻塞 - 进程时间片用完 - 有更高优先级的进程到达 - 发生中断需要处理 ### 6.2 进程切换的过程 1. **保存当前进程的现场**: - 保存程序计数器 - 保存寄存器内容 - 保存状态字 - 更新PCB信息 2. **选择新进程**: - 运行调度算法 - 从就绪队列选择新进程 3. **恢复新进程的现场**: - 从PCB读取现场信息 - 恢复寄存器内容 - 恢复程序计数器 - 恢复状态字 4. **执行新进程** ### 6.3 进程切换的开销 **直接开销**: - 保存和恢复寄存器 - 更新各种表格 - 切换地址空间 **间接开销**: - 高速缓存(Cache)失效 - 快表(TLB)失效 - 流水线清空 --- ## 七、考研重点 1. **进程控制原语**:创建、撤销、阻塞、唤醒、挂起、激活 2. **原语的特点**:原子性、不可中断 3. **进程创建的过程**:申请PCB、分配资源、初始化、插入队列 4. **进程终止的过程**:终止执行、终止子孙、回收资源、移除PCB 5. **阻塞与唤醒的执行者**:阻塞自己执行,唤醒由其他进程或中断执行 6. **进程切换的过程和时机** 7. **进程切换的开销** --- *下一节:2.4 进程同步*