计算机操作系统原理ch进程同步.pptVIP

  • 2
  • 0
  • 约2.35万字
  • 约 270页
  • 2023-08-14 发布于江苏
  • 举报
第三章 进程的同步与通信;进程互斥 ; 基本概念;; ;;临界区(critical section):临界段,在每个程序中,访问临界资源的那段程序。 注意:临界区是对某一临界资源而言的,对于不同临界资源的临界区,它们之间不存在互斥。 如有程序段A、B是关于变量X的临界区,而C、D是关于变量Y的临界区,那么,A、B之间需要互斥执行,C、D之间也要互斥执行,而A与C、B与D之间不用互斥执行。 ;解决互斥的准则;软件方法解决进程互斥 ;算法1;;算法1的问题;算法2;;算法2的问题;算法3;;Pi进程: Repeat flag[i]:=true; While flag[j] do no_op; Critical section flag[i]:=false; Other code Until false;;算法3的问题;课本上的解法4;算法4(正确算法) ;;算法4(正确算法);软件解法的缺点;硬件方法解决进程互斥;Test-and-Set指令实现互斥;2、利用TS指令实现进程互斥 为每个临界资源设置一个全局布尔变量lock,并赋初值false,表示资源空闲。 repeat while TS(lock) do skip; critical section lock:=false; Other code Until false;;swap指令实现进程互斥;2、利用swap实现进程互斥 为每一临界资源设置一个全局布尔变量lock,其初值为false,在每个进程中有局部布尔变量key。 Repeat key:=true; Repeat  Swap(lock,key);  Until key=false; Critical section lock:=false; Other code Until false;;用原语实现进程互斥;上锁和开锁原语;用原语实现进程互斥;改进的上锁原语;改进的开锁原语;1965年,由荷兰学者Dijkstra提出(所以P、V分别是荷兰语的test (proberen) 和increment (verhogen) ) 一种卓有成效的进程同步机制 最初提出的是二元信号量(互斥) 推广到一般信号量(多值)(同步) P、V操作是原语 ;信号量:semaphore;P操作;V操作; 必须置一次且只能置一次初值 初值不能为负数 只能执行P、V操作;用P、V操作解决进程间互斥问题;信号量及P、V操作讨论;思考;1) 信号量的物理含义: S0表示有S个资源可用 S=0表示无资源可用 S0则| S |表示S等待队列中的进程个数 P(S):表示申请一个资源 V(S):表示释放一个资源。 信号量的初值应该大于等于0;2) P.V操作必须成对出现,有一个P操作就一定有一个V操作 当为互斥操作时,它们同处于同一进程 当为同步操作时,则不在同一进程中出现 如果P(S1)和P(S2)两个操作在一起,那么P操作的顺序至关重要。 一个同步P操作与一个互斥P操作在一起时同步P操作在互斥P操作前 而两个V操作无关紧要;3)P、V操作的优缺点 优点: 简单,而且表达能力强(用P、V操作可解决任何同步互斥问题) 缺点: 不够安全,P、V操作使用不当会出现死锁; 遇到复杂同步互斥问题时实现复杂;信号量集——AND型信号量集 ;Swait(S1, S2, …, Sn) //P原语; { if(S1 =1 S2 = 1 … Sn = 1) { //满足资源要求时的处理; for (i = 1; i = n; ++i) -–Si; } else { //某些资源不够时的处理; 调用进程进入第一个小于1信号量的等待队列Sj.queue; 阻塞调用进程; } };Ssignal(S1, S2, …, Sn) { for (i = 1; i = n; ++i) { ++Si; //释放占用的资源; for (在Si.queue中等待的每一个进程P) { 从等待队列Si.queue中取出进程P; if(判断进程P是否通过Swait中的测试) //重新判断 { 进程P进入就绪队列; break; } else 进程P进入某等待队列; } } } ;一般“信号量集”;进程对信号量Si的 测试值为ti(表示信号量的判断条件,要求Si = ti;即当资源数量低于ti时,便不予分配) 占用值为di(表示资源的申请量,即Si = Si - di) 对应的P、V原语格式为: Swait(S1, t1, d1

文档评论(0)

1亿VIP精品文档

相关文档