Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Разбивка HDD
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
Страницы: 1, 2
GetSmart
Собсно два вопроса. Первый вопрос:
Как ОС (MS-DOS or Windows) определяет кол-во логических головок на винте?
В первом секторе винта находится MBR с разметкой разделов.
Не знаю как в новых, больших винтах, но в старых используется CHS адресация в первых 8 байтах описания раздела. Во вторых 8 байтах идёт описание только в логических секторах. При работе через прерывание 13h необходимо задавать логическую головку. Причём это не те головки, что физически присутствуют на винте, или даже логически используются в интерфейсе ATA.


Второй вопрос:
При таком логическом переразделении винта в CHS формат прерывания 13h в конце винта отбрасывается небольшая часть свободного места из-за округления в меньшую сторону по кол-ву цилиндров. Почему нельзя округлять раздел в большую сторону, а уже в описании логического диска остаток раздела, которого физически не существует на винте просто не использовать, ограничив число секторов раздела уже внутри логического диска? Тогда было бы почти 100% использование винта, за исключением последнего неполного кластера.
zltigo
QUOTE (GetSmart @ Jul 30 2011, 12:26) *
Как ОС (MS-DOS or Windows) определяет кол-во логических головок на винте?

В данных BIOS смотрят. Win, если в BIOS данные отсутствуют, сам читает 512 байтовый блок данных из HDD и разбирается с кем имеет дело.
QUOTE
Не знаю как в новых, больших винтах, но в старых используется CHS адресация

Это уже не в старых, а безумно старых, ну или сейчас разве только в мелких CF.
GetSmart
Цитата(zltigo @ Jul 30 2011, 15:46) *
В данных BIOS смотрят. Win, если в BIOS данные отсутствуют, сам читает 512 байтовый блок данных из HDD и разбирается с кем имеет дело.

У меня в стареньком ноуте в BIOS стоит автоопределение и оно показывает логические CHS уровня ATA, а не уровня BIOS Int 13h.

Цитата(zltigo @ Jul 30 2011, 15:46) *
Это уже не в старых, а безумно старых, ну или сейчас разве только в мелких CF.

А в HDD средней "старости", которые от 8 ГБ до 2 ТБ, у них нет в конце диска неиспользуемого места из-за округления по кол-ву цилиндров/головок?
zltigo
QUOTE (GetSmart @ Jul 30 2011, 13:18) *
оно показывает логические CHS уровня ATA, а не уровня BIOS Int 13h.

BIOS может пользоваться и пользуется (если умеет) только данными полученными с ATA. Другое дело, что он по Вашему приказу, может на них наплевать и/или воспользоваться, например, древней таблицей "стандарных" HDD. HDD это все равно, если в размер укладывается. Единственно, что может рухнуть файловая система из-за изменения размеров разделов.


QUOTE (GetSmart @ Jul 30 2011, 13:29) *
А в HDD средней "старости", которые от 8 ГБ до 2 ТБ, у них нет в конце диска неиспользуемого места из-за округления по кол-ву цилиндров/головок?

Они вообще не могут адресоваться CHS - размеры далеко уходят за возможности CHS адресации.
GetSmart
Цитата(zltigo @ Jul 30 2011, 16:33) *
BIOS может пользоваться и пользуется (если умеет) только данными полученными с ATA.

Ну это явно не так. Int 13 как раз к BIOS относится. Если, конечно, его не перехватывает ОС, что ещё нужно подтвердить.
Int 13 принимает в виде параметров CHS уровня BIOS, а не уровня АТА.

Цитата(zltigo @ Jul 30 2011, 16:35) *
Они вообще не могут адресоваться CHS - размеры далеко уходят за возможности CHS адресации.

Вопрос не в этом. Читайте внимательно.
zltigo
QUOTE (GetSmart @ Jul 30 2011, 13:37) *
Ну это явно не так. Int 13 как раз к BIOS относится. Если, конечно, его не перехватывает ОС, что ещё нужно подтвердить.
Int 13 принимает в виде параметров CHS уровня BIOS, а не уровня АТА.

