【摘要】:生产/消费者模型在PCI/PCIe总线中得到了充分的应用。其中消费者与数据缓冲在同一条PCI总线上,而Flag位、Status位和生产者在另外一条PCI总线上。图11-1 生产消费者模型的实例PCI桥的存在为生产/消费者模型在PCI体系结构中的实现带来了新的挑战,PCI桥可以缓存一些报文,因此来自PCI设备的报文并不能立即到达目的地。本书建议读者改变图11-1中生产者、消费者、Flag和Status位的位置,按照第11.3节提供的规则,验证生产/消费者协议在PCI总线中的正确性。
生产/消费者模型在PCI/PCIe总线中得到了充分的应用。两个PCI主设备之间进行数据传送,或者PCI主设备进行DMA操作时需要使用该模型。PCI总线规定,PCI设备必须按照生产/消费者模型提供的规则访问存储器或者I/O资源。采用该模型对于PCI设备访问存储器或者I/O资源时避免死锁和保证数据完整性至关重要。PCI/PCIe总线规定了数据访问的顺序,本章在第11.3和第11.4节将讲述这些内容。
下文以两个PCI主设备进行数据交换说明生产/消费者模型的实现机制,假设这两个PCI主设备在进行数据交换时使用一个数据缓冲和Flag和Status这两个状态位。
在PCI总线中,数据传送只要遵循合理的顺序,无论生产者、消费者在哪一级PCI总线上,数据缓冲和Flag、Status状态位在处理器系统的什么位置,都能准确无误地发送和接收数据,保证生产/消费者模型的正确运转。
下面以图11-1为例,进一步说明在PCI总线中,生产/消费者模型的运转过程。其中消费者与数据缓冲在同一条PCI总线上,而Flag位、Status位和生产者在另外一条PCI总线上。这两条PCI总线之间通过一个PCI桥进行连接。在这种处理器系统中,生产/消费者模型的详细运转过程见表11-3。

图11-1 生产消费者模型的实例
PCI桥的存在为生产/消费者模型在PCI体系结构中的实现带来了新的挑战,PCI桥可以缓存一些报文,因此来自PCI设备的报文并不能立即到达目的地。其中Flag和Status位的初始值为0。
表11-3 基于PCI总线的生产/消费者模型的详细描述(www.chuimin.cn)

(续)

由以上过程可以发现,由于PCI桥的存在数据并不能立即到达目的地,因此有可能造成总线死锁和数据不完整等一系列问题,最终导致生产/消费者模型不能在PCI总线上正确运行。为了解决这个问题,PCI总线规定了一系列与数据传送“序”有关的规则。
如果PCI设备不满足这个“序”的要求,就有可能出现数据完整性的问题,从而导致数据传送失败。如果读者有机会设计基于PCI/PCIe总线的设备,需要认真考虑这个序的问题。值得注意的是,PCIe总线的序与PCI总线的序略有区别,在第11.4节将详细讨论PCIe总线的序。
在PCI/PCIe总线中,使用Posted总线请求比Non-Posted总线请求传送数据的延时更短。因此在一个具体的实现中,如果Status位距离生产者的路径较近时,轮询该位的代价较低;同理Flag位距离消费者的路径较近时,轮询该位的代价也较低。
值得注意的是,在PCI体系结构中,无论生产者、消费者、Flag和Status位在处理器系统的哪级PCI总线中,生产/消费者模型都可以正常运行,为此PCI总线详细规定了数据传送的顺序,PCI总线的“序”对于理解PCI体系结构至关重要,读者需要重视这部分内容。本书建议读者改变图11-1中生产者、消费者、Flag和Status位的位置,按照第11.3节提供的规则,验证生产/消费者协议在PCI总线中的正确性。
相关推荐