Если у вас все еще есть какие-либо сомнения относительно того, что такое 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
Горячие темы