表-进程控制 |
进程控制 | 由OS内核中的原语来实现。 |
进程创建 | 引起进程创建的事件 | 1) 用户登录(分时系统),由系统内核创建新进程; 2) 作业调度(批处理系统),由系统内核创建新进程; 3) 提供服务,由系统内核创建新进程; 4) 应用请求,由应用进程创建新进程。 |
进程创建过程 | 1) 申请空白PCB; 2) 为新进程分配资源; 3) 初始化PCB; 4) 将新进程插入就绪队列。 |
进程终止 | 引起进程终止的事件 | 1) 正常结束; 2) 异常结束; 3) 外界干预 a) 操作员或操作系统干预; b) 父进程请求; c) 父进程终止。 |
进程终止过程 | 1) 根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态; 2) 若被终止的进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度; 3) 若该进程还有子孙进程,应将其子孙进程予以终止; 4) 将被终止进程所拥有的全部资源,或归还给其父进程,或归还给系统; 5) 将被终止进程的PCB从所在队列或链表中移出,等待其他进程来搜集信息。 |
进程阻塞 | 引起进程阻塞的事件 | 1) 请求系统服务 OS不能立即满足该进程的请求时便阻塞; 2) 启动某种操作 在该操作完成之前便阻塞; 3) 新数据尚未到达; 4) 无新工作可做; |
进程阻塞过程 (进程阻塞是主动行为) | 当阻塞事件发生时,进程主动调用阻塞原语block把自己阻塞起来,进入block过程后: 1) 若进程正在执行,则立即停止执行; 2) 将PCB中的现行状态由执行改为阻塞; 3) 将PCB插入阻塞队列; 4) 保留被阻塞进程的处理机状态至该进程的PCB中; 5) 按新调度进程的PCB中的处理机状态设置CPU环境。 |
进程唤醒 | 引起进程唤醒的事件 | 1) 请求系统服务 OS可以满足该进程的请求时便可唤醒; 2) 启动某种操作 在该操作完成之后便可唤醒; 3) 新数据已经到达; 4) 有新工作可做; |
进程唤醒过程 (进程唤醒是被动行为) | 被阻塞进程所期待的事件发生时,由有关进程调用唤醒原语wakeup将等待该事件的进程唤醒: 1) 将被阻塞进程从等待该事件的阻塞队列中移出; 2) 将其PCB中的现行状态由阻塞改为就绪; 3) 将该进程的PCB插入就绪队列。 |
进程挂起 | 引起进程挂起的事件 | 1) 父进程请求将其某个子进程挂起; 2) 用户进程请求将自己挂起; |
进程挂起过程 (进程挂起是被动行为) | 系统利用挂起原语suspend将进程挂起: 1) 被挂起进程若处于活动就绪,则将其改为静止就绪,若处于活动阻塞,则将其改为静止阻塞;(对应事件1)) 2) 将挂起进程的PCB复制到指定的内存区域,将进程的程序和数据转入外存; 3) 若被挂起进程正在执行,则将其改为静止就绪状态,并转向调度程序重新调度。(对应事件2)) |
进程激活 | 引起进程激活的事件 | 1) 父进程请求唤醒指定进程; 2) 用户进程请求唤醒指定进程; |
进程激活过程 (进程激活是被动行为) | 系统利用激活原语active将指定进程激活: 1) 将进程从外存调入内存; 2) 进程的现行状态若为静止就绪态,则将其改为活动就绪态,若为静止阻塞态,则将其改为活动阻塞态; 3) 若唤醒进程的新状态为活动就绪,则根据调度策略判断是否要重新调度。 |
说明: 1) 由于用户线程不依赖于操作系统内核,因此操作系统内核是不知道用户线程的存在的,用户线程是由用户来管理和调度的,用户利用线程库提供的API来创建、同步、调度和管理线程。所以,用户线程的调度是在用户程序内部进行,通常采用非抢占式和更简单的规则,也无需用户态和核心态的切换。 |