轮询调度(Round Robin)

轮询调度(Round Robin)
最新回答
哥寂寞与世无争

2022-08-22 15:59:00

轮询调度(Round Robin)是一种保证所有请求者(requestor)获得平等优先级的调度算法

一、定义与原理

轮询调度在实际优先级仲裁模块中应用广泛。与固定优先级的仲裁算法不同,轮询仲裁考虑到了公平性,确保所有的请求者可以获得平等的访问机会。其原理是,当一个请求者得到了许可(grant)之后,它的优先级在接下来的仲裁周期中就会变为最低。这样,每个请求者的优先级不是固定的,而是会根据其是否被许可而动态调整。当一个请求者获得许可后,它的优先级会降至最低,而其他请求者的优先级会相应提升,从而确保在下一个仲裁周期中,其他请求者有机会获得许可。

二、工作机制
  1. 优先级动态调整

    在轮询调度中,每个请求者的优先级会根据其是否被许可而动态变化。

    当一个请求者获得许可后,它的优先级会降至最低,以确保其他请求者有机会获得许可。

  2. 许可分配

    在每个仲裁周期中,根据当前的优先级和请求情况,轮询调度算法会依次给每个请求者分配许可。

    即使之前高优先级的请求者再次有新的请求,也会等待前面的请求者都获得许可之后再轮到它。

  3. 公平性保证

    轮询调度算法通过动态调整优先级和依次分配许可,确保了所有请求者都能获得平等的访问机会。

    这样,当有多个请求者同时访问时,不会出现某个请求者被连续许可的情况,而是这些请求者在后续几个仲裁周期中都会依次获得许可。

三、示例说明

以4个请求者(req[3:0])为例,假设初始状态下req[0]的优先级最高,req[1]其次,req[3]最低。下面通过表格来展示轮询调度的工作过程:

| Cycle | Req[3:0] | RR Priority | RR Grant[3:0] | Fixed Grant || --- | --- | --- | --- | --- || 0 | 0101 | 3210 | 0001 | 0001 || 1 | 0100 | 2103 | 0010 | 0001 || 2 | 0011 | 0321 | 0100 | 0010 || 3 | 0010 | 2103 | 0010 | 0100 || 4 | 1000 | 1032 | 1000 | 0001 |

  • 在Cycle 0中,req[0]的优先级最高,因此获得了许可(grant=0001)。
  • 在Cycle 1中,由于req[0]在上一个周期已经获得了许可,因此它的优先级降至最低(3),而req[1]的优先级升至最高(2)。此时req[2]有请求且优先级最高(在剩余未获得许可的请求者中),因此获得了许可(grant=0010)。
  • 在后续的周期中,轮询调度算法继续按照上述原则依次给每个请求者分配许可。
四、总结

轮询调度算法通过动态调整优先级和依次分配许可,确保了所有请求者都能获得平等的访问机会。这种算法在实际应用中具有广泛的适用性,特别是在需要保证公平性的场景中。通过轮询调度算法,可以避免某个请求者被连续许可的情况,从而提高了系统的整体性能和公平性。