Каналы прямого доступа к памяти (DMA)

 Рубрика: BIOS

Процессор очень хорошо справляется с обменами данными. Он может с одинаковой легкостью перемещать их между различными областями памяти, передавать из памяти в порты ввода/вывода и обратно. Однако разработчики прекрасно понимали, что передача больших объемов данных (всего лишь по одному слову за цикл) через процессор — это недопустимо расточительное использование его драгоценного времени. Дело в том, что процессор во время пересылки данных из одного места в другое не может заниматься ничем другим и выполняет при этом лишь роль посредника. Если бы была возможность освободить процессор от выполнения этих рутинных операций, то удалось бы существенно повысить эффективность его работы. Прямой доступ к памяти (DMA — Direct Memory Access) — это метод передачи больших объемов данных из памяти в устройства ввода/вывода и обратно без непосредственного вмешательства процессора. В принципе, контроллер Сеанс передачи данных по каналам DMA начинается с формирования сигнала запроса канала прямого доступа к памяти (DRQ — DMA Request) тем устройством, которое заинтересовано в обмене данными (например, контроллером накопителей на гибких дисках). Если запрашиваемый канал был предварительно активирован с помощью программного драйвера или процедур BIOS, то запрос попадет в соответствующую микросхему контроллера DMA, расположенную на системной плате. После этого контроллер DMA посылает процессору сигнал захвата HOLD, который формирует в ответ сигнал подтверждения захвата (HLDA— Hold Acknowledge). После получения сигнала HLDA контроллер DMA передает контроллеру шины команду на отключение процессора от шины расширения и берет управление шиной на себя. Затем контроллер DMA посылает устройству, запросившему канал, сигнал подтверждения (DAC К— DMA Acknowledge), после чего может начаться процесс передачи данных. За один сеанс по каналу прямого доступа к памяти можно передать до 64 Кбайт данных. После завершения обмена данными контроллер DMA вновь подключает к шине центральный процессор и снимет сигнал захвата управления шиной HOLD. Описанный процесс повторяется для каждого блока данных до тех пор, пока все они не будут переданы.
Как и прерывания, каналы DMA тому или иному устройству назначаются путем перестановки перемычек или DIP-переключателей на плате (или автоматически при использовании технологии РпР). После монтажа платы в слот расширения (и включения компьютера) устанавливается ее соединение с выбранным каналом контроллера DMA. Как правило, в командной строке загрузки программного драйвера, обслуживающего устройство, должны быть вписаны ключи, соответствующие аппаратной настройке каналов DMA. Хотя теоретически один и тот же канал можно использовать для обслуживания нескольких устройств, реализовать это на практике чрезвычайно трудно. Если два устройства попытаются одновременно использовать один и тот же канал DMA, то возникнет конфликт.
Адреса ввода/вывода
Во всех IBM-совместимых компьютерах предусмотрена возможность обмена информацией с 1024 портами ввода/вывода. Каждый порт ввода/вывода (I/O port) определяется своим адресом (подобным адресу памяти), однако данные, переданные по этим адресам, не сохраняются, а лишь поступают в распоряжение других устройств. Считанные по адресам ввода/вывода данные — это та информация, которую то или иное устройство предоставляет системе. Таким образом, адреса ввода/вывода используются для непосредственных обменов данными между компьютером и периферийными устройствами. Через него осуществляется эффективная передача команд и данных между компьютером и различными устройствами расширения. Каждому устройству должен быть присвоен уникальный адрес (или диапазон адресов) ввода/вывода. В табл. 10.3 приведено распределение адресов ввода/вывода для типичной системной платы (на примере Intel D850GB).
Адреса ввода/вывода различным устройствам обычно назначаются вручную с помощью перемычек или DIP-переключателей или автоматически при использовании технологии РпР. Как и рассмотренные ранее системные ресурсы, адреса ввода/вывода должны быть уникальными для каждого устройства. При совпадении или хотя бы «перекрытии» диапазонов адресов ввода/вывода могут возникать аппаратные конфликты, т.е. команды, предназначенные для одного устройства, будут неправильно интерпретироваться другим устройством. Большинство устройств допускает перенастройку адресов ввода/вывода, но существуют и такие, для которых эти адреса строго фиксированы.
Системная память
Еще одним важным системным ресурсом является память. Некоторым устройствам при установке в компьютер достаточно назначить только три системных ресурса: IRQ, канал DMA и адреса ввода/вывода, но для большинства из них необходимо отводить еще и некоторый диапазон адресов памяти. Эти участки памяти используются для размещения программного обеспечения (BIOS), встроенного, например, в SCSI-контроллеры, сетевые платы, видеокарты, модемы и т.п. Технически это означает, что установленному на плате того или иного адаптера постоянному запоминающему устройству (ПЗУ) присваиваются адреса, «позаимствованные» из общего адресного пространства. Никаким двум микросхемам ПЗУ не должны назначаться одинаковые адреса — в противном случае возникнет конфликт. В табл. Ю.4 приведено типичное распределение памяти в современных компьютерах.