PDNS的同步机制
PDNS与NS2一样都是采用离散事件驱动的。一般来说,同步机制有保守与乐观之分。PDNS采用的是保守机制,即只有“安全”的事件才执行。所谓安全的事件是指处理器不会收到比该事件发来的时间戳更小的事件了,否则是不安全的。如果处理器始终收不到安全的事件,那么其会处于阻塞状态。极端情况下,所有的处理器都处于阻塞状态,会导致死锁。
PDNS使用空消息协议实现同步机制。该协议中,每个事件要发送给一个处理器的时候,必须发送一条消息给这个处理器,发送方按照时间戳递增的顺序发送且假设发送消息不会丢失。处理器收到的消息是FIFO的储存在队列中,知道被处理。每条链路上都有一个链接时钟(Link Clock),用于记录最后发送的消息的时间戳。随着消息的不断发送,改时间戳是不断递增的,同时,该时间戳也给出了今后发送的消息的最小时间。
为了避免死锁,空消息协议中,使用了一个特殊的消息:Null Message。它并不代表真正的事件,只是用来避免死锁的发生。处理器,在执行完一个事件后,会向每个与之相连的处理器发送一条空消息。例如处理器A在处理完一个事件后,向处理器B发送了一条时间戳为 的空消息,通过该消息A可以向B保证不再发送时间戳小于 的事件,这样以后B可以根据A发来的事件的时间戳是否小于 来判断事件是否“安全”。
事件的时间戳是如何确定的呢?每一个链接时钟(Link Clock)规定了该链接的缓存中,下一个将发送的事件的时间戳的下限。Lookahead时间为L是指如果执行完一个事件后的链接时钟(Link Clock)为 T,那么发送的空消息时间戳为 T=T +L,即L是用来计算时间戳的。
PDNS定义了一个新的事件调度机制RTI Scheduler。他利用RTIKit的时间管理功能,可以保证处理器只执行“安全”的事件。利用RTIKit的组通信功能(MCAST),使一个处理器可以调度一个时间到另一个处理器上,并发送完整的事件消息。
PDNS的同步机制
最新推荐文章于 2023-11-14 15:50:22 发布