Когда сами себе сможете объяснить, что написали, то попробуйте задать вопрос еще раз.
GetSmart
Цитата(zltigo @ Jul 30 2011, 16:43) *
Когда сами себе сможете объяснить, что написали, то попробуйте задать вопрос еще раз.

Объясняю.
В BIOS у меня написано, что кол-во головок 15. В MBR винта, как и в загр.секторе диска С, указано, что кол-во головок 255. Через Int 13 я могу считывать головки 0-254. То есть не 15, которые в настройках BIOS и передаются через АТА. На каком-то уровне ОС/BIOS происходит конвертация CHS OS (BIOS?) в CHS ATA.

Я конечно же знаю про функции 4x прерывания int 13, использующие линейную одномерную адресацию по логическим секторам, но сейчас не об этом, а о функциях < 10h Int 13h.
zltigo
QUOTE (GetSmart @ Jul 30 2011, 13:50) *
Объясняю.
В BIOS у меня написано, что кол-во головок 15. В MBR винта, как и в загр.секторе диска С, указано, что кол-во головок 255. Через Int 13 я могу считывать головки 0-254.

Типа INT13h/AH=13h ?
QUOTE
То есть не 15, которые в настройках BIOS и передаются через АТА. На каком-то уровне ОС/BIOS происходит конвертация CHS OS (BIOS?) в CHS ATA.
о функциях < 10h Int 13h.

Ну и какая такая функция AH < 10h Вам возвращает параметры диска?

GetSmart
Цитата(zltigo @ Jul 30 2011, 17:08) *
Ну и какая такая функция AH < 10h Вам возвращает параметры диска?

Никакая не возвращает. По крайней мере я не знаю какая и это не важно в моих вопросах.
Взять к примеру функции 02h и 03h. Они не возвращают, а принимают в качестве параметров CHS уровня OS/BIOS. Точнее, я не знаю кому принадлежит этот уровень. Проще называть уровня Int 13h func < 40h. Эти параметры 100% отличаются от уровня CHS ATA. Мне непонятно, откуда Int 13 узнаёт сколько на этом уровне будет головок и как их конвертировать в CHS ATA.
zltigo
QUOTE (GetSmart @ Jul 30 2011, 14:17) *
Никакая не возвращает. По крайней мере я не знаю какая и это не важно в моих вопросах.
Взять к примеру функции 02h и 03h. Они не возвращают, а принимают в качестве параметров CHS уровня OS/BIOS. Эти параметры 100% отличаются от уровня CHS ATA.

Прежде, чем обратиться, Вы должны спросить параметры. Это 13h функция. Начиная с MSDOS 5.0 это ДОСОВСКАЯ, а не BOIS функция. Соответственно она все ретранслирует. Для обращения так-же производится ретрансляция. Иначе ~500 мегабайт был предел.
GetSmart
Цитата(zltigo @ Jul 30 2011, 17:24) *
Прежде, чем обратиться, Вы должны спросить параметры. Это 13h функция. Начиная с MSDOS 5.0 это ДОСОВСКАЯ, а не BOIS функция. Соответственно она все ретранслирует. Для обращения так-же производится ретрансляция.

ОК. А DOS откуда узнаёт, ведь это какой-то виртуальный уровень?
DOS это выясняет из MBR или загрузочного сектора логического диска?

Кроме того, ещё до запуска DOS, то бишь во время запуска загрузочного сектора используется Int 13h для загрузки IO.SYS и Int 13h передаются в виде параметров CHS уже этого виртуального уровня, якобы неизвестного BIOS.
zltigo
QUOTE (GetSmart @ Jul 30 2011, 14:30) *
ОК. А DOS откуда узнаёт, ведь это какой-то виртуальный уровень?
DOS это выясняет из MBR или загрузочного сектора логического диска?

Уже писал, из области данных BIOS. BIOS считывает идентификатор IDE. Только пересчет тех CHS которые и видите в BIOS ведется под максимальные 255 головок и 63 сектора.
GetSmart
Цитата(zltigo @ Jul 30 2011, 17:33) *
Только пересчет тех CHS которые и видите в BIOS ведется под максимальные 255 головок и 63 сектора.

