了解网络I/O请求和存储

问题描述 投票:0回答:1

我了解到,为了读取文件,CPU 会向硬盘发出 I/O 请求,其他硬件组件将处理该请求,并且 CPU 可以自由地处理其他命令。

我的问题是,在 CPU 向端点发送 get 请求后,操作系统底层会发生什么。做完后的例子

curl example.com

CPU 会向硬盘或其他存储设备发出 I/O 请求吗?某些硬件是否会尝试监听网络层传输的字节并将其存储在某个地方?

谢谢

networking cpu
1个回答
0
投票

真正的答案是“这取决于硬件”,但通常不会有一种自动方式将字节直接从网卡传输到硬盘。

“Curl”是一个非常复杂的程序,如果我们讨论 CPU 做什么或不做什么的话。我们必须查看它正在执行的底层操作才能看到 CPU 的活动。

假设一些字节从网络到达您的网络接口卡 (NIC)。如果您有便宜的卡,您的 CPU 可能必须直接从 NIC 请求字节,然后将它们写入内存。但是,某些 NIC 支持所谓的直接内存访问 (DMA)。 DMA 允许 NIC 和硬盘驱动器等硬件直接访问系统内存。如果您的 NIC 支持 DMA,并且软件利用了它,那么 NIC 可以将数据包中的所有字节写入内存中的“缓冲区”,然后简单地向 CPU 发出信号,表明整个数据包已准备好处理。

硬盘驱动器可能会出现相反的情况。如果没有 DMA,CPU 将不得不从该缓冲区复制字节,一次复制一个字节,然后将它们发送到硬盘驱动器。如果支持 DMA,它可以简单地指示硬盘将缓冲区中的所有字节存储到磁盘上。

因此,如果两个盒子都启用了 DMA,CPU 就不必读取和写入缓冲区中的所有字节。它只需要协调传输。

理论上,NIC 可以在不使用任何 CPU 的情况下将字节传输到磁盘,但事实证明这并没有那么有用。它要求 NIC 和硬盘驱动器就如何通信的许多细节达成一致。 标准化很难,而且成本高昂。而且引导流量确实不需要太多 CPU 工作。因此,我们通常将自己限制在 DMA 上,即设备可以读取/写入内存中的缓冲区,而 CPU 一次一步地告诉每个人该去哪里。

© www.soinside.com 2019 - 2024. All rights reserved.