Все есть файл
«Все есть файл» — это идея, согласно которой 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:
- параметр модуля
- зарегистрировать новую подсистему
- debugfs : debugfs, смонтированный в /sys/kernel/debug.
Стандартный 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] Это можно, например, использовать для перенаправления ненужных стандартных потоков .
См. также
[ редактировать ]- 9P — сетевой протокол, разработанный для распределенной операционной системы Plan 9.
- Файл устройства
- Синтетическая файловая система
- Unix-архитектура
- Стандарт иерархии файловой системы
- https://www.kernel.org/doc/gorman/html/understand/understand015.html
- https://tldp.org/LDP/intro-linux/html/sect_03_01.html
Ссылки
[ редактировать ]- ^ В UNIX все представляет собой файл, заархивированный 10 января 2015 г. на Wayback Machine.
- ^ «Линус Торвальдс: «Все есть файловый дескриптор или процесс» » . Ярхив.нет . Проверено 28 августа 2015 г.
- ^ «Призраки прошлого Unix» . Lwn.net . Проверено 28 августа 2015 г.
- ^ Бенвенути, Кристиан (2006). «3. Интерфейс пользовательского пространства к ядру» . Понимание внутреннего устройства сети Linux (изд. Nachdr.). Пекин Кельн: О'Рейли. п. 58. ИСБН 9780596002558 .
- ^ «8. procfs: Ушло, но не забыто» . Freebsd.org . Проверено 28 августа 2015 г.
- ^ Сяо, Ян; Ли, Фрэнк Хайжон; Чен, Хуэй (2011). Справочник по безопасности и сетям . Хакенсак (Нью-Джерси): Мировая наука. п. 160. ИСБН 9789814273039 .
- ^ «27. Обновление и настройка ядра» . Сетевое и системное администрирование Red Hat Linux . Джон Уайли и сыновья. 2007. с. 662. ИСБН 9780471777311 .
- ^ «busybox — BusyBox: швейцарский армейский нож встраиваемого Linux» . Git.busybox.net . Проверено 28 августа 2015 г.
- ^ «platform_system_core/ps.c в master · android/platform_system_core · GitHub» . GitHub.com . 09.03.2015 . Проверено 28 августа 2015 г.
- ^ Мочел, Патрик; Мерфи, Майк (16 августа 2011 г.). «sysfs — файловая система для экспорта объектов ядра» . ядро.орг . Архивировано из оригинала 13 марта 2024 года . Проверено 15 июня 2024 г.
- ^ Вскиллс, Команда. «SysFS и процесс» . Учебник . Проверено 15 июня 2024 г.
- ^ «sysfs, procfs, sysctl, debugfs и другие подобные интерфейсы ядра» . Блог Джона . 20 ноября 2013 г. Проверено 15 июня 2024 г.
- ^ Патрик Мочел, Подсистема sysfs, Симпозиум Linux 2005 г., стр. 314-317
- ^ Высоцкий, Рафаэль Дж. «Состояния сна управления питанием системы» . ядро.орг . Проверено 15 июня 2024 г.
- ^ «null(4) — страница руководства Linux» . www.man7.org . Проверено 15 июня 2024 г.