fread 是否需要处理能力/与 DMA 一起工作?
假设文件所在的设备支持 DMA 吗?
是的,它确实。但是当您在 Linux 中使用“time”命令时,它会显示为“系统”时间。
基本上,您进行系统调用,告诉操作系统要读取什么数据以及将其放在哪里,然后操作系统(这里是 CPU 周期)设置缓冲区并告诉 DMA 将数据放在哪里。您的进程被阻止,并且操作系统选择了一个新进程来运行,但这并没有真正计入您的 fread 调用。最终,读取完成,并且 DMA 系统向处理器发出中断(更多的 CPU 周期即将到来),此时操作系统看到哪些数据已准备好返回到您的程序(并将您的线程放在就绪队列中 - 结束CPU 时间)。
使用 DMA 还是 nt 与您使用哪个 C 库调用来读取文件无关。通常,如果没有管理员权限,您无论如何都无法影响它。
编辑:
系统是否使用 DMA 访问设备并不取决于您是否使用 scanf、fread、read 或任何其他文件访问功能。这取决于设备驱动程序设置,普通用户无法更改。
就与设备通信所花费的时间而言,几乎所有时间都将由您的进程的系统计时器计算(如上述答案),而一小部分根本不会计算在内。