Перейти к содержанию
    

то может быть окажется полезной ссылка "Работа с IDE HDD через порты контроллера"?

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

 

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

Конкретно загрузочный сектор MS-DOS 6.22 и WIN95 и MBR не слишком старую, т.к. она умеет пользоваться Int 13 func > 40h. Чья MBR - пока не знаю. И понял я там абсолютно всё, кроме одного вопроса, на который никто ещё не ответил. Касательно загрузки с дискет, то там нет такой проблемы. Там нет второго уровня CHS.

Изменено пользователем GetSmart

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И понял я там абсолютно всё

:)

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в блоке описывающем раздел адрес раздела и соответственно адрес 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?

Изменено пользователем GetSmart

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, конечно. Но это тоже не то. Здесь идёт работа напрямую с разметкой АТА. Там всё детерминировано. 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На винте 16 головок.

Или не 16. Он всем говорит, что 16, но ему на физическом уровне глубоко все равно.

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

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

Чаще всего вообще 255.

Я собственно других не видел, о чем уже писал, и не вижу смысла не в 255.

откуда BIOS узнала, что головок на уровне Int 13 будет 32?

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

Повторяю для особо особо особо одарённых.

Даже для особо тупых, разжевал более чем. Достаточно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть спецификация ST506 - формат регистров контроллера жесткого дика.

...

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

 

Для работы с диками >8 ГБ используется расширение INT13, где используется только номер сектора без деления на CHS.

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

 

Из каких соображений не сразу 255 - спросите у MS.

...

Я собственно других не видел, о чем уже писал, и не вижу смысла не в 255.

Вот они, ключевые моменты. Так бы и сказали, что Вы некомпетентны в данном вопросе. И не вертели передо мной своей харизмой :biggrin:

Если бы там стояло всегда 255 для дисков более 500 МБ, то у меня и вопросов бы не возникло.

 

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

Предположений я не спрашиваю. У меня их у самого вагон и маленькая тележка. Мне нужен точный алгоритм.

Изменено пользователем GetSmart

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот они, ключевые моменты. Так бы и сказали, что Вы некомпетентны в данном вопросе.

Вам с самого начала было указано:

1) почему пересчитывается

2) что этим занимается DOS

3) и то, что число не имеет никакого значения.

Это и есть ключевые моменты.

И не вертели передо мной своей харизмой :biggrin:

Если бы там стояло всегда 255 для дисков более 500 МБ, то у меня и вопросов бы не возникло.

Типа поумнели после разжевывания и решили что сможете постфактум прикинутся умным :(. Не проканает после этого:

Ваша некомпетентность бросается в глаза

Загрузочный сектор уже использует DOS? разметку.

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

Теоретически это может быть правдой, т.к. смещение первого кластера на диске FAT16 нах-ся в районе 260КБ. При этом остаётся место для IO.SYS размером 200 КБ.

То, что Вы чистопробный ламер (чайник, который думает, что круто заварен) не скроете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

http://en.wikipedia.org/wiki/Logical_block_addressing

Так как все современные винчестеры все равно внутри пересчитывают LBA/CHS в реальную конфигурацию не имеет никакого принципиального значения для диска, как BIOS материнки (а это делает именно BIOS материнки) отмаппил ST506 в LBA . Главное, что потом этот мэппинг менять нельзя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Главное, что потом этот мэппинг менять нельзя.

В том-то и прикол, что когда в BIOS-ах стоит AUTO, то можно диск перетыкать на другие материнки и всё будет одинаково. При этом, можно хоть голый, неотформатированный винт вставлять в материнку и БИОС в авто режиме назначит ему какое-то кол-во головок. И возможно разные БИОСы умудряются сразу назначать одинаковое число головок.

Изменено пользователем GetSmart

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В том-то и прикол, что когда в BIOS-ах стоит AUTO, то можно диск перетыкать на другие материнки и всё будет одинаково. При этом, можно хоть голый, неотформатированный винт вставлять в материнку и БИОС в авто режиме назначит ему какое-то кол-во головок. И возможно разные БИОСы умудряются сразу назначать одинаковое число головок.

Как в том анекдоте "куда лошадь запрягать только не понял".

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В том-то и прикол, что когда в BIOS-ах стоит AUTO, то можно диск перетыкать на другие материнки и всё будет одинаково. При этом, можно хоть голый, неотформатированный винт вставлять в материнку и БИОС в авто режиме назначит ему какое-то кол-во головок. И возможно разные БИОСы умудряются сразу назначать одинаковое число головок.

Они (BIOS'ы) просто пользуются одинаковой формулой :-))

Для современных ОС имеет значение только абсолютный номер сектора, CHS ими не используется. Поэтому ОС использует только ту часть записи Partition Table в MBR, где указан абсолютный номер сектора. Записи CHS в MBR нужны только для MSDOS и иже с ним. FreeDOS по-моему тоже перешел на абсолютный номер сектора. Из этого следует, что для таких ОС непринципиально, как проведен мэппинг BIOS'ом ST506 в LBA

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как BIOS материнки (а это делает именно BIOS материнки) отмаппил ST506 в LBA

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

Они (BIOS'ы) просто пользуются одинаковой формулой :-))

Они просто отображают ровно то,что сообщает им о себе HDD.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Они (BIOS'ы) просто пользуются одинаковой формулой :-))

А Вы её знаете? :)

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

 

Для современных ОС имеет значение только абсолютный номер сектора, CHS ими не используется.

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

 

ОС в данном вопросе меня интересует только в том, ограничивает ли она общий размер винта, округляя его до целого числа цилиндров, опять же через головки. То есть в современных разметках дисков (< 2TB) разделы могут быть размером кратно 1 или 63 или 63*Heads, которые (Heads) якобы не используются?

Изменено пользователем GetSmart

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А Вы её знаете? :)

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

Пост №37 как обобщающий и про причастность к этому BIOS пост №42 повторяющий сказанное в №16 . Все больше повторений не будет. Достаточно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А Вы её знаете? :)
Да как-то никогда надобности в ней не было. Ее легко отреверсить. Берете LBAmax , делите на 63*1024, округляете в большую сторону - получите фиктивное число головок.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...