А вот и нет!
Пересчёт может быть под разные варианты. Как минимум мне попадались 255, 64,32,16. Не суть важно что там возвращает INT13h/AH=13h. Важно откуда Int 13 узнаёт это магическое число головок.
zltigo
QUOTE (GetSmart @ Jul 30 2011, 14:38) *
Пересчёт может быть под разные варианты.

Сомневаюсь в необходимости разных вариантов, поскольку вся эта возня затевалась для достижения адресации максимального объема диска ПОСЛЕ ~500 мегабайт. Но даже если вдруг там есть зачем-то какая-то стратегия выбора, то она абсолютно произвольна.
GetSmart
Цитата(zltigo @ Jul 30 2011, 17:42) *
Сомневаюсь в необходимости разных вариантов, поскольку вся эта возня затевалась для достижения адресации максимального объема диска. Но даже если вдруг там есть зачем-то какая-то стратегия выбора, то она абсолютно произвольна.

Всё не дано понять...
Фишка в том, что досовские проги используют эту виртуальную CHS и умудряются правильно её определять. Хотя может я чего-то и упустил. Но заглянул бы сюда какой-нить спец по DOS/BIOS чтобы указать что именно.

А винда, скорее всего, работает с одномерными логическими секторами через Int 13 func > 40h, или своими аналогичными. Поэтому там вопрос так остро не стоит. Хотя и под виндой я разбивал 4 гиговый винт, у которого в результате был обрезан конец винта при округлении до целого числа цилиндров (255 головок).
zltigo
QUOTE (GetSmart @ Jul 30 2011, 14:49) *
Всё не дано понять...
Фишка в том, что досовские проги используют эту виртуальную CHS и умудряются правильно её определять.

Они ее НЕ определяют, они ее СПРАШИВАЮТ у DOS используя INT13h/AH=13h.
QUOTE
Хотя может я чего-то и упустил.

Упустили ответы на вопросы sad.gif. Пост №8
GetSmart
Цитата(zltigo @ Jul 30 2011, 17:51) *
Упустили ответы на вопросы sad.gif. Пост №8

Пост №11. Второй абзац.
zltigo
QUOTE (GetSmart @ Jul 30 2011, 14:54) *
Пост №11. Второй абзац.

Естественно молча пользуется первоначальными. Это накладывает только одно ограничение IO.SYS и (не помню точно) DOS.SYS должны быть на первых 500 мегабайтах диска.
GetSmart
Цитата(zltigo @ Jul 30 2011, 17:59) *
Естественно молча пользуется первоначальными. Это накладывает только одно ограничение IO.SYS и (не помню точно) DOS.SYS должны быть на первых 500 мегабайтах диска.

Ваша некомпетентность бросается в глаза sm.gif
Загрузочный сектор уже использует DOS? разметку.
Представьте, 15 головок в BIOS. Как только код обратится к 16-ой, то кирдык. А 15 головок * 63 сектора - это 472.5 КБ (!).
Теоретически это может быть правдой, т.к. смещение первого кластера на диске FAT16 нах-ся в районе 260КБ. При этом остаётся место для IO.SYS размером 200 КБ.

ИМХО зря они этот уровень ввели. Лучше бы оставался один уровень ATA/BIOS, а следующий был бы в DOS уже одномерный в секторах. Тогда и загрузочной области была бы адресация уровня АТА и загрузчик работал бы через BIOS с параметрами АТА.


Upd.
Пока у меня есть несколько версий, как определяется кол-во головок.
1. По общему размеру диска, ограничивая кол-во цилиндров в диапазоне 1023-512.
2. Прочитав MBR и определив по значениям CHS максимальное значение головки.
2а. Прочитав загрузочный сектор и взяв оттуда кол-во головок
zltigo
QUOTE (GetSmart @ Jul 30 2011, 15:08) *
Ваша некомпетентность бросается в глаза sm.gif

Угу, именно она позволяла мне уже 20 лет назад писать MainBIOS, патчить биосы контроллеров IDE интерфейсов и писать загрузчики для своей системы.



