- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 进程同步与通信 3.1 进程的同步与互斥 3.1 进程的同步与互斥 进程的交互 进程间的交互关系 临界资源与临界区 互斥实现的硬件方法 ●禁止中断 ●专用机器指令 ● TS(Test and Set)指令 ● Swap指令 互斥实现的硬件方法 信号量和PV操作 信号量的PV操作 用信号量解决互斥问题 用信号量解决互斥问题 用信号量解决同步问题 用信号量解决同步问题 用信号量解决同步问题 * * ●进程同步与互斥 ●经典进程同步问题 ●管程 ●AND信号量 ●进程通信 本章要点 ● 并发带来的问题 ● OS引入进程后,由于进程的并发执行,可能会导致程序执行结果的不确定性,使程序执行时出现不可再现性。 ● “并发” 给操作系统的设计和管理带来了许多问题 ● 操作系统关注的事情 记录每个进程的情况 为进程分配和释放资源(处理机、内存、文件、I/O设备) 保护进程的数据和资源,避免其受干扰和破坏 保证进程执行结果的正确性 进程同步与互斥的主要任务是使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性,保证进程执行结果的正确性。 进程之间不知道对方的存在 —— 竞争 进程间接知道对方 —— 合作 进程直接知道对方 —— 通信合作 实际上,几个进程可能既要竞争又要合作 按进程的交互方式划分 ●互斥:多个进程不能同时使用同一资源。 ●同步:多个进程中发生的事件存在着某种时序关系,必须协同工作、相互配合。 ● 通信:多个进程之间要传递一定量的信息。 ●临界资源:某段时间内只允许一个进程使用的资源。 ●临界区:每个进程中访问临界资源的那段程序。 例:P1,P2两进程共享变量COUNT(COUNT的初值为5) P1:{ R1=COUNT; R1=R1+1; COUNT=R1; } P2:{ R2=COUNT; R2=R2+1; COUNT=R2; } 分析: ● 1》执行顺序P2→P1 执行结果 P1:COUNT为7, P2:COUNT为6。 ● 2》执行顺序 P1:{R1=COUNT} P2:{R2=COUNT} P1:{R1=R1+1;COUNT=R1} P2:{R2=R2=1;COUNT=R2} 执行结果 P1:COUNT为6, P2:COUNT为6。 临界资源实例 例:P1,P2两进程共享变量COUNT(COUNT的初值为5) P1:{ R1=COUNT; R1=R1+1; COUNT=R1; } P2:{ R2=COUNT; R2=R2+1; COUNT=R2; } 用Bernstein条件考察 R(P1)={R1,COUNT} W(P1)={R1,COUNT} R(P2)={R2,COUNT} W(P2)={R2,COUNT} R(P1)∩W(P2)≠ {} 临界资源实例 ● P1、P2不符合Bernstein条件 ●必须对进程的执行顺序施加某种限制 While(1){ ●空闲让进 ●忙则等待 ●有限等待 ●让权等待 进入区 临界区 退出区 剩余区 } 临界区进入准则 访问临界资源的进程描述为 同步机制应遵循的准则 //TS指令: boolean TS(lock) boolean lock; { boolean temp; temp = lock; lock = true; return temp;} ●每个临界资源设置一个 lock,其初值为false ●当lock=false时,表示资源空闲; ●当lock=true时,表示资源正在被使用。 ●为了实现互斥,利用TS指令实现互斥。 //TS指令的使用 while (TS(lock)) /*什么也不做*/;? ? 临界区; lock = false;? ? 剩余区; TS(Test and Set)指令 功能:把lock置为true,并返回lock原来的值 //Swap指令: void Swap( a, b ) boolean a, b ; { boolean temp; temp = a; a = b; b = temp;} ● 每个临界资源设置一个 Lock,其初值为false ●当lock=false时,表示资源空闲; ●当lock=true时,表示资源正在被使用。 ●每个进程设置一个key,key的初值为true //Swap指令的使用 key = true do { Swap(lock, key) }while (key) ? 临界区; lock = false;? ? 剩余区; Swap指令 功
文档评论(0)