2.1.3 进程控制

相关文章:
操作系统之原语实现对进程的控制

B站视频:
https://www.bilibili.com/video/av70156862?p=9



1. 进程控制

在这里插入图片描述

1.1 进程控制的基本概念

1.1.1 什么是进程控制?

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

总之,进程控制就是要实现进程状态转换

1.1.2 如何实现进程控制?

在这里插入图片描述

用“原语”实现。通过“关中断”指令和“开中断”指令这两个特权指令(运行在核心态)实现原子性

  1. 原语是一种特殊的程序,它的执行具有原子性。也就是说,这段程序的运行必须一气呵成,不可中断。如果不能一气呵成,就有可能导致操作系统中的某些关键数据结构信息不统一的情况,这会影响操作系统进行别的管理工作

  2. 正常情况下CPU每执行完一条指令都会例行检查是否有中断信号需要处理,如果有,则暂停运行当前这段程序,转而执行相应的中断处理程序。CPU执行了关中断指令之后,就不再例行检查中断信号,直到执行开中断指令之后才会恢复检查。这样关中断和开中断之间的这些指令序列就是不可被中断的,这就实现了“原子性”

1.2 进程控制的相关原语

1.2.1 创建原语

操作系统创建一个进程时使用的原语:创建态–>就绪态

  1. 申请空白PCB
  2. 为新进程分配所需资源
  3. 初始化PCB
  4. 将PCB插入就绪队列

1.2.2 撤销原语

就绪态/阻塞态/运行态–>终止态–>无

  1. 从PCB集合中找到终止进程的PCB
  2. 若进程正在运行,立即剥夺CPU,将CPU分配给其它进程
  3. 终止其所有子进程(进程间的关系是树形结构)
  4. 将该进程拥有的所有资源归还给父进程或操作系统
  5. 删除PCB

1.2.3 阻塞原语和唤醒原语

阻塞原语和唤醒原语必须成对出现。因何事阻塞,就应由何事唤醒

  1. 阻塞原语:运行态–>阻塞态
    1. 找到要阻塞的进程对应的PCB
    2. 保护进程运行现场,将PCB状态信息设置为“阻塞态”,暂时停止进程运行
    3. 将PCB插入相应事件的等待队列
  2. 唤醒原语:阻塞态–>运行态
    1. 在事件等待队列中找到PCB
    2. 将PCB从等待队列移除,设置进程为就绪态
    3. 将PCB插入就绪队列,等待被调度

1.2.4 切换原语

运行态–>就绪态/就绪态–>运行态

  1. 将运行环境信息(进程上下文)存入PCB
  2. 将PCB移入相应队列
  3. 选择另一个进程运行,并更新其PCB
  4. 根据PCB恢复新进程所需的运行环境

在进程切换时先在PCB中保存这个进程的运行环境(保存一些必要的寄存器信息)。当原来的进程再次投入运行时,可以通过PCB恢复它的运行环境

1.2.5 原语的总结

进程控制会导致进程状态的切换,无论哪个进程控制原语,要做的无非是三类事情

  1. 更新PCB中的信息(如修改进程状态标志、将运行环境保存到PCB、从PCB恢复运行环境)
    1. 所有的进程控制原语一定会修改进程状态标志
    2. 剥夺当前运行进程的CPU使用权必然需要保存其运行环境
    3. 某进程开始运行前必然要恢复运行环境
  2. 将PCB插入合适的队列
  3. 分配/回收资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值