Procfs - Procfs

В файловая система proc (procfs) - это специальная файловая система в Unix-подобный операционные системы, которые представляют информацию о процессы и другая системная информация в иерархической файловой структуре, предоставляя более удобный и стандартизированный метод для динамического доступа к данным процесса, хранящимся в ядре, чем традиционный отслеживание методы или прямой доступ к ядро объем памяти. Обычно он отображается на Точка монтирования названный / proc во время загрузки. Файловая система proc действует как интерфейс для внутренних структур данных в ядре. Его можно использовать для получения информации о системе и для изменения определенных параметров ядра во время выполнения (sysctl ).

Многие Unix-подобные операционные системы поддерживают файловую систему proc, включая Солярис, IRIX, Tru64 UNIX, BSD, Linux, IBM AIX, QNX, и План 9 от Bell Labs. OpenBSD прекратил поддержку в версии 5.7, выпущенной в мае 2015 года.

В Ядро Linux расширяет его на данные, не относящиеся к процессу.

Файловая система proc обеспечивает способ связи между пространство ядра и пространство пользователя. Например, GNU версия утилиты отчетов о процессах пс использует файловую систему proc для получения данных без использования каких-либо специализированных системные вызовы.

История

UNIX 8-е издание

Том Дж. Киллиан реализовал UNIX 8-е издание (V8) версия / proc: он представил доклад под названием «Процессы как файлы» в USENIX в июне 1984 года. Дизайн procfs был направлен на замену ptrace системный вызов, используемый для отслеживания процесса. Подробную документацию можно найти в страница руководства proc (4).

SVR4

Роджер Фолкнер и Рон Гомес портированный V8 / proc к SVR4, и опубликовал статью под названием «Файловая система процессов и модель процессов в UNIX System V» на USENIX в январе 1991 года. Этот вид procfs поддерживал создание пс, но доступ к файлам можно было получить только с помощью функций читать(), записывать(), и ioctl (). Между 1995 и 1996 годами Роджер Фолкнер создал интерфейс procfs-2 для Solaris-2.6, который предлагает структурированную файловую систему / proc с подкаталогами.

План 9

План 9 реализовал файловую систему процессов, но пошел дальше, чем V8. В файловой системе процессов V8 реализован отдельный файл для каждого процесса. Plan 9 создал иерархию отдельных файлов для обеспечения этих функций и сделал / proc реальной частью файловой системы.

4.4BSD

4.4BSD клонировал свою реализацию / proc из плана 9.[нужна цитата ] По состоянию на февраль 2011 г., procfs постепенно отменяется во FreeBSD.[1] Он был удален из OpenBSD в версии 5.7, выпущенной в мае 2015 года, потому что она «всегда страдала от условий гонки и теперь не используется».[2]

Солярис

/ proc в Solaris был доступен с самого начала. Solaris 2.6 в 1996 году представил procfs2 от Роджера Фолкнера.

Linux

Реализация 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 / корень, символическая ссылка на корневой путь с точки зрения процесса. Для большинства процессов это будет ссылка на /, если процесс не запущен в chroot jail.
  • / proc / PID / статус содержит основную информацию о процессе, включая его состояние выполнения и использование памяти.
  • / proc / PID / задача, каталог, содержащий жесткие ссылки для любых задач, которые были запущены этим (то есть родительским) процессом.

