DMA与PIO模式
   
  计算机对外部设备的数据访问模式分两种:DMA和PIO。
   
  DMA(Direct Memory Access),直接内存访问,在该模式下,数据传送不是由CPU负责处理,而是由一个特殊的处理器-DMA控制器-来完成,因此占用极少的CPU资源。
   
  PIO(Programmed Input-Output),可编程输入输出,在该模式下,数据传送由CPU执行I/O端口指令来按照字节或更大的数据单位来处理,占用大量的CPU资源,数据传输速度也大大低于DMA模式。举例老说,在DMA方式下,如果copy文件的同时在播放mp3音乐,则不受丝毫影响;如果在PIO模式下,则会发现音乐声时断时续,这是因为大部分CPU资源被文件传输占用。
   
  所以,总的来说,使用DMA模式时,计算机的运行速度会比使用PIO模式快很多。
   
  查看外部数据存储设备的当前传送模式的方法为,打开“设备管理器>>IDE ATA/ATAPI控制器>>主要IDE通道”或者"次要IDE通道"的属性页,在“高级设置”一页中就可以看到。一般情况下,主要IDE通道对应的是主硬盘,次要IDE通道对应的是光驱。
   
  早期的Windows98系统中,要打开DMA模式需要安装相应的主板驱动程序,如Intel Application Accelerator或VIA 4in1。而在WindowsXP系统中,访问存储器的默认数据传送方式就是DMA,但有时候会发现突然变成了PIO模式。这是因为Windows IDE/ATAPI端口驱动程序Atapi.sys累积发生了6次超时或循环冗余检验 (CRC) 错误后,会自动把IDE通道的传送模式降为速度更慢的模式,即从高级别的DMA模式降为低级别的DMA模式,直到最终降为最慢的PIO模式。
   
  恢复DMA模式的最简单方法是在“设备管理器”中卸载已经变为PIO模式的IDE通道,然后重新启动计算机后,系统会重新安装刚刚卸载的IDE通道,安装完毕后其传送模式就恢复到DMA模式了。不过上次我用这个方法后,在重新安装IDE通道时出错,提示设备不适用于平台之类的信息。经查是因为安装了daemon tool虚拟光驱软件的原因,卸载后一切正常。
  
  另一种恢复DMA模式的方法是修改注册表。运行regedit打开注册表编辑器,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318},该键有0000,0001,0002等子键,通常0001代表主要IDE通道,0002代表次要IDE通道,可通过检查该子键中的DriverDesc一项的值是“主要IDE通道”还是“次要IDE通道”来确认。不过我的注册表中还有0003,0004,不知道咋回事……假如要恢复主要IDE通道的DMA模式,则删除0001子键的MasterIdDataChecksum或者SlaveIdDataChecksum一项,这取决与该设备是Master还是Slave,搞不清也没有关系,这两项只要看到就删除即可。之后重新启动系统即可。
   
  恢复DMA模式后,如果读取硬盘或光盘发生的错误累积6次后,设备又会变为PIO模式。为了降低这种情况的发生几率,可在上面提到的0001和0002子键中新建DWORD值,名称为ResetErrorCountersOnSuccess,值设定为1。加入这一项后,Windows只会在连续发生6次磁盘访问错误后才会降低传送模式,而不是累积6次错误。这就在一定程度上降低了设备变为PIO模式的几率。