Не уверен, что не по теме, но я считаю, что файловая система должна распознавать блоки битов / байтов и называть эти "файлы" только для того, чтобы сделать их более удобными для лучшего доступа к данным и упаковки как единое целое, а не океан триггеров без порядка. Но как, более или менее, это сделать? Отмечает ли файловая система (любая из них) отображение смещения между началом данных / концом данных, использует ли она идентификатор для проверенного адреса или что-то подобное и т.д.? У меня есть знания в области программирования, но эта концепция недоверчивости наверняка озадачила меня. Я знаю, что большинство файловых систем написаны на языке HLL (например, C, C++, D и т.д.), Но как именно, на самом низком уровне, они отлично отслеживают все, начиная с сектора / блока 1 файла "A" и вплоть до последний диапазон?
2 ответа
Файловые системы не распознают файлы. Вместо этого они определяют, что
Начните с пустого диска и попросите файловую систему создать файл там. Будет:
- Решите, правильно ли указано имя файла и / или синтаксис пути
- Определите местоположение в структуре каталогов, где ваш файл будет находиться логически
- Решите, присутствует ли в этом месте другой файл с тем же именем, и если да, перезаписать его, добавить к нему или вернуть ошибку.
- Создайте одну или несколько записей в метаданных файловой системы, указывающих, что файл присутствует в нужном родительском каталоге.
- Выделите место на диске для байтов, составляющих файл
- Запишите байт файла в выделенное дисковое пространство
- Измените метаданные, чтобы указать расположение всех блоков файла, и скажите, где находится EOF (если это последовательный файл).
Ничто из этого не требует, чтобы файловая система "распознавала" что-либо, кроме тех же самых структур данных, которые она создала в первую очередь.
жесткие диски расположены в кластерах по 512 или 4 тыс. байт данных. Каждый из этих кластеров называется блоком.
На самом низком уровне ОС собирается выдавать команды, такие как чтение из блока 4 или запись в блок 11. Спецификация SATA точно определяет, как эти команды работают и какие команды должны быть доступны. Эти команды низкого уровня абстрагируются в команды более высокого уровня, с которыми взаимодействуют файловые системы.
Файловая система обеспечивает отображение файлов на дисковые блоки. Очень простая файловая система (например, MS-DOS FS) должна начинаться с таблицы разделов (в блоке 0, "суперблок"), которая позволяет определять логические диски поверх физического диска. Каждый логический диск будет начинаться с одной записи, которая определяет каталог. Каждая из этих записей каталога будет содержать список файлов, и какой блок указывает на эти файлы.
Для каждого из файлов первым блоком будет структура метаданных, которая определяет, что это за файл (файл, каталог, ссылка или что-то еще), насколько он большой, каковы его права доступа и список блоков. где данные файла находятся.