Приобрел себе винчестер у дороги во кустах
Обнаружились бэд-блохи в восемнадцати местах Ахх Ю. Нестеренко |
Как уже говорилось, основную массу устройств этого типа составляют диски
— жесткие и гибкие, магнитные, магнитооптические и оптические. Ассоциация
между понятиями "постоянное запоминающее устройство прямого доступа"
и "диск" столь плотно укоренилась в общественном сознании, что
запоминающие устройства, основанные на иных принципах, например, банки
флэш-памяти, иногда называют "твердотельными дисками". В этой
главе мы будем рассматривать преимущественно устройство магнитных дисковых
накопителей. Принцип устройства дискового накопителя широко известен [Гук
Рис. 9.32. Простая и модифицированная фазовая модуляция
Головка чтения/записи может перемещаться вдоль радиуса диска шаговым
электродвигателем. У жестких дисков головка обычно размещена на рычаге,
напоминающем звукосниматель граммофона. У гибких дисков головка движется
по направляющим под действием червячной передачи, а у CD-ROM — зубчатой
рейки. Накопители, имеющие более одной рабочей поверхности, имеют столько
же головок, сколько и поверхностей, но подача этого блока головок все
равно осуществляется одним двигателем.
Когда блок головок неподвижен, каждая головка может считывать данные,
записанные на диске в виде кольцевой дорожки (track).
Совокупность дорожек всех поверхностей, соответствующих одному положению
блока головок, образует цилиндр (cylinder).
Количество цилиндров у накопителя определяется шириной магнитной головки
(и обусловленной ею шириной намагниченной полосы) и точностью, которую
может обеспечить механика подачи головки. Стандартные приводы 3-дюймовых
дискет имеют 80 дорожек. Количество цилиндров у современных жестких дисков
достигает нескольких тысяч. При всех перечисленных выше, а также при более
сложных современных способах модуляции запись данных на дорожку осуществляется
блоками или секторами.
Секторы аналогичны кадрам, которыми осуществляется передача данных через
последовательные порты и шины. Сектор состоит из заголовка и блока данных.
Заголовок обычно содержит номер дорожки (чтобы
контроллер мог убедиться, что правильно позиционировал головку) и сектора
на дорожке, а иногда также и поверхности. Кроме того, заголовок практически
всегда содержит контрольную сумму или иногда две отдельных контрольных
суммы — для заголовка и для данных. Пространство между секторами заполнено
специальными зонами, служащими для выравнивания и синхронизации (рис.
9.35 и табл. 9.5). Нередко используются также специальные маркеры — последовательности
изменений сигнала, которые не могут появиться при принятой схеме модуляции.
Маркеры используются для отметки начала дорожки или, реже, начала сектора.
Рис. 9.35. Структура дорожки дискеты с двойной плотностью
Перед тем, как диск может быть использован для записи данных, он должен быть отформатирован или, как говорили раньше, размечен — на его дорожки должны быть записаны заголовки секторов с правильными номерами дорожки и сектора, а также, если это необходимо, маркеры. Как правило, при этом же происходит тестирование поверхности диска для поиска дефектов магнитного слоя. Не следует путать эту операцию — физическое форматирование диска — с логическим форматированием, созданием файловых систем. Современные жесткие диски конструктивов АТА и SCSI обычно требуют физического форматирования в заводских условиях.
Таблица 9.5. Структура сектора дискеты с двойной плотностью, цит. по [МикроЭВМ 1988]
Длина в байтах | Описание |
12 | Зона синхронизации |
4 | Адресный маркер |
1 | Номер дорожки |
1 | Номер стороны |
1 т | Номер сектора |
1 | Длина сектора |
2 | Циклическая контрольная сумма |
22 | Зона типа 2 (см. рис. 9.35) |
12 | Зона синхронизации |
4 | Маркер данных |
256/512/1024 | Данные |
2 | Циклическая контрольная сумма |
36-116 т | Зона типа 3 (см. рис. 9.35) |
Рис. 9.36. Диск с переменным количеством секторов на дорожках
Привод магнитного диска, таким образом, состоит из трех разнородных электромеханических и аналоговых устройств. Управление которыми должно осуществляться в строгом согласовании:
Устройство, управляющее всем этим, называется дисковым контроллером и состоит из кодеров и декодеров используемой схемы модуляции, логики формирующей заголовок сектора при записи или проверяющей его целостность при считывании, буфера данных сектора и сдвигового регистра, подключенного к кодеру и декодеру управления головкой (рис. 9.37). Современные контроллеры обычно содержат более сложную логику, обеспечивающую передачу данных в основное ОЗУ компьютера в режиме ПДП (в том числе и распределение/сборку (scatter/gather) — передачу одного сектора или группы секторов в несмежные участки памяти), очередь обслуживаемых запросов, опережающее считывание, отложенную запись и кэширование данных, переадресацию дефектных секторов и др.
Рис. 9.37. Схема контроллера диска
Контроллер гибких дисков ДВК
В качестве простейшего дискового контроллера рассмотрим микросхему К1801ВП1-097
[МикроЭВМ 1988] (Эта микросхема является советским функциональным аналогом
микросхемы контроллера гибких магнитных дисков, разработанной фирмой DEC
для использования в мини- и микрокомпьютерах семейства PDP-11. К сожалению,
автору не удалось найти маркировку оригинальной микросхемы и ссылку на
документацию о ней).
Микросхема допускает подключение четырех приводов 5-дюймовых гибких дисков
и содержит в себе порты управления основным и шаговым электродвигателями
привода, сдвиговый регистр, модулятор и демодулятор МФМ, логику обнаружения
маркеров, генератор циклической контрольной суммы и интерфейс системной
шины Q-Bus. У микросхемы есть два 16-разрядных регистра, регистр управления
и регистр данных. Описание битов регистра управления приведено в табл.
9.6.
Таблица 9.6. Управляющий регистр К1801ВП1-097
Бит | Описание | Комментарий |
00 (W) | Выбор накопителя 0 | — |
00 (R) | Дорожка 0 | Головка чтения/записи установлена на дорожку 0 |
01 (W) | Выбор накопителя 1 | — |
01 (R) | Накопитель готов | — |
02 (W) | Выбор накопителя 2 | — |
02 (R) | Запись запрещена | На дискете установлена защита записи |
03 (W) | Выбор накопителя 3 | — |
04 | Включение двигателя | — |
05 | Поверхность | Если 1, запись (чтение) происходите верхней поверхности диска |
06 | Направление шага | При записи 1 , направление к оси диска |
07 (W) | Шаг | При записи 1 в этот бит, головка перемещается на один шаг и бит очищается |
07 (R) | Данные готовы | Контроллер выставляет этот бит, когда считано или записано очередное слово данных. ЦПУ должно прочитать или записать следующее слово сектора |
08 | Частичный сброс | |
09 | Запись маркера | |
10 | Включение внешней схемы прекоррекции фазовых искажений | |
14 | Успех операции | 0, если операция завершилась ошибкой |
15 | Начало дорожки |
Видно, что микросхема предусматривает работу с ней центрального процессора в режиме опроса. Более сложный контроллер КМД (Контроллер МиниДисков), основанный на этой микросхеме, содержит микропроцессор, ПЗУ с программой для него и 2Кб ОЗУ (которое может использоваться и для промеж, точных данных программы микропроцессора, и для хранения самих данных передаваемого блока) [МикроЭВМ 1988]. Работа с этим контроллером осуществляется посредством двух регистров, команды/состояния и данных. Центральный процессор записывает в эти регистры команду (табл. 9.7) и адрес блока параметров в основном ОЗУ. Контроллер в режиме ПДП считывает блок параметров и пытается выполнить операцию, передавая данные, если это необходимо, также в режиме ПДП. Указатель на блок данных содержится в блоке параметров. Одной операцией можно прочитать или записать несколько последовательных секторов. После завершения передачи контроллер генерирует прерывание.
Таблица 9.7. Список команд контроллера КМД, цит. по [МикроЭВМ 1988]
Код | Мнемоника | Описание |
0h | RD | Чтение |
1h | WR | Запись |
2h | RDM | Чтение с маркером |
3h | WRM | Запись с маркером |
4h | RDTR | Чтение дорожки |
5h | RDID | Чтение заголовка |
6h | FORMAT | Форматирование дорожки |
7h | SEEK | Подача головки |
8h | SET | Установка параметров |
9h | RDERR | Чтение состояния и ошибок |
Fh | LOAD | Загрузка |
Контроллер жестких дисков ST506
Более сложный контроллер ST506 был разработан фирмой Western Digital в
конце 70-х годов прошлого века для управления жесткими дисками, подключаемыми
к микропроцессорным системам. Этот контроллер и его усовершенствованная
версия, ST412, широко применялись для подключения жестких дисков к IBM
PC и совместимых с ними компьютерах [citforum.ukrpak.net IDE, Гук 2000,
PC Guide IDE].
Контроллер ST506 допускал подключение двух жестких дисков емкостью до
40МЬ, использующих модифицированную частотную модуляцию, а более поздние
версии контроллера — групповую модуляцию RLL. Как и описанный выше КМД,
контроллер содержал логику управления мотором шпинделя и подачей головок,
буфер для одного сектора и схемы модуляции и демодуляции МЧМ. Диски присоединялись
к контроллеру двумя плоскими кабелями: один, с 34-мя проводами, использовался
для передачи сигналов управления двигателями, а второй, 20-проводной —
для передачи модулированных сигналов МЧМ.
Центральному процессору контроллер ST506 доступен в виде двух блоков регистров,
управляющего и командного. Блок управляющих регистров размещается по адресам
Ox3F4-Ox3F7, а блок командных— по адресам 1FO-1F7 (табл. 9.8).
Управляющие регистры используются для доступа к регистрам данных и статуса
без подачи контроллеру сигнала о том, что регистр прочитан (смысл этого
станет ясен далее). Пожалуй, единственный самостоятельно полезный бит
в этих регистрах управляет разрешением прерываний от контроллера. Основная
работа с контроллером происходит через блок из восьми командных регистров,
один из которых является регистром данных.
При исполнении команды записи контроллер подает головку к дорожке, указанной
регистрами CY и DK, генерирует прерывание и выставляет сигнал DRQ (табл.
9.9), сигнализируя процессору, что готов принять данные. Затем процессор
производит 512 операций записи в порт данных, заполняя буфер. Контроллер
выполняет запись, генерирует прерывание и, если счетчик секторов еще не
сравнялся с нулем, увеличивает номер сектора и снова выставляет сигнал
DRQ.
Операция чтения выполняется аналогично, с той лишь разницей, что контроллер
сначала считывает сектор, и лишь потом выставляет DRQ. Циклы чтения и
записи регистра данных, таким образом, приводят к увеличению счетчика
буфера. Набор команд контроллера приведен в табл. 9.10.
Таблица 9.8. Командные регистры контроллера ST506, цит. по [chip.ms.mff.cuni.cz АТА2]
Адрес | Функция (чтение) | Функция (запись) | Код |
0x1 F0 | Данные (младш.) | Данные (младш.) | |
0x1 F1 | Ошибка | Прекомпенсация | PC |
0x1 F2 | Счетчик секторов | — " — | SC |
0x1 F3 | Номер сектора | — " — | SN |
0x1 F4 | Цилиндр (младш.) | — " — | CY |
0x1 F5 | Цилиндр (старш.) | — " — | CY |
0x1 F6 | Устройство/поверхность | — " — | DH |
0x1 F7 | Статус | Команда |
Таблица 9.9. Биты регистра статуса ST506, цит. по [chip.ms.mff.cuni.cz IDE]
Бит | Мнемоника | Описание |
7 | BUSY | Устройство занято |
6 | DRDY | Устройство готово принимать команды |
5 | DWF | Ошибка записи |
4 | DSC | Подача головки завершена |
3 | DRQ | Запрос данных |
2 | CORR | Исправимая ошибка при чтении данных |
1 | INDEX | Маркер начала дорожки |
0 | ERROR | Ошибка |
Таблица 9.10. Команды контроллера ST506, цит. по [chip.ms.mff.cuni.cz IDE]
Код | Описание | PC | SC | SN | CY | DH |
90h | Диагностика привода | — | — | — | — | D+ |
50h | Форматировать дорожку | — | — | — | V | V |
20h | Чтение секторов с повтором | — | V | V | V | V |
21h | Чтение секторов | — | V | V | V | V |
40h | Проверка секторов с повтором | — | V | V | V | V |
41h | Проверка секторов | — | V | V | V | V |
1Xh | Возврат к дорожке | — | — | — | — | D |
7Xh | Подача головки | — | — | — | V | V |
30h | Запись секторов с повтором | — | V | V | V | V |
31h | Запись секторов | — | V | V | V | V |
V— используется значение регистра
D — используется только бит выбора диска
D+ — независимо от бита выбора диска, реагируют оба диска
Контроллеры жестких дисков ESDI, IDE,
EIDE
Дальнейшее совершенствование ST506 шло в направлении переноса функции
контроллера на сам жесткий диск. Первым шагом стал интерфейс ESDI, предложенный
фирмой IBM в 1985 году. В ESDI модулирование сигнала выполнялось не контроллером,
а платой, установленной на диске. Это позволило, во-первых, использовать
жесткие диски со схемами модуляции, отличными от МЧМ и RLL и, во-вторых,
увеличить допустимую длину кабелей до трех метров. Контроллер ESDI по
регистрам и набору команд был полностью совместим с ST506/412, но обеспечивал
работу с дисками большей емкости и большей производительности.
Следующий, более радикальный, шаг был сделан в следующем году фирмами
Western Digital и Compaq, предложившими перенести весь контроллер на жесткий
диск. Соответствующий конструктив был назван IDE (Integrated Drive Electronics
— интегрированная на приводе электроника).
40-жильный плоский кабель IDE представляет собой, фактически, расширение
шин адреса и данных ISA. По нему передаются 16 бит данных и пять линий
адреса. Первые две линии адреса выбирают группу регистров — контрольный
или командный блок регистров, расположенных по тем же адресам шины ISA,
что и соответствующие регистры ST506. Последние три линии выбирают один
из регистров соответствующей группы и через линии данных кабеля подключают
его к шине данных ISA.
IDE, как и ST506, допускает подключение двух жестких дисков, Каждый из
дисков имеет свой контроллер и свои блоки регистров. Когда ЦПУ производит
запись в эти регистры, она происходит в регистры обоих контроллеров. Однако
на запросы чтения и, тем более, исполнения команды откликается только
тот контроллер, который выбран регистром он. Эта весьма своеобразная архитектура
позволила сохранить полную программную совместимость с контроллером ST506
при полном же изменении конструктива. Основным недостатком этой архитектуры
является тот печальный факт, что пока один диск отрабатывает команду или
передает данные, обращения ко второму диску невозможны.
IDE несколько позднее получил статус стандарта ANSI под названием ATA
(AT Attachment— [интерфейс] присоединения к IBM PC/AT) [www.t13.org],
и до сих пор является основным способом подключения жестких дисков к настольным
компьютерам и иногда даже к маломощным серверам, причем не только на основе
процессоров х86, но и PowerMac, SPARCStation и др.
Современные версии стандарта поддерживают обмен 16-разрядными данными
(при нормальной отработке команды код ошибки не нужен, а прекомпенсация
современными контроллерами вообще не используется, поэтому для данных
можно использовать регистры 0x1 FO и 0x1 F1, образующие при этом единый
16-разрядный регистр), автоидентификацию геометрии и других параметров
жестких дисков, логическую адресацию блоков (LBA — Logical Block Addressing,
когда регистры SN, CY и 4 младших бита он образуют линейный 28-битный
адрес сектора), работу в режиме ПДП и передачу данных со скоростями до
60 Мбит/с [Гук 2000, citforum.ukrpak.net IDE, PC Guide IDE, www.t13.org].
Расширение протокола ATAPI (ATA Packet Interface) пакетный интерфейс ATA
предусматривает также возможность управления недисковыми устройствами
(CD-ROM, стриммерами, магнитооптическими дисками) путем передачи через
регистр данных 12-байтовых блоков команд, аналогичных командам SCSI.