Відповіді:
Яка різниця між 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
файл та отримати всю інформацію, просто прочитавши оперативну пам'ять. Отримання будь-якої інформації з /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, так що інформація про драйвер пристрою робить свою власну директорію, за якою це трохи структурований і легкий для доступу ..