第3章 进程同步与通信-同步

合集下载

进程同步的概念

进程同步的概念

进程同步的概念
进程同步是指多个进程在共享资源时的协调与同步。

在单个进程中,程序的执行是顺序的,而在多个进程中,由于进程的并发执行,可能会造成资源竞争、死锁等问题。

因此,进程同步就是要保证每个进程在使用共享资源时的顺序和正确性。

进程同步的实现方式有多种,如信号量、互斥锁、条件变量等。

信号量是一种计数器,用来控制资源的访问;互斥锁是一种二进制变量,用来保护共享资源,只允许一个进程访问;条件变量则是一种用于线程间通信的机制,用来等待某个条件的发生。

不同的进程同步方式有各自的优缺点,需要根据具体情况进行选择。

例如,在信号量的实现中,可以通过设置信号量的初值和操作信号量的函数来实现同步,但使用不当可能会造成死锁;在互斥锁的实现中,可以通过加锁和解锁来保护共享资源,但如果加锁的时间太长,会影响程序的性能。

综上所述,进程同步是保证多个进程在共享资源时的正确性和顺序的重要机制,需要根据实际情况选择合适的同步方式。

- 1 -。

《计算机操作系统》汤小丹

《计算机操作系统》汤小丹

out 输出指针
计数器
counter
n-1
n-2
0
1 2
3
4 5
in 输入指针
• PP和CP共享的变量: Var n,integer; Type item=„; Var buffer:array[0,1„n-1] of item; in,out:0,1„n-1; counter:0,1„n;
PP:repeat CP:repeat „„ while counter=0 do no-op produce an item in nextp; nextc:=buffer[out]; „„ out:=(out+1)mod n; while counter=n do no-op; counter:=counter-1; buffer[in]:=nextp; consume the item in nextc in:=(in+1)mod n; counter:=counter+1; until false; until false;
记录型信号量
3.2.2
AND型信号量和信号量集

1. AND型信号量集 • 整型和记录型信号量机制是针对进程间共享一个临界 资源而言的。多个进程共享多个临界资源时则要采取 另外的信号量机制。 若A和B按下述次序执行wait操作: • 设A(Dmutex,Emutex 和B为进程,都要求访问共享数据 D和E,这时D和E 初值为1) 为临界资源。为 D、E设置用于互斥的信号量Dmutex、E processA:wait(Dmutex);//Dmutex=0 mutex,令初值为 1,这时A和B有操作: processB:wait(Emutex);//Emutex=0 Process A: process B: 阻塞 processA:wait(Emutex);//Emutex=-1,A processB:wait(Dmutex);//Dmutex=-1,B 阻塞 wait(Dmutex); wait(Emutex); 此时A,B进入死锁状态。显 然,进程要求 wait(Emutex); wait(Dmutex); 的共享资源越多,死锁的可能性越大。

(完整版)第三章进程同步与通信作业习题与答案

(完整版)第三章进程同步与通信作业习题与答案

第三章一.选择题(50题)1.以下_B__操作系统中的技术是用来解决进程同步的。

A.管道B.管程C.通道D.DMA2.以下_B__不是操作系统的进程通信手段。

A.管道B.原语C.套接字D.文件映射3.如果有3个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为_B__。

A.3B.2C.1D.04.设有4个进程共享一个资源,如果每次只允许一个进程使用该资源,则用P、V 操作管理时信号量S的可能取值是_C__。

A.3,2,1,0,-1B.2,1,0,-1,-2C. 1,0,-1,-2,-3D.4,3,2,1,05.下面有关进程的描述,是正确的__A__。

A.进程执行的相对速度不能由进程自己来控制B.进程利用信号量的P、V 操作可以交换大量的信息C.并发进程在访问共享资源时,不可能出现与时间有关的错误D.P、V操作不是原语操作6.信号灯可以用来实现进程之间的_B__。

A.调度B.同步与互斥C.同步D.互斥7.对于两个并发进程都想进入临界区,设互斥信号量为S,若某时S=0,表示_B_ _。

A.没有进程进入临界区B.有1个进程进入了临界区C. 有2个进程进入了临界区D. 有1个进程进入了临界区并且另一个进程正等待进入8. 信箱通信是一种_B__方式A.直接通信B.间接通信C.低级通信D.信号量9.以下关于临界区的说法,是正确的_C__。

A.对于临界区,最重要的是判断哪个进程先进入B.若进程A已进入临界区,而进程B的优先级高于进程A,则进程B可以打断进程A而自己进入临界区C. 信号量的初值非负,在其上只能做PV操作D.两个互斥进程在临界区内,对共享变量的操作是相同的10. 并发是指_C__。

