Для сетевого ввода-вывода, зачем нам нужны инструкции по сборке, чтобы получить данные из регистра nic напрямую? Кажется, что вход и выход используются в коде прерывания.
сеть io картинка
При доступе к устройствам на языке ассемблера существует два основных способа подключения аппаратного устройства к ЦП: либо прямой ввод-вывод, либо отображение памяти (доступ к регистрам устройства осуществляется через определенные адреса памяти, и поэтому они выглядят как доступ к памяти ЦП). ). IN и OUT — инструкции для доступа к прямому вводу-выводу.





Вы похоже не поняли как работает процессор и шина:
As you knows network i/o is based on nic interrupt.
прерывать — это механизм, запускающий короткий программа всякий раз, когда аппаратное обеспечение (например, сетевая карта) запрашивает это у ЦП.
Прерывание только запускает эту короткую программу; больше ничего не делает. Он также не передает никаких данных.
Другой механизм, показанный на вашем изображении, — прямой доступ к памяти. Используя DMA, аппаратный компонент (например, сетевая карта) может напрямую считывать данные из ОЗУ или записывать данные в ОЗУ. Очевидно, что сетевая карта использует этот механизм для копирования сетевых данных в ОЗУ и для отправки данных, хранящихся в ОЗУ.
Однако, если мы хотим отправить данные в сеть, мы сначала должны сообщить сетевой карте, что есть данные для отправки, прежде чем сетевая карта сможет получить доступ к ОЗУ с помощью DMA. То же самое верно, когда мы хотим инициализировать сетевую карту.
Таким образом, используя только DMA, мы не можем сообщить сетевой карте, что есть данные для отправки. Инициализация сетевой карты при запуске компьютера также невозможна. Прерывания нам тоже не помогут, потому что прерывания инициируются сетевой картой, а не программным обеспечением. Нам нужен третий механизм для доступа к сетевой карте.
so why do we need assembly instructions in and out to get data from nic register directly?
При использовании процессоров x86 инструкции in и out используются для прямого чтения и записи данных на какой-либо аппаратный компонент.
Действительно, аппаратное обеспечение может быть подключено к ЦП так, чтобы к нему обращались так же, как к ОЗУ: например, с помощью инструкций mov. Таким образом осуществляется доступ к памяти видеокарты. Существуют также ЦП (например, ЦП ARM, которые распространены в сотовых телефонах), которые обращаются ко всему оборудованию так же, как к ОЗУ. (У таких процессоров нет инструкций in или out.)
Однако в компьютерах, совместимых с ПК, оборудование обычно подключается таким образом, что доступ к нему должен осуществляться с помощью инструкций in и out.
Многие современные аппаратные средства имеют регистры ввода-вывода в адресном пространстве физической памяти, а не в отдельном пространстве ввода-вывода, к которому осуществляется доступ. in/out хотя бы частично сериализуются, поэтому их производительность ниже, чем у MMIO.
Если термин «DMA» используется для обозначения классического интерфейса DMA ПК, такого как Интел 8237, он использует интерфейс порта (вход/выход) для стороны устройства при чтении или записи из оперативной памяти. В случае устройства Bus Mastering интерфейс на стороне устройства будет уникальным для поставщика.
@rcgldr, «DMA» обычно используется для обозначения любого устройства, обращающегося к основной памяти, а не только так называемого «механизма DMA». Итак, сетевые карты, запоминающие устройства, графические устройства, USB-контроллеры и т. д. — все они работают с использованием прямого доступа к памяти.
INиOUTпредназначены для ввода-вывода аппаратного уровня на сопоставленные устройства.