进程1、进程2共享打印机缓冲区(公有资源),显然它们应互斥地向缓冲区写数据——间接制约
进程1、进程2共享它们之间的缓冲区(私有资源),显然应同步地使用缓冲区——直接制约
进程并发执行——>资源共享
资源有限——>资源竞争
制约的分类1.间接制约(由共享和竞争公共资源引起的制约)一组在异步环境下的并发进程,由于不允许并发进程交叉使用共享公有资源,从而限制各进程的执行速度的过程称为并发进程间的间接制约
2.直接制约(由共享和竞争私有资源引起的制约)
一组在异步环境下的并发进程,各自的执行结果互为对方的执行条件,从而限制各进程的执行速度的过程称为并发执行进程间的直接制约
互斥:因间接制约而形成的进程执行方式
同步:因直接制约而形成的进程执行方式
临界资源
任意时刻只允许一个进程使用的资源
如:打印机、键盘、一些数据、表格、队列等
临界区
访问临界资源的程序(程序段),即不允许并发进程交叉执行的程序(程序段)
如:写打印机缓冲区的程序,……
临界资源的访问方式——互斥
进程互斥执行应满足的准则 各并发进程享有平等的、独立的竞争和使用共有资源的权利
在不采取任何措施的条件下,在临界区内任一指令结束时,其它并发进程可以进入临界区
- 并发进程中的某个进程不在临界区时,它不阻止其它进程进入临界区
- 并发进程中的若干个进程申请进入临界区时,只允许一个进程进入
- 并发进程中的某个进程从申请进入临界区开始,应在有限时间内进入临界区,也应在有限时间之内退出临界区
例
交通系统中的信号灯——它表示当前道路是否可以通行
信号量——某种资源可以使用的状况,用整型变量s表示
s>0——资源还有s个可供使用
s=0——资源也用尽
s<0——有| s |个进程等待使用资源
原理
设信号量S为全局变量,初值为S=1
S对应的资源同一时刻最多只能有一个进程使用
访问资源前调用P操作,访问结束时调用V操作
使用资源的两个互斥进程描述为
PA PB
…… ……
P(S) P(S)
<资源调用> <资源调用>
V(S) V(S)
…… ……
例
设A,B两站之间是单轨铁路,用P、V操作对通过该段铁路的列车设置安全保护
例
计算进程PC将计算结果写到缓冲区Buf中,打印进程PP从Buf中取出数据进行打印。要求是
只有Buf为空时,PC才能写入数据;
只有Buf为满时,PP才能取出数据
从Buf中取出数据后,Buf为空
初始时Buf为空
分析
显然PC与PP在执行时必须协调速度,即对Buf的操作应该是:PC写,PP取,PC写,PP取, PC写,PP取,……
问题要求PC与PP同步
实现同步的方法可以是
PP等PC写之后再取
PC等PP取之后再写
求解
设Buf有两个状态:Bufempty,Buffull
用State记Buf的状态……
PP与PC为
PP PC
…… ……
repeat repeat
until State=Bufempty until State=Buffull
计算 取出Buf中的内容
计算结果放入Buf Buf清空
State=Buffull State=Bufempty
…… ……
上述Bufempty,Buffull成为PP与PC之间的公用变量,但对系统或其它进程来讲并不知道它们的存在,故称其为PP与PC的私有信号量
原理
为并发进程设置信号量,
初始化它们的值
用P、V操作限定进程的执行顺序
同步进程的模式
PA PB
…… ……
P(S) P(T)
<使用同步资源> <使用同步资源>
V(T) V(S)
…… ……
进程互斥和同步问题可以抽象为生产者—消费者问题
生产者生产出产品后,消费者才能消费
当部分产品消费后,生产者才继续生产
一件产品,不能既在生产又在消费
该问题可形式化为
有界缓冲区共n个单元
生产者进程向缓冲区中写数据,每次写一个单元
消费者进程读缓冲区中的数据,每次写一个单元
缓冲区至少有一个单元有数据(满)时,才能读
缓冲区至少有一个单元无数据(空)时,才能写
生产者进程与消费者进程不能同时操作缓冲区
假设:PA——生产者进程, PB——消费者进程
生产者与消费者的互斥
设公共信号量:mutex,初值为1
PA PB
…… ……
P(mutex) P(mutex)
生产者生产 缓冲区中取出数据
数据放入缓冲区 消费者消费
V(mutex) V(mutex)
…… ……
生产者与消费者的同步
设生产者进程的私有信号量:avail——当前可用的缓冲区单元数,初值为n
设消费者进程的私有信号量:full——缓冲区中有数据的单元数,初值为0
生产者与消费者的同步为:
PA PB
…… ……
P(avail) P(full)
生产者生产 缓冲区中取出数据
数据放入缓冲区 消费者消费
V(full) V(avail)
…… ……
生产者与消费者问题的解
PA PB
…… ……
P(avail) P(full)
P(mutex) P(mutex)
生产者生产 缓冲区中取出数据
数据放入缓冲区 消费者消费
V(full) V(avail)
V(mutex) V(mutex)
…… ……
问题
- 如何才能使得多个生产者可以同时生产?多个消费者之间可以同时消费?
分享到:
相关推荐
在计算机操作系统中,PV操作是进程管理中的难点,希望这点资料对你有帮助
操作系统中pv操作的c/c++的实现,主要是生产者-消费者问题的实例。
操作系统_经典PV操作全集
操作系统的PV操作,由C语言实现。桌上有一盘子,可以存放一个水果。爸爸总是放苹果到盘子中,而妈妈总是放香蕉到盘子中;一个儿子专等吃盘中的香蕉,一个女儿专等吃盘中的苹果。用P,V操作实现上述问题的解。
进程PV操作详细讲解 PV操作 PV原语的含义 P操作和V操作是不可中断的程序段,称为原语。PV原语及信号量的概念都是由荷兰科学家E.W.Dijkstra提出的。信号量sem是一整数,sem大于等于零时代表可供并发进程使用的资源...
和尚喝水问题 某寺庙,有小和尚、老和尚若干.庙内有一水缸,由小和尚提水入缸,供老和尚饮用。水缸可容纳 30 桶水,每次入水、取水仅为1...设水桶个数为5个,试用信号灯和PV操作给出老和尚和小和尚的活动。用C++实现
pv操作实现前驱图
操作系统课程设计,PV操作 操作系统课程设计PV操作 操作系统课程设计PV操作
利用PV操作实现互斥与同步 有几个经典问题算法 1`哲学家围着一个圆桌在讨论问题和进餐 2南开大学和天津大学之间有一条弯曲的小路,其中从S到T有一段路每次只允许一辆自行车通过 3某数据库有一个写进程、多个读进程...
车站售票大厅有2个人工售票窗口,1个人工签票/...用信号量和PV操作写出顾客进程与人工服务进程的同步与互斥算法。 该压缩包内容为C++语言在VS2015下编写的工程文件,所有文件均在里面,解压后放到VS里即可调试运行。
java模拟实现PV操作 利用线程的wait和notify方法实现PV操作实现生产者与消费者问题
用VC实现的PV操作,能实现进程的互斥 桌上有一只盘子,每次只能放入一只水果;爸爸专向盘子中放苹果(apple),妈妈专向盘子中放桔于(orange),一个儿子专等吃盘子中的桔子,一个女儿专等吃盘子里的苹果
一个能够完整运行出来的PV操作的实验报告,然后实验报告的结构也很完整,实验目的,实验过程,甚至实验的结果也有截图,如果有小伙伴需要,尽管下载哦
希望想了解的朋友多知道些 ,不为积分。pv操作的简洁性可以让你更好编程
实现PV操作解决读者写者问题(读者优先)
操作系统—经典PV操作详解,针对PV操作的各个类型题目的经典讲解。
模拟PV操作同步机构,且用PV操作解决生产者——消费者问题
对操作系统的pv操作进行详细讲解 可对操作系统进行详细的了解
自己写的PV操作简单实例,以简单易懂见长,如果您正在为此事发愁,也许它能帮到你。
本资源包括PV操作的源代码和报告,通过PV操作实现同步机制