知识点
1. 进程的创建与终止
1.1 引起创建进程的事件
导致一个进程区创建另一个进程的典型事件有四类:
-
用户登录。 在分时系统中,用户在终端键入登录命令后,若登录成功,系统将为该用户建立一个进程,并把它插入就绪队列中。
-
作业调度。 在多道批处理系统中,当作业调度程序按一定的算法调度到某个(些)作业时,便将它(们)装入内存,为它(们)创建进程,并把它(们)插入就绪队列中。
-
提供服务。 当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务。
-
应用请求。 由用户自己创建新进程,以便使新进程以同创建者进程并发运行的方式完成特定任务。
1.2 进程的创建
当出现创建新进程的请求后,OS便调用创建原语Creat按下述步骤创建一个新进程:
-
申请空白PCB,为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB。
-
为新进程分配其运行所需的资源,包括各种物理和逻辑资源,如内存、文件、I/O设备和CPU时间等。
-
初始化进程控制块(PCB):①初始化标识信息 ② 初始化处理机状态信息 ③ 初始化处理机控制信息
-
如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。
1.3 引起进程终止的事件
-
正常结束,表示进程的任务已经完成,准备退出运行。 如,批处理系统中的Halt指令,分时系统中的Logs off指令。
-
异常结束,是指进程在运行时发生了某种异常事件,使程序无法继续运行。常见的异常事件有:
- 越界错
- 保护错
- 非法指令
- 特权指令错
- 运行超时
- 等待超时
- 算术运算错
- I/O故障
- 外界干预,是指进程应外界的请求而终止运行。这些干预有:
- 操作员或操作系统干预
- 父进程请求
- 因父进程终止
1.4 进程的终止
如果系统中发生了要求终止进程的某事件,OS便调用进程终止原语,按下述过程去终止指定的进程:
-
根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态;
-
若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度;
-
若该进程还有子孙进程,还应将其所有子孙进程也都予以终止,以防它们成为不可控的进程;
-
将被终止进程所拥有的全部资源或者归还给其父进程,或者归还给系统;
-
将被终止进程(PCB)从所在队列(或链表)中移出,等待其它程序来搜索信息。
2. 进程的阻塞与唤醒
2.1 引起进程阻塞和唤醒的事件
-
向系统请求共享资源失败
-
等待某种操作的完成
-
新数据尚未到达
-
等待新任务的到达
2.2 进程阻塞过程
调用阻塞原语block自我阻塞 —— 停止执行并将PCB的状态设为阻塞 —— 将PCB插入阻塞队列 —— 进程调度
2.3 进程唤醒过程
有关进程调用唤醒原语wakeup将等待事件的进程唤醒
block原语和wakeup原语要成对出现!
3. 进程的挂起与激活
3.1 进程的挂起
suspend原语:首先检查被挂起进程的状态,若处于活动就绪状态,便将其改为静止就绪;对于活动阻塞状态的进程,则将之改为静止阻塞;为了方便用户或父进程考查该进程的运行情况,而把该进程的PCB复制到某指定的内存区域;最后,若被挂起的进程正在执行,则转向调度程序重新调度。
3.2 进程的激活过程
active原语:先将进程从外存调入内存,检查该进程的现行状态,若是静止就绪,便将之改为活动就绪;若为静止阻塞,便将之改为活动阻塞。