реклама на сайте
подробности

 
 
> Разбивка HDD, Как ОС определяет кол-во логических головок на винте?
GetSmart
сообщение Jul 30 2011, 10:26
Сообщение #1


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



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


Второй вопрос:
При таком логическом переразделении винта в CHS формат прерывания 13h в конце винта отбрасывается небольшая часть свободного места из-за округления в меньшую сторону по кол-ву цилиндров. Почему нельзя округлять раздел в большую сторону, а уже в описании логического диска остаток раздела, которого физически не существует на винте просто не использовать, ограничив число секторов раздела уже внутри логического диска? Тогда было бы почти 100% использование винта, за исключением последнего неполного кластера.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
4 страниц V  < 1 2 3 4 >  
Start new topic
Ответов (30 - 44)
GetSmart
сообщение Jul 31 2011, 18:53
Сообщение #31


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(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.

Сообщение отредактировал GetSmart - Jul 31 2011, 19:09


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 31 2011, 19:09
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (GetSmart @ Jul 31 2011, 20:53) *
И понял я там абсолютно всё

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

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



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 31 2011, 19:16
Сообщение #33


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(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?

Сообщение отредактировал GetSmart - Jul 31 2011, 19:19


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
vvs157
сообщение Jul 31 2011, 19:25
Сообщение #34


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(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.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 31 2011, 19:30
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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
Повторяю для особо особо особо одарённых.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 31 2011, 19:42
Сообщение #36


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(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-ом сформировано в таблице разделов в качестве адреса раздела, то и берет. Ничего ему знать НЕ надо.

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

Сообщение отредактировал GetSmart - Jul 31 2011, 19:37


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 31 2011, 19:48
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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 КБ.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vvs157
сообщение Jul 31 2011, 19:48
Сообщение #38


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(GetSmart @ Jul 31 2011, 23:34) *
Это уже было написано в недавних ссылках на вики. Но это всё не отвечает на мой вопрос.
Формула, по которой пересчитывается
http://en.wikipedia.org/wiki/Logical_block_addressing
Так как все современные винчестеры все равно внутри пересчитывают LBA/CHS в реальную конфигурацию не имеет никакого принципиального значения для диска, как BIOS материнки (а это делает именно BIOS материнки) отмаппил ST506 в LBA . Главное, что потом этот мэппинг менять нельзя.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 31 2011, 19:51
Сообщение #39


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(vvs157 @ Aug 1 2011, 00:48) *
Главное, что потом этот мэппинг менять нельзя.

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

Сообщение отредактировал GetSmart - Jul 31 2011, 19:54


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 31 2011, 20:01
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vvs157
сообщение Jul 31 2011, 20:13
Сообщение #41


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



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

Они (BIOS'ы) просто пользуются одинаковой формулой :-))
Для современных ОС имеет значение только абсолютный номер сектора, CHS ими не используется. Поэтому ОС использует только ту часть записи Partition Table в MBR, где указан абсолютный номер сектора. Записи CHS в MBR нужны только для MSDOS и иже с ним. FreeDOS по-моему тоже перешел на абсолютный номер сектора. Из этого следует, что для таких ОС непринципиально, как проведен мэппинг BIOS'ом ST506 в LBA
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 31 2011, 20:22
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 31 2011, 20:22
Сообщение #43


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(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) якобы не используются?

Сообщение отредактировал GetSmart - Jul 31 2011, 20:25


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 31 2011, 20:28
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (GetSmart @ Jul 31 2011, 22:22) *
А Вы её знаете? sm.gif
Всего-то вопрос плёвый. На который zltigo тупит нипадецки.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vvs157
сообщение Jul 31 2011, 20:35
Сообщение #45


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(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.
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 07:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01523 секунд с 7
ELECTRONIX ©2004-2016