北航程序设计语言原理教材第13章.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序的并发性和进程交互原语 前面章节我们已多次提到并行(parallel)命令和并发(concurrent)程序, 但主要是讨论顺序程序。所谓顺序程序是指一个程序作业从起始到终了的每个作业步骤顺次地执行完毕。程序员写程序时就默认有一台顺序执行的机器, 为它排出先后执行的动作步(语句)。然而, 自然界发生的事, 大多数是并行的。只是我们在讨论之中把它孤立和顺序化。这是为了早期计算机昂贵, 一台机器CPU只能顺序地执行, 自然是首先发展顺序计算。在实时控制领域, 即使在早期也无法顺序化。例如, 飞行姿态控制程序, 每时每刻都要计算敌我双方飞机的速度、高度、方向才能决定控制措施。再如, 民航机票发售系统, 各站点售票是同时进行的, 既让乘客随意订座还不许卖重了。这都要求多个计算同时平行地执行, 并协调一致。我们称这种程序为并发程序(concurrent)。显然, 并发的前题是并行(平行, parallel)。然而, 并发和并行的概念在不同文献上也少有出入。本书把“并行”定义为程序可相关或不相关平行执行,有时仅指不相关的平行执行。“并发”执行必然相关。 由于近年硬件成本大幅度下降。网络计算快速发展,用多台机器, 多个CPU完成一个计算是极普通的事。因而原先人为顺序化的顺序计算就没有必要了。而且今后为了利用信息资源, 一上机就上网是应用计算机主流。并发程序设计、并发语言将成为主流。顺序程序倒成了并发的特例。 操作系统本身是一个高度并行的软件,它本身一般是某种高级顺序语言(如C)扩充了一些支持并发进程低级原语,加上汇编语言编写而成的。在这个意义上,这些扩充了低级原语的语言就是并发高级语言。 其它更高层的通信机制是建立在这些低级原语上的模块(相当于该语言的库模块)语言的机制与特征并没有扩充,编译也没有大改动。 完全独立于操作系统,在高级语言内提供全套支持变形程序设计的并发,高级程序设计语言是Ada,因为它要编制机载、弹载的嵌入式程序。这些程序从单板、单片开始,编制监控程序(小O.S )连用应用程序。这种语言并不多见。 因此,研究并发高级程序设计语言,勿宁说首先研究并发程序设计。搞清了各种并发模型和通信机制再去看已有语言的扩充就很容易理解和实现了。 本章介绍并发程序设计的基本概念。并发程序带来的问题和要解决的基本问题。基于共享变量和基于消息传递的两类并发机制反映了不同物理模型, 它们共同要解决的是对共享变量的互斥访问和进程间如何通信协调。 本章着重介绍概念和术语, 是下章讨论各种并发机制的基础。 13.1 基本概念 并行程序是同时执行两个或多个程序, 在程序执行完之前必然有时间上的重叠。我们知道, 一个程序的一次执行叫做一个进程(process)。研究并发程序首先要了解进程及其相互作用。 13.1.1 程序与进程 源程序经编译、连接编辑成为可执行代码。它们是可执行的“半成品”, 可以作为用户文件寄存于外存。可以作为库文件和系统文件。一旦需要则调入内存, 然后开始执行。进程是个动态概念, 即程序以一组数据的一次执行。我们先看看进程在内存中的执行状态及实现过程。就单个进程而言, 它有四种状态: ·就绪ready 可执行代码装入内存立即可运行。 ·运行running 执行进程。 ·阻塞blocked 停止本进程执行, 随时可恢复执行。 ·终止terminated 停止, 且不可恢复执行。 除了这四种状态而外, 控制进程的逻辑操作是激活(activating)触发(trigging)和中断(interrant)。所谓激活是创建一个进程并使之进入就绪或立即运行状态。所谓触发是使就绪或阻塞状态转入运行态。所谓中断即使运行的进程转入阻塞或终止态。然而, 这些逻辑操作是机器指令层次上的, 在语言层次上借助于各种原语(primitive)或约定实现。所谓原语是程序语言中定义的例程名。例如, 早期的操作系统低级原语fork和quit就是用来控制进程状态的。一个进程调用fork例程, 则中断本进程创建新的子进程并执行之。一个进程调用qait, 将终止本进程。再如, cobegin…coend或par…end命令, 并发程序的开始执行, 用某种约定自动激活各个进程, 如Ada主控程序开始所有任务均激活。一个进程终止则自动触发阻塞的父进程使之执行。 在更低的实现层次上中断分为外部中断和内部中断(由外部触发和本进程触发)。触发中断后, 调用中断处理器(interrupt handler)例程, 再调用原语例程, 并将原语例程要求创建或终止的例程提交调度器例程, 完成进程控制。其控制流

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档