Vai alla Home Page About me Courseware Federica Living Library Federica Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica
 
I corsi di Scienze Matematiche Fisiche e Naturali
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Marco Lapegna » 3.Interazione tra hardware e sistemi operativi


Sistemi operativi

Interazione tra hardware e sistemi operativi

Compiti del SO

Un S.O. ha il compito di rendere semplice (all’utente), l’utilizzo del calcolatore

Cosa deve fare un S.O. ?

Interazioni con:

  • CPU
  • Memoria
  • Dispositivi di I/O
Macchina di von Neumann

Macchina di von Neumann


Architettura di un sistema di calcolo

  • la cpu e i controller operano in modo concorrente
  • la cpu e i controller comunicano attraverso un bus

Controller = dispositivo hw per la gestione delle periferiche

Schema di un sistema di calcolo

Schema di un sistema di calcolo


Architettura di un sistema di calcolo

  1. Sia la cpu sia i controller accedono alla memoria
  2. Necessità di sincronizzazione degli accessi
  3. Controller della memoria
Schema di un sistema di calcolo

Schema di un sistema di calcolo


La CPU

Compiti della CPU:

  • recuperare una istruzione dalla memoria
  • recodificarla per determinare tipo e operandi
  • eseguirla

Tutte le CPU hanno un insieme di registri:

  • per contenere dati in transito da e per la memoria
  • program counter (indirizzo della prossima istruzione)
  • stack pointer (indirizzo dello stack)
  • program status word (insieme di bit di controllo)
  • per delimitare lo spazio di indirizzamento del programma in esecuzione

Controllori dei dispositivi di I/O

  • Ogni dispositivo è governato da un controller
  • Ogni controller ha un suo buffer locale e registri di controllo
  • Le operazioni di I/O avvengono dal dispositivo verso i buffer locali e viceversa.
  • La CPU sposta i dati tra la memoria e il buffer
Schema di un controllore

Schema di un controllore


Problema

Come fa la cpu a sapere che i dati sono stati trasferiti nel buffer locale del controller?

  • I soluzione:
    • La CPU interroga in continuazione il controller
  • II soluzione:
    • Il controller avvisa la CPU della fine dell’operazione di I/O mediante un evento

Esempio

3 registri di controllo

  • status (read only) indica lo stato del dispositivo
    • 1 dispositivo occupato
    • 0 dispositivo pronto ad eseguire un comando
  • command (write) indica il comando da eseguire
    • Read / write
  • control (write) indica che un comando è pronto nel registro command
    • 1 comando da eseguire presente nel registro command
    • 0 nessun comando da eseguire

2 buffer

  • Di input
  • Di output

Esempio di negoziazione per l’output

  • La CPU interroga il registro status fino a che status =0
  • La CPU definisce il registro command = write e trasferisce i dati dalla memoria al buffer di output
  • La CPU pone il registro control=1
  • Il controller pone status=1
  • Il controller esamina il registro command e trasferisce i dati dal buffer al dispositivo
  • Il controller pone command=0 e status=0

ATTESA ATTIVA nel passo 1

Attesa attiva (polling)

Interrogare occasionalmente un dispositivo è in sé un’operazione efficiente

  • Leggi il registro status
  • Test sul contenuto
  • Salto ad un altro punto del codice se status = 0

Tale tecnica diviene però inefficiente se le ripetute interrogazioni trovano raramente un dispositivo pronto per il servizio mentre altre utili elaborazioni attendono la CPU.

Alternativa: le interruzioni

  • I controllori dei dispositivi, gli errori e le chiamate di sistema generano segnali d’interruzione per comunicare alla CPU un evento asincrono
  • Le interruzioni vengono generate dai dispositivi e recapitate alla CPU attraverso la linea delle richieste delle interruzioni
  • Dipendono dall’architettura e possono avere nomi differenti
  • Esempio: architettura IA32 (Intel Pentium)
    • Interrupt (se generati da dispositivi hardware)
    • Exceptions (se generati da errori o da programmi in esecuzione)

