AssistedLBA

Jan 21, 2006 20:40

AssistedLBA*

Итак, я близок к завершенству: AssistedLBA последний режим, использовавший "координатную" систему для адресации секторов винчестера.

В первую очередь необходимо отметить важную особенность режима AssistedLBA: в конечном счете номер требуемого сектора будет предоставлен контроллеру в формате LBA, не CHS. Это важно. Что такое LBA, зачем он нужен и что собой представляет скажу чуть позже. Важно понимать следующую вещь: контроллер должен уметь работать с адресами в формате LBA. Помимо этого, AssistedLBA -- самый "экономный" режим адресации -- с его помощью можно адресовать наибольшее количество секторов, в сравнении с предыдущими режимами. Но и нельзя забывать, что сама по себе трансляция -- всего лишь способ перевода CHS значения, которое понимает BIOS  в CHS значение, понятное контроллеру. После трансляции полученное CHS значение значение переводится кодом BIOSа в LBA значение, подготавливается и уже в этом виде скармливается контроллеру.

Теперь немного подробнее про саму трансляцию:
if CLS > 8192
1. V = CLS * HDS - 1, где:
CLS -- количество цилиндров на головку
HDS -- количество головок
V -- просто некоторая переменная :).
2. Округлить вверх значение выражения V / 1024 + 1 до ближайшего из: 16, 32, 64, 128, 255. Полученное значение будет использоваться как максимальное значение номера головки.
3. Разделить V на значение полученное на шаге 2. Результат -- максимальный номер цилиндра.

В результате, максимальное количество адресуемых секторов равно: 255 * 1024 * 63 = 16 450 560. В байтах это 8 422 686 720. В принципе, как я понимаю, это максимум, что можно выжать из условий "255 головок, 1024 цилиндра, 63 сектора на дорожку".

Итак, это сама трансляция. Как и раньше, при количестве цилиндров менее 8193 подсчет максимальных логических значений выполняется стандартно, как в ECHS.

И все же я что-то недопонимаю глобально. Получается странная картина: например, у нас есть физическая геометрия: HDS: 16 CLS: 16384. Виртуальная, тогда, должна быть HDS: 256 CLS 1024. Множитель: 16. И там и там указаны не максимальные значения головок/цилиндров, а общее количество. При этом получается, что обратиться к цилиндру, чей номер не кратен 16 не возможно! Т.е. 256 / 16 = 16. Остатка нет! И как же тогда обратиться к цилиндру, например, 15? Даже если мы укажем H: 256 C: 1, в итоге получим H16 C16.

Придется оставить пока что, как есть -- общий принцип понят, обдуман и переварен. Обидно, но по-другому не получается...

*Частичное понимание материала достигнуто благодаря статье http://www.mossywell.com/boot%2Dsequence
Previous post Next post
Up