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