进程和同步及通信,进程死锁
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实现的两种方法: 1) OS提供进程创建,结束和同步的系统调用; 2) 由并行语言编译器将并发语言的语句转化 为对OS的系统调用。
12
与进程相关的系统调用
UNIX操作系统利用进程支持并发执行; 它提供了如下系统调用:
fork():创建一个新进程。 (1) 该子进程继承了父进程的程序空间, 复制了父进程的数据段和栈段。也就是说不 管是父进程还是子进程,在占有处理机后, 都从fork()调用的返回点开始运行;
waitpid(pid,…):等待pid所指定的进 程结束。
14
多进程实现前述的读写并发程序
pid = fork( ) if pid = = 0 then
{ read(b); exit(0);}
else read(a); wait(&status); c = a+b; write(c);
15
4.2 进程的同步与互斥
(2) 父进程fork()调用的返回值是子进程 的进程标识pid; (3) 子进程fork()调用的返回值是0。
13
exit(status):进程结束。该系统调用发 出后,操作系统将从系统中删除调用exit的 进程,并将status值传给等待它结束的父进 程。
wait(&status):等待子进程结束。 (1)当有多个子进程时,任一个子进程结束 即将控制返回调用者,并将子进程调用exit (status)时的status值送到&status指针 所指单元中。 (2)在控制返回调用者时,同时将所等到的 子进程pid作为wait()系统调用函数的返
16
例1同步关系
S1
进程P1依次运行S1,
S2,S4,S5,S7;
S2
S3 进程P2依次运行S3,
S6
S4
失去封闭性:多个程序共享系统中的各种资源,资源的状
态将由多个程序改变,失去封闭性。一个程序执行时,会受 到其他程序的影响。
不可再现性(待续)
计算机操作系统
并发与共享的问题:并行程序访问共享数据 问题举例:(count为共享变量初值=300)
Program A: …
Program B:…
N=count
前一个操作执行完后才能执行后继操作。
I1
C1
P1
I2
C2
P2
图3-2 程序顺序执行时的前趋图
其中I、C、P分别表示输入、计算和打印操作
顺序执行的特点:顺序性,封闭性,可再现性
计算机操作系统
2. 程序的并发执行
概念:若干个程序(或程序段)同时在系统中运行,这
些程序(或程序段)的执行在时间上是重叠的,一个程
Parend;
1)并发语句示例 1
Parbegin read(a); read(b);
Parend; c= a+b; write(c);
10
2)并发语句示例2
Var F,G:file of T;
r,s:T;
reset(F);
read(F,r); while not eof(F) do{ s=r; Parbegin write(G,s); read(F,r); Parend; }
序(或程序段)的执行尚未结束,另一个程序(或程序
段)的执行已经开始。
I1
I2
I3
C1
C2
C3
若顺序执行三个作业
共需要9(3*3)分钟 并行执行三个作业只
P1
P2
P3
需要5(5/3*3)分钟
计算机操作系统
程序并发执行的特点:
间断性:并发程序由于共享资源或为完成同一项任务而相
互合作,形成相互制约关系。
程序员写顺序程序,用识别工具识别 并发成分。再组织使用操作系统的并 发机制。
由程序员识别并发成分:
➢ 用并发程序设计语言设计并发程序, 由编译系统安排并发;
➢ 直接利用操作系统的系统调用。
9
并发程序设计语言 --- 并发语句
Βιβλιοθήκη Baidu
它是一种高级语言; 语法形式:
Parbegin
S1;S2; …Sn;
优点:
并发语句的结构化特征非常好。
缺点:
存在着描述能力不强的缺点,即 存在着用Parbegin/Parend语句无 法描述的并发优先关系。
改进手段:
write(G,r); }
辅以其他手段,则并发语句可以 大大增加其描述并发的能力。
11
4.1.2并发执行的实现
前面是对并发的高级语言描述,要真正实现并 发执行,需要通过OS支持的进程机制。
执行。 操作系统核心程序也要尽可能地并发运行
S1
S2
S3
图4.1 任务中子任务关系示意图
7
4.1.1 并发编程方法
传统的串行程序存在着并行成分: Read (a); Read (b); c = a + b; Write (c)
Read(a)和Read(b)两个语句可并行 执行。
8
识别程序中的并发成分有两种方法:
程序段或语句)间的执行顺序关系,或
s1
者是一个大的计算各子任务间的因果关 系。
1)是一个有向无循环图;
s2
s3
s4
2)图的结点对应程序中的一条语句、 s5 s6 一个程序段或一个进程;
3)结点间的有向边:表示两个结点之 s7
间存在的偏序或前趋关系 “→”;
计算机操作系统
1. 程序的顺序执行
指各程序段按照某种先后次序执行,仅当
第4章 进程的同步与通信、进程死锁
主要内容:并发执行,临界段,信号量,经 典进程同步问题,消息传递原理,死锁。 重点:临界段、同步、互斥的概念;信号量 的概念和物理意义;消息传递的原理,死锁 的概念。 难点:信号量解决进程同步与互斥的方法, 死锁防止、避免。
1
1. 程序的顺序执行
前趋图:用于描述一个程序的各部分(
同步关系(直接制约):为了完成一个共同任务,相 互协作的几个进程需要在某些确定点上协调他们的工 作,等待来自其它进程的信息,以调整它们的推进速 度,方可顺利执行完毕。
输入进程
缓冲区
计算进程
互斥关系(间接制约):把并发进程间存在的因相互 竞争使用独占资源(共享资源)而产生的制约关系。 例如:打印机,共享内存;
M=count
N=N+100
M=M-200
count=N
count=M
…
…
如果按以下次序占处理机运行:
N=count,N=N+100; M=count,M=M-200,count=M; count=N. 结果count=400(应为200)*
4.1 并发执行实现
并发的需要
操作系统应尽量支持用户态程序最大限度地并发执行。 程序设计要利用OS对并发运行的支持,安排事务并发
12
与进程相关的系统调用
UNIX操作系统利用进程支持并发执行; 它提供了如下系统调用:
fork():创建一个新进程。 (1) 该子进程继承了父进程的程序空间, 复制了父进程的数据段和栈段。也就是说不 管是父进程还是子进程,在占有处理机后, 都从fork()调用的返回点开始运行;
waitpid(pid,…):等待pid所指定的进 程结束。
14
多进程实现前述的读写并发程序
pid = fork( ) if pid = = 0 then
{ read(b); exit(0);}
else read(a); wait(&status); c = a+b; write(c);
15
4.2 进程的同步与互斥
(2) 父进程fork()调用的返回值是子进程 的进程标识pid; (3) 子进程fork()调用的返回值是0。
13
exit(status):进程结束。该系统调用发 出后,操作系统将从系统中删除调用exit的 进程,并将status值传给等待它结束的父进 程。
wait(&status):等待子进程结束。 (1)当有多个子进程时,任一个子进程结束 即将控制返回调用者,并将子进程调用exit (status)时的status值送到&status指针 所指单元中。 (2)在控制返回调用者时,同时将所等到的 子进程pid作为wait()系统调用函数的返
16
例1同步关系
S1
进程P1依次运行S1,
S2,S4,S5,S7;
S2
S3 进程P2依次运行S3,
S6
S4
失去封闭性:多个程序共享系统中的各种资源,资源的状
态将由多个程序改变,失去封闭性。一个程序执行时,会受 到其他程序的影响。
不可再现性(待续)
计算机操作系统
并发与共享的问题:并行程序访问共享数据 问题举例:(count为共享变量初值=300)
Program A: …
Program B:…
N=count
前一个操作执行完后才能执行后继操作。
I1
C1
P1
I2
C2
P2
图3-2 程序顺序执行时的前趋图
其中I、C、P分别表示输入、计算和打印操作
顺序执行的特点:顺序性,封闭性,可再现性
计算机操作系统
2. 程序的并发执行
概念:若干个程序(或程序段)同时在系统中运行,这
些程序(或程序段)的执行在时间上是重叠的,一个程
Parend;
1)并发语句示例 1
Parbegin read(a); read(b);
Parend; c= a+b; write(c);
10
2)并发语句示例2
Var F,G:file of T;
r,s:T;
reset(F);
read(F,r); while not eof(F) do{ s=r; Parbegin write(G,s); read(F,r); Parend; }
序(或程序段)的执行尚未结束,另一个程序(或程序
段)的执行已经开始。
I1
I2
I3
C1
C2
C3
若顺序执行三个作业
共需要9(3*3)分钟 并行执行三个作业只
P1
P2
P3
需要5(5/3*3)分钟
计算机操作系统
程序并发执行的特点:
间断性:并发程序由于共享资源或为完成同一项任务而相
互合作,形成相互制约关系。
程序员写顺序程序,用识别工具识别 并发成分。再组织使用操作系统的并 发机制。
由程序员识别并发成分:
➢ 用并发程序设计语言设计并发程序, 由编译系统安排并发;
➢ 直接利用操作系统的系统调用。
9
并发程序设计语言 --- 并发语句
Βιβλιοθήκη Baidu
它是一种高级语言; 语法形式:
Parbegin
S1;S2; …Sn;
优点:
并发语句的结构化特征非常好。
缺点:
存在着描述能力不强的缺点,即 存在着用Parbegin/Parend语句无 法描述的并发优先关系。
改进手段:
write(G,r); }
辅以其他手段,则并发语句可以 大大增加其描述并发的能力。
11
4.1.2并发执行的实现
前面是对并发的高级语言描述,要真正实现并 发执行,需要通过OS支持的进程机制。
执行。 操作系统核心程序也要尽可能地并发运行
S1
S2
S3
图4.1 任务中子任务关系示意图
7
4.1.1 并发编程方法
传统的串行程序存在着并行成分: Read (a); Read (b); c = a + b; Write (c)
Read(a)和Read(b)两个语句可并行 执行。
8
识别程序中的并发成分有两种方法:
程序段或语句)间的执行顺序关系,或
s1
者是一个大的计算各子任务间的因果关 系。
1)是一个有向无循环图;
s2
s3
s4
2)图的结点对应程序中的一条语句、 s5 s6 一个程序段或一个进程;
3)结点间的有向边:表示两个结点之 s7
间存在的偏序或前趋关系 “→”;
计算机操作系统
1. 程序的顺序执行
指各程序段按照某种先后次序执行,仅当
第4章 进程的同步与通信、进程死锁
主要内容:并发执行,临界段,信号量,经 典进程同步问题,消息传递原理,死锁。 重点:临界段、同步、互斥的概念;信号量 的概念和物理意义;消息传递的原理,死锁 的概念。 难点:信号量解决进程同步与互斥的方法, 死锁防止、避免。
1
1. 程序的顺序执行
前趋图:用于描述一个程序的各部分(
同步关系(直接制约):为了完成一个共同任务,相 互协作的几个进程需要在某些确定点上协调他们的工 作,等待来自其它进程的信息,以调整它们的推进速 度,方可顺利执行完毕。
输入进程
缓冲区
计算进程
互斥关系(间接制约):把并发进程间存在的因相互 竞争使用独占资源(共享资源)而产生的制约关系。 例如:打印机,共享内存;
M=count
N=N+100
M=M-200
count=N
count=M
…
…
如果按以下次序占处理机运行:
N=count,N=N+100; M=count,M=M-200,count=M; count=N. 结果count=400(应为200)*
4.1 并发执行实现
并发的需要
操作系统应尽量支持用户态程序最大限度地并发执行。 程序设计要利用OS对并发运行的支持,安排事务并发