对于独立介质,没有操作系统通用介质。 有的只是process之间互相发送信息。
三个目标
1 )在safety(essential ) :中,两个进程不会同时进入cs (无进程)
2 ) liveness(essential ) (最终满足每个CS接入请求)。
3 )订单固定资产
中心基本解决方案
选择大师制作管理Token,维持想进入Critical Section的Process的队列。 当一个process Pi请求进入危机安全时,如果Token在Master手中,则将Token传递给Pi,否则将Pi放入队列,Pi一直在等待Reply Token。 当一个Process Pj离开CS时,它将Token返回给Master,Master又将Token传递给队列中的Process。
缺点:主机负荷大,单点失败的问题。 共享文件系统的文件锁也属于这种方式,而主操作系统是共享文件系统的操作系统。
基于签名的解决方案
正如作为链路层实现之一的令牌环一样,Token在环上不断传递。 如果需要访问CS,请等待Token到达自己,然后再访问CS。 然后,把Token交给下面。 不需要访问CS的process直接向下传递。
Ricart-Agrawala Algorithm
每个进程有三种状态Released、Wanted和Held
访问CS时,状态变为Wanted,multicast向所有其他进程请求request(ti,I ) t,并在从所有其他进程接收到Reply时进入,状态变为Held。 接收到请求的Process,如果自己的状态为Held或Wanted,且是自己的(Tj,j ) ) Ti,则使请求进入通知队列,否则直接进行Reply。 自己访问CS后,向队列中的Process发送reply
t是Lamport time
Maekawa Algorithm
Ricart-Agrawala必须得到所有其他流程的许可才能进入CS。 Maekawa只要得到k(kn/2 )流程的许可就可以了。 确保一个process只投一票(只Reply一个process的request )就可以了
可以看到分布式系统算法中常用的Topology
1 )星形(中心) )
2 )环状
3 )网状(全部到全部) )。