Теория операционных систем



 

Запоминающие устройства прямого доступа

  Приобрел себе винчестер у дороги во кустах Обнаружились бэд-блохи в восемнадцати местах
Ахх
Ю. Нестеренко

Как уже говорилось, основную массу устройств этого типа составляют диски — жесткие и гибкие, магнитные, магнитооптические и оптические. Ассоциация между понятиями "постоянное запоминающее устройство прямого доступа" и "диск" столь плотно укоренилась в общественном сознании, что запоминающие устройства, основанные на иных принципах, например, банки флэш-памяти, иногда называют "твердотельными дисками". В этой главе мы будем рассматривать преимущественно устройство магнитных дисковых накопителей. Принцип устройства дискового накопителя широко известен [Гук 2000].
Для хранения данных служит диск, покрытый ферромагнитным слоем. В современных накопителях запись осуществляется на обе стороны диска. Многие приводы с неудаляемыми дисками имеют несколько дисков. Диск может быть как гибким, так и жестким. Диск насажен на ось, называемую шпиндель.
В зависимости от способа крепления, диски делятся на съемные (удаляемые) и несъемные (фиксированные). В действительности, съемность накладывает серьезные ограничения не только на крепление диска к оси, но и на конструкцию блока головок и привода в целом, а также предъявляет определенные требования к контроллеру — тот должен отслеживать наличие диска в приводе и факт его замены. Несъемные диски, как правило, помещаются в герметичный корпус, защищающий головки и поверхность диска от пыли и других вредных атмосферных воздействий.
Включение двигателя и раскрутка шпинделя до рабочей скорости обязательно производятся до начала форматирования диска или обмена данными с ним. Контроллеры съемных дисков обычно останавливают мотор в то время, когда накопитель не используется, контроллеры же дисков несъемных обычно останавливают шпиндель только при выключении питания.
Запись на магнитный диск и считывание данных с него осуществляется головкой чтения-записи, по принципу действия похожей на головку обычного бытового магнитофона. Головка состоит из ферромагнитного сердечника, на который намотан провод. Сердечник имеет разрез, как раз в той части, которая ближе всего к поверхности диска. Подавая ток по проводу, можно создавать в сердечнике и, соответственно, в разрезе сердечника магнитное поле, которое будет намагничивать диск. Таким образом, осуществляется запись данных. С другой стороны, когда направление намагниченности проходящего под головкой участка диска меняется, в проводах возникает индуктивный ток — детектируя его, можно осуществлять считывание. В отличие от простой передачи по проводу, головка считывает не сам записанный сигнат, а его производную по времени (в аналоговых магнитофонах это компенсируется аналоговым интегрированием сигнала).
Способ кодирования нулей и единиц при такой записи представляет собой несколько более сложную задачу, чем при немодулированной передаче данных по проводу. Видно, что записать на диск постоянное высокое или низкое напряжение (соответствующее последовательности нулей или единиц в принципе, можно — в виде участка дорожки с постоянной намагниченностью, но такая последовательность не может быть считана головкой. Считывать можно только изменения намагниченности. Таким образом, использовать простые изменения напряжения для кодирования единиц и нулей невозможно, и мы должны изобрести более сложную схему кодирования.
Выбирая схему кодирования, мы должны обязательно решить также вопрос о способе синхронизации считывания: добиться высокой стабильности от мотора, вращающего шпиндель, невозможно. Кроме того, в приводах низкоскоростных, особенно гибких, дисков приходится считаться с опасностью механического заедания подшипников и самого диска, а в приводах жестких дисков с высокой скоростью вращения — с механическими вибрациями всей конструкции, которые могут повлиять на скорость прохождения диска под головкой даже при стабильной средней угловой скорости шпинделя.
На лентопротяжных устройствах с несколькими головками нередко используется отдельная синхродорожка, но на дисковых устройствах ее введение потребовало бы существенного усложнения и недопустимого утяжеления блока головок, поэтому обычно применяются схемы кодирования с совмещенным синхросигналом.
Простейшая форма такого кодирования, называется DFM (Double Frequency Modulation— модуляция с двойной частотой). Видно, что при записи нуля мы осуществляем одно изменение направления тока за интервал кодирования одного бита, а при кодировании единицы — два, причем первое из этих изменений смещено относительно начала интервала. Такое кодирование использовалось на 8-дюймовых гибких дисках.
Несколько более сложная схема кодирования, использовалась на 5- и 3-дюймовых гибких дисках низкой плотности. Эта схема называется модифицированной фазовой модуляцией. На жестких дисках в 80-е годы использовались частотная и модифицированная частотная Модуляция. Современные жесткие диски используют сложные схемы группового кодирования, когда одно изменение фазы или частоты намагничива-кодирует несколько битов.

Рис. 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)

Зона типа 1 длиной 32 байта отмечает начало дорожки, а зона типа 4 длиной от 118 до 266 байт служит для заполнения дорожки до полной длины.
Количество секторов в одной дорожке определяется, с одной стороны, длиной сектора, а с другой — частотой модуляции. Частота модуляции, в свою очередь, ограничена частотной характеристикой схемы управления магнитной головкой, индуктивностью самой головки и параметрами ферромагнитной поверхности диска (размером минимального домена намагничивания). Последний фактор, фактически, ограничивает линейную плотность записи (количество битов на миллиметр или дюйм длины дорожки), поэтому в более длинных внешних дорожках целесообразно делать больше секторов, чем во внутренних (рис. 9.36). Это решение усложняет адресацию секторов и логику контроллера, поэтому начало широко применяться лишь относительно недавно.

Рис. 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.

 
Назад Начало Вперед