答案 0 :(得分:2)
您似乎还不了解CPU和总线的工作方式:
您知道网络I / O是基于nic中断的。
中断是一种机制,只要硬件(例如网卡)请求CPU这样做,它就会启动短的程序。
一个中断只会启动这个简短的程序。它什么也没做。它还不会传输任何类型的数据。
图像上显示的另一种机制是 DMA 。使用DMA,硬件组件(例如网卡)可以直接从RAM读取数据或将数据写入RAM。显然,网卡使用此机制将网络数据复制到RAM并发送存储在RAM中的数据。
但是,如果要向网络发送数据,首先必须告诉网卡,在网卡可以使用DMA访问RAM之前,根本有数据要发送。当我们要初始化网卡时,也是如此。
因此,仅使用DMA,我们无法告诉网卡有要发送的数据。启动计算机时也无法初始化网卡。中断也不会帮助我们,因为中断是由网卡而不是软件启动的。我们需要第三种机制来访问网卡。
那么为什么我们需要输入和输出汇编指令才能直接从nic寄存器获取数据?
使用x86 CPU时,in
和out
指令用于直接向某些硬件组件读取和写入数据。
可以按照访问RAM的相同方式将独立的硬件连接到CPU:例如,使用mov
指令。可以通过这种方式访问图形卡的内存。还有一些CPU(如手机中常见的ARM CPU)以与访问RAM相同的方式访问所有硬件。 (这类CPU没有in
或out
指令。)
但是,在与PC兼容的计算机中,通常必须使用in
和out
指令来访问硬件。