监控
在并行过程中,看来多数过程是一边公用有限的计算资源(CPU,数据区域,装置等),一边同时运行。即使在多数并行运行的多个过程之间,有相互排除或同步等于涉时,也不会在相互之间给其它过程带来恶劣影响,所有的过程看上去都能让其并行运行,我们把进行这种管理的程序称之为监控。
时间段为了让多个过程看上去进行并行运行,监控要将CPU时间细分,我们称被分割的短CPU时间为时间段。监控把时间段的一个区段分配给某个过程作为执行时间。由监控提供给过程使用的时间段一到,即使整个过程处理没有结束,也要中断该过程的执行。而将下一个时间段分配给其它过程去执行。这样;因为监控对于多个过程,都均等地分配.CPU时间,所以春上去,可以认为这些过程是并行运行的。
过程的状态转移显然,过程的运行内容是被程序所决定的。过程是通过将这个程序存放到计算机存贮器中而生成的、被生成的过程仅仅处于存在状态,即处于非活性状态。但是,对于存贮器,一旦发出了这个过程的执行要求,则过程即被激发而变成运行状态。被激发的过程,取ready(执行等待)、running(执行中)、waiting(条件等待)这三个状态之一.监控就是通过对各个过程按上述三个状态之一进行控制,来管理并行过程的执行情况。
过程的状态转移如图5.17所示,首先,过程一且被请求执行,则监控将把该过程编辑到ready状态。通常会有许多过程被编辑到ready状态,但监控对它们均等地分配时间段,促使这些过程一个个地执行,一旦时间段被分配给某个过程,该过程就转移到run-ning状态,由CPU执行定义过程的代码。一旦遇到wait(s)这个命令,被指定的semaphore变量s的值就减1,其结果为鱼时,该过程就被转移到waiting状态,终止其运行。对于执行中的过
程,当使用的由监控所允许的时间段一到,就会中断过程的执行,再次被转移到ready状态。当处于running状态时,若定义过程的代码执行结束,则其过程将返回到非活性状态,即返回到仅仅在存贮器中存在的状态,直到再次由startprocess发出执行要求以前,始终处于“休眠”状态。另外,处于waiting状态的过程,根据其它过程的执行中所发出的sigral(s)命令,被解除休止,并再次被转移到readg状态,以上是我们从一个过程看状态转移关系的大致情况。
为状态控制用的数据结构并行运行的各个过程、取上述三种状态中的一种,单CPU时,处于running状态的过程只有一个,其它过程处于ready或waiting状态。监控为了识别各个过程,需参照各个过程的固有名称。
表示许多过程处于ready状态的最单纯的模型是排队,所调监控让某个过程转移到ready状态,是指让过程进行ready的排队。ready这个状态,可以认为是一个FIFO序列,并按照成为ready状态的顺序,监控程序把各过程名称排列成这种FIFO序列。因此,从FIFO序列的前头开始,顺序地分配CPU的时间段。具体地说,就是把位于FIFO序列最前头的过程名称移向running状态,而在FIFO序列的尾部,事先联上idle这个过程。这是在ready状态的过程根本没有时,为让CPU进入idle状态而准备的假过程。
作为表示多个过程处于waiting状态的模型,也采用排队方法。处于waiting状态的过程,根据其它过程内的signal(s)命令或外部中断,等待被给出的条件信号。识别这个信号的变量是semaphore,因为可以认为semaphore表示等待条件,所以可对每个条件考虑FIFO序列,并对每个条件,按进入等待状态的顺序,将过程排列成FIFO序列。图5.18表示了为统一控制并行过程的状态转移而采用的数据构造。图内各方框放置过程名。再有,与semaphore2联接的框内的NIL,表示对于那个·semaphore
没有等待过程。
核心程序我们把为了管理并行过程的一些基本机能,即过程的状态转移、过程的顺序控制、相互排除、同步基本命令等,综合起来,就构成了监控程序的核心,称之为核心程序,核心程序仅根据时间限制中断、陷井、外部信号中断这三种方法启动。
(1)时间限制中断
为了让多个过程看上去是在进行并行动作。将细分CPU时间的时间段,按顺序分配给各个过程,让它们均等使用CPU.每隔一定时间,根据时钟产生时间段中断,一旦发生该中断,则核心程序即中断执行中的过程,允许别的过程使用CPU.为了切换过程的执行,其具体顺序如下:
算法5.3(时间段中断)
[1]在时间段中断的处理中,为了不再接受别的中断,进行中断禁止。
[2]执行中的过程状态信息进栈,其过程名置于执行等待FIFO的后尾
[3]将执行等待的FIFO的前面的过程名,移向执行中这个状态。
[4]被移至running状态的过程的栈中状态信息出栈,解除中断禁止。然后开始执行这个新过程。
(2)陷井
陷井是利用软件产生的中断,具体地说就是使用监控的机能命令,即通过监控、调用,产生陷井。此时的处理顺序如下。
算法5.4(陷井)
[1]进行中断禁止。
[2]执行中的过程状态信息进栈。
[3]执行引起陷井的监控调用,
[4][2]中进栈的状态信息出栈,解除中断禁止,再次开启中断了的过程的执行。
作为管理并行过程执行的监控调用,本章中考虑以下五种,
startprocess(p)将过程p置于执行等待的FIFO序列的尾
部。
stopprocess(p)将过程p强制返回非活性状态。
signal(s)关于semaphores的V命令。
wait(s)关于semaphores的P命令。
startIOc(a)让输人输出的动作(命令c,变量表a)开始执行。
startIO这个监控调用,将命令和变量表给与该IO过程后,一直等到其动作结束信号返回。这期间,为了不浪费CPU时间,一旦送出命令,发出这个监控调用的过程,就会根据以c为识别符的FIFO序列,一直等待到I0结束。IO的结束根据外部中断通知监控,其处理顺序如下所述。
(3)外部中断
由startIO开始的输人输出动作一结束,即发生外部中断.根据这个中断,发出startIO,休止过程的执行再度开启。对于外部中断的处理,可以概括如下:
算法5.5(对于外部中断的处理)
[1]进行中断禁止。
[2]执行中的过程状态信息进栈。
[3]对于中断发生的10动作识别符,让休止的过程移至执行等待FIFO序列的尾部。
[4][2]中进栈的状态信息出栈,解除中断禁止。
随便看看
- 2024-09-19液压操纵箱-液压传动基础知识
- 2024-09-19液压泵的故障和排除-液压传动基础知识
- 2024-09-25传感器测量原理
- 2024-09-20大宇(斗山)故障代码0110-03:冷却液温度传感器和蓄电池正极断路/短路
- 2024-10-08油液主要的物理性质