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.
źródło
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.
Jaka jest różnica między procfs a sysfs?
proc
jest stary, jest mniej więcej bez reguł i struktury. W pewnym momencie zdecydowano, że proc
było to trochę zbyt chaotyczne i potrzebna była nowa droga.
Następnie sysfs
został utworzony, a nowe rzeczy, które zostały dodane, zostały umieszczone w sysfs
podobnych informacjach o urządzeniu.
W pewnym sensie robią to samo, ale sysfs
mają 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.
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.
źródło
/dev/mem
i/dev/kmem
jest to, że wymagają one dostępu do konta root, więc aplikacje, które ich używają, muszą być skonfigurowane jako setuid.kmem
, a narzędzia takie jakps
SGIDkmem
./dev/mem
lub/dev/kmem
była szybsza dla jądra, ponieważ proces w trybie użytkownika mógł tylkommap
plik i pobrać wszystkie informacje po prostu przez odczyt pamięci RAM. Pobieranie jakiejkolwiek informacji z/proc
systemu plików wymaga jednego wywołania systemowego,open
a drugiego dla,read
dlatego jest o wiele wolniejszy. Jednak/proc
nie 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.procfs pozwala na dowolne
file_operations
, sysfs jest bardziej ograniczonywpisy procfs otrzymać
file_operations
struct, który zawiera wskaźników funkcji, które określają, co dzieje się z każdym wywołaniu systemowym pliku oparte, na przykładopen
,read
,mmap
itd, i można podjąć dowolne działania od tych.Minimalne przykłady:
/proc/*
działa | Super użytkownikproc_create()
przykład dla modułu jądra | Przepełnienie stosusysfs jest bardziej ograniczony w następujących aspektach:
show
istore
, co Linux używa do realizacjiopen
,close
,read
,write
ilseek
dla ciebie. Zobacz także: Jak dołączyć operacje na plikach do atrybutu sysfs w sterowniku platformy? | Przepełnienie stosukobject
Minimalny przykład: jak stworzyć prosty atrybut klasy sysfs w jądrze Linux v3.2 | Przepełnienie stosu
źródło
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.
źródło
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 ..
źródło