一、进程互斥的定义
所谓进程互斥,指的是对某个系统资源,一个进程正在使用它,另外一个想用它的进程就必须等待,而不能同时使用 。
进程互斥是多道程序系统中进程间存在的一种源于资源共享的制约关系,也称间接制约关系,主要是由被共享资源的使用性质所决定的。
二、互斥访问的划分
三、进程互斥遵循的原则
空则让进:当无进程在互斥区时,任何有权使用互斥区的进程可进入。
忙则等待:不允许两个以上的进程同时进入互斥区,当已有进程进入临界区时,其他试图进入临界区的进程必须等待。
等则有限:对请求访问的进程,应该保证能在有限时间内进入临界区(保证不会饥饿)。
等则让权:当进程不能进入临界区时,应立即释放处理机,避免进程忙等待。
四、实现进程互斥的软件方法
单标志法:
双标志先检查法:
双标志后检查法:
Peterson算法
进入区:
1主动争取
2主动谦让
3检查对方是否也想使用,且最后一次是不是自己说了“客气话”。
王道考研老师举了一个这样的例子:
如果是按照①②③的顺序:
香香想要用马桶,并且表示可以谦让臭臭,但是臭臭并不想用马桶,于是香香去使用马桶了。
如果是按照①⑥②⑦⑧的顺序,香香想要使用马桶,臭臭也想要使用马桶,香香表示可以先让臭臭来使用马桶,臭臭表示可以先让香香来使用马桶,但最后一次谦让的客气话是臭臭说的,所以臭臭要等待香香先去使用马桶。
总结
其实对于所有解决进程互斥算法的分析,都可以采用一个相同的思路:
先区分出那一个是进入区,在进入区都做了哪些事情,再把进入区这些操作并发会产生的不同顺序依次执行,验证有可能会导致什么样的问题出现。
五、实现进程互斥的硬件方法
中断屏蔽法:
TestAndSet指令:
刚开始lock是false,TSL使得lock变为true,并且返回的old值为false,while循环条件不足,跳出循环进入临界区,若这时候又有一个进程要访问临界区,但此时的lock为ture,执行TSL之后old返回ture,while一直循环直到上一个进程访问完临界区在退出去进行“解锁”。
Swap指令:
刚开始lock是false,Swap使得lock与old交换变为true,old值变为false,while循环条件不足,跳出循环进入临界区,若这时候又有一个进程要访问临界区,但此时的lock为ture,执行Swap之后old交换为ure,while一直循环直到上一个进程访问完临界区在退出去进行“解锁”。