QUOTE (GetSmart @ Jul 30 2011, 15:08) *
Представьте, 15 головок в BIOS. Как только код обратится к 16-ой, то кирдык. А 15 головок * 63 сектора - это 472.5 КБ (!).

Пустой набор слов ни о чем.
GetSmart
Цитата(zltigo @ Jul 30 2011, 18:23) *
Угу, именно она позволяла мне уже 20 лет назад писать MainBIOS, патчить биосы контроллеров IDE интерфейсов и писать загрузчики для своей системы.

Профессионалы ошибаются на плюс/минус 3 порядка sm.gif


Цитата
Пустой набор слов ни о чем.

Второй раз объясню.
Я недавно дизассемблил несколько загрузочных секторов MS-DOS/Windows.
Так вот, в них указано кол-во головок уровня DOS?. И при вычислении местоположения IO.SYS логический одномерный сектор делится на кол-во головок. Если вдруг местоположение IO.SYS окажется на головке выше чем в BIOS, то BIOS пошлёт код подальше. Если цилиндр окажется не нулевой, то сектор прочитается совсем не оттуда. Вот так то.
zltigo
QUOTE (GetSmart @ Jul 30 2011, 15:29) *
Я недавно дизассемблил несколько загрузочных секторов MS-DOS/Windows.

И увидели фигу, не поняли, откуда берется расположение IO.SYS и как грузится IO.SYS, что не удивительно sad.gif, ибо Вам удается ее видеть даже глядя на более простые вещи, нежели дизассемблированный загрузчик. Продолжайте изучать. Должно-же когда-то дойти?
GetSmart
Очередная истерика?
zltigo
QUOTE (GetSmart @ Jul 30 2011, 16:11) *
Очередная истерика?

Почему? Просто очередной раз убедился в справедливости русской поговорки "Дурака учить - только портить!" sad.gif

GetSmart
Цитата(zltigo @ Jul 30 2011, 19:16) *
Почему?

Вам точно за 50?
По постам лет 15 с комплексом недооценённого таланта.
follow_me
боже , из вас никто про LBA не слышал ? и про LBA48 точно никто
и про LBA -> CHS виртуальное преобразование ?

Человек вам правду говорил - из биоса получают данные , попробуйте простой тест , в старом биосе в котором можно ручками выставить CHS уберите часть головок или цилиндров или секторов и посмотрите как изменится определяемый DOS'ом размер


прошу прощения если я кого обижу . но гляньте тут на CHS , на LBA и на INT 13H

развязали тут две страницы полемики на пустом месте ....
GetSmart
Цитата(follow_me @ Jul 30 2011, 22:17) *
Человек вам правду говорил - из биоса получают данные , попробуйте простой тест , в старом биосе в котором можно ручками выставить CHS уберите часть головок или цилиндров или секторов и посмотрите как изменится определяемый DOS'ом размер

Кое-что не сходится.
Мой биос показывает на одном из винтов 16 головок. Это честные АТА головки. Физически на винте их может быть и меньше, не суть. Но разметка на этом винте стоит на 32 головки. Не 16 и не 255. Я не собираюсь задавать сам какие-то значения. Меня интересует автоопределение и по какому алгоритму оно работает.

Цитата(follow_me @ Jul 30 2011, 22:17) *
прошу прощения если я кого обижу . но гляньте тут на CHS

Это напрямую никак не проясняет ситуацию с кол-вом головок. BIOS (int 13 func < 10h) может работать с головками до 255. Однако если диск (логический) размечен на 32, то BIOS будет работать с 32-мя. А не с 255. Причём кол-во АТА головок совершенно "до лампочки". Так вот. Либо BIOS приходится после перезагрузки читать первые сектора диска и их анализировать, либо по общему объёму диска по какому-то алгоритму задаётся кол-во головок.
GetSmart
Цитата(follow_me @ Jul 30 2011, 22:17) *
прошу прощения если я кого обижу . но гляньте тут на CHS , на LBA и на INT 13H

развязали тут две страницы полемики на пустом месте ....

