CHS*.
Ну что ж, в каком виде принимает значения интерфейс IDE огласно стандарту АТА более-менее ясно. Казалось бы, программа BIOSа должна отправлять значения контроллеру точно в таком же виде. Нет. Почему разработчики BIOSа реализовали столь странный формат обращения к винчестеру, похоже, так и не станет понтяно, но...
Вспомним, в каком виде хочет принимать значения контроллер:
C = 16 bit (0 - 65535)
H = 4 bit (0 - 15)
S = 8 bit (0 - 255)
BIOS же, умеет адресовать блоки информации в таких пределах:
C = 10 bit (0 - 1023)
H = 8 bit (0 - 255)
S = 6 bit (1 - 63)
Найдите 3 отличия :). Количество бит, отведенных под цилиндр уменьшено по сравнению со стандартом на 6 и теперь максимально-представимое число цилиндров равно 1024. За то, под номер головки отведено на 4 бита больше и кол-во головок максимально-представимое число цилиндров равно 256. Под сектора отведено 6 бит. Интересно, но номера секторов нумеруются не с 0 а с 1! Учли ли эту тонкость производители винчестеров? Полагаю, что сначала нет, и в итоге на каждый цилиндр была потеря в один сектор... Но это всего лишь непроверенное предположение.
Как я понимаю, производители винчестеров стандарта придержались более строго и кол-во бит на представление головки не увеличили. В итоге, приложениям, и в том числе ОС пришлось довольствоваться 10 битами на цилиндр , 4мя на головку и 6 битами на сектор. Причем, из значения сектора необходимо вычесть единицу. Размер сектора не изменился. (И слава богу!). В итоге, максимальный объем, доступный при обращении к диску через BIOS составил:
2^10 * 2^4 * (2^6 - 1) * 2^9 = 504 МБ.
Понятно дело, что через некоторое время этого стало критически мало и надо было искать выход. И нашли -- ECHS.
Кроме всего прочего, адресация CHS имеет небольшой подводный камень. Допустим, у нас есть 2 винчестера В1 и В2, одинакового объема. С геометриями 2 головки, 4 цилиндра, 8 секторов на цилиндр; и 4 головки, 2 цилиндра и 8 секторов соответственно. Запишем что-нибудь на винчестер В2 по адресу C=0|H=3|S=1. Но при копировании один к одному, для винчестера В1 эта же информация будет размещаться по адресу H=2|C=0|S=1. Соотвественно, копирование "один к одному" этим дискам не подойдет. Не знаю, существовали ли утилиты, позволяющие учитывать разные геометрии диска при копировании...
*Понимание материала достигнуто благодаря статье
http://www.mossywell.com/boot%2Dsequence