一个程序要能够在计算机系统中运行,除了程序本身必须是机器可执行的目标代码之外,还要有相应的数据。程序和数据还要提前被存储在存储器中,即需要把一定的存储空间分配给这个程序和数据。另外,在执行该程序前,处理器中的指令计数器必须指向存储器中被执行程序的首地址。如果在程序执行过程中还需要其他的资源,比如需要从磁盘的一个文件中接收一批数据,那么在申请使用磁盘时,还要知道磁盘的设备编号、文件的名称以及文件在磁盘中的物理位置、文件长度等资源信息,所有这些信息均需要有存储空间对它们加以保存,以便在运行时使用。显然,如果有多个程序要同时进人内存并运行,那么每个要运行的程序也需要准备程序代码、数据、资源信息以及保存这些代码、数据、资源信息的存储空间。 为了能够从技术上较为准确地描述正在运行、将要运行或者刚刚退出运行的各个程序的执行代码、数据以及所需的资源信息等,人们引进了进程(Process)这个概念。

多道程序设计多道程序设计

采用多道程序设计可以提高处理器的利用率。多道程序设计技术充分发挥了处理器与外围设备以及外围设备之间的并行工作能力,从而提高处理器和其他各种资源的利用率。下面从程序的顺序执行、程序的执行环境和程序的并发执行几方面介绍多道程序设计模型。

程序的顺序执行

程序是一个在时间上按严格次序前后相继的操作序列,这些操作是机器指令或高级语言编写的语句。人们习惯的传统程序设计方法是顺序程序设计,计算机也是以顺序方式工作的:处理器一次执行一条指令,对内存一次访问一个字节或字,对处部设备一次传送一个数据块。顺序处理也是人们习惯的思考方法,为了解决一个复杂的问题,人们把它分解成一些较为简单、易于分析的小问题,然后逐个解决。也可以把一个复杂的程序划分为若干个程序段,然后按照某种次序逐个执行这些程序段。

我们把一个具有独立功能的程序独占处理器直到得到最终结果的过程称为程序的顺序执行。程序的顺序执行具有如下特点。

顺序性

程序所规定的动作在机器上严格地按顺序执行。每个动作的执行都以前一个动作的结束为前提条件,即程序和机器执行它的活动严格一一对应。

封闭性

程序运行后,其计算结果只取决于程序自身,程序执行得到的最终结果由给定的初始条件决定,不受外界因素的影响。程序所使用的资源(包括处理器、内存、文件等)是专有的,这些资源的状态(除了初始状态外)只有程序本身的动作才能改变。

程序执行结果的确定性

也称为程序执行结果与时间无关性。程序执行的结果与它的执行速度无关,即处理器在执行程序时,任意两个动作之间的停顿对程序的计算结果都不会产生影响。

程序执行结果的可再现性

如果程序在不同的时间执行,只要输入的初始条件相同,则无论何时重复执行该程序都会得到相同的结果。

程序的顺序性和封闭性是一切顺序程序所应具有的特性,从这两个特性出发,不难引出程序执行时所具有的另外两个特性。顺序程序与时间无关的特性,可使程序的编制者不必去关心不属于他控制的那些细节(如操作系统的调度算法和外部设备操作的精确时间等);顺序程序执行结果的可再现性,则对程序检测和校正程序的错误带来了方便。

程序的并发执行

所谓程序并发执行,是指两个或两个以上程序在计算机系统中,同时处于已开始执行且尚未结束的状态。能够参与并发执行的程序称为并发程序。程序的并发执行,可以充分利用系统的资源,提高计算机的处理能力。但是,程序的并发执行产生了一些和程序顺序执行时不同的特性。程序的并发执行有如下特征。

在执行期间并发程序相互制约

资源的共享和竞争存在于多道程序的并发执行中,从而制约了各道程序的执行速度。由于本来并无逻辑关系的程序之间产生了相互制约的关系,而各个程序活动的工作状态与所处环境有密切关系,使并发程序的执行出现了“执行-暂停-执行”的活动现象。

程序与计算不再一-对应