Прочитал эти три ссылки. Ржунимагу.
Вы, товарищи-писатели, хоть бы вчитывались в вопросы. Все три ссылки никак не проясняют алгоритм определения головок. В приличных биосах есть режим AUTO. Он умеет сам определять кол-во головок без ручного ввода их в биос.

zltigo просто мастер жанра. Когда ему указываешь что ответ не на тот вопрос, у него одна заготовка - вы, батенька, дурак biggrin.gif
zltigo, впредь прошу мне не отвечать. Ваша недопомощь мне не нужна.
Xenia
Если вам не нравятся советы мудрого Zltigo sm.gif, то может быть окажется полезной ссылка "Работа с IDE HDD через порты контроллера"?
zltigo
QUOTE (GetSmart @ Jul 31 2011, 16:57) *
zltigo, впредь прошу мне не отвечать. Ваша недопомощь мне не нужна.

Так ведь можно просто, в крайнем случае, непонятное просто молча пропустить. Ну а поскольку это форум, то отвечать или нет я буду решать сам.


QUOTE (Xenia @ Jul 31 2011, 20:02) *
то может быть окажется полезной ссылка "Работа с IDE HDD через порты контроллера"?

Нет, у него другая проблема, он типа дизасемблировал какую-то MBR (кстати,они достаточно разные у разных версий DOS и тем более WIN) и не понял, как загружается Boot Record активного раздела.

GetSmart
Цитата(Xenia @ Jul 31 2011, 23:02) *
то может быть окажется полезной ссылка "Работа с IDE HDD через порты контроллера"?

Спасибо, конечно. Но это тоже не то. Здесь идёт работа напрямую с разметкой АТА. Там всё детерминировано. LBA пересчитать в CHS винта проблемы не вызывает. Проблему вызывает CHS Int 13h для дисков 540 MB..8GB. То есть неясно откуда берётся кол-во головок в этом CHS, по какому алгоритму, т.к. их кол-во не совпадает с головками ATA. Кроме того, меня интересует CHS Int 13 для работы с дисками более 8 ГБ, вплоть до 2 ТБ (или 0.5, не суть), хотя я прекрасно понимаю, что доступны будут только первые 8 гиг. Главное, алгоритм определения головок. И доп. вопрос - округляются ли разделы на дисках до 2 ТБ по целому числу цилиндров, с учётом опять же кол-ва логических головок, не АТА-шных.

Цитата(zltigo @ Jul 31 2011, 23:40) *
Нет, у него другая проблема, он типа дизасемблировал какую-то MBR (кстати,они достаточно разные у разных версий DOS и тем более WIN) и не понял, как загружается Boot Record активного раздела.

Конкретно загрузочный сектор MS-DOS 6.22 и WIN95 и MBR не слишком старую, т.к. она умеет пользоваться Int 13 func > 40h. Чья MBR - пока не знаю. И понял я там абсолютно всё, кроме одного вопроса, на который никто ещё не ответил. Касательно загрузки с дискет, то там нет такой проблемы. Там нет второго уровня CHS.
zltigo
QUOTE (GetSmart @ Jul 31 2011, 20:53) *
И понял я там абсолютно всё

sm.gif
QUOTE
, кроме одного вопроса, на который никто ещё не ответил.

Да ничего Вы вообще не поняли sad.gif - в блоке описывающем раздел адрес раздела и соответственно адрес BR раздела описан прямо в CHS формате под INT13. Ну А BR раздела уже максимально похожа на "дискету" с которой "нет такой проблемы".

GetSmart
Цитата(zltigo @ Aug 1 2011, 00:09) *
в блоке описывающем раздел адрес раздела и соответственно адрес BR раздела описан прямо в CHS формате под INT13. Ну А BR раздела уже максимально похожа на "дискету" с которой "нет такой проблемы".

