В чем разница между procfs и sysfs?

71

В чем разница между procfs и sysfs? Почему они сделаны как файловые системы? Насколько я понимаю, proc - это просто что-то, что позволяет хранить непосредственную информацию о процессах, запущенных в системе.

сен
источник

Ответы:

61

В чем разница между procfs и sysfs?

procстарый, более или менее без правил и структуры. И в какой-то момент было решено, что procэто слишком хаотично и нужен новый путь.

Затем sysfsбыл создан, и новый материал, который был добавлен, был добавлен в sysfsинформацию об устройстве.

Так что в некотором смысле они делают то же самое, но sysfsнемного более структурированы.

Почему они сделаны как файловые системы?

Философия UNIX говорит нам, что все является «файлом», поэтому оно было создано так, что ведет себя как файлы.

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

Эти части всегда были там, и они, вероятно, никогда не войдут sysfs.

Но есть более старые вещи, которые вы можете найти proc, которые не были перемещены.

Johan
источник
2
Спасибо за ответ .. Но почему cpuinfo и meminfo как вещи все еще поддерживаются в procfs? Почему они не могут быть перемещены в sysfs?
Сен
5
Я предполагаю, что они помещают новые вещи в sysfs, и просто оставляют старые, так как они поддерживают некоторый уровень обратной совместимости. Есть много вещей, которые зависят от этих вещей в процессе ...
Йохан
75

Вначале (еще в Unix) способ, которым программы узнавали о запущенных процессах в системе, заключался в прямом чтении структур процессов из памяти ядра (открытии / dev / mem и прямой интерпретации необработанных данных). Вот как работали самые первые команды ps. Со временем некоторая информация стала доступна через системные вызовы.

Тем не менее, плохо выставлять системные данные непосредственно в пространство пользователя через / dev / mem, и неприятно постоянно создавать новые системные вызовы каждый раз, когда вы хотите экспортировать какой-то новый фрагмент данных процесса, и поэтому был создан более новый метод. получить доступ к структурированным данным для приложений пользовательского пространства, чтобы узнать об атрибутах процесса. Это была файловая система / proc. С помощью / proc интерфейсы и структуры (каталоги и файлы) можно сохранить прежними, даже если базовые структуры данных в ядре изменились. Это было гораздо менее хрупким, чем предыдущая система, и она масштабировалась лучше.

Файловая система / proc изначально была разработана для публикации информации о процессе и нескольких ключевых системных атрибутов, необходимых для 'ps', 'top', 'free' и некоторых других системных утилит. Однако, поскольку его было легко использовать (как со стороны ядра, так и со стороны пользовательского пространства), он стал местом сброса всего спектра системной информации. Кроме того, он начал получать файлы для чтения / записи, которые будут использоваться для настройки параметров и управления работой ядра или его различных подсистем. Тем не менее, методология реализации интерфейсов управления была специальной, и / proc вскоре превратился в запутанный беспорядок.

Система sysfs (или файловая система / sys) была разработана, чтобы добавить структуру в этот беспорядок и обеспечить унифицированный способ предоставления системной информации и контрольных точек (настраиваемые атрибуты системы и драйвера) в пространстве пользователя из ядра. Теперь платформа драйверов в ядре автоматически создает каталоги в / sys при регистрации драйверов, основываясь на типе драйвера и значениях в их структурах данных. Это означает, что драйверы определенного типа будут иметь одинаковые элементы, доступные через sysfs.

Многие из устаревшей системной информации и контрольных точек по-прежнему доступны в / proc, но все новые шины и драйверы должны предоставлять свою информацию и контрольные точки через sysfs.

Тим Берд
источник
8
Одна из причин , что это «плохая форма» , чтобы использовать /dev/memи в /dev/kmemтом , что они требуют корневого доступа, поэтому приложения , которые используют их должны быть УИПОМ.
Бармар
2
Во многих системах Unix и в Linux эти файлы устройств принадлежат группе kmem, и такие инструменты, как psSGID kmem.
контррежим
2
Фактически, старый метод прямого доступа /dev/memили /dev/kmemбыл более быстрым для ядра, потому что процесс пользовательского режима мог просто mmapфайл и извлекать всю информацию просто, читая RAM. Получение любой информации из /procфайловой системы требует одного системного вызова, openа другого read- намного медленнее. Тем /procне менее, не требует специальных взломов ядра для чтения памяти и предоставляет гораздо менее конфиденциальные данные для процессов пользовательского режима.
Микко Ранталайнен
10

procfs допускает произвольное file_operations, sysfs более ограничен

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник
3

sysfs - это виртуальная файловая система, созданная во время цикла выпуска ядра 2.6, для отображения информации об устройстве, поскольку procfs не очень хорошо справлялась с этим типом информации.

Память и т. Д. Не была портирована на sysfs, так как никогда не предназначалась для отображения информации такого типа, поэтому маловероятно, что она будет перенесена вообще.

kemra102
источник
Память и т. Д. Не были портированы на sysfs Что вы подразумеваете под портированием? И почему это не было предназначено, чтобы показать этот тип информации? Не могли бы вы объяснить это мне.
Сен
Под портированием я имел в виду перемещенный, который был ответом на ваш вопрос о том, будет ли Memory и т. Д. Перемещены в sysfs И это было предназначено только для отображения информации об устройстве, так как это было то, что procfs не очень хорошо работал, procfs все еще отлично подходит для других типов информации.
kemra102
1

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

гаган бахадж
источник