1.进程同步的基本概念
<div>(1)同步(直接相互制约关系、相互合作的关系)</div>
<div>(2)互斥(间接相互制约关系、对资源争用的关系)</div>
<div>2.临界资源和临界区</div>
<div>(1)临界资源(Critical Resouce )</div>
一次只允许一个进程使用的资源。
<div>(2) 临界区(critical section) </div>
<div>在每个进程中访问临界资源的那段程序,简称CS区。</div>
<div>(3) 临界区的调用原则</div>
空闲让进
忙则等待
有限停留
让权等待
<div>3.临界区互斥执行的解决方法</div>
<div>(1)软件方法</div>
<div>单标志算法<br>双标志、先检查算法<br>双标志、先修改后检查算法<br></div>
<div>先修改、后检查、后修改者等待算法(算是对两个进程同步最好的实现)</div>
<div>(2)硬件方法</div>
4.信号量机制
1. 整型信号量
即PV操作对应的wait(S),signal(S).S表示资源数 mutex互斥
执行一次signal操作意味着释放一个单位资源
执行一次wait操作意味着申请分配一个单位资源
2. 记录型信号量
<div>信号量的值(s.value,计数)</div>
<div>指向PCB的指针(s.L,标识进程等待队列)</div>
<div>3. AND型信号量 </div>
<div>区别:上述的进程互斥问题,是针对各进程之间要共享一个临界资源而言的。在有些应用场合,是一个进程需要先获得两个或更多的共享资源后,方能执行其任务。</div>
<div>Swait(S1,S2,…,Sn)</div>
<div>Ssignal(S1,S2,…,Sn)</div>
<div>4. 信号量集 </div>
区别:在记录型信号量机制中,wait(S)和signal(S)操作仅能对信号量施以加1或减1操作,当一次需要N个某类临界资源时,便要进行N次wait(S)操作,很低效;另外,在有些情况下,当资源数量低于某一下限值时,便不予以分配。
S为信号量,d为需求值,t为下限值。
Swait(S1, t1, d1, …, Sn, tn, dn)
5.信号量的应用
<div>利用信号量实现进程互斥 </div>
<div>用信号量实现进程同步</div>
利用信号量实现前趋关系