操作系统之进程控制:进程的创建、终止、阻塞与唤醒、挂起与激活

进程控制是进程管理中最基本的功能,主要包括创建新进程、终止已完成的进程、将因发生异常情况而无法继续运行的进程置于阻塞状态、负责进程运行中的状态转换等功能。
进程控制一般由OS的内核中的原语来实现的。

操作系统内核

OS内核:通常将一些与硬件紧密相关的模块(中断处理程序…)、各种常用设备的驱动程序以及运行频率较高的模块(时钟管理、进程调度…),都安排在紧靠硬件的软件层次中,将它们常驻内存,即通常被称为OS内核。
这种安排方式的目的:①便于对这些软件进行保护,防止遭受其他应用程序的破坏。②提高OS运行效率。

区分内核态和用户态的原因:防止OS本身及关键数据(如PCB…)遭受到应用程序有意或无意的破坏。

  • 系统态:又称管态、内核态。具有较高的执行权限,能执行一切指令,访问所有寄存器和存储区,传统的OS都在系统态运行。
  • 用户态:又称目态。它是具有较低权限的执行状态,仅能执行规定的指令,访问指定的寄存器和存储区。一般情况下,应用程序只能在用户态运行,不能执行OS指令以及访问OS区域,以防止应用程序对OS的破坏。

OS内核功能

支撑功能
  1. 中断处理:是内核最基本的功能,是整个操作系统赖以活动的基础。如系统调用、键盘命令的输入、进程调度、设备驱动等,无不依赖于中断。
  2. 时钟管理:如时间片轮转调度,每当时间片用完,由时钟管理产生一个中断信号,促使调度程序重新进行调度;又比如在实时系统中的截止时间的控制;批处理系统中最长运行时间控制…
  3. 原语操作:由若干条命令组成,用于完成一定功能的一个过程。但它们是“原子操作”,即要么全做,要么不做。原子操作在系统态下执行,常驻内存。
资源管理功能
  1. 进程管理
  2. 存储器管理
  3. 设备管理

进程的创建

父子进程

  • 在OS中,允许一个进程创建另一个进程,创建者称为父进程,被创建者称为子进程,子进程也能创建更多孙进程。结构像一样。如在UNIX中,由父子进程组成一个进程组。
  • 子进程可以继承父进程所拥有的的资源。当子进程被撤销时,应将从父进程那里获得的资源归还给父进程。此外,在撤销父进程的时候,也必须同时撤销其所有子进程。
  • 注意:在Windows中不存在任何进程层次结构,所有进程具有相同的地位。但当进程创建了一个进程时,进程创建者会获得一个句柄(令牌),可以用来被控制被创建的进程,但是这个句柄是可以传递的。也就是说,获得了句柄的进程就拥有控制该进程的权利,因此进程之间不是层次关系,而是是否获得句柄,控制与被控制的关系。

引进创建进程的典型事件

  1. 用户登录:在分时系统中,用户在终端键入登录命令后,若登录成功,系统将为该用户建立一个进程。
  2. 作业调度:在多道批处理系统中,当作业调度程序按一定算法调度到某些作业时,便将它们存入内存,为它们创建进程。
  3. 提供服务:当运行中用户程序提出某种请求,系统将专门创建一个进程来提供用户所需要的服务,如需要打印文件时,创建打印进程。
  4. 应用请求:用户进程自己创建新进程,与创建者进程以并发的形式完成特定任务。

进程创建过程

OS调用进程创建原语Creat,该原语按照以下步骤创建一个新进程:

  1. 申请空白PCB,为新进程从申请获得唯一的数字标识符。
  2. 为新进程分配其运行所需资源,包括各种物理资源和逻辑资源,如CPU时间、所需内存大小、I/O设备等。
  3. 初始化PCB:①初始化标识信息(数字标识符和父进程标识符)②初始化处理机状态(程序计数器指向程序入口地址,栈指针指向栈顶)③初始化处理机控制信息(设置进程状态、优先级等)
  4. 如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。

进程的终止

