Rappresentazione dei processi
PID - Process Identifier
È un identificatore univoco di un processo quindi in un dato istante, non ci possono essere 2 processi con lo stesso PID.
Una volta che un processo e’ terminato, il suo PID viene liberato, e potrebbe essere prima o poi riusato per un altro processo.
Process Control Block
PID: Process Identifier
PPID: Parent Process Identifier
Real UID: Real User Identifier
Real GID: Real Group ID
Effective UID: Effective User Identifier (UID assunto dal processo in esecuzione)
Effective GID: Effective Group ID (come sopra per GID)
Saved UID: Saved User Identifier (UID avuto prima dell’eseccuzione del SetUID)
Saved GID: Saved Group Identifier (come supra per GID)
Current Working Directory: directory di lavoro corrente
Umask: file mode creation mask
Nice: priorita statica del processo
Differenza tra RUID e EUID
Quando utilizziamo
SetUIDdi un file eseguibile:
RUIDl’id di chi lo esegueEUIDl’id del proprietario del file
Aree di memoria
- Text Segment: le istruzioni da eseguire (in linguaggio macchina)
- Data Segment: i dati statici (ovvero, variabili globali e variabili locali static) inizializzati e alcune costanti di ambiente
- BSS: I dati statici non inizializzati (sta per block started from symbol); la distinzione dal segmento dati si fa per motivi di realizzazione hardware
- Heap: I dati dinamici (allocati con malloc e simili)
- Stack: le chiamate a funzioni, con i corrispondenti dati dinamici (variabili locali non static)
- Memory Mapping Segment: tutto cio che riguarda librerie esterne dinamiche usate dal processo, nonche estensione dello heap in alcuni casi
Stato di un processo e modalità di esecuzione
Stati di un processo:
- Running (R): in esecuzione su un processore
- Runnable (R): pronto per essere eseguito (non e in attesa di alcun evento); in attesa che lo scheduler lo (ri)seleziona per l’esecuzione
- (Interruptible) Sleep (S): e in attesa di un qualche evento (ad esempio, lettura di blocchi dal disco), e non può quindi essere scelto dallo scheduler
- Zombie (Z): il processo e’ terminato e le sue 6 aree di memoria non sono più in memoria; tuttavia, il suo PCB viene ancora mantenuto dal kernel perché il processo padre non ha ancora richiesto il suo “exit status” (ritorneremo su questo punto)
- Stopped (T): caso particolare di sleeping: avendo ricevuto un segnale STOP, e in attesa di un segnale CONT
- Traced (t): in esecuzione di debug, oppure in generale in attesa di un segnale (altro caso particolare di sleeping; vedremo più avanti)
- Uninterruptible sleep (D): come sleep, ma tipicamente sta facendo operazioni di IO su dischi lenti e non puo essere interrotto ne ucciso
Esecuzione Foreground
- Il comando puo leggere l’input da tastiera e scrivere su schermo
- Finche non termina, il prompt non viene restituito e non si possono sottomettere altri comandi (o job…) alla shell
Esecuzione Background
Il comando non può leggere l’input da tastiera ma può scrivere su schermo.
- il prompt viene immediatamente restituito;
- mentre il job viene eseguito in background, si possono da subito dare altri comandi alla shell