Procfs
procfs este un sistem de fișiere special utilizat în sistemele de operare asemănătoare UNIX . Vă permite să accesați informații din nucleu despre procesele de sistem. Este necesar pentru a rula comenzi precum ps , w , top . Este de obicei montat pe /proc. procfs creează o reprezentare pe două niveluri a spațiilor de proces. La nivelul superior, procesele sunt directoare numite în funcție de pid -ul lor . Tot la nivelul superior se află un link către directorul corespunzător procesului de efectuare a solicitării; poate avea un nume diferit pe sisteme de operare diferite ( curproc pe FreeBSD , self pe Linux ).
Istorie
Ediția a VIII-a UNIX
procfs a apărut pentru prima dată în cea de-a 8-a ediție a UNIX , lansată în 1985 și a fost menită să ofere o interfață de gestionare a proceselor care era mai convenabilă decât apelarea ptrace . A fost descris în detaliu de Tom Killian în Processes as Files în 1984. Fiecare proces era reprezentat de un fișier în care putea fi scris. Numărul de apeluri ioctl disponibile a fost 11. [1] [2]
System V versiunea 4
Acest sistem, lansat în 1990, a moștenit procfs de la UNIX 8, cu unele îmbunătățiri. Procesele erau încă reprezentate ca fișiere simple, dar erau deja disponibile 37 de apeluri ioctl . FS a devenit suficient pentru a construi utilități precum ps pe baza sa , dar a rămas incomod și slab extensibil. [unu]
Implementarea este detaliată în „The Process File System and Process Model in UNIX System V” a lui Roger Faulkner și Ron Gomez în 1991.
Planul 9
În 1992, a apărut prima versiune publică a sistemului de operare Plan 9 . Acesta a fost vârful dezvoltării procfs . Tot managementul proceselor a fost mutat aici. Procesele au devenit directoare în loc de fișiere. În loc de ioctl , s-au folosit comenzi text, iar controlul se putea face cu comenzile cat și ls . [3] Când se montează /proc de pe un alt computer printr-o rețea, un proces local ar putea interacționa cu un proces de la distanță ca și cum ar fi pe aceeași mașină.
Solaris 2.6
Solaris 2.6 a moștenit o mare parte din structura procfs a lui Plan 9 , cu toate acestea, toate fișierele aflate acolo erau binare, menite să fie utilizate de un program, nu de un om. [1] În general, sistemul de fișiere a devenit ceva mai primitiv în comparație cu cel din Planul 9, dar incomparabil mai avansat decât în SVR4.
4.4BSD
A fost încă un pas înapoi în comparație cu Solaris. Numărul de fișiere din fiecare director a fost redus la 8 (deși a crescut ușor în versiunile ulterioare). Setul de comenzi disponibile a fost, de asemenea, redus semnificativ. A început să aibă loc o tranziție inversă, de la interfețele de fișiere la apelurile de sistem. [unu]
În versiunile moderne de FreeBSD , procfs este eliminat treptat [4] [5] .
Linux
Linux este oarecum în afara poveștii descrise mai sus. Încă de la început , procfs a reprezentat în el o interfață universală pentru obținerea de informații din kernel, și nu doar despre procese. Rădăcina conține fișiere (în mare parte text) și directoare care oferă o varietate de informații despre sistem.
În același timp, procfs aproape că nu își îndeplinește funcția inițială - managementul procesului . Nu există interfață pentru trimiterea comenzilor, sistemul de fișiere oferă doar informații detaliate despre procese (și în unele locuri vă permite să schimbați unele opțiuni, de exemplu, /proc/<pid>/oom_adj). [6]
Structura
*BSD
Fiecare director de nivel superior conține următoarele fișiere:
- ctl este un fișier de numai scriere care acceptă multe operațiuni care sunt scrise în el ca șiruri de caractere:
- atașare - Oprește procesul țintă și pregătește procesul de apelare pentru a depana ținta.
- detach - continuă execuția procesului țintă și îl elimină de sub controlul procesului de depanare (cel din urmă nu trebuie să fie procesul apelant).
- run - Continuă execuția procesului țintă până când este primit un semnal, este atins un punct de întrerupere sau procesul țintă se termină.
- pas - execută o comandă a programului țintă fără a genera alte semnale.
- wait - așteaptă ca procesul țintă să atingă o stare stabilă, gata pentru depanare. Procesul țintă trebuie să fie în această stare înainte ca alte comenzi să fie permise.
- dbregs sunt registre de depanare care corespund structurii dbregs din <machine/reg.h>. dbregs este utilizat în prezent numai pe arhitectura i386.
- etype este tipul de fișier executabil care este accesat de fișier .
- fișierul este o legătură simbolică către fișierul din care a fost citit textul procesului. Aceasta poate fi folosită pentru a accesa tabelul ID proces sau pentru a începe o nouă copie a procesului. Dacă fișierul nu este găsit, atunci direcția țintă este „necunoscută”.
- fpreg-urile sunt registre în virgulă mobilă corespunzătoare struct fpreg-urile din <machine/reg.h>. fpregs este utilizat numai pe mașini cu seturi diferite de registre universale și în virgulă mobilă.
- harta este harta memoriei virtuale a procesului.
- mem este imaginea completă a memoriei virtuale a procesului. Puteți face referire doar la adresa care există în proces. Citirea și scrierea în acest fișier modifică procesul. Scrierea într-un segment de text se aplică numai acestui proces (modificările nu vor afecta alte copii ale acestui proces).
- notă - folosit pentru a trimite un semnal unui proces. Nu se aplică.
- notepg - folosit pentru a trimite un semnal unui grup de procese. Nu se aplică.
- regs - Permite accesul de citire și scriere la mai multe registre de proces. Acest fișier conține structura de date binare struct regs descrisă în <machine/reg.h>. regs este inscriptibil doar atunci când procesul este oprit.
- rlimit este un fișier numai pentru citire care conține dimensiunea curentă și cea maximă. Fiecare linie are formatul rlimit current max, unde -1 înseamnă infinit.
- status - starea procesului. Fișierul este doar pentru citire și conține o singură linie constând din câmpuri separate prin spații:
- numele comenzii
- ID proces
- id-ul procesului părinte
- ID grup de procese
- sesiune ID
- major, minor al terminalului gestionat sau -1, -1 în caz contrar
- lista de steaguri de proces: ctty dacă acesta este un terminal gestionat, sldr dacă procesul gestionează o sesiune, noflags dacă niciunul dintre steaguri de mai sus nu este setat
- timpul de începere a procesului în secunde și microsecunde separate prin virgulă
- timpul utilizatorului în secunde și microsecunde separate prin virgulă
- timpul sistemului în secunde și microsecunde separate prin virgulă
- timpul de așteptare a mesajului
- biletul de proces, constând din id-ul utilizatorului real și o listă de grupuri (din care primul element este id-ul real al grupului), separate prin virgulă
- numele gazdei în care rulează procesul sau „-” dacă procesul rulează pe o perioadă nedeterminată
Suport pentru sistemul de operare
Link -uri
Surse
- ↑ 1 2 3 4 Un scurt istoric al /proc (link indisponibil) . Arhivat din original pe 2 martie 2012. (nedefinit)
- ↑ pagina de manual proc(4) (UNIX, ediția a 8-a) (downlink) . Arhivat din original pe 2 martie 2012. (nedefinit)
- ↑ pagina de manual proc(3) (Planul 9) (downlink) . Arhivat din original pe 2 martie 2012. (nedefinit)
- ↑ Ce se gătește pentru FreeBSD 8? (link indisponibil) . Arhivat din original pe 2 martie 2012. (nedefinit)
- ↑ De ce este procfs depreciat în favoarea procstat? (lista de corespondență freebsd-fs) (link descendent) . Arhivat din original pe 2 martie 2012. (nedefinit)
- ↑ pagina de manual proc(5) (Linux) (downlink) . Arhivat din original pe 2 martie 2012. (nedefinit)