#
Interrupt
Meccaniscmo che permette l'interruzione del normale diclo di esecuzione della cpu
Caratteristiche
- introdotti per aumentare l'efficienza di un sistema di calcolo
- permettono ad un so di intervenire durante l'esecuzione di un programma, allo scopo di gestire efficacemente le risorse del calcolatore (processore memoria dispositivi di i/o)
- possono essere sia hw che sw (es. divisioni per zero, system calls)
- possono essere mascherati (ritardati) se la cpu sta svolgendo compiti non interrompibili
Interrupt vs trap
Interrupt hw (e' la cpu che controlla il bus, se la cpu vuole parlare con il controller lo puo fare.) L'interrupt serve solo se e' una periferica che vuole parlare con il so
Intterrupt hw:
- Eventi hw asincroni non causati dal processo in esecuzione (es. dispositivo di i/o, interval timer)
- Gli interrupt hw sono generati dai controller dei dispositivi che mandano (elevano) gli interrupt per indicare al processore che sono avvenuti eventi che necessitano di attenzione (es. fine di i/o)
Interrupt sw
- causato dal programma
- es (divisioni per zero o syscall) Il so per attivare una operazione di i/o comunica col controller usando il bus di sistema. L'interrupt avviene solo al termine dell'operazione.
Gestione interrupt
Cosa succede in seguito a un interrupt:
- un segnale "interrupt request" vine spedito al processore
- il processore sospende le operazioni del processo corrente, salta ad un particolare indirizzo di memoria contenente ls routine di gestione dell'interrupt (interrupt handler)
- l'interrupt handler gestisce nel modo opportuno l'interrupt e ritorna il controllo al processo interrotto (o a un altro processo, nel caso di scheduling)
- il processore riprende l'esecuzione del processo interrotto
Schema dell'interrupt
- Un segnale di interrupt request viene spedito alla cpu
- La cpu finisce l'esecuzione dell'istruzione corrente
- la cpu verifica la presenza di un segnale di interrupt

- preparazione al trasferimento di controlla dal programma all'interrupt handler
- metodo 1: salvataggio dei registri critici (es. il program counter e registri di stato (why?))
- metodo 2: scambio di stato (fotografia dello stato del processore)
- Selezione dell'interrupt handler appropriato
- A seconda dell'architettura, vi si puo' essere un singolo interrupt handler, uno per ogni tipo di interrupt o uno per dispositivo.
- la selezione avvuene tramite interrupt vector
- Caricamento del PC con l'indirizzo per continuare l'esecuzione del programma da dove era stato interrotto.
- salvataggio dello stato del processore (salvataggio delle info critiche non salvate automaticamente dai meccanismi hw di gestione interrupt)
- gestione dell'interrupt
- lettura delle info di controllo proveniente dal dispositivo
- eventualmente, spedizione di ulteriori info al dispositivo stesso
- ripristino dello stato del processore (op inversa del punto 7)
- ritorno del controllo al processo in secuzione (o ad un altro processo se necessario)
SO interrupt driven
I so moderni sono detti interrupt driven. Il codice del so entra in funzione come interrupt handler. Sono gli interrupt (o i trap) ch eguidano l'avvicendamento dei processi.
Esiste la possibilita' che avvengano interrupt multipli
- ad esempio, originati da dispositivi diversi
- un'interrupt puo' avvenire durante la gestione di un interrupt precedente (viene rimandato alla fine della gestione del interrupt corrente)
Due approcci possibili:
- disabilitazione degli interrupt
- interrupt annidati
Disabilitazione delgi interrupt
Durante l'esecuzione di un interrupt handler (ulteriori segnali di interrupt vengono ignorati), i segnali corrispondenti restano pendenti Gli interrupt vengono riabilitati prima di riattivare il processo interrotto Il processo verifica quindi se vi sono ulteriori interrupt, e in caso attiva l'interrupt handler corrispondente
Vantaggi e svantaggi Approccio semplice (interrupt gestiti in modo sequenziale) Non tiene contro di gestioni "time critical"

E' possibile definire proprieta diverse per gli interrupt Un interrupt di priorita inferiore puo essere interrotto da un interrupt di priorita superiore E' necessario prevedere un meccanismo di salvataggio e ripristino dell'esecuzione adeguato
Vantaggi e svantaggi
Dispositivi veloci possono essere serviti prima (es. scheda di rete)
Approccio complesso
Occorrono stack separati

Comunicazione tra processore e dispositivi di I/O Il controller governa il dialogo con il dispositivo fisico
Es.
- il controller di un disco accetta una richiesta per volta
- l'accodamento delle richieste in attesa e' a carico del so
Due modalita
- Programmed I/O
- Interrupt-driven I/O
Programmed I/O (obsoleto)
- Operazione di input
- la CPU carica (tramite il bus) i parametri della richiesta di input in appositi registri del controller (registri comando)
- il dispositivo
- esegue la richiesta
- il risultato dell'operazione viene memorizzato in un apposito buffer locale sul controller
- il completamento dell'operazione viene segnalato attraverso appositi registri di status
- il S.O. attende (busy waiting/polling) che il comando sia completato verificando periodicamente il contenuto del registro di stato
- infine, la CPU copia i dati dal buffer locale del controller alla memoria
Interrupt-driven I/O Eliminazione del problema del polling Operazione di input
- La CPU carica (tramite il bus) i parametri della richiesta di input in appositi registri del controller (registri comando)
- il so sospende l'exec del process oche ha eseguito l'operaizone di input ed esegue un altro processo
- il dispositivo
- esegue la richiesta
- il risultato dell'operazione viene memorizzato in un apposito buffer locale sul controller
- il completamento dell'operazione viene segnalato attraverso interrupt
- al ricevimento dell'interrupt, la CPU copia i dati dal buffer locale del controller alla memoria
- NB: l’interrupt segnala la fine dell’operazione di I/O
Programmed I/O e Interrupt-Driven I/O Nel caso di operazioni di output
- il procedimento è similare:
- i dati vengono copiati dalla memoria ai buffer locali
- questa operazione viene eseguita prima di caricare i parametri della richiesta nei registri di comando dei dispositivi
Svantaggi degli approcci precedenti
- il processore spreca parte del suo tempo nella gestione del trasferimento dei dati
- la velocità di trasferimento è limitata dalla velocità con cui il processore riesce a gestire il servizio
Direct memory access (DMA)
Il SO:
- attiva l'operazione di I/O specificando l'indirizzo in memoria di destinazione (Input) o di provenienza (Output) dei dati
- Il controller del dispositivo prende (output) o pone (input) i dati per l’operazione di I/O direttamente dalla memoria centrale.
- l'interrupt specifica solamente la conclusione dell'operazione di I/O Vantaggi e svantaggi c'e contesa nell'accesso al bus
- device driver piu semplice
- efficace perche la CPU non accede al bus ad ogni ciclo di clock
Memoria
Memoria centrale (RAM)
- Assieme ai registri, l'unico spazio di memorizzazione che puo essere acceduto direttamente dal processore
- accesso tramite LOAD/STORE
- Volatile
- Nei sistemi moderni accesso tramite MMU (trasforma indirizzi logici in indirizzi fisici)
Memoria ROM
Memory mapped I/O
Un dispositivo e' completamente indirizzabile tramite bus.
- i dati gestiti dal dispositivo vengono mappati su un insieme di indirizzi i direttamente accessibili tramite il bus di sistema
- una lettura o scrittura su questi indirizzi causa il trasferimento di dati da o verso il dispositivo Es. video grafico nei PC
Vantaggi e svantaggi
- gestione molto semplice e lineare
- necessita di tecniche di sincronizzazione di accesso
Dischi
Dispositivi che consentono la memorizzazione non volatile dei dati Accesso diretto (random, non sequenziale) Per individuare un dato sul disco (dal punto di vista fisico) occorre indirizzarlo in termini di cilindro, settore, testina.
Operazioni gestite dal controller
- READ (head, sector)
- WRITE (head, sector)
- SEEK (cylinder) operazione piu costosa (cambio di testina)
SSD - SDcard dispositivi per la memorizzazione non volatile dei dati Hanno un numero di cicli di scrittura limitato Si leggono a blocchi Si scrivono a banchi (numerosi blocchi)
Gerarchia di memoria
Tradeoff tra quantita, velocita e costo
soluzione: utilizzare una gerarchia di memoria

Cache
- consiste nel memorizzare parzialmente i dati di una memoria in una seconda più costosa ma più efficiente
- se il numero di occorrenze in cui il dato viene trovato nella cache (memoria veloce) è statisticamente rilevante rispetto al numero totale degli accessi, la cache fornisce un notevole aumento di prestazione
Meccanismi di caching hardware:
- ad es. cache CPU; politiche non modificabili dal S.O. software:
- ad es. cache disco; politiche sotto controllo del S.O.
Problemi da considerare nel S.O. algoritmo di replacement:
- la cache ha dimensione limitata; bisogna scegliere un algoritmo che garantisca il maggior numero di accessi in cache coerenza:
- gli stessi dati possono apparire a diversi livelli della struttura di memoria
Protezione HW
I sistemi multiprogrammati e multiutente richiedono la presenza di meccanismi di protezione (bisogna evitare che i processi interferiscano con il sistema operativo)
Modalita utente/kernel
- Modalità kernel / supervisore / privilegiata / ring 0:
- I processi in questa modalita hanno accesso a tutte le istruzioni incluse quelle pivilegiate che permettono di gestire totalmente il sistema (super hackerabile)
- Modalita utente - i processi in modalita utente non hanno accesso alle istruzioni privilegiate Si usa un "Mode bit" nello status register per distinguere fra modalità utente e modalità supervisore
Funzionamento
- alla partenza, il processore è in modalità kernel
- viene caricato il sistema operativo (bootstrap) e si inizia ad eseguirlo
- quando passa il controllo ad un processo utente, il S.O.
- cambia il valore del mode bit e il processore passa in modalità utente
- tutte le volte che avviene un interrupt, l'hardware passa da modalità utente a modalità kernel
Nota: tutte le istruzioni input output devono essere privilegiate (es. accesso a mem secondaria che ospita un file system, vogliamo evitare che un processo possa accedere e modificare il file system)
Protezione Memoria La protezione non è completa se non proteggiamo anche la memoria Senza protezione della mem i processi utente potrebbero:
- modificare il codice o i dati di altri processi utenti
- modificare il codice o i dati del sistema operativo
- modificare l'interrupt vector, inserendo i propri gestori degli interrupt La protezione avviene tramite la Memory Management Unit (MMU)
Protezione HW - System call finire ultime slide
