收藏 分享(赏)

操作系统2-5.ppt

上传人:jinchen 文档编号:9819041 上传时间:2019-09-08 格式:PPT 页数:35 大小:397KB
下载 相关 举报
操作系统2-5.ppt_第1页
第1页 / 共35页
操作系统2-5.ppt_第2页
第2页 / 共35页
操作系统2-5.ppt_第3页
第3页 / 共35页
操作系统2-5.ppt_第4页
第4页 / 共35页
操作系统2-5.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、,1、下面是两个并发执行的进程。它们能正确执行吗?若不能,试举例说明,并修改之。,CobeginVar x:integer; Process P1Var y,z:integer; Beginx:=1y:=0;if x=1 then y:=y+1;z:=y; End,Process P2Var t,u:integer; Beginx:=0t:=0;if x1 then t:=t+2;u:=t; End Coend.,答:不能。若进程P1执行至“y:=0;“时发生进程调度选中P2,P2开始执行,执行至“x:=0”时又发生进程调度选中P1,则P1中“if x=1 then y:=y+1;”本应该执行

2、却不会执行,因为发生进程调度时改变了x原来的值。一种简单的修改方案是互斥访问x,设置互斥访问信号灯,在P1和P2的Begin后面加P(mutex),End前面加V(mutex)(可能失去并发性)。,2、现有进程R1,R2,W1,W2,它们共享可以存放一个数的缓冲区。进程R1每次把从键盘上读一个数存到该缓冲区,供进程W1打印输出;进程R2每次从磁盘上读一个数存放到该缓冲区中,供W2打印输出。当一个进程把数存放到缓冲区后,在该数还没有被打印输出之前不准任何进程再向缓冲区中存数;当一个进程已把缓冲区中的数字打印输出后,在缓冲区中还没有存入一个新的数之前不准任何进程再从缓冲区中取数打印。试用PV原语来

3、协调它们的工作。,设信号量mutex用来控制进程间的互斥,初值为1,信号量avail表示缓冲区是否为空的情况,初值为1,信号量full1表示控制W1输出的情况,初值为0,信号量full2表示控制W2输出的情况,初值为0。,* 管程机制,管程的提出,用信号量机制实现进程间的同步和互斥,即方便又有效。但存在以下两个问题:每个访问临界资源的进程都必须自备同步操作(P、V操作),这使大量的同步操作分散在各个进程中,给系统的管理带来麻烦会因同步操作使用不当而导致系统死锁。,2.3.4 管程机制,解决方法-管程(Monitors)Dijkstra于1971年提出,为每个共享资源设立一个“秘书”来管理对它的

4、访问。一切来访者都要通过秘书,而秘书每次仅允许一个来访者(进程)来访问共享资源。这样既便于系统管理共享资源,又能保证进程的互斥访问和同步。1973年,Hanson和Hoare又把“秘书”概念发展为管程概念。,一、管程的基本概念,基本思想把访问某种临界资源的所有进程的同步操作都集中起来,构成一个所谓的“秘书”进程(管程),凡是访问临界资源的进程,都需要报告 “秘书”,由秘书来实现诸进程的同步。 管程的定义一个数据结构和在该数据结构上能被并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。如下图所示。,管程有以下属性,因而,调用管程的过程时要有一定限制: 共享性:管程中的移出过程可被所

5、有要调用管程的进程所共享。 安全性:管程的局部变量只能由该管程的过程存取,不允许进程或其它管程来直接存取,一个管程的过程也不应该存取任何非局部于它的变量。 互斥性:在任一时刻,共享资源的进程可访问管理该资源的过程,最多只有一个调用者能真正地进入管程,而任何其它调用者必须等待。直到访问者退出。,一、管程的基本概念,管程的名称; 局部于管程的共享数据结构说明; 对该数据结构进行操作的一组过程; 对局部于管程的共享数据设置初始值的语句,管程的组成,管程的语法描述 type monitor_name = MONITOR; define ; use ; procedure ();beginend; fu

