第三章 进程互斥与同步.

Slides:



Advertisements
Similar presentations
营养学基础知识 Chapter 1. 了解几个概念 营养 营养素 食品(区分:人参、当归、 红枣、枸杞)
Advertisements

作者 : 陳鍾誠 單位 : 金門技術學院資管系 URL : 日期 : 2016/7/21 行程的同步 註:本章學術性較重,但考試常考。
機械製造 II 第 11 章 特殊加工 Ch11 特殊加工 塑膠加工 電積成型 金屬塗層 特殊切削加工.
十大错误服药方法 资料来自网络 手动翻页 我国每年有 500 万人因错误的服药方法而住进医院, 其中 20 万人因此丧命。 每年 500 万的聋儿中,也有 50 万是因此而导致的。 尽管药品的体积、功效、口感、 形状、包装花样越来越多,但其 说明书里的服用方法却很少变化, 总是这几个字: 一日 
金門神鵰俠侶 風獅爺與大樹之風中傳奇 風獅爺與大樹之風中傳奇  104 年 6 月 17 日 報告人:鍾佳玫.
中国. 中学政治教学网崇尚互联共享 自然医学生机健康法 食疗.
进程管理习题 设有一个可以装 A 、 B 两种物品的仓库,其 容量无限大,但要求仓库中 A 、 B 两种物品 的数量满足下述不等式: -M ≤ A 物品数量 -B 物品数量 ≤N 其中, M 和 N 为正整数。试用信号量和 P 、 V 操作描述 A 、 B 两种物品的入库过程。
第七章 营养配餐 【知识目标】 ①了解中国居民膳食指南,知道食谱编制理论和方法。 ②掌握食谱编制的基本原则,理解食谱编制的步骤。
接地、屏蔽、滤波 并称为电磁兼容的三大抑制技术
母婴护理与保健 孕妇培训课程 胎儿保健 聊城职业技术学院 王守军.
第二章 曲柄连杆机构 机体组 活塞连杆组 曲轴飞轮组.
庄国洪 Tel: (O) 免疫与健康 庄国洪 Tel: (O)
自我介绍 李俊柱 42岁 原籍辽宁 现居广东珠海 毕业于辽宁省锦州畜牧兽医学院 高级兽医师 19年著名大型猪场工作经验.
项目二十 生态养猪技术 梁春凤
与优秀的人在一起
議題探索-化學報告 題目:衣服質料的化學性質 成員:
股票、债券、和保险 投资理财的话题.
第二课 战国时期的 百家争鸣 呼伦贝尔学院附属中学:司顺英.
5.5可行性分析 可行性分析的概念 策略可行性分析 操作可行性分析 回报可行性分析.
第二章 进程的描述与控制管理.
第六章 拖拉机 第一节 概述 一、拖拉机类型 按其结构分: 手扶、轮式、履带式拖拉机等。 按动力的大小分: 大型拖拉机: >60 kw
长城国际酒店式公寓营销策划报告
进程管理习题 图书馆有100个座位,有一张登记表,要求: 用P、V原语描述一个读者的使用过程 阅读者进入时登记,取得座位号; 出来时,注销;
鸡病防治技术 涞源职教中心.
第四章 营养状况评价.
第四章:代谢与平衡 第一节:食物与营养.
设计工程师快速学习指南 润滑脂:不只是润滑.
从此,我不在沉默寡言 那一刻 就在这一刻 世上还有爸爸好 我 长 大 了 张绅 4 文苑芬芳
第九章 高分子材料.
第五章 资源分配与调度 (一) 资源管理功能 (二) 资源分配的机构和策略 (三) 死锁概念.
菜豆.
第一节 鸡腿菇栽培技术 主讲 刘柱明.
第一章 体育统计的基本知识 主讲教师:王丽艳 徐栋.
第七章 固定资产 第一节 固定资产概述 第二节 固定资产的确认和初始计量 第三节 固定资产的后续计量 第四节 固定资产清查与期末计价
PURSUING EXCELLENCE / TOWARD SUCCESS WUCHANG UNIVERSITY OF TECHNOLOGY
时政发布 制作:宋虹雷.
食物营养与加工基础.
学习情景1-1 食用菌及其产业的发展概况.
中央广播电视大学计算机课程 操 作 系 统.
百變千層 洪憶如老師.
Operating System Process Management - 4 Monday, August 11, 2008.
十二生肖的故事.
操作系统 (并发进程) 徐锋 南京大学计算机科学与技术系 2018年9月18日3时52分.
Operating System Concepts 作業系統原理 Chapter 3 行程觀念 (Process Concept)
中国科学技术大学计算机系 陈香兰 2013Fall 第五讲 进程同步和通信(part II) 中国科学技术大学计算机系 陈香兰 2013Fall.
非金属材料.
经典同步问题.
作業系統 第六章 同步與死結.
Chapter 3 行程觀念 (Process Concept)
线性表小结 元素之间的线性关系 顺序表 顺序表:元素相邻存储 单链表:后继指针链接 一维数组 给定下标随机存取
进程及进程管理 第4章 进程及进程管理.
第四章 热力学第一定律 一、可逆与不可逆过程 二、功 W、热量Q、内能U 三、热力学第一定律 四、热容与焓 五、第一定律对理想气体的应用
计算机操作系统 第二章 进程管理 高校教师、高级项目经理 任铄 QQ:
第三章 进程互斥与同步 进程通信 Communication.
进程操作.
操作系统原理 Operating System Principles
李元金 计算机与信息工程学院 第 4 讲 进程管理(2) 李元金 计算机与信息工程学院 1/
第2章 进程管理 2.1 进程概念 2.2 线程 2.3 进程管理 2.4 进程间通信 2.5 经典进程同步问题 2.6 管程
第2章 进程和线程 内容提要: 2.1 进 程 概 念 2.2 进程的状态和组成 2.3 进 程 管 理 2.4 线 程.
第六次全国人口普查 近期数据处理工作部署 夏雨春 2010年12月28日.
第三章 进程互斥与同步.
第十三章 数量遗传.
青少年常見犯法行為.
特定消耗品說明 (指碳粉匣、墨水匣) 國立清華大學 保管組製作.
例題:某人由地面同時向空中拋出 A、B 兩球,A 球之初速為 vA,仰角為 θA,B 球則為 vB 及 θB,且 θA > θB。設兩球在同一水平面內運動,而且所達到的最大高度也相同,則下列敘述何者為正確? (A) vA > vB (B) A 球之水平射程較 B 遠 (C) 兩球同時到達最高點.
大圓小圓展風貌 ─圓面積 製作者:蔡怡真.
校外教學一日遊 -八仙樂園 作者:江麗妮.
Race Conditions and Semaphore
第四章第二節 天氣的要素 P103.
Presentation transcript:

