第2章 进程并发与通信new

第2章 进程并发与通信new

ID:34458689

大小:389.03 KB

页数:62页

时间:2019-03-06

第2章 进程并发与通信new_第1页
第2章 进程并发与通信new_第2页
第2章 进程并发与通信new_第3页
第2章 进程并发与通信new_第4页
第2章 进程并发与通信new_第5页
资源描述:

《第2章 进程并发与通信new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第2章进程互斥与同步●进程:程序+执行过程●单道批处理系统●多道系统:并发性为什么要用多道?互斥问题●例子1:两个进程共享打印机打印结果:进程A:进程B:AAA的文本;············BBB的文本;打印文件AAA;打印文件BBB;AAA的文本;··············AAA的文本;BBB的文本;竞争(race)AAA的文本;BBB的文本;ABBBB的文本;BBB的文本;AAA的文本;就绪就绪AAA的文本;打印机·······互斥的概念●临界段概念°临界资源(CriticalResource)°临界段(CriticalSe

2、ction)●访问临界资源的程序段●解决:互斥进入(不允许两个以上的进程同时进入临界段)entry_code用锁临界段exit_code用锁对打印机用一把锁,两个进程进入前先闭锁,用完开锁进程A进程Block();lock();打印A文本;打印B文本;unlock();unlock();临界段概念●锁必须满足四项条件:°空闲让进:当无进程在临界段时,任何进程可立即进入临界段。°忙则等待:不允许两个以上的进程同时进入临界段°让权等待:当进程不能进入自己的临界区时,因立即释放处理机,避免忙等。°有限等待:任何进入临界段的要求应在有限的时

3、间内得到满足,避免死等。软件实现锁一●设置“锁”变量lock,初值=false,表示开●闭锁过程:1)检查锁是否关闭,若关闭,则等待2)否则将锁设置成关闭。●开锁过程:将锁设置成开whilelock==truedoloop;¾考虑执行序列:lock=true;T0:进程A执行while语句T1:进程B执行while语句临界段T2:进程A执行lock=truelock=false;T3:进程B执行lock=true软件实现锁一Booleanlock=false;voidprocessA(){voidporcessB:while(loc

4、k==true){}while(lock==true){}lock=true;lock=true;printA();printB();lock=false;(开锁)}lock=false;}违反忙则等待原则,未能保证只有一个进程进入临界区。破锁分析原因:先询问锁的状态,且几乎同时发生(询问和设置之间有空隙)。软件实现锁二●设置“锁”变量lockA,lockB,初值=false,表示开●闭锁过程:1)先将自己的锁关闭,检查对方的锁是否关闭,若关闭,将自己的锁打开,并等待2)否则将自己的锁设置成关闭。●开锁过程:将自己锁设置成开lock

5、A=true;¾考虑执行序列:if(lockB==false){T0:进程A执行lockA=trueT1:进程B执行lockB=true临界段;}T2:进程A执行if语句T3:进程B执行if语句lock=false;软件实现锁二BooleanlockA,lockB=false;voidprocessA(){voidporcessB(){lockA=true;lockB=true;if(lockA=false){if(lockB=false){printA();}printB();}lockB=false;lockA=false;}}

6、违反有限等待原则,会发生都进不去的情况。死锁分析原因:先询问其他进程的状态,且几乎同时发生(设置和询问之间有空隙)。原语●原语或原子操作——以不被分割和不被中断执行的操作序列完成的功能°物理原语:硬件实现的原子操作●单条指令●或者被完整执行,或者没有被执行。°逻辑原语:软件实现的原语●p、v原语●操作语义被完整地、确定地执行。●基于物理原语硬件实现原语●不同进程的语句是如何切换的?1。自己主动放弃:调用yield之类的系统调用2。被迫放弃:操作系统通过周期性的时钟中断获得CPU权解决方法一:用户直接调用硬件原语禁止中断指令disab

7、le/enableinterruptdisableinterrupt临界段(查询临界资源的状态,设置)enableinterrupt如果用户忘了开中断?黑客设计恶意软件?软件实现原语●解决方法二:操作系统提供安全的锁,用户调用操作系统的锁●定义一个布尔型变量boolean:S,S为false表示锁是闭合状态,也就是资源被其他进程占用,因此需要等待。S为true时,表示锁是打开状态可用,此时,闭锁成功。lock(S){临界段disableinterrupts;while(S==true){unlock(){enableinterrup

8、ts;disableinterrupts;disableinterrupts;S=false;}enableinterrupts;S=true;}enableinterrupts;}软件实现原语●定义一个整型变量S,S<=0时,表示锁

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。