Повторяю для особо особо особо одарённых.
На винте 16 головок. Это уровень АТА. В MBR действительно разметка CHS уровня Int 13h. И там указано 32, 64 или любое другое число. Чаще всего вообще 255. MBR грузится ещё до запуска всяких DOS-ов и работает через BIOS. В BIOS я не забивал кол-во головок, там стоит AUTO. В то же время, BIOS мне может показать разметку CHS уровня ATA. И это не 32 головки, а 16. Так вот, для особо особо одарённых вопрос - откуда BIOS узнала, что головок на уровне Int 13 будет 32?
vvs157
Цитата(GetSmart @ Jul 31 2011, 22:48) *
Спасибо, конечно. Но это тоже не то. Здесь идёт работа напрямую с разметкой АТА. Там всё детерминировано. LBA пересчитать в CHS винта проблемы не вызывает. Проблему вызывает CHS Int 13h для дисков 540 MB..8GB. То есть неясно откуда берётся кол-во головок в этом CHS, по какому алгоритму, т.к. их кол-во не совпадает с головками ATA.
Есть спецификация ST506 - формат регистров контроллера жесткого дика. В этой спецификации максимальное число головок 16, но число дорожек 65535. Есть спецификация нерасширенного INT13 (не LBA48), где число головок 255, а число дорожек - 1024. То есть при удоволетворении и той и другой - максимальный размер 512 МБ. Для обхода этого ограничения появилась спецификация LBA - использующая полные возможности INT13 посредством стандартного преобразования CHS-ST506 в CHS-LBA.
Диск на запрос геометрии может выдавать CHS-ST506 и BIOS SETUP (а не BIOS INT13!) показывает эти значения. Но для работы с таким диском надо все равно использовать CHS-LBA, которые и используются в INT13
Для работы с диками >8 ГБ используется расширение INT13, где используется только номер сектора без деления на CHS.
zltigo
QUOTE (GetSmart @ Jul 31 2011, 21:16) *
На винте 16 головок.

Или не 16. Он всем говорит, что 16, но ему на физическом уровне глубоко все равно.
QUOTE
В MBR действительно разметка CHS уровня Int 13h. И там указано 32, 64 или любое другое число.

MBR сформировал DOS проставив количество головок для обеспечения доступа ко всему диску а не ~500Mb. Из каких соображений не сразу 255 - спросите у MS.
QUOTE
Чаще всего вообще 255.

Я собственно других не видел, о чем уже писал, и не вижу смысла не в 255.
QUOTE
откуда BIOS узнала, что головок на уровне Int 13 будет 32?

Да то, что было DOS-ом сформировано в таблице разделов в качестве адреса раздела, то и берет. Ничего ему знать НЕ надо.
QUOTE
Повторяю для особо особо особо одарённых.

Даже для особо тупых, разжевал более чем. Достаточно.
GetSmart
Цитата(vvs157 @ Aug 1 2011, 00:25) *
Есть спецификация ST506 - формат регистров контроллера жесткого дика.
...

Это уже было написано в недавних ссылках на вики. Но это всё не отвечает на мой вопрос.

Цитата(vvs157 @ Aug 1 2011, 00:25) *
Для работы с диками >8 ГБ используется расширение INT13, где используется только номер сектора без деления на CHS.

Эти функции я знаю, func >= 40h. Там всё элементарно. За мелкими нюансами. Но доступ к диску всё равно будет через func < 40h, особенно если диск размечен на несколько разделов и первый раздел < 8GB. То есть всё равно кол-во головок имеет значение. Вероятно там всегда будет 255 головок, но не уверен.

Цитата(zltigo @ Aug 1 2011, 00:30) *
Из каких соображений не сразу 255 - спросите у MS.
...
Я собственно других не видел, о чем уже писал, и не вижу смысла не в 255.

Вот они, ключевые моменты. Так бы и сказали, что Вы некомпетентны в данном вопросе. И не вертели передо мной своей харизмой biggrin.gif
Если бы там стояло всегда 255 для дисков более 500 МБ, то у меня и вопросов бы не возникло.

Цитата(zltigo @ Aug 1 2011, 00:30) *
Да то, что было DOS-ом сформировано в таблице разделов в качестве адреса раздела, то и берет. Ничего ему знать НЕ надо.

Предположений я не спрашиваю. У меня их у самого вагон и маленькая тележка. Мне нужен точный алгоритм.
zltigo
QUOTE (GetSmart @ Jul 31 2011, 21:34) *
Вот они, ключевые моменты. Так бы и сказали, что Вы некомпетентны в данном вопросе.

