Ответы:
В чем разница между procfs и sysfs?
proc
старый, более или менее без правил и структуры. И в какой-то момент было решено, что proc
это слишком хаотично и нужен новый путь.
Затем sysfs
был создан, и новый материал, который был добавлен, был добавлен в sysfs
информацию об устройстве.
Так что в некотором смысле они делают то же самое, но sysfs
немного более структурированы.
Почему они сделаны как файловые системы?
Философия UNIX говорит нам, что все является «файлом», поэтому оно было создано так, что ведет себя как файлы.
Насколько я понимаю, proc - это просто что-то, что позволяет хранить непосредственную информацию о процессах, запущенных в системе.
Эти части всегда были там, и они, вероятно, никогда не войдут sysfs
.
Но есть более старые вещи, которые вы можете найти proc
, которые не были перемещены.
Вначале (еще в Unix) способ, которым программы узнавали о запущенных процессах в системе, заключался в прямом чтении структур процессов из памяти ядра (открытии / dev / mem и прямой интерпретации необработанных данных). Вот как работали самые первые команды ps. Со временем некоторая информация стала доступна через системные вызовы.
Тем не менее, плохо выставлять системные данные непосредственно в пространство пользователя через / dev / mem, и неприятно постоянно создавать новые системные вызовы каждый раз, когда вы хотите экспортировать какой-то новый фрагмент данных процесса, и поэтому был создан более новый метод. получить доступ к структурированным данным для приложений пользовательского пространства, чтобы узнать об атрибутах процесса. Это была файловая система / proc. С помощью / proc интерфейсы и структуры (каталоги и файлы) можно сохранить прежними, даже если базовые структуры данных в ядре изменились. Это было гораздо менее хрупким, чем предыдущая система, и она масштабировалась лучше.
Файловая система / proc изначально была разработана для публикации информации о процессе и нескольких ключевых системных атрибутов, необходимых для 'ps', 'top', 'free' и некоторых других системных утилит. Однако, поскольку его было легко использовать (как со стороны ядра, так и со стороны пользовательского пространства), он стал местом сброса всего спектра системной информации. Кроме того, он начал получать файлы для чтения / записи, которые будут использоваться для настройки параметров и управления работой ядра или его различных подсистем. Тем не менее, методология реализации интерфейсов управления была специальной, и / proc вскоре превратился в запутанный беспорядок.
Система sysfs (или файловая система / sys) была разработана, чтобы добавить структуру в этот беспорядок и обеспечить унифицированный способ предоставления системной информации и контрольных точек (настраиваемые атрибуты системы и драйвера) в пространстве пользователя из ядра. Теперь платформа драйверов в ядре автоматически создает каталоги в / sys при регистрации драйверов, основываясь на типе драйвера и значениях в их структурах данных. Это означает, что драйверы определенного типа будут иметь одинаковые элементы, доступные через sysfs.
Многие из устаревшей системной информации и контрольных точек по-прежнему доступны в / proc, но все новые шины и драйверы должны предоставлять свою информацию и контрольные точки через sysfs.
/dev/mem
и в /dev/kmem
том , что они требуют корневого доступа, поэтому приложения , которые используют их должны быть УИПОМ.
kmem
, и такие инструменты, как ps
SGID kmem
.
/dev/mem
или /dev/kmem
был более быстрым для ядра, потому что процесс пользовательского режима мог просто mmap
файл и извлекать всю информацию просто, читая RAM. Получение любой информации из /proc
файловой системы требует одного системного вызова, open
а другого read
- намного медленнее. Тем /proc
не менее, не требует специальных взломов ядра для чтения памяти и предоставляет гораздо менее конфиденциальные данные для процессов пользовательского режима.
procfs допускает произвольное file_operations
, sysfs более ограничен
Procfs записи получать - file_operations
структуру, которая содержит указатели на функции , которые определяют то , что происходит с каждым на основе файлов системного вызова, например open
, read
, mmap
и т.д., и вы можете принимать любые действия от них.
Минимальные примеры:
sysfs более ограничен в следующих смыслах:
show
и store
, которые использует Linux для реализации open
, close
, read
, write
и lseek
для вас. См. Также: Как прикрепить файловые операции к атрибуту sysfs в драйвере платформы? | Переполнение стекаkobject
Минимальный пример: как создать простой атрибут класса sysfs в ядре Linux v3.2 | Переполнение стека
sysfs - это виртуальная файловая система, созданная во время цикла выпуска ядра 2.6, для отображения информации об устройстве, поскольку procfs не очень хорошо справлялась с этим типом информации.
Память и т. Д. Не была портирована на sysfs, так как никогда не предназначалась для отображения информации такого типа, поэтому маловероятно, что она будет перенесена вообще.
Как я также хочу добавить сюда ... Поскольку / proc является более старой версией, она содержит информацию об устройстве ядра того периода времени .. поскольку sysfs пришла с версией ядра 2.6, поэтому информация о драйвере устройства создает свой собственный каталог, в котором она находится. немного структурирован и легко доступен ..