进程的阻塞与唤醒
1. 进程的阻塞与唤醒
向系统请求共享资源失败,此时进程因不能继续运行而转变为阻塞状态
等待某种 *** 作的完成。
新数据尚未到达
等待新任务的到达
2. 进程阻塞过程
阻塞是进程自身的一种主动行为。
进入block过程后,由于该进程还处于执行状态,所以应先立即停止执行,把进程控制块中的现行状态由“执行”改为阻塞,并将PCB插入阻塞队列。最后,转调度程序进程重新调度,将处理机分配给另一就绪进程,并进行切换,亦即,保留被阻塞进程的处理机状态,按新进程的PCB中的处理机状态设置CPU环境。
3. 进程唤醒过程
当被阻塞进程所期待的事件发生时,比如它所启动的I/O *** 作已完成,或其所期待的数据已到达,则由有关进程调用唤醒原语wakeup,将等待该事件的进程唤醒。
wakeup执行的过程是:首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。
需要注意的是,block和wakeup原语必须成对使用。
2.3.5 进程的挂起与激活
1. 进程的挂起
当系统中出现了引起进程挂起的事件时,OS用挂起原语suspend将指定进程或处于阻塞状态的进程挂起。suspend的执行过程是:首先检查被挂起进程的状态,若处于活动就绪状态,便将其改为静止就绪;对于活动阻塞状态的进程,则将之改为静止阻塞;为了方便用户或父进程考查该进程的运行情况,而把该进程的PCB复制到某指定的内存区域;最后,若被挂起的进程正在执行,则转向调度程序重新调度。
2. 进程的激活
激活进程原语active,先将进程从外存调入内存,检查该进程的现行状态,若是静止就绪,则将之改为活动就绪等。假如采用的是抢占调度策略,则每当有静止就绪进程被激活而插入就绪队列时,应检查是否要进行重新调度,即由调度程序将被激活的进程与当前进程两者的优先级进行比较,如唤消山果被激活的进程优先级低,就不必重新调度,否则,立即剥夺当前进程的运行,把处理机分配给刚刚被激活的进程。
2.4 进程同步
对于多个进程的运行,如果不采取一定的管理,必然会因为这些进程对系统资源的无序争夺给系统造成混乱,致使每次处理的结果存在着不确定性,即显现出不可再现性。
为保证多个进程能有条不紊地运行,在多道程序系统中,必须引入进程同步机制。
2.4.1 进程同步的基本概念
进程同步机制主要是对多个相关程序在执行次序上进行协调,使并发执行的进程之间能按照一定的规则共享系统资源。
1. 两种形式的制约关系
间接相互制约关系
对于像打印机、磁带机这样的临界资源,必须保证多个进程对之只能互斥地访问。对于系统中的这类资源,必须由系统实施统一分配,即用户在要使用之前,应先提出申请,而不允许用户进程直接使用。
直接相互制约关系
进程间的直接制约关系就是源于它们之间的相互合作。例如输入进程A和计算进程B,它们之间共享一个缓冲区。
A通过缓冲区向B提供数据。B从缓冲中取出数据,并对数据进程处理。但如果该缓冲空时,B因不能获得所需数据而被阻塞。一旦A把数据输入缓冲区后便将进程B唤醒;反之,当缓冲区已满,A因不能再向缓冲区投放数据而被阻塞,当B将缓冲区数据取走后便可唤醒A。
在多桥唤道程序唤醒下, 由于存在着上述两类相互制约的关系,进程在运行过程中是否能获得处和中理机运行与以怎样的速度运行,并不能由进程自身控制,此即进程的异步性。
1、终端用户的请求:
当终端用户在自己的程序运行期间发现有可疑问题时,希望暂停使自己的程序静止下来。亦即,使正在执行的进程暂停执行;若此时用户进 程正处于就绪状态而未执行,则该进程暂不接受调度,唤搭以便用户研究其执行情况或对程序进行修改。我们把这种静止状态称为“槐悔挂起状态”。
2、父进程的请求:
有时父进程希望挂起自己的某个子进程,以便考察和修改子进程,或者协调各子进程间的活动。
3、负荷调节的需要:
当实时系统中的工作负荷较重,已可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统能正常运行。
挂起的状态转化
运行状态->就绪挂起状态:这里发生在客户在程序正在运行是直接挂起程序。注意这里的箭头是单向的,所以在就绪挂起状态结束以后实际上是执行激活步骤,进入就绪状态,等待处理机调度。
阻塞状态->阻塞挂起状态:当内存空间比较紧缺的时候,如果有存在在内存中的,而且是处于阻塞状态的进程,那么就让他更需要内存的程序占用内存,自己进入阻塞挂起状态,PCB等数据存入外存。因为现在这个进程也不能进入就绪状态,这个程序在内存中是没有什么作用的。
阻塞挂起状态->就绪挂起状态:当阻塞状态等待的IO事件或铅链正其他事件到来的时候状态发生改变。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)