无死锁分组交换
在计算机网络中,死锁是最严重的系统故障。死锁是指数据包卡在循环中并且无论执行何种移动顺序都无法到达目的地的情况。必须观察死锁并小心处理以避免系统故障。
我们今天拥有的大多数网络都是数据包交换网络,其中消息被分成数据包,数据包从源路由到目标。
存储转发死锁:
这是广泛讨论的死锁,其中中间节点可能会接收来自不同目的地的数据包,并且它们必须将这些数据包存储在其本地缓冲区中并根据其路由表将它们转发到下一个节点,因为本地缓冲区的大小是有限的出现死锁。
示例: a,b,cd 是四个节点,所有节点的缓冲区大小为 4。假设节点'a'通过'b'向'd'发送数据包,节点'd'也向'a'发送数据包通过'c'
解决方案:现在,要到达节点“d”,来自“b”的所有数据包都必须传输到“c”,类似地,要到达“a”,来自“c”的所有节点都必须到达“b”,但没有一个节点有一个空的缓冲区。
解决存储和转发死锁的假设:
解决该问题的一些假设如下:
模型: 网络是一个图 G =(V, E),V 是处理器的集合,E 是通信链路的集合。每个节点有 B 个缓冲区,k 是 G 中数据包经过的最长路由的长度
动作:我们将分布式计算视为一组动作,即;环境中发生了某些事情,节点对此做出反应。
- 生成:创建或接收新数据包“p”的节点。已知该节点是数据包的来源。
- 转发:数据包被转发到在其路由上具有空缓冲区的新节点。
- 消耗:当数据包到达目的地时,它将从缓冲区中删除。
分组交换要求:
- 一种控制器算法,允许在网络中进行各种移动。
- 始终允许使用数据包(在其目的地)。
- 始终允许在所有缓冲区为空的节点中生成数据包。
- 控制器仅使用本地信息
- 如果控制器保护网络免受死锁,则称该控制器是无死锁的
存储转发死锁的解决方案:
为了解决这个死锁,我们有两种解决方案:
- 结构化缓冲池
- 非结构化缓冲池
结构化缓冲池:
使用结构化缓冲池的方法将为节点和数据包识别特定缓冲区,如果生成或接收数据包,则必须使用该缓冲区。如果此缓冲区被占用,则无法接受该数据包。
1.缓冲区图(BG):它是解决死锁的结构化解决方案,它是在网络中的缓冲区上定义的虚拟有向图,使得,
- Buffer Graph(BG) 没有有向环,即;它是无环的。
- 对于每条 Routing 路径,缓冲区图中都必须有一条路径
[注意:数据包移动的路径由路由算法确定,缓冲区管理策略是设置数据包将存储在下一个节点的哪个缓冲区。 ]
2.缓冲区图控制器:
- 仅当节点中存在空缓冲区时才允许生成数据包。
- 仅当下一个节点中存在空缓冲区时才允许转发数据包。
通过这组规则,可以防止死锁并保护数据包丢失。
缺点:存储缓冲区的使用有限。
非结构化缓冲池:
在使用非结构化缓冲池的方法中,所有缓冲区都是相等的;该方法仅规定是否可以接受数据包,但不确定必须将其放置在哪个缓冲区中。
1. Forward-count Controller(FC):这是一个非结构化的解决方案,对于一个数据包 p,设 s p是到达目的地的跳数, fu是节点中的缓冲区数,然后控制器接受数据包p 如果 s p < f u 。
如果 B 表示节点中的最大空闲缓冲区数,k 表示到达目的地的最大跳数,则 B>K 始终确保无死锁状态。
综上所述,我们可以说 Forward count 控制器是一个无死锁控制器。
2. 转发状态控制器(FS):它在接收端获取有关数据包的更多信息。在这种情况下,如果空缓冲区 b 的数量小于数据包到达目的地的路径,那么我们将转发状态控制器作为无死锁控制器。
3. 反向计数控制器(BC):它是转发计数控制器的一种变体,一个数据包已经从源节点移动到目标节点,只有在最多有一些非空缓冲区时,它才应该被目标节点接受,即;对于一个数据包 p,设 t p是它从它的源进行的跳数,然后如果 t p > kf u,控制器在节点中接受数据包 p。
通过在网络中应用这一点,可以防止死锁,因此向后计数控制器被称为无死锁控制器。
4. 后向状态控制器(BS):与前向状态控制器类似,在后向状态控制器中,我们可以使用有关接收节点中数据包的更多信息。
FC、BC、FS、BS之间的关系:
- FC ⊂ FS,即
- BC ⊂ BS
- BC⊂FC
- BS ⊂ FS
其他一些死锁是:
1. 当网络中的一个包 p 可以创建另一个包 q 时,可能会出现后代死锁,这违反了网络总是允许转发和消费一个包的假设。通过具有多个级别的缓冲区图可以避免后代死锁
2. 当源保持数据包的副本直到从目标接收到数据包的(端到端)确认时,可能会出现复制释放死锁。缓冲区图原理的两个扩展可以避免复制释放死锁。
3. 起搏僵局 当网络包含具有有限内部存储的节点时,可能会出现这种情况,这些节点可能会拒绝使用消息,直到生成了一些其他消息。通过区分可和平的数据包和起搏响应,可以避免起搏死锁。
4. 重组死锁可能出现在网络中,大消息被分成较小的数据包进行传输,直到消息的所有数据包都到达目的地后才能将数据包从网络中删除。通过使用单独的缓冲区组进行数据包转发和重组,可以避免重组死锁。