Bios dma data transfers что это
Прямой доступ к памяти (англ. Direct Memory Access, DMA ) — режим обмена данными между устройствами или же между устройством и основной памятью (RAM) без участия Центрального Процессора (ЦП). В результате скорость передачи увеличивается, так как данные не пересылаются в ЦП и обратно.
Кроме того, данные пересылаются сразу для многих слов, расположенных по подряд идущим адресам, что позволяет использование т. н. «пакетного» (burst) режима работы шины — 1 цикл адреса и следующие за ним многочисленные циклы данных. Аналогичная оптимизация работы ЦП с памятью крайне затруднена.
В оригинальной архитектуре IBM PC (шина ISA) был возможен лишь при наличии аппаратного DMA-контроллера (микросхема с индексом Intel 8237).
DMA-контроллер может получать доступ к системной шине независимо от центрального процессора. Контроллер содержит несколько регистров, доступных центральному процессору для чтения и записи. Регистры контроллера задают порт (который должен быть использован), направление переноса данных (чтение/запись), единицу переноса (побайтно/пословно), число байтов, которое следует перенести.
ЦП программирует контроллер DMA, устанавливая его регистры. Затем процессор даёт команду устройству (например, диску) прочитать данные во внутренний буфер. DMA-контроллер начинает работу, посылая устройству запрос чтения (при этом устройство даже не знает, пришёл ли запрос от процессора или от контроллера DMA). Адрес памяти уже находится на адресной шине, так что устройство знает, куда следует переслать следующее слово из своего внутреннего буфера. Когда запись закончена, устройство посылает сигнал подтверждения контроллеру DMA. Затем контроллер увеличивает используемый адрес памяти и уменьшает значение своего счётчика байтов. После чего запрос чтения повторяется, пока значение счётчика не станет равно нулю. По завершении цикла копирования устройство инициирует прерывание процессора, означающее завершение переноса данных. Контроллер может быть многоканальным, способным параллельно выполнять несколько операций.
Содержание
Захват шины (bus mastering)
В шинах MicroChannel, SBus, разработанной под их большим влиянием PCI и её концептуальных производных AGP и PCI-X, используется иная реализация DMA. Эти шины позволяют любому устройству заявить о возникновении потребности к захвату шины, таковая потребность удовлетворяется т. н. арбитром при первой возможности. Устройство, успешно осуществившее захват шины, самостоятельно выставляет на шину сигналы адреса и управления и исполняет в течение какого-то времени ту же ведущую роль на шине, что и ЦП. Доступ ЦП к шине при этом кратковременно блокируется.
В такой реализации DMA не существует DMA-контроллера, а также номера входа DMA-контроллера.
Некоторые старые устройства PCI, а именно, реализации звуковых карт семейства Sound Blaster, использовали тот же DMA-контроллер 8237 из оригинальной архитектуры IBM PC. Такое использование является, безусловно, устаревшим для PCI, но поддерживалось с целью обеспечить полную совместимость по ПО и драйверам с версиями Sound Blaster для шины ISA.
Данная поддержка называется Distributed DMA (D-DMA) и реализована аппаратным образом как в устройстве, так и в логике моста PCI-ISA, в которой на PCI-системах размещена и логика оригинального IBM PC DMA контроллера 8237. Реализация включает в себя 2 запроса: сначала от устройства мосту PCI-ISA, затем от моста основной памяти.
Кроме упомянутых реализаций Sound Blaster, практически никакие устройства PCI не используют понятие «номер входа DMA-контроллера», как и 8237 вообще.
DMA и виртуальная память, IOMMU и AGP GART
В операционных системах со страничной виртуальной памятью, таких, как Windows и семейство UNIX, непрерывный регион виртуальных адресов может быть реализован разрывно расположенными физическими страницами.
Исполнение DMA по такому региону представляет собой довольно сложную задачу. Также сложной задачей является исполнение DMA по отгружаемой памяти.
Решение этой задачи требует выявления физических страниц, реализующих регион, и их блокировку от отгрузки обращением к подсистеме виртуальной памяти. Далее становится возможным нахождение физических адресов страниц региона, которые в общем случае не являются непрерывными и формируют так называемый «список рассеяния/сборки» (англ. scatter-gather list — SGL).
Задача исполнения DMA по таковому списку может быть решена одним из следующих способов.
1. Выделение подряд идущей физической памяти в ядре операционной системы и промежуточное копирование всех данных туда/оттуда (т. н. «буфер отскока» — англ. bounce buffer ).
Поддерживается всеми ведущими операционными системами, для активации поддержки в Windows требуется вызов IoGetDmaAdapter с параметром DEVICE_DESCRIPTION::ScatterGather , установленном в FALSE .
Недостатки: трата времени процессора на копирование, потребление крайне ограниченного ресурса непрерывной физической памяти, занятие места в ограниченной части памяти, к которой есть доступ у DMA (первый гигабайт на x86).
2. Разбиение операции на подоперации по границам элементов SGL, с прерыванием в конце каждой операции.
Недостатки: большое количество прерываний.
3. Поддержка SGL самим устройством, с требованием копирования SGL, преобразованного в формат, специфичный для устройства, в устройство через многочисленные обращения к регистрам устройства.
Недостатки: крайне высокая сложность устройства, невысокая производительность большого числа записей в регистры.
4. Поддержка SGL самим устройством, с требованием размещения SGL, преобразованного в формат, специфичный для устройства, в физически непрерывном регионе основной памяти.
Устройство читает SGL тем же механизмом DMA с захватом шины, что и собственно данные, тем самым реализуя функциональность некоего процессора, читающего и исполняющего свою собственную «программу», реализованную как список дескрипторов SGL. Данная архитектура называется «цепной DMA» (англ. chain DMA ), реализована в практически всем стандартном оборудовании современного компьютера — Intel IDE (в примитивном виде), UHCI и OHCI USB, OHCI 1394, а также в большинстве PCI-адаптеров, Ethernet и SCSI (даже в устаревшем AIC78xx). Хороший пример реализации данной архитектуры в очень сложном и развитом виде дан в спецификации оборудования OHCI 1394. По некоторым сведениям, данная архитектура под названием «канальные программы» использовалась ещё в IBM 360, известных в СССР как ЕС ЭВМ.
Недостатки: высокая сложность устройства, хотя и ниже в числе транзисторов, чем предыдущий вариант. Например, контроллер UHCI USB (согласно спецификации на сайте Intel) требует около 5000 транзисторов.
5. Поддержка SGL в межшинном оборудовании, при которой представление физически разрывного буфера для стороны устройства выглядит физически непрерывным.
Таковое оборудование называется IOMMU (англ. IO memory management unit ). Реализовывалось как на компьютерах фирмы Sun Microsystems для шины SBus, так и на компьютерах DEC Alpha для шины PCI. До недавних времен практически никогда не реализовывалось в обыкновенных x86/PCI системах, хотя в настоящее время есть тенденция к изменению этой ситуации, главным образом с целью повышения производительности гипервизоров виртуальных машин. Всегда реализовывалось для шины AGP под названием AGP GART с целью облегчить произвольный доступ трехмерного видеопроцессора к текстурам, находящимся в основной памяти. Со стороны устройства данное оборудование было стандартизировано спецификацией AGP, со стороны программного обеспечения стандартизации не существовало, и реализация зависела от производителя микросхемы северного моста между AGP и памятью (отсюда необходимость в «драйвере AGP», таком, как agp440.sys для микросхем Intel). Набор вызовов ядер развитых операционных систем, таких, как Windows, всегда содержал архитектурную абстракцию IOMMU ( MapTransfer и GetScatterGatherList , эти же вызовы поддерживают и bounce buffer, понимаемый как разновидность IOMMU), позволяющую одному и тому же драйверу устройства поддерживать его при присоединении через различные IOMMU.
Недостатки: требование сложной логики уже не в устройстве, а в платформе.
DMA и IDE/ATA, Ultra DMA
Первоначальный контроллер жесткого диска IBM PC/AT не поддерживал DMA, и требовал передачи всех данных дискового ввода/вывода инструкциями REP INSW/REP OUTSW через порт 0x1f0.
В начале 90х годов диски MFM/RLL вымерли, сменившись дисками IDE, но регистровый интерфейс ПО к контроллеру не изменился.
Низкая производительность такого контроллера стала серьёзной проблемой, особенно на системах PCI. Помимо требования нескольких циклов PCI на 2 байта переданных данных, это приводило к загрузке процессора дисковым вводом-выводом.
Для решения проблемы ряд компаний, в том числе Intel, разработали контроллеры IDE с поддержкой DMA. Контроллеры были и есть несовместимы по ПО между различными производителями, хотя совместимость всех Intel IDE/ATA/SATA снизу вверх более или менее поддерживается.
Также особенностью этой поддержки является использование новых команд протокола IDE/ATA, а значит, и требование поддержки DMA не только контроллером, но и самим жестким диском.
Около 2000 года поддержка DMA по шине IDE/ATA развилась в сторону увеличения тактовой частоты шины, что потребовало нового типа кабеля от контроллера к диску с удвоенным числом проводников меньшего размера. Эта технология называлась Ultra DMA (UDMA).
Многие операционные системы требовали действий администратора для использования IDE DMA. Так, например, стандартные ядра Linux до примерно 2004 года не имели такой поддержки, требовалось перестроение ядра с отредактированным файлом конфигурации.
В семействе Windows поддержка IDE DMA появилась сначала только для Intel в пакетах обновлений к Windows NT4, и требовала на большинстве систем ручного редактирования реестра для задействования.
В Windows 2000 это требование исчезло, но появилось требование обязательной вписки даже не-загрузочных дисков в BIOS и обязательного выставления режима DMA для них в настройках BIOS. Эти настройки BIOS становились видимы ядру ОС через технологию ACPI, и ОС не позволяла включить DMA для диска, не вписанного в BIOS. Для сравнения: NT4 поддерживала и произвольный размер диска, и DMA без вписки диска в BIOS.
Режимы Ultra DMA протокола ATA для ОС Linux
… | MByte/s | … |
---|---|---|
Mode 0 | 16.7 | UDMA16 |
Mode 1 | 25.0 | UDMA25 |
Mode 2 | 33.3 | UDMA33 |
Mode 3 | 44.4 | UDMA44 |
Mode 4 | 66.7 | UDMA66 |
Mode 5 | 100.0 | UDMA100 |
Mode 6 | 133.3 | UDMA133 |
Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.
Эта отметка установлена 8 июня 2012.
После подключения накопителей к системной плате нужно правильно выставить их параметры в BIOS. По традиции они сосредоточены в разделе Standard CMOS Features (Main для версий BIOS с горизонтальной строкой меню). Для настройки каждого из IDE-устройств обычно предназначено отдельное подменю со следующими названиями:
- IDE Primary Master;
- IDE Primary Slave;
- IDE Secondary Master;
- IDE Secondary Slave.
В некоторых версиях BIOS эти параметры могут иметь другие названия, например: IDE Channel 0 Master, IDE Channel 0 Slave, IDE Channel 1 Master и IDE Channel 1 Slave. Иногда эти параметры сосредоточены в отдельном подменю, которое может называться IDE Devices, Hard Disks или как-нибудь иначе.
Для накопителей SATA в разделе Standard CMOS Features (Main) могут присутствовать несколько подменю с именами SATA ½/¾,SATA Channel ½/¾ или аналогичными. Иногда также можно встретить версии BIOS, где SATA-устрой- ства именуются но традиции IDE-устройствамн. Перечень параметров для устройств SATA практически не отличается от параметров IDE-устройств, однако почти все они недоступны для редактирования, поскольку эти накопители настраиваются автоматически.
Все устройства имеют идентичный набор параметров, поэтому далее рассмотрим настройку только одного из них, например подключенного к каналу IDE Primary Master.
Обратите внимание, что параметры IDE-устройств могут отсутствовать или быть недоступными, если в разделе Integrated Peripherals отключены один или оба IDE-канала.
IDE HDD Auto-Detection
После выбора этого параметра и нажатия Enter запустится процедура автоматического определения устройства, подключенного к данному каналу. После ее успешного выполнения будут автоматически установлены значения параметров Cylinder, Head, Sector, Capacity и некоторых других в соответствии с обнаруженным устройством.
Большинство HDD поддерживают функцию автоопределения; исключение составляют лишь некоторые модели очень старых жестких дисков, для них значения параметров Cylinder, Head и Sector нужно вводить вручную.
HDD определяется некорректно или не определяется вообще из-за нескольких причин.
1. Неправильно установлены перемычки или неверно подключены шлейфы. Если два устройства расположены на одном шлейфе, попробуйте подсоединять их и настраивать по очереди.
Чтобы выйти из этой ситуаций, можно попытаться обновить имеющуюся версию BIOS, если обновление есть на сайте производителя системной платы. Другой способ — использовать жесткий диск не на полную емкость с теми параметрами, которые были определены вашей версией BIOS, однако такой способ не всегда гарантирует полную совместимость. Для корректной работы HDD в режиме неполной емкости в некоторых моделях предусмотрены перемычки, ограничивающие объем.
3. Жесткий диск или контроллер на системной плате неисправен. Чтобы диагностировать подобную ситуацию, обычно подключают к проблемному IDE-кана- лу заведомо исправный жесткий диск или же проблемное устройство — к другой, заведомо исправной, системной плате.
Type, IDE Primary Master
Параметр определяет тип устройства, подключенного к данному каналу. Возможно несколько основных значений.
1. Auto. Тип подключенного устройства будет автоматически определяться при каждой загрузке компьютера. Практически все современные устройства опознаются безошибочно, и это значение всегда рекомендуется производителями системных плат. Единственный его недостаток — несколько увеличенное время загрузки компьютера.
В некоторых версиях BIOS процедуру автоматического определения можно запустить принудительно с помощью описанного выше параметра IDE HDD Auto-Detection, там же были подробно описаны проблемы, возникающие при определении жестких дисков.
2. Manual (User), Выбрав этот тип, параметры подключенного устройства нужно задать вручную. Обычно достаточно ввести количество головок диска (Head), количество дорожек, или цилиндров, (Cylinder) для каждой головки и количество секторов на дорожке (Sector). Этот тип обычно применяется при подключении очень старых жестких дисков, не поддерживающих автоматическое определение.
Установив значение Manual для жесткого диска, поддерживающего автоопределение, иногда можно сэкономить несколько долей секунды при загрузке компьютера. В этом случае обычно удается избежать ручного ввода параметров: сначала выполняется автоматическое определение, а затем выбирается Manual. Если такой трюк не прошел, придется вводить все параметры диска вручную или же оставить значение Auto.
3. CDROM/DVD. Значение устанавливается, когда к каналу подключено устройство для чтения и/или записи CD или DVD. Если это значение отсутствует в списке доступных параметров, выбирайте для подобных накопителей значение Auto, хотя вполне допустимо и None.
4. LS-120, ZIP-100, МО, JAZ (JAZ2) — служат для подключения устаревших устройств со сменными носителями, которые должны были прийти на место
дискет, но уступили в конкурентной борьбе записывающим CD/DVD-приводам и устройствам flash-памяти,
5. None. Значение устанавливается, если на данном канале нет подключенных устройств. При этом компьютер будет загружаться быстрее, поскольку не тратится лишнее время на поиск отсутствующих накопителей. Значение None также рекомендуется, если подключаются нестандартные устройства, не поддерживаемые данной версией BIOS. В этом случае они будут доступны только после установки соответствующих драйверов. Следует отметить, что большинство современных версий BIOS при выборе значения None успешно справляются с определением приводов для CD, DVD и некоторых других устройств.
Если значение None выбирается для второго или третьего жесткого диска, в большинстве случаев они все равно будут распознаны операционной системой Windows, однако распределение букв для логических дисков такого накопителя может отличаться от общепринятого.
Mode, Access Mode, LBA Mode
Параметр определяет режим доступа к данным на диске и актуален лишь для старых жестких дисков. Практически все HDD от 1 Гбайт и более будут нормально работать при значении Auto, а при необходимости подключить и настроить старый диск, возможно, понадобится разобраться с секторами, головками и др. Есть несколько основных значений этого параметра.
1. Auto. Режим доступа определяется автоматически. Это значение устанавливается по умолчанию и рекомендуется для всех современных жестких дисков.
2. Normal (CHS). Этот вариант используется только для старых дисков размером менее 504 Мбайт, в которых применяется режим непосредственной адресации секторов. В этом режиме количество доступных головок (Head), цилиндров (Cylinder) и секторов (Sector) ограничено значениями 1024/16/63, что соответствует объему в 504 Мбайт.
3. LBA (Logical Block Addressing). Режим логической адресации секторов, который используется во всех жестких дисках объемом более 1 Гбайт. Именно этот режим устанавливается для большинства накопителей при выборе значения Auto.
Если BigLBA поддерживается BIOS, можно добиться этого и в системах семейства Windows 98/Ме, но с использованием дополнительных утилит, например Intel Application Accelerator для плат с чипсетами Intel. Об обновлениях BIOS и других утилитах для вашей системной платы можно узнать на сайте ее производителя.
4. Large. Еще один способ логической адресации блоков, который не получил распространения и применялся лишь в некоторых моделях жестких дисков размером до 1 Гбайт, fie поддерживающих LBA.
5. МРТ. Редко используемое значение, применяющееся для дисков с неизвестным методом трансляции.
В некоторых версиях BIOS вариант доступа определяется в параметре LBA Mode со следующими значениями.
6. Auto. Режим LBA включен; возможен также автоматический переход в режим Large, если есть соответствующий диск.
7. Disabled. Режим LBA отключен, а для доступа к диску используется Normal/ CHS.
При неправильном выборе режима данные на диске, скорее всего, будут недоступны, кроме того, есть вероятность повредить имеющиеся данные. По этой причине необходимо использовать только тот режим, в котором жесткий диск был изначально отформатирован.
Геометрия жесткого диска характеризуется следующими параметрами.
- Head — общее количество магнитных поверхностей диска и соответствующих им магнитных головок.
- Cylinder — общее количество дорожек, или цилиндров, на каждой поверхности диска.
- Sector — количество секторов, на которые делится каждая дорожка.
- Capacity — это информационный параметр, указывающий расчетную емкость данного диска. Все жесткие диски имеют стандартный размер сектора в 512 байт, и объем диска будет определяться по следующей формуле:
Capacity = Head * Cylinder * Sector * 512.
5. Precomp, WPCOMP — устаревший параметр, определяющий номер цилиндра, с которого будет выполняться более плотная запись данных на диск. Не используется для HDD с режимом LBA, да и для многих старых дисков с режимом Normal его не нужно устанавливать.
6. Landing Zone, LZONE — еще один устаревший параметр, указывающий номер дорожки, на которую должны переместиться головки перед остановкой жесткого диска (дорожки для парковки). Практически все HDD стандарта IDE паркуются автоматически независимо от значения рассматриваемого параметра.
Геометрические параметры жесткого диска обычно определяются автоматически и недоступны для редактирования. Как уже отмечалось, ручной ввод этих параметров может понадобиться только для очень старых дисков с режимом доступа Normal и только для таких дисков значения будут соответствовать их физическому устройству. Для HDD, использующих LBA, эти параметры условны, но они необходимы, чтобы правильно организовать доступ к данным.
Если вы обнаружили, что в установленном жестком диске емкостью 120 Гбайт на самом деле доступно только 112 Гбайт, не нужно сразу же бежать к продавцу и размахивать кулаками. Этому есть объяснение, которое связано с различными методиками подсчета объема производителями плат и операционной системой. Например, в рассматриваемом диске 57 474 цилиндра, 16 головок и 255 секторов, что соответствует емкости в 120,061 миллиардов байт. Для такого диска производитель указывает объем в 120 Гбайт, принимая 1 Гбайт -1 млрд байт. Но в информатике между основными единицами информации приняты следующие соотношения: 1 Кбайт = 210 байт = 1024 байт, 1 Мбайт = 220 байт = 1 048 576 байт, а 1 Гбайт = 230 байт = 1,074 млрд байт. Таким образом, фактический объем рассматриваемого диска: 120,06 / 1,074 = 111,8 Гбайт, именно такое значение будет указано при форматировании диска, а также в окне Компьютер.
Extended IDE Drive
Параметр позволяет включать или отключать автоматическое определение устройств на выбранном SATA-канале. Рассмотрим возможные значения.
1. Auto — параметры устройства определяются автоматически, это значение следует установить при подключении к данному каналу жесткого диска.
2. None — автоопределение устройств не выполняется. Установка этого значения при отсутствии накопителя на данном канате может ускорить загрузку на несколько долей секунды. Значение None также может помочь избавиться от проблем в работе некоторых моделей DVD-приводов, подключенных к данному каналу.
Настройка работы IDE-контроллера
В некоторых современных версиях BIOS можно встретить и другие параметры настройки накопителей:
Всем привет, сегодня мы с вами поговорим о DMA: именно о той технологии, которая помогает вашему компьютеру воспроизводить для вас музыку, выводить изображение на экран, записывать информацию на жесткий диск, и при этом оказывать на центральный процессор просто мизерную нагрузку.
DMA, что это? О чем вы говорите?
DMA, или Direct Memory Access – технология прямого доступа к памяти, минуя центральный процессор. В эпоху 486-ых и первых Pentium во всю царствовала шина ISA, а также метод обмена данными между устройствами – PIO (Programmed Input/Output).
- На сетевую карту пришло 1500 байт данных.
- Сетевая карта инициирует прерывание с целью сообщить процессору, что данные необходимо забрать с устройства, иначе произойдет так называемый buffer overrun.
- Операционная система ловит прерывание от контроллера прерываний и отдает его на обработку драйверу.
- Драйвер в цикле побайтно читает данные с регистров сетевой карты.
Когда объемы данных, которыми оперирует процессор начали возрастать, стало понятно, что нужно минимизировать участие процессора в цепочке обмена данными, а то прийдется туго. И вот тогда активное применение нашла технология прямого доступа к памяти.
Кстати говоря, DMA используется не только для обмена данными между устройством и ОЗУ, но также между устройствами в системе, возможен DMA трансфер между двумя участками ОЗУ (хотя данный маневр не применим к x86 архитектуре). Также в своем процессоре Cell, IBM использует DMA как основной механизм обмена данными между синергетическими процессорными элементами (SPE) и центральным процессорным элементом (PPE). Также каждый SPE и PPE может обмениватся данными через DMA с оперативной памятью. Данный прием – на самом деле большое преимущество Cell, ибо избавляет от проблем когерентности кешей при мультипроцессорной обработке данных.
И снова теория
Прежде чем мы перейдем к практике, я бы хотел осветить несколько важных аспектов программирования PCI, PCI-E устройств.
Я вскользь упомянул о регистрах устройства, но как же к ним имеет доступ центральный процессор? Как многие из вас знают, есть такая сущность в компьютерных технологиях, как IO порты (Input/Output ports). Они предназначены для обмена информацией между центральным процессором и периферийными устройствами, а доступ к ним возможен с помощью специальных ассемблерных инструкций — in/out. BIOS (или OpenFirmware на PPC based системах) на ранних этапах инициализации PCI устройств, а также некоторых других (Super IO контроллера, контроллера PS/2 устройств, ACPI timer и т.д.), закрепляет за определенным контроллером собственный диапазон IO портов, куда и отображаются регистры устройства.
- Скорость доступа к физической памяти выше, нежели к IO портам.
- IO порты могут отображать не более 65535 байт регистров, в то время как размер ОЗУ современных компьютеров в разы больше.
- Читать регистры устройства из ОЗУ проще, нежели с помощью IO портов :)
Итак, существует два метода утилизации DMA: contiguous DMA и scatter/gather DMA.
Contiguous DMA
- Выделяется один буфер достаточно большого размера в оперативной памяти.
- Физический адрес (точнее сказать адрес на шине участка памяти, потому как physical address и bus address – равны в x86 архитектуре, но не равны в PPC) этого буфера записывается в регистр устройства.
- Во время того, как приходят данные на устройство, контроллер устройства инициирует DMA трансфер.
- После того, как буфер полностью заполнен, контроллер устройства инициирует прерывание, чтобы сообщить центральному процессору, что буфер следует передать операционной системе.
- Драйвер операционной системы обрабатывает прерывание, и передает полученные данные из буфера, далее по стеку устройств операционной системы.
Scatter/gather DMA
С ростом скорости Ethernet адаптеров, contiguous DMA показал свою несостоятельность. В основном из-за того, что требовались области памяти достаточно большого размера, которые подчас невозможно было выделить, так как в современных системах фрагментация физической памяти достаточно высока. Во всем виноват механизм виртуальной памяти, без которого нынче никуда :)
Решение напрашивается само собой: использовать вместо одного большого участка памяти несколько, но в разных регионах этой самой памяти. Возникает вопрос, но как же сообщить контроллеру устройства, как инициировать DMA трансфер и по какому адресу писать данные? И тут нашли решение, использовать дескрипторы, чтобы описывать каждый вот такой участок в оперативной памяти.
- Адрес участка ОЗУ (именно bus address), который предназначен для DMA трансфера.
- Размер описываемого участка ОЗУ.
- Опциональные флаги и другие специфические аргументы.
- Адрес следующего дескриптора в памяти.
- Драйвер операционной системы выделяет и иницилизирует дескрипторы DMA буферов.
- Драйвер выделяет DMA буферы (участки ОЗУ для DMA трансфера) и записывает необходимую информацию о них в дескрипторы.
- Устройство по мере возникновения потребности, заполняет DMA буферы, и после того, как заполнен один или несколько буферов инициирует прерывание.
- Драйвер ОС просматривает все дескрипторы DMA буферов, определяет какие из них были заполнены контроллером устройства, пересылает данные из буфера далее по стеку устройств и помечает буфер как готовый к DMA трансферу.
На сегодня пожалуй все, иначе информации станет слишком много. В следующей статье я покажу вам, как с этой уличной магией работает IOKit. Жду отзывов и дополнений ;)
Что бы ни говорили сторонники SCSI, широкое распространение IDE-устройств на сегодняшний день — свершившийся факт. Как посчитали умные люди из компании Quantum, свыше 90% РС-совместимых персональных компьютеров оснащены жесткими дисками с интерфейсом IDE. Беда, однако, в том, что IDE или Integrated Device Electronic — понятие слишком общее и относится, вообще говоря, к любому устройству с интегрированным контроллером вплоть до электрического чайника с автоматическим отключением при закипании. В попытках как-то конкретизировать, какой именно интерфейс имеется в виду, было изобретено столько различных названий, что при выборе жесткого диска с интерфейсом IDE у неподготовленного человека может закружиться голова. Посудите сами: есть интерфейсы АТА с различными номерами, Fast ATA (тоже с номерами), Ultra ATA (тоже несколько), и, наконец, EIDE! Действительно ли все эти интерфейсы разные, какие из них совместимы и какой лучше? Попробуем разобраться.
- Поддержка двух жестких дисков. Один канал делится между двумя устройствами, сконфигурированными как master и slave;
- PIO Modes. ATA включает поддержку PIO modes 0,1 и 2;
- DMA Modes. ATA включает поддержку single word DMA modes 0, 1 и 2 и multiword DMA mode 0.
«Оригинальный» интерфейс АТА предназначен только для подключения жестких дисков и не поддерживает такие возможности, как ATAPI — интерфейс для подключения IDE-устройств, отличных от жестких дисков, режим передачи block mode и LBA (logical block addressing).
- Более скоростные PIO Modes. В АТА-2 добавлена поддержка PIO modes 3 и 4;
- Более скоростные DMA Modes. АТА-2 поддерживает multiword DMA modes 1 и 2;
- Block Transfer. ATA-2 включает команды, позволяющие осуществлять обмен в режиме block transfer для повышения производительности;
- Logical Block Addressing (LBA). АТА-2 требует поддержки жестким диском протокола передачи LBA. Разумеется, для использования этого протокола необходимо, чтобы его поддерживал также и BIOS;
- Усовершенствованная команда Identify Drive. Увеличен объем информации о характеристиках, которую жесткий диск выдает по системным запросам.
И все было бы хорошо, но фирмы-производители в стремлении заполучить еще кусочек рынка начали придумывать красивые названия и обзывать ими интерфейсы своих жестких дисков. На самом деле интерфейсы Fast ATA, Fast ATA-2 и Enhanced IDE базируются на стандарте АТА-2 и являются не более, чем маркетинговыми терминами. Все различие между ними состоит в том, какую часть стандарта и как они поддерживают.
Наибольшую путаницу вызывают названия Fast ATA и Fast ATA-2, принадлежащие перу соответственно Seagate и Quantum. Создается вполне естественное впечатление, что Fast ATA является некоторым улучшением стандарта АТА, тогда как Fast ATA-2 базируется на стандарте АТА-2. Но все, увы, не так просто. На самом деле Fast ATA-2 есть просто другое название стандарта АТА-2, а Fast ATA отличается от него лишь тем, что не поддерживает самые быстрые режимы — PIO mode 4 и DMA mode 2. При этом обе компании нападают на компанию Western Digital и ее стандарт EIDE за то, что он вносит еще большую путаницу. У EIDE есть свои недостатки, но об этом чуть позже.
- AТА-3 содержит средства, повышающие надежность передачи данных с использованием высокоскоростных режимов, что действительно является проблемой, поскольку кабель IDE/ATA остался тем же, что и при рождении стандарта;
- АТА-3 включает Self-Monitoring Analysis and Reporting Technology (SMART).
АТА-3 не был утвержден в качестве стандарта ANSI в основном потому, что не вводил новых режимов передачи данных, хотя технология SMART в настоящее время широко используется производителями жестких дисков.
Следующим шагом в развитии интерфейса IDE/ATA явился стандарт Ultra ATA (он же Ultra DMA, он же ATA-33, он же DMA-33, его же иногда называют АТА-3(!)). Ultra ATA является стандартом де-факто использования самого быстрого режима DMA — mode 3, обеспечивающего скорость передачи данных 33,3 МВ/сек. Для обеспечения надежной передачи данных по все тому же кабелю используются специальные схемы контроля и коррекции ошибок, при этом сохраняется обратная совместимость с предыдущими стандартами — АТА и АТА-2. То есть если вы, купив жесткий диск с интерфейсом Ultra АТА, вдруг обнаружили, что ваша системная плата его не поддерживает, не огорчайтесь — диск все равно будет работать, хотя и медленнее :)
И, наконец, последнее достижение в этой области — интерфейс Ultra ATA/66, разработанный компанией Quantum, позволяющий осуществлять передачу данных со скоростью 66МВ/сек.
В то время, когда разрабатывался интерфейс IDE/ATA, единственным устройством, которое нуждалось в этом интерфейсе, был жесткий диск, поскольку стриммеры и зарождающиеся драйвы CD-ROM имели собственный интерфейс (многие помнят времена, когда CD-ROM подключался через интерфейс на звуковой карте). Однако вскоре стало ясно, что использование для подключения всех устройств быстрого и относительно простого интерфейса IDE/ATA сулит значительные выгоды, в том числе и за счет своей универсальности. Однако система команд интерфейса IDE/ATA была рассчитана только на жесткие диски, поэтому просто подключить, например, CD-ROM к IDE-каналу нельзя — работать не будет (проверялось мною лично при попытке подключить CD-ROM вместо загрузочного IDE-диска на 486 сервере Hewlett-Packard). Поначалу, по молодости лет пребывал в недоумении: как так — шлейф подходит, а не работает?). Пришлось разработать новый протокол — ATA Packet Interface или ATAPI. Этот протокол позволяет другим устройствам подключаться с помощью стандартного шлейфа IDE и «вести себя» как IDE/ATA жесткий диск. На самом деле протокол ATAPI намного сложнее, чем ATA, поскольку передача данных идет с использованием стандартных режимов PIO и DMA, а реализация поддержки этих режимов существенно зависит от типа подключенного устройства. Название packet (пакетный) этот протокол получил по той причине, что команды устройству действительно приходится передавать группами или пакетами. Тем не менее, с точки зрения пользователя, что, согласитесь, важнее всего, нет разницы между IDE/ATA жестким диском, ATAPI CD-ROMом или ZIP-драйвом. Современные BIOSы даже поддерживают загрузку с ATAPI-устройств.
- ATA-2. Целиком, включая самые быстрые режимы;
- ATAPI. Целиком;
- Dual IDE/ATA Host Adapters. Стандарт EIDE включает поддержку двух IDE/ATA хостов, что позволяет использовать одновременно до 4 IDE/ATA/ATAPI устройств.
Теперь посмотрим, что означает фраза «жесткий диск с интерфейсом EIDE». Поскольку поддерживать ATAPI ему абсолютно незачем, а два канала IDE он поддержать не в состоянии, то все это сводится к гораздо более скромному: «жесткий диск с интерфейсом АТА-2». В принципе идея была хорошая — создать стандарт, охватывающий BIOS, чипсет и жесткий диск. Но поскольку большая часть EIDE как стандарта относится именно к BIOS и чипсету, то получилась еще и путаница между Enhanced IDE и возникшим приблизительно в это же время Enhanced BIOS (BIOS, поддерживающий IDE/ATA диски емкостью больше 504MB). Сложилось вполне естественное мнение, что для использования дисков объемом больше 504МВ нужен интерфейс EIDE (тогда как на самом деле нужен был только Enhanced BIOS), тем более, что производители карт с Enhanced BIOS рекламировали их как «enhanced IDE cards». Сейчас, к счастью, эти проблемы позади (как и барьер 540 МВ).
Итак, основные (как официальные, так и неофициальные) стандарты интерфейса IDE приведены в следующей таблице.
Интерфейс | Стандарт | PIO modes | DMA modes | Отличия от IDE/ATA |
---|---|---|---|---|
IDE/ATA | ANSI | 0, 1, 2 | Single word 0, 1, 2; multiword 0 | |
ATA-2 | ANSI | 0, 1, 2, 3, 4 | Single word 0, 1, 2; multiword 0, 1, 2 | Режим block transfer, поддержка LBA, Усовершенствованная команда identify drive |
Fast ATA | Маркетинговый термин | 0, 1, 2, 3 | Single word 0, 1, 2; multiword 0, 1 | Аналогично АТА-2 |
Fast ATA-2 | Маркетинговый термин | 0, 1, 2, 3, 4 | Single word 0, 1, 2; multiword 0, 1, 2 | Аналогично АТА-2 |
ATA-3 | Неофициальный | 0, 1, 2, 3, 4 | Single word 0, 1, 2; multiword 0, 1, 2 | Аналогично АТА-2, добавлена поддержка надежности передачи на высоких скоростях и SMART |
Ultra ATA | Неофициальный | 0, 1, 2, 3, 4 | Single word 0, 1, 2; multiword 0, 1, 2, 3 (DMA-33/66) | Аналогично АТА-3 |
ATAPI | ANSI | 0, 1, 2, 3, 4 | Single word 0, 1, 2; multiword 0, 1, 2 | Аналогично АТА-2, добавлена поддержка устройств, отличных от жестких дисков |
EIDE | Маркетинговый термин | 0, 1, 2, 3, 4 | Single word 0, 1, 2; multiword 0, 1, 2 | ATA-2 + ATAPI и поддержка двух хост-адаптеров |
Теперь перейдем к теме, не менее интересной. Существуют два параметра, характеризующих скорость передачи данных при использовании IDE/ATA-жесткого диска. Внутренняя скорость передачи (internal transfer rate) характеризует скорость передачи непосредственно между магнитным носителем и внутренним буфером жесткого диска и определяется плотностью записи, скоростью вращения и т.д. Эти параметры зависят от конструкции диска, а не от типа интерфейса. С другой стороны, внешняя скорость передачи данных, то есть скорость передачи по каналу IDE, полностью зависит от используемого режима передачи данных. На заре использования дисков IDE/ATA скорость работы дисковой подсистемы определялась внутренней скоростью передачи данных, которая была заведомо меньше внешней. В настоящее время в связи с увеличением плотности записи (что позволяет снимать больше информации за один оборот диска) и частоты вращения на первый план выходит именно внешняя скорость передачи. Что же все-таки означают номера режимов и чем PIO отличается от DMA?
Изначально общеупотребительным способом передачи данных через интерфейс IDE/ATA был протокол, называемый Programmed I/O или PIO. Существует пять режимов PIO, различающихся максимальными скоростями пакетной передачи данных (burst transfer rates). Общеупотребительное английское название — PIO modes.
PIO mode | Максимальная скорость передачи (МВ/сек) | Поддерживается стандартами |
---|---|---|
0 | 3.3 | Всеми |
1 | 5.2 | Всеми |
2 | 8.3 | Всеми |
3 | 11.1 | ATA-2, Fast ATA, Fast ATA-2, ATA-3, ATAPI, Ultra ATA, EIDE |
4 | 16.6 | ATA-2, Fast ATA-2, ATA-3, ATAPI?, Ultra ATA, EIDE |
Естественно, речь идет о внешней скорости передачи данных и определяет скорость интерфейса, а не диска. Необходимо также учитывать (хотя сейчас это уже вряд ли актуально), что PIO mode 3 и 4 требуют использования шины VLB или PCI, так как шина ISA не может обеспечить скорость передачи данных больше 10 МВ/сек. До появления режима DMA-33 максимальная скорость передачи данных у режимов PIO и DMA была одинаковой. Главным недостатком режимов PIO является то, что передачей данных управляет процессор, что существенно увеличивает его загрузку. Зато эти режимы не требуют специальных драйверов и идеально подходят для однозадачных операционных систем. Похоже, однако, что это вымирающий вид…
Direct Memory Access (DMA) — прямой доступ к памяти — собирательное название протоколов, позволяющих периферийному устройству передавать информацию непосредственно в системную память без участия центрального процессора. Современные жесткие диски используют эту возможность в сочетании с возможностью перехватывать управление шиной и самостоятельно управлять передачей информации (bus mastering подробно обсуждался в серии статей по шинам). Существует несколько режимов DMA (DMA modes), которые приведены в таблице. Стоит отметить, что так называемые single word режимы в настоящее время не используются и приведены только для сравнения.
DMA mode | Максимальная скорость передачи (МВ/сек) | Поддерживается стандартами |
---|---|---|
Single word 0 | 2.1 | Всеми |
Single word 1 | 4.2 | Всеми |
Single word 2 | 8.3 | Всеми |
Multiword 0 | 4.2 | Всеми |
Multiword 1 | 13.3 | ATA-2, Fast ATA, Fast ATA-2, ATA-3, Ultra ATA, EIDE |
Multiword 2 | 16.6 | ATA-2, Fast ATA-2, ATA-3, Ultra ATA, EIDE |
Multiword 3 (DMA-33) | 33.3 (66) | Ultra ATA(АТА/66) |
Еще одной забавной вещью, связанной с интерфейсом IDE/ATA, является 32-разрядный доступ к диску. Как уже отмечалось выше, интерфейс IDE/ATA был и остается 16-битным. Резонный вопрос: А почему тогда при отключении драйверов 32-разрядного доступа к диску в Windows скорость работы оного диска падает? Не менее резонный ответ: Во-первых, как работает Windows — отдельный разговор. А во-вторых, шина PCI, на которой в настоящий момент располагаются IDE host-контроллеры, 32-разрядная. Поэтому 16-битная передача по этой шине есть зряшнее расходование пропускной способности. В нормальных условиях host-контроллер формирует из двух 16-битных пакетов один 32-битный и пересылает его дальше по шине PCI (повторяю, я не берусь объяснять, как с диском работает Windows).
Выше встречался термин — режим block transfer. На самом деле это всего-навсего режим, позволяющий передавать несколько команд чтения/записи за одно прерывание. Современные IDE/ATA диски позволяют передавать 16->32 сектора за «одно прерывание». Поскольку прерывания генерируются реже, снижается загрузка процессора и уменьшается доля команд в общем объеме передаваемых данных.
Ресурсы, используемые 3-м и 4-м каналами , могут конфликтовать с другими устройствами (так, IRQ 12 используется мышью PS/2, IRQ 10 — обычно занят сетевой картой).
Как было сказано выше, каждый канал IDE/AТА интерфейса поддерживает подключение двух устройств — master и slave. Конфигурация обычно задается перемычкой на задней стенке устройства. Кроме этих двух позиций там обычно присутствует и третья — cable select. Что же будет, если установить перемычку в это положение? Оказывается, для работы устройств в положении перемычки cable select требуется специальный Y-образный шлейф, центральный разъем которого подключается к системной плате. Крайние разъемы такого кабеля неравноправны — устройство, подключенное к одному разъему, автоматически становится master, к другому — slave (аналогично флопам А и В). При этом перемычки на обоих устройствах должны стоять в положении cable select. Основная проблема такой конфигурации в том, что она экзотична, хотя и является стандартной, и не всеми поддерживается, поэтому и Y-образный шлейф найти достаточно трудно (я, например, его не видел, да и вообще не совсем понятно, зачем это нужно).
- Каждый канал в каждый момент времени может обрабатывать только один запрос к одному устройству. Следующий запрос, пусть даже к другому устройству, будет ожидать завершения текущего. Разные каналы при этом могут работать независимо. Поэтому не стоит подключать два активно используемых устройства (например, два жестких диска), к одному каналу. В идеале каждое IDE-устройство стоит подключать к отдельному каналу (в этом, пожалуй, заключается основное преимущество SCSI).
- Практически все современные чипсеты поддерживают возможность использования различных режимов передачи данных для устройств, подключенных к одному каналу. Однако злоупотреблять этим все-таки не стоит. Два устройства, существенно различающихся по скорости, лучше все-таки разнести по разным каналам.
- Не рекомендуется подключать к одному каналу жесткий диск и ATAPI-устройство (например, CD-ROM). Как было сказано выше, протокол ATAPI использует другую систему команд, и, кроме того, даже самые быстрые ATAPI-устройства много медленнее жесткого диска, что может замедлить работу последнего.
Все вышесказанное, естественно, не является аксиомой, а лишь рекомендациями, основанными на здравом смысле и собственном опыте. Более того, тот же здравый смысл и опыт подсказывают, что если взять 4 IDE-устройства, то они на исправной плате будут работать всегда в любых сочетаниях и при минимуме усилий со стороны пользователя (см. выше, главное, чтобы они попарно были совместимы). И это одно из главных преимуществ IDE перед SCSI.
Требуется ли Bus Mastering IDE для корректного функционирования системы?
Нет. Bus Master IDE — технология, которая может увеличить эффективность Вашей системы, но она не является необходимой.
Каким образом Bus Master IDE влияет на эффективность системы?
- Обычно играет в игры
- Работает с офисными приложениями, не запуская несколько параллельно
- Работает с несколькими приложениями, не использующими дисковые операции
Я решил, что нуждаюсь в технологии Bus Master IDE. Как я могу использовать ее в своей системе?
Если Вы уверены, что Ваша система поддерживает Bus Master IDE, то Вам необходимо установить в используемой операционной системе драйвер Bus Mastering для чипсета, используемого на Вашей материнской плате.
Где взять драйвер Bus Mastering для моего чипсета?
Драйвера Bus Mastering обычно предлагают скачать со своих сайтов производители материнских плат или чипсетов.
В то же время и на нашем сайте собраны ссылки на Bus Master драйвера.
Какие аппаратные средства необходимы для использования Bus Mastering IDE?
Система, в которой возможно использовать Bus Master IDE, включает Bus Master совместимый контроллер IDE, способный пересылать данные между IDE-устройством и системой, используя протокол Bus Master PCI, и Bus Master-совместимое (поддерживающее Multi-Word DMA modes) IDE-устройство.
Все современные чипсеты имеют интегрированные Bus Master-совместимые контроллеры, кроме того существуют отдельные контроллеры IDE c шинами VESA и PCI, поддерживающие Bus Mastering.
Какие чипсеты поддерживают Bus Mastering?
- Intel 430FX, 430VX, 430HX, 430TX
- Intel 440FX, 440LX, 440BX
- VIA VP-1, VPX, VP-2, VP-3
- SiS 5511/5512/5513, 5596/5513, 5571, 5581, 5582, 5597, 5598, 5591/5595
- ALI Aladdin III, IV, IV+, V
- TXPro, HXPro, VXPro
Какие IDE-устройства позволяют применение Bus Mastering?
- IDE
- ATA
- ATAPI
- Enhanced IDE (EIDE)
- Fast ATA, Fast ATA-2
- Single Word DMA Mode 2 (SW2 DMA) с продолжительностью цикла интерфейса IDE 240ns
- Multi Word DMA Mode 1 (MW1 DMA) с продолжительностью цикла интерфейса 180ns
- Multi Word DMA Mode 2 (MW2 DMA) с продолжительностью цикла интерфейса 120ns
Какие устройства не поддерживают Bus Master IDE?
Bus Master IDE не поддерживают не IDE-устройства, например SCSI; IDE-устройства, не поддерживающие DMA transfer modes; IDE-устройства, которые поддерживают только PIO modes; IDE-устройства, которые не обнаруживаются BIOS.
Можно ли использовать Bus Master IDE, если на шине присутствуют как устройства, поддерживающие Bus Mastering, так и устройства, не поддерживающие его?
Bus Master- и не Bus Master-устройства могут быть использованы в одной системе. Однако при этом возможно снижение эффекта от применения Bus Mastering.
Какие требования накладывает на программное обеспечение применение Bus Master IDE?
- 32-битная многозадачная многопоточная операционная система, типа Microsoft Windows 95, Microsoft Windows NT и IBM OS/2
- Драйвер устройства, поддерживающий Bus Mastering. Вообще, для поддержки разных типов оборудования в системе требуются различные драйвера. IDE-драйвер системы должен поддерживать Bus Master IDE
- BIOS должен полностью идентифицировать и конфигурировать все IDE-устройства в системе. Без этого Bus Mastering не сможет корректно функционировать. BIOS должен правильно проинициализировать и сконфигурировать контроллер и все устройства для успешного функционирования системы в целом
- Отсутствие в системе программных и аппаратных конфликтов
Как узнать, поддерживает ли BIOS Bus Master IDE?
Если на вашей материнской плате установлен один из чипсетов, поддерживающий Bus Mastering, то BIOS тоже должен его поддерживать. Если это не так, скачайте на сайте производителя материнской платы и перепрошейте новую версию BIOS.
Какие приложения извлекают пользу из Bus Mastering?
Во-первых, это приложения, которые разработаны для применения непосредственно под операционной системой, поддерживающей Bus Mastering, и используют прямой доступ к IDE-устройствам. Во-вторых, польза извлекается приложениями, работающими с дисковыми накопителями интенсивно. А впринципе, любое приложение, разработанное специально для конкретной применяемой операционной системы будет работать эффективнее при использовании Bus Mastering.
Будут ли при использовании Bus Mastering быстрее работать DOS-игры?
Нет. Приложения, выполняемые в DOS (не из под многозадачной среды), не могут использовать преимущества Bus Mastering.
Можно ли как-то оценить выигрыш от применения Bus Master IDE или удостовериться в работоспособности драйверов?
Многие люди, измеряя производительность системы с Bus Master драйверами и без них, отмечают, что производительность устройства не меняется. Но никто не обещал увеличения быстродействия. Возможно даже, что Ваши тесты покажут замедление работы, например, жесткого диска. Было обещано снижение нагрузки на процессор. Поэтому для того, чтобы оценить эффект от применения Bus Mastering, необходимо измерять загрузку процессора при выполнении дисковых операций, например копировании файлов. Под OS/2 такая проверка сразу показывает падение занятости процессора в 2 раза. Под Windows 95 ситуация сложнее. Дело в том, что имеющиеся стандартные средства измерения загрузки процессора и копирования выигрыша не покажут. Это связано, в первую очередь с тем, что либо Explorer не поддерживает вытесняющую многозадачность, либо System Monitor измеряет загрузку процессора неправильно.
Однако Вы можете скачать программу disksped.exe (54К) для измерения скорости жесткого диска и загрузки процессора при дисковых операциях под Windows 95 и Windows NT. С ее помощью можно оценить выигрыш от применения Bus Master IDE. Использование E-IDE дисков в режиме Bus Master позволяет снизить загрузку процессора с 40-60% при чтении/записи 9 мегабайт в секунду до примерно 5-10%.
Читайте также: