На днях решил пополнить свои знания относительно FAT, MBR и т.д. Эксперименты проводил с дискеткой и стандартным отладчиком( debug.exe ) Windows. Ну так вот. При создании директории в корне дискетки ее имя должно быть не больше 255 символов — это общеизвестно. Создадим такую директорию. Смотрим в Far'е — на это ушло 512байт. Хорошо! Теперь посмотрим через отладчик сколько на это ушло кластеров — и получается, что 2. Но это ведь уже 1024байта!!! В чем здесь может быть заковыка?
Здравствуйте, Аноним, Вы писали:
А>Доброго времени суток!
А>На днях решил пополнить свои знания относительно FAT, MBR и т.д. Эксперименты проводил с дискеткой и стандартным отладчиком( debug.exe ) Windows. Ну так вот. При создании директории в корне дискетки ее имя должно быть не больше 255 символов — это общеизвестно. Создадим такую директорию. Смотрим в Far'е — на это ушло 512байт. Хорошо! Теперь посмотрим через отладчик сколько на это ушло кластеров — и получается, что 2. Но это ведь уже 1024байта!!! В чем здесь может быть заковыка?
Таблица FAT задает список кластеров файла. Если физически данные файла занимают один кластер, то в таблице FAT под этот файл выделяется две записи. Одна — для кластера с данными, и другая — просто содержит запись типа end-of-file.
Анна Савельева wrote: > > Здравствуйте, Аноним, Вы писали: > > А>Доброго времени суток! > > А>На днях решил пополнить свои знания относительно FAT, MBR и т.д. Эксперименты проводил с дискеткой и стандартным отладчиком( debug.exe ) Windows. Ну так вот. При создании директории в корне дискетки ее имя должно быть не больше 255 символов — это общеизвестно. Создадим такую директорию. Смотрим в Far'е — на это ушло 512байт. Хорошо! Теперь посмотрим через отладчик сколько на это ушло кластеров — и получается, что 2. Но это ведь уже 1024байта!!! В чем здесь может быть заковыка? > > Таблица FAT задает список кластеров файла. Если физически данные файла занимают один кластер, то в таблице FAT под этот файл выделяется две записи. Одна — для кластера с данными, и другая — просто содержит запись типа end-of-file.
Если данные файла занимают один кластер, то и в FAT используется один
элемент, содержащий end-of-file. А номер первого кластера (он же
единственнный) хранится в каталоге.
Здравствуйте, Аноним, Вы писали:
А>Доброго времени суток!
А>На днях решил пополнить свои знания относительно FAT, MBR и т.д. Эксперименты проводил с дискеткой и стандартным отладчиком( debug.exe ) Windows. Ну так вот. При создании директории в корне дискетки ее имя должно быть не больше 255 символов — это общеизвестно. Создадим такую директорию. Смотрим в Far'е — на это ушло 512байт. Хорошо! Теперь посмотрим через отладчик сколько на это ушло кластеров — и получается, что 2. Но это ведь уже 1024байта!!! В чем здесь может быть заковыка?
Навскидку (не могу проверить): на дискетах используется 12-битный FAT. Это не особенности работы с ним? Сейчас не помню, что там было. Проверь, может, дело в этом?
P>Навскидку (не могу проверить): на дискетах используется 12-битный FAT. Это не особенности работы с ним? Сейчас не помню, что там было. Проверь, может, дело в этом?
Вдогонку: кроме очень длинного (255 символов) имени там же еще довольно много данных: короткое имя, дата создания, атрибуты и т. д. Они и занимают дополнительный кластер.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Привет!
PD>Анна Савельева wrote: >> >> Здравствуйте, Аноним, Вы писали: >> >> А>Доброго времени суток! >> >> А>На днях решил пополнить свои знания относительно FAT, MBR и т.д. Эксперименты проводил с дискеткой и стандартным отладчиком( debug.exe ) Windows. Ну так вот. При создании директории в корне дискетки ее имя должно быть не больше 255 символов — это общеизвестно. Создадим такую директорию. Смотрим в Far'е — на это ушло 512байт. Хорошо! Теперь посмотрим через отладчик сколько на это ушло кластеров — и получается, что 2. Но это ведь уже 1024байта!!! В чем здесь может быть заковыка? >> >> Таблица FAT задает список кластеров файла. Если физически данные файла занимают один кластер, то в таблице FAT под этот файл выделяется две записи. Одна — для кластера с данными, и другая — просто содержит запись типа end-of-file.
PD>Если данные файла занимают один кластер, то и в FAT используется один PD>элемент, содержащий end-of-file. А номер первого кластера (он же PD>единственнный) хранится в каталоге.
Точно. Я неправильно поняла код fat.
PD>-- PD>With best regards, PD> Pavel Dvorkin
Здравствуйте, Аноним, Вы писали:
А>Доброго времени суток!
А>На днях решил пополнить свои знания относительно FAT, MBR и т.д. Эксперименты проводил с дискеткой и стандартным отладчиком( debug.exe ) Windows. Ну так вот. При создании директории в корне дискетки ее имя должно быть не больше 255 символов — это общеизвестно. Создадим такую директорию. Смотрим в Far'е — на это ушло 512байт. Хорошо! Теперь посмотрим через отладчик сколько на это ушло кластеров — и получается, что 2. Но это ведь уже 1024байта!!! В чем здесь может быть заковыка?
Реально на FAT можно хранить имя из 260 символов.
Когда хранится длинное имя оно хранится в специальных direntry, из которых используется ТОЛЬКО 13 символов. Максимальное кол-во дополнительных direntry это 20 ( вот откуда 260 = 13 * 20 )
Для того чтобы сохранить имя длиной 255 нужно те-же 20 direntry: (255 + 12)/13.
В одном секторе помещается 512/32 = 16 direntry, т.е. при создании такого имени потребовалось "нарастить" корневой каталог на один кластер. А в твоем случае 1 кластер равен 1 сектор.
В итоге адресуемое пространство уменьшилось на один кластер=сектор
Здравствуйте, Анна Савельева, Вы писали:
АС>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Привет!
PD>>Анна Савельева wrote: >>> >>> Здравствуйте, Аноним, Вы писали: >>> >>> А>Доброго времени суток! >>> >>> А>На днях решил пополнить свои знания относительно FAT, MBR и т.д. Эксперименты проводил с дискеткой и стандартным отладчиком( debug.exe ) Windows. Ну так вот. При создании директории в корне дискетки ее имя должно быть не больше 255 символов — это общеизвестно. Создадим такую директорию. Смотрим в Far'е — на это ушло 512байт. Хорошо! Теперь посмотрим через отладчик сколько на это ушло кластеров — и получается, что 2. Но это ведь уже 1024байта!!! В чем здесь может быть заковыка? >>> >>> Таблица FAT задает список кластеров файла. Если физически данные файла занимают один кластер, то в таблице FAT под этот файл выделяется две записи. Одна — для кластера с данными, и другая — просто содержит запись типа end-of-file.
PD>>Если данные файла занимают один кластер, то и в FAT используется один PD>>элемент, содержащий end-of-file. А номер первого кластера (он же PD>>единственнный) хранится в каталоге. АС>Точно. Я неправильно поняла код fat.
Все понятно. Дальше начала копать код; Обнаружила, что обычный FAT выделяет под имя 8 байт и под расширение 3 байта. Если имя файла 255 символов, то это уже extended fat, то есть там для одного файла создается несколько file dentry (их еще называют в коде слотами), причем для совместимости с первоначальным fat это сделано очень криво. В этом случае имя файла — в unicode и соответственно на каждый символ имени отводится по 2 байта. Ну и считайте дальше сами;