A.可平行执行的进程B.可先后执行的进程C.可同时执行的进程D.不可中断的进程11. 临界区是_C__。

A.一个缓冲区B.一段数据区C.一段程序D.栈12.进程在处理机上执行,它们的关系是_C__。

U035计算机操作系统教程_第四版_(张尧学著)_清华大学出版社_第3章

U035计算机操作系统教程_第四版_(张尧学著)_清华大学出版社_第3章

3.1.2 进程的定义 进程的概念是60年代初期,首先在MIT 的 Multics系 统和IBM 的 TSS/360系统中引用的。从那以来,人 们对进程下过许多各式各样的定义。 (1) 进程是可以并行执行的计算部分(S.E.Madnick, J.T.Donovan); (2) 进程是一个独立的可以调度的活动(E.Cohen, D.Jofferson); (3) 进程是一抽象实体,当它执行某个任务时,将要 分配和释放各种资源(P.Denning); (4) 行为的规则叫程序,程序在处理机上执行时的活 动称为进程(E.W.Dijkstra);
W(Si)={b1 b2 … bn},bj(j=1,…,n) 是语句Si在执行期间必须对其进行修改、访问的变量; 如果对于语句S1和S2,有 ① R(S1)∩ W(S2)={∮}, ② W(S1)∩ R(S2)={∮}, ③ W(S1)∩ W(S2)={∮} 同时成立,则语句S1和S2是 可以并发执行的。
(1) 进程是一个动态概念,而程序则是一个静态概念。程序是 指令的有序集合,没有任何执行的含义。而进程则强调执 行过程,它动态地被创建,并被调度执行后消亡。 (2) 进程具有并行特征,而程序没有。由进程的定义可知,进 程具有并行特征的两个方面,即独立性和异步性。也就是 说,在不考虑资源共享的情况下,各进程的执行是独立的, 执行速度是异步的。显然,由于程序不反映执行过程,所 以不具有并行特征。 (3) 进程是竞争计算机系统资源的基本单位,从而其并行性受 到系统自己的制约。这里,制约就是对进程独立性和异步 性的限制。 (4) 不同的进程可以包含同一程序,只要该程序所对应的数据 集不同。
第3章 进程管理
3.1 进程的概念 3.2 进程的描述 3.3 进程状态及其转换 3.4 进程控制 3.5 进程互斥 3.6 进程同步 3.7 进程通信 3.8 死锁问题 3.9 线程 本章小结 习题

计算机操作系统03进程的同步与通信

计算机操作系统03进程的同步与通信

用TS实现进程互斥: repeat while TS(lock) do skip; critical section lock:=false; remainder section until false;
第三章 进程的同步与通信
2. 利用Swap指令实现互斥 Swap指令: procedure (var a,b:Boolean) var temp:Boolean; begin temp:=a; a:=b; b:=temp end
计算机操作系统
第三章 进程的同步与通信
教学目的与要求: 1.掌握进程同步、进程通信、资源、信号量等
基本概念 2.了解解决进程同步问题的软件方法和硬件方
法 3.能用信号量和管程解决简单进程同步问题 4.了解OS/2操作系统的进程同步与通信机制
第三章 进程的同步与通信
重点与难点:
1. 同步、通信、资源、信号量等基本概念
第三章 进程的同步与通信
2 临界资源的定义 临界资源是指并发进程之间在某段时间内同
时提出访问请求的互斥型资源。 例:在A进程正在访问打印机的时候,B进程也提
出对打印机的访问请求,则打印机为临界资源。应 互斥使用临界资源。
三.临界区 1 临界区的定义 是指进程中访问临界资源的那段代码
第三章 进程的同步与通信
第三章 进程的同步与通信
算法3:与算法2相似,只是在flag[i]=ture时表示进 程P[i]要求进入临界区,若此时无其它进程有此要求, 则进程P[i]可进入临界区。对于进程Pi repeat flag[i]:=true; while flag[j] do no_op critical section flag[i]:=false; remainder section until false 该算法的缺点:违背了空闲让进和有限等待原则

第3章 进程同步与通信2

第3章 进程同步与通信2

