PCIe
总线的通信机制
在介绍事务层之前,首先简单地了解一下
PCIe
总线的通信机制。假设某
个设备要对另一个设备进行读取数据的操作,首先这个设备(称之为
Requester
)需要向另一个设备发送一个
Request
,然后另一个设备(称之为
Completer
)通过
Completion
Packet
返回数据或者错误信息。在
PCIe
Spec
中,规定了四种类型的请求(
Request
):
Memory
、
IO
、
Configuration
和
Messages
。其中,前三种都是从
PCI/PCI-X
总线中继承过来的,第四种
Messages
是
PCIe
新增加的类型。
详细的信息如下表所示:
从表中我们可以发现,只有
Memory
Write
和
Message
是
Posted
类型的,
其他的都是
Non-Posted
类型的。所谓
Non-posted
,就是
Requester
发送了一
个包含
Request
的包之后,必须要得到一个包含
Completion
的包的应答,这
次传输才算结束,否则会进行等待。所谓
Posted
,就是
Requester
的请求并不
需要
Completer
通过发送包含
Completion
的包进行应答,当然也就不需要进
行等待了。很显然,
Posted
类型的操作对总线的利用率(效率)要远高于
Non-Posted
型。
那幺为什幺要分为
Non-Posted
和
Posted
两种类型呢?对于
Memory Writes