哈尔滨工业大学计算机科学与技术学院
并行处理与体系结构
哈尔滨工业大学计算机科学与技术学院
第 2章 并行 编程基础
??1 并行编程综述
??2 进程任务和线程
??3 并行性问题
??4 交互和通信问题
哈尔滨工业大学计算机科学与技术学院
?2 进程、任务和线程
?一、进程、任务和线程
?在并行计算机上,用户的应用程
序是以进程、任务或线程方式执
行的。
?进程,是正在执行的程序。
哈尔滨工业大学计算机科学与技术学院
? 1.抽象进程的定义
? 在两个层次上考虑进程概念是很有用
的。
? 抽象观点
? 既简单又能很好地适合于并行计算机的
用户。
? 进程的实现
? 工作原理
哈尔滨工业大学计算机科学与技术学院
? 进程的定义,
?一个进程 P是一个 4元组 (P,C,D,
S),
?其中 P是程序 (或代码 ),C是控制状
态,D为数据状态以及 S为进程 P的
状态。
?进程是动态的。
哈尔滨工业大学计算机科学与技术学院
?程序 (代码 )
? 任何进程与一个程序相关 。
? 控制和数据状态
? 大多数程序基于命令式机器模型,中心
概念是状态更新。
? 一个命令式程序可看成是一个状态机
(或一个自动机 ) 。
哈尔滨工业大学计算机科学与技术学院
? 下面定义某些术语
? 程序变量集的定义,
? 一个程序使用两个变量集:数据变量由程
序员声明用来保存数据值的变量。
? 控制变量是保存控制信息的变量,它们不
需要显式说明。
? 控制变量保存的是有关下一步应执行什么操
作的信息。
? 数据变量集和控制变量集两者的合集形成
了程序变量集。
哈尔滨工业大学计算机科学与技术学院
? 配对集的定义,
? 在任何时候,一个程序的每个数据或控制
变量需与一个值配为一对,该值可能是一
个未定义的特殊值。
? 在时间 t时所有 (数据变量,数据值 )的配
对集定义了时间 t的程序的数据状态。
? 类似地,时间 t的所有 (控制变量,控制值 )
配对集定义了时间 t的程序的控制状态。
? 因此,时间 t的程序状态是 t时间的数据状
态和控制状态的和。
哈尔滨工业大学计算机科学与技术学院
? 程序的最后状态和发散状态定义,
? 程序从初始状态启动。 当执行了程序
的一个原子操作后,程序就从当前状态转
为下一状态。程序不断执行原子操作并不
断更新其状态,直至终止。此时程序处在
最后状态。
? 当一个程序进入一个被确认不会终结的状
态时,则说该程序进入了发散状态。
哈尔滨工业大学计算机科学与技术学院
?进程状态
?在任何时间,进程具有某个状态
(status)。下图画出了某些重要
状态以及它们之间的转换 。
哈尔滨工业大学计算机科学与技术学院
哈尔滨工业大学计算机科学与技术学院
? 进程状态转换图的说明,
? 开始时,进程为不存在状态。当它的
创建者,父进程执行进程创建操作后,
它才出现。一个新创建的子进程准备
执行,但仅在被调度后,它方可开始
运行 (执行其代码 )。
? 在进程运行中可能发生以上几种状态。
哈尔滨工业大学计算机科学与技术学院
?在实现进程时,必须考虑以下各方
面,
?执行方式 ;
?地址空间 ;
?进程现场 ;
?进程描述符 ;
?进程控制。
哈尔滨工业大学计算机科学与技术学院
? 二,进程的变异
? 传统的操作系统进程有分离的地址空
间;
? 分离的地址空间概念将使进程管理非
常耗时。
哈尔滨工业大学计算机科学与技术学院
?Unix进程为重量级进程
? 例如,当一个 Unix进程执行一个 fork()
系统调用以创建一个子进程时,它必须为
子进程创建一个新的地址空间。这意味着
必须分配存储器,复制父进程的数据段和
描述符,并为子进程设置一个运行时间堆
栈。由于这种性能原因。
? 进程创建和切换的高开销会对并行处理造
成有害影响。
哈尔滨工业大学计算机科学与技术学院
? 重量级的并行进程不适用于可扩展并
行计算机,除非并行进程具有粗计算
粒度。
? 要开发较细粒度并行性,必须使用轻
量级进程。
? 在许多操作系统、线程库和并行语言
中已提出了轻量级进程 (也称为线程 )
概念并已得到实现。
哈尔滨工业大学计算机科学与技术学院
?OS进程和线程间的主要差别,
? 在重量级的 OS进程中,多个线程能共
存于进程 (包括进程描述符 )的同一地
址空间,并且共享。
? 当创建一个 (重量级 )进程时,通常它
有一个单线程,称为基本线程。
? 通过执行一个线程创建操作,任何进
程能创建另外的线程。
哈尔滨工业大学计算机科学与技术学院
? 典型的线程创建操作形式如下,
threalcreate(foo,argument1,……,
argument n);
? 这种操作与过程调用非常类似。
? 该操作创建一个进程,它将用给定的 n个
参量执行函数和。
? 创建一个线程要比创建一个重量级进程
快得多。
哈尔滨工业大学计算机科学与技术学院
? 在一般的并行描述里,
? 任务 =进程 =重量级进程 =操作系统进

? 只用术语进程来表示重量级进程或线
程,
轻量级进程 =线程