flapenguin.me

vfs - нет никаких файлов

|

Оригинал https://t.me/bits_and_bicycles/6

Вчера я упомянул про #procfs. И это отличный повод поговорить про файловые системы.

Кто-то может сказать, что procfs – не настоящая файловая система. На это я могу ответить, что любая файловая система, которая умеет read/write/chmod/… – настоящая.

Ты можешь написать модуль ядра, который делает на эти вызовы всё что угодно (в разумных пределах): ходит в жёсткий диск, по сети или просто на лету генерирует какую-то информацию. Последним и занимается procfs.

(Если уж честно, то и ваш ext4 генерирует информацию на лету. Какая разница, берёт он её с жёсткого диска или из каких-то структур в памяти? А чтобы было ещё более запутано, все файловые системы называются виртуальными, #vfs. Про #fuse, ещё одну из них, как-нибудь в следующий раз.)

Логика у procfs и похожих фс (например, sysfs) следующая: зачем городить отдельные syscall'ы, чтобы прокинуть какие-то функции из ядра, если я могу отдавать её в виде байтов на read, которые ты можешь хоть grep’ать, что в vim'е открывать. Более того, информацию можно гонять и в другую сторону, если поддержать write.

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

Пара интересных моментов, которые хочется подсветить:

  1. procfs (как и любая vfs) при любой операции видит pid вашего процесса. Это позволяет ей иметь свой /proc/self на каждый процесс.
  2. procfs можно монтировать куда угодно. Обычно он смонтирован в /proc, но ты можешь монтировать его в /top/kek/wow/kernel-info!. Только будть готов, что 99% софта сломается, потому что /proc гарантируется POSIX'ом.