第三章 进程互斥与同步

互斥-信号量机制 1965年由荷兰的Dijkstra提出 信号量( semaphore ) 是一种软件不忙等待法 信号量机制的类型 经典信号量(忙等待) 记录型信号量(使用不当可能会造成死锁) 信号量集(资源利用率低)

记录型信号量的定义 数据结构 typedef struct semaphore { int value; PCB * P; } S; //定义信号量的结构体及变量S

P-V操作原语 P(S)操作原语 void P( struct semaphore S ) { S.value --; if ( S.value < 0 ) block( S.P); //阻塞调用进程,在S.P中排队 } P操作的主要动作: ①s值减1; ②若相减结果>=0,则进程继续执行; ③若相减结果<0,则进程被封锁,并将它插入到该信号灯的等待队列之中,然后转进程调度程序。

P-V操作原语 V(S)操作原语 void V( struct semaphore S ) { S.value ++; if ( S.value <= 0 ) wakeup( S.P); //唤醒S.P排队中某个进程 } V操作的主要动作: ①s值加1; ②若相加结果>0,则进程继续执行; ③若相加结果<=0,则从该信号灯的等待队列中移出一个进程,解除它的等待状态,然后返回本进程继续执行。

S.value的物理意义 S.value 用于表示资源数目或请求使用某一资源的进程个数的整形量. S是与临界区内所使用的公用资源有关的信号量。S.value>0 表示可供并发进程使用的资源数。 P(S)操作时表示,表示进程请求分配一个该类资源,将对S.value减1,若S.value<0 表示资源已经分配完,此时|S.value|表示正在S.P队列中等待使用临界区的进程数 V(S)操作表示进程释放一个该类资源,S.value加1,若S.value<=0表示S.P队列中有进程等待分配该类资源,应唤醒其中的一个进程

用信号量机制实现N进程间的互斥 为N个进程设置一个互斥的信号量mutex, mutex.value为1(实现互斥) 进程进入临界区前用P(mutex)操作申请资源 进程退出临界区后用V(mutext)操作释放资源

struct semaphore mutex; mutex.value=1; //初始化资源数量为1 cobegin void process1(void) { while( 1 ) { P(mutex); .....; //进程1访问临界资源 V(mutex); ......;//非临界区代码 } ...... void processN(void) .....; //进程N访问临界资源 coend

解决老问题 struct semaphore S = 1; // S.value = 1; P1: P( S ); R1=count; R1=R1+1; count=R1; V( S ); P2: R2=count; R2=R2+1; count=R2;

进程同步 进程同步: 多个合作进程为了完成同一个任务,在执行速度上必须相互协调。 进程同步的例子 进程互斥与进程同步统称为进程同步 计算与打印的同步关系 Buffer C P 进程互斥与进程同步统称为进程同步 进程互斥实际上是进程同步的一种特殊情况,一个等待使资源的进程在得到占用资源的进程发出“释放资源”的信息后就可以使用该资源了。

互斥与同步的区别 互斥是进程间竞争共享资源的使用权,这种竞争无固定的必然关系。 同步是涉及共享资源的并发进程间有一种必然的依赖关系,即使没有进程在使用共享资源,尚未得到同步消息的进程仍不能去使用该资源。

用信号量机制解决进程同步 C P struct semaphore SC,SP=1,0; number x, y , buffer; cobegin void CP( void ) //computer process { while ( 1 ){ x = computer(); //计算并将结果存于x P( SC ); //请求存数 buffer = x; V( SP ); //与打印进程同步 } void PP( void ) // print process { while( 1 ){ P( SP ); //请求取数 y=buffer; V( SC ); //与计算机进程同步 print y number; coend Buffer C P

用信号量机制解决前趋图问题[同步] 方法: 若图中存在结点S1指向结点S2的有向边,表示进程P1中的程序段S1应该先执行,而进程P2中的程序段S2后执行。设置一个信号量s,初值为0,将V(s)放在S1后面,而在S2前面先执行P(s)。 进程P1的语句序列为:S1; V(s) 进程P2的语句序列为:P(s); S2 S1 s S2

具有8个结点的前趋图。图中的前趋图中共有有向边10条,可设10个信号量,初值均为0;有8个结点,可设计成8个并发进程,具体描述如下: S1 S2 S5 S6 S7 S8 a g e f b c d h i j S3 S4

Struct smaphore a,b,c,d,e,f,g,h,I,j=0,0,0,0,0,0,0,0,0,0 cobegin {S1; V(a); V(b); V(c);} {P(a); S2; V(d);} {P(b); S3; V(e); V(f);} {P(c); S4; V(g);} {P(d); P(e); S5; V(h);} {P(f); P(g); S6; V(i)} {P(h); P(i); S7; V(j);} {P(j); S8;} coend S1 S2 S5 S6 S7 S8 a g e f b c d h i j S3 S4

用信号量机制解决经典进程同步问题 生产者-消费者问题(Producer-Consumer) 哲学家进餐问题 读者-写者问题 一个数据集(如文件)如果被几个并行进程所共享,有些进程只要求读数据集内容,它称读者,而另一些进程则要求修改数据集内容,它称写者,几个读者可以同时读些数据集,而不需要互斥,但一个写者不能和其它进程(不管是写者或读者)同时访问些数据集,它们之间必须互斥。 … n-1 …. 2 1 P1 P2 P3 . Pk. C1 C2 C3 Cm

生产者-消费者问题 Producer-Consumer Problem(1/5) 生产者-消费者问题是最著名的同步问题,它描述一组生产者(P1 ……Pk)向一组消费者(C1……Cm)提供消息。它们共享一个有界缓冲池(bounded buffer pool),生产者向其中投放消息,消费者从中取得消息,如下图所示。生产者-消费者问题是许多相互合作进程的一种抽象。 … n-1 …. 2 1 P1 P2 P3 . Pk. C1 C2 C3 Cm

Producer-Consumer Problem(2/5) 假定缓冲池中有n个缓冲区,每个缓冲区存放一个消息。由于缓冲池是临界资源,它只允许一个生产者投入消息,或者一个消费者从中取出消息。即生产者之间、生产者与消费者之间、消费者之间都必须互斥使用缓冲池。所以必须设置互斥信号量mutex,它代表缓冲池资源,它的数值为1。 … n-1 …. 2 1 P1 P2 P3 . Pk. C1 C2 C3 Cm

Producer-Consumer Problem(3/5) 与计算打印两进程同步关系相同,生产者和消费者二类进程P和C之间应满足下列二个同步条件: 只有在缓冲池中至少有一个缓冲区已存入消息后,消费者才能从中提取消息,否则消费者必须等待。 只有缓冲池中至少有一个缓冲区是空时,生产者才能把消息放入缓冲区,否则生产者必须等待。 为了满足第一个同步条件,设置一个同步信号量full,它代表的资源是缓冲区满,它的初始值为0,它的值为n时整个缓冲池满。这个资源是消费者类进程C所拥有,C进程可以申请该资源,对它施加P操作,而C进程的合作进程生产者进程P对它施加V操作。 同样为了满足第二个同步条件,设置另一个同步信号量empty,它代表的资源是缓冲区空,它的初始值为n,表示缓冲池中所有缓冲区空。

Producer-Consumer Problem(4/5) 信号量 full表可用缓冲区数量 信号量 empty表空缓冲区数量 设置整型变量:存入指针in 和 取出指针out in in in … n-1 …. 2 1 1 out out 互斥访问in的信号量s1 和互斥访问out的s2

Producer-Consumer Problem(5/5) struct semaphore s1,s2,empty,full=1,1,n,0; message buffer[n]; int in , out = 0, 0 ; cobegin void produceri( void ) // i=1,2,...,k { message x ; while ( 1 ) { x = CreateNewMessage (); P( empty ); P( s1 ); buffer[ in ] = x; in = ( in +1 ) mod n; V( s1 ); V( full ) ; } } void consumerj( void ) // j=1,2,...,m { message y ; P( full ); P( s2 ); y = buffer[ out ] = ; out = ( out +1 ) mod n; V( s2 ); V( empty ) ; ConsumeMessage( y ); } coend

哲学家进餐问题(1/4) 哲学家进餐问题是典型的同步问题,是由Dijkstra提出并解决的。 问题描述5个哲学家,他们的生活方式是交替的思考和进餐。哲学家们公用一张圆桌,分别坐在周围的5张椅子上,圆桌上有5个碗和5支叉子,平时一个哲学家进行思考,饥饿时便试图取用其左、 右最靠近他的叉子,只有 他拿到两只叉子时才 能进餐,放下叉子又 继续思考。 显然叉子是临界资源

哲学家进餐问题(2/4) 思考: 当5个哲学家同时拿起其左边的叉子..... 一种解法 struct semaphore chopstick[5]={1,1,1,1,1}; 第i个哲学家的并发程序为 while ( 1 ){ think() ; P ( chopstick[i] ); //想拿左边的叉子 P ( chopstick[ (i+1) mod 5] ); //想拿右边的叉子 eat () ; V ( chopstick[i] ); //放下左边的叉子 V ( chopstick[ (i+1) mod 5] ); //放下右边的叉子 } 思考: 当5个哲学家同时拿起其左边的叉子.....

哲学家进餐问题(3/4) struct semaphore chopstick[5]={1,1,1,1,1}; struct semaphore count = 4; //最多允许四个人申请叉子 第i个哲学家的并发程序为 while ( 1 ){ think() ; P ( count ); P ( chopstick[i] ); //想拿左边的叉子 P ( chopstick[ (i+1) mod 5] ); //想拿右边的叉子 eat () ; V ( chopstick[i] ); //放下左边的叉子 V ( chopstick[ (i+1) mod 5] ); //放下右边的叉子 V ( count ); }

哲学家进餐问题(4/4) 其它解法 1 规定奇数号哲学家先申请拿他右边的叉子,然后现时申请拿左边的,而偶数号的则相反。 2 仅当哲学家左右两把叉子均可用时,才允许他拿叉子进餐,即左可两把叉子一起申请,而不是分两次申请,需要一个特殊的P操作。

读者-写者问题 一个文件可能被多个进程共享,为了保证读写的正确性和文件的一致性,系统要求,当有读者进程读文件时,不允许任何写者进程写,但允许多读者同时读;当有写者进程写时,不允许任何其它写者进程写,也不允许任何读者进行读。

struct semaphore x , wsem = 1,1; // x 实现readcount的互斥, wsem实现写/读的互斥 int readcout = 0; // 读者计数量 cobegin void readeri( void ) { while ( 1 ) { P( x ); if ( readcount == 0 ) P( wsem ); //仅我一人,禁止写 readcount ++; V ( x ); reading () ; P ( x ); readcount - - ; V ( wsem ); //最后一人,允许写 V ( x ); } } void writerj( void ) { while ( 1 ){ P ( wsem ); writing(); V ( wsem ); coend (读者优先) 写者挨饿现象

写者优先 只要有写者申请写操作,就不允许新的读者访问数据数据 增设变量 信号量rsem:在有写者操作时,禁止所有读者进行操作 变量writecount:用于控制信号量rsem的设置,当writecount为1时,做P(rsem)而当为0时作V(rsem) 信号量y:对写者共享的变量writecount进行互斥控制 信号量z:只允许rsem上有一个读者排队,其余读者在z上排队

作业-1 图书馆阅览室问题 问题描述:假定阅览室最多可同时容纳100个人阅读,读者进入时,必须在阅览室门口的一个登记表上登记,内容包括姓名、座号等,离开时要撤掉登记内容。用P、V操作描述读者进程的同步算法。

作业-2 理发师问题 问题描述:一个理发店由一个有几张椅子的等候室和一个放有一张理发椅的理发室组成。若没有要理发的顾客,则理发师就去睡觉;若一顾客走进理发店且所有的椅子都被占用了,则该顾客就离开理发店;若理发师正在为人理发,则该顾客就找一张空椅子坐下等待;若理发师在睡觉,则顾客就唤醒他,设计一个协调理发师和顾客的程序。

作业-3 吃水果问题 问题描述:桌上有一只盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘里的桔子,女儿专等吃盘里的苹果。只要盘子空,则爸爸或妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,请给出四人之间的同步关系,并用PV操作实现四人正确活动的程序。

作业4 某小型超市可容纳50个人同时购物,入口处备有篮子,每个购物者可拿一只篮子入内购物,在出口处结账,并归还篮子(出入口禁止多人同时通过)。试用P-V操作写出购物者的同步算法。