СообЧа > База Знаний > Железо > Накопители > HDD

Вопрос

Чем отличается Large от LBA и от CHS и зависимости от чего выбирать эти параметры?

Ответ

LBA, Large, CHS — методы трансляции номеров секторов в винчестере. Раньше, когда жесткие диски были небольшими, обращение к сектору происходило следующим образом:

Приложение (операционная система, в частности) вызывает функцию 2 (чтение сектора) или 3 (запись) прерывания BIOS int 13h и передает ей три координаты требуемого сектора — цилиндр (дорожка), головка, номер сектора на дорожке. Эти три параметра могли принимать значения 0-1023, 0-255, 1-63: соответственно, дорожка, головка, сектор (если перемножить эти цифры, мы получим 8 гб, емкость довольно большая и по сегодняшним меркам, но тяжело представить себе диск с такими параметрами).

Эти диапазоны были заложены разработчиками BIOS еще самой первой IBM PC в далеком 1981 (кажется) году. Тогда эти ограничения не доставляли особых неудобств, поскольку самый емкий накопитель в 30 мегабайт имел 27 секторов на дорожке, 4 или 6 головок при 100-150 цилиндрах. Те, кому было мало этих мегабайт, ставили второй диск. Переданные координаты один к одному, без каких-либо преобразований и пересчетов, загонялись в регистры контроллера диска.

Вскоре появились IDE накопители, которые были более емкими и менее громоздкими. Аппаратные регистры их контроллеров позволяли адресовать 256 секторов, 16 головок и 65536 дорожек. Однако, реальные размеры дисков были еще далеки от этих цифр и поэтому при работе использовались те же самые функции BIOS с теми же самыми ограничениями. Алгоритм работы BIOS был таким же, как и раньше, — указанные координаты также засылались в контроллер и т.д.

Такой метод адресации секторов сейчас называется прямой адресацией секторов или CHS (Cylinder-Head-Sector). Используется при необходимости подключить к современной машине старый диск, а также при необходимости запуска некоторых «тупых» программ. Если попытаться обратиться этим методом к винту емкостью выше 514 мб, то система увидит только первые 514 мб, причины — см. LBA.

Со временем стало ясно, что физически невозможно было разместить в корпусе диска 256 головок, в то время как увеличить кол-во цилиндров было гораздо проще и легче. Диски с максимальной емкостью в 514 неформатированных мегабайт не могли удовлетворить постоянно растущие запросы нового ПО и мультимедийных систем. Даже установка 2 или 4 дисков проблему не решала, а только отодвигала ее на некоторое время.

Тогда был разработан ряд методов, позволявших обойти ограничение устарешего BIOS. Здесь и программные решения, вроде популярного в свое время ADM, и довольно экзотические аппаратные решения, когда один физический диск представлялся системе как 2, а то и 3 диска. Но все они имели свои недостатки и ограничения. Так, ADM сразу же «умирал» при малейшей порче MBR, а «раздваивающийся» диск не позволял подключить к себе slave накопитель.

Единственный прижившийся метод — Large. Он применим для дисков, у которых число цилиндров между 1024 и 2048, не поддерживающих LBA (см. ниже), но такие диски практически не встречаются сейчас. Этот метод «обманывает» систему передачи параметров BIOS, увеличивая в 2 раза число головок и во столько же раз уменьшая число цилиндров, тем самым загоняя его в рамки функций 2/3 и не изменяя емкость диска.

В 1994 году появился стандарт LBA — Large (или Logic) Block Addressing, применяющийся и по сей день.

LBA использует т.н. трансляцию секторов, при которой его реальные параметры отличаются от тех, которые видит система. Трансляция позволила решить и ряд других, чисто технических, внутренних задач. Например, проблема плохих секторов. Раньше такие места блокировались на уровне FAT, и никто не мог запретить программе, работающей на уровне секторов, писать в порченые места. Транслирующий контроллер автоматически выводит такие сектора из обращения, подставляя вместо них другие. Ни BIOS, ни ОС об этом никогда не знают.

Еще одна особенность: вы когда-нибудь задавались вопросом, как умещаются в корпусе вашего диска толщиной 2 см. те 16 головок, о которых он сообщает? Ответ прост: их там просто нет. В современных дисках чаще всего одна пластина (соответственно, 2 головки), реже 2, еще реже — 3. Но на этой пластине огромное кол-во концентрических дорожек (цилиндров). А то, что выдает контроллер — так называемый виртуальный диск с нереальными параметрами.

LBA адресует сектор не 3 координатами, а одной — логическим номером — так же, как это делает DOS в своих прерываниях int25/26h. Это номер имеет длину 3*8+4=28 бит — соответственно, max 2^28 секторов — сами пересчитайте в мегабайты. Максимальные параметры винт выдает в старой CHS схеме, т.е., например, диск имеет 16 головок, 63 сектора и 30000 цилиндров, причем сейчас меняется только число цилиндров, число головок и секторов практически всегда одинаково.

Чтобы обойти то самое ограничение BIOS, используется такой же алгоритм, как и в Large, т.е. деление цилиндров на 2, а головки *2, только здесь он работает не один раз, как в Large, а пока число головок не достигнет 256, либо число цилиндров не станет меньше 1023. Кол-во секторов не меняется. Вот и получается что-то типа 63 секторов, 256 головок и 790 цилиндров — полное соответствие ограничениям BIOS. При обращении к какому-то сектору, его 3 координаты пересчитывается в LBA номер, и он передается в контроллер. Если «сказать» BIOSу, чтобы он работал с большим винтом в Normal (CHS) режиме, то он использует первые 1024 цилиндра — мы получим те самые 514 неформатированных мегабайт, о которых говорилось выше.

Работа с накопителями свыше 8 Гб проходит аналогично, поскольку LBA адресует гораздо больше 8 гб, только вместо старых добрых функций 2 и 3 используются другие, которые имеют менее жесткие ограничения на номера дорожек, головок и секторов.

Павел



Copyright © 2000-2004 Сообщество Чайников
Контактная информация