Как / proc / self реализован в Linux?

19

Я возился с /procфайловой системой в Linux, и я столкнулся с ней /proc/self, которая является символической ссылкой на каталог процесса текущего процесса. Хотелось бы узнать, как это реализовано. Одним из решений было бы изменить эту символическую ссылку при каждом переключении контекста , но это, очевидно, очень дорого, поскольку требует доступа к диску.

Вики Чижвани
источник

Ответы:

20

http://lxr.linux.no/linux+v3.2.9/fs/proc/base.c#L2482 является текущей реализацией.

procФайловая система является полностью виртуальной, и реализована таким образом внутренними VFS readlinkделегаты на правильное место для специальных симлинок. Таким образом, он вычисляет, на что selfуказывает, когда он прочитан / пройден, а не на каждый переключатель контекста.

Даниэль Питтман
источник
12

Файлы в /procне хранятся на диске, они генерируются на лету ядром. См. Что происходит, когда я открываю и читаю из / proc?

Если вы склонны к программированию, вы можете прочитать реализацию /procв исходном коде ядра . Содержимое /proc/selfсимволической ссылки генерируется функцией, которая заполняет буфер pid вызывающего процесса.

Жиль "ТАК - прекрати быть злым"
источник