操作系统原理学习笔记(六)-进程控制

操作系统原理学习笔记目录

操作系统内核

为了防止OS本身及相关数据被其他应用程序破坏,通常将处理机的执行状态分为系统态和用户态:

系统态/管态/内核态:能执行一切指令。
用户态/目态:仅能执行规定的指令。

大多OS内核都包含以下两方面功能:

支撑功能:提供给其他模块所需的基本功能,包括但不限于:
中断处理、时钟管理、原语操作。
原语(Primitive):使用原子操作(Action Operation)的若干指令集合,用来完成特定功能。
原子操作:不可中断的操作。

资源管理功能:进程管理、存储器管理、设备管理。

进程的创建(Creation of Process)

进程的层次结构:
进程可以创建其他进程,两者为父子关系,父进程创建子进程,多层的父子关系为祖先与子孙。
在撤销父进程时应该先撤销子进程。
在Windows中,不存在层次结构,所有进程地位相同,父子关系被句柄代替,拥有这个句柄,就可以控制该进程,句柄可以传递。

进程图:
用来描述进程间关系的有向图,有向边表示进程间的父子关系。

引起创建进程的事件:
用户登录:在分时系统中,用户在终端输入登录命令且成功后,系统会为其创建一个进程,并纳入就绪队列中。
作业调度:在多道批处理系统中,作业调度程序调度到某个作业时,会将其装入内存,创建进程,插入就绪队列中。
提供服务:用户提出请求后,系统创建一个进程来提供其所需的服务。
应用请求:与上面三种由系统创建的进程事件不同,该类事件是由用户进程自己创建新进程。

进程的创建:
系统出现创建进程的请求后,OS会调用创建原语Creat按以下步骤创建进程:
申请空白PCB。
分配所需资源(此时OS需知道其需要多少资源)。
PCB初始化。
插入就绪队列。

进程的终止(Termination of Process)

引起终止的事件分为三类:正常结束、异常错误、外界干预:

正常结束

批处理系统程序的最后会安排一条Halt指令,运行到Halt指令时,产生中断,通知OS。
分时系统用户利用Logs off表示进程运行完毕,产生中断,通知OS。

异常结束

越界错程序访问的存储区超出该进程的区域。
保护错进程试图访问不允许访问的资源文件,如访问只读文件。
非法指令程序试图执行不存在的指令,可能是因为数据被当成了指令。
特权指令错使用了不被允许使用的指令。
运行超时执行时间超出指定的最大时间。
等待超时等待时间超出规定的最大时间。
算术运算错程序试图运行被禁止的运算,例如,以0为除数。
I/O故障I/O过程中发生错误

外界干预

操作员/OS干预程序发生某事件,如死锁,被操作员强制关闭。
父进程请求子进程完成父进程交代的任务后,父进程可请求关闭子进程。
因父进程终止父进程终止时,子进程也应当结束。

进程的终止过程:
OS调用进程终止原语,执行一下过程:
根据被终止程序的标识符,从PCB集合中检索该进程PCB,读出进程状态。
若进程处于执行状态,立即终止该进程的执行,置调度标志为真,用于指示该进程被终止后应重新进行调度。
若进程还有子孙进程,也应一同终止。
返还进程资源。
将进程PCB从所在队列移出,等待其他程序收集信息。

进程的阻塞与唤醒

引起进程阻塞与唤醒的事件:
想系统请求共享资源失败、等待某种操作完成、新数据尚未到达、等待新任务到达。

进程阻塞过程(主动行为):
进程调用阻塞原语block将自己阻塞,进入block过程后,由于该进程处于执行状态,应立即停止执行,并改变PCB中的现行状态:由执行改为阻塞,并将PCB插入阻塞队列。

进程唤醒过程:
由相关进程调用唤醒原语wakeup,先将其从阻塞队列中移除,改变PCB中现行状态:由阻塞改为就绪,再将PCB插入到就绪队列中。

进程的挂起与激活

进程的挂起:
OS使用挂起原语suspend将其挂起:先检查进程状态,若处于活动就绪,则改为静止就绪;若为活动阻塞,则改为静止阻塞;之后将其PCB复制进制定的内存区域,若被挂起的程序正在执行,则转向调度程序重新调度。

进程的激活:
OS利用激活原语active将进程激活:先从外存调入内存,检查现行状态,若为静止就绪,则改为活动就绪;若为静止阻塞,则改为活动阻塞。
若采用抢占调度策略,则每当有静止就绪进程被激活而插入就绪队列时,应检查是否需要重新调度,即由调度程序比较被激活进程与当前进程的优先级,高的执行,低的中断。

You may also like...

发表评论

邮箱地址不会被公开。 必填项已用*标注