系统调用调用了内核代码,但是,还是属于这个进程的进程上下文。
进程的切换要依靠时钟中断。
还要明白内核线程的功能,与进程切换没关系。
block和wakeup原语必须成对使用进程的阻塞与唤醒
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。
在多道程序唤醒下, 由于存在着上述两类相互制约的关系,进程在运行过程中是否能获得处理机运行与以怎样的速度运行,并不能由进程自身控制,此即进程的异步性。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)