Перейти к содержанию
    

Как происходит удаление файла в FAT16?

Если файл вырос в размере и не помещается в кластер, то происходит запись в следующий свободный кластер.

Но если следующий свободный кластер находится ближе к концу. То как понять где продолжение файла?

У нас есть только

"Младшее слово первого кластера файла" ---> который равен 0007h и "Размер файла в байтах".

Пример:

0000h 0001h 0002h 0003h 0004h 0005h 0006h 0007h 0008h 0009h 000Ah 000Bh 000Ch
F8 FF FF FF 03 00 04 00 05 00 FF FF FF FF 08 00 0A 00 F7 FF 0C 00 00 00 FF FF
        Файл 1 Файл 2 Файл 3 BAD Файл 3 free Файл 3

 

Вот какой алгоритм чтения файла 3 ? 

Изменено пользователем Alex_Golubev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Алгоритм простой - чтение по записям в таблице FAT, до достижения кластера обозначенного 0xFFFF. Этот кластер последний в цепи. Всё вроде бы.

В примере, это цепочка: 07, 08, 0А, 0С.

 

Если файл прирос длиной, и будет перезаписан, то будет такая последовательность действий (предполагается, что весь "выросший" файл лежит в ОЗУ компьютера и снова вычитывать его не надо):

1. Пометка записи в каталоге первого байта 0хЕ5

2. Очистка цепочки записей в FAT (записи 07, 08, 0А, 0С = 00)

3. Очистка в каталожной записи поля "№ начального кластера" = 0

4. Запись по свободным кластерам новых данных (теперь это будет цепочка 07, 08, 0А, , 0С)

5. Отметка в таблице FAT новой появившейся цепочки

6. Обновление записи в каталоге, с указанием нового начала цепочки кластеров, новой длины, а также нового времени обновления файла. В данном примере новое начало цепочки будет совпадать с прежним (было 07 и стало 07), но если бы где-то ближе к началу таблицы были ещё свободные ячейки, то файл начинался бы оттуда.

Изменено пользователем controller_m30

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пройти по цепочке. Начальный адрес цепи будет в заголовке файла, а остальные адреса в таблице FAT.

 

В примере это так:

1. Из заголовка берём начало цепочки - адрес 07

2. В ячейке 07 читаем число 08

3. В ячейке 08 читаем 0А

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 6/24/2021 at 12:08 PM, Herz said:

Предисловие мне уже понравилось:

image.thumb.png.d80a4e801edd6350e27d5280b07cf37f.png

Религиозные люди тоже бывают хорошими спецами.

Давно это было. Могу быть неточен, но в общем картина такова.
В FAT16 есть три области, в которых пишутся данные о файле:

Директория, где (кажется 32 байта выделено на каждый файл) записывается имя, длина, права доступа, позиция начала файла и может что-то еще.

Две других области -- две копии друг друга. Они должны быть одинаковыми всегда. Забыл как они называются. Буду называть картами. В них указывается карта расположения файла на диске. 
Диск разбит на блоки определенной длины, которые пронумерованы, и, скажем, наш файл записан в блоках 100, 215 и 233. Каждый блок данных имеет в карте соответствующее ему место для записи номера блока, в котором продолжение файла записано.
диск разбит, скажем на 10000 блоков, значит обе карты имеют таблицу в 10000 позиций для записи номера следующего блока. Порядок следования блоков соответствует порядку следования позиций в карте.

В директории записано 100 в обоих картах в позиции, соответствующей блоку 100 записано в 215 в позиции соответствующей блоку 215 записано 233, а в позиции соответствующей блоку 233 записано специальное слово -- конец файла.

Для стирания файла в директории вместо самого первого символа имени пишут ноль (0х00). Однако, если не записать признак свободного блока в обе карты в каждую использованную стираемым файлом позицию, то получится, что часть диска будет недоступна. Есть инструменты, которые это лечат, но надо стараться этого не допускать.

Дефрагментация -- это такое переписывание фрагментов файлов, чтобы они шли подряд для каждого файла и в картах указатели на них будут в соседних ячейках.

100, 215, 233 превратятся в 100,101, 102. Начало может тоже измениться и вместо 100 может быть другое число.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 6/25/2021 at 2:52 AM, Alex_Golubev said:

Изучаю FAT16, вопрос для чего нужен загрузчик ?

Не знаю как сейчас с этим дело обстоит. Раньше загрузчик загружал bootloader.

Не было жесткого диска и загрузка осуществлялась с диска, на котором стояла DOS или на других системах CPM. Для того, чтобы стартануть надо было с чего-то начать и начинали с загрузчика, который находится в определенном месте MBR блока.
Диск, с которого стартует система не является частью компьютера и любой диск может иметь операционку и должен уметь загрузить комютер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Tarbal сказал:

Две других области -- две копии друг друга. Они должны быть одинаковыми всегда. Забыл как они называются.

FAT они и называются. File Allocation Table.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, Alex_Golubev сказал:

Что-то вроде понял. А как происходит дефрагментация файлов , какой алгоритм? 

Не интересовался)

Знаю только что в NTFS дефрагментация делается автоматически, поскольку сама идеология NTFS предполагает оптимальную укладку файлов. И там дефрагментация реализуется совсем по другому принципу, чем в системе FAT.

А в FAT12,16,32 дефрагментация скорее бонус. Пользователь запускает дефрагментацию вручную, когда "тормоза" системы становятся невыносимы, или как-то настраивает расписание автоматической дефрагментации по дате. Там "классические" принципы дефрагментации, унаследованные ещё от MS-DOS. Требуется какой-то процент свободного места на диске, никаких дисковых операций в это время не делать, и вообще, результат может быть любым (потеря данных, краш системы, или просто "ничего не получилось").

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насколько я помню, алгоритмов дефрагментации довольно много.

Просто зачем они ТС ? ТС не должно интересовать, насколько фрагментирован диск. Его дело - записать на диск файл так, как это предполагает FAT. Или считать  - точно так же. А делать после записи дефрагментацию или нет - решать не ТС, а ОС или даже не ей, а пользователю ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какие интересные предположения и домыслы.

Нет 10 минут прочитать описание в вики ?

и про MBR и про FAT

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Знаю только что в NTFS дефрагментация делается автоматически...


Если бы автоматически - Планировщиком (scheduler который).
Когда в Win7 обнаружил и удалил из планировщика эту задачу - активность "винта" снизилась вот просто "на ура". Раза в квартал вручную как в старых добрых MSDOS (ndd) или Win98 (defrag) хватает вполне.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, controller_m30 said:

Знаю только что в NTFS дефрагментация делается автоматически

Конечно. Программой defrag по расписанию.
Как многое другое, что в Task Scheduler прописано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтобы не запутать ТС в новых для него сведениях, предлагаю не валить в одну кучу NTFS и FAT. Это принципиально разные файловые системы, дефрагментация в них работает по разному, и служит разным целям.

 

FAT12 создавалась изначально для носителей на дискетах, компьютеров с очень малым объёмом ОЗУ, и использовалась на жутко медленных дисководах. Поэтому для большей эффективности использования ОЗУ и дисковода, все данные укладываются компактно, как можно ближе к 0 сектору. Из-за чего со временем получается "чехарда" из частей разных файлов. Дефрагментация в системе FAT исправляет этот врождённый недостаток. Т.е. это типа "лекарство". FAT16 и 32 ради преемственности сохранили и недостатки FAT12.

 

NTFS создавалась для серверов работающих на современной элементной базе, и главный приоритет - обеспечить быстрый доступ к данным. Ради скоростного доступа, в NTFS каждый файл записывается непрерывной цепочкой, а для этого ОС нужно всегда иметь "под рукой" большие участки свободного пространства. Дефрагментация в NTFS работает на устранение фрагментации свободного пространства, для этого выполняя более компактную укладку цепочек файлов, которые изначально нефрагментированы (в отличие от FAT, где фрагментируются сами файлы, и дефрагментатор пытается собрать в кучку хотя бы их).

Стандартная ситуация в NTFS - перезапись файла. Новая копия файла пишется неразрывной цепочкой на свободном пространстве, и только после успешного завершения удаляется на прежнем месте. Это приводит к постоянному появлению больших областей не занятых данными, которые желательно собирать в единое целое. Чем дефрагментатор NTFS и занимается. При этом дефрагментация в NTFS работает значительно быстрее, т.к. перемещение последовательных цепочек кластеров гораздо более простая задача, чем "раскладывание пасьянса" в дефрагментаторе FAT.

Ситуация подобная FAT, когда на диске присутствуют фрагменты файлов, да ещё в виде "чехарды", в NTFS тоже может возникнуть, но только при исчерпании возможности перемещать файлы целиком (наличие большого количества битых секторов, неперемещаемых системных файлов и проч.)

 

В общем дефрагментация в FAT это "лечение", а в NTFS стандартный рабочий инструмент для эффективной работы.

Изменено пользователем controller_m30

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...