6、nction ():值类型;beginend; begin; end.,一、管程的基本概念,一、管程的基本概念,管程的特性管程是一种程序设计语言结构成分,它和信号量有同等的表达能力,从语言的角度看,管程主要有以下特性:模块化,管程是一个基本程序单位,可以单独编译;抽象数据类型,管程中是不仅有数据,而且有对数据的操作;信息掩蔽,管程中的数据结构只能被管程中过程访问,这些过程也是在管程内部定义的,供管程外的进程调用,而管程中的数据结构以及过程(函数)的具体实现,外部不可见。,条件变量在管程机制中,当某进程通过管程请求临界资源未能满足时,管程便调用wait原语使该进程等待,但等待的原因可能有多个,为

7、了加以区别,在P、V操作前,引入条件变量加以说明。(1)条件变量的定义形式Var x,y: condition(2)对条件变量执行的两种操作 x.wait 用来将执行进程挂到与条件变量x相应的等待队列上。 x.signal 用来唤醒与条件变量x相应的等待队列上的一个进程。如果没有,继续执行原进程,而不产生任何结果。,一、管程的基本概念,处理方式如果有进程Q因x条件处于阻塞状态,当正在调用管程的进程P执行了x.signal操作后,进程Q 被重新启动,此时两个进程P和Q,如何确定哪个执行,哪个等待,可采用下述两种方式之一进行处理: P等待,直至Q离开管程或等待另一条件。 Q等待,直至P离开管程或等

8、待另一条件。,一、管程的基本概念,二、用管程机制解决生产者消费者问题,建立Producer-consumer(PC)管程Type producer-consumer=monitorvar in,out,count:integer;buffer:array0,n-1 of item;notfull,notempty:condition;put(item);get(item);beginin:=out:=0; /* 初始化代码*/count:=0;end,二、用管程机制解决生产者消费者问题,建立Producer-consumer(PC)管程put(item)过程生产者利用此过程将自已的消息放到缓冲

9、池中,若发现缓冲已满(count n),则等待。 Get(item)过程消费者利用此过程将缓冲池中的消息取走,若发现缓冲已空(count 0),则等待。,put(item),Procedure entry put(item)beginif count =n then notfull.wait;buffer(in):=nextp;in:=(in+1) mod n;count:=count+1;if notempty.queue then notempty.signal;end,get(item),Procedure entry get(item)beginif count=0 then note

10、mpty.wait;nextc:=buffer(out);out:=(out+1) mod n;count:=count-1;if notfull.queue then notfull.signal;end,Producer:beginrepeatproduce an item in nextp;PC.put(item);until falseend Consumer:beginrepeatPC.get(item);consume the item in nextc;until falseend,返回,二、用管程机制解决生产者消费者问题,2.5 进程通信高级通信,并发进程之间的交往本质上是互相

11、交换信息。有些情况下进程之间交换的信息量很少,例如仅仅交换某个状态信息。有些情况下进程之间交换大批数据,例如传送一批信息或整个文件。进程之间互相交换信息的工作称之为进程通信IPC(InterProcess Communication)。,概念:进程间的信息交换。 实例: 信号量机制(一种低级通信)缺点:(1)效率低(2)通信对用户不透明 高级通信特点: 效率高,通信实现细节对用户透明,2.5 进程通信高级通信,高级进程通信机制可分为三大类: 1. 共享存储器系统(Shared-Memory System)2. 消息传递系统(Message passing system) (1)直接通信方式:消

12、息缓冲通信 (2)间接通信方式:又称为信箱通信方式 3. 管道(Pipe)通信:又名共享文件通信,2.5 进程通信高级通信,1. 共享存储器系统,基于共享数据结构的通信方式: produce-consume中的缓冲区,低效,不透明。 系统只提供了一共享存贮器,适于少量通信。基于共享存储区的通信方式: 系统提供:共享存储区。 通信过程: (1)向系统申请一个或多个分区 (2)获得分区获后即可读/写. 特点:高效,速度快。,信息单位:消息(报文) 实现:一组通信命令(原语),具有透明性,消息头,消息正文,注:消息格式:msgsender 消息发送者msgreceiver 消息接收者msgnext

