OS-03进程管理_进程同步互斥与通信、死锁.ppt

上传人:京东小超市 文档编号:6020969 上传时间:2020-08-22 格式:PPT 页数:174 大小:3.42MB
返回 下载 相关 举报
OS-03进程管理_进程同步互斥与通信、死锁.ppt_第1页
第1页 / 共174页
OS-03进程管理_进程同步互斥与通信、死锁.ppt_第2页
第2页 / 共174页
亲,该文档总共174页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《OS-03进程管理_进程同步互斥与通信、死锁.ppt》由会员分享,可在线阅读,更多相关《OS-03进程管理_进程同步互斥与通信、死锁.ppt(174页珍藏版)》请在三一文库上搜索。

1、操作系统原理操作系统原理 金 海 溶 (msn) 办公室: JK329 慨 饲 腮 玫 洲 癌 带 无 惧 氓 脯 淆 梢 糜 肉 危 芹 君 碑 呀 畸 悼 产 些 语 单 葛 展 踞 惟 满 歉 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 3.6 3.6 进程同步与同步进程同步与同步 操作系统设计中的核心问题是关于进程和线程的操作系统设计中的核心问题是关于进程和线程的 管理管理 多道程序技术多道程序技术管理单处理器系统中的多个进程管理单处理器系统中的多个进程

2、多处理技术多处理技术 管理多处理器系统中的多个进程管理多处理器系统中的多个进程 分布处理技术分布处理技术管理多台分布式计算机系统管理多台分布式计算机系统 ( (集群集群) ) 中多个进程的执行中多个进程的执行 契 鼎 淹 既 沿 肪 轧 奄 姑 软 绑 龙 垫 刀 慑 如 咨 剑 逸 硒 甥 郁 隧 锤 碧 尔 霄 绵 链 诈 绩 汐 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 并发程序并发程序 并发是所有问题的基础,也是操作系统设计的基础并发是所有问题的基础,也

3、是操作系统设计的基础 。它包括很多设计问题。它包括很多设计问题 分配给进程的处理器时间等分配给进程的处理器时间等 资源的共享与争用资源的共享与争用 进程间的通信进程间的通信 多个进程活动的同步多个进程活动的同步 浊 妓 暑 拓 柔 顶 滓 痪 弱 繁 妻 蜘 诌 沁 锑 戎 逢 愿 眠 堑 妥 惊 褪 唆 遮 氯 淤 评 路 谬 功 峪 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 并发程序并发程序 程序并发可以通过创建进程或线程实现程序并发可以通过创建进程或线程实

4、现 Windows 2000Windows 2000并发程序设计并发程序设计 例子例子3 37.cpp7.cpp UnixUnix下的并发程序设计下的并发程序设计 通过通过fork( )fork( )创建子进程创建子进程 例:例:a+b=ca+b=c LinuxLinux下的并发程序设计下的并发程序设计 实验实验4.34.3 Void main() Void main() Pid=fork(); Pid=fork(); If pid=0 then If pid=0 then begin begin read(b); read(b); exit(0); exit(0); end; end; El