Ciclo di I/O basato sulle interruzioni

In figura è mostrato uno schema esplicativo del funzionamento di un ciclo I/O (CPU – Controllore) interessato da una interruzione.

Schema esplicativo

Schema esplicativo


Esempio: lettura di un dato (I/O sincrono)

  • La cpu istruisce il controller su cosa fare e attende
  • Il controller carica i dati nel buffer locale
  • Il controller manda un interrupt di fine I/O alla cpu
  • La cpu trasferisce il dato dal buffer locale alla memoria
Schema dell’esempio

Schema dell'esempio


Accesso diretto alla memoria

  • La dimensione di buffer dei controllori è di pochi byte.
  • Quando devono essere trasferiti molti dati vengono generate molte interruzioni alla CPU
  • La gestione dell’I/O da e per la memoria è di solito delegato ad una unità separata dalla CPU chiamata Controllore dell’Accesso Diretto alla Memoria (DMA controller)
  • Il controllore DMA agisce direttamente sul bus della memoria, esegue il trasferimento senza l’aiuto della CPU e genera una sola interruzione

Passi di un trasferimento DMA

In figura è mostrato uno schema del processo di trasferimento DMA, con relativa sequanze procedurale.

Passi di un trasferimento DMA

Passi di un trasferimento DMA


Gli eventi

Gli eventi (oppure segnali, oppure interruzioni) sono il principale meccanismo con cui si sincronizzano le azioni di un moderno sistema operativo

  • La ricezione di un evento avvisa la CPU che deve fare qualcosa
  • Se non ci sono processi, dispositivi da servire o utenti con cui interagire il sistema operativo rimane inattivo nell’attesa di un evento (i S.O. sono events driven)
  • L’insieme delle regole per il coordinamento tra CPU e controller è chiamato negoziazione (handshaking)

La interrupt line

  • Le interruzioni arrivano alla CPU attraverso una “interrupt line”
  • Alla fine di ogni ciclo macchina la CPU controlla la presenza di un segnale sulla interrupt line
Proc Intel 8008 (1974) e relativa tabella

Proc Intel 8008 (1974) e relativa tabella


Come viene gestita una interruzione

  • Un dispositivo attiva una comunicazione elettrica con un controllore delle interruzioni della CPU
  • Il controllore delle interruzioni informa la CPU codificando il tipo di interruzione
  • La CPU interrompe l’esecuzione dell’istruzione corrente e salva lo stato del programma in esecuzione (dati e registri della CPU).
  • Trasferisce il controllo ad una interrupt service routine (ISR) il cui codice si trova in una prefissata zona della memoria
  • Le ISR (Interrupt Service Routine) eseguono il codice specifico per gestire il segnale appena giunto (ad es. trasferisce il dato dal buffer locale del controller alla memoria)
  • Al termine dell’esecuzione della ISR, il S.O. ripristina lo stato del programma e riprende l’esecuzione

La gestione delle interruzioni

  • L’efficienza di un Sistema Operativo dipende dall’efficienza con cui sono gestite le interruzioni.
  • Per rendere efficiente la gestione delle interruzioni si usa di solito una sola ISR che gestisce una tabella di puntatori contenente gli indirizzi delle varie procedure di servizio (vettore delle interruzioni).

Gestione delle interruzioni

In figura si mostra uno schema riguardante l’interazione CPU – memoria – SO nella gestione delle interruzioni.

Schema esplicativo (gestione delle interruzioni)

Schema esplicativo (gestione delle interruzioni)


Problema

Se la CPU effettua una operazione di I/O, deve attendere il completamento del trasferimento dei dati dal dispositivo al alla CPU (I/O sincrono)
Ma i dispositivi sono molto più lenti della CPU
-> Uso inefficiente della CPU

I/O sincrono

