Файловая система - это в основном метод хранения файлов в памяти.
Запоминающие устройства, такие как жесткие диски, флэш-накопители, оптические диски, карты памяти и т. Д., Могут хранить фиксированное количество байтов. Пустая, стертая 48-байтовая память содержит это:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Теперь, скажем, у меня есть два текстовых файла
- Первый называется Greetings.txt и содержит слово
Hello
. - Другой называется Username.txt и содержит слово
gronostaj
.
Файлы кодируются с использованием ASCII, поэтому каждая буква соответствует одному байту. После кодирования с использованием ASCII байты файлов:
название
47 72 65 65 74 69 6e 67 73 2e 74 78 74
содержание
48 65 6c 6c 6f
название
55 73 65 72 6e 61 6d 65 2e 74 78 74
содержание
67 72 6f 6e 6f 73 74 61 6a
(Я использую шестнадцатеричные значения из второго столбца таблицы на этом веб-сайте.)
Я могу поместить содержимое первого файла в нашу память следующим образом:
48 65 6c 6c 6f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Однако есть некоторые проблемы.
- Что если я захочу поместить второй файл в память? Как я узнаю, где заканчивается один файл, а другой начинается?
- Файлы имеют имена, как их хранить?
Чтобы решить их, мы можем изобрести простую файловую систему. Допустим, мы чередуем имена файлов с их содержимым, так что за каждым именем файла следует содержимое этого файла, и разделяем их нулевыми байтами. Два последовательных нулевых байта означают «больше нет файлов».
47 72 65 65 74 69 6e 67 <- first 8 bytes of name 1 73 2e 74 78 74 00 48 65 <- next 5 bytes of name 1, then 00, then 2 bytes of content 1 6c 6c 6f 00 55 73 65 72 <- next 3 bytes of content 1, then 00, then 4 bytes of name 2 6e 61 6d 65 2e 74 78 74 <- next 8 bytes of name 2 00 67 72 6f 6e 6f 73 74 <- 00, then 7 bytes of content 2 61 6a 00 00 00 00 00 00 <- 2 bytes of content 2, then 00 00, so no more files
Или то же самое, но без кодировки ASCII: (мы не можем хранить это в памяти, просто ради удобочитаемости)
G r e e t i n g s . t x t 00 H e l l o 00 U s e r n a m e . t x t 00 g r o n o s t a j 00 00 00 00 00 00
Настоящая файловая система также:
- Хранить даты создания и изменения файлов, атрибуты, разрешения, метаданные и другие вещи
- Содержать какое-то оглавление, чтобы к файлам можно было обращаться практически сразу, без сканирования всего диска, пока они не найдены
- Поддержка каталогов
- Поддержка файлов и имен файлов, которые содержат
00
байты - Уметь восстанавливаться после некоторых сбоев
- Поддержка изменения длины файла без перемещения следующих файлов
Но ты получил идею.
Теперь операционные системы. Операционные системы для большинства компьютеров состоят из файлов, поэтому вам нужна файловая система для хранения в ней операционной системы. Но вы можете создать монолитную ОС, которая не должна работать с постоянными файлами и не хранится в файле. FreeRTOS является одним из примеров. Таким образом, хотя файловые системы и операционные системы обычно тесно связаны, они могут существовать друг без друга.
Под «монолитным» я подразумеваю «один кусок двоичного кода». Это был бы так называемый BLOB- объект: последовательность байтов без имени, даты создания или каких-либо других свойств. В конце концов, процессоры просто обрабатывают последовательности инструкций. Они не заботятся о метаданных файлов или файловых системах, они просто хотят получать задания для выполнения. И если вы можете выразить эти инструкции как байты, то блобов достаточно!
И капли могут быть легко сохранены в памяти без какой-либо файловой системы. На самом деле мы сделали это в нашем первом примере, когда мы просто поместили содержимое файла 1 в память.
Надеюсь, это ответит на ваш вопрос!