Еще раз о DMA

Если у вас все еще есть какие-либо сомнения относительно того, что такое DMA и зачем этот режим нужен, я постараюсь их развеять.

Известно, что обмен данными с внешними устройствами может производиться по двум основным механизмам. Первый - программируемый ввод-вывод (PIO), когда за данными к внешнему устройству обращается процессор, прочитывая каждый байт (или слово) из порта и записывая его в нужную область памяти (или наоборот). Второй механизм - прямой доступ памяти (DMA), когда процессор программирует специальный контроллер, задавая область памяти, размер блока, направление передачи (чтение или запись данных), после чего дает команду на выполнение и до окончания процесса (прерывания) может заниматься другими задачами. Дальше с внешним устройством работает контроллер.

Те же принципы используются при организации обмена данными с жестким диском. Спецификация ATA (или IDE) предусматривает наличие хост-контроллера, работающего по шине PCI (для возможности работы со скоростью выше 10 Мб/c) и контроллера жесткого диска, расположенного на самом диске. Хост-контроллер (обычно это функциональная часть чипсета - "южного моста" или хаба ICH) как раз и обеспечивает возможность работы по механизму DMA, осуществляя монопольное владение (захват) шиной PCI на время обмена с контроллером винчестера (механизм Bus Mastering). Данные поступают непосредственно в память по два принятых слова (ширина PCI - 32 бита, а обмен контроллеров - словами по 16 бит).

Теперь о режимах. Обмен между двумя контроллерами может производиться по разным протоколам - с разными задержками на выдачу тех или иных сигналов. Режимов PIO, управляемых процессором, бывает пять видов - PIO4, старший режим, позволяет работать со скоростью 16.6 Мб/c. Режимы DMA позволяют передавать данные как по одному слову (Single Word), так и по несколько сразу (Multi Word) со скоростью до 16.6 Мб/c - обычный протокол, и до 66 Мб/c (или 100) - протокол UltraDMA. Вообще UltraDMA - особый протокол обмена с контрольными кодами и передачей по обоим фронтам синхроимпульса - является частью спецификации UltraATA.

Какие выгоды можно получить от использования механизма DMA? Очевидны два момента. Первый - уменьшение нагрузки на процессор. В однозадачной операционной среде (вроде MS-DOS) смысла от этого не будет, так как процессор все равно должен ожидать поступления данных для продолжения выполнения программы. А вот в многозадачной среде вроде Windows процессор может просто сосредоточиться на других задачах, тем самым повысив общую производительность. Второй момент - скорость работы в UltraDMA-режиме выше, чем в PIO4 или DMA2. Современные жесткие диски уже способны обрабатывать данные со скоростью выше 16 Мб/c, поэтому применение протокола UltraDMA имеет смысл в любом случае.

Для работы в режимах DMA необходимо следующее. Аппаратное взаимодействие двух контроллеров (хост-контроллера и контроллера винчестера) возможно в максимальном режиме, поддерживаемом обоими. Самый быстрый из реально существующих сегодня режим UltraATA/66 поддерживается хост-контроллерами в составе Интеловских хабов ICH (чипсеты i810, i820, i840, i815), "южными мостами" VT82C596 и VT82C686 от VIA (разные чипсеты), последние чипсеты от AMD, ALI и SIS тоже поддерживают UltraATA/66. Кроме того, контроллеры Promise и HighPoint устанавливаются на материнские платы на чипсете BX, что позволяет также работать по протоколу UDMA/66. Жесткие диски уже больше года поддерживают UDMA/66. Со стороны программных средств нужен BIOS, правильно определяющий максимальные режимы и конфигурирующий контроллеры, и операционная система с драйверами, способными организовать режим Bus Mastering для хост-контроллера. Режим DMA выбирается максимальным - или UDMA/66, или UDMA/33. DMA2 уже не дает выигрыша в скорости обмена, хотя и разгружает процессор.

Работа DMA-режима в среде DOS возможна. Для этого нужен соответствующий драйвер. VIA поставляет его в составе своих драйверов, Intel - нет. Впрочем, особой выгоды от этих драйверов нет (среда то не мультизадачная), да и кто сейчас занимается серьезной работой под DOS? Вот Windows - другое дело.

Начиная с Windows95 OSR2, драйверы для хост-контроллера жестких дисков входят в состав стандартного набора драйверов. Всем известная "галочка" DMA как раз и включает режим Bus Mastering хост-контроллера, управляя стандартными драйверами от Microsoft. Если эти драйверы вас не устраивают (например, они не поддерживают UltraDMA/66 для чипсетов i810, i820 и старше), есть смысл установить драйверы от производителя чипсета (Intel, AMD, VIA, ALI...). При этом "галочки" вы уже не увидите, а переключать режимы PIO/DMA нужно специальной утилитой в составе установленных драйверов.

Небольшое замечание. Стандартные драйверы Windows определяют максимальный режим работы, обращаясь к информации, представляемой BIOS`ом о жестком диске. При использовании диска с поддержкой UDMA/66 на системе без соответствующего хост-контроллера и со старым BIOS установка "галочки" DMA приводит к ошибке, т.к. BIOS рапортует о режиме UDMA/66, а наивный драйвер пытается заставить хост-контроллер сделать невозможное. Выход - новый BIOS (лето 99-го года или старше) или отключение UDMA/66 на жестком диске специальной утилитой от производителя.

Хотите конкретные цифры о выгоде UltraDMA? Посмотрите в таблицу.

Преимущества режима DMA
  PIO 4 UDMA/33 разница
WinBench'99
Bus transfer
WinMark
2220 2550 15%
High End
WinMark
6480 9060 40%
AVS/Express 4550 6550 44%
FrontPage98 43900 46500 6%
MicroStation 7290 8910 22%
PhotoShop 4 5470 7630 39%
Premiere 4.2 5300 8230 55%
Soundforge 4 5810 9100 57%
Visual C++ 5.0 6350 8060 27%
загрузка CPU
в первом тесте
36% 21% 42%
загрузка CPU
во втором тесте
68% 17% 75%
Sisoft Sandra 2000 5460 12576 130%
HDD Utility 2.5 for Win
8K Read speed 3.75 5.678 51%
16K Read speed 3.785 5.646 49%
загрузка CPU 22% 11% 50%

Жесткий диск - Quantum lct10 15Гб, хост-контроллер - PIIX4E (чипсет Intel BX). На VIA результаты аналогичные.

Макс КУРМАЗ,
max_kurmaz@mail.ru

Версия для печатиВерсия для печати

Номер: 

22 за 2000 год

Рубрика: 

Hardware
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!