Конечно, принятый ответ является точным, но, возможно, DrStrangeLove намеревался обратиться к чему-то другому или, по крайней мере, к этому вопросу относятся другие ответы.На самом деле, когда кто-то спрашивает: «Как периферия взаимодействует с процессором на аппаратном уровне?», Я думаю, что в ответе должна быть упомянута роль модулей ввода / вывода (например, адаптеров ввода / вывода, о которых все знают).Это важно подчеркнуть, потому что часть логики, требуемой для взаимодействия с устройствами ввода-вывода, встроена в модули ввода-вывода, что уменьшает потребность во внимании ЦП при выполнении операций ввода-вывода.Это звучит актуально для меня в контексте вопроса, потому что он спрашивает об аппаратных аспектах операций ввода-вывода, а адаптеры представляют собой аппаратные компоненты, которые абстрагируют сущности устройств ввода-вывода, скрывая их сложности от ЦП (ииз ОС тоже).Например, дисковые адаптеры скрывают аспекты геометрии дисков, освобождая CPU от запуска логики, необходимой для вращения пластин дисков, определения местоположения цилиндра и ожидания прохождения правильного сектора под головками чтения / записи.Аналогичные рассуждения применимы к другим устройствам, таким как видеоадаптеры, сетевые карты и так далее.Короче говоря, без модулей ввода / вывода задачи ввода / вывода будут перегружать процессор.Процитируем Stallings:
Функциональный модуль ввода / вывода позволяет процессору простым и понятным способом просматривать широкий спектр устройств.Существует целый ряд возможностей, которые могут быть предоставлены.Модуль ввода / вывода может скрывать детали синхронизации, форматов и электромеханики внешнего устройства, чтобы процессор мог функционировать с точки зрения простых команд чтения и записи и, возможно, команд открытия и закрытия файла.В своей простейшей форме модуль ввода / вывода может по-прежнему оставлять большую часть работы по управлению устройством (например, перематывать ленту) видимой для процессора.Модуль ввода / вывода, который берет на себя большую часть подробной обработки, представляя высокоуровневый интерфейс процессору, обычно называют каналом ввода / вывода или процессором ввода / вывода.Модуль ввода / вывода, который является довольно примитивным и требует детального управления, обычно называется контроллером ввода / вывода или контроллером устройства.Контроллеры ввода / вывода обычно видны на микрокомпьютерах, тогда как каналы ввода / вывода используются на мэйнфреймах.
Кроме того, как правильно сказал Джон Рипли, существует пространство ввода / вывода, которое отображается в том же самоммода как оперативка есть.Действительно, периферийные устройства могут быть подключены непосредственно в адресное пространство памяти (которое известно как MMIO , Memory Mapped I / O) или в отдельное адресное пространство ( PMIO , Port-Mapped I / O, который также называется «изолированным I / O», потому что, в отличие от MMIO, адреса ввода-вывода полностью отделены от адресов оперативной памяти компьютера. Вот почему выДля связи с устройствами, использующими PMIO, необходимо использовать инструкции in и out .
В соответствии с вышеизложенным, MMIO и PMIO рассматривают устройства ввода-вывода как позиции памяти - в этом суть того, как аппаратное обеспечение обрабатывает операции ввода-вывода, но здесь необходимо упомянуть некоторые дополнительные подробности, чтобы получить богатую концептуальную основу нагрузка, вовлеченная в ввод / вывод. Поскольку каждый адаптер имеет ограниченный диапазон адресов, мы должны понимать, что такие позиции памяти работают как буферы данных, что означает, что у вас есть только несколько байтов («блоков данных») для одновременной связи с устройством. По этой причине обычно CPU не использует данные, которые он считывает непосредственно из этих позиций памяти: сначала данные считываются с устройства ввода-вывода по соответствующему адресу, затем эти данные сохраняются в ОЗУ и только тогда процессор может использовать его. Чтобы получить это, подумайте в большом двоичном файле, который должен выполнить процессор: у адаптера диска есть ограниченный буфер, ограниченный его адресным пространством ввода / вывода (обратите внимание, я не имею в виду внутренние буферы адаптера, но его адресное пространство, видимое ЦП), поэтому адаптер считывает некоторые данные с диска и предупреждает ЦП, когда буфер заполняется через прерывание; затем процессор прерывает все, что он делает, читает буфер, копирует содержимое буфера в ОЗУ и сигнализирует адаптеру, что он может продолжать выводить больше данных с диска. Этот цикл повторяется до тех пор, пока двоичный файл не будет полностью загружен в ОЗУ. С этого момента операция чтения объявляется завершенной, и файл может быть наконец выполнен.
Этот цикл называется ввод-вывод, управляемый прерываниями , и происходит полностью аппаратно (с некоторой поддержкой ОС для обработки прерываний), но, пожалуйста, обратите внимание, что есть еще две опции для выполнения ввода-вывода операции. Также возможно использовать так называемый PIO (программируемый ввод / вывод), где вместо использования механизма прерывания ЦП непрерывно объединяет контроллер в цикле, пока не будет собрана вся необходимая информация, блок за блоком (когда последний блок извлекается, цикл заканчивается). И ввод-вывод, управляемый прерываниями, и PIO тратят впустую процессорное время (особенно последнее) и давно были заменены прямым доступом к памяти (DMA), который позволяет устройству ввода-вывода записывать (или читать) свои данные непосредственно (или из) ОЗУ в соответствии с инструкциями процессора. Я считаю, что PIO полностью реализован в программном обеспечении из-за его пула, но я могу ошибаться на этом этапе. Я должен отметить, что, хотя DMA сделал PIO и управляемый прерываниями ввод / вывод устаревшими, я не уверен, что оба были запрещены в современных архитектурах.