Вам с самого начала было указано:
1) почему пересчитывается
2) что этим занимается DOS
3) и то, что число не имеет никакого значения.
Это и есть ключевые моменты.
QUOTE
И не вертели передо мной своей харизмой biggrin.gif
Если бы там стояло всегда 255 для дисков более 500 МБ, то у меня и вопросов бы не возникло.

Типа поумнели после разжевывания и решили что сможете постфактум прикинутся умным sad.gif. Не проканает после этого:
QUOTE
Ваша некомпетентность бросается в глаза
Загрузочный сектор уже использует DOS? разметку.
Представьте, 15 головок в BIOS. Как только код обратится к 16-ой, то кирдык. А 15 головок * 63 сектора - это 472.5 КБ (!).
Теоретически это может быть правдой, т.к. смещение первого кластера на диске FAT16 нах-ся в районе 260КБ. При этом остаётся место для IO.SYS размером 200 КБ.

То, что Вы чистопробный ламер (чайник, который думает, что круто заварен) не скроете.
vvs157
Цитата(GetSmart @ Jul 31 2011, 23:34) *
Это уже было написано в недавних ссылках на вики. Но это всё не отвечает на мой вопрос.
Формула, по которой пересчитывается
http://en.wikipedia.org/wiki/Logical_block_addressing
Так как все современные винчестеры все равно внутри пересчитывают LBA/CHS в реальную конфигурацию не имеет никакого принципиального значения для диска, как BIOS материнки (а это делает именно BIOS материнки) отмаппил ST506 в LBA . Главное, что потом этот мэппинг менять нельзя.
GetSmart
Цитата(vvs157 @ Aug 1 2011, 00:48) *
Главное, что потом этот мэппинг менять нельзя.

В том-то и прикол, что когда в BIOS-ах стоит AUTO, то можно диск перетыкать на другие материнки и всё будет одинаково. При этом, можно хоть голый, неотформатированный винт вставлять в материнку и БИОС в авто режиме назначит ему какое-то кол-во головок. И возможно разные БИОСы умудряются сразу назначать одинаковое число головок.
zltigo
QUOTE (GetSmart @ Jul 31 2011, 21:51) *
В том-то и прикол, что когда в BIOS-ах стоит AUTO, то можно диск перетыкать на другие материнки и всё будет одинаково. При этом, можно хоть голый, неотформатированный винт вставлять в материнку и БИОС в авто режиме назначит ему какое-то кол-во головок. И возможно разные БИОСы умудряются сразу назначать одинаковое число головок.

Как в том анекдоте "куда лошадь запрягать только не понял".
vvs157
Цитата(GetSmart @ Jul 31 2011, 23:51) *
В том-то и прикол, что когда в BIOS-ах стоит AUTO, то можно диск перетыкать на другие материнки и всё будет одинаково. При этом, можно хоть голый, неотформатированный винт вставлять в материнку и БИОС в авто режиме назначит ему какое-то кол-во головок. И возможно разные БИОСы умудряются сразу назначать одинаковое число головок.

Они (BIOS'ы) просто пользуются одинаковой формулой :-))
Для современных ОС имеет значение только абсолютный номер сектора, CHS ими не используется. Поэтому ОС использует только ту часть записи Partition Table в MBR, где указан абсолютный номер сектора. Записи CHS в MBR нужны только для MSDOS и иже с ним. FreeDOS по-моему тоже перешел на абсолютный номер сектора. Из этого следует, что для таких ОС непринципиально, как проведен мэппинг BIOS'ом ST506 в LBA
zltigo
QUOTE (vvs157 @ Jul 31 2011, 21:48) *
как BIOS материнки (а это делает именно BIOS материнки) отмаппил ST506 в LBA

Незачем этим биосу заниматься. Он должен только интерфейс предоставить для любой адресации, а том сам HDD выругается если что не так. Не верите? Обратите внимание, что, уже писал, функция INT13h/AH=13h документирована у самого коричневого ральфа sm.gif, как функция DOS начиная с версии 5.0. http://www.ctyme.com/intr/rb-0637.htm
QUOTE (vvs157 @ Jul 31 2011, 22:13) *
Они (BIOS'ы) просто пользуются одинаковой формулой :-))

Они просто отображают ровно то,что сообщает им о себе HDD.
GetSmart
Цитата(vvs157 @ Aug 1 2011, 01:13) *
Они (BIOS'ы) просто пользуются одинаковой формулой :-))

А Вы её знаете? sm.gif
Всего-то вопрос плёвый. На который zltigo тупит нипадецки.

Цитата(vvs157 @ Aug 1 2011, 01:13) *
Для современных ОС имеет значение только абсолютный номер сектора, CHS ими не используется.

Но ведь система MBR/Boot sector грузится ещё до всякой ОС, используя адресацию Int13h. То есть ещё до запуска ОС, Int 13 уже знает сколько будет головок на диске.

ОС в данном вопросе меня интересует только в том, ограничивает ли она общий размер винта, округляя его до целого числа цилиндров, опять же через головки. То есть в современных разметках дисков (< 2TB) разделы могут быть размером кратно 1 или 63 или 63*Heads, которые (Heads) якобы не используются?
zltigo
QUOTE (GetSmart @ Jul 31 2011, 22:22) *
А Вы её знаете? sm.gif
Всего-то вопрос плёвый. На который zltigo тупит нипадецки.

Пост №37 как обобщающий и про причастность к этому BIOS пост №42 повторяющий сказанное в №16 . Все больше повторений не будет. Достаточно.
vvs157
Цитата(GetSmart @ Aug 1 2011, 00:22) *
А Вы её знаете? sm.gif
Да как-то никогда надобности в ней не было. Ее легко отреверсить. Берете LBAmax , делите на 63*1024, округляете в большую сторону - получите фиктивное число головок.

Цитата(GetSmart @ Aug 1 2011, 00:22) *
Но ведь система MBR/Boot sector грузится ещё до всякой ОС, используя адресацию Int13h. То есть ещё до запуска ОС, Int 13 уже знает сколько будет головок на диске.
А это неважно, так как MBR всегда первый сектор. Если BIOS поддерживает EXT, то загрузка раздела пойдет с абс. LBA, если нет - то с CHS.
zltigo
QUOTE (vvs157 @ Jul 31 2011, 22:32) *
округляете в большую сторону

до любого числа вплоть до 255.
vvs157
Цитата(GetSmart @ Aug 1 2011, 00:22) *
То есть в современных разметках дисков (< 2TB) разделы могут быть размером кратно 1 или 63 или 63*Heads, которые (Heads) якобы не используются?
Вообще-то обычно принято раздел начинать с нового цилиндра.

Цитата(zltigo @ Aug 1 2011, 00:36) *
до любого числа вплоть до 255.
rolleyes.gif Естественно. Но BIOS'ы одного производителя деляют это одинаковым способом. Если нужна определенность.
GetSmart
Цитата(vvs157 @ Aug 1 2011, 01:39) *
Вообще-то обычно принято раздел начинать с нового цилиндра.

Ещё одна забавная неоднозначная формулировка sm.gif
С нового цилиндра винта в формате АТА или в формате ОС? Но ведь ОС не использует CHS для больших винтов. Там нет цилиндров. Или есть?
zltigo
QUOTE (vvs157 @ Jul 31 2011, 22:39) *
rolleyes.gif Естественно. Но BIOS'ы одного производителя деляют это одинаковым способом. Если нужна определенность.

Кто это делает в посте №42. В результате полная определенность для файловой системы стоящей на диске/разделе.
vvs157
Цитата(GetSmart @ Aug 1 2011, 00:45) *
Ещё одна забавная неоднозначная формулировка sm.gif
С нового цилиндра винта в формате АТА или в формате ОС? Но ведь ОС не использует CHS для больших винтов. Там нет цилиндров. Или есть?
Цилиндров там конечно нет. Но так как раньше они были, то выравнивание делается по старым традициям - для совместимости PT MBR в части записи CHS.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.