📜  I O程序控制的传输与DMA传输(1)

📅  最后修改于: 2023-12-03 15:15:46.116000             🧑  作者: Mango

I/O程序控制的传输与DMA传输
什么是I/O程序控制的传输?

I/O程序控制的传输是指,CPU通过程序控制向设备发出I/O操作请求,设备响应请求,然后进行数据的读写操作。在这种方式中,CPU需要不停地向设备发送I/O操作请求,设备响应请求,一次数据传输需要多次I/O操作请求,CPU需要花费大量的时间在这种操作上。这种传输方式有点像人手工操作数据,效率低下。

什么是DMA传输?

DMA(Direct Memory Access,直接存储器访问)传输是指,CPU通过DMA控制器向设备发出I/O操作请求,DMA控制器独立操作进行数据的读写。在这种方式中,DMA控制器负责数据传输的所有操作,CPU只需要发送一次I/O操作请求,就可以让DMA控制器独立进行数据传输操作。这种传输方式就像是由机器自动操作数据,效率大大提高。

DMA传输与I/O程序控制的传输比较

DMA传输与I/O程序控制的传输相比,有以下优势:

  • 传输速度快:DMA控制器可以独立进行数据传输操作,不需要CPU参与,传输速度大大提高。
  • CPU占用率低:DMA控制器可以独立进行数据传输操作,CPU可以把时间用于其他操作,降低CPU占用率。
  • 具有流控制能力:DMA控制器可以对数据传输进行流控制,确保数据传输的可靠性。

示例代码:

//I/O程序控制的传输
void requestData(){
  while(!device.isReady()){
    //等待设备就绪
  }
  device.sendRequest();
  while(!device.isDataReady()){
    //等待数据到达
  }
  data = device.receiveData();
}

//DMA传输
void requestData(){
  //设置DMA传输控制器
  dmaController.setTransferMode(TRANSFER_MODE_READ);
  dmaController.setSourceAddress(device.getDataAddress());
  dmaController.setDestinationAddress(memory.getDataAddress());
  dmaController.setTransferLength(DATA_LENGTH);

  //启动DMA传输
  dmaController.startTransfer();

  //等待DMA传输完成
  while(!dmaController.isTransferComplete()){
    //等待DMA传输完成
  }
}

以上是针对I/O程序控制的传输与DMA传输的介绍,希望能对程序员有所帮助。