5、se Else read(a); read(a); Return_pid=wait( Return_pid=wait( c=a+b; c=a+b; Write( c); Write( c); 祖 或 训 瘴 吗 监 碴 赁 寞 镜 巧 仅 水 讣 寞 纱 稳 阅 槐 线 耙 惩 娄 协 铱 篇 冈 粗 撩 垛 宗 旨 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 3.6 3.6 进程同步与同步进程同步与同步 进程并发要解决的主要问题进程并发要解决的主要问题 互斥互斥

6、:支持并发进程的基本需求是实现互斥的能力,即支持并发进程的基本需求是实现互斥的能力,即 ,当一个进程被授予一资源时,在其活动期间,它具有,当一个进程被授予一资源时,在其活动期间,它具有 排斥所有其他进程使用该资源的能力排斥所有其他进程使用该资源的能力并发的基本需并发的基本需 求求 实现互斥包括软件方法实现互斥包括软件方法 (“ (“忙等待忙等待” ”技术技术) ) 和支持互斥的硬和支持互斥的硬 件机制等件机制等 同步同步:进程间的活动有相互依赖和合作的关系:进程间的活动有相互依赖和合作的关系 通信通信:信号量、管程、消息:信号量、管程、消息实现同步、互斥的三方法实现同步、互斥的三方法 迟 掖

7、剩 漾 键 笼 获 疽 轴 酮 烦 俗 怪 胃 汾 总 松 碍 俏 辊 弦 傣 蹲 臂 欲 霸 缄 汪 曰 吱 鹤 吴 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 3.6 3.6 进程同步与同步进程同步与同步 并发的例子及并发后的问题并发的例子及并发后的问题 并发并发 在同一时间段内,多个进程同时运行;宏观上在同一时间段内,多个进程同时运行;宏观上 并发,微观上顺序执行。并发,微观上顺序执行。 并发后产生了并发后产生了资源的竞争和共享资源的竞争和共享问题,而且进问

8、题,而且进 程的执行速度及进程的执行序列都是不可预测程的执行速度及进程的执行序列都是不可预测 的的 一个例子一个例子 角 荧 憋 鼓 矣 妻 祈 庶 砚 腔 块 闭 范 浙 脓 怔 病 枢 寻 御 隐 搁 工 衫 愁 赏 酥 沃 揪 造 砸 央 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 3.6 3.6 进程同步与同步进程同步与同步 考虑下面一个字符回显的的过程考虑下面一个字符回显的的过程 void echo() void echo() chin = getcha

9、r() ; chin = getchar() ; chout = chin; chout = chin; putchar(chout) ; putchar(chout) ; 从键盘获得输入,每击一下键,输入字符就保存在变量从键盘获得输入,每击一下键,输入字符就保存在变量 chinchin中,然后传送给变量中,然后传送给变量choutchout,并回送显示器,并回送显示器 任何程序可以重复地调用此过程,接收用户输入,并在用任何程序可以重复地调用此过程,接收用户输入,并在用 户的屏幕上显示户的屏幕上显示 熔 窃 洱 颠 熊 聊 乒 蒋 秦 摄 了 合 躬 佳 酣 笨 度 囤 陋 珐 它 师 蹬 矮

10、 卒 妇 蝇 警 京 鸡 僳 梨 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 3.6 3.6 进程同步与同步进程同步与同步 考虑一个支持单用户单处理器、多道程序设计系统考虑一个支持单用户单处理器、多道程序设计系统 将其当作一个共享过程,载入到所有应用程序公将其当作一个共享过程,载入到所有应用程序公 用的全局存储区中。这样每个应用程序都能使用用的全局存储区中。这样每个应用程序都能使用 这个过程,由于每个应用程序只需使用这个过程,由于每个应用程序只需使用echoech

11、o过程过程 的一个副本,从而节省空间的一个副本,从而节省空间 进程间共享主存是非常有用的,它允许进程间有效而进程间共享主存是非常有用的,它允许进程间有效而 紧密的交互,有利于进程的相互通信。但是,共享也紧密的交互,有利于进程的相互通信。但是,共享也 可能会带来一些问题可能会带来一些问题 void echo()void echo() chin = getchar() ; chin = getchar() ; chout = chin; chout = chin; putchar(chout) ; putchar(chout) ; 仟 腑 充 宋 烙 疤 铣 撅 巢 畔 益 沥 并 姑 檄 困 砌

12、 陇 肤 昂 叉 月 歹 景 臀 淄 橱 羽 时 博 驴 毯 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 3.6 3.6 进程同步与同步进程同步与同步 考虑下面的顺序考虑下面的顺序 进程进程P1P1调用调用echoecho过程,并在过程,并在getchargetchar函数结束后立即被函数结束后立即被 中断,此时,最近输入的字符中断,此时,最近输入的字符x x被保存在变量被保存在变量 chin chin中中 进程进程P2P2被激活并调用被激活并调用echoecho

13、过程,过程,echoecho过程运行得出结果过程运行得出结果 ,输入然后在屏幕上显示单个的字符,输入然后在屏幕上显示单个的字符 y y 进程进程P1P1被恢复。此时被恢复。此时chinchin中值中值x x被写覆盖,因此已丢失,被写覆盖,因此已丢失, 而而chinchin中的值中的值y y被传送给被传送给choutchout并显示出来并显示出来 第一个字符丢失,第第一个字符丢失,第2 2个字符被显示了两次个字符被显示了两次 void echo()void echo() chin = getchar() ; chin = getchar() ; chout = chin; chout = chi

14、n; putchar(chout) ; putchar(chout) ; 代 泽 途 什 犯 垃 学 瞻 狮 山 恩 踪 臂 尽 续 湘 避 汞 姿 寥 嘘 硷 瞄 百 滚 僚 饲 创 止 要 者 扛 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 getchargetchar()() chinchin choutchout putcharputchar()() P1 P2 getchargetchar()() X X getchargetchar()() YY Y

15、putcharputchar()() Y Y Y Y Y ? echoecho 坊 佐 拢 元 接 讨 丛 箭 承 釜 小 玄 倾 终 够 仕 冶 小 族 碍 悲 箔 呻 境 艘 油 据 颈 漫 借 裁 姚 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 3.6 3.6 进程同步与同步进程同步与同步 解决方案:解决方案:一次只允许一个进程调用一次只允许一个进程调用echoecho过程:过程: 进程进程P1P1调用调用echoecho过程,并在过程,并在getcharg

16、etchar函数结束后立即被中函数结束后立即被中 断,此时,最近输入的字符断,此时,最近输入的字符x x被保存在变量被保存在变量chinchin中中 进程进程P2P2被激活并调用被激活并调用echoecho过程。但是,由于过程。但是,由于P1P1仍然在仍然在 echoecho过程中,尽管当前过程中,尽管当前P1P1处于就绪状态,处于就绪状态,P2P2仍被阻塞,仍被阻塞, 不能进入这个过程。因此,不能进入这个过程。因此,P2P2被阻塞,等待被阻塞,等待echoecho过程可过程可 用用 一段时间后进程一段时间后进程P1P1被恢复,完成被恢复,完成echoecho的执行,显示出正的执行,显示出正

17、确的字符确的字符x x P1P1退出退出echoecho后,解除了后,解除了P2P2的阻塞,的阻塞,P2P2被恢复,成功地调被恢复,成功地调 用用echoecho过程过程 void echo()void echo() chin = getchar() ; chin = getchar() ; chout = chin; chout = chin; putchar(chout) ; putchar(chout) ; 箩 吵 央 侗 傻 妹 黔 倒 汝 熙 们 臂 模 峰 壤 茂 困 宽 暑 问 凸 屯 甄 蕊 簇 冒 油 违 赏 遂 壬 凭 O S - 0 3 进 程 管 理 _ 进 程 同 步

18、 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 P1 void echo()void echo() chin = getchar() ; chin = getchar() ; chout = chin; chout = chin; putchar(chout) ; putchar(chout) ; 调用调用echoecho 超时,就绪超时,就绪 P2 调用调用echoecho资源资源 正忙正忙 阻塞状态阻塞状态 调度运行调度运行 释放释放echoecho 唤 醒 获取资源获取资源 就绪状态就绪状态 调度运行调度运行 夜

19、跳 徒 捉 魔 策 蔗 眷 借 忆 坎 车 熊 毗 练 侧 虎 好 成 缕 淖 旨 氢 龟 梢 辆 寞 梳 断 椽 巍 庸 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 3.6 3.6 进程同步与同步进程同步与同步 由此可见,解决共享资源的保护,唯一的办法是由此可见,解决共享资源的保护,唯一的办法是互斥的使互斥的使 用共享资源用共享资源(如变量,代码等)(如变量,代码等) 即:一次只允许一个进程访问共享资源即:一次只允许一个进程访问共享资源 临界资源和临界区:临界资

20、源和临界区: 临界资源临界资源 某些在一段时间内只允许一个进程使用的共享资源称为某些在一段时间内只允许一个进程使用的共享资源称为 临界资源临界资源 临界区(段)临界区(段) 访问临界资源的程序段称为临界区。即互斥执行的程序访问临界资源的程序段称为临界区。即互斥执行的程序 段段 p53p53 涂 忠 卫 顷 熬 斗 手 髓 懒 龋 丫 壶 祭 冻 蝶 丫 躺 挖 熄 畴 颁 蹲 家 咖 削 亢 岩 律 玻 盖 杜 搔 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 3.

21、6 3.6 进程同步与同步进程同步与同步 进程进程P1P1和和P2P2共享同一打印机资源,其操作流程共享同一打印机资源,其操作流程 如下:如下: p1: entry codep1: entry code使用打印机使用打印机exit codeexit code p2: entry code p2: entry code使用打印机使用打印机exit codeexit code 系统打印机即为系统打印机即为临界资源临界资源 P1P1和和p2p2的访问临界资源打印机的代码即为的访问临界资源打印机的代码即为 临界区临界区 釜 赞 姚 玖 锯 抚 襟 淋 僵 敛 怯 俺 祭 狰 癌 嗣 旗 好 弹 红 值

22、 脱 饯 拐 杂 决 戈 踢 充 接 瓷 交 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 3.6 3.6 进程同步与同步进程同步与同步 进程的通信方式之一进程的通信方式之一同步与互斥同步与互斥 同步同步:进程间必须互相合作的协同关系,有前后次序的:进程间必须互相合作的协同关系,有前后次序的 等待和信息交换关系等待和信息交换关系, ,这种进程间的直接制约关系称为进这种进程间的直接制约关系称为进 程同步程同步(p60)(p60) 互斥互斥:两个进程,当一个进程进入临界

23、区时,另一个进:两个进程,当一个进程进入临界区时,另一个进 程不能进入该临界区,这种进程间的间接制约关系称为程不能进入该临界区,这种进程间的间接制约关系称为 进程互斥进程互斥(p53)(p53) 蔑 哦 穴 卓 喉 爆 夺 入 知 赖 侵 帽 纸 盆 疫 哨 勃 澄 桩 广 栅 啊 牧 耗 郎 搂 浊 脉 铰 河 糯 秘 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 3.6 3.6 进程同步与同步进程同步与同步 互斥:硬件的支持互斥:硬件的支持 中断禁用中断禁用 在

24、单处理器机器中,并发进程不能重叠在单处理器机器中,并发进程不能重叠, ,只能只能 交替。此外,一个进程将一直运行,直到它调用了一个交替。此外,一个进程将一直运行,直到它调用了一个 操作系统服务或被中断。因此,为保证互斥,只需要保操作系统服务或被中断。因此,为保证互斥,只需要保 证一个进程不被中断就可以证一个进程不被中断就可以 当一个计算机系统包括多个处理器时,在这种情况下,当一个计算机系统包括多个处理器时,在这种情况下, 禁止中断不能保证互斥禁止中断不能保证互斥 锗 昧 拙 文 涟 烈 俗 戈 娃 崎 积 储 臃 央 机 褒 瑶 婶 醒 纫 沪 还 粒 篇 呸 喊 淖 销 莆 妈 名 澄 O

25、S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 3.6 3.6 进程同步与同步进程同步与同步 互斥:硬件的支持互斥:硬件的支持 专门的机器指令专门的机器指令 在硬件级,对存储器单元的访问排斥到相同单元的其他在硬件级,对存储器单元的访问排斥到相同单元的其他 访问。基于这一点,处理器的设计者提出了一些机器指访问。基于这一点,处理器的设计者提出了一些机器指 令,用于保证两个动作的原子性,如在一个取指令周期令,用于保证两个动作的原子性,如在一个取指令周期 中对一个存储器单元的读和

26、写或者读和测试。由于这些中对一个存储器单元的读和写或者读和测试。由于这些 动作动作在一个指令周期中执行在一个指令周期中执行,它们不会受到其他指令的,它们不会受到其他指令的 干扰干扰 如:如:test-and-settest-and-set指令,指令,swapswap指令等指令等 凳 酸 站 侄 保 露 恬 求 舒 狠 蓑 霉 丰 搅 拆 崩 朱 逮 襟 兜 摔 赐 粗 衡 又 宠 耸 匣 秩 酶 鬃 冻 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 3.6 3.6

27、进程同步与同步进程同步与同步 实现同步、互斥的三种主要方法:实现同步、互斥的三种主要方法: 信号量信号量 管程管程 消息传递消息传递 进程间的同步与互斥一般用通信原语来实现进程间的同步与互斥一般用通信原语来实现 低级通信原语低级通信原语加锁;加锁;P P、V V操作操作 高级通信原语高级通信原语消息缓冲机制消息缓冲机制 帮 囊 权 帽 熊 改 邢 一 撑 巴 涕 堕 迟 喝 绣 擞 铀 醚 配 诛 背 匙 瓶 亿 谣 龄 礼 聘 随 窿 效 僵 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥

28、 与 通 信 、 死 锁 3.6 3.6 进程同步与同步进程同步与同步 LockLock和和unlockunlock 关锁和开锁是加锁机制的关锁和开锁是加锁机制的2 2个基本操作。在其中个基本操作。在其中 设置一公共变量设置一公共变量 x x 代表某个临界资源的状态代表某个临界资源的状态 X X1 1 表示资源可用表示资源可用 X X0 0 表示资源正在被使用表示资源正在被使用 进程使用临界资源必须做如下三个不可分割的操进程使用临界资源必须做如下三个不可分割的操 作作 非 拨 乾 许 意 河 莆 授 北 旧 钢 绍 炔 帝 逾 峰 魄 雪 淮 匣 奢 坊 而 津 诉 寐 姚 扣 仙 燎 装 瞻

29、 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 LockLock和和unlockunlock 1) 1)检查检查 x x 的值。的值。x=0 x=0,资源正在使用,返回继续进行检查;,资源正在使用,返回继续进行检查; x=1 x=1,资源可以使用,置,资源可以使用,置 x x 为为 0 ( 0 (关锁关锁) ) 2) 2)进入临界区,访问临界资源进入临界区,访问临界资源 3) 3)释放资源释放资源, ,退出临界区,置退出临界区,置 x x 为为 1 ( 1 (开锁开

30、锁) ) 通过分析,给出关锁和开锁操作的描述通过分析,给出关锁和开锁操作的描述 关锁关锁 lockxlockxL: if x=0 then go to L else x:=0;L: if x=0 then go to L else x:=0; 开锁开锁 unlockxunlockxx:=1;x:=1; 挠 庄 首 碱 咖 现 韭 箩 鸦 盏 疙 蚁 按 简 文 凰 踏 污 詹 釜 洁 诅 侯 喝 昼 沏 逛 帚 氏 邓 核 病 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、

31、死 锁 简单的加锁机制不能彻底解决互斥问题,因为当同时有几简单的加锁机制不能彻底解决互斥问题,因为当同时有几 个进程调用个进程调用lockxlockx时,在时,在x:=0 x:=0语句执行前,可能已经有语句执行前,可能已经有2 2个个 以上的进程由于以上的进程由于x=1x=1而进入临界区了。因此必须加入一些而进入临界区了。因此必须加入一些 机制,保证第机制,保证第1 1步和第步和第2 2步的执行具有不可分离性步的执行具有不可分离性 加锁机制虽然可以实现进程之间的互斥,但执行效率低、加锁机制虽然可以实现进程之间的互斥,但执行效率低、 浪费处理机资源。因为任何进程都不能直接进入临界区,浪费处理机资

32、源。因为任何进程都不能直接进入临界区, 必须不停地循环检查必须不停地循环检查 x x 的值,等待锁位变为的值,等待锁位变为 1, 1, 消耗了有价消耗了有价 值的值的CPUCPU时间。时间。 加锁机制存在不公平性,导致某些进程一直优先进入临界加锁机制存在不公平性,导致某些进程一直优先进入临界 区,而某些进程可能一直无法进入临界区区,而某些进程可能一直无法进入临界区 引入信号量机制引入信号量机制P/V P/V 操作操作 信号量机制信号量机制 碍 忽 拓 烹 匹 者 汀 盾 淋 料 喂 梢 帮 宾 况 供 吟 曼 剂 纸 苯 份 毛 披 厚 牙 多 伶 缅 遇 栖 窟 O S - 0 3 进 程

33、管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 信号量机制信号量机制 信号量(信号量(semaphoresemaphore):):一个与资源有关的,一个与资源有关的, 初值为非负数的整型变量称为信号量。用初值为非负数的整型变量称为信号量。用S S表示表示 ,初值和资源有关,初值和资源有关 P P、V V操作操作:定义在信号量:定义在信号量S S上的一组操作,由上的一组操作,由P P 原语和原语和V V原语组成,能对信号量原语组成,能对信号量s s进行修改进行修改 信号量是一种特殊的变量,只能由信

34、号量是一种特殊的变量,只能由P P,V V操作进行操作进行 访问访问 卫 芽 瑞 洼 诧 右 穴 勾 瞩 浴 胸 浮 播 炙 茶 阳 塞 镑 主 鞋 傍 汕 焉 邑 壶 妹 痞 副 答 赫 踊 蔷 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 P P 原语原语 P(S) P(S) S := S - 1S := S - 1; 如果如果 S =0 S =0,则表示有资源,该进程继续执行;,则表示有资源,该进程继续执行; 如果如果 S 0 S 0 S 0,则该进程继续执行

35、,则该进程继续执行 如果如果 S S 0 S 0 时,时,S S 的值表示某类资源可用的数量的值表示某类资源可用的数量 l l S 0S 1 then if count 1 then V(entry) ;V(entry) ; P(wait) ; P(wait) ; else else V(entry)V(entry) ; ; V(barber) ;V(barber) ; “Shave” “Shave” P(entry) ;P(entry) ; count := count 1;count := count 1; if count 0 then V(wait) ;if count 0 then

36、V(wait) ; V(entry) ;V(entry) ; 理发室理发室 椅子椅子 入口入口 出口出口 等候室等候室 拔 梦 药 肆 碑 鹃 于 磅 乃 特 仑 韦 峦 政 弥 农 相 纬 液 弧 趣 统 宇 肖 酵 萄 弯 涨 退 迸 多 烟 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 理发室理发室 椅子椅子 入口入口 出口出口 等候室等候室 简单理发店问题简单理发店问题 拌 灾 愤 表 纯 褂 拽 堤 钞 菌 癌 铰 别 牧 车 卒 妥 淹 悸 况 扼 毡

37、右 绩 稳 舆 命 左 涝 帕 滇 挑 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 barberbarber信号量队列信号量队列 waitwait信号量队列信号量队列 entryentry信号量队列信号量队列 理发师 理发师 P P(barberbarber) P P(entryentry) P P(entryentry) countcount =0=0=1=1 v v(entryentry) 唤唤 醒醒 count=1count=1 v v(entryentry

38、) Count=2Count=2 P P(waitwait) V V(barberbarber) QQQQ王国的简单理发店问题王国的简单理发店问题 嘘 擅 药 烈 妄 帽 莹 饵 刃 枫 瘸 坯 阶 吱 胺 韦 乓 何 瞥 题 丝 丧 聂 曲 癸 于 头 粟 逛 被 得 南 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 理发师 barberbarber信号量队列信号量队列 waitwait信号量队列信号量队列 entryentry信号量队列信号量队列 P P(ent

39、ryentry) count=5count=5 QQQQ王国的简单理发店问题王国的简单理发店问题 V V(entryentry) P P(entryentry)count=5count=5count=4count=4 V V(entryentry)V V(waitwait) V V(barberbarber) 杆 擅 嗅 郎 舷 凹 葡 郎 住 驯 蒋 痪 演 桂 渡 凭 檄 学 捍 翟 劳 懈 概 辨 假 画 帕 鼎 犊 挪 林 郝 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通

40、信 、 死 锁 解解: : var a, b, c, d, e, f, g, h: semaphore (var a, b, c, d, e, f, g, h: semaphore (初值初值=0)=0) parbeginparbegin begin S1; V(a); V(b); V(c); end;begin S1; V(a); V(b); V(c); end; begin P(a); S2; V(d); V(e); end;begin P(a); S2; V(d); V(e); end; begin P(b); S3; V(f); end;begin P(b); S3; V(f); en

41、d; begin P(c); P(d); S4; V(g); end;begin P(c); P(d); S4; V(g); end; begin P(e); P(f); S5; V(h); end;begin P(e); P(f); S5; V(h); end; begin P(g); P(h); S6; end;begin P(g); P(h); S6; end; parendparend 习习 题题 例例: : 考虑右图所示的优先图,请用并发语句和信号量表达考虑右图所示的优先图,请用并发语句和信号量表达 该优先图。该优先图。 S1S1 S3S3 S4S4 S6S6 S5S5 S2S2 a

42、 a b b c c d d e e f f h h g g 思 专 涧 宪 任 勘 婪 畦 惦 遂 功 揩 庙 愤 澄 捏 撼 锦 裔 闸 副 弛 膳 三 氓 疙 酞 幂 域 切 迎 骗 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 习习 题题 桌上有一个空盘,允许存放一个水果。父亲可向盘桌上有一个空盘,允许存放一个水果。父亲可向盘 中放苹果,也可向盘中放橘子,儿子专等吃盘中的中放苹果,也可向盘中放橘子,儿子专等吃盘中的 橘子,女儿专等吃盘中的苹果。规定当盘空时一

43、次橘子,女儿专等吃盘中的苹果。规定当盘空时一次 放一个水果供吃者取用,请用放一个水果供吃者取用,请用P P,V V原语实现父亲原语实现父亲 、儿子、女儿三个并发进程的同步。、儿子、女儿三个并发进程的同步。 分析同步分析同步/ /互斥关系:互斥关系: 父亲和儿子之间父亲和儿子之间同步同步 父亲和女儿之间父亲和女儿之间同步同步 命 诗 底 有 撩 织 慨 绅 懈 酷 愉 稚 麦 靴 捷 径 滓 去 盈 种 瓮 尼 糕 霞 晃 暑 伍 年 案 使 宛 峨 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互

44、 斥 与 通 信 、 死 锁 习习 题题 设置信号量设置信号量 父亲的私有信号量父亲的私有信号量s s,表示盘子是否可用,初值,表示盘子是否可用,初值 为为1 1 儿子的私有信号量儿子的私有信号量orangeorange,表示是否有橘子可吃,表示是否有橘子可吃 ,初值为,初值为0 0 女儿的私有信号量女儿的私有信号量appleapple,表示是否有苹果可吃,表示是否有苹果可吃 ,初值为,初值为0 0 菩 痢 道 深 蠢 游 彤 山 棒 芹 等 穿 沉 箱 域 兜 猎 隆 诌 吱 烟 擒 膳 撇 闯 烽 俱 寒 柯 针 坯 崭 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与

45、通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 习习 题题 fatherfather进程:进程: L1L1:P(S)P(S); 将水果放入盘中;将水果放入盘中; if (if (放入是橘子放入是橘子) ) V( V(orangeorange) ); else V(else V(appleapple) ) ; goto L1goto L1; daughterdaughter进程:进程: L2L2:P(P(appleapple) ); 从盘中取出苹果;从盘中取出苹果; V(S) V(S); 吃苹果;吃苹果; goto L2goto L2;

46、 sonson进程:进程: L3L3:P(P(orangeorange) ); 从盘中取出橘子;从盘中取出橘子; V(S) V(S); 吃橘子;吃橘子; goto L3goto L3; 哆 北 瘦 铰 孕 相 盐 箩 腺 柔 似 益 焕 融 捅 坯 睦 曼 九 奶 绎 茵 载 荐 苑 谤 脊 畦 屑 永 变 儒 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 习习 题题 题:有题:有P P,QQ,R R 三个进程,三个进程,P P读入数据后传递给读入数据后传递给QQ

47、,QQ进行一些处理后将数据传递给进行一些处理后将数据传递给R R,R R整理好数整理好数 据后输出,请用据后输出,请用pvpv操作实现三者的同步关系。操作实现三者的同步关系。 l l 进程进程P,QP,Q共享一个缓冲区,进程共享一个缓冲区,进程Q,RQ,R共享一个缓冲共享一个缓冲 区区 l l 进程进程P,QP,Q共享一个有共享一个有m m个缓冲区的缓冲池,进程个缓冲区的缓冲池,进程 Q,RQ,R共享一个有共享一个有n n个缓冲区缓冲池个缓冲区缓冲池 爪 里 婴 庄 苑 锈 炯 饵 厅 碘 尤 辙 泳 时 海 陕 植 芬 瘟 限 病 膳 堑 湃 豆 呢 拣 罩 磋 种 卷 芋 O S - 0

48、3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 O S - 0 3 进 程 管 理 _ 进 程 同 步 互 斥 与 通 信 、 死 锁 习习 题题 (1).(1).进程进程P,QP,Q共享一个缓冲区,进程共享一个缓冲区,进程Q,RQ,R共享一个缓冲区共享一个缓冲区 分析分析: P,Q P,Q之间是相互依赖协作的关系之间是相互依赖协作的关系同步同步 Q,R Q,R之间也是相互依赖协作的关系之间也是相互依赖协作的关系同步同步 设置信号量设置信号量:假设初始两个缓冲区都为空:假设初始两个缓冲区都为空 P P的私有信号量的私有信号量 Pempry Pempry 初值为初值为1 1 Q Q与与P P同步的私有信号量同步的私有信号量QfullQfull0 0 Q Q与与R

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1