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
можно, внезапно, в доке. Будь готов к тому, что она старая и неполная. Да-да, не только ты не любишь писать документацию.
Пара интересных моментов, которые хочется подсветить:
procfs
(как и любая vfs) при любой операции видит pid вашего процесса. Это позволяет ей иметь свой/proc/self
на каждый процесс.procfs
можно монтировать куда угодно. Обычно он смонтирован в/proc
, но ты можешь монтировать его в/top/kek/wow/kernel-info!
. Только будть готов, что 99% софта сломается, потому что/proc
гарантируется POSIX'ом.