(:title Riassunto del libro di Sistemi Operativi - Capitolo 4: i processi:)
:: Riassunto del libro di Sistemi Operativi - Capitolo 4: i processi ::
Processo = unità di lavoro dei sistemi time-sharing.
SO = insieme di processi: quelli di SO, e quelli utente.
4.1 Il concetto di processo
4.1.1 I processi
Livello informale: processo = programma in esecuzione
Processo > codice del programma, perché include
- program counter = attività corrente
- valore dei registri
- stack proprio
- sezione dati
- heap (spazio dinamico, non obbligatorio)
Programma = entità passiva
Processo = entità attiva
2 processi possono essere associati al medesimo programma => ma sono sempre 2 diverse istanze di esecuzione dello stesso codice.
4.1.2 Lo stato dei processi
Stato del processo = rispetto all'uso del computer => la modalità del processo in rapporto all'uso del processore e delle risorse.
- nuovo = processo appena creato
- in esecuzione = le istruzioni vengono eseguite
- in attesa = attende qualche eventi, eg I/O, segnali da altri processi, risorse
- ready = ha tutto quello che gli serve, tranne la CPU
- terminato = ha finito la sua esistenza
Ocio: sono termini arbitrari, e molti SO ne hanno di diversi o di più numerosi.
OCIO: nel singolo istante un solo processo è in esecuzione, mentre molti altri sono in attesa o pronti.
4.1.3 Il blocco di controllo del processo
Processo = rappresentato nel SO dal Process Control Block (PCB).
Contiene:
- Stato del processo
- Program Counter
- Registri della CPU
- Info per la schedulazione sulla CPU (eg priorità o altri parametri richiesti)
- Info per la gestione della memoria centrale (registri base e limite, tabelle dei segmenti => a seconda del sistema usato dal SO)
- Info per l'accounting = quantità di CPU e di tempo usati, limiti di tempo
- Informazioni sullo stato dell'I/O = lista dei dispositivi di I/O allocati al processo (file aperti etc.)
4.1.4 I thread
Finora, 1 programma istanziato = 1 processo = 1 flusso di controllo di esecuzione = 1 thread.
Ma nel capitolo 5 vedremo bla bla.
4.2 Schedulazione dei processi
Multiprogrammazione = più processi caricati in memoria per eseguirli "contemporaneamente" => lo schedulatore decide quale mettere in esecuzione.
1 processore = 1 processo in esecuzione nel singolo istante
2+ processori = 1 processo per processore.
4.2.1 Le code di schedulazione
Processo creato => infilato in una coda di lavori = contiene tutti i processi del sistema.
Processo ready => infilato nella Coda dei processi pronti
Ci sono anche altre code, eg una coda per ogni dispositivo I/O.
Quando viene selezionato per l'esecuzione dallo schedulatore, il processo viene dispatched ed è messo in esecuzione sulla CPU.
Quando è in esecuzione, può accadere che:
- il processo chiede I/O => messo nella corrispondente coda I/O
- il processo crea un sottoprocesso e ne attende la terminazione
- il processo viene rimosso forzatamente dalla CPU eg per un interrupt, e quindi rimesso in coda
In pratica passa da una coda all'altra finché non termina.
4.2.2 Gli schedulatori
Selezionare quale processo mettere in CPU = compito dello schedulatore.
Schedulatore a lungo termine = job scheduler = usato nei sistemi a lotti: sceglie tra tutti i processi quelli da eseguire dalla periferica di archiviazione.
Schedulatore a breve termine = CPU scheduler = sceglie tra i processi in memoria centrale, pronti per l'esecuzione, e alloca la CPU ad uno di essi.
Differenze tra i due:
Lungo termine = eseguito raramente VS breve termine = eseguito spesso (eg 100 ms)
Processi = in un dato momento possono essere:
- CPU-bound = passa il tempo a computare
- I/O-bound = richiede I/O
=> lo schedulatore a lungo termine deve scegliere un buon compromesso tra processi I/O- e CPU-bound, se no la CPU rimane inutilizzata troppo a lungo o male.
In alcuni sistemi lo schedulatore a lungo termine è assente o minimale => UNIX e Windows: tutti i processi sono gestiti dallo scheduler a breve termine
=> ci pensa l'utente: se le prestazioni calano troppo perché ci sono troppi processi, l'utente ne accopperà qualcuno.
Schedulatore a medio termine: introdotto in alcuni SO.
=> a volte è utile ridurre il grado di multiprogrammazione (quanti processi sono attualmente in memoria)
=> swapping è spostare un processo da memoria centrale a memoria di massa (swapped out), o viceversa (swapped in).
Utile ad esempio per bilanciare tra troppi I/O- o CPU-bound.
4.2.3 Il cambio di contesto
Contesto di un processo = stato di esecuzione
=> cambio di contesto = context switch = salvare lo stato di esecuzione di un processo nella PCB e caricare dalla stessa PCB il contesto di un altro processo, ed eseguirlo.
Può essere realizzato in HW o in SW.
È tempo di gestione di sistema: quando si cambia il contesto, il SO non fa niente per l'evoluzione dei processi.
È anche lento => si usano i thread per cercare di velocizzarlo o evitarlo del tutto.
4.3 Operazioni sui processi