Vantaggi:

  • una sola richiesta di I/O pendente alla volta
  • la CPU riconosce subito da quale dispositivo arriva il segnale di interruzione

Svantaggi:

  • la CPU rimane inattiva per tutta la durata dell’I/O
  • no a operazioni I/O in parallelo
  • no a sovrapposizione di I/O e calcolo

I/O asincrono

  • Invece di rimanere inattiva, la CPU potrebbe essere impiegata a gestire altri programmi (multiprogrammazione)
  • Dopo l’avvio dell’I/O il controllo deve tornare subito alla CPU (I/O asincrono)
  • Se c’è un solo processo in esecuzione, tale processo deve comunque attendere la fine dell’operazione di I/O
  • Possibilita’ di numerose richieste di I/O pendenti

Device-Status Table

La presenza di più operazioni di I/O pendenti impone la presenza di una tabella di stato dei dispositivi

Tabella di stato dei dispositivi

Tabella di stato dei dispositivi


La memoria centrale

  • La memoria centrale è il supporto su cui sono conservati dati e istruzioni
  • E’ vista dalla CPU come una sequenza lineare di locazioni con un indirizzo
  • Le uniche operazioni permesse sui dati residenti in memoria sono load e store
  • E’ il solo dispositivo di memorizzazione di grandi dimensioni direttamente accessibile dalla CPU

Memorie di massa

  • La memoria centrale è un dispositivo volatile.
  • Ha una capacità dell’ordine dei 109 byte (Gbyte) e non è sufficiente a contenere i modo permanente tutti i dati e i programmi di un sistema operativo.
  • C’è necessità di dispositivi più capienti e non volatili (memoria di massa / dischi magnetici).

Gap tra memoria e CPU

  • Tempo per una operazione aritmetica 1 ciclo di clock (~ 10-9 sec)
  • Tempo di accesso alla memoria 4-5 cicli di clock (~ 10-8 sec)

In figura si mostra un diagramma relativo al rallentamento della CPU.

Grafico relativo al rallentamento della CPU

Grafico relativo al rallentamento della CPU


Registri e cache

Soluzione:
Uso di dispositivi di memorizzazione ‘on chip’ capaci di supportare la velocità operativa della CPU (cache e registri)

Al momento del loro uso, blocchi di dati sono copiati dalla memoria nella cache.

Caratteristiche:

  • limitata capacità (~1 Mbyte)
  • alta velocita’ di accesso (~ 10-9 sec)

La gerarchia delle Memorie

In figura è mostrata uno schema gerarchico dei vari tipi di memorie: dalla più veloce alla più lenta, dalla più capiente alla più ridotta.

Grafico a piramide delle gerarchie

Grafico a piramide delle gerarchie


Caching

Caching – utilizzo di una memoria a più alta velocità per mantenere informazioni cui si accede più spesso.

  • Richiede un politica di gestione della cache
  • Provoca una replicazione dei dati, quindi necessita di una politica di gestione che garantisca la consistenza dei dati (di solito gestita dall’hardware)
  • E’ un concetto che può essere applicato a più livelli
  • La memoria centrale può essere vista come una cache per i dischi magnetici
  • I dischi possono essere visti come una cache per i supporti di backup

Migrazione di un dato dal disco ai registri

Problemi :

  • dimensioni della cache (più grande = più costoso)
  • criteri di aggiornamento (‘prevedere’ quali dati saranno utilizzati dalla cpu)

Gestione efficiente della cache → 80% dei dati deve trovarsi nella cache quando servono

Schema (migrazione di un dato)

Schema (migrazione di un dato)


Problema

  • La condivisione delle risorse (memoria, cpu, I/O) da parte dei processi di un sistema operativo, comporta che un errore in un programma puo’ alterare il funzionamento di tutto il sistema
  • Se n è molto grande si modifica l’area di memoria riservata a proc2 o addirittura si modifica il sistema operativo