进程写管道
进程向管道写数据时,可能有以下两种情况:
管道中有足够的空间存放要写的数据,此时每写 一数据块后核心便自动增加地址项的大小.写操 作完成后,核心修改索引节点中的写指针,并唤 醒所有因该管道空而睡眠等待的读进程. 管道中无足够的空间存放要写入的数据,此时核 心对该索引节点作标记后让写进程睡眠,等待数 据从管道中排出.上述情况的一个例外是,当进 程写的数据量大于管道的容量时,核心将尽可能 多的数据写到管道中,然后使进程睡眠,直到获 得更多的空间.
pipe文件的建立 文件的建立
pipe系统调用建立一个无名管道.其语法格式如下:
int pipe(fdes); int fdes[2];
核心创建一个管道时须完成下述工作:
分配磁盘和内存索引节点. 为读进程和写进程分配文件表项. 分配用户文件描述符.在读进程和写进程的用户文件描述 符表中,分别分配一个表项,并将文件描述符fdes[0]和 fdes[1]分别返回给读进程和写进程.
设置信号的处理方式
系统调用signal用于设置信号的处理方式.其 语法格式如下: void (* func)( ) signal(sig,func) 其中,func为收到软中断信号sig后进程希望 调用函数的地址. 19类信号如表所示.
func的取值情况
func的取值可以分成三种情况:
func=1时,进程对信号sig不予理睬. func=0时,即缺省处理,对大多数软中断信号的 缺省处理是终止进程. func为其他整数值时,它的值是指向信号处理程 序的指针.
管道通信示意图1
初始时,其长度为4,系统将管道看成一个循环 队列.按先进先出的方式读写.
A out B C D in
写入字符E后,管道长度为5

进程同步与进程通信

进程同步与进程通信

if Ri>=1 then begin Ri:= Ri -1; Ak = Ri 输出一张票; end; else 输出”票已售完“ end;
假设某时刻Ak为5,A、B两个人同时在2号3号窗口买票
process P2 begin Ri:=Ak;
if Ri>=1 then Ri = 4 begin Ri:= Ri -1; Ak = Ri 输出一张票; end; else 输出”票已售完“ end;
if Ri>=1 then begin Ri:= Ri -1; Ak = Ri 输出一张票; end; else 输出”票已售完“ end;
假设某时刻Ak为5,A、B两个人同时在2号3号窗口买票
process P2 begin Ri:=Ak;
if Ri>=1 then begin Ri:= Ri -1; Ak = Ri 输出一张票; end; else 输出”票已售完“ end;
process P3 begin Ri:=Ak;
if Ri>=1 then begin Ri:= Ri -1; Ak = Ri 输出一张票; end; else 输出”票已售完“ end;
假设某时刻Ak为5,A、B两个人同时在2号3号窗口买票
process P2 begin Ri:=Ak;
if Ri>=1 then begin Ri:= Ri -1; Ak = Ri 输出一张票; end; else 输出”票已售完“ end;
例2
(1) 假设count的初值为5,先运行P1再运行P2的结果是? (2) 如果P1和P2并发执行,可能会出现什么运行结果?
P1 R1 = count; R1++; count = R1; P2 R2 = count; R2++; count = R2;

进程同步与通信

进程同步与通信

pricess computer begin L2: p(sf); 从缓冲去中取出数据; v(se); 进行数据计算; goto L2; end; coend;
9、(1)写出P、V操作的定义 (2)有3个进程PA、PB和PC写作解决文件 打印问题:PA将文件记录从磁盘读入主存 的缓冲区1,每执行一次读一个记录;PB 将缓冲区1的内容复制到缓冲区2,每执 行一次复制一个记录;PC将缓冲区2的 内容打印出来,每执行一次打印一个记 录。缓冲区的大小和一个记录大小一样。 请用P、V操作来保证文件的正确打印。
begin mutex,full,empty:semaphore; mutex:=1; empty:=8; full:=0; cobegin pricess producer begin 生产一个产品; p(empty); p(mutex); 将产品存入仓库; v(mutex); v(full); end;
process s3 begin p(b3); …… v(b4); end
process s4 begin p(b4); p(b4); …… end
8、在测量控制系统中,数据采集任务把 采集的数据送入一单缓冲区;计算任务 从该单缓冲区中取出数据进行计算。试 写出利用信号量机制实现两者共享单缓 冲区的同步算法。
cobegin process A begin L1:p(s1) 拣一粒黑子; v(s2) goto L1
process B begin L2:p(s2) 拣一粒白子; v(s1) goto L2 endl;
end;
coend;
7、四个进程合作完成一任务的前驱图, 试说明这四个进程间的同步关系,并以 PV操作描述它们。
解:应设置两个信号量sf,se,信号量sf表 示缓冲区是否有可供打印的计算结果, 其初值为0;信号量se用于表示缓冲区 有无空位置存放新的信息,其初值为1。 本题的同步描述如下:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-(n-20) ≤ mutex ≤ 20 其物理含义是:
当mutex=20时,表示售票厅内没有购票者进入,20个窗口都是 空闲的,表示可用资源个数;
当mutex=0时,表示售票厅内已经进入了20个购票者,每个窗口 都被分配,没有等待的购票者,可用资源为0; 当mutex=-(n-20)时,表示一共有n个购票者,其中20个购票者 已经进入厅内,分别占有一个窗口,还有n-20个购票者在厅 外等待,绝对值表示等待进程个数。
互斥问题举例3
某车站售票厅有20个窗口,任何时刻最多可容 纳20名购票者进入,当售票厅中少于20名购票 者时,则厅外的购票者可立即进入,否则需在 厅外等待。若把一个购票者看作一个进程,请 用P、V操作管理这些并发进程,要求如下: ⑴.在主函数中给出信号量的定义和初值。 ⑵.给出一个购票者进程的算法。 ⑶.给出当购票者最多不超过n (设n>20)个时, 信号量可能的变化范围。
③(有化验结果)继续诊病
27
对于化验员的操作步骤:
①等化验单 ②(有化验单时)进行化验
(未化验的化验单少一个)
③出化验结果(化验结果多一个)
④等待下一化验单
28
需要两个信号量 s1: 表示化验结果是否出来,初值为0. s2:表示医生是否开化验单,初值为0.

