Устройство HDD

  Устройство жестких дисков
     
  Цилиндры, головки секторы
   
  Логические блоки
     
  Функции BIOS для работы с HDD
     
  Проблемы BIOS при работе с большими дисками
     
  Back to beginning Назад к оглавлению
Устройство жестких дисков

Жесткий диск (НDD - Hard Disk Drive) устроен следующим образом: на шпинделе, соединенным с электромотором, расположен блок из нескольких дисков (блинов), над поверхностью которых находятся головки для чтения/записи информации. Форма головкам придается в виде крыла и крепятся они на серпообразный поводок. При работе они "летят" над поверхностью дисков в воздушном потоке, который создается при вращении этих же дисков. Очевидно, что подъемная сила зависит от давления воздуха на головки. Оно же, в свою очередь, зависит от внешнего атмосферного давления. Поэтому некоторые производители указывают в спецификации на свои устройства предельный потолок эксплуатации (например, 3000 м). Ну чем не самолет? Диск разбит на дорожки (или треки), которые в свою очередь поделены на сектора. Две дорожки, равноудаленные от центра, но расположенные по разные стороны диска, называются цилиндрами.

наверх

Цилиндры, головки и секторы. На физическом уровне диск имеет три степени свободы для указания того места, где информация будет записываться или считываться:

§ Цилиндр. При вращении дисков с магнитным покрытием головки двигаются по окружности относительно пластин. При этом все они находятся на определенном расстоянии от центра диска. Совокупность этих круглых траекторий головок на всех поверхностях дисков, находящихся на одном удалении от центра, называют цилиндром. Поскольку магнитные головки жестко связаны друг с другом, то они перемещаются синхронно и одновременно находятся в одном и том же цилиндре. Для установки головок на заданный цилиндр необходимо привести в движение блок головок, для чего требуется время порядка 120 миллисекунд.

§  Головка. Несколько поверхностей обеспечивают дополнительную возможность выбора. Для перехода от одной головке к другой не требуется никакого времени, так как при этом переключение осуществляется без привлечения механических узлов.

§  Сектор. Один блок информации является относительно небольшой порцией данных, которая территориально соответствует небольшой дуге окружности. Если смотреть из центра, то такие дуги размещаются в одном угловом секторе. Строго говоря, на современных дисках это не так, поскольку длины окружностей возрастают с увеличением радиуса, а размер одного бита всюду одинаков. Таким образом, на длинных дорожках помещается больше битов, а, стало быть, больше блоков данных. Для выбора сектора на дорожке двигать головки не нужно, зато нужно ждать, когда пластины повернутся так, чтобы адресная метка сектора подошла к головкам чтения/записи. При скорости вращения диска порядка 5-7 тысяч оборотов в минуту время ожидания сектора оказывается порядка 8-10 миллисекунд. Это время даже больше времени перемещения головок, однако, после их перемещения метку сектора все равно приходится искать, так что смена цилиндра является самой длинной операцией при поиске информации.

Первые жесткие диски обладали относительно небольшим числом цилиндров, головок и секторов и, вдобавок, не имели такого умного контроллера как сегодняшние. Поэтому адресация блоков у них производилась указанием трех чисел, номера цилиндра, головки и сектора, и эти номера соответствовали физической организации данных. Со временем это стало не так. На разных цилиндрах находится разное число секторов. Контроллеры современных дисков сами выдумывают некоторую виртуальную геометрию диска, которую сообщают компьютеру. Поэтому ценность такого трехкоординатного указания адреса теряется, и такой способ постепенно отмирает, оставляя лишь проблемы с совместимостью. Довольно часто можно слышать как термин блок, так и термин сектор. И то, и другое указывает порцию данных размером 512 байт, если речь идет о жестком диске. Однако, в то время, как слово «блок» отражает логическую структуру данных на диске, слово «сектор» отражает лишь часть физической структуры дисков, которая со временем все больше скрывается от нас в недрах встроенного контроллера. Отсюда следует вывод, что более правильно пользоваться словом блок. Логические блоки  Все современные жесткие диски перешли на новый, более простой в использовании вид адресации - линейный. Каждый блок характеризуется единственным числом, своим номером. Современный стандарт ATA-5 отводит для номера диска 28 бит, что позволяет адресовать 268435456 блоков, или примерно 137.4 Гигабайт. Интерпретация номера является скрытой во встроенном контроллере жесткого диска. Несмотря на это, существует некоторое общепринятое для производителей жестких дисков правило, по которому логический номер блока переводится в номера цилиндра, головки и сектора: 

<блок> = (<цилиндр> * ЧИСЛО_ГОЛОВОК + <головка>) * ЧИСЛО_СЕКТОРОВ + <сектор> -1

ЧИСЛО_ГОЛОВОК

Количество головок жесткого диска, возвращаемое BIOS

ЧИСЛО_СЕКТОРОВ

Количество секторов жесткого диска, возвращаемое BIOS

<сектор>

Номер сектора, из диапазона [ 1 … ЧИСЛО_СЕКТОРОВ ]

 
<головка> Номер головки, из диапазона [ 0 … ЧИСЛО_ГОЛОВОК-1 ] <цилиндр> Номер цилиндра, из диапазона [ 0 … ЧИСЛО_ЦИЛИНДРОВ-1 ]
 
Таким образом, при увеличении номера блока в первую очередь меняется номер сектора, потом номер головки, потом номер цилиндра. Отсюда следует, что цилиндры являются самыми большими областями смежных блоков данных. По этой причине цилиндры являются границами, на которые выравниваются разделы при создании их большинством стандартных инструментов (fdisk).
Несмотря на то, что линейная адресация является более прогрессивной, она привела к появлению проблем с совместимостью, которые длятся уже несколько лет. В основном, эти проблемы касаются использования новых жестких дисков со старыми материнскими платами, а также различных установок BIOS, о которых будет рассказано ниже.
наверх

