прокфс
Эта статья нуждается в дополнительных цитатах для проверки . ( март 2010 г. ) |
Файловая система proc ( procfs ) — это специальная файловая система в Unix-подобных операционных системах, которая представляет информацию о процессах и другую системную информацию в иерархической файловой структуре, обеспечивая более удобный и стандартизированный метод динамического доступа к данным процесса, хранящимся в ядре, чем традиционные методы трассировки или прямой доступ к памяти ядра . он сопоставляется с точкой монтирования с именем /proc Обычно во время загрузки . Файловая система proc действует как интерфейс к внутренним структурам данных о запущенных процессах в ядре. В Linux его также можно использовать для получения информации о ядре и изменения определенных параметров ядра во время выполнения ( sysctl ).
Многие Unix-подобные операционные системы поддерживают файловую систему proc, включая System V , Solaris , IRIX , Tru64 UNIX , BSD , Linux , IBM AIX , [ 1 ] QNX и Plan 9 от Bell Labs . Поддержка OpenBSD прекращена в версии 5.7, выпущенной в мае 2015 года. Она отсутствует в HP-UX. [ 1 ] и macOS . [ 2 ]
Ядро Linux расширяет его до данных, не связанных с процессом.
Файловая система proc обеспечивает метод связи между пространством ядра и пространством пользователя . Например, версия GNU утилиты отчетов о процессах ps использует файловую систему proc для получения своих данных без использования каких-либо специализированных системных вызовов .
История
[ редактировать ]UNIX 8-е издание
[ редактировать ]Том Дж. Киллиан реализовал для UNIX 8-го издания версию /proc доклад под названием «Процессы как файлы» (V8): он представил на USENIX в июне 1984 года. Целью разработки procfs была замена системного вызова ptrace, используемого для трассировки процессов. Подробную документацию можно найти на странице руководства proc(4) .
СВР3
[ редактировать ]Исходная операционная система AT&T System V Release 3 (SVR3) (доступная внутри AT&T в 1986 году и обычно в 1987 году) не имела файловой системы /proc , но ее последующая инкрементная версия имела. Он содержал только файлы, представляющие процессы, а не теперь общие подкаталоги.
SVR4
[ редактировать ]Роджер Фолкнер и Рон Гомес портировали V8 /proc на SVR4 и опубликовали статью под названием «Файловая система процесса и модель процесса в UNIX System V» на сайте USENIX в январе 1991 года. Этот тип procfs поддерживал создание ps , но файлы могли Доступ к ним возможен только с помощью функций read() , write() и ioctl () . Между 1995 и 1996 годами Роджер Фолкнер создал интерфейс procfs-2 для Solaris-2.6, который предлагает структурированную файловую систему /proc с подкаталогами.
План 9
[ редактировать ]Plan 9 реализовал файловую систему процессов, но пошел дальше, чем V8. Файловая система процессов V8 реализовала один файл для каждого процесса. Plan 9 создал иерархию отдельных файлов для обеспечения этих функций и сделал /proc реальной частью файловой системы.
4.4BSD и производные
[ редактировать ]4.4BSD клонировала свою реализацию /proc из Плана 9. [ нужна ссылка ] По состоянию на февраль 2011 г. [update], procfs постепенно прекращается во FreeBSD, [ 3 ] и вместо этого стало использоваться интерфейс sysctl для информации, связанной с процессом. Для обеспечения двоичной совместимости с программами пользовательского пространства Linux ядро FreeBSD также предоставляет linprocfs , аналогичный procfs Linux. [ 4 ] Он был удален из OpenBSD в версии 5.7, выпущенной в мае 2015 года, поскольку «всегда страдал от гонок и теперь не используется». [ 5 ] В macOS не реализована procfs, и программы пользовательского пространства должны использовать интерфейс sysctl для получения данных процесса. [ 2 ]
Солярис
[ редактировать ]/proc в Solaris был доступен с самого начала (июнь 1992 г.). В Solaris 2.6 в 1996 году появился procfs2 от Роджера Фолкнера.
Линукс
[ редактировать ]Linux впервые добавил файловую систему /proc в версии 0.97.3 , сентябрь 1992 года, и впервые начал расширять ее для данных, не связанных с процессом, в версии 0.98.6, декабрь 1992 года.
По состоянию на 2020 год реализация Linux включает каталог для каждого запущенного процесса, включая ядра , в каталогах с именем процессы /proc/PID , где PID — это номер процесса. Каждый каталог содержит информацию об одном процессе, в том числе:
- /proc/PID/cmdline — команда, которая изначально запустила процесс.
- /proc/PID/cwd — символическая ссылка на текущий рабочий каталог процесса.
- /proc/PID/environ содержит имена и значения переменных среды, влияющих на процесс.
- /proc/PID/exe — символическая ссылка на исходный исполняемый файл, если он все еще существует (процесс может продолжать работу после того, как его исходный исполняемый файл был удален или заменен).
- /proc/PID/fd — каталог, содержащий символическую ссылку для каждого дескриптора открытого файла .
- /proc/PID/fdinfo — каталог, содержащий записи, описывающие позицию и флаги для каждого дескриптора открытого файла.
- /proc/PID/maps — текстовый файл, содержащий информацию о сопоставленных файлах и блоках (например, куче и стеке).
- /proc/PID/mem процесса , двоичный образ, представляющий виртуальную память , доступен только процессу ptrace .
- /proc/PID/root — символическая ссылка на корневой путь, видимый процессом. Для большинства процессов это будет ссылка на /, если только процесс не запущен в chroot -тюрьме.
- /proc/PID/status содержит основную информацию о процессе, включая состояние его выполнения и использование памяти.
- /proc/PID/task — каталог, содержащий жесткие ссылки на любые задачи, запущенные этим (т. е. родительским) процессом.
(Пользователи могут получить PID с помощью такой утилиты, как pgrep , pidof или ps :
$ ls -l /proc/$(pgrep -n python3)/fd # List all file descriptors of the most recently started `python3' process
total 0
lrwx------ 1 baldur baldur 64 2020-03-18 12:31 0 -> /dev/pts/3
lrwx------ 1 baldur baldur 64 2020-03-18 12:31 1 -> /dev/pts/3
lrwx------ 1 baldur baldur 64 2020-03-18 12:31 2 -> /dev/pts/3
$ readlink /proc/$(pgrep -n python3)/exe # List executable used to launch the most recently started `python3' process
/usr/bin/python3.8
)
/proc также включает в себя системную информацию, не связанную с процессом, хотя в ядре 2.6 большая часть этой информации перенесена в отдельную псевдофайловую систему sysfs , смонтированную под /система :
- в зависимости от режима управления питанием (если он вообще есть) либо каталог, /proc/acpi или /proc/apm , которые предшествуют sysfs и содержат различную информацию о состоянии управления питанием.
- /proc/buddyinfo — информация об алгоритме приятеля , который обрабатывает фрагментацию памяти. [ 6 ]
- /proc/bus , содержащий каталоги, представляющие различные шины на компьютере, например PCI / USB . Его в значительной степени заменила sysfs в /sys/bus, которая гораздо более информативна.
- /proc/fb — список доступных фреймбуферов.
- /proc/cmdline , предоставляющий параметры загрузки, передаваемые ядру.
- /proc/cpuinfo , содержащий информацию о процессоре , такую как его поставщик (и семейство процессоров, модель и названия моделей, которые должны позволять пользователям идентифицировать процессор) и его скорость ( тактовая частота процессора ), размер кэша, количество одноуровневых элементов, ядер, и флаги ЦП . Формат и доступная информация во многом зависят от архитектуры. В некоторых архитектурах /proc/cpuinfo включает значение для « bogomips », которое часто ошибочно воспринимается как мера скорости процессора, например, эталон, но на самом деле оно вообще не измеряет никакого разумного (для конечных пользователей) значения. Это происходит как побочный эффект калибровки таймера ядра и дает сильно различающиеся значения в зависимости от типа процессора даже при одинаковых тактовых частотах.
$ cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 16
model : 6
model name : AMD Athlon(tm) II X2 270 Processor
stepping : 3
microcode : 0x10000c8
cpu MHz : 2000.000
cache size : 1024 KB
...
processor : 1
vendor_id : AuthenticAMD
cpu family : 16
model : 6
model name : AMD Athlon(tm) II X2 270 Processor
stepping : 3
microcode : 0x10000c8
cpu MHz : 800.000
cache size : 1024 KB
...
В многоядерных процессорах /proc/cpuinfo содержит поля для «братьев» и «ядер процессора», которые представляют собой следующие вычисления: [ 7 ]
"siblings" = (HT per CPU package) * (# of cores per CPU package) "cpu cores" = (# of cores per CPU package)
Пакет ЦП означает физический ЦП, который может иметь несколько ядер ( одноядерное для одного, двухъядерное для двух, четырехъядерное для четырех). Это позволяет различать гиперпоточность и двухъядерность, т. е. количество гиперпотоков на пакет ЦП можно рассчитать по братьям и сестрам / ядрам ЦП . Если оба значения для пакета ЦП одинаковы, гиперпоточность не поддерживается. [ 8 ] Например, пакет ЦП с братьями и сестрами = 2 и «ядрами процессора» = 2 является двухъядерным ЦП, но не поддерживает гиперпоточность.
- /proc/crypto — список доступных криптографических модулей.
- /proc/devices — список символьных и блочных устройств, отсортированный по идентификатору устройства, но дающий большую часть / имя устройства тоже
- /proc/diskstats , предоставляющий некоторую информацию (включая номера устройств) для каждого из устройств логического диска.
- /proc/filesystems — список файловых систем, поддерживаемых ядром на момент листинга.
- /прок/прерывания , /прок/иомем , /proc/ioports и каталог /proc/irq , предоставляющий некоторую информацию об устройствах (физических или логических), использующих различные системные ресурсы.
- /proc/kmsg , содержащий сообщения, выводимые ядром [ 9 ]
- /proc/loadavg , содержащий статистику о текущей средней загрузке за последние минуты.
- /proc/meminfo , содержащий сводную информацию о том, как ядро управляет своей памятью.
- /proc/modules — один из самых важных файлов в /proc , содержащий список модулей ядра, загруженных в данный момент. Это дает некоторое представление (не всегда правильное) о зависимостях.
- /proc/mounts — символическая ссылка на self/mounts, содержащая список смонтированных в данный момент устройств и их точек монтирования (а также какая файловая система используется и какие параметры монтирования используются).
- /proc/net/ — каталог, содержащий полезную информацию о сетевом стеке, в частности /proc/net/nf_conntrack , в котором перечислены существующие сетевые подключения (особенно полезно для отслеживания маршрутизации, когда iptables FORWARD используется для перенаправления сетевых подключений)
- /proc/partitions — список номеров устройств, их размер и /dev имена, которые ядро определило как существующие разделы
- /proc/scsi , предоставляющий информацию о любых устройствах, подключенных через SCSI или RAID -контроллер.
- символическая ссылка на текущий (проходящий) процесс в /proc/self (т.е. /proc/PID/ , где PID — это идентификатор текущего процесса).
- /proc/slabinfo , список статистики кэшей для часто используемых объектов в ядре Linux.
- /proc/swaps — список активных разделов подкачки, их различные размеры и приоритеты.
- Доступ к динамически настраиваемым параметрам ядра в разделе /прок/система . Под В /proc/sys появляются каталоги, представляющие области ядра, содержащие виртуальные файлы, доступные для чтения и записи .
Например, часто упоминаемый виртуальный файл: /proc/sys/net/ipv4/ip_forward , поскольку он необходим для маршрутизации межсетевых экранов или туннелей. Файл содержит либо «1», либо «0»: если он равен 1, стек IPv4 пересылает пакеты, не предназначенные для локального хоста, если он равен 0, то нет. - /proc/sysvipc о совместном использовании памяти и межпроцессном взаимодействии (IPC). , содержащий информацию
- /proc/tty , содержащий информацию о терминалах ; /proc/tty/driver содержит список драйверов TTY и их использование. [ 10 ]
- /proc/uptime — время, в течение которого ядро работало с момента загрузки и находилось в режиме ожидания (оба в секундах)
- /proc/version , содержащий версию ядра Linux, номер дистрибутива, номер версии gcc (используемый для сборки ядра) и любую другую соответствующую информацию, относящуюся к версии ядра, работающей в данный момент.
- другие файлы в зависимости от различного оборудования, конфигураций модулей и изменений в ядре.
Основные утилиты, использующие /proc в Linux, входят в состав procps ( /procprocesses ) и функционируют только в сочетании с смонтированным /проц .
СИГВИН
[ редактировать ]Cygwin реализовал procfs, который по сути такой же, как procfs в Linux.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Немет, Эви; Снайдер, Гарт; Хейн, Трент Р.; Уэйли, Бен (14 июля 2010 г.). Руководство по системному администрированию UNIX и Linux . Пирсон Образование. п. 136. ИСБН 978-0-13-211736-4 .
- ^ Перейти обратно: а б Амит Сингх (2003). «/proc в Mac OS X» . Внутреннее устройство Mac OS X: Книга . Архивировано из оригинала 4 мая 2012 года . Проверено 10 июля 2021 г.
- ^ «Почему procfs устарел в пользу procstat?» . freebsd.org . 22 февраля 2011 г.
- ^ "linprocfs(5)" . Страницы руководства FreeBSD . Проект FreeBSD. 13 ноября 2019 года . Проверено 12 июня 2021 г.
- ^ «Подробные изменения между OpenBSD 5.6 и 5.7» . openbsd.org .
- ^ «3.2.2. /proc/buddyinfo» . centos.org . Архивировано из оригинала 2 сентября 2013 года . Проверено 23 мая 2011 г.
- ^ Барон, Джейсон. «HT против двухъядерности» . Архивировано из оригинала 13 мая 2016 года . Проверено 28 июня 2011 г.
- ^ «Понимание Linux /proc/cpuinfo» . richweb.com . Архивировано из оригинала 3 апреля 2012 года . Проверено 21 апреля 2015 г.
- ^
Нгуен, Бинь (30 июля 2004 г.). «Иерархия файловой системы Linux» . Бинь Нгуен. п. 63 . Проверено 18 июля 2016 г.
/proc/kmsg[:] Сообщения, выводимые ядром. Они также направляются в системный журнал.
- ^ «Файловая система /proc» . Документация ядра Linux . Проверено 9 августа 2024 г.
Источники
[ редактировать ]- Страница руководства proc(2) Unix 8th Edition — описание оригинального procfs.
- Страница руководства по procfs Plan 9. Plan 9 значительно расширил концепцию procfs, предоставив значительно расширенный интерфейс для управления процессами и управления ими.
- Страницы руководства Linux Proc(5) Документация по Linux для procfs
- Documentation/filesystems/proc.txt Документация по ядру Linux для procfs
Внешние ссылки
[ редактировать ]- Краткая история /proc Блог Эрика Шрока
- Доступ к ядру Linux с помощью Procfs. Статья М. Тима Джонса на IBM DeveloperWorks.
- Linux-файловая система-иерархия Linux Проект документации
- Откройте для себя возможности каталога /proc Федерико Кереки.