Root Directory!
От: Аноним  
Дата: 15.10.04 21:27
Оценка:
Доброго времени суток!

На днях решил пополнить свои знания относительно FAT, MBR и т.д. Эксперименты проводил с дискеткой и стандартным отладчиком( debug.exe ) Windows. Ну так вот. При создании директории в корне дискетки ее имя должно быть не больше 255 символов — это общеизвестно. Создадим такую директорию. Смотрим в Far'е — на это ушло 512байт. Хорошо! Теперь посмотрим через отладчик сколько на это ушло кластеров — и получается, что 2. Но это ведь уже 1024байта!!! В чем здесь может быть заковыка?
Re: Root Directory!
От: Анна Савельева  
Дата: 18.10.04 04:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Доброго времени суток!


А>На днях решил пополнить свои знания относительно FAT, MBR и т.д. Эксперименты проводил с дискеткой и стандартным отладчиком( debug.exe ) Windows. Ну так вот. При создании директории в корне дискетки ее имя должно быть не больше 255 символов — это общеизвестно. Создадим такую директорию. Смотрим в Far'е — на это ушло 512байт. Хорошо! Теперь посмотрим через отладчик сколько на это ушло кластеров — и получается, что 2. Но это ведь уже 1024байта!!! В чем здесь может быть заковыка?


Таблица FAT задает список кластеров файла. Если физически данные файла занимают один кластер, то в таблице FAT под этот файл выделяется две записи. Одна — для кластера с данными, и другая — просто содержит запись типа end-of-file.
Re[2]: Root Directory!
От: Pavel Dvorkin Россия  
Дата: 18.10.04 06:30
Оценка:
Привет!

Анна Савельева wrote:
>
> Здравствуйте, Аноним, Вы писали:
>
> А>Доброго времени суток!
>
> А>На днях решил пополнить свои знания относительно FAT, MBR и т.д. Эксперименты проводил с дискеткой и стандартным отладчиком( debug.exe ) Windows. Ну так вот. При создании директории в корне дискетки ее имя должно быть не больше 255 символов — это общеизвестно. Создадим такую директорию. Смотрим в Far'е — на это ушло 512байт. Хорошо! Теперь посмотрим через отладчик сколько на это ушло кластеров — и получается, что 2. Но это ведь уже 1024байта!!! В чем здесь может быть заковыка?
>
> Таблица FAT задает список кластеров файла. Если физически данные файла занимают один кластер, то в таблице FAT под этот файл выделяется две записи. Одна — для кластера с данными, и другая — просто содержит запись типа end-of-file.

Если данные файла занимают один кластер, то и в FAT используется один
элемент, содержащий end-of-file. А номер первого кластера (он же
единственнный) хранится в каталоге.

--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.9 gamma
With best regards
Pavel Dvorkin
Re: Root Directory!
От: Privalov  
Дата: 18.10.04 08:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Доброго времени суток!


А>На днях решил пополнить свои знания относительно FAT, MBR и т.д. Эксперименты проводил с дискеткой и стандартным отладчиком( debug.exe ) Windows. Ну так вот. При создании директории в корне дискетки ее имя должно быть не больше 255 символов — это общеизвестно. Создадим такую директорию. Смотрим в Far'е — на это ушло 512байт. Хорошо! Теперь посмотрим через отладчик сколько на это ушло кластеров — и получается, что 2. Но это ведь уже 1024байта!!! В чем здесь может быть заковыка?


Навскидку (не могу проверить): на дискетах используется 12-битный FAT. Это не особенности работы с ним? Сейчас не помню, что там было. Проверь, может, дело в этом?
Re[2]: Root Directory!
От: Privalov  
Дата: 18.10.04 09:20
Оценка:
P>Навскидку (не могу проверить): на дискетах используется 12-битный FAT. Это не особенности работы с ним? Сейчас не помню, что там было. Проверь, может, дело в этом?

Вдогонку: кроме очень длинного (255 символов) имени там же еще довольно много данных: короткое имя, дата создания, атрибуты и т. д. Они и занимают дополнительный кластер.
Re[3]: Root Directory!
От: Анна Савельева  
Дата: 18.10.04 12:12
Оценка:
Здравствуйте, 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
Re: Root Directory!
От: MShura  
Дата: 18.10.04 12:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Доброго времени суток!


А>На днях решил пополнить свои знания относительно 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 сектор.
В итоге адресуемое пространство уменьшилось на один кластер=сектор
Re[4]: Root Directory!
От: Анна Савельева  
Дата: 18.10.04 12:50
Оценка:
Здравствуйте, Анна Савельева, Вы писали:

АС>Здравствуйте, 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 байта. Ну и считайте дальше сами;


PD>>--

PD>>With best regards,
PD>> Pavel Dvorkin
Re[2]: Root Directory!
От: MShura  
Дата: 18.10.04 16:30
Оценка:
MS>В одном секторе помещается 512/32 = 16 direntry, т.е. при создании такого имени потребовалось "нарастить" корневой каталог

вообще-то то, что я написал выше касается ТОЛЬКО FAT32. На FAT12/16 корневой каталог имеет фиксированный размер.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.