Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2015, 22:49   #1
fevgin
Пользователь
 
Регистрация: 17.11.2013
Сообщений: 16
По умолчанию Кодирование C-H-S в MBR в FAT-16

В файловой системе FAT-16 при описании Раздела в смещении 01h указывается "CHS-адрес" первого сектора Раздела, а в смещении 05h - последнего.
Экспериментально создал на ж.д. раздел с ФС FAT-16 размером ровно в 2 ГБ с помощью программы Paragon Hard Disk.
Вот что получилось.
Код:
Свойства ж.д.
Количество Цилиндров: 222 060 (0x3 636C)
Количество Головок: 22 (0x16)
Количество Секторов/Трек: 16 (0x10)
Общее количество секторов: 78 165 360
Размер ж.д.: 40 020 664 320 байт
Код:
Свойства Раздела №1.
Количество секторов на кластер: 64
Количество секторов: 4 192 256
Размер Раздела: 2 146 435 072 байт

Начальный сектор
Номер Цилиндра: 5
Номер Головки: 18
Номер Сектора/Трек: 1
Номер Сектора: 2 048

Последний сектор
Номер Цилиндра: 11 915
Номер Головки: 13
Номер Сектор/Трек: 16
Номер Сектора: 4 194 303
Но...
Заглянем в таблицу секторов в MBR на последовательность Описания Раздела №1 (Offset: 00h-12h).
Код:
00 20 21 00 06 15 50 05 00 08 00 00 00 F8 3F 00
Давайте разберём эту последовательность байтов.
1) 00
"данный Раздел не Активный"
2) 20 21 00
номер Цилиндра: 0
номер Головки: 32
номер Сектор/Трек: 33
порядковый номер Сектора: 544
3) 06
"файловая система FAT-16 с разделом более 32 МБ"
4) 15 50 05
номер Цилиндра: 261
номер Головки: 21
номер Сектор/Трек: 16
порядковый номер Сектора: 92 223
5) 00 08 00 00
смещение (offset): 320 секторов
6) 00 F8 3F00
размер Раздела: 4 192 256.

Хотя на самом деле Раздел №1 начинается с сектора №2 048.

Т.е. через свойства расположение Раздела правильно, а вот согласно секторной таблице ничего не сходится...
Почему?
fevgin вне форума Ответить с цитированием
Старый 15.11.2015, 23:48   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
с помощью программы Paragon Hard Disk. Вот что получилось.
Paragon Hard Disk - получает данные напрямую от НГМД, а надо получать данные от БИОСа. БИОС выполняет своё преобразование CHS в LBA. Так как у него свои ограничения на CHS нежели чем у НГМД.
Из-за этого расхождения.
Так как ваш диск больше 8 ГБ то можете взять максимально возможные значения
число головок_на_цилиндр := 255
число секторов_на_дорожку := 63

LBA = (((Цилиндр * головок_на_цилиндр)+головка)*сектор ов_на_дорожку)+сектор - 1

((0*255)+32)*63)+33-1=2048
2048 d= 800h
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 15.11.2015 в 23:54.
Pavia вне форума Ответить с цитированием
Старый 16.11.2015, 00:21   #3
fevgin
Пользователь
 
Регистрация: 17.11.2013
Сообщений: 16
По умолчанию

Вау!!!
Это просто счастье, когда начинают сходиться цифры!!!
И начальный сектор и последний - всё сходится!
Pavia, большое спасибо!

Получается, что когда Paragon Hard Disk создавал Раздел, он предоставлял BIOS-у (или всё-таки контроллеру ж.д.?) информацию о том, где "хочет" начать и закончить Раздел в LBA?
И уже контроллер заносил "координаты" на поверхность HDD в виде значений: "20 21 00" и "15 50 05"?
fevgin вне форума Ответить с цитированием
Старый 16.11.2015, 00:33   #4
fevgin
Пользователь
 
Регистрация: 17.11.2013
Сообщений: 16
По умолчанию

До этого на этом же самом ж.д. стоял DOS 6.22. Форматирование происходило одновременно с установкой ОС через дискеты.
После этого Paragon выдавал в свойствах этого ж.д. "правильную" геометрию:
число_цилиндров := 4865
число_головок := 255
число_секторов_на_трек := 63.

Почему тогда так, а сейчас по-другому?
fevgin вне форума Ответить с цитированием
Старый 16.11.2015, 00:48   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Получается, что когда Paragon Hard Disk создавал Раздел, он предоставлял BIOS-у (или всё-таки контроллеру ж.д.?) информацию о том, где "хочет" начать и закончить Раздел в LBA?
И уже контроллер заносил "координаты" на поверхность HDD в виде значений: "20 21 00" и "15 50 05"?
Такой функции ни БИОСа, ни у контролера - нет. Зато есть функция возвращающая "геометрию" диска(число головок, секторов, цилиндров).
На месте разработчиков Paragon Hard Disk я бы запустил реальный режим и опросил бы BIOS. Но с другой стороны гораздо проще воспользоваться одной из двух обще принятых схем трансляции. Авось повезёт и отгадаем какую использует BIOS. :D
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 16.11.2015 в 00:52.
Pavia вне форума Ответить с цитированием
Старый 16.11.2015, 00:54   #6
fevgin
Пользователь
 
Регистрация: 17.11.2013
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Такой функции ни БИОСа, ни у контролера - нет.
А у кого она есть?

PS. Спасибо за pdf-материал.
fevgin вне форума Ответить с цитированием
Старый 16.11.2015, 00:55   #7
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от fevgin Посмотреть сообщение
До этого на этом же самом ж.д. стоял DOS 6.22. Форматирование происходило одновременно с установкой ОС через дискеты.
После этого Paragon выдавал в свойствах этого ж.д. "правильную" геометрию:
число_цилиндров := 4865
число_головок := 255
число_секторов_на_трек := 63.

Почему тогда так, а сейчас по-другому?
А я почём знаю? Видимо код для виндоуса и для дискеты отличается.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 16.11.2015, 01:01   #8
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от fevgin Посмотреть сообщение
А у кого она есть?
У программы которая разделы создаёт. В вашем случае Paragon. Она получает геометрию диска. А далее работает с ней.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 16.11.2015, 02:53   #9
fevgin
Пользователь
 
Регистрация: 17.11.2013
Сообщений: 16
По умолчанию

У меня как-бы три варианта от Paragon.
Первая - установлена на ПК.
Вторая и третья - это диски восстановления.
Но вторая - это "WinPE", а третья - работает как-бы в среде DOS.
Оба DVD были созданы с помощью установленной на ПК версии.
Но "правильную" геометрию предоставляет только третий диск.

Последний раз редактировалось fevgin; 16.11.2015 в 07:14.
fevgin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считать MBR c диска reddiego Общие вопросы C/C++ 0 21.12.2011 16:24
mbr прелоадер asm djetx Фриланс 7 25.10.2011 20:27
mbr, инструкции frommars Visual C++ 4 12.08.2011 00:06
слетевший MBR VVVadim Операционные системы общие вопросы 9 21.01.2011 12:05
Востановление загрузчика MBR server 2008 shadrikoff Windows 2 03.08.2009 08:39