操作系统——进程的状态与转换

1. 进程控制

进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。

在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不可分割的基本单位

1.1 创建进程

UNIX中进程为树状层次结构,Windows 下所有进程没有层次结构

允许一个进程创建另一个进程,创建者称为父进程,被创建的进程称为子进程。子进程可以继承父进程所拥有的资源。当子进程被撤销时,应将其从父进程那里获得的资源归还给父进程。在撤销父进程时,也必须同时撤销它的所有子进程。

在操作系统中,终端用户登录系统、作业调度、系统提供服务、用户程序的应用请求等都会引起进程的创建。

创建原语的执行过程如下:

  1. 为新进程分配一个唯一的进程标识号,并申请一个空白的 PCB(PCB是有限的)。若 PCB 申请失败,则进程创建失败;
  2. 为进程分配资源,为新进程的程序和数据、以及用户栈分配必要的内存空间(在 PCB 中体现)。这里如果资源不足(比如内存空间),并不是创建失败,而是处于阻塞状态,等待相关资源;
  3. 初始化 PCB,主要包括初始化标志信息、初始化处理机状态信息和初始化处理机控制信息,以及设置进程的优先级等;
  4. 如果进程就绪队列能够接纳新进程,就将新进程插入到就绪队列,等待被调度运行。

1.2 终止进程

进入终止状态的进程以后不能再执行,但在操作系统中保存状态码和一些计时统计数据供其他进程收集。

引起进程终止的事件主要有:

  • 正常结束:进程的任务已经完成,并准备退出运行;
  • 异常结束:进程在运行时,发生了某种异常事件,使程序无法继续运行,如存储区越界、非法指令、特权指令出错、I/O 故障等;
  • 外界干预:进程响应外界的请求而终止运行,如操作员或操作系统干预、父进程请求和父进程终止。

撤销原语的执行过程如下:

  1. 根据被终止进程的标识符,检索 PCB,从中读出该进程的状态;
  2. 若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程;
  3. 若该进程还有子进程,则应将其所有子进程终止;
  4. 将该进程所拥有的全部资源,或归还给其父进程或归还给操作系统;
  5. 将该 PCB 从所在队列(链表)中删除。

1.3 阻塞/唤醒进程

正在执行的进程,由于需要的某些事件未发生,如请求系统资源失败、等待某种操作的完成、新数据尚未到达或等待新任务的到达等,则由系统自动执行阻塞原语,使自己由运行状态变为阻塞状态。进程的阻塞是进程自身的一种主动行为,只有处于运行状态的进程,才可能将其转为阻塞状态。

阻塞原语(Block)的执行过程如下:

  1. 找到将要被阻塞进程的标识号对应的 PCB;
  2. 若该进程为运行状态,则保护其现场,将其状态转为阻塞状态,停止运行;
  3. 将该 PCB 插入到相应事件的等待队列中去。

当被阻塞进程所需要的事件发生时,如 I/O 操作已完成或其所需要的数据已到达,则由相关进程(例如,提供数据的进程)执行唤醒原语,将等待该事件的进程唤醒。进程的唤醒是一种被动行为,需要其他进程触发。

唤醒原语(Wakeup)的执行过程如下:

  1. 在该事件的等待队列中找到相应进程的 PCB;
  2. 将其从等待队列中移出,并置为就绪状态;
  3. 把该 PCB 插入就绪队列中,等待调度程序调度。

阻塞/唤醒是一对作用刚好相反的原语,必须成对使用。阻塞原语是由被阻塞进程自我调用实现的,而唤醒原语则是由一个与被唤醒进程相合作或被其他相关的进程调用实现的。

1.4 挂起与激活

出于用户观察需要,进程可以执行挂起激活两种操作。挂起是将活跃状态转为挂起状态,使进程不再被系统调用;激活是将挂起状态转为活跃状态。

进程挂起的几种情况:

  • 终端用户的需要:当终端用户在运行程序期间发现有可疑问题,希望暂停程序的运行以便研究其执行情况或做一定的修改;
  • 父进程请求
  • 符合调节的需要
  • 操作系统的需要:有时希望挂起某些进程以便检查运行中的资源使用情况或进行记账。

