我想知道计算机中的所有数据是否都必须经过处理器,或者是否存在任何旁路路由(例如直接接入) 是数据经过的地方。
考虑以下情况:
- 下载文件时:下载文件时,网络适配器接收的数据是直接进入 HDD(通过 RAM)还是必须在处理器中进行处理?
- 打开文件时: 例如,假设我打开了一个音频文件。那么音频文件是否需要处理器处理,还是其数据直接传送到音频设备?
- 在玩游戏时:图形处理器是否直接访问 RAM(或 HDD)还是必须从中央处理器(CPU)获取数据和指令?
我想知道当我们执行上述操作时数据所采用的路线。
答案1
我想知道计算机中的所有数据是否都必须经过处理器,或者是否有任何旁路路由(如 DMA)可以让数据通过
输入/输出 (I/O) 几乎总是在外围设备和内存之间进行。外围设备到外围设备的传输非常不常见,因为它需要专门的硬件,并且使错误检测/恢复更加困难。参见为什么驱动器之间的文件传输需要使用 RAM
I/O 可以由 CPU 执行,这称为程序控制 I/O (PIO),或者设备驱动程序 (SW) 可以将传输任务委托给 DMA 控制器或总线主控器(例如 SCSI 主机适配器)。请参阅https://stackoverflow.com/questions/25318145/dma-vs-interrupt-driven-io/38165400#38165400
- 下载文件时:下载文件时,网络适配器接收的数据是直接进入 HDD(通过 RAM)还是必须在处理器中进行处理?
网络适配器接收的以太网帧通常存储在主内存中(由 NIC 存储)。一些复杂的以太网控制器具有专用的 FIFO 内存。无论哪种情况,网络驱动程序 (SW) 都必须将每个接收到的帧复制到动态缓冲区,以供协议堆栈 (SW) 处理。
执行下载的应用程序在协议栈验证并剥离协议帧后读取数据(在另一个内存缓冲区中)。然后,该程序可以通过将数据写入文件系统中的文件来执行下载的后半部分。
有关低级文件系统操作的描述,请参阅为什么将相同数量的数据分布在许多单独的文件中进行复制会花费更长的时间?
有关磁盘操作的低级描述,请参阅当发生磁盘读取或磁盘写入时,数据会去哪里?
- 打开文件时:例如,假设我正在打开一个音频文件。那么音频文件是否需要处理器处理,还是其数据直接传送到音频设备?
音频文件必须被读入音频设备的内存中。执行传输的软件通常不需要“处理”这些数据。
- 玩游戏时:图形处理器是否直接访问 RAM(或 HDD)还是必须从中央处理器(CPU)获取数据和指令?
GPU 可以像 DMA 控制器一样访问主内存,但对于内存仲裁,它的优先级低于 CPU。GPU
将无法访问或控制 HDD 或帧缓冲区以外的任何外围设备。GPU
是通过其寄存器还是内存块获取命令取决于具体实现。
注意你的使用方式“CPU 确实……”。CPU
之所以“做某事”,是因为它正在执行的指令是一项特定任务。这些指令是程序的一部分。
识别该程序及其任务可能比简单地说程序和任务更有用。“CPU 确实……”。
答案2
对于情况 1 和 2,数据通过 CPU 传输。考虑以下情况:起重机无法将板条箱移上卡车或从卡车上移下,除非板条箱通过起重机。CPU 要写入某些内容,它会先在途中的某个地方读取数据。
第三种情况略有不同:在这种情况下,GPU 可以读取数据,因为它自己完成这项工作,但前提是 CPU 确保数据位于 GPU 可以访问的位置(例如纹理内存)。GPU 本身不直接访问磁盘。