引起进程终止的事件

  1. 正常结束:表示进程的任务已经完成,准备退出运行。在批处理系统中,通常会在程序的最后安排一条Halt指令,用于向OS表示运行已结束。
  2. 异常结束:指进程在运行时发生了某种异常事件,使程序无法继续运行。常见的有:
    ① 越界:程序访问的存储区越出该进程的区域。
    ② 保护错:进程视图访问一个不存在或不允许访问的资源或文件。
    ③ 非法指令:程序试图去执行一条不存在的指令。
    ④ 特权指令错:用户没有执行当前指令的权限。
    ⑤ 运行超时:执行时间超过允许执行的最大值。
    ⑥ 等待超时:进程等待某事件的时间超过规定最大值。
    ⑦ 算术运算错:进程试图执行一个被进制的运算。
    ⑧ I/O故障:在I/O过程发送了错误…
  3. 外界干预:指进程应外界的请求而终止运行。这些干预有:程序员或操作系统干预;父进程请求;父进程终止。

进程终止过程

OS调用进程终止原语,按下述过程终止指定的进程:

  1. 根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,读取进程的状态。
  2. 若进程处于执行状态,立即终止进程,并置调度标志位真,在进程终止后重新进程CPU调度。
  3. 若进程还有子孙进程,将它们也终止,防止它们称为不可控的进程。
  4. 将终止进程所拥有的全部资源归还给父进程,或归还给系统。
  5. 将终止进程的PCB从所在队列中移除,操作系统记录等待需要搜集信息的其它程序搜集信息。

进程的阻塞与唤醒

在使用阻塞和唤醒时,必须成对使用,如果在某进程中引起了进程阻塞,那么与之合作的、或相关进程中必须安排一条该进程的唤醒原语,保证进程不会永久的处于阻塞状态,无法再运行。

引起进程的阻塞与唤醒的事件

  1. 向系统请求共享资源失败,请求者进程只能被阻塞,只有在共享资源空闲时,才会被唤醒。
  2. 等待某种操作的完成,在等待过程中应该是阻塞状态,等操作完成后,才会唤醒。
  3. 新数据尚未到达,进程只能阻塞,直到数据到达被唤醒。
  4. 等待新任务的到达,进程会阻塞,直到新任务到达会被唤醒,处理完成后又把自己阻塞起来。

进程阻塞过程

当需要阻塞进程时,进程调用阻塞原语block将自己阻塞,是一种主动行为。进入block状态后,进程先立即停止执行,然后将PCB的状态改为阻塞状态,并将PCB插入相应的阻塞队列。最后,重新进行CPU调度,切换前在PCB中保留当前进程的CPU状态,然后将CPU状态按新进程的PCB设置。

进程唤醒过程

当被阻塞进程所期待的事情发生,有关进程调用唤醒原语wakeup将等待该事件的进程唤醒。
执行过程:将阻塞进程从阻塞队列中移出,将其PCB的状态改为就绪状态,然后将PCB插入到就绪队列中。


进程的挂起与激活

进程的挂起

当系统中出现了引起进程挂起的事件,OS利用挂起原语suspend将指定进程或处于阻塞状态的进程挂起。
执行过程:首先检查被挂起进程的状态,如果是就绪状态,就改为就绪挂起状态;如果是阻塞状态,就改为阻塞挂起状态;为了方便用户或父进程考查该进程的运行情况,把该进程的PCB复制到某指定的内存区域(一般挂起状态的进程存在于外存)。如果被挂起进程正在执行,就重新进行调度。

进程的激活

当系统中发生激活进程的时间时,OS将利用激活原语active将制定进程激活。
激活过程:先将进程(PCB)从外存调入内存,检查该进程现在的状态,若是就绪挂起,则改为就绪状态;若是阻塞挂起,则改为钻丝状态。加入采用抢占式调度策略,则每当有就绪挂起状态的进程被激活,就要检查是否需要进行重新调度(如使用优先级的话,检查激活进程的优先级是否大于当前正在运行的进程,如果低则不用重新调度;如果高则剥夺当前进程的运行,把CPU分配给刚激活的进程)。


本文为《计算机操作系统》第四版 学习笔记+个人总结。

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值