stringtranslate.com

прокфс

Файловая система 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-е издание

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

СВР3

Исходная операционная система AT&T System V Release 3 (SVR3) (доступная внутри AT&T в 1986 году и вообще в 1987 году) не имела файловой системы /proc , но ее последующая инкрементная версия имела. Он содержал только файлы, представляющие процессы, а не теперь общие подкаталоги.

СВР4

Роджер Фолкнер и Рон Гомес портировали 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, [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 — это номер процесса. Каждый каталог содержит информацию об одном процессе, в том числе:

(Пользователи могут получить PID с помощью такой утилиты, как pgrep , pidof или ps :

$ ls  -l  /proc/ $( pgrep  -n  python3 ) /fd # Перечислить все файловые дескрипторы последнего запущенного процесса `python3', всего 0 lrwx------ 1 baldur baldur 64 18.03.2020 12: 31 0 -> /dev/pts/3 lrwx------ 1 балдур балдур 64 2020-03-18 12:31 1 -> /dev/pts/3 lrwx------ 1 балдур балдур 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 :

$ cat  /proc/cpuinfo процессор: 0vendor_id : AuthenticAMD семейство процессоров: 16 модель: 6 название модели: AMD Athlon(tm) II X2 270 Степпинг процессора: 3 микрокод: 0x10000c8 CPU МГц: 2000.000 Размер кэша: 1024 КБ ... процессор : 1vendor_id : Аутентичное семейство процессоров AMD : 16 модель : 6 название модели : AMD Athlon(tm) II X2 270 Степпинг процессора : 3 микрокод : 0x10000c8 CPU МГц : 800.000 Размер кэша : 1024 КБ ...

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

«братья» = (HT на пакет ЦП) * (количество ядер на пакет ЦП)«ядра процессора» = (количество ядер на пакет ЦП)

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

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

СИГВИН

Cygwin реализовал procfs, который по сути такой же, как procfs в Linux.

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

  1. ^ аб Немет, Эви; Снайдер, Гарт; Хейн, Трент Р.; Уэйли, Бен (14 июля 2010 г.). Руководство по системному администрированию UNIX и Linux. Пирсон Образование. п. 136. ИСБН 978-0-13-211736-4.
  2. ^ аб Амит Сингх (2003). «/proc в Mac OS X». Внутреннее устройство Mac OS X: Книга . Архивировано из оригинала 4 мая 2012 года . Проверено 10 июля 2021 г.
  3. ^ «Почему procfs устарел в пользу procstat?». freebsd.org . 22 февраля 2011 г.
  4. ^ "linprocfs(5)". Страницы руководства FreeBSD . Проект FreeBSD. 13 ноября 2019 года . Проверено 12 июня 2021 г.
  5. ^ «Подробные изменения между OpenBSD 5.6 и 5.7». openbsd.org .
  6. ^ "3.2.2./proc/buddyinfo". centos.org . Архивировано из оригинала 2 сентября 2013 года . Проверено 23 мая 2011 г.
  7. ^ Барон, Джейсон. «HT против двухъядерности». Архивировано из оригинала 13 мая 2016 года . Проверено 28 июня 2011 г.
  8. ^ «Понимание Linux /proc/cpuinfo» . richweb.com . Архивировано из оригинала 3 апреля 2012 года . Проверено 21 апреля 2015 г.
  9. Нгуен, Бинь (30 июля 2004 г.). «Иерархия файловой системы Linux». Бинь Нгуен. п. 63 . Проверено 18 июля 2016 г. /proc/kmsg[:] Сообщения, выводимые ядром. Они также направляются в системный журнал.

Источники

Внешние ссылки