Чем отличается Large от LBA и от CHS?

Вопрос:

    Может кто-нибудь объяснить чем отличается 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 используются другие, которые имеют менее жесткие ограничения на номера дорожек, головок и секторов.
    Павел