Прямой доступ к памяти
В информатике DMA ( Direct Memory Access , « прямой доступ к памяти ») компьютера — это механизм, который позволяет другим подсистемам, таким как периферийные устройства , напрямую обращаться к внутренней памяти для обмена данными при чтении и/или записи, без с участием блока управления (ЦП) для каждого переданного байта через обычный механизм прерывания и последующего запроса на желаемую операцию, но путем генерации одного прерывания на каждый переданный блок. [1] [2]
Описание
Таким образом, DMA через контроллер прямого доступа (DMAC) выполняет задачу управления данными, проходящим через шину , позволяя периферийным устройствам, работающим на разных скоростях, обмениваться данными, не подвергая ЦП огромной нагрузке прерываний , которая постоянно прерывала бы соответствующую обработку . цикл .
DMA используется многими аппаратными системами, такими как контроллеры дисководов , видеокарты , сетевые карты и звуковые карты .
По сути, при передаче DMA блок памяти копируется с одного устройства на другое. Отсоединение шины данных от процессора для передачи ее под управление DMA, который последний использует для передачи данных между двумя периферийными устройствами, происходит через переключатели шины по запросу DMAC. Процессор просто инициирует передачу, освобождая шину данных, в то время как фактическая передача выполняется контроллером прямого доступа к памяти (DMAC). Типичным случаем является перемещение блока памяти с внешнего накопителя в основную память . Если эта операция, как это происходит благодаря DMA, не блокирует процессор, он может продолжать выполнять другие операции.
DMA управляет передачей данных между ЦП и периферийными устройствами с помощью различных линий (подтверждение, запрос, управление) и двух регистров DC (счетчик данных) и IOAR (регистр входного/выходного адреса) . Когда процессору нужны данные, находящиеся в памяти, он загружает адрес, с которого следует начать операцию, в IOAR и количество последовательных данных для обработки в DC, информируя DMA о дополнительном бите, если это операция чтения или записи. В этот момент DMA отправляет запрос на периферийное устройство и, получив сигнал подтверждения, начинает передачу. На каждом шаге IOAR увеличивается, а DC уменьшается до тех пор, пока DC не станет равным 0.
Передача между DMA и вводом-выводом может происходить несколькими способами:
- Пакетная передача : как только передача началась, DMA поддерживает контроль над шиной за счет ЦП до тех пор, пока она не будет прекращена: доступ к шине со стороны ЦП остается запрещенным на протяжении всей передачи. Это предполагает, что устройство и память обеспечивают настолько быструю и надежную передачу, насколько это необходимо контроллеру прямого доступа к памяти;
- Перехват цикла : DMA выполняет передачу слова только один полный цикл за раз (т. е. для каждого цикла он взаимодействует с периферийным устройством и выполняет передачу, только если оно готово, другими словами, выполняя квитирование). В результате время, в течение которого процессору отказано в доступе к шине данных, более фрагментировано;
- Прозрачный/скрытый : DMA занимает шину только тогда, когда она не нужна процессору. Чтобы это произошло, DMA контролирует ЦП и запускает цикл шины только в том случае, если инструкция, выполняемая в ЦП, достаточно длинная, чтобы разрешить это, и если эта инструкция не касается передач по шине.
Техника DMA с рассеянием и сбором позволяет передавать данные в несколько областей памяти во время одной транзакции DMA. Результат эквивалентен цепочке обычных запросов DMA, но это дополнительно избавляет ЦП от прерываний и операций копирования данных.
Аббревиатура DMREQ расшифровывается как DMA REQuest . DMACK означает подтверждение DMA .
Операция
Микросхема DMA имеет как минимум четыре регистра, доступных программному обеспечению, работающему в ЦП:
- Первый содержит начальный адрес памяти для чтения или записи.
- Второй подсчитывает количество байтов (или слов), которые необходимо передать.
- Третий указывает номер устройства или адресное пространство ввода-вывода для использования, что определяет желаемое устройство ввода-вывода.
- Четвертая определяет, должны ли данные считываться с устройства ввода/вывода или они должны быть записаны на него
Следовательно, для передачи блока из 32 байт с адреса памяти 100 в терминал (это устройство 4) ЦП записывает числа 100, 32 и 4 в первые три регистра DMA, плюс код для записи (в данном случае мы допустим 1) в четвертом регистре. В этот момент DMA отправляет шине запрос на чтение байта 100 из памяти, аналогично тому, как это делает ЦП. Как только байт будет получен, контроллер прямого доступа к памяти сделает запрос ввода-вывода к устройству 4, направленный на запись байта. По завершении этих операций контроллер прямого доступа к памяти увеличивает свой регистр адреса на 1 и уменьшает регистр счетчика на 1. Если регистр счетчика по-прежнему положителен, продолжается чтение из памяти другого байта и его запись в устройство.
Наконец, когда счетчик очищается, контроллер DMA прекращает передачу данных и посылает импульс на линию прерывания, подключенную к микросхеме ЦП. При наличии прямого доступа к памяти ЦП нужно только инициализировать несколько регистров, после чего он может выполнять другие задачи, пока передача не будет завершена, о чем сигнализирует прерывание от контроллера прямого доступа к памяти. Некоторые контроллеры прямого доступа к памяти имеют два, три или более набора регистров для управления одновременными передачами.
Хотя DMA освобождает ЦП от тяжелой нагрузки ввода-вывода, этот процесс не является полностью бесплатным. Если высокоскоростное устройство, такое как диск, передается по DMA, для доступа к памяти и устройству потребуется много циклов шины. Во время этих циклов ЦП должен ждать (DMA всегда имеет приоритет шины выше, чем у ЦП, потому что устройства ввода-вывода плохо переносят задержки). Явление, которое происходит, когда контроллер DMA крадет циклы шины у ЦП, называется похищением цикла . Даже выгода от отсутствия обработки прерывания на байт (или на слово) в значительной степени не компенсирует ущерб, причиненный присвоением циклов.
Примечания
Библиография
- Эндрю Стюарт Таненбаум , Компьютерная архитектура. Структурный подход , Милан, Pearson Education, 2006, ISBN 978-88-7192-271-3 .
- Джакомо Буччи , Архитектуры электронных компьютеров , Милан, McGraw-Hill, 2001, ISBN 88 386 0889-X .
Связанные элементы
Другие проекты
Wikimedia Commons содержит изображения или другие файлы с прямым доступом к памяти.
Внешние ссылки
- mmap () и DMA , из драйверов устройств Linux, 2-е издание , Алессандро Рубини и Джонатан Корбет
- DMA и обработка прерываний , на сайте eventhelix.com . Проверено 28 апреля 2005 г. (архивировано из оригинала 25 мая 2014 г.) .
- Прямой доступ к памяти