程序描述
main( )
{
int s1 =0;
48
49
它们之间满足:
① 消费者想接收数据时,有界缓冲区中至少有 一个单元是满的;
② 生产者想发送数据时,有界缓冲区中至少有 一个单元是空的。 生产者-消费者问题是同步关系
50
当有进程在写数据时(如生产者进程)则同
时不允许对该缓冲区进行读操作(如消费者
进程)。 故有界缓冲区是临界资源,进程必须互斥访 问。 生产者-消费者问题同时也具有互斥关系
51
设信号量 mutex:用于访问缓冲区时的互斥,初值是1 empty :为生产者进程的私用信号量,表示有 界缓冲区中的空单元数,初值为n; full: 为消费者进程的私用信号量,表示缓冲 区中非空单元数,初值为0 。
V(mutex);
15
如果有n个终端,则mutex信号量的取值范围为:
-(n-1)≤mutex≤1 其物理含义为: 当机票数空闲时,mutex=1。 当有一个终端进入,对机票进行处理,其它终端进 程还没有到来时,mutex=0。 当所有终端进程都到来,且有一个正在对机票进行 处理时, mutex= -( n - 1 )。它表示有 n - 1 个 进程在等待队列上等待。
18
分析
共享临界资源:20个同类的售票窗口 先来者先进入

算法描述
⑴.主函数算法: main() { int mutex=20; cobegin P1(); … Pi();… Pn(); coend }
⑵.购票者i的算法: Pi() { P(mutex); 购票; V(mutex); }
⑶.信号量mutex的取值范围:
第3 章
进程同步与通信
●进程同步与互斥
本章要点
●经典进程同步问题
●AND信号量 ●管程
●进程通信
进程同步的基本概念
●同步:指多个进程中发生的事件存在着某种时
序关系,它们必须按规定时序执行,以共同完成 一项任务 。 ●互斥:多个进程不能同时使用同一资源。 ●临界资源:某段时间内仅允许一个进程使用的 资源。 ●临界区:每个进程中访问临界资源的那段代码。
/* 唤醒阻塞进程,将其从等待队列s.queue 取出,投入就绪队列*/
}
V操作
对于化验员的操作步骤:
test { P(s2); 化验…
出化验结果…
V(s1); }
35
对于医生的操作步骤: doctor {
给病人看病…
V(s2);
P(s1);
继续诊病… }
36
同步进程举例2
Pc
Pp
buffer
种信号量为私用信号量。
互斥时使用的是公用信号量 返回
45
用P,V原语操作实现同步
用P,V原语操作实现进程同步的方法:
①为各并发进程设置私用信号量 ②为私用信号量赋初值 ③利用 P,V 原语和私用信号量规定各进程
的执行顺序。
返回
46

