Технические детали
Как работает ATA(-2)?
Для понимания базовых концепций работы современных дисков ATA
требуется сначала разобраться с основами технологии работы дисков. Когда операционная система читает данные с диска или записывает их, BIOS выдает команды и передает их винчестеру. Для операционных систем, отличающихся от DOS, ОС обычно заменяет функции BIOS своими встроенными функциями, но принцип
работы от этого не меняется.
Способы передачи команд, их интерпретации, отклика на них и т. п. формируют основу Advanced ATA. Существуют 7 регистров (Task File), которые BIOS использует для чтения/записи при создании команд. Восьмой регистр используется для чтения и записи данных. Сигналами чтения/записи управляет BIOS, но их тактирование определяется контроллером и спецификациями ATA, задающими скорость отклика на те или иные сигналы. Существует 4 режима программируемого ввода/вывода (Programmed Input/Output - PIO) и 3 режима прямого доступа к памяти (Direct Memory Access - DMA). Скорость передачи (transfer rate) определяется быстротой работы регистров и частотой тактирования операций чтения/записи.
Что такое режимы PIO?
Режим программируемого ввода-вывода (PIO) определяет скорость обмена данными с винчестером. В самом медленном режиме (PIO mode 0) продолжительность цикла данных не превышает 600 нс. В каждом цикле осуществляется перенос 16 бит. Один сектор, содержит 256 слов (16 бит = 1
слово); 2048 секторов составляют 1 мегабайт. Простой расчет
1 цикл 1 сектор 1 Мегабайт 2000
* ---- * ------ * -------- = 3.3Mбайт/сек
600нс 256 слов 2048 сект. 600нс
показывает скорость обмена данными. Таким образом, максимальная скорость обмена в режиме 0 может составлять 3.3 мегабайта в секунду.
В таблице 5 приведен список параметров для остальных режимов:
Режим PIO | Тактирование | Скорость обмена | Примечания |
0 | 600нс | 3.3МБайт/сек | старый режим |
1 | 383нс | 5.2МБайт/сек | старый режим |
2 | 240нс | 8.3МБайт/сек | |
3 | 180нс IORDY | 11.1МБайт/сек | |
4 | 120нс IORDY | 16.6МБайт/сек |
Режимы ATA-2 (3 и 4) используют аппаратное управление потоком данных (IORDY). Это означает, что диск может использовать линию IORDY для замедления контроллера при необходимости. Контроллеры, не поддерживающие IORDY, могут приводить к потере данных при использовании быстрых режимов PIO; в этом случае следует использовать менее скоростные режимы. При получении команды Identify Drive диск возвращает, наряду с другими параметрами, информацию о поддерживаемых режимах PIO и DMA [Эти параметры можно определить с помощью программы WDTBLCHK.EXE, которую вы можете найти на приложенной к книге дискете.] .
Что такое режимы DMA?
DMA (прямой доступ к памяти - Direct Memory Access) означает,что данные передаются непосредственно между диском и памятью без использования процессора, в отличие от PIO. В многозадачных системах, подобных OS/2
или Linux, режим DMA оставляет процессор свободным в процессе обмена с диском и позволяет использовать его для решения других задач. При работе в DOS/Windows процессор вынужден ждать окончания обмена с диском, поэтому использование режимов DMA в этом случае не столь эффективно.
Существует два различных типа прямого доступа к памяти: DMA и busmastering DMA. Стандартный DMA использует установленный на системной плате контроллер DMA для выполнения арбитража запросов задач, захвата шины и передачи данных. В
случае busmastering DMA, перечисленные операции выполняются контроллером. Безусловно, это увеличивает стоимость контроллера.
К несчастью, в системах ISA используются старые и медленные контроллеры DMA, неэффективные при работе с современными дисками. Платы VLB не могут использовать режим DMA и должны быть busmastering DMA.
Использование обычного режима DMA возможно только с контроллерами EISA и PCI: для EISA тип 'B' будет обеспечивать скорость обмена 4MB/s, для PCI тип 'F' от 6 до 8MB/s. Сегодня качественная программная поддержка DMA достаточно редка, как и контроллеры, поддерживающие DMA.
Возможные режимы DMA перечислены в таблице 6.
Режим | Тактирование | Скорость обмена | Примечания |
Single word | |||
0 | 960нс | 2.1МБайт/сек | АТА |
1 | 480нс | 4.2МБайт/сек | |
2 | 240нс | 8.3МБайт/сек | |
Multiword | |||
0 | 480нс | 4.2МБайт/сек | АТА |
1 | 150нс | 13.3МБайт/сек | |
2 | 120нс | 16.6МБайт/сек |
как способ обмена с диском без реального прямого доступа к памяти. В
таких случаях режимы DMA используются просто как дополнение к режимам PIO.
Адреса регистров Task File и ввода/вывода
Регистры Task File и регистр данных первичного канала ATA используют следующие адреса портов ввода/вывода:
Регистр | Функция чтения | Функция записи |
1F0 | Чтение данных (16 бит) | Запись данных (16 бит) |
1F1 | Не определено | Set Features Data |
1F2 | Состояние счетчика секторов | Счетчик секторов записи для установки команд |
1F3 | Положение стартового сектора | Положение стартового сектора для установки команд |
1F4 | Положение Cyl-low | Положение Cyl-low для установки команд |
1F5 | Положение Cyl-high | Положение Cyl-high для установки команд |
1F6 | Выбор устройства/головки | Выбор устройства/головки для установки команд |
1F7 | Состояние устройства | Команда устройству |
Что делает контроллер ATA-2?
Платы ATA-2 должны поддерживать по крайней мере режимы 0 и 3 PIO, обычно они поддерживают и другие режимы, а также обеспечивают корректное тактирование для каждого из этих режимов. Поскольку спецификации тактирования достаточно сложны, необходима высокая гибкость для корректной реализации стандарта ATA-2.
На рисунке 6 приведены диаграммы сигналов для 8- и 16-битового обмена данными.
|------------ t0 ------------------------|
__________________________________________ |
Address Valid *1 _____/ \________
|-t1-|----------- t2 -----------|-t9-| |
| |____________________________|---t2i-----|_
DIOR-/DIOW- ____________/ \_____________/
| | | |
| | ________|__ -| |-t8
Write Data *2 --------------------------------___________------------
| | |--t3--| | |
| | -|t4|- |
| | _______|___ ____ |
Read Data *2 ---------------------------------___________X____------
-|t7|- | | -|t6 |- | |
| | -| tA |- |-t5--|-t6Z--|
| |___________________________________________|
IOCS16- ________/ | | \____
| -|tRd|- |
_________________|___________________|___________________
IORDY XXXXXXXXXXXXXXXXX____________________/
|-------tB--------|
* 1 Адреса устройств содержат сигналы CS0-, CS1- and DA2-0
*2 данные содержат сигналы DD0-15 (16-бит) или DD0-7 (8-бит)
Рисунок 6
На рисунке t0 означает продолжительность цикла чтения/записи, наиболее значимый параметр для определения скорости PIO. Как вы можете видеть число различных режимов PIO и DMA несколько больше, чем значений t0. Создание недорогого интерфейса, полностью соответствующего спецификации ATA-2, является достаточно сложной задачей. Наиболее часто используемым решением является полное программирование процесса тактирования; к несчастью, способ программирования контроллеров ATA не стандартизирован и они несовместимы с этой точки зрения. Вследствие этого, для каждого контроллера приходится использовать специфические для каждой операционной системы драйверы, чтобы обеспечить высокую производительность дисковых операций.
Что такое блочный режим?
Использование команд множественного чтения, записи, уменьшающее число прерываний основного процессора.
Вместо явного увеличения скорости обмена Fast ATA и многие другие драйверы устройств допускают команды множественного чтения/записи, которые увеличивают число секторов, передаваемых без использования прерываний. Это снижает нагрузку на хост, поскольку каждое прерывание заставляет процессор
переключать контекст, проверять устройство и устанавливать скорость передачи (или передавать данные в случае PIO).
Команды Read Multiple Command (0xC4) и Write Multiple Command (0xC5) являются командами на уровне диска и позволяют передавать несколько секторов данных без использования линии запроса прерывания IRQ на диске, сообщающей процессору о запросе от винчестера.
Линия IRQ используется в тех случаях, когда:
если кэширование при записи запрещено, линия IRQ не будет освобождена до тех пор, пока все данные не будут записаны на диск.
При обычном чтении или записи прерывания могут постоянно приостанавливать работу CPU и, в зависимости от процессора и обрабатываемой задачи (многозадачная ОС, Unix, и т.п.), может возникать та или иная задержка при обработке запросов диска. Множественное чтение/запись позволяет передавать большое число секторов (от 2 до 128) в один прием, обеспечивая ускорение операций до 30%.
В однозадачных системах, подобных DOS, любое увеличение производительности сверх нескольких процентов обычно говорит о плохом управлении кэш-буферами для части диска.
Замечание:
размер блока, оптимальный для скорости обмена с диском, может не быть оптимальным для производительности системы в целом! Например, в файловой система DOS (FAT) предпочтительный размер блока равен размеру кластера на диске.
Что такое LBA?
Режим LBA использует линейную адресацию секторов, начиная с сектора 1, головки 0, цилиндра 0 как LBA 0 и заканчивая последним физическим сектором диска, который, например, на стандартном диске 540 Мб имеет номер LBA 1065456. Эта новинка появилась в ATA-2, но такая адресация всегда использовалась в стандарте SCSI.
LBA уменьшает загрузку CPU поскольку операционная система адресует сектора линейно (LBA), и эти адреса обычно пересчитываются в CHS (цилиндр-головка-сектор) для обращения к диску. При использовании же LBA, пересчета адресов не требуется.
Что общего и в чем различия между ATAPI и ATA(-2)?
Ради совместимости с программами, не поддерживающими ATAPI, которые могут давать ошибки при работе с устройствами ATAPI, интерфейс ATAPI не используется до тех пор, пока не будет получена специальная последовательность команд. После активации устройство использует командный протокол, радикально отличающийся от используемого винчестерами.
Смысл этого заключается в том, что 8-битовые регистры Task File, используемые винчестерами, недостаточно велики для поддержки некоторых структур команд CD-ROM. Следовательно, ATAPI-устройства поддерживают только минимум команд ATA.
Для реализации большинства своих функций устройства используют транспортный протокол ATAPI (ATAPI Transport Protocol), при котором через регистр данных (Data Register) передаются пакеты длиной по крайней мере 12 байт. Эти пакеты команд образованы на основе команд SCSI, что упрощает переписывание SCSI-драйверов приводов CD-ROM и стриммеров для стандарта ATAPI.
Остерегайтесь того, что интеллектуальные (например, кэшированные) контроллеры, не поддерживающие ATAPI будут конфликтовать с пакетными командами. Традиционно регистры данных используются только для передачи 512-байтовых секторов;
12-байтовые пакеты команд полностью отличаются от них и должны передаваться контроллером другим способом.
Чем отличается второй порт?
В принципе, ничем. Второй порт IDE зарезервирован в адресном пространстве портов ввода/вывода PC (базовый адрес 170, IRQ 15), и адаптеры, которые можно сконфигурировать для использования с такими параметрами, допускается устанавливать в компьютер, даже если BIOS не поддерживает второго порта IDE. Поскольку такая возможность является частью спецификации IDE, здесь на самом деле нет ничего нового, за исключением того, что подключение стриммеров и приводов CD-ROM к адаптерам ATA превратило поддержку четырех устройств из излишества в необходимость.
На самом деле есть другая причина использования второго порта для устройств ATAPI. Это значительное число расширенных возможностей, поддерживаемых дисковыми интерфейсами, таких, как буферы упреждающего чтения и обратная запись, которые могут появляться из-за совместимости с ATAPI.
Это означает, что если драйверы интеллектуальных портов ATA-2 не поддерживают ATAPI или просто не функционируют должным образом они могут создавать массу проблем. Способом избежать этих проблем является использование второго порта, обеспечивающего только базовые функции ATA.
Наконец, устройства ATAPI на первом порту будут вызывать проблемы при использовании драйверов Windows FastDisk.
Как происходит трансляция?
Сегодня это может осуществляться, грубо говоря, тремя способами:
стандартная адресация CHS, расширенная адресация Extended CHS
и LBA. Как вы увидите, трансляция не реализует LBA автоматически.
1. Стандартная трансляция.
Обмен между диском, BIOS и операционной системой осуществляется по следующей схеме:
Физическая геометрия T1 (внутреннее == использование) | Логическая геометрия диска (CHS) | === | Логическая геометрия диска (CHS) |
цилиндра), что в общей сложности ограничивает размер дисков (504MB).
CHS означает адресацию цилиндр-головка-сектор.
2. Расширенная адресация CHS
Физическая геометрия T1 (внутреннее == использование) | Логическая геометрия диска (CHS) | T2 === | Логическая геометрия диска (CHS) |
Трансляция осуществляется в два приема (T1 и T2). Этап T2 выполняется BIOS. Эта процедура позволяет преодолеть барьер 528MB, поскольку не накладывается
одновременных ограничений BIOS и IDE: логическая геометрия не позволяет использовать более 16 головок, но число цилиндров не ограничено 1024.
В трансляционной геометрии - наоборот.
В большинстве BIOS расширенная CHS-трансляция обозначается как опция 'LARGE'. Отметим, что геометрия, которую вы задаете в программе установки параметров BIOS (setup), является логической геометрией, а не трансляционной.
3. Логическая адресация блоков (Logical Block Addressing -
LBA)
Здесь логическая геометрия целиком заменяется одним номером блока.
Диск | BIOS | ОС и приложения | |
Физическая геометрия T1 (внутреннее == использование) | Линейный номер блока (LBA) | T2 === | Трансляц. геометрия (CHS) |
Физическая геометрия T1 (внутреннее == использование) | Линейный номер блока (LBA) | T2 === | Трансляц. геометрия (CHS) |
BIOS с трансляцией можно реализовать на системной плате или на плате контроллера. В общем случае используется принятая по умолчанию геометрия диска и, если число цилиндров превышает 1024, номер цилиндра делится на подходящее число (степень 2), а число головок умножается на то же число. Возьмем в качестве примера диск 540 Мб с 1057 цилиндрами и 16 головками. DOS может использовать только 1024 цилиндра, но умеет адресовать до 255 головок. BIOS с трансляцией будет передавать ОС через прерывание INT 13 измененную геометрию с 528 (1057/2 (округленно) цилиндрами и 32 головками (16*2). В этом случае при запросе к диску BIOS будет выполнять обратную трансляцию или вычислять LBA-номер (если режим LBA включен). Такой способ позволяет использовать диски размером до 8 Гб.
Детальное описание трансляции.
Если размер диска не превышает 528MB, должна использоваться логическая геометрия, как указано в словах 53-58 Identify Device (не более 1024
цилиндров, не более 16 головок и 63 секторов). Такие диски допускают прямую адресацию без использования трансляции.
Для дисков с размером более 528MB, CHS-адреса, которые BIOS получает от операционной системы, должны конвертироваться в адреса Extended CHS
или LBA. Рассмотрим вариант использования Extended CHS. Во-первых, при установке параметров BIOS, должно быть определено значение N. Это число используется для преобразования геометрии диска в геометрию, поддерживаемую BIOS для прерывания INT 13H. Этот интерфейс требует, чтобы значение Cyl
было не более 1024. Число цилиндров (слово 1 Identify Device) делится на N, тогда как число головок (слово 3 Identify Device) умножается на это число. N может иметь значения 2, 4, 8, ..., (степени 2).
Во-вторых, в большинстве BIOS с трансляцией используется приведенный ниже алгоритм используемый при работе с INT 13H:
eCyl = ( Cyl * N) + ( Head / dHead );
eHead = ( Head % dHead );
eSector = Sector;
Для примера предположим, что диск имеет 2000 цилиндров, 16 головок и 63 сектора (Identify Words 1, 3, 6), а значение N=2. BIOS сообщает DOS, что диск имеет 1000 цилиндров, 32 головки и 63 сектора при вызове INT 13H с AH=08H. Общее число секторов равно 2016000.
Цилиндр | Головка | Сектор | Цилиндр | Головка | Сектор | LBA | ||
0 | 0 | 1 | 0 | 0 | 1 | 0 | ||
... | ... | ... | ... | ... | ... | ... | ||
500 | 0 | 1 | 1000 | 0 | 1 | 1008000 | ||
500 | 15 | 63 | 1000 | 15 | 63 | 1009007 | ||
500 | 16 | 1 | 1000 | 0 | 1 | 1009008 | ||
500 | 31 | 63 | 1000 | 15 | 63 | 1010015 | ||
501 | 0 | 1 | 1002 | 0 | 1 | 1010016 | ||
... | ... | ... | ... | ... | ... | ... | ||
999 | 31 | 63 | 1999 | 15 | 63 | 2015999 |
Что такое Enhanced Disk Parameter Table?
В стандартных BIOS фиксированная таблица параметров (Fixed Disk Parameter Table - FDPT) содержит информацию о геометрии дисков.
Эта таблица более или менее совпадает с таблицей дисков CMOS. Программа, которая хочет использовать низкоуровневые обращения к диску, минуя DOS, обычно вызывает функции INT13.
Расширенная таблица параметров (Enhanced Disk Parameter Table - EDPT) является расширением стандартной таблицы, допускающим использование неопределенных полей для обеспечения информации об используемом способе трансляции. Она использует сигнатуру (A0 в байте 3) и контрольную сумму (байт 15) для того, чтобы программы не могли ошибиться при произвольном доступе к EDPT. Этот способ является более или менее общепринятым для BIOS с трансляцией.
Стандарт Phoenix Enhanced BIOS задает ряд расширений INT13 и 16-байтовое расширение FDPT. Более поздние версии содержат детальную информацию о текущих режимах PIO или DMA, использовании блочного режима, адресации LBA или (E)CHS, 32-битовой передаче, типе среды (съемный диск, CD-ROM), базовом адресе порта управления и IRQ. Иными словами, таблица описывает все новые возможности ATA и достаточно гибка для работы более, чем с 4 устройствами, нестандартными адресами портов и IRQ. Корректная поддержка перечисленных особенностей важна для использования технологии Plug'n'Play с устройствами ATA. Спецификация EIDE BIOS компании Western Digital не содержит полного набора перечисленных функций.
Что делает программа Disk Manager?
Disk Manager 6.x (и выше) является программой, обеспечивающей трансляцию, требуемую для работы с дисками, имеющими более 1024 цилиндров в среде DOS/Windows. Это достигается установкой специального оверлейного модуля (Dynamic Drive Overlay - DDO) для трансляции параметров диска. При загрузке этого модуля в память компьютера он обеспечивает базовые функции трансляции без обращения к EDPT или расширенным функциям INT13.
Если Disk Manager (DM) использовался только для форматирования ведомого (slave) диска, DDO можно установить в файле config.sys как обычный драйвер (device=dmdrvr.bin). С другой стороны, использование DM на ведущем (master) диске недостаточно просто с технической точки зрения.
Поскольку DOS
загружается с ведущего диска, вы должны загрузить DDO до того, как начнете работать с диском, существует единственный способ сделать это - загрузка драйвера до загрузки ОС. Для реализации этой возможности требуется вносить изменения в Master Boot Record (MBR).
Эта схема работает хорошо, но имеет ряд недостатков. Во-первых, DDO должен быть загружен до операционной системы, что не позволяет загрузить ОС с дискеты. При попытке загрузки с дискеты DDO не может загрузиться и раздел
диска будет недоступен. Это затруднение можно преодолеть, включив в файл config.sys на загрузочной дискете строку "device=dmdrvr.bin". Во-вторых (это более важно), недостатком является то, что при установке ОС переписывается MBR, после чего модуль DDO становится недоступным и вы не сможете получить доступ к диску до тех пор, пока не создадите новую MBR с помощью программы DiskManager. В-третьих, ошибка в секторе с DDO приведет к невозможности загрузки операционной системы и доступа к диску. Хотя переписать сектор с DDO не составляет труда (с помощью программы DMCFIG.EXE), возникновение такой ситуации может явиться предвестником серьезных проблем (например, вирусной атаки). Вы можете в таких случаях обращаться в службу технической поддержки фирмы Ontrack (tech@ontrack.com).
Преимущество форматирования ведущего диска с помощью DM вместо загрузки DDO из config.sys заключается в том, что вы можете в этом случае использовать 32-битовый доступ к файлам Windows for Workgroups на обоих дисках - при использовании dmdrvr.bin ведомый диск допускает только 16-битовый доступ.
Disk Manager версий 6.x имеет некоторые дополнительные недостатки, которые были исправлены в версии 7. К ним относится неполная совместимость с драйверами большинства плат VLB ATA(-2), затруднения при работе с устройствами, не являющимися винчестерами (ATAPI) и отсутствие поддержки цепочек. Disk Manager v6.x поддерживал только DOS (и Windows 3.x), поскольку использовалась нестандартная таблица разделов (v7.x более совместима с OS/2 Warp, Windows NT и Windows 95; Linux можно успешно установить, но полная совместимость не гарантируется).
На самом деле, Windows 95 будет поддерживать Disk Manager версий 6.x и выше, также как OS/2 Warp и Windows NT 3.5.1. IBM и MicroSoft обеспечили коррективы, позволяющие старым версиям OS/2 Warp и Windows NT работать с Disk Manager v6.x.
Напоследок о дисковых утилитах. Если программа напрямую обращается к функциям INT13, она не будет видеть DDO и может привести к разрушению диска.
Как работает 32-битовый доступ в Windows?
Режим 32-битового доступа к дискам (32BDA), известный также как FastDisk, представляет собой набор драйверов для работы в защищенном режиме, обеспечивающих вызов функций INT13 через интерфейс защищенного режима. Для более поздних дисковых контроллеров разработаны виртуальные драйверы устройств (VxD).
Windows поставляется с таким устройством - *wdctrl. К несчастью, это устройство поддерживает только контроллеры, совместимые со стандартом WD1003, исключая винчестеры SCSI, ATA-2, с трансляцией CHS, с числом цилиндров более 1024 и даже не поддерживает некоторые особенности ATA. Если при инициализации обнаруживается одно из перечисленных устройств, загрузка прерывается. Для современных компьютеров это означает чрезвычайно редкое использование *wdctrl, вместо этого применяются обычно внешние драйверы виртуальных устройств (VxD).
32BDA имеет некоторые преимущества по сравнению с доступом к диску через BIOS. Во-первых, драйверы FastDisk VxD являются реентерабельными, что позволяет Windows использовать виртуальную память в DOS-сессиях. Использование виртуальной памяти без 32BDA будет приводить к зависанию при возникновении ошибок page fault в процессе выполнения программ BIOS. Поскольку функции BIOS не реентерабельны, невозможно использовать BIOS для повторного считывания страницы с диска, пока первый вызов BIOS не будет прерван. 32BDA позволяет Windows управлять памятью при открытии одной или нескольких сессий DOS.
Вторым преимуществом 32-битового доступа является то, что он оставляет всего два (сравнительно медленных) переключения между стандартным и защищенным режимом на каждое обращение к диску.
Возьмем, к примеру, обращение к диску прикладной программы DOS. В отсутствие 32BDA каждый такой вызов будет формировать приведенную ниже последовательность событий:
Использование 32-битового доступа к диску заменяет шаги 6-8 единственным вызовом FastDisk VxD. Это позволяет избавиться от двухкратного переключения режима, что обычно приводит к некоторому росту производительности дисковых операций.
[] [] []