DMA-контроллер начинает работу, посылая устройству запрос чтения (при этом устройство даже не знает, пришёл ли запрос от процессора или от контроллера DMA). Адрес памяти уже находится на адресной шине, так что устройство знает, куда следует переслать следующее слово из своего внутреннего буфера. Когда запись закончена, устройство посылает сигнал подтверждения контроллеру DMA.
Около 2000 года поддержка DMA по шине IDE/ATA развилась в сторону увеличения тактовой частоты шины, что потребовало нового типа кабеля от контроллера к диску с удвоенным числом проводников меньшего диаметра. Многие операционные системы требовали действий администратора для использования IDE DMA. Так, например, стандартные ядра Linux до примерно 2004 года не имели такой поддержки, требовалось перестроение ядра с отредактированным файлом конфигурации. Первоначальный контроллер жесткого диска IBM PC/AT не поддерживал DMA, и требовал передачи всех данных дискового ввода/вывода инструкциями REP INSW/REP OUTSW через порт 0x1f0. В используемых обозначениях под DMA подразумевается либо DMA1, либо DMA2, в зависимости от того, халвинг к регистру какого контроллера DMA мы хотим обратиться.
Dma (прямой Доступ К Памяти)
Если канал сконфигурирован для работы в нециклическом режиме, DMA запросы по этому каналу не будут обслуживаться после выполнения последней передачи данных (когда регистр, содержащий количество элементов для пересылки достигает 0). Для загрузки нового количества пересылаемых элементов в регистр DMA_CNDTRx, необходимо предварительно отключить DMA канал. При отключении канала DMA, его регистры не сбрасываются (DMA_CCRx, DMA_CPARx and DMA_CMARx сохраняют значения, заданные в процессе предшествующего конфигурирования канала). Контроллер DMA выполняет передачу данных с прямым доступом к памяти, разделяя системную шину для совместного использования с ядром Cortex-M3. DMA запрос может задержать доступ процессора к системной шине на несколько тактов в случае, если процессор и контроллер DMA адресуют одного и того же получателя данных (память или периферийное устройство).
Затем устройство посылает контроллеру DMA сигнал, сообщающий об окончании записи. Контроллер DMA увеличивает адрес памяти ПК и выставляет его на адресную шину, уменьшает значение своего счётчика байтов, снова отправляет запрос на чтение данных из внутренней памяти (буфера) устройства. После окончания цикла устройство инициирует прерывание процессора, сообщающее о завершении переноса данных. Если битом CIRC регистра DMA_CCRx включён циклический режим работы, то после завершения передачи данных регистр, содержащий количество элементов для пересылки перезагружается своим первоначальным значением и обслуживание запросов продолжается.
Регистры Dma
Правильное применение DMA может значительно повысить быстродействие всей системы. В начале 1990-х годов диски MFM/RLL вышли из употребления («вымерли»), сменившись дисками IDE, но регистровый интерфейс ПО к контроллеру не изменился. Далее становится возможным нахождение физических адресов страниц региона, которые в общем случае не являются непрерывными и формируют так называемый «список рассеяния/сборки» (англ. scatter-gather list, SGL). В оригинальной архитектуре IBM PC (шина ISA) DMA был возможен лишь при наличии аппаратного контроллера DMA (микросхема Intel 8237).
Для пользователя ПК это означает, что процессор во время пересылки данных по DMA (из платы в память ПК и обратно) может заниматься другими важными задачами, в том числе, и задачами пользователя. DMA (англ. Direct Reminiscence Entry, прямой доступ к памяти) – это механизм, который позволяет некоторым устройствам (DMA-устройствам) осуществлять обмен данными с оперативной памятью компьютера напрямую, минуя центральный процессор. Следующая таблица содержит информацию об отображении запросов DMA от периферийных устройств на каналы контроллера DMA2. Размещённая ниже таблица содержит полную информацию об отображении запросов DMA от периферийных устройств на каналы контроллера DMA. На следующем рисунке изображена блок-схема, поясняющая отображение линий запроса DMA от периферийных устройств на каналы контроллера DMA1 (аналогичным образом организовано подключение устройств к каналам контроллера DMA2, если он имеется).
- После чего запрос чтения повторяется, пока значение счётчика не станет равно нулю.
- Сброс флагов осуществляется с помощью регистра DMA_IFCR (сброс необходим при обработке прерываний от DMA).
- Контроллер DMA устанавливает на адресную шину адрес памяти ПК, отправляет устройству запрос на чтение данных из внутренней памяти (буфера) устройства.
- В операционных системах со страничной виртуальной памятью, таких, как Home Windows и семейство UNIX, непрерывный регион виртуальных адресов может быть реализован разрывно расположенными физическими страницами.
- Затем контроллер увеличивает используемый адрес памяти и уменьшает значение своего счётчика байтов.
- Хороший пример реализации данной архитектуры в очень сложном и развитом виде дан в спецификации оборудования OHCI 1394.
Захват Шины (bus Mastering)
Контроллер может быть многоканальным, способным параллельно выполнять несколько операций. Прямой доступ к памяти (англ. direct reminiscence access, DMA) — режим обмена данными между устройствами компьютера или же между устройством и основной памятью, в котором центральный процессор (ЦП) не участвует. Так как dma это данные не пересылаются в ЦП и обратно, скорость передачи увеличивается.
То есть еще час назад все было нормально, а потом резко появились проблемы. Обычно данные каналы можно было устанавливать программным путем, но на некоторых старых устройствах, например, картах расширения для подключения накопителей CD-ROM, необходимо было вручную устанавливать значения нужных каналов при помощи перемычек. Интеллектуальный транс-платформенный контроллер DMA при соответствующей программной поддержке обобщает и унифицирует понятие прямого доступа к памяти. Единый подход для доступа в адресное пространство как локального, так и удаленного компьютера обозначили термином RDMA (Remote Direct Reminiscence Access).
Шинная матрица реализует круговое планирование, что гарантирует, по меньшей мере, предоставление процессору половины полосы пропускания системной шины (для доступа как к памяти, так и к периферии). DMA имеет устройство-арбитр, которое отвечает за учёт приоритетов при обработке запросов. Ошибка в процессе пересылки данных с использованием DMA может возникнуть в результате попытки чтения или записи по адресу из зарезервированного адресного пространства. В таких случаях, вызвавший ошибку канал DMA автоматически отключается за счёт аппаратного сброса бита EN в соответствующем этому каналу конфигурационном регистре DMA_CCRx. Устанавливается флаг ошибки передачи TEIF в регистре DMA_IFR и генерируется прерывание DMA, если это разрешено установкой бита TEIE в регистре DMA_CCRx. Это происходит в режиме memory-to-memory, который включается установкой бита MEM2MEM в регистре DMA_CCRx.
Когда значение регистра достигает 0, передача останавливается (в нециклическом режиме) или регистр автоматически перезагружается первоначально записанным в него значением и передача продолжается (в циклическом режиме). Раскройте ветку контроллера и найдите канал, к которому подключен ваш жесткий диск; three. Нажмите на нем правую клавишу мыши, зайдите в «Свойства» и переключитесь на «Дополнительные параметры»; four.