TGViewer
Сохранёнки программиста Сохранёнки программиста @prog_stuff · 6.54K subscribers
Post #2896 586
Первый открытый файл обычно получает дескриптор 3, потому что ядро выдаёт минимальный свободный номер в таблице процесса

Хесус Эспино 13 июля объяснил виртуальную файловую систему Linux, тот слой, из-за которого одни и те же вызовы одинаково работают с ext4, с /proc и с примонтированной по сети NFS. Устроен он на C-структурах с указателями на функции: каждая файловая система подставляет свои реализации, а ядро вызывает их через общие имена.

Объектов в этой модели четыре, и разделение между ними отвечает на бытовые вопросы вроде «почему у файла может быть два имени».

🔘 superblock представляет конкретную смонтированную файловую систему;
🔘 inode хранит сам файл, каталог или ссылку вместе с метаданными, но собственного имени не знает;
🔘 dentry связывает имя внутри родительского каталога с inode, и ядро кэширует в том числе отрицательные dentry для отсутствующих файлов;
🔘 struct file создаётся на каждое открытие, поэтому два открытия одного inode имеют независимые позиции чтения;
🔘 набор file_operations даёт принцип «всё является файлом»: сокеты, устройства, epoll и таймеры живут за дескрипторами с совершенно разным поведением;
🔘 дескриптор — это просто индекс в таблице указателей struct file *, а номера 0, 1 и 2 обычно уже заняты стандартными потоками ввода, вывода и ошибок.

Открытие /etc/hostname идёт компонент за компонентом, и при попадании в кэш каталогов до самой файловой системы дело не доходит. Режим RCU-walk позволяет читателям обходить закэшированные пути почти без блокировок, переключаясь на обычные блокировки, когда путь меняют. Чтение потом проходит через страничный кэш: первый cat поднимает страницу с диска, а следующие обслуживаются из оперативной памяти.

Полная статья: https://internals-for-interns.com/posts/linux-kernel-vfs/

Сохранять тем, кто разбирает странности с I/O: файл удалён, а место не освободилось, или две ручки на один файл почему-то читают из разных мест.

@prog_stuff
  • 👍 2
More from @prog_stuff
  1. Sep 20, 2026Как процессор предсказывает ветвления Псевдотранскрипт доклада объясняет тему с нуля. Конв…
  2. Sep 20, 2026Почему одни движки регулярных выражений зависают, а другие нет Обстоятельная статья Расса…
  3. Sep 19, 2026Как проверять изменения без риска для всего трафика Компактный разбор о снижении риска при…
  4. Sep 19, 2026Как собрать модель пиковой нагрузки из боевой телеметрии Обстоятельный гайд о замене выгру…
  5. Sep 18, 2026Как работает фильтр Блума и когда его неточность экономит память Фильтр Блума сообщает: «э…
  6. Sep 17, 2026Как работает однопошаговый отладчик Linux на ptrace Обстоятельная статья разбирает основу…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →