目录
进程控制的基本概念
什么是进程控制
如何实现进程控制
如何实现原语的”原子性“
与进程控制相关的原语
进程创建中的原语
进程终止中的原语
进程的阻塞和唤醒中的原语
进程的切换中的原语
知识滚雪球-程序是如何运行的?:
本节思维导图
进程控制的基本概念
什么是进程控制
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。简单理解就是:进程控制就是要实现进程状态转换
如何实现进程控制
利用微内核中的”原语“实现,前面我们提到原语是一种特殊的程序,它的执行具有原子性,也就是说,这段程序的运行必须一气呵成,不可中断。也就是说进行进程转换的过程要一气呵成这又是为什么?
假设PCB中的变量state表示进程当前所处状态,1表示就绪态、2表示阻塞态...
假设此时进程2等待的事件发生,则操作系统中,负责进程控制的内核程序至少需要做两件事:
①将PCB2的state设为1
②将PCB2从阻塞队列放到就绪队列
如果此时不能一气呵成,那么假设完成第一步后内核程序接收到了中断信号,那么虽然PCB2的state = 1但是它仍然被放在阻塞队列中,很明显这样是不对的。
所以,如果进程转换不能做到一气呵成,就有可能导致操作系统中的某些关键数据结构信息不统一的情况,这会影响操作系统进行别的管理工作。
如何实现原语的”原子性“
用"关中断指令”和“开中断指令”这两个特权指令实现原子性
在我们之前的学习中,我们可以知道当CPU执行完每条指令后都会进行外部中断信号的检查,当检测到外部中断信号后就会先执行中断处理程序然后才会去执行下一条指令。
而我们当CPU执行关中断这个特权指令后,就不会再进行上述判断是否有外部中断信号的操作,CPU会依次执行关中断指令后的指令,直到遇到开中断指令后才会恢复检查外部中断信号的操作。
还有一点需要注意的是,这两条指令都只允许内核程序使用,不允许用户程序使用
与进程控制相关的原语
进程创建中的原语
进程终止中的原语
进程的阻塞和唤醒中的原语
进程的切换中的原语
知识滚雪球-程序是如何运行的?:
我们在之前的学习中知道了,CPU会从内存中取出指令,而CPU中会设置很多“寄存器”,用来存放程序/指令在运行过程中所需要的某些数据。常见的寄存器有PSW(程序状态字寄存器)、PC(程序计数器寄存器)、IR(指令寄存器)、通用寄存器、ACC、MQ、MAR、MDR......
其中,PC寄存器用于存放下一条指令的地址,IR用于存放当前正在执行的指令,而通用寄存器中会储存一些其它必要的信息
如果当执行完指令3后,另一个进程也开始上CPU运行,而另一个进程在运行过程中也会使用各个寄存器,这就可能导致该进程会覆盖指令3在寄存器中存储的内容,那么该如何切换回之前的进程?
解决办法:在进程切换时先在PCB中保存这个进程的运行环境(只保存一些必要的寄存器信息,比如PSW寄存器,PC寄存器、通用寄存器中的内容),当原来的进程再次投入运行时,可以通过PCB恢复它的运行环境。
本节思维导图
其实,无论哪个进程控制原语,要做的无非三类事情:
1、更新PCB中的信息(修改进程状态state、保存/恢复运行环境)
2、将PCB插入合适的队列
3、分配/回收资源
~over~