zoukankan      html  css  js  c++  java
  • 进程管理顺序执行和并发执行

    一、引言

    在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单位都是进程。操作系统所具有的四大特征也都是基于进程而形成的,并可从进程的观点来研究操作系统。显然,在操作系统中,进程是一个极其重要的概念。

    二、程序的顺序执行及其特征

    顺序执行:通常可以把一个应用程序分成若干个程序段,在各程序段之间,必须按照某种先后次序顺序执行,仅当前一操作(程序段)执行完后,才能执行后继操作。

    程序顺序执行时的特征

    (1) 顺序性:处理机的操作严格按照程序所规定的顺序执行,即每一操作必须在上一个操作结束之后开始。

    (2) 封闭性:程序是在封闭的环境下执行的,即程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变它。程序一旦开始执行,其执行结果不受外界因素影响。

    (3) 可再现性:只要程序执行时的环境和初始条件相同,当程序重复执行时,不论它是从头到尾不停顿地执行,还是“停停走走”地执行,都将获得相同的结果。

     程序顺序执行时的特性,为程序员检测和校正程序的错误带来了很大的方便。

    前趋图

        前趋图(Precedence Graph)是一个有向无循环图,记为DAG(Directed Acyclic Graph),用于描述进程之间执行的前后关系。图中的每个结点可用于描述一个程序段或进程,乃至一条语句;结点间的有向边则用于表示两个结点之间存在的偏序(Partial Order,亦称偏序关系)或前趋关系(Precedence Relation)“→”。 →={(Pi,Pj)|Pi must complete before Pj may start},如果(Pi,Pj)∈→,可写成Pi→Pj,称Pi是Pj的直接前趋,而称Pj是Pi的直接后继。在前趋图中,把没有前趋的结点称为初始结点(Initial Node),把没有后继的结点称为终止结点(Final Node)。此外,每个结点还具有一个重量(Weight),用于表示该结点所含有的程序量或结点的执行时间,前趋图中必须不存在循环。

    程序的并发执行及其特征

       3.1  输入程序在输入第一个程序后,在计算程序对该程序进行计算的同时,可由输入程序再输入第二个程序,从而使第一个程序的计算操作可与第二个程序的输入操作并发执行。一般来说,输入程序在输入第i+1个程序时,计算程序可能正在对第i个程序进行计算,而打印程序正在打印第i-1 个程序的计算结果。例如,我们有一批作业需要批改,但是需要对一个作业的输入、计算和打印三个操作,必须顺序执行。下图表示出了输入、计算和打印这三个程序对一批作业进行处理的情况。

        在该例中存在下述前趋关系:Ii→Ci,Ii→Ii+1,Ci→Pi,Ci→Ci+1,Pi→Pi+1而 Ii+1和Ci及Pi-1是重迭的,亦即在Pi-1和Ci以及Ii+1 之间,可以并发执行。

    程序并发执行时的特性

             程序的并发执行,虽然提高了系统吞吐量,但也产生了下述一些与程序顺序执行时不同的特征。

    1) 间断性

         程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,致使在这些并发执行的程序之间,形成了相互制约的关系。例如,图2-3 中的I、C和P是三个相互合作的程序,当计算程序完成Ci-1的计算后,如果输入程序I尚未完成Ii的处理,则计算程序就无法进行Ci的处理,致使计算程序必须暂停运行。又如,当打印程序完成Pi的打印后,若计算程序尚未完成Ci+1的计算,则打印程序就无法对Ci+1的计算结果进行打印。一旦使程序暂停的因素消失后(如Ii已处理完成),计算程序便可恢复执行对Ci的处理。简而言之,相互制约将导致并发程序具有“执行—暂停—执行”这种间断性的活动规律。

    2) 失去封闭性

         程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行失去了封闭性。这样,某程序在执行时,必然会受到其它程序的影响。例如,当处理机这一资源已被某个程序占有时,另一程序必须等待。

    3) 不可再现性

        程序在并发执行时,由于失去了封闭性,也将导致其再失去可再现性。例如,有两个循环程序A 和B,它们共享一个变量N。程序A 每执行一次时,都要做N:=N+1 操作;程序B每执行一次时,都要执行Print(N)操作,然后再将N 置成“0”。程序A和B以不同的速度运行。这样,可能出现下述三种情况(假定某时刻变量N 的值为n)。

    (1) N:=N+1 在Print(N)和N:=0之前,此时得到的N值分别为n+1,n+1,0。

    (2) N:=N+1 在Print(N)和N:=0之后,此时得到的N值分别为n,0,1。

    (3) N:=N+1 在Print(N)和N:=0之间,此时得到的N值分别为n,n+1,0。

     上述情况说明,程序在并发执行时,由于失去了封闭性,其计算结果已与并发程序的执行速度有关,从而使程序的执行失去了可再现性,亦即,程序经过多次执行后,虽然它们执行时的环境和初始条件相同,但得到的结果却各不相同。

     

  • 相关阅读:
    53分(我的所有)请教:关于ClientDataSet新增记录问题(请富翁们关注!谢谢)
    DBGrid显示行号的几种方法
    现在序号加上,但怎么控制这一列不能拖动,换句话说不能获取焦点?
    Delphi
    巧妙修复delphi文件关联
    cxGrid中有没有办法操作单个cell是否只读?
    delphi cxgrid 使用方法
    Delphi XE2 的控件安装方法。
    舟山牙医 君子慎独 让你的DBGrid竖着站
    DELPHI程序的自动升级功能的实现(AUTOUPDATE使用指南)
  • 原文地址:https://www.cnblogs.com/596014054-yangdongsheng/p/9650702.html
Copyright © 2011-2022 走看看