📅  最后修改于: 2023-12-03 15:15:46.116000             🧑  作者: Mango
I/O程序控制的传输是指,CPU通过程序控制向设备发出I/O操作请求,设备响应请求,然后进行数据的读写操作。在这种方式中,CPU需要不停地向设备发送I/O操作请求,设备响应请求,一次数据传输需要多次I/O操作请求,CPU需要花费大量的时间在这种操作上。这种传输方式有点像人手工操作数据,效率低下。
DMA(Direct Memory Access,直接存储器访问)传输是指,CPU通过DMA控制器向设备发出I/O操作请求,DMA控制器独立操作进行数据的读写。在这种方式中,DMA控制器负责数据传输的所有操作,CPU只需要发送一次I/O操作请求,就可以让DMA控制器独立进行数据传输操作。这种传输方式就像是由机器自动操作数据,效率大大提高。
DMA传输与I/O程序控制的传输相比,有以下优势:
示例代码:
//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传输的介绍,希望能对程序员有所帮助。