3.2经典进程同步问题
●生产者——消费者问题 ●读者——写者问题 Nhomakorabea返回
42
同步的定义 异步环境下,一组并发进程,因直 接制约而互相发送消息而进行相互 合作,互相等待,使得各进程按一
定的速度执行的过程称为进程间同
步。
返回
43
合作进程:具有同步关系的一组
并发进程称为合作进程。 消息:合作进程间互相发送的信
号称为消息或事件。
返回
44
私用信号量 把进程间发送的消息看作信号量,则这种 信号量只与制约进程及被制约进程有关而 不是整组并发进程有关(如进程互斥),称这
12
思考: n个并发进程,共享m个共享资源:
mutex的取值范围为?
13
互斥问题举例2 [ 例] 假设某飞机定票系统在 t0时刻有 A、 B 、 C、 D四个终端程 序同时都要对机票库中的某航班当前剩余票数 X 进行操作。 如果每个终端程序的当前定票需求为 N,并对共享变量X进行 如下操作:
在机票数据库中取出当前剩余票数X; 判断X>0(有票吗)? 如果有, X≥N(票够吗)? 如果够,则出票(打印票据); X=X-N(修改剩余票数); 将X回写到数据库中;
●哲学家进餐问题
●打磕睡的理发师问题
生产者-消费问题
消费者:系统中使用某一类资源的进程称为 该资源的消费者。 生产者:释放同类资源的进程称为该资源的 生产者。
计算进程和打印进程共享缓冲区的例子中, 计算进程把数据送入缓冲区, 打印进程从缓冲区中取数据, 则计算进程可看作数据资源的生产者, 打印进程可看作是消费者。
P2: while (1){ P(mutex); 临界区 V(mutex); 剩余区; };
互斥进程举例1-两个进程共享一台打印机 设信号量print代表打印机,初值为1. pa() int main(void) { { P(print); int print=1; 使用打印机 V(print); cobegin } pa(); pb(); pb() coend { } P(print); print=1 表示没有进程使用打印机 使用打印机 print=0 表示一个进程在用,没有进程等待 V(print); print=-1 表示一个进程在用,另一个在等待 }
继续诊病… }
32
信号灯的PV操作
void wait(semaphore s) { s.value = s.value - 1; if (s.value < 0) block(s.queue);
/* 将进程阻塞,并将其投入等待队列s.queue */
}
P操作
信号灯的PV操作
void signal(semaphore s) { s.value = s.value + 1; if (s.value <= 0) wackup(s.queue);
7
信号灯的PV操作
void signal(semaphore s) { s.value = s.value + 1; if (s.value <= 0) wackup(s.queue);
/* 唤醒阻塞进程,将其从等待队列s.queue 取出,投入就绪队列*/
}
V操作
用信号灯解决互斥问题
semaphore mutex=1; P1: while (1){ P(mutex); 临界区; V(mutex); 剩余区; };
结论:
当mutex≥0时其值表示可用资源个数; 当mutex<0时其绝对值表示等待进程的个数。
思考: n个并发进程,共享m个共享资源:
mutex的取值范围为?
22



同一类资源:
– m-n ≤ mutex ≤ m
不同类资源:
– 需要m个mutex – 1-n ≤ mutex ≤ 1
同步进程举例 直接制约 同步定义 私用信号量 PV原语实现进程同步 生产者-消费者问题 哲学家进餐问题
10
信号量可能的取值范围 假设有 N 个并发进程共用一台打印机,设 互斥信号量mutex的初值为1,则:
信号量mutex代表什么?
mutex的取值范围为多少? mutex的值分别代表什么含义?
11
N个并发进程,互斥信号量mutex的初值为1: mutex的取值范围为:1~-(N-1) 1 :表示没有进程进入临界区。有一个资源,无 进程等待; 0:表示有1个进程进入临界区。无资源,无进程 等待; -i :表示 1 个进程进入 临界区 。无资源,且有 i (i<=N-1)个进程等待进入。
/* 将进程阻塞,并将其投入等待队列s.queue */
}
P操作
V操作:释放资源操作
① sem加1
② 若 sem 加 1 后结果大于 1 ,则 V 停止操作,该进程返回调用处 ,继续执行;
③ 若sem加1后小于或等于零,则 该进程转就绪队列,同时进程 调度选取一个等待队列中的进 程转运行或就绪。
P,V操作必须用原语实现。
int s2 =1; cobegin doctor( );test( ); coend
}
对于化验员的操作步骤: test { wait(化验单);
化验…
出化验结果… signal(有化验结果); }
31
对于医生的操作步骤: doctor {
给病人看病…
signal(化验单);
wait(化验结果);
Pp: B:wait(buffull) 打印buf中的数据 清除buf中的数据 buffullfalse signal(bufempty) Goto B
相关文档
最新文档