Appunti sulla Gestione del Processore (Informatica)

Che cos'è un Programma: Insieme statico di istruzione che descrive le azioni elementari da compiere (viene salvato sullo storage, entità passiva).

Che cos'è un Processo: Entità attiva (caricata in memoria) che rappresenta l’esecuzione delle istruzioni specificate dal programma, ed è quindi un’entità logica in evoluzione.

Che cosa sono le risorse di sistema / risorsa del sistema: Un qualsiasi elemento hardware o software che viene usato da un processo e che ne condiziona la creazione e l’avanzamento.


Un processo può trovarsi in più stati rispetto al processore:

-Nuovo (New): è lo stato in cui si trova il processo appena creato, ossia quando l’utente avvia il programma risiedente su disco.

-Esecuzione (Running): Il processo sta eseguendo le istruzioni specificate grazie alla CPU e si trova in una fase di evoluzione costante. C’è da specificare che nei sistemi a monoprocessore un solo processo per volta può essere in questo stato (MonoTasking).

-Attesa (Waiting): Un processore si trova nello stato di attesa quando gli manca una risorsa del sistema per poter evolvere, e quindi eseguire le istruzioni specificate (Ad esempio una stampante in funzione).

-Pronto (Ready-To-Run): è un processo che ha a disposizione le risorse del sistema adatte alla sua esecuzione, ma gli manca l’assegnazione da parte della CPU.

-Finito (Terminated): In questa situazione il processo è giunto al termine dopo aver eseguito tutto il codice del programma, oppure dopo aver incontrato un errore logico, oppure dopo un System Call “Kill”. Il sistema operativo deve rilasciare le risorse che utilizzava.

Un processo può assumere lo stato nuovo e terminato solo una volta, mentre può essere per più volte negli altri 3 stati (Waiting, Ready, Running).


Le risorse possono essere di 2 tipi:

Consumabili: Messaggi scambiati tra processi.

Riusabili: Vengono date in uso ai processi e controllate dal gestore delle risorse del S.O. (Kernel).


Risorse

Una risorsa che può essere usata solo da un processo alla volta si dice Seriale (CPU, Stampante, ecc…).


Inoltre si può anche distinguere in 2 modi:

1) Pre-Rilasciabile:

-Si può sottrarre al processo che la stava utilizzando in quel momento, senza causare errori.

-Il loro stato non si modifica durante l’utilizzo e può essere salvato e successivamente ripristinato (Memoria Virtuale).


2) Non Pre-Rilasciabile:

-Non si possono sottrarre al processo senza causarne un fallimento. Inoltre il loro stato non può essere salvato e ripristinato (Stampante, Masterizzatore), etc..).



Tipi di programmazione

1) La Monoprogrammazione è composta da Programmi Sequenziali, ossia è possibile eseguire un singolo processo ed una sola istruzione per volta (Niente Parallelismo).


2) La Multiprogrammazione invece è composta da Programmi Concorrenti, che permettono l’esecuzione di più processi che contendono l’uso delle risorse del sistema, ed inoltre, vengono eseguite più istruzioni contemporaneamente.


Grazie alla Multiprogrammazione è permessa l’evoluzione contemporanea di più processi limitando al minimo i tempi morti e sfruttando appieno le potenzialità di calcolo del processore.


Inoltre in questo caso i processi possono essere di 3 tipi:

1) Indipendenti: Evolvono in modo autonomo senza bisogno di comunicare con gli altri processi per scambiare dati.

2) Cooperanti: Hanno la necessità di cooperare in quanto per poter evolvere, necessitano di scambiarsi informazioni tra processi.

3) In Competizione: Possono evolvere indipendentemente ma entrano in conflitto sull’allocazione delle risorse del sistema.



Il PCB (Process Control Block) 

Il PCB (Process Control Block) è una struttura dati di tipo record detta Descrittore di Processo accessibile solo dal Kernel. Il suo compito è quello di contenere tutte le informazioni relative ad un processo: Nome, Stato, Risorse, Schedulazione ecc.



Precisamente, abbiamo:

-Nome del Processo: Tipicamente viene usando un indice (numero intero), che identifica la posizione del processo nella lista dei processi, in Unix viene chiamato PID (Process Identifier)

-Stato del processo: Nuovo, Esecuzione, Pronto, ecc…

-Modalità di servizio dei processi: Scheduling, che può essere FIFO, con priorità, Round Robin ecc…

-Informazioni sulla gestione della memoria: Paginazione, segmentazione, limiti area di memoria allocata al processo (è identificata dai registri base e limite).

-Contesto del processo (Aria di salvataggio): Ogni volta che il processo viene sospeso vengono salvati nel PCB i dati contenuti nei vari registri come il Program Counter, o il registro di stato (PSW).

-Uso delle risorse: Quali sono i dispositivi fisici assegnati al processo ed i file aperti dal processo.

-Identificativo del processo successivo: Specifica qual è il processo successivo nella stessa coda di cui fa parte il processo (pronti o bloccati).


L’insieme di tutti i dati di un processo prende il nome di Contesto del Processo e può essere suddiviso in 2 parti:

-Il Codice (Le istruzioni da cui è composto il programma).

-I Dati del Programma, a loro volta suddivisi in:

-Variabili globali.

-Variabili Locali.

-Variabili Temporanee.

-Variabili Allocate dinamicamente.


Terminologia:

CPU Burst: Fasi in cui viene impiegata soltanto la CPU senza I/O.

I/O Burst: Fasi in cui il processo effettua I/O di un dispositivo (risorsa) del sistema.

CPU Bound: Prevalenza di attività di CPU Burst.

I/O Bound: Prevalenza di attività I/O Burst.




Scheduling

La gestione della Ready Queue è realizzata mediante le politiche (algoritmi) di Scheduling.

Lo Scheduling decide a quale processo assegnare la CPU.

-A seguito della decisione, viene attuato il cambio di contesto (context-switch).

-Dispatcher: è la parte del S.O. che realizza il cambio di contesto.


Gli algoritmi di Scheduling si possono classificare in 2 categorie:

1) Senza Prelazione (Non Pre-Emptive): La CPU rimane allocata al processo in esecuzione finché esso non si sospende volontariamente o termina.

2) Con Prelazione (Pre-Emptive): Il S.O. può sottrarre la CPU al processo in esecuzione ed assegnare ad un nuovo processo (che rispetta le politiche di scheduling).


Il Dispatcher deve essere molto veloce nell’effettuare il context-switch, definendo il tempo impiegato per fermare un processo e far eseguire il successivo, Latenza di dispatch.


I Criteri da considerare per le strategie di scheduling sono:

-Utilizzo CPU

-Throughput

-Tempo di turnaround

-Tempo di waiting

-Tempo di risposta


Commenti