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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2015, 14:27   #1
fevgin
Пользователь
 
Регистрация: 17.11.2013
Сообщений: 16
По умолчанию Файловая система FAT-16. Ограничение на размер кластера

Везде указывается, что у данной файловой системы есть некоторые ограничения.
Одно из них - это максимальный размер кластера - 128 секторов.
Для "хранения" значения отпускается один байт (по адресу 0xFE0D). Значит теоретически максимально возможное количество секторов в кластере должно быть равным 2^16-1, т.е. 255 (0xFF).
Тогда что ограничивает это значение до цифры 128 (0x40) ?
fevgin вне форума Ответить с цитированием
Старый 12.11.2015, 14:34   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

контрольный бит?
Smogg вне форума Ответить с цитированием
Старый 12.11.2015, 15:05   #3
fevgin
Пользователь
 
Регистрация: 17.11.2013
Сообщений: 16
По умолчанию

Что за "контрольный бит" ?
fevgin вне форума Ответить с цитированием
Старый 12.11.2015, 17:58   #4
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

можно сказать, это тоже самое, что "контрольная сумма", но по отношению к байту)
Smogg вне форума Ответить с цитированием
Старый 12.11.2015, 18:17   #5
fevgin
Пользователь
 
Регистрация: 17.11.2013
Сообщений: 16
По умолчанию

Не совсем понятно.

Последний раз редактировалось fevgin; 13.11.2015 в 02:42.
fevgin вне форума Ответить с цитированием
Старый 13.11.2015, 17:25   #6
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

"контрольная сумма" - некая добавочная приписка к основному блоку информация, которая говорит лишь о том, достоверная ли основная информация или имеет повреждения, случившиеся в процессе передачи/хранения. При недостоверности либо идет перезакачка файла, либо восстановление с резервной копиии, либо вывешивается пользователю "Incorrect data - [OK] [Cance]", либо происходит какая другая местечковая реализация обработки ошибок.

Контрольная сумма высчитывается на основе всего блока данных. Функция расчета суммы подбирается так, чтобы при минимальном изменении контролируемых данных эта самая "сумма" изменялась напрочь. И, ессно, с минимально возможным числом вероятных коллизий.

Но есть одна немаловажная вещь - сама "контрольная сумма" тоже может повредится) В отношении байта, если контрольный бит говорит про недостоверность, то с вероятностью примерно 1/8 он сам недостоверен. Плюс, если соврались два бита (из контроллируемых семи), то контрольный бит будет указывать на достоверность. Я предполагаю, что "контрольный бит" высчитывается как последовательный XOR соответствующих битов.

Тем не менее, при всех ограничениях, лучше иметь хоть какой-то пусть убогий контроль, чем не иметь никакого совсем)

// естественно, про контрольный бит - мои догадки, а что там в действительности происходит в FAT16 я не знаю практически ничего)
Smogg вне форума Ответить с цитированием
Старый 13.11.2015, 17:41   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

там разрешена только степень двойки.
потому и максимальное значение 128(последний бит = 1)
Цитата:
Sectors Per Cluster
This is the number of sectors per cluster. The allowed values are: 1, 2, 4, 8, 16, 32 or 128. But de-facto is that most combinations of 'BytesPerCluster' * 'SectorsPerCluster' which gives a total value over 32 Kb per cluster, are not supported on many system.
хотя 64 тут упущенно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.11.2015, 18:09   #8
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Это так, потому что так решили в Microsoft. Цитата из официальной доки:
Код:
BPB_SecPerClus  (offset) 13  (size in bytes) 1

Number of sectors per allocation unit. This value must be a power 
of 2 that is greater than 0. The legal values are 1, 2, 4, 8, 16, 32, 64, 
and 128. Note however, that a value should never be used that 
results in a “bytes per cluster” value (BPB_BytsPerSec * 
BPB_SecPerClus) greater than 32K (32 * 1024). There is a 
misconception that values greater than this are OK. Values that 
cause a cluster size greater than 32K bytes do not work properly; do 
not try to define one. Some versions of some systems allow 64K 
bytes per cluster value. Many application setup programs will not 
work correctly on such a FAT volume.
Гуглить по словам BPB и fatgen103.
Vapaamies на форуме Ответить с цитированием
Старый 13.11.2015, 20:13   #9
rlib
Форумчанин
 
Аватар для rlib
 
Регистрация: 22.05.2012
Сообщений: 352
По умолчанию

Вероятно, решение ограничить 128 секторами следует из соображений эффективности использования дискового пространства: чем больше кластер, тем больше будет тратится на мелкие файлы.

http://www.oldlinux.org/Linux.old/di...s/cnix/FAT.pdf
rlib вне форума Ответить с цитированием
Старый 15.11.2015, 19:20   #10
fevgin
Пользователь
 
Регистрация: 17.11.2013
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
там разрешена только степень двойки.
потому и максимальное значение 128(последний бит = 1)
Цитата:
Sectors Per Cluster
This is the number of sectors per cluster. The allowed values are: 1, 2, 4, 8, 16, 32 or 128. But de-facto is that most

combinations of 'BytesPerCluster' * 'SectorsPerCluster' which gives a total value over 32 Kb per cluster, are not supported on

many system.
хотя 64 тут упущенно.
Спасибо.
Выводы следующие.
Разрешена только степень двойки.
2^7=128.
Следующее значение было бы: 2^8=256,
но для указания количества секторов в кластере используется один байт, что даст максимальное КОЛИЧЕСТВО 255 (FFh).
Т.е. закодировать "количество" 256 никак не получится.

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файловая система Донат Общие вопросы C/C++ 3 22.04.2012 22:32
файловая система Hell Knight Общие вопросы C/C++ 2 09.12.2011 15:11
Есть ли ограничение в 97-2010 версиях Excel ограничение на размер массива? clever77 Microsoft Office Excel 18 15.05.2011 00:50
Файловая система androidvsu Общие вопросы по Java, Java SE, Kotlin 3 13.10.2010 19:04
Файловая система student_63 Win Api 1 12.04.2008 20:29