挂起原语(Suspend)的执行过程如下:

  1. 检查被挂起的进程的状态;
  2. 若是活动就绪状态,便将其改成挂起就绪;若是活动阻塞状态,便将其改成挂起阻塞;
  3. 为方便用户或父进程考察该进程的运行情况,把该进程的 PCB 复制到某指定的内存区域;
  4. 若被挂起的进程正在执行,则转向调度程序重新调度。

激活原语(Active)的执行过程如下:

  1. 将进程从外存调入内存,检查该进程的现行状态;
  2. 若是挂起就绪,便将其改为活动就绪;若是挂起阻塞,便将其改为活跃阻塞;
  3. 假如采用的是抢占调度策略,则每当有挂起就绪进程被激活而加入就绪队列时,便检查是否需要重新调度,即由调度程序将被激活的进程和当前进程两者优先级进行比较;
  4. 若被激活进程优先级低,则不必重新调度;若当前进程优先级低,则把处理机分配给被激活的进程。

在这里插入图片描述

1.5 进程切换

对于通常的进程,其创建、撤销以及要求由系统设备完成的I/O操作都是利用系统调用而进入内核,再由内核中相应处理程序予以完成的。进程切换同样是在内核的支持下实现的,因此可以说,任何进程都是在操作系统内核的支持下运行的,是与内核紧密相关的。

进程切换是指处理机从一个进程的运行转到另一个进程上运行,这个过程中,进程的运行环境产生了实质性的变化。

进程切换的过程如下:

  1. 保存处理机上下文,包括程序计数器和其他寄存器;
  2. 更新PCB信息;
  3. 把进程的 PCB 移入相应的队列,如就绪、在某事件阻塞等队列;
  4. 选择另一个进程执行,并更新其 PCB;
  5. 更新内存管理的数据结构;
  6. 恢复处理机上下文。

进程切换处理机模式切换是不同的,模式切换时,处理机逻辑上可能还在同一进程中运行。如果进程因中断或异常进入到核心态运行,执行完后又回到用户态刚被中断的程序运行,则操作系统只需恢复进程进入内核时所保存的CPU现场,无需改变当前进程的环境信息。但若要切换进程,当前运行进程改变了,则当前进程的环境信息也需要改变。

2. 进程状态

  • 运行状态:进程正在处理机上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态;
  • 就绪状态:进程已处于准备运行的状态,获得了除处理机之外的一切所需资源,一旦得到处理机即可运行。
  • 阻塞状态,又称等待状态:进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。
  • 创建状态:进程正在被创建,尚未转到就绪状态。创建步骤包括:申请空白的 PCB,向 PCB 中填写一些控制和管理信息,系统向进程分配运行时所需的资源。
  • 结束状态:进程正常结束、发生错误或者系统中断退出运行。系统必须首先将进程置为结束状态,再进一步处理资源释放及回收工作。

在这里插入图片描述

注意区别就绪状态和等待状态:就绪状态是指进程仅缺少处理机,只要获得处理机资源就立即执行;而等待状态是指进程需要其他资源(除了处理机)或等待某一事件。之所以把处理机和其他资源划分开,是因为在分时系统的时间片轮转机制中,每个进程分到的时间片是若干毫秒。也就是说,进程得到处理机的时间很短且非常频繁,进程在运行过程中实际上是频繁地转换到就绪状态的;而其他资源(如外设)的使用和分配或者某一事件的发生(如I/O操作的完成)对应的时间相对来说很长,进程转换到等待状态的次数也相对较少。这样来看,就绪状态和等待状态是进程生命周期中两个完全不同的状态,需要加以区分。

就绪状态 -> 运行状态:处于就绪状态的进程被调度后,获得处理机资源(分派处理机时间片),进程由就绪状态转换为运行状态。

运行状态 -> 就绪状态:处于运行状态的进程在时间片用完后,不得不让出处理机,进程由运行状态转换为就绪状态。此外,在可剥夺的操作系统中,当有更高优先级的进程就绪时,调度程度将正执行的进程转换为就绪状态,让更高优先级的进程执行。

运行状态 -> 阻塞状态:当进程请求某一资源(如外设)的使用和分配或等待某一事件的发生(如I/O操作的完成)时,它就从运行状态转换为阻塞状态。进程以系统调用的形式请求操作系统提供服务,这是一种特殊的、由运行用户态程序调用操作系统内核过程的形式。

阻塞状态 -> 就绪状态:当进程等待的事件到来时,如I/O操作结束或中断结束时,中断处理程序必须把相应进程的状态由阻塞状态转换为就绪状态。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值