Ядро Линукс
Работа с файловыми системами
Виртуальная файловая система (VFS)
Зачем нужна:
- В Linux существует множество файловых систем (ext4, XFS, Btrfs, NTFS, FAT и т.д.).
- Чтобы ядро не писало отдельный код под каждую, придумали виртуальную файловую систему (VFS) — единый «слой-абстракцию», через который всё работает одинаково.
Как устроена:
- VFS — это фундаментальный слой ядра, который представляет собой набор интерфейсов в виде структур данных, содержащих указатели на функции.
Основными являются:
- struct super_operations (операции с суперблоком)
- struct inode_operations (операции с inode)
- struct dentry_operations (операции с dentry)
- struct file_operations (операции с файлом)
- Эти интерфейсы описывают базовые операции: открыть файл, прочитать, записать, создать каталог, удалить и т.д.
Конкретная файловая система (например, ext4) предоставляет экземпляры структур, где указатели ведут на её функции (ext4_read(), ext4_write(), ext4_open())
Как это работает:
- Если новая файловая система хочет поддерживаться в Linux, она должна реализовать все эти функции у себя.
- То есть драйвер файловой системы — это реализация интерфейса, который определён в VFS.
Оптимизация работы:
- В ядре есть кэш (page cache, dentry cache и inode cache).
- Благодаря кэшу не всегда нужно лезть в «железо» (диск) при повторных операциях:
- часто используемые данные читаются из памяти,
- это сильно ускоряет работу с файлами.
dentry cache и inode cache — кэшируют структуру файловой системы (пути, метаданные).
page cache — кэширует содержимое самих файлов (те самые данные, которые вы читаете и записываете).
Итого:
- VFS = «единый интерфейс» для всех файловых систем. Он обеспечивает единообразие системных вызовов. Неважно, работает ли программа с файлом на ext4, XFS или FAT — она всегда использует одни и те же open(), read(), write(), close(). VFS перенаправляет эти вызовы нужной реализации.
- Конкретная файловая система = реализация этого интерфейса.
- Кэш = ускоритель, чтобы не дёргать диск по мелочам.
1 минута
17 июня