在并发执行中,允许多个用户进程调用一个共享程序段,从而形成了多个“计算”。如在分时系统中,一个编译程序往往同时为几个用户提供编译服务,该编译程序便对应了几个“计算”。

并发程序的执行结果不可再现

并发程序执行结果与其执行的相对速度以及并发执行的多道程序之间的相互关系有关,导致并发程序的执行结果不可再现,即执行结果是不确定的。

程序的并行执行与程序的并发执行

多道程序的并发执行是指它们在宏观上,即在某一段时间周期内是同时进行的(这个时间周期,比处理器的指令处理周期要长得多,但是从操作人员的感觉来看,仍然时一个瞬间)。但从微观上看,除了多处理器系统外,在单处理器系统中,这些程序仍然是顺序执 行的。

程序的并行执行与程序的并发执行,这两者存在着差别。前者是指不论从宏观的时间周期上看,还是从微观上看,若干程序确实在同时运行;而程序的并发执行,如果在单处理器系统中,它们在宏观上是同时进行的,但在微观上,这些程序仍然是顺序执行的。

多道程序设计

在现代计算机系统中,为了提高系统中各种资源的利用效率,缩短程序执行的周转时间,广泛采用了多道程序技术,使多种硬件资源能并行工作。

多道程序设计技术的引入

为了提高计算机系统中各种资源的利用效率,缩短进程的周转时间,在现代计算机中广泛采用多道程序技术,使多种硬件资源能并行工作。顺序程序的上述特性是为人们所理解和熟悉的,但这不是一切程序所共有的。在追求多部件并行和多任务共享资源的多道程序操作系统的程序设计中,这些性质就不复存在了。

在许多情况下,要求计算机能够同时处理多个具有独立功能的程序,以增强系统的处理能力和提高机器的利用率。通常采用并行操作技术,使系统的各种硬件资源尽量做到并行工作。

多道程序同时在系统中存在并且运行,这时的工作环境与单道程序的运行条件相比,大不相同。首先,每个用户程序都需要一定的资源,如内存、设备、处理器时间等,因此系统中的软、硬件资源不再是单个程序独占,而是由几道程序所共享。这样,共享资源的状态就由多道程序的活动共同决定。

此外,系统中各部分的工作方式不再是单纯串行的,而是并发执行的。所谓并发执行,

如果是单处理器,则这些并发程序按给定的时间片交替地在处理器上执行,其执行的时间是重叠的;如果是多处理器,则这些并发程序在各自处理器上运行。

举一个例子,假定有两个程序A和B都要执行。A程序的执行顺序为:在CPU上执行10s,在设备 DEV1上执行5s,又在CPU上执行5s、在设备DEV2上执行10s,最后在CPU

上执行10s;B程序的执行顺序为:在设备DEV2上执行10s,在CPU上执行10s,在设备DEV1 上执行5s,又在CPU上执行5s,最后在设备DEV2上执行10s。

在顺序环境下,或者A程序先执行,然后B程序执行;或者B程序先执行,A程序后执行。假设A程序先执行,如图3-1a所示,A、B两个程序全部执行完毕需要80s时间,其中有40s是程序使用CPU,15s使用设备 DEV1,25s使用设备DEV2。经过计算,得出在顺序环境下: CPU的利用率=40/80=50% DEV1的利用率=15/80=18.75% DEV2的利用率=25/80=31.25% 而在并发环境下,A、B两个程序可以同时执行,当A程序在CPU上执行时,B程序可以在设备DEV1上执行,如图3-1b所示,A、B两个程序全部执行完毕需要45s时间。经过计算,得出在并发环境下: CPU的利用率=40/45=89% DEV1的利用率=15/45=33% DEV2的利用率=25/45=56% 由此可见,采用多道程序设计技术执行同样的两个程序,就能大大改进系统性能。

多道程序设计环境的特点

所谓多道程序设计,就是允许多个程序同时进人内存并运行。多道程序设计是操作系统所采用的最基本、最重要的技术,其根本目的是提高整个系统的效率。