13、下一个消息的链指针msgsize 整个消息的字节数msgtext 消息正文,2.5 进程通信高级通信,2. 消息缓冲通信,(1)直接通信send(Receiver, message ),如接收者因等消息而封锁,则唤醒。receive ( Sender, message ),无消息则阻塞。,2.5 进程通信高级通信,发送进程使用发送原语直接将消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程使用接收原语从消息缓冲队列中取出消息。,repeat . . . Receive(producer,nextc); . . .consume the item in nextc; until f

14、alse,repeat . Produce an item in nextp; . send(consumer,nextp); until false;,生产者-消费者问题的解决,2.5 进程通信高级通信,(1)直接通信,send和receive原语 数据结构 消息缓冲区type message buffer =recordsender:size:text:next:指向下一指针 PCB中应增数据项:type pcb=recordmq 消息队列指针mutex 消息队列互斥信息量sm 消息队列资源信息量,2.5 进程通信高级通信,(1)直接通信,2.5 进程通信高级通信,发送原语procedur

15、e send(receiver, a)begingetbuf(a.size, i);i.sender:=a.sender;i.size:=a.size;i.text:=a.text;i.next:=0;getid(PCB set, receiver.j);wait(j.mutex);insert(j.mq, i);signal(j.mutex);signal(j.sm);end,(1)直接通信,2.5 进程通信高级通信,接收原语 procedure receive(b)beginj:=internal name;wait(j.sm);wait(j.mutex);remove(j.mq, i);

16、signal(j.mutex);b.sender:=i.sender;b.size:=i.size;b.text:=i.text;end,(2)间接 优点:在读/写时间上的随机性 写进程 信箱(中间实体)读进程 原语信息的创建与撤消:信箱名 属性(公用、私用、 共享)(共享者名字)消息的发送和接收 Send (mailbox, message) Receive (mailbox, message),2.5 进程通信高级通信,(2)间接 信箱类型 私用:拥有者有读/写数,其它只有写权,(单向) 存在期进程存在期。 公用:系统创建,双向,存在期=系统存在期。 共享信箱:一般进程创建,并指明其共享者

17、,是双向。 发送接收进程之间的关系: 一对一关系; 多对一关系; 一对多关系; 多对多关系:公用信箱。,2.5 进程通信高级通信,2.5 进程通信高级通信,semaphore full=0; /*满格计数*/ semaphore empty=N; /*空格计数*/,receive(mailbos, message) P(full);选择满格F;把满格F中的消息取出放msg中; 置F格标志为空E;V(empty); ,send(mailbox, messsage) P(empty);选择空格E;将消息msg放入空格E中;置格E的标志为满;V(full); ,(2)间接,2.5 进程通信高级通信,

18、在两个进程的执行过程中,如果一个进程的输出是另一个进程的输入,可以使用管道文件。,这是一个临时文件,输入进程向它写信息,输出进程从它读信息。,从进程A的输出区读数据,写入管道文件。,将管道文件的数据读出,写入进程B的输入区。,共用一个管道文件,进程之间的关系有: 互斥关系输出和输入进程不可能同时读或者写; 同步关系当管道文件为空时,输入进程等待输出进程,当管道文件为满时,输出进程等待输入进程。,3. 管道(Pipe)通信,2.5 进程通信高级通信,通信链路 建立通信链路(显式建立链路、隐式建立链路) 通信链路的连接方法(点-点、多点) 通信方式(单向、双向) 通信链路的容量(无容量、有容量) 消息格式 消息头和消息正文,消息传递系统实现中的若干问题(了解),返回目录,返回目录,2.5 进程通信高级通信,消息传递系统实现中的若干问题(了解),进程同步方式 1.发送和接收进程阻塞(汇合) 用于紧密同步,无缓冲区时。 2.发送进程不阻塞,接收进程阻塞(多个) 相当于接收进程(可能是多个)一直等待发送进程,如:打印进程等待打印任务。 3.发送/接收进程均不阻塞 一般在发、收进程间有多个缓冲区时。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报