Appunti semplificati Β· UnitΓ 1 completa
Γ un file salvato sul disco. Non fa nulla da solo β Γ¨ fermo, come un libro chiuso sullo scaffale.
Γ il programma mentre Γ¨ in esecuzione. Ha memoria, usa la CPU, fa cose. Γ il libro aperto e in lettura.
Ogni processo fa la sua cosa senza comunicare con gli altri.
Due processi si parlano e si scambiano dati per raggiungere un obiettivo comune.
Due processi vogliono usare la stessa risorsa allo stesso momento. Uno deve aspettare. Se nessuno cede β blocco.
Un processo cambia stato durante la sua vita. Ecco il percorso:
| Stato | Cosa significa |
|---|---|
| NEW | Il processo Γ¨ appena stato creato, ancora non fa nulla. |
| READY | Ha tutto ciΓ² che gli serve, tranne la CPU. Aspetta il suo turno. |
| RUNNING | La CPU sta eseguendo le sue istruzioni. In esecuzione! |
| WAITING | Aspetta qualcosa (es. dati dal disco). Non puΓ² andare avanti. |
| TERMINATED | Ha finito. Il SO libera memoria e risorse. |
La CPU non resta bloccata su un processo per sempre. Ogni processo ha un piccolo slot di tempo (time-slice). Scaduto il tempo β tocca al prossimo.
Il SO tiene traccia di ogni processo tramite un PCB. Contiene: PID (numero identificativo), stato attuale, Program Counter, registri, prioritΓ , memoria usata, risorse allocate.
Quando si cambia processo, il SO salva tutto il PCB del processo che si ferma, e ricarica il PCB del processo che riparte. Chi fa questo lavoro si chiama Dispatcher.
Γ una tabella in RAM che contiene tutti i PCB di tutti i processi attivi. Il SO la consulta per gestire chi va in esecuzione.
La CPU controlla continuamente: "Sei pronta, periferica? Sei pronta? Sei pronta?" β finchΓ© non lo Γ¨. Nel frattempo non puΓ² fare nient'altro. Si chiama busy-waiting = spreco totale.
La periferica manda un segnale alla CPU quando ha finito il suo lavoro. La CPU nel frattempo fa altro. Quando riceve il segnale, si ferma, gestisce l'evento, poi riprende da dove si era fermata.
Quando arriva un interrupt, la CPU smette quello che sta facendo e esegue l'ISR: un programma speciale che sa come gestire quell'evento specifico. Finita l'ISR, la CPU riprende il processo interrotto.
à una zona di memoria che dice: "Se arriva questo tipo di interrupt, vai a eseguire quella ISR lì". Una specie di rubrica degli interrupt.
| ModalitΓ | Chi la usa | Cosa puΓ² fare |
|---|---|---|
| Utente | Programmi normali | Accesso limitato |
| Supervisore (Kernel) | Sistema Operativo | Accesso completo a tutto l'hardware |
CPU, RAM, stampante, disco, scheda di rete... I processi competono per le risorse perchΓ© spesso non ce ne sono abbastanza per tutti.
Singola: chiede una sola risorsa alla volta.
Multipla: chiede piΓΉ risorse contemporaneamente (es. copia da HD a masterizzatore).
Bloccante: se la risorsa non Γ¨ disponibile, il processo si ferma ad aspettare.
Non bloccante: il processo va avanti comunque, viene solo avvisato.
La risorsa viene assegnata alla creazione del processo e rimane sua fino alla fine. Es: area di memoria del codice.
La risorsa viene richiesta, usata e poi rilasciata durante la vita del processo. Es: stampante, RAM del browser.
| Tipo | Significato | Esempio |
|---|---|---|
| Seriale | Un processo alla volta. Gli altri aspettano in coda. | Stampante, CD-ROM |
| Non seriale | PiΓΉ processi possono usarla contemporaneamente. | File in sola lettura |
| Prerilasciabile | PuΓ² essere "tolta" al processo senza danni. | CPU, RAM |
| Non prerilasciabile | Se la togli, rovini il lavoro in corso. | Stampante, masterizzatore |
Serve per capire la situazione tra processi e risorse in un dato momento.
Ha tutto: memoria, risorse, codice, dati. Il context switch Γ¨ lento e costoso (deve salvare e ripristinare tutto).
Γ solo il flusso di esecuzione dentro un processo. Condivide memoria e risorse con gli altri thread dello stesso processo. Il context switch Γ¨ veloce.
Ogni thread ha il suo: Program Counter, Stack, Stato dei registri, prioritΓ . Γ la sua "carta d'identitΓ personale".
Thread 1: legge la tastiera
Thread 2: controlla l'ortografia
Thread 3: salvataggio automatico
Thread 1: disegna la pagina
Thread 2: esegue JavaScript
Thread 3: scarica immagini
| Stato | Significato |
|---|---|
| Idle | Creato ma non ancora avviato |
| Ready | Pronto, aspetta la CPU |
| Running | In esecuzione |
| Blocked | Aspetta un'operazione hardware (es. lettura disco) |
| Sleeping | Sospeso per un tempo definito (es. ogni 30 secondi) |
| Waiting | Aspetta che un altro thread finisca |
| Dead | Ha terminato |
Il SO non sa che esistono. Gestiti da librerie apposite. Veloci nel context switch. Esempio: UNIX.
Il SO li conosce e li schedula. PiΓΉ flessibili, sfruttano meglio i multiprocessori. PiΓΉ lenti nel context switch. Esempio: Linux, Windows.
| Sistema | Processi | Thread per processo |
|---|---|---|
| MS-DOS | 1 | 1 |
| UNIX classico | Multipli | 1 per processo |
| JVM (Java) | 1 | Multipli |
| Linux / Windows | Multipli | Multipli per processo |
Se un processo termina, tutti i suoi thread terminano. Ma un singolo thread puΓ² terminare senza fermare il processo o gli altri thread.