衡量系统效率的尺度是系统吞吐量。所谓吞吐量是指单位时间内系统所处理进程(程序)的道数(数量)。如果系统的资源利用率高,则单位时间内所完成的有效工作多,吞吐量大;反之,如果系统的资源利用率低,则单位时间内所完成的有效工作少,吞吐量小。引人多道程序设计后,提高了设备资源利用率,使系统中各种设备经常处于忙碌状态,提高了内存资源利用率,同时进人系统中的多个程序可以保存于内存的不同区域中;提高了处理器资源利用率。最终,提高系统吞吐量。

多道程序设计改善了各种资源的使用情况,从而增加了吞吐量,提高了系统效率,但也带来了资源竞争。因此,在实现多道程序设计时,必须协调好资源使用者与被使用资源之间的关系,即对处理器资源加以管理,以实现处理器在各个可运行程序之间的分配与调度;对内存资源加以管理,将内存分配给各个运行程序,还要解决程序在内存的定位问题,并防止内存中各个程序之间互相干扰或对操作系统的干扰;对设备资源进行管理,使各个程序在使用设备时不发生冲突。 80 多道程序设计环境具有以下特点。

(1)独立性

在多道环境下执行的每道程序都是逻辑上独立的,且执行速度与其他程序无关,执行的起止时间也是独立的。

(2)随机性

在多道程序环境下,程序和数据的输入与执行开始时间都是随机的。

(3)资源共享性

一般来说,多道环境下执行程序的道数总是多于计算机系统中处理器的个数,单处理器系统更是如此。显然,同时执行的各个程序只能共享系统中已有的处理器。同样,输入输出设备、内存、信息等资源都将被各个程序所共享。资源共享将导致对进程执行速度的制约。

多道程序设计的缺陷

采用多道程序设计能改善资源使用情况,提高系统效率。但是,采用多道程序设计也存在一些问题。

(1)可能延长程序的执行时间

我们继续分析在本节中前面讨论过的有两个程序A和B都要执行的例子。程序A和程序B,分别顺序执行各需要40s完成。而在并发环境下,A、B两个程序同时执行,一共需要45s。从整体上看,节省了时间,提高了效率。但就其中一个程序而言,原先只需要40s,现在需要45s,减慢了12.5个百分点。可见,多道程序设计提高了系统的吞吐量,但延长了某些程序的执行时间。

在一般情况下,某个程序总的执行时间多了5s,不会出现什么大问题。但是在实时操作系统中,对程序的执行时间会有非常严格的要求,是否采用多道程序设计技术就要特别慎重了。例如,对一个飞行防撞系统来说,程序的执行缩短5s,就有可能拯救两架即将发生碰撞的飞机上所有人员的生命;而多了5s则会酿成不可挽回的大错。

(2)系统效率的提高有一定限度

从图3-1中我们可以看到,在两道程序并行工作时,处理器、DEV1和DEV2仍有空闲的时间,所以可以再增加并行工作的程序道数,进一步提高处理器、DEV1和DEV2的利用率。那么,是否可以让它们的利用率达到100%呢?从表面上看,只要增加并行工作道数就可提高效率,但实际上继续增加并行工作的程序道数之后,系统的效率的提高程度是有限的。

在理想条件下,多道程序在使用设备时不会发生冲突,这样它们可在同一时刻使用系统中的不同设备,而对同一个设备能在不同的时刻使用,所有的设备都得到了最充分的利用。但是,内存空间的大小限制了可同时装人的程序数量;外部设备的数量有限也是一个制约条件;另外,多个程序同时要求使用同一资源的情况会经常发生;再考虑到用户向系统提交程序在时间上的随机性,以及程序执行速度的不确定性等因素,这些因素限制了在多道程序系统对任何一种资源实现理想状态的调度。

理想状态的资源使用很难实现,实际上多道程序在彼此竞争系统中的各种资源。竞争的成功者取得了对某种资源的使用权,而暂时的竞争失败者就不得不等待,有等待就会降低效率。所以,多道程序设计对资源的利用率的提高是有一定限度的。


本站由 Diebug 使用 Stellar 1.29.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
本站总访问量 | 本站总访客数