Schema dell’esempio

Schema dell'esempio


Protezione delle risorse

L’esistenza di risorse condivise richiede che il sistema operativo garantisca che un programma scorretto non possa effettuare operazioni non consentite.

Le istruzioni possono essere eseguite in due modalità (dual mode operation):

  1. User mode – (un utente qualsiasi può eseguire un insieme ristretto di istruzioni).
  2. Kernel mode (anche monitor mode, system mode o superuser mode) – (il sistema operativo può eseguire tutte le istruzioni).

Supporto hardware per la dual mode operation

La CPU deve essere dotata di un Mode bit che indica lo stato corrente: system (0) or user (1).
Quando giunge una interruzione o avviene un errore il sistema passa in modalità “sistema” e viene attivata la procedura di servizio.

Esistono istruzioni privilegiate che possono essere eseguite solo in modalità kernel.

Dual mode operation

Dual mode operation


Protezione dello I/O

  • Ad es. tutte le istruzioni di I/O sono di tipo privilegiato.
  • Per effettuare delle operazioni di I/O vengono utilizzate delle chiamate di sistema (System call ).
  • Il Sistema operativo deve garantire che un utente non possa mai avere pieno controllo del sistema in modalità superutente.
Utilizzo di una System call per effettuare una operazione di I/O

Utilizzo di una System call per effettuare una operazione di I/O


Le System call

Quando un programma effettua una system call, il S.O.

  • manda una interruzione alla CPU
  • pone il bit mode =0 (modalità sistema)
  • esegue la procedura di servizio
  • ripone il bit mode=1 (modalità utente)
  • restituisce il controllo del sistema al programma interrotto

Supporto hardware per la protezione della memoria

E’ necessario garantire protezione della memoria , come minimo per le informazioni che si trovano nel vettore delle interruzioni e nelle ISR.

La CPU deve possedere due registri per stabilire le locazioni di memoria cui ogni programma ha diritto ad accedere:

  • Base register – memorizza il più piccolo indirizzo di memoria cui l’accesso è lecito.
  • Limit register – Contiene la dimensione massima di memoria ad accesso consentito

La memoria al di là dell’intervallo indicato è protetta.

Schema esplicativo (base/limit register)

Schema esplicativo (base/limit register)


Protezione della memoria

  • Quando una istruzione viene eseguita in modalià sistema ha accesso completo a TUTTA la memoria.
  • Le istruzioni per caricare i valori dei registri base e limit sono di tipo privilegiato.
Schema esplicativo (protezione della memoria)

Schema esplicativo (protezione della memoria)


Clock o timer

Ogni calcolatore ha un orologio interno chiamato clock o timer

3 componenti:

  • Cristallo al quarzo che vibra ad una fissata frequenza
  • Contatore che viene decrementato da ogni impulso del cristallo
  • Registro di inizializzazione del contatore
Schema del clock

Schema del clock


Clock

  • Il contatore viene inizializzato dal registro di caricamento
  • Quando il contatore si azzera viene emessa una interruzione
  • La frequenza delle interruzioni viene determinata dal software (dal valore del registro di caricamento)

Esempio: con un cristallo da 500 MHz e registro di 32 bit il contatore viene decrementato ogni 2 ns

  • Interruzioni ogni 2 ns (registro di caricamento =1)
  • Interruzioni ogni 8,6 sec (registro di caricamento = 232)

In conclusione

Il Sistema Operativo deve:

  • Interagire con i controller e il DMA
  • Gestire le interruzioni
  • Gestire la coerenza dei valori nelle memorie
  • Gestire il passaggio del controllo della CPU da un programma ad un altro
  • Gestire le modalità di esecuzione
  • Proteggere la memoria
  • Proteggere la cpu

Prossima lezione

I processi

  • Concetto e implementazione dei processi
  • Scheduling e gestione dei processi
  • Processi cooperanti e comunicazione tra processi
  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion