Sommario
La CPU governa l’accesso alla memoria e alle periferiche di I/O.
Quando la CPU avvia un’operazione di lettura/scrittura verso una periferica di I/O, dovrebbe permanere in un ciclo di polling fino a che l’operazione non sia terminata.
….in realtà, i dispositivi di I/O e la CPU possono operare concorrentemente.
Ad ogni dispositivo di I/O corrisponde il proprio controllore, dotato di un proprio buffer locale.
La CPU sposta i dati dalla/verso la memoria centrale verso/da i buffer locali, dopodichè continua con altre operazioni.
L’operazione di I/O ha luogo tra il dispositivo ed il buffer locale del controller.
Il controller informa la CPU del termine di una operazione generando un interrupt (di fine I/O).
Meccanismo di Interrupt: consente l’interruzione del normale ciclo di esecuzione della CPU.
Il ciclo del processore viene modificato per verificare se ci sono interruzioni pendenti (segnale INT).
Se INT è alto,
L’ISR gestisce l’interrupt in modo opportuno e restituisce il controllo al processo interrotto (o ad altro processo).
Infine, la CPU riprende l’esecuzione del processo interrotto.
Aumentano l’efficienza sfruttando la maggiore velocità della CPU rispetto alle periferiche.
Permettono al S.O. di intervenire durante l’esecuzione di un processo utente, per gestire le risorse di un calcolatore (CPU, Memoria, I/O).
Possono essere abilitate o disabilitate per mezzo di apposite istruzioni macchina (Set Interrupt – STI – e Clear Interrupt – CLI).
Interrupt Hardware (o interruzioni esterne)
Eventi hardware, non causati dal programma in esecuzione
Sono eventi asincroni rispetto all’elaborazione.
Interrupt Software (Trap)
Causato dal programma
Sono eventi sincroni rispetto all’elaborazione.
Un segnale di interrupt request (INT) viene inviato alla CPU.
La CPU termina l’esecuzione dell’istruzione corrente.
La CPU verifica la presenza del segnale INT e, in caso affermativo, invia una conferma (ACK) al device che ha generato l’interrupt.
La CPU salva sullo stack le informazioni necessarie a riprendere l’elaborazione interrotta.
I Registri critici da salvare sono:
La CPU Seleziona l’interrupt handler appropriato tramite il vettore di interrupt.
Caricamento del PC con l’indirizzo iniziale dell’handler e del PS con il valore da caricare.
Queste 2 informazioni sono contenute nel vettore di interrupt.
Tutte le operazioni fin qui sono svolte in hw
Salvataggio dello stato del processore sullo stack (informazioni critiche non salvate via hardware).
Gestione dell’interrupt
Lettura delle informazioni di controllo provenienti dal dispositivo ed eventuale nuova comunicazione col dispositivo.
Ripristino dello stato del processore (op. inversa alla 7).
Ritorno del controllo al processo in esecuzione.
Ripristino del PC e del registro di stato salvati sullo stack.
Tre modalità di comunicazione tra CPU e dispositivi di I/O:
La CPU esegue un’istruzione di I/O eseguendo un apposito programma di I/O.
Il programma di I/O (es. input dati):
Il dispositivo esegue l’azione richiesta e al termine scrive sui registri del controller i risultati (buffer e stato).
La CPU attende (busy waiting) il completamento dell’operazione testando periodicamente il contenuto di appositi registri di stato.
Infine la CPU sposta i dati di input dal buffer del controller alla memoria centrale.
La CPU deve attendere il completamento dell’operazione.
La CPU esegue un’istruzione di I/O lanciando un apposito programma di I/O.
Il programma di I/O (es. input dati):
Il sistema operativo sospende l’esecuzione del processo che ha eseguito l’operazione di input ed esegue un altro processo.
Il dispositivo esegue l’azione richiesta, al termine scrive sul buffer del controller il risultato e segnala il termine dell’operazione attraverso interrupt.
Al ricevimento dell’interrupt, la CPU copia i dati dal buffer del controller alla memoria centrale, tramite la ISR apposita.
Nei precedenti approcci, il processore spreca parte del suo tempo a gestire le interruzioni e trasferire dati dal controller alla memoria;
ciò è particolarmente oneroso quando si devono trasferire sequenze di dati, anziché un singolo dato.
Se il tempo necessario alla CPU per gestire un’interruzione è maggiore del tempo tra due interruzioni, si possono avere perdite di dati.
Soluzione: canale DMA.
La CPU invia al DMA:
Completato il trasferimento, il DMA invia un interrupt alla CPU.
Memoria Centrale – insieme di registri; è il solo spazio di memorizzazione che può essere acceduto direttamente dalla CPU.
Memoria Secondaria –memoria non volatile con un’alta capacità di memorizzazione.
Dischi Magnetici – dischi ricoperti di materiale magnetico
Le memorie possono essere organizzate in una gerarchia.
Uso di memorie veloci per conservare dati acceduti di recente.
Un concetto che si applica a vari livelli:
Richiede una politica di gestione della cache:
Problema della coerenza.
Ad ogni accesso in memoria, il processore controlla prima nella cache.
Se il dato è presente (cache hit), si accede direttamente alla cache, altrimenti (cache miss), si accede alla memoria centrale.
Il meccanismo di funzionamento sfrutta il principio di località dei riferimenti.
Elemento di cache:
Contenuto: blocco di locazioni contigue della memoria centrale.
V: bit di validità, indica se il contenuto è valido.
Tag: identifica il contenuto con la parte comune a tutti gli indirizzi delle locazioni del contenuto.
L’accesso alla cache, con verifica della presenza del tag e validità del contenuto, avviene in parallelo (accesso associativo).
Nei sistemi multiprogrammati e multiutente, più processi utilizzano contemporaneamente la memoria;
È necessaria la protezione di memoria per:
Per proteggere la memoria è possibile aggiungere all’hardware due registri che determinano l’intervallo degli indirizzi validi accessibili da un processo.
La memoria esterna a questo intervallo è inaccessibile.
I processori moderni presentano due stati di funzionamento:
Per proteggere l’hardware, le istruzioni di accesso e modifica allo stato di una risorsa fisica (istruzioni privilegiate) devono essere eseguite in modo supervisore.
Le istruzioni privilegiate sono non interrompibili (le interruzioni vengono temporaneamente disabilitate con l’istruzione CLI, e poi abilitate con STI).
Istruzioni per la modifica dei registri base e limite.
Istruzioni per la modifica del registro di stato PS.
int
del processore).Istruzioni STI e CLI per l’abilitazione e disabilitazione delle interruzioni.
1. Introduzione ai Sistemi Operativi
5. Scheduling nei sistemi mono-processore
6. Threads, SMP
8. Scheduling Multiprocessore e Real-Time
9. Gestione dei processi nei sistemi operativi Unix/Linux e Window...
10. Introduzione alla Programmazione Concorrente
11. Sincronizzazione nel modello ad ambiente globale
12. Problemi di cooperazione nel modello ad ambiente globale
14. Sincronizzazione nel modello ad ambiente locale
15. Deadlock
16. Programmazione Multithread
18. Memoria Virtuale
20. Il File System
21. Primitive di sincronizzazione nel kernel Linux
22. Esercitazione: System call per la gestione dei processi
23. Esercitazione: Inteprocess Communication e Shared Memory
24. Esercitazione: System Call per la gestione dei semafori in Linu...
25. Esercitazione: Problema dei Produttori e dei Consumatori
26. Posix Threads
P. Ancilotti, M.Boari, A. Ciampolini, G. Lipari, “Sistemi Operativi”, Mc-Graw-Hill (Cap.1, Par. 1.3)