Jaka jest różnica między procfs a sysfs?

71

Jaka jest różnica między procfs a sysfs? Dlaczego są tworzone jako systemy plików? Jak rozumiem, proc to po prostu coś do przechowywania natychmiastowych informacji o procesach działających w systemie.

Sen
źródło

Odpowiedzi:

61

Jaka jest różnica między procfs a sysfs?

procjest stary, jest mniej więcej bez reguł i struktury. W pewnym momencie zdecydowano, że procbyło to trochę zbyt chaotyczne i potrzebna była nowa droga.

Następnie sysfszostał utworzony, a nowe rzeczy, które zostały dodane, zostały umieszczone w sysfspodobnych informacjach o urządzeniu.

W pewnym sensie robią to samo, ale sysfsmają nieco bardziej uporządkowaną strukturę.

Dlaczego są tworzone jako systemy plików?

Filozofia UNIX mówi nam, że wszystko jest „plikiem”, dlatego zostało utworzone, aby zachowywało się jak pliki.

Jak rozumiem, proc to po prostu coś do przechowywania natychmiastowych informacji o procesach działających w systemie.

Te części zawsze były i prawdopodobnie nigdy się nie wprowadzą sysfs.

Ale jest więcej starych rzeczy, które można znaleźć proc, które nie zostały przeniesione.

Johan
źródło
2
Dzięki za odpowiedź. Ale dlaczego cpuinfo i meminfo przypominają rzeczy nadal przechowywane w procfs? Dlaczego nie mogą zostać przeniesieni na sysfs?
Sen
5
Sądzę, że wprowadzają nowe rzeczy do sysfs i po prostu zostawiają stare, ponieważ ma to na celu utrzymanie pewnego poziomu kompatybilności wstecznej. Jest wiele rzeczy, które zależą od tych rzeczy w proc ...
Johan
74

Na początku (w przeszłości w Uniksie) programy dowiedziały się o uruchomionych procesach w systemie poprzez bezpośredni odczyt struktur procesów z pamięci jądra (otwarcie / dev / mem i bezpośrednia interpretacja surowych danych). Tak działały pierwsze polecenia ps. Z czasem niektóre informacje zostały udostępnione za pośrednictwem wywołań systemowych.

Jednak zła forma narażania danych systemowych bezpośrednio na przestrzeń użytkownika za pomocą / dev / mem, i nieznośne jest ciągłe tworzenie nowych wywołań systemowych za każdym razem, gdy chcesz wyeksportować nowy kawałek danych procesowych, dlatego stworzono nowszą metodę aby uzyskać dostęp do danych strukturalnych dla aplikacji w przestrzeni użytkownika, aby dowiedzieć się o atrybutach procesu. To był system plików / proc. Dzięki / proc interfejsy i struktury (katalogi i pliki) mogą być takie same, nawet gdy zmieniają się podstawowe struktury danych w jądrze. Było to znacznie mniej kruche niż wcześniejszy system i lepiej się skalowało.

System plików / proc został pierwotnie zaprojektowany do publikowania informacji o procesie i kilku kluczowych atrybutów systemowych wymaganych przez „ps”, „top”, „free” i kilka innych narzędzi systemowych. Ponieważ jednak był łatwy w użyciu (zarówno od strony jądra, jak i przestrzeni użytkownika), stał się miejscem zrzutu całego zakresu informacji systemowych. Zaczął także zdobywać pliki do odczytu / zapisu, które służą do dostosowywania ustawień i sterowania działaniem jądra lub jego różnych podsystemów. Jednak metodologia implementacji interfejsów kontrolnych była doraźna i / proc wkrótce przerodził się w splątany bałagan.

System plików sysfs (lub / sys) został zaprojektowany w celu dodania struktury do tego bałaganu i zapewnienia jednolitego sposobu wyświetlania informacji o systemie i punktów kontrolnych (ustawialne atrybuty systemu i sterownika) w przestrzeni użytkownika z jądra. Teraz struktura sterowników w jądrze automatycznie tworzy katalogi w katalogu / sys podczas rejestrowania sterowników, w oparciu o typ sterownika i wartości w ich strukturach danych. Oznacza to, że sterowniki określonego typu będą miały te same elementy odsłonięte przez sysfs.

Wiele starszych informacji i punktów kontrolnych systemu jest nadal dostępnych w / proc, ale wszystkie nowe autobusy i kierowcy powinni ujawniać swoje informacje i punkty kontrolne poprzez sysfs.

Tim Bird
źródło
8
Jednym z powodów, dla których jest to „zła forma” do użycia /dev/memi /dev/kmemjest to, że wymagają one dostępu do konta root, więc aplikacje, które ich używają, muszą być skonfigurowane jako setuid.
Barmar
2
W wielu systemach Unix i Linux pliki urządzeń są własnością grupy kmem, a narzędzia takie jak psSGID kmem.
kontr-
2
W rzeczywistości stara metoda bezpośredniego dostępu do jądra /dev/memlub /dev/kmembyła szybsza dla jądra, ponieważ proces w trybie użytkownika mógł tylko mmapplik i pobrać wszystkie informacje po prostu przez odczyt pamięci RAM. Pobieranie jakiejkolwiek informacji z /procsystemu plików wymaga jednego wywołania systemowego, opena drugiego dla, readdlatego jest o wiele wolniejszy. Jednak /procnie wymaga włamań specyficznych dla jądra do odczytu pamięci i naraża znacznie mniej wrażliwe dane na procesy w trybie użytkownika.
Mikko Rantalainen,
10

procfs pozwala na dowolne file_operations, sysfs jest bardziej ograniczony

Ciro Santilli
źródło
3

sysfs to wirtualny system plików utworzony podczas cyklu wydania jądra 2.6 w celu pokazania informacji o urządzeniu, ponieważ procfs nie zrobił tego rodzaju informacji.

Pamięć itp. Nie została przeniesiona do sysfs, ponieważ nigdy nie miała na celu pokazywania tego rodzaju informacji, więc jest mało prawdopodobne, że zostanie w ogóle przeniesiona.

kemra102
źródło
Pamięć itp. Nie została przeniesiona do sysfs Co masz na myśli mówiąc o przenoszeniu? I dlaczego nie zamierzano pokazywać tego rodzaju informacji? Czy możesz mi to wyjaśnić.
Sen
Przez ported miałem na myśli przeniesiony, który był odpowiedzią na twoje pytanie, czy Pamięć itp. Zostanie przeniesiona do sysfs. I zawsze miało to na celu wyświetlanie informacji o urządzeniu, ponieważ to właśnie dlatego procfs nie radził sobie dobrze, procfs jest nadal doskonały dla innych rodzajów informacji.
kemra102,
1

Jak chcę również dodać tutaj ... Ponieważ / proc jest starszą wersją, zawiera informacje o urządzeniu jądra z tego okresu .. jak sysfs przyszedł z wersją jądra 2.6, więc informacje o sterowniku urządzenia tworzą własny katalog, według którego jest nieco uporządkowany i łatwo dostępny ..

gagan bajaj
źródło