进程控制原语
进程切换
创建与终止
阻塞与唤醒
挂起与激活
进程创建的原因:提交新的批处理作业,交互式用户注册、操作系统提供服务、父进程创建子进程。
进程创建的步骤:1、为进程分配一个唯一标识号ID,主进程表中增加一个表项
2、为进程分配空间:用户地址空间、用户栈空间、pcb空间。若共享已有空间,则应建立相应的链接
3、初始化PCB :进程标识,处理机状态信息、进程状态
4、建立连接:若调度队列是链表,则将新进程插入到就绪或就绪/挂起链表
5、建立或扩展其他数据结构:
进程终止:原因
批处理作业执行到“结束”语句
交互式用户“注销”
停止进程(应用程序)的执行
遇到错误或故障
具体原因:正常结束,超时执行,执行时间超过预计时间,内存不足,无法为进程分配所需的内存空间,越界访问,企图使用未允许用的数据,或操作方式错
计算错,超时等待某事件发生。I/O失败,如找不到文件或多次重试仍无法读写文件。无效指令,企图执行不存在的指令。特权指令,企图执行特权指令。数据类型不符,或为初始化。操作员或os干预,父进程终止。父进程请求。
进程终止:步骤
1、根据被终止进程的标识符ID,找到其PCB,读出该进程状态。
2、若该进程为执行状态,则终止其执行,调度新进程执行。
3、若该进程有子孙进程,则立即终止其所有子孙进程。
4、该进程的全部资源,或归还给其父进程,或归还给系统
5、将被终止进程的(pcb)从所在的队列中移除,等待其他程序来手机信息。
进程的阻塞与唤醒
1、阻塞原因:请求系统服务;启动某种操作;新数据尚未到达;暂时无新工作可做。
2、当出现阻塞事件,进程调用阻塞原语将自己阻塞。并将其状态变为“阻塞状态”,并进入相应事件的阻塞队列。
3、当阻塞进程期待的事件发生。有关进程调用唤醒原语。将等待该事件的进程唤醒,并将状态变为就绪状态。插入就绪队列。
4、进程可以自己阻塞自己,但唤醒操作则由操作系统。或其他相关进程。进程无法自己唤醒自己。
进程的挂起与激活
当出现挂起事件,系统利用挂起源于将指定进程或一个阻塞进程挂起。进程从内存换出到外存。
当激活事件发生,系统利用激活源于将指定进程激活。将相应进程从外存换到内存。
进程切换
时钟中断:进程执行完一个时间片;
I/O中断
内存访问出错:虚拟内存中,需要的指令或数据不在内存中
陷阱:执行遇到错误,可能使进程转换到终止状态。
影响周转时间的调度:
作业从外存到内存(作业调度)
进入内存还需要在就绪队列中排队,等待进程调度。
甚至,可能会被挂起,在外存等待被激活(中程调度)。
系统吞吐量:单位时间内系统所完成的作业数
几乎所有的操作系统的调度算法都可考虑优先权原则。仅考虑优先权,可能会出现饥饿,对低优先权的进程不公平。
根据执行进程的处理机是由进程自己释放还是强行剥夺,可以将线程调度方式分为非剥夺方式和剥夺方式。
非剥夺方式:执行完毕,申请I/O阻塞自己。不利于“即时性”要求较高的分时系统和实时系统。主要用于批处理系统。
操作系统在新进程到来时,或某个具有较高优先权的被阻塞进程插入就绪队列时,或在基于时间片调度的系统中,时间片用完而中断当前进程的执行,调度新的进程执行。
产生较多的终端,主要用于实时性要求较高的实时系统和性能要求较高的批处理方式和分时系统。
长程调度:作业从外存到内存,,创建进程,分配必要的系统资源,并将新创建的进程插入就绪队列,等待短程调度。某些采用交换技术的系统将新创建的进程插入到就绪挂起队列,等待中程调度。选择多少盒进入到内存取决于多道程序的度。选择那些作业取决于长程调度算法。
中程调度:挂起状态,为了提高内存的利用率和系统的吞吐量,只有支持进程挂起的操作系统才具有中程调度功能。
短程调度:进程调度,决定就绪队列中哪个进程将获得处理机
进程调度算法:先来先服务,按照进程到达的先后顺序排队,每次调度队首的进程。但是对于后进入队列而运行时间比较短的进程,或I/O型进程来说没需要更长时间的等待。
短进程优先:属于非剥夺算法,当某进程获得处理机,直到其执行完成,或需要等待某事件而被阻塞,才自动释放处理机,系统又调用新的进程。
时间片轮转调度法: