第3章处理机管理2.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 处理机管理-2 ——进程通信 八、进程通信 同步、互斥 进程通信原理和通信工具 临界区管理 信号量与PV操作 同步、互斥 进程运行中的关系:互相协作和互相竞争 进程互斥:具有某限制条件,进程间不可同时进行同一操作。例如: A申请打印机-打印-释放打印机 B申请打印机-打印-释放打印机 进程同步:进程间必须合作的协同工作关系。例如: 计算进程-结果送缓冲区-通知打印进程 打印进程-取走缓冲区数据-通知计算进程 进程通信原理和通信工具 通信原理:使用信号灯 通信工具:原语 开锁、关锁 PV操作 消息缓冲 临界区管理 临界资源:某段时间内只允许一个进程使用的资源。 临界区:进程访问临界资源的那段代码 例题: Lock和Unlock X:代表临界资源状态 X=0表示资源可用;X=1表示资源正在使用 Lock(x) L: if x=1 then goto L ;/*正在使用,继续测试*/ else x:=1 ;/*占用资源*/ Unlock(x) x:=0 ;/*使用完毕,释放资源*/ 信号量与PV操作——概念(1) 信号量:一种软资源 原语:内核中执行时不可被中断的过程 P操作原语和V操作原语 信号量和P、V操作 ,将交通管制中多种颜色的信号灯管理交通的方法引入操作系统,让两个或多个进程通过特殊变量展开交互。 信号量与PV操作——概念(2) 一个进程在某一特殊点上被迫停止执行直到接收到一个对应的特殊变量值,这种特殊变量就是信号量(semaphore),复杂的进程合作需求都可以通过适当的信号结构得到满足。 通过信号量传送信号,进程使用P、V两个特殊操作来发送和接收信号,如果进程相应的信号仍然没有送到,进程被挂起直到信号到达为止。 信号量与PV操作——概念(3) 操作系统中,信号量表示物理资源的实体,它是一个与队列有关的整型变量。 实现时,信号量是一种记录型数据结构,有两个分量:一个是信号量的值,另一个是信号量队列的队列指针。 图示: 信号量与PV操作——概念(4) 信号量按其用途分为 公用信号量 私有信号量 信号量按其取值分为 二元信号量 一般信号量 信号量与PV操作——整型信号量 设s为一个整型量,除初始化外,仅能通过P、V操作访问,P和V操作原语定义: P(s):while s≤0 do null operation /*执行空指令,等待唤醒*/ s:=s-1; /*占用一个资源*/ V(s):s:=s+1; /*释放一个资源*/ 信号量与PV操作——记录型信号量(1) 设s为一个记录型数据结构,一个分量为整形量value,另一个为信号量队列queue, P和V操作原语定义: P(s);将信号量s减去l,若结果小于0,则调用P(s)的进程被置成等待信号量s的状态。 V(s):将信号量s加1,若结果不大于0,则释放一个等待信号量s的进程。 信号量与PV操作——记录型信号量(2) 推论1:若信号量s为正值,则该值等于在封锁进程之前对信号量s可施行的P操作数、亦等于s所代表的实际还可以使用的物理资源数 推论2:若信号量s为负值,则其绝对值等于登记排列在该信号量s队列之中等待的进程个数、亦即恰好等于对信号量s实施P操作而被封锁起来并进入信号量s队列的进程数 推论3:通常,P操作意味着请求一个资源,V操作意味着释放一个资源。在一定条件下,P操作代表挂起进程操作,而V操作代表唤醒被挂起进程的操作 例题1:苹果桔子问题 桌上有一只盘子,每次只能放入一只水果;爸爸专向盘子中放苹果(apple),妈妈专向盘子中放桔于(orange),一个儿子专等吃盘子中的桔子,一个女儿专等吃盘子里的苹果。 plate:integer; sp:semaphore; /* 盘子里可以放几个水果 */ sg1:semaphore; /* 盘子里有桔子 */ sg2:semaphore; /* 盘子里有苹果 */ sp:= 1; /* 盘子里允许放一个水果*/ sg1:= 0; /* 盘子里没有桔子 */ sg2:= 0; /* 盘子里没有苹果*/ cobegin process father begin L1:削一个苹果; P(sp); 把苹果放入plate; V(sg2); goto L1; end; process mother begin L2:剥一个桔子; P(sp); 把桔子放入plate; V(sg1); goto L2; end; process son begin L3: P(sg1); 从plate中取桔子; V(sp); 吃桔子; goto L3; end; process daughter

文档评论(0)

iris + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档