Highlighted
zhouzengchao
3 Cadmium

【分享】Programmed input/output

     Programmed input/output (PIO) 是一种在CPU和【外围设备】之间传输数据的方法,例如网络适配器或ATA存储设备。

     一般来说,PIO是当运行在CPU上的软件通过【指令】访问I【I/O地址空间】向一个设备传输或接收数据时发生的,这与Direct Memory Access传输方式正好相反。 一个已知使用PIOPC设备用例是【ATA接口】,虽然ATA也可以运行在任何一种DMA模式下。PC上的许多老旧设备也使用PIO,包括遗留的串行端口、遗留的并行端口(non ECP模式)、PS/S键盘和鼠标端口、遗留的MIDI和操纵杆端口、以及陈旧的网络接口。

     PIO接口被分组为不同的模式,对应不同的传输速率,不同模式之间的电信号是相似的 - 差别仅在事务之间的cycle time的减少以实现更高的传输速率。所有的ATA设备支持最慢的模式 - Mode 0。通过访问ATA驱动器的信息寄存器(Mode 0),CPU能够确定设备的最大传输速率并配置ATA控制器以达到最优性能。

PIO.jpg

     实际上,在DMA出现之前,PIO是唯一可用的方式。PIO模式需要极大的CPU开销来配置数据事务并传输数据。正是由于这种低效性,才出现了DMA接口来增加性能。不过由于实现PIO传输的数字逻辑十分简单,所以一致沿用至今,特别是对传输率要求不高的环境,比如嵌入式系统,或通过FPGA芯片极大降低PIO模式的性能损失。

标签 (1)
标记 (2)
0 项奖励
2 条回复2
zhuzhu281306
3 Silver

Re: 【分享】Programmed input/output

商用环境中一般都用DMA了,呵呵

0 项奖励
zhouzengchao
3 Cadmium

Re: 【分享】Programmed input/output

还是看设计需求,DMA毕竟需要额外的控制逻辑,相对复杂,对于一些简单的设备又需要控制成本的话,PIO还是优先选择。