Функции BIOS для работы с HDD

Базовая система ввода вывода (BIOS) предоставляет программам возможность обмена информацией с жесткими дисками. Для этого имеется специальное программное прерывание, INT 13h.

Основным достоинством BIOS является то, что программам предоставляется стандартный интерфейс взаимодействия с жесткими дисками любого типа. В то время, когда проектировались первые версии BIOS, жесткие диски еще не были так же хорошо стандартизованы, как сегодня, поэтому реализация функций ввода/вывода предполагалась различной. Загрузка операционных систем (ОС) происходит при непосредственном участии BIOS на начальном этапе и по этой причине загрузка любой ОС начинается стандартным образом. В этом тоже сказывается положительная роль BIOS.

Основными недостатками BIOS в отношении работы с дисками является то, что эти функции:  

1. Слишком медленны. BIOS большинства компьютеров написаны отвратительно, поэтому очень много времени уходит на выполнение ненужных действий по несколько раз. Кроме того, они не всегда производят расширенную диагностику жестких дисков, в результате чего работа с жесткими дисками ведется не в самых оптимальных с точки зрения быстродействия режимах. Так, при современных скоростях чтения записи порядка 10 и более Мегабайт в секунду, скорость чтения через BIOS составляет всего 2-2.5Мб/c.

2. Строго последовательны. Доступ к одному диску с помощью BIOS может быть осуществлен лишь после завершения доступа к другому, даже если сами устройства могут функционировать независимо, поэтому эффективность системы снижется.

3. Имеют лишь 20-разрядную адресацию памяти. Функции BIOS изначально разработаны для процессоров Intel 8086, которые могли адресовать лишь 1 Мегабайт памяти. Таким образом, BIOS не может полностью реализовать возможности современного компьютера.

4. Имеют ограничения на адресацию блоков диска, которая приводит к проблемам с загрузкой ОС, расположенных за границей 8Гб. Современные версии BIOS имеют расширение, которое помогает решить эту проблему для современных ОС. Однако, это расширение несовместимо со старыми функциями BIOS, поэтому старые операционные системы, такие как DOS, которые пользуются старыми интерфейсами BIOS, не смогли и не смогут переступить границы в 8GB.  

Преодоление этих недостатков в современных ОС осуществляется с помощью собственных драйверов для работы с жесткими дисками. Однако на начальном этапе, когда ядро ОС еще не загружено в память и не имеет драйверов для работы с дисками, BIOS предоставляет единственный унифицированный способ загрузить систему.

Функции BIOS предоставляют доступ к дискам путем назначения им уникальных номеров. Для номера диска отводится 1 байт, который содержит число в диапазоне 80-FFh (числам 00h-7Fh соответствуют дискеты). Внутри своих настроек BIOS именует диски буквами C, D, E…, которые соответствуют номерам 80h, 81h, 82h, … Эти буквы соответствуют физическим дискам, и не следует их путать с буквами логических дисков, наблюдаемыми из операционных систем DOS или Windows.
наверх

 Проблемы BIOS при работе с большими дисками  

Стандартные функции BIOS работают с диском исключительно в терминах цилиндра, головки и сектора. Все параметры для функций чтения и записи передаются в регистрах процессора, причем

▪ На номер цилиндра отводится 10 бит (1024 цилиндра).

▪ На номер головки отводится 8 бит (256 головок).

▪ На номер сектора отводится 6 бит (63 сектора).

Первый стандарт ATA на встроенные контроллеры жестких дисков определил следующее диапазоны параметров жестких дисков:

▪ На номер цилиндра отводится 16 бит (65536 цилиндров).

▪ На номер головки отводится 4 бита (16 головок).

▪ На номер сектора отводится 6 бит (64 сектора).


В результате совместного применения этих требований емкость диска, адресуемая средствами BIOS, ограничивается размером 504 Мб. С появлением дисков большего размера возникли проблемы с использованием дискового пространства. Для решения этих проблем в BIOS были реализованы разные режимы трансляции дисковых адресов.

Режим [NORMAL]. Это собственно и есть режим, в котором видно всего 504 Мб. В этом режиме все величины номера цилиндра, головки и сектора без изменений передаются в контроллер жесткого диска. Использование этого режима невозможно с новыми дисками по причине недоступности большей части информации.

Режим [LARGE]. Этот режим представляет собой усовершенствованный режим NORMAL. BIOS производит преобразование головок и цилиндров, тем самым, изменяя логическую геометрию диска. Поскольку количество головок, доступное BIOS превосходит максимально возможное количество головок самого диска в 16 раз, то BIOS уменьшает число логических цилиндров в 2,4,8 раз и одновременно с этим увеличивает число логических головок в такое же количество раз. Коэффициент перевода он запоминает и при каждом обращении к диску непосредственно перед формированием команды контроллеру он делает обратное преобразование. Таким образом, с помощью преобразования удается адресовать большее количество блоков диска.

Режим [LBA]. В этом режиме в контроллер посылается линейный номер блока. Благодаря этому BIOS не должен подстраивать свою логическую геометрию под некоторую начальную геометрию диска, ее просто нет. Поэтому BIOS просто назначает число головок равным 255, то есть максимально возможному значению, что позволяет адресовать до 8Гб.

Разные режимы, вообще говоря, несовместимы между собой, если программное обеспечение привязывается к количеству секторов на дорожке и количеству головок. Только линейная адресация остается универсальной. По этим причинам крайне не рекомендуется менять режим диска в настройках BIOS после того, как диск отформатирован. В противном случае он может просто не прочитаться.
наверх