(Пользователи могут получить PID с такой утилитой, как pgrep, пидоф или же пс:

$ ls -l / proc /$(pgrep -n python3)/ fd # Список всех файловых дескрипторов последнего запущенного процесса `python3 'всего 0lrwx ------ 1 baldur baldur 64 2020-03-18 12:31 0 -> / dev / pts / 3lrwx ------ 1 baldur baldur 64 2020-03-18 12:31 1 -> / dev / pts / 3lrwx ------ 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 включает значение для "богомолы ", часто ошибочно воспринимается как мера скорости ЦП, например, эталонный тест, но на самом деле он вообще не измеряет какое-либо разумное (для конечных пользователей) значение. Это происходит как побочный эффект калибровки таймера ядра и дает сильно различающиеся значения в зависимости от типа процессора, даже при одинаковых тактовых частотах.
$ cat / proc / cpuinfoпроцессор: 0 vendor_id: AuthenticAMD семейство процессоров: 16 модель: 6 название модели: AMD Athlon (tm) II X2 270 Processor шаг: 3 микрокод: 0x10000c8 процессор, МГц: 2000,000 размер кеша: 1024 КБ ... процессор: 1 vendor_id: AuthenticAMD семейство процессоров: 16 модель: 6 название модели: AMD Athlon (tm) II X2 270 Processor шаг: 3 микрокод: 0x10000c8 процессор МГц: 800,000 размер кеша: 1024 КБ ...

На многоядерных процессорах / proc / cpuinfo содержит поля для «братьев и сестер» и «ядер процессора», которые представляют собой следующие вычисления:[4]

"siblings" = (HT на пакет ЦП) * (# ядер на пакет ЦП) "ядра процессора" = (# ядер на пакет ЦП)

Пакет ЦП означает физический ЦП, который может иметь несколько ядер (одноядерный для одного, двухъядерный для двух, четырехъядерный для четырех) .Это позволяет различать Hyper Threading и двухъядерный, то есть количество гиперпотоков на пакет ЦП можно рассчитать с помощью братья и сестры / ядра ЦП. Если оба значения для пакета ЦП одинаковы, то гиперпоточность не поддерживается.[5] Например, пакет ЦП с siblings = 2 и «cpu cores» = 2 является двухъядерным ЦП, но не поддерживает гиперпоточность.

  • / proc / крипто, список доступных криптографических модулей
  • / proc / устройства, список символьных и блочных устройств, отсортированных по идентификатору устройства, но с указанием большей части / dev имя тоже
  • / proc / diskstats, предоставляя некоторую информацию (включая номера устройств) для каждого из логических дисковых устройств
  • / proc / файловые системы, список файловых систем, поддерживаемых ядром на момент перечисления
  • / 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 / разделы, список номеров устройств, их размер и / 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 / драйвер выглядит как[оригинальное исследование? ] список различных типов tty доступные - каждый из которых представляет собой список тех, что каждого типа
  • / proc / время безотказной работы, время, в течение которого ядро ​​работало с момента загрузки и находилось в режиме ожидания (оба в секундах)
  • / proc / версия, содержащий версию ядра Linux, номер дистрибутива, gcc номер версии (используемый для сборки ядра) и любую другую соответствующую информацию, относящуюся к версии ядра, работающей в данный момент.
  • другие файлы в зависимости от различного оборудования, конфигураций модулей и изменений ядра.

Основные утилиты, которые используют / proc в Linux, входят в procps (/ proc процессы) и функционируют только вместе с установленным / proc.

Собственные расширения

Несколько компаний и проектов добавили дополнительные функции в / proc для своих систем, например / proc / lcd, может быть файлом, содержащим содержимое ЖК-экрана передней панели. Текст, записанный в этот файл, будет отображаться на экране.

Рекомендации

  1. ^ "Почему procfs устарел в пользу procstat?". freebsd.org.
  2. ^ «Подробные изменения между OpenBSD 5.6 и 5.7». openbsd.org.
  3. ^ "3.2.2. / Proc / buddyinfo". centos.org. Архивировано из оригинал 2 сентября 2013 г.. Получено 23 мая 2011.
  4. ^ Барон, Джейсон. «HT против двухъядерного процессора».
  5. ^ «Понимание Linux / proc / cpuinfo». richweb.com. Архивировано из оригинал 3 апреля 2012 г.. Получено 21 апреля 2015.
  6. ^ Нгуен, Бинь (30 июля 2004 г.). "Иерархия файловой системы Linux". Бинь Нгуен. п. 63. Получено 18 июля 2016. / proc / kmsg [:] Сообщения, выводимые ядром. Они также направляются в системный журнал.

внешняя ссылка