stringtranslate.com

Все есть файл

«Все есть файл» — это идея, согласно которой Unix и его производные обрабатывают ввод/вывод с таких ресурсов , как документы, жесткие диски, модемы, клавиатуры, принтеры и даже некоторые межпроцессные и сетевые коммуникации, как простые потоки байтов, предоставляемые через пространство имен файловой системы . [1] Исключения включают семафоры , процессы и потоки .

Преимущество этого подхода в том, что один и тот же набор инструментов, утилит и API может использоваться для широкого спектра ресурсов и ряда типов файлов . При открытии файла создается дескриптор файла , использующий путь к файлу в качестве системы адресации. Затем дескриптор файла представляет собой интерфейс ввода-вывода потока байтов, на котором выполняются файловые операции. Дескрипторы файлов также создаются для таких объектов, как анонимные каналы и сетевые сокеты  , и поэтому более точное описание этой функции — Все является дескриптором файла . [2] [3]

Кроме того, существует ряд псевдо- и виртуальных файловых систем , которые предоставляют внутренние данные ядра, такие как информация о процессах, пользовательскому пространству в иерархической файловой структуре. [4] Они монтируются в единую файловую иерархию .

Примером этой чисто виртуальной файловой системы является /proc , которая раскрывает многие системные свойства как файлы. Все эти файлы, в более широком смысле этого слова, имеют стандартные атрибуты файлов Unix, такие как владелец и права доступа , и могут быть запрошены теми же классическими инструментами и фильтрами Unix . Однако это не всегда считается быстрым или переносимым подходом. Некоторые операционные системы не монтируют /proc по умолчанию из-за проблем безопасности или скорости, полагаясь вместо этого на системные вызовы . [5] Тем не менее, он активно используется утилитами оболочки Linux , [6] [7] такими как реализация procps ps и BusyBox , который широко устанавливается на встраиваемых системах . [8] Программа Android Toolbox также зависит от него. [9]

Другим примером является sysfs , который обычно монтируется в /sys , что открывает структуры данных ядра . [10] sysfs предоставляет функциональность, похожую на механизм sysctl, обнаруженный в операционных системах BSD , с той разницей, что sysfs реализован как виртуальная файловая система, а не как специально созданный механизм ядра. [11] Философия sysfs заключается в представлении каждого значения выделенным файлом. Кроме того, каждый файл имеет максимальный размер в PAGE_SIZEбайтах.

Для модуля ядра есть три возможности использовать файл в каталоге /sys:

Стандартный API sysfs использует специальную терминологию: файл называется атрибутом, функция, выполняемая при чтении атрибута, называется , showа функция, выполняемая при записи атрибута, называется store. [12]

Sysfs был получен из procfs между версиями ядра Linux 2.5-2.6, изначально как выделенная файловая система для отладки новой модели драйвера . И sysfs, и procfs основаны на памяти. Sysfs содержит каталоги для блочных устройств , физических типов шин , классов устройств (например, используемых для графики , работы в сети , ввода или печати ), специфичных для прошивки объектов и атрибутов, модулей ядра и подсистемы питания. [13]

Например, запись memв /sys/power/state запустит процедуру приостановки в ОЗУ . [14]

Другим примером файлов с определенным поведением являются файлы устройств /dev/null и /dev/zero . Записи в них будут отброшены. [15] Это может, например, использоваться для перенаправления ненужных стандартных потоков .

Смотрите также

Ссылки

  1. В UNIX все является файлом. Архивировано 10 января 2015 г. на Wayback Machine.
  2. ^ "Линус Торвальдс - 'всё есть дескриптор файла или процесс'". Yarchive.net . Получено 28.08.2015 .
  3. ^ "Призраки прошлого Unix". Lwn.net . Получено 28.08.2015 .
  4. ^ Бенвенути, Кристиан (2006). «3. Интерфейс пользовательского пространства к ядру». Понимание внутреннего устройства сети Linux (изд. Nachdr.). Пекин Кельн: О'Рейли. п. 58. ИСБН 9780596002558.
  5. ^ "8. procfs: ушли, но не забыты". Freebsd.org . Получено 28.08.2015 .
  6. ^ Сяо, Ян; Ли, Фрэнк Хайчжон; Чэнь, Хуэй (2011). Справочник по безопасности и сетям. Хакенсак (Нью-Джерси): World scientific. стр. 160. ISBN 9789814273039.
  7. ^ "27. Обновление и настройка ядра". Red Hat Linux Networking and System Administration . John Wiley & Sons. 2007. стр. 662. ISBN 9780471777311.
  8. ^ "busybox - BusyBox: швейцарский армейский нож встраиваемого Linux". Git.busybox.net . Получено 28.08.2015 .
  9. ^ "platform_system_core/ps.c в master · android/platform_system_core · GitHub". GitHub.com . 2015-03-09 . Получено 2015-08-28 .
  10. ^ Mochel, Patrick; Murphy, Mike (16 августа 2011 г.). "sysfs - _Файловая_ система для экспорта объектов ядра". kernel.org . Архивировано из оригинала 13 марта 2024 г. . Получено 15 июня 2024 г. .
  11. ^ Vskills, Team. "SysFS и proc". Учебник . Получено 2024-06-15 .
  12. ^ "sysfs, procfs, sysctl, debugfs и другие подобные интерфейсы ядра". Блог Джона . 2013-11-20 . Получено 15-06-2024 .
  13. ^ Патрик Мохель, Подсистема sysfs, Linux Symposium 2005, стр. 314-317
  14. ^ Высоцки, Рафаэль Дж. "System Power Management Sleep States". kernel.org . Получено 15 июня 2024 г. .
  15. ^ "null(4) - Страница руководства Linux". www.man7.org . Получено 2024-06-15 .