Яка різниця між procfs та sysfs?


71

Яка різниця між procfs та sysfs? Чому вони створені як файлові системи? Як я розумію, proc - це просто щось для зберігання безпосередньої інформації щодо процесів, що працюють в системі.

Відповіді:


61

Яка різниця між procfs та sysfs?

procце стара, вона більш-менш без правил і структури. І в якийсь момент було вирішено, що procце занадто хаотично і потрібен новий шлях.

Потім sysfsбуло створено, і новий матеріал, який було додано, розміщувався sysfsяк інформація про пристрої.

Тож у певному сенсі вони роблять те саме, але sysfsтрохи структурованіші.

Чому вони створені як файлові системи?

Філософія UNIX говорить нам, що все є "файлом", тому він був створений, щоб він поводився як файли.

Як я розумію, proc - це просто щось для зберігання безпосередньої інформації щодо процесів, що працюють в системі.

Ці частини завжди були там, і вони, ймовірно, ніколи не переїжджатимуть sysfs.

Але є ще старі речі, які ви можете знайти proc, які не переміщені.


2
Дякую за відповідь. Але чому cpuinfo та meminfo як речі все ще зберігаються в procfs? Чому вони не можуть бути переміщені до sysfs?
Сен

5
Я думаю, що вони поміщають нові речі в sysfs і просто залишають старі, як це є, щоб зберегти деякий рівень зворотної сумісності. Існує дуже багато речей, що залежить від тих речей, що проробляються ...
Йохан

74

На початку (назад у 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файл та отримати всю інформацію, просто прочитавши оперативну пам'ять. Отримання будь-якої інформації з /procфайлової системи вимагає одного системного виклику, openа іншого для, readтому це набагато повільніше. Однак /procдля читання пам'яті не потрібні конкретні хаки для ядра та піддаються набагато менш чутливі дані процесам режиму користувача.
Мікко Ранталайнен

10

procfs дозволяє довільно file_operations, sysfs більш обмежені


3

sysfs - це віртуальна файлова система, створена під час циклу випуску ядра 2.6 для відображення інформації про пристрої, оскільки procfs не робив такого типу інформації.

Пам'ять тощо не переноситься на sysfs, оскільки вона ніколи не мала на меті показувати такий тип інформації, тому навряд чи вона взагалі буде перенесена.


Пам'ять тощо не була перенесена на sysfs Що ви розумієте під перенесенням? І чому він не мав на меті показувати таку інформацію? Чи можете ви поясніть мені це?
Сен

Під портою я мав на увазі переміщення, яке було відповіддю на ваше запитання, чи пам’ять тощо буде переміщена до sysfs. І він коли-небудь мав на меті показувати інформацію про пристрої, оскільки це було те, що PROFS не робило добре, procfs все ще чудово підходить для інших типів інформації.
kemra102

1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.