|
|
  |
Разбивка HDD, Как ОС определяет кол-во логических головок на винте? |
|
|
|
Jul 31 2011, 18:53
|
.
     
Группа: Участник
Сообщений: 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
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 31 2011, 19:25
|
Профессионал
    
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Jul 31 2011, 19:30
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jul 31 2011, 19:42
|
.
     
Группа: Участник
Сообщений: 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. Вот они, ключевые моменты. Так бы и сказали, что Вы некомпетентны в данном вопросе. И не вертели передо мной своей харизмой  Если бы там стояло всегда 255 для дисков более 500 МБ, то у меня и вопросов бы не возникло. Цитата(zltigo @ Aug 1 2011, 00:30)  Да то, что было DOS-ом сформировано в таблице разделов в качестве адреса раздела, то и берет. Ничего ему знать НЕ надо. Предположений я не спрашиваю. У меня их у самого вагон и маленькая тележка. Мне нужен точный алгоритм.
Сообщение отредактировал GetSmart - Jul 31 2011, 19:37
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 31 2011, 19:48
|

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

|
QUOTE (GetSmart @ Jul 31 2011, 21:34)  Вот они, ключевые моменты. Так бы и сказали, что Вы некомпетентны в данном вопросе. Вам с самого начала было указано: 1) почему пересчитывается 2) что этим занимается DOS 3) и то, что число не имеет никакого значения. Это и есть ключевые моменты. QUOTE И не вертели передо мной своей харизмой  Если бы там стояло всегда 255 для дисков более 500 МБ, то у меня и вопросов бы не возникло. Типа поумнели после разжевывания и решили что сможете постфактум прикинутся умным  . Не проканает после этого: QUOTE Ваша некомпетентность бросается в глаза Загрузочный сектор уже использует DOS? разметку. Представьте, 15 головок в BIOS. Как только код обратится к 16-ой, то кирдык. А 15 головок * 63 сектора - это 472.5 КБ (!). Теоретически это может быть правдой, т.к. смещение первого кластера на диске FAT16 нах-ся в районе 260КБ. При этом остаётся место для IO.SYS размером 200 КБ. То, что Вы чистопробный ламер (чайник, который думает, что круто заварен) не скроете.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 31 2011, 20:13
|
Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jul 31 2011, 20:22
|

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

|
QUOTE (vvs157 @ Jul 31 2011, 21:48)  как BIOS материнки (а это делает именно BIOS материнки) отмаппил ST506 в LBA Незачем этим биосу заниматься. Он должен только интерфейс предоставить для любой адресации, а том сам HDD выругается если что не так. Не верите? Обратите внимание, что, уже писал, функция INT13h/AH=13h документирована у самого коричневого ральфа  , как функция DOS начиная с версии 5.0. http://www.ctyme.com/intr/rb-0637.htmQUOTE (vvs157 @ Jul 31 2011, 22:13)  Они (BIOS'ы) просто пользуются одинаковой формулой :-)) Они просто отображают ровно то,что сообщает им о себе HDD.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 31 2011, 20:22
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(vvs157 @ Aug 1 2011, 01:13)  Они (BIOS'ы) просто пользуются одинаковой формулой :-)) А Вы её знаете?  Всего-то вопрос плёвый. На который 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
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 31 2011, 20:35
|
Профессионал
    
Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960

|
Цитата(GetSmart @ Aug 1 2011, 00:22)  А Вы её знаете?  Да как-то никогда надобности в ней не было. Ее легко отреверсить. Берете LBA max , делите на 63*1024, округляете в большую сторону - получите фиктивное число головок. Цитата(GetSmart @ Aug 1 2011, 00:22)  Но ведь система MBR/Boot sector грузится ещё до всякой ОС, используя адресацию Int13h. То есть ещё до запуска ОС, Int 13 уже знает сколько будет головок на диске. А это неважно, так как MBR всегда первый сектор. Если BIOS поддерживает EXT, то загрузка раздела пойдет с абс. LBA, если нет - то с CHS.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|