Procfs
# Procfs

Nei sistemi operativi Unix-like procfs (abbreviazione per process file system) è uno pseudo-filesystem usato per accedere alle informazioni relative ai processi fornite dal kernel. Il filesystem si trova solitamente montato nella directory /proc; poiché non è un filesystem reale, esso non occupa spazio sul disco rigido ed una limitata quantità di memoria.

procfs è supportato nei sistemi Solaris, BSD e Linux; quest'ultimo vi ospita anche informazioni non direttamente correlate con i processi del kernel.

## Storia

La versione di procfs inclusa nell'ottava edizione di Unix venne implementata da Tom J. Killian, il quale presentò un documento intitolato Processes as Files allo USENIX nel giugno 1984. Esso venne realizzato per sostituire la chiamata di sistema ptrace usata tradizionalmente per tracciare i processi.

Roger Faulkner e Ron Gomes portarono suddetto codice nella quarta edizione del sistema System V e pubblicarono il documento The Process File System and Process Model in UNIX System V su USENIX nel gennaio 1991. Questa incarnazione di procfs supportò la nascita di ps, ma i file dovevano comunque essere manipolati con le funzioni di read, write e ioctl.

In Plan 9 venne implementato un filesystem per i processi che superò il sistema adottato in Unix: mentre in quest'ultimo le operazioni rivolte ad un processo dovevano essere applicate al singolo file che lo rappresentava, in Plan 9 ogni tipo di operazione aveva un file a sé dedicato, facendo divenire /proc una vera e propria parte del filesystem.

La versione 4.4 di BSD implementava /proc come un insieme di sottodirectory per ogni processo, permettendo di accedere alle informazioni relative all'utilizzo di memoria, ai registri usati e allo stato corrente. Anche l'implementazione in Solaris 2.6 aveva directory separate per ogni processo, e includeva uno speciale file ctl che permetteva di controllare, tracciare e manipolare i processi.

## Linux

In Linux, /proc contiene le informazioni relative ad ogni processo nella cartella /proc/PID, ed include inoltre:

* Un link al processo corrente in /proc/self
* Informazioni sull'hardware, sul kernel e sui moduli ad esso linkati
* L'accesso ai parametri modificabili dinamicamente nel kernel, in /proc/sys
* Informazioni generiche sul sistema; ad esempio, /proc/meminfo include le statistiche sull'utilizzo della memoria

Il procfs gioca un importante ruolo nello scambio di informazioni tra il kernel mode e lo user mode. Ad esempio, la versione GNU del comando ps opera interamente in user mode, sfruttando procfs per ottenere le informazioni.

Nella versione 2.6 del kernel Linux buona parte dei file non relativi ai processi sono stati separati in un altro pseudo-filesystem chiamato SYSFS (e montato in /sys).

