Proc файловая система ( PROCFS ) специальная файловая система в Unix-подобных операционных систем, представляет информацию о процессах и другой системной информации в иерархической файловой структурой, что обеспечивает более удобный и стандартизованный метод для динамического доступа к данным процесса , проводимых в ядре , чем традиционные методы трассировки или прямой доступ к памяти ядра . Обычно он сопоставляется с точкой монтирования с именем / proc во время загрузки. Файловая система proc действует как интерфейс для внутренних структур данных в ядре. Его можно использовать для получения информации о системе и для изменения определенных параметров ядра во время выполнения (sysctl ).
Многие Unix-подобные операционные системы поддерживают файловую систему proc, включая Solaris , IRIX , Tru64 UNIX , BSD , Linux , IBM AIX , QNX и Plan 9 от Bell Labs . OpenBSD прекратил поддержку в версии 5.7, выпущенной в мае 2015 года.
Ядро Linux расширяет его данным , не связанные с процессом.
Proc файловая система обеспечивает способ обмена данными между пространством ядра и пользовательским пространством . Например, GNU- версия утилиты создания отчетов о процессах ps использует файловую систему proc для получения данных без использования каких-либо специализированных системных вызовов .
История
UNIX 8-е издание
Том Дж. Киллиан реализовал версию / proc для UNIX 8-го издания (V8) : он представил доклад под названием «Процессы как файлы» на USENIX в июне 1984 года. Дизайн procfs был направлен на замену системного вызова ptrace, используемого для отслеживания процессов. Подробную документацию можно найти на странице руководства proc (4) .
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 из Plan 9. [ необходима цитата ] По состоянию на февраль 2011 г.[Обновить], procfs постепенно отменяется во FreeBSD. [1] Он был удален из OpenBSD в версии 5.7, выпущенной в мае 2015 года, потому что он «всегда страдал от состояния гонки и теперь не используется». [2]
Солярис
/ proc в Solaris был доступен с самого начала. Solaris 2.6 в 1996 году представил procfs2 от Роджера Фолкнера.
Linux
Linux впервые добавила файловую систему / proc в версии 0.97.3 , сентябрь 1992 г., и впервые начала расширять ее для данных, не связанных с процессами, в версии 0.98.6, декабрь 1992 г.
С 2020 года реализация Linux включает каталог для каждого запущенного процесса, включая процессы ядра , в каталогах с именем / proc / PID , где PID - это номер процесса. Каждый каталог содержит информацию об одном процессе, в том числе:
- / proc / PID / cmdline , команда, которая изначально запустила процесс.
- / proc / PID / cwd , символическая ссылка на текущий рабочий каталог процесса.
- / proc / PID / Environment содержит имена и значения переменных среды, которые влияют на процесс.
- / proc / PID / exe , символическая ссылка на исходный исполняемый файл , если он все еще существует (процесс может продолжить работу после удаления или замены исходного исполняемого файла).
- / proc / PID / fd , каталог, содержащий символическую ссылку для каждого дескриптора открытого файла .
- / proc / PID / fdinfo , каталог, содержащий записи, описывающие положение и флаги для каждого дескриптора открытого файла.
- / proc / PID / maps , текстовый файл, содержащий информацию о сопоставленных файлах и блоках (например, куча и стек).
- / proc / PID / mem , двоичный образ, представляющий виртуальную память процесса , может быть доступен только процессу ptrace .
- / proc / PID / root , символическая ссылка на корневой путь, видимый процессом. Для большинства процессов это будет ссылка на /, если только процесс не запущен в chroot jail .
- / proc / PID / status содержит основную информацию о процессе, включая его состояние выполнения и использование памяти.
- / proc / PID / task , каталог, содержащий жесткие ссылки на любые задачи, которые были запущены этим (то есть родительским) процессом.
(Пользователи могут получить PID с помощью такой утилиты, как pgrep , pidof или ps :
$ ls -l / proc / $ ( pgrep -n python3 ) / fd # Список всех файловых дескрипторов последнего запущенного процесса `python3 ' total 0 lrwx ------ 1 baldur baldur 64 18.03.2020 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 # Список исполняемых файлов, используемых для запуска последнего запущенного процесса `python3 ' / usr / bin / python3 .8
)
/ proc также включает системную информацию, не связанную с процессами, хотя в ядре 2.6 большая часть этой информации перемещена в отдельную псевдо-файловую систему, sysfs , смонтированную под / sys :
- в зависимости от режима управления питанием (если вообще) любой каталог, / proc / acpi или / proc / apm , которые предшествуют sysfs и содержат различные биты информации о состоянии управления питанием.
- / proc / buddyinfo , информация об алгоритме приятеля, который обрабатывает фрагментацию памяти. [3]
- / proc / bus , содержащий каталоги, представляющие различные шины на компьютере, такие как PCI / USB . Это было в значительной степени заменено sysfs из каталога / sys / bus, который является гораздо более информативным.
- / proc / fb , список доступных кадровых буферов
- / proc / cmdline , предоставляя параметры загрузки, передаваемые ядру
- / proc / cpuinfo , содержащий информацию о ЦП , такую как его поставщик (и семейство ЦП, модель и названия моделей, которые должны позволять пользователям идентифицировать ЦП) и его скорость ( тактовая частота ЦП ), размер кеша, количество братьев и сестер, ядер, и флаги ЦП . / proc / cpuinfo включает значение для " bogomips ", которое часто ошибочно воспринимается как мера скорости процессора, например, эталонный тест, но на самом деле оно вообще не измеряет какое-либо разумное (для конечных пользователей) значение. Это происходит как побочный эффект калибровки таймера ядра и дает сильно различающиеся значения в зависимости от типа процессора даже при одинаковых тактовых частотах.
$ cat / proc / cpuinfo процессор: 0 vendor_id: AuthenticAMD cpu family: 16 модель: 6 название модели: AMD Athlon (tm) II X2 270 Степень процессора : 3 микрокод: 0x10000c8 cpu MHz: 2000,000 размер кеша: 1024 КБ ... процессор : 1 vendor_id: AuthenticAMD cpu family: 16 модель: 6 название модели: AMD Athlon (tm) II X2 270 Степень процессора : 3 микрокод: 0x10000c8 cpu MHz: 800.000 размер кэша: 1024 КБ ...
На многоядерных процессорах / proc / cpuinfo содержит поля для «братьев и сестер» и «ядер процессора», которые представляют собой следующие вычисления: [4]
"siblings" = (HT на пакет ЦП) * (количество ядер на пакет ЦП)"cpu cores" = (количество ядер на пакет ЦП)
Пакет ЦП означает физический ЦП, который может иметь несколько ядер ( одно ядро для одного, двухъядерный для двух, четырехъядерный для четырех). Это позволяет различать гиперпоточность и двухъядерность, т. Е. Количество гиперпотоков на пакет ЦП может быть рассчитано по родственным узлам / ядрам ЦП . Если оба значения для пакета ЦП одинаковы, то гиперпоточность не поддерживается. [5] Например, пакет ЦП с siblings = 2 и «cpu cores» = 2 является двухъядерным ЦП, но не поддерживает гиперпоточность.
- / proc / crypto , список доступных криптографических модулей
- / proc / devices , список символьных и блочных устройств, отсортированных по идентификатору устройства, но с указанием основной части / dev имя тоже
- / proc / diskstats , содержащий некоторую информацию (включая номера устройств) для каждого из логических дисковых устройств.
- / proc / filesystems , список файловых систем, поддерживаемых ядром на момент листинга.
- / proc / interrupts , / proc / iomem , / proc / ioports и каталог / proc / irq , содержащий некоторые сведения об устройствах (физических или логических), использующих различные системные ресурсы.
- / proc / kmsg , содержащий сообщения, выводимые ядром [6]
- / 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 появляются каталоги, представляющие области ядра, содержащие доступные для чтения и записи виртуальные файлы .
Например, обычно упоминаемый виртуальный файл / proc / sys / net / ipv4 / ip_forward , поскольку он необходим для маршрутизации межсетевых экранов или туннелей. Файл содержит либо «1», либо «0»: если он равен 1, стек IPv4 пересылает пакеты, не предназначенные для локального хоста, если это 0, то это не так. - / proc / sysvipc , содержащий информацию о совместном использовании памяти и межпроцессном взаимодействии (IPC).
- / proc / tty , содержащий информацию о текущих терминалах; / proc / tty / driver выглядит [ оригинальным исследованием? ] список различных типов доступных терминалов - каждый из которых представляет собой список терминалов каждого типа.
- / proc / uptime , время , в течение которого ядро работало с момента загрузки и находилось в режиме ожидания (оба в секундах)
- / proc / version , содержащий версию ядра Linux, номер дистрибутива, номер версии gcc (используемый для сборки ядра) и любую другую соответствующую информацию, относящуюся к версии ядра, работающей в данный момент.
- другие файлы в зависимости от различного оборудования, конфигураций модулей и изменений ядра.
Основные утилиты, которые используют / proc в Linux, входят в состав procps ( / proc процессов) и функционируют только вместе с смонтированным / proc .
Собственные расширения
Некоторые компании и проекты добавили дополнительные функции в / proc для своих систем, например, / proc / lcd может быть файлом, содержащим содержимое ЖК-экрана передней панели. Текст, записанный в этот файл, будет отображаться на экране.
Рекомендации
- ^ "Почему procfs устарел в пользу procstat?" . freebsd.org .
- ^ «Подробные изменения между OpenBSD 5.6 и 5.7» . openbsd.org .
- ^ «3.2.2. / Proc / buddyinfo» . centos.org . Архивировано из оригинального 2 -го сентября 2013 года . Проверено 23 мая 2011 года .
- ^ Барон, Джейсон. «HT против двухъядерных процессоров» .
- ^ «Понимание Linux / proc / cpuinfo» . richweb.com . Архивировано из оригинала 3 апреля 2012 года . Проверено 21 апреля 2015 года .
- ^ Нгуен, Бинь (30 июля 2004 г.). «Иерархия файловой системы Linux» . Бинь Нгуен. п. 63 . Проверено 18 июля +2016 .
/ proc / kmsg [:] Сообщения, выводимые ядром. Они также направляются в системный журнал.
- Страница справочника proc (2) Unix 8th Edition - Описание оригинальных файлов procfs.
- Страница руководства по procfs Plan 9 - Plan 9 значительно расширил концепцию procfs, предоставив значительно расширенный интерфейс для управления процессами и управления ими.
- Linux Manual Pages Proc (5) Руководство по Linux для procfs
- Documentation / filesystems / proc.txt документация ядра Linux для procfs
Внешние ссылки
- Краткая история блога / proc Эрика Шрока
- Доступ к ядру Linux с помощью Procfs Статья М. Тима Джонса на IBM developerWorks
- Linux-Файловая система-Иерархия Проект документации Linux
- Откройте для себя возможности каталога / proc от Федерико Кереки