Sistemi Operativi Giuseppe Prencipe Sistemi di I/O Architetture e

Transcript

Sistemi Operativi Giuseppe Prencipe Sistemi di I/O Architetture e
Sistemi di I/O
 Un ruolo fondamentale in un sistema di calcolo è rivestito
Sistemi Operativi
Giuseppe Prencipe
dai dispositivi di I/O
 I dispositivi di I/O che popolano un sistema di calcolo sono
tipicamente diversi tra lorodiversi sono i metodi controllo
 Dato che la tendenza attuale è di avere tanti tipi di
Sistemi di I/O
dispositivi molto diversi tra loro, il sistema deve essere
strutturato in moduli di driver di dispositivo
 I driver dei dispositivi offrono un’interfaccia uniforme tra la
applicazioni e il SO
1
2
Architetture e dispositivi di I/O
Architetture e dispositivi di I/O
 Grande numero di tipi di dispositivi
 Un dispositivo comunica con un sistema di calcolo inviando
segnali attraverso un cavo (o l’etere) e comunica con il
calcolatore tramite una porta
 Se uno o più dispositivi usano in comune un insieme di fili,
la connessione è detta bus
Anche molto diversi fra loro (dischi, nastri, schede rete, mouse)
 Concetti comuni
Porta
Bus (collegamento a margherita o accesso diretto condiviso)
Controllore
È un insieme di fili e un protocollo che specifica come le
informazioni possono viaggiare sui fili
I messaggi si inviano tramite tensioni elettriche applicate ai fili
 I bus sono ampiamente usati nelle architetture dei
calcolatori
3
Tipica struttura del bus in un PC
4
Architetture e dispositivi di I/O
Bus SCSI
 Un controllore è un insieme di componenti elettronici che
può far funzionare una porta, un bus o un dispositivo
Controllori di porte seriali: sono semplici
Controllori SCSI: più complessi, perchè complesso è il protocollo
SCSIè tipicamente una scheda a parte che si inserisce nel
calcolatore
 Contiene un’unità di elaborazione, microcodice e memoria privata per
elaborare i messaggi del protocollo SCSI
 Alcuni dispositivi sono dotati di propri controllori incorporati
Dischi (SCSI o IDE)
5
1
6
Indirizzi delle porte dei dispositivi di I/O
nei PC (elenco parziale)
Architetture e dispositivi di I/O
 La CPU dà comandi e fornisce dati al controllore per portare
a termine trasferimenti di I/O tramite uno o più registri per
dati e segnali di controllo
 La comunicazione con il controllore avviene tramite
letture/scritture di configurazioni di bit in questi registri
 La comunicazione può avvenire tramite
Speciali istruzioni di I/O
Con I/O associato alla memoria: i registri di controllo del
dispositivo si fanno corrispondere a un sottoinsieme dello spazio
di indirizzi della CPU, che eseguele richieste di I/O usando le
ordinarie istruzioni di trasferimento di dati
Alcuni sistemi usano entrambe le tecniche
7
Indirizzi delle porte dei dispositivi di I/O
nei PC (elenco parziale)
320-32F
controllore del disco
378-37F
porta parallela
3D0-3DF
controllore della grafica
3F0-3F7
controllore dell’unità a dischetti
3F8-3FF
porta seriale (principale)
8
Architetture e dispositivi di I/O
 Una porta di I/O consiste tipicamente di 4 registri
Status: contiene dei bit che indicano lo stato della porta (es. Stato
dell’operazione corrente, o se ci sono dati in nel registro data-in)
Control: può essere scritto per attivare un comando o per
cambiare il modo di funzionamento del dispositivo (es. Halfduplex—full-duplex in una porta seriale)
Data-in: la CPU legge da qui per ricevere i dati
Data-out: la CPU scrive qui per inviare dati
 Controllore della grafica: dispone anche di una regione di
memoria (memoria grafica) che serve a mantenere i
contenuti dello schermo
 Le scritture avvengono tramite quest’area
 Questo serve per rendere veloci le operazioni di
visualizzazione su schermo (invece di avere milioni di
operazioni di I/O)
 Bisogna proteggere adeguatamente quest’area di memoria
 Le dimansioni dei registri variano tra 1 e 4 byte
9
10
Interrogazione ciclica (polling)
Interrogazione ciclica (polling)
 Il protocollo per l’interazione tra CPU e un controllore è
 La coordinazione avviene come segue
basato su negoziazione (handshaking)
Relazione produttore—consumatore
 Il controllore pone a 1 il bit busy del registro status quando
è impegnato in un’operazione; altrimenti è 0
CPU legge ripetutamente il bit busy fino a che non è 0
CPU pone a 1 il bit write nel registro comandi, e scrive un byte in
data-out
CPU pone a 1 il command-ready
 La CPU comunica le sue richieste tramite il bit commandready nel registro command: lo pone a 1 quando il
controllore deve eseguire un comando
11
2
12
Interrogazione ciclica (polling)
Interrogazione ciclica (polling)
 La coordinazione avviene come segue
 La CPU è in attesa attiva (su busy); questo si chiama anche
CPU legge ripetutamente il bit busy fino a che non è 0
CPU pone a 1 il bit write nel registro comandi, e scrive un byte in
data-out
CPU pone a 1 il command-ready
 Quando il controllore si accorge del bit a 1 in commandready
Pone a 1 il bit busy
Legge il registro comandi (trovando write), e legge data-out, e
compie l’operazione di scrittura
Pone a 0 il command-ready, a 0 il bit error in status, e a 0 il bit
busy
polling (interrogazione ciclica)
 L’interrogazione ciclica è in sé un’operazione efficiente; tale
tecnica diviene però inefficiente se le ripetute interrogazioni
trovano raramente un dispositivo pronto per il servizio
mentre altre utili elaborazioni attendono la CPU
 In questi casi è più efficiente far si che sia il controllore a
comunicare alla CPU di essere pronto....come????
13
14
Ciclo di I/O basato sulle interruzioni
Interrogazioni (interrupt)
 I segnali d’interruzione sono usati diffusamente dai sistemi
operativi moderni per gestire eventi asincroni e per eseguire
nel modo supervisore le procedure del nucleo
 I controllori dei dispositivi, gli errori e le chiamate del
sistema generano segnali d’interruzione al fine d’innescare
l’esecuzione di procedure del nucleo
 Poiché le interruzioni sono usate in modo massiccio per
affrontare situazioni in cui il tempo è un fattore critico, è
necessario avere un’efficiente gestione delle interruzioni per
ottenere buone prestazioni del sistema
15
16
Interruzioni
Interruzioni
 È necessario poter differire la gestione delle interruzioni
 La maggior parte delle CPU ha due linee di richiesta delle
durante le elaborazioni critiche
 Bisogna strutturare le interruzioni, in modo da poter
distinguere quelle a bassa e quelle a alta priorità
 Queste caratteristiche sono fornite dal controllore delle
interruzioni
interruzioni
Non mascherabili: riservata a eventi irrecuperabili (errori di
memoria,....)
Mascherabili: possono essere disattivate dalla CPU prima
dell’esecuzione di una sequenza critica di istruzioni che non deve
essere interrotta
 In questo caso tutte le interruzioni di questo tipo vengono mascherate (la
CPU interviene sulla linea di interrupt complessiva)
 È usata dai controllori di dispositivo per richiedere un servizio
17
3
18
Interruzioni
Interruzioni
 Il meccanismo delle interruzioni accetta un indirizzo: un
 Tipicamente i calcolatori hanno più dispositivi (e quindi
numero che seleziona da un insieme una specifica
procedura di gestione delle interruzioni
 Questo indirizzo è tipicamente uni scostamento relativo al
vettore delle interruzioni (che contiene gli indirizzi di
memoria degli specifici gestori delle interruzioni)
 Lo scopo del vettore è di ridurre la necessità che un singolo
gestore debba individuare tutte le possibili fonti dei segnali
d’interruzione per determinare quale di esse abbia richiesto
il servizio
gestori delle interruzioni) che elementi nel vettore
 Se ogni procedura avesse un suo elemento nel vettore,
avremmo vettori enormi
 Una soluzione è quella di avere nel vettore puntatori a liste
di gestori
 Quando si verifica un’interruzione, si chiamano i gestori
nella lista corrispondente fino a quando non si individua
quello che può soddisfare la richiesta
19
20
Interruzioni
Vettore delle interruzioni della CPU Intel Pentium
 Il meccanismo delle interruzioni realizza anche un sistema di
livelli di priorità delle interruzioni
Permette alla CPU di differire la gestione delle interruzioni a bassa
priorità senza mascherare tutte le interruzioni
 Il SO interagisce con il meccanismo delle interruzioni in vari
modi
All’accensione della macchina (installando nel vettore delle interruzioni
gli indirizzi dei gestori dei dispositivi collegati)
Per gestire le eccezioni
Per la gestione della memoria virtuale (paginazione, segmentazione)
Esecuzione di chiamate di sistema
Per controllare il flusso all’interno del nucleo
 Es.: copia dei dati nel buffer dati dell’utente nel caso di lettura da disco. Questa
operazione viene differita, e portata a termine quando la CPU è inattiva
21
22
Accesso diretto alla memoria (DMA)
DMA
 Usato per evitare l’I/O programmato per trasferimenti di
 Per dare avvio a un trasferimento DMA, la CPU scrive nella
grandi quantità di dati
memoria un comando per il DMA
I/O programmato....????
....è quando la CPU si occupa di controllare i bit di stato e di
scrivere i dati nel registro del controllore di un dispositivo
 Esso contiene un puntatore alla locazione dei dati da
trasferire
 La CPU scrive l’indirizzo di questo comando nel controllore
 Per evitare questo “spreco” di ricorre all’accesso diretto
DMA, e prosegue le sue normali attività
alla memoria (DMA)
 Il controllore DMA agisce direttamente sul bus della
memoria presentando al bus gli indirizzi di memoria
necessari per eseguire il trasferimento senza l’aiuto della
CPU
23
4
24
Passi di un trasferimento DMA
DMA
 La negoziazione tra controllore DMA e controllore del
dispositivo avviene tramite una coppia di fili
DMA-request
25
26
DMA
 La negoziazione tra controllore DMA e controllore del dispositivo
avviene tramite una coppia di fili
DMA-request
 Il controllore del dispositivo manda qui un segnale quando una parola è
disponibile per il trasferimento
DAM-acknowledge
 Il controllore DMA usa questa linea dopo aver presentato l’indirizzo desiderato.
In questo momento il DMA prende possesso del bus di memoria
 A questo punto il controllore del dispositivo riceve questo segnale, trasferisce
nella memoria la parola, e rimuove il segnale dalla linea DMA-request
 Quando il trasferimento termina, il controllore DMA interrompe
la CPU
Sommario
 Bus
 Controllore
 Porte e registri
 Negoziazione tra CPU e controllore
 Negoziazione tramite polling o interruzioni
 Uso del controllore di DMA per grandi trasferimenti di dati
Quando la DMA prende possesso del bus di memoria, la CPU non può
accedervi; ha comunque accesso ai dati in cache
Questo fenomeno è anche noto come sottrazione di cicli, che può
rallentare la computazione; le prestazioni risultano comunque migliori
con l’utilizzo del DMA
27
28
Struttura relativa all’ I/O di un nucleo
Interfaccia di I/O per le applicazioni
dispositivi di I/O
 Cioè un’applicazione deve poter utilizzare un dispositivo (ad
programmi
nucleo
 Il SO deve permettere un trattamento uniforme dei
In altre parole, identifica alcuni tipi generali di I/O, accedendo a
ognuno di questi tipi tramite un’interfaccia
Le differenze sono poi incapsulate nei driver dei dispositivi
(moduli del nucleo) che sono specializzati per gli specifici
dispositivi, ma che comunicano con l’esterno tramite le interfacce
uniformi
29
5
dispositivi fisici
es. aprire un file su disco) senza sapere di che tipo di disco
si tratti
 Il SO deve compiere un procedimento di astrazione
rispetto alle differenze tra i vari dispositivi
sottosistema di I/O del nucleo
driver
SCSI
driver
della
tastiera
driver
del mouse
driver
del bus
PCI
driver
dell’unità
a
dischetti
driver
ATAPI
controller
SCSI
controller
della
tastiera
controller
del mouse
controller
del bus
PCI
controller
dell’unità
a
dischetti
controller
ATAPI
dispositivi
SCSI
tastiera
mouse
bus PCI
unità a
dischetti
dispositivi
ATAPI
(unità a
disco,
unità a
nastro)
30
Interfaccia di I/O per le applicazioni
Interfaccia di I/O per le applicazioni
 Le chiamate del sistema di I/O incapsulano il
comportamento dei dispositivi in alcune classi generiche
 I dispositivi possono differire in molti aspetti:
 Lo scopo dello strato dei driver dei dispositivi è di
Trasferimento a flusso di caratteri (trasferisce i byte uno alal
volta) o a blocchi
Accesso sequenziale (trasferisce i dati secondo un ordine
prestabilito e invariabile) o diretto (può essere richiesto l’accesso a
una qualunque delle possibili locazioni di memorizzazione)
Sincroni (tempi di risposta prevedibili) o asincroni
Condivisibili (utilizzato in modo concorrente da vari processi) o
riservati
Velocità di funzionamento
Lettura e scrittura, solo lettura o solo scrittura
nascondere al sottosistema di I/O del nucleo le differenze
fra i controllori dei dispositivi
 In questo modo, i driver dei dispositivi devono essere
implementati in modo da soddisfare la definizione
dell’interfaccia
 I driver differiscono per i vari SO, dato che ogni SO ha le
sue convenzioni riguardanti l’intefaccia dei driver dei
dispositivi
31
32
Caratteristiche dei dispositivi per l’I/O
Classi di dispositivi
 Le classi dei dispositivi sono abbastanza regolari per i vari SO
I/O a blocchi, I/O a flusso di caratteri, accesso ai file associato alla
memoria, socket di rete
 Alcuni SO mettono a disposizione chiamate di sistema anche
per orologio/temporizzatore, e dispositivi audio e video
33
34
Dispositivi con trasferimento a blocchi
Dispositivi con trasferimento a blocchi
 I dispositivi con trasferimento a blocchi includono le unità a disco
 I dispositivi con trasferimento a blocchi includono le unità a disco
Le istruzioni comprendono read, write e seek (per specificare il prossimo blocco
da trasferire)
Di solito le applicazioni comunicano con questi dispositivi tramite un file system
che funge da interfaccia
Certe applicazioni (DB) trattano questi dispositivi come una semplice sequenza
lineare di blocchi (si parla di I/O a basso livello— raw I/O)
Le istruzioni comprendono read, write e seek (per specificare il prossimo blocco
da trasferire)
Di solito le applicazioni comunicano con questi dispositivi tramite un file system
che funge da interfaccia
Certe applicazioni (DB) trattano questi dispositivi come una semplice sequenza
lineare di blocchi (si parla di I/O a basso livello— raw I/O)
 Possibile accesso al file associato alla memoria
Viene posto a un livello gerarchico immediatamente superiore a quello dei
dispositivi a blocchi
Un’interfaccia per l’accesso associato alla memoria fornisce la possibilità di usare
un’unità a disco tramite un vettore di byte della memoria centrale
La chiamata di sistema che associa un file a una regione di memoria restituisce
l’indirizzo di memora virtuale di un vettore di caratteri che contiene una copia
del file
I trasferimenti si trattano nello stesso modo in cui si gestisce l’accesso su
richiesta a una pagina di memoria virtuale
35
6
36
Dispositivi di rete
Dispositivi con trasferimento a caratteri
 Poiché i modi di indirizzamento e le prestazioni tipiche dell’I/O
 I dispositivi con trasferimento a caratteri includono tastiere,
di rete sono notevolmente differenti da quelli dell’I/O delle
unità a disco, la maggior parte dei sistemi operativi fornisce
un’interfaccia per l’I/O di rete diversa da quella caratterizzata
dalle operazione read, write e seek usata per i dischi.
mouse, porte seriali
I comandi comprendono get, put (per acquisire o inviare un
carattere, rispettivamente)
È possibile costruire servizi aggiuntivi quali l’accesso riga per riga
 Un’interfaccia disponibile in molti sitemi operativ, tra i quali
Unix e Windows NT è l’interfaccia di rete socket (letteralmente
“presa di corrente”)
Separa il protocollo di rete dalle operazioni di rete
Include la funzione select
(fornisce informazioni sulle socket per le quali sono presenti pacchetti
che attendono d’essere ricevuti, e su quelle che hanno spazio per
accettare un pacchetto da inviare)
La select elimina l’interrogazione ciclica
37
38
I/O bloccante e non bloccante
Orologi e temporizzatori
 Segnano l’ora corrente, segnalano il tempo trascorso,
 Bloccante: si sospende l’esecuzione dell’applicazione, che
regolano un temporizzatore
 Il dispositivo che misura la durata di un lasso di tempo e che
può avviare un’operazione si chiama temporizzatore
programmabile
passa dalla coda dei processi pronti a quella d’attesa
 Quando la chiamata di sistema termina, il processo torna nella
coda dei pronti
Genera un’interruzione a intervalli regolari, e può ripetere questo
processo un numero prefissato di volte
Lo scheduler usa questo meccanismo per la gestione dei processi a
quanto di tempo
Il sottosistema di I/O lo usa per copiare periodicamente i dati dalla
buffer cache al disco
Il sottosistema di rete lo usa per annullare operazioni che procedono
troppo lentamente (per congestionamenti o fallimenti)time—out
Codice più facilmente comprensibile
Insufficiente per alcune necessità
 ioctl (UNIX) tratta gli aspetti dell’I/O quali orologi e
temporizzatori
39
I/O bloccante e non bloccante
40
I/O asincrono
 Bloccante: si sospende l’esecuzione dell’applicazione, che
passa dalla coda dei processi pronti a quella d’attesa
 Quando la chiamata di sistema termina, il processo torna nella
coda dei pronti
Codice più facilmente comprensibile
Insufficiente per alcune necessità
 Non bloccante: sovrappone elaborazione e I/O
 Un’alternativa sono le chiamate di sistema asincrone:
restituiscono immediatamente il controllo al chiamante senza
attendere che l’I/O sia stato completato
Il completamento dell’I/O è successivamente comunicato
all’applicazione per mezzo dell’impostazione del valore di una
variabile nello spazio d’indirizzi dell’applicazione o tramite la
generazione di un segnale
 La differenza fra chiamata non bloccante e asincrona è che
Interfaccia d’utente
 Interazioni con il mouse o tastiera
 Applicazione per il video digitale, che legge fotogrammi da un disco e li mostra
a video
Si realizza attraverso il multithreading
 Alcuni eseguono chiamate bloccanti, mentre altre proseguono l’elaborazione
La prima restituisce immediatamente il controllo, fornendo i dati che
è stato possibile leggere
La seconda richiede un trasferimento di cui il sistema garantisce il
completamento, ma solo in un momento successivo e non prevedibile
Alcuni SO forniscono chiamate di sistema non bloccanti, che
restituiscono rapidamente il controllo dell’applicazione fornendo un
parametro che indica quanti byte di dati sono stati trasferiti
41
7
42
Sottosistema per l’I/O del nucleo
Sottosistema per l’I/O del nucleo
 Il nucleo fornisce molti servizi riguardanti l’I/O: scheduling,
gestione cache, gestione errori, ecc....
 Memorizzazione transitoria: un buffer (memoria di transito) è
 Scheduling
Fare lo scheduling di un insieme di richieste di I/O significa stabilirne
un ordine d’esecuzione efficace; l’ordine in cui si verificano le
chiamate del sistema delle applicazioni è raramente la scelta migliore.
Alcuni sistemi operativi tentano di essere equi
Ad es., possono ordinare le richieste di accesso al disco in modo da
ottimizzare i tempi di spostamento della testina
Lo scheduling è realizzato mantenendo una coda di richieste per ogni
dispositivo
Quando un processo richiede I/O bloccante, viene posto nella coda
appropriata
Lo scheduler ordina la coda per ottenere prestazioni globali migliori
Può decidere amche di assegnare priorità diverse (richieste del
sottosistema della memoria virtuale > richieste applicazioni)
un’area di memoria che contiene dati mentre vengono trasferiti tra
due dispositivi o fra un’applicazione e un dispositivo
Necessità di gestire la differenza di velocità fra il produttore e il
consumatore di un flusso di dati
 Es.: file da modem a disco. Si scrivono i dati nel buffer; quando questo è pieno, si
richiede di svuotare questo buffer nel disco....ma i dati dal modem continuano ad
arrivare....dove si mettono????
 ....
43
44
Velocità di trasferimento dei dispositivi
di un Sun Enterprise 6000 (scala logaritmica)
Sottosistema per l’I/O del nucleo
 Memorizzazione transitoria: un buffer (memoria di transito) è
un’area di memoria che contiene dati mentre vengono trasferiti tra
due dispositivi o fra un’applicazione e un dispositivo
Necessità di gestire la differenza di velocità fra il produttore e il
consumatore di un flusso di dati
 Es.: file da modem a disco. Si scrivono i dati nel buffer; quando questo è pieno, si
richiede di svuotare questo buffer nel disco....ma i dati dal modem continuano ad
arrivare....dove si mettono????
 ....i dati in arrivo dal modem vengono scritti in un secondo buffer
 La doppia memorizzazione transitoria svincola il produttore dal consumatore,
rendendo meno critica la loro sincronizzazione
45
Memorizzazione transitoria (cont.)
46
Sottosistema per l’I/O del nucleo
 Cache: regione di memoria veloce per copie di dati
Gestione dei dispositivi che trasferiscono dati in blocchi di dimensioni
diverse
 Tipiche nelle reti di calcolatori, dove spesso è necesario frammentare il msg in msg
piccoli, e il sistema destinatario provvede a ricomporre il msg in un’area di memoria
apposita
Sempre solo copia di informazioni già memorizzate
Migliora l’efficienza
Ad es.: la RAM è una cache per il disco....
Realizzazione della “semantica delle copie”
 Es.: applicazione esegue una write su disco di dati in una sua area di memoria;
dopo la richiesta, il SO restituisce il controllo all’applicazione. Cosa succede se
l’applicazione modifica i dati nell’area di memoria?
 Il SO impedisce questo, facendo sì che i dati che verranno trasferiti sono gli stessi
di quelli al momento della chiamata di sistema
 Un modo per realizzare questo è di copiare i dati da scrivere in un’area di memoria
transitoria del nucleo prima di restituire il controllo all’applicazione dopo la
chiamata di sistema
 La copia dei dati verrà dunque effettuata dall’area di memoria del nucleo
47
8
48
Sottosistema per l’I/O del nucleo
Sottosistema per l’I/O del nucleo
 Cache: regione di memoria veloce per copie di dati
 Alcuni sistemi permettono di accedere ai dispositivi in modo
esclusivo
Sempre solo copia di informazioni già memorizzate
Migliora l’efficienza
Ad es.: la RAM è una cache per il disco....
Un processo può accedere a un dispositivo che non sia già attivo
riservandosene l’uso e restituendolo al sistema quando non ne ha più
bisogno
Le appilcazioni hanno la responsabilità di evitare situazioni di stallo
 Code (spooling): memoria di transito contenente dati per un
dispositivo che non può accettare flussi di dati intercalati
Quando il dispositivo può gestire solo una richiesta alla volta
Es.: una stampante. Quando un’applicazione termina di emettere il
flusso di dati da stampare (che vengono scritti in un file), si aggiunge
tale file alla coda di stampa. La coda viene copiata, una file per volta,
sulla stampante
Questa funzione può essere gestita da un processo di sistema
(demone) o da un thread del nucleo
49
50
Gestione degli errori
 Un sistema operativo che usi la protezione della memoria può
proteggersi da molti tipi di errori dovuti ai dispositivi o alle
applicazioni
 I SO sono spesso capaci di compensare efficacemente le
conseguenze negative dovute a errori generati da cause
contingenti (se una lettura non ha successo, il sistema
ritenterà)
 Di norma, una chiamata del sistema per l’I/O riporta un bit
d’informazione sullo stato d’esecuzione della chiamata
Strutture di dati del nucleo
 Il nucleo ha bisogno di mantenere informazioni sullo stato
dei componenti coinvolti nelle operazioni di I/O
 A questo fine usa un certo numero di strutture dati interne
 Il sistema operativo UNIX, per mezzo del file system,
permette l’accesso a diversi oggetti: i file degli utenti, i
dispositivi, lo spazio d’indirizzi dei processi, e altri ancora
La stessa operazione di I/O assume significati diversi a seconda di
chi la effettua
UNIX usa una variabile intera detta errno per codificare
genericamente il tipo d’errore avvenuto
 Alcuni sistemi operativi applicano metodi orientati agli
 Molti dispositivi SCSI mantengono alcune pagine di
oggetti e un sistema basato sullo scambio di messaggi
informazioni sugli errori avvenuti; queste pagine possono
essere richieste dalla macchina, ma ciò accade raramente
51
52
Trasformazione delle richieste di I/O
in operazioni dei dispositivi
Strutture di dati del nucleo
per la gestione dell’I/O nello UNIX
 Si consideri la lettura di un file da un’unità a disco:
Si
Si
Si
Si
Si
determina il dispositivo che detiene il file
traduce il nome nella rappresentazione del dispositivo
trasferiscono i dati dal disco al buffer
rendono disponibili i dati al processo
restituisce il controllo al processo
 Vediamo in dettiaglio....
53
9
54
I/O
I/O
 In UNIX i nomi dei dispositivi sono inclusi nell’ordinario spazio
 Vediamo cosa accade in MS-DOS e UNIX....
 La prima parte di un nome di file in MS-DOS (quella che
dei nomi dei file
 In questo modo sono automaticamente disponibili i servizi del
precede i due punti) identifica uno specifico dispositivo
C: è la parte iniziale di ogni nome di file residente sul disco
principale
Questa convenzione è codificata all’interno del SO: C: è associato
a uno specifico indirizzo di porta per mezzo di una tabella dei
dispositivi
L’uso dei due punti facilita il compito del SO per separare i nomi
dei dispositivi dai nomi di file
file system riguardanti i nomi dei file (possessore, diritti, ecc....)
 In un percorso UNIX non c’è alcuna chiara separazione fra il
dispositivo interessato e il nome del file in senso proprio
 In effetti nessuna parte del nome di percorso di un file è il
nome di un dispositivo
55
56
Schema d’esecuzione di una richiesta di lettura bloccante
I/O
 UNIX impiega la tabella di montaggio per associare i prefissi
dei nomi di percorso ai corrispondenti nomi di dispositivi
Dato un nome di percorso, il sistema esamina la tabella per trovare il
più lungo prefisso corrispondente; questo elemento della tabella indica
il nome del dispositivo voluto
 Tuttavia, anche questo nome è rappresentato come oggetto del
file system
 Quando però UNIX cerca questo nome nel file system, non
troverà un inode, ma una coppia <major,minor> che identifica
un dispositivo
Major: individua il driver di dispositivo da usare per gestire l’I/O
Minor: deve essere passato al driver per determinare, per mezzo di
un’altra tabella, l’indirizzo della porta (o del DMA) del controllore del
dispositivo interessato
Ad es.: Lettura da un file
già aperto
Dati già presenti in buffer cache
Il processo passa da
coda pronti a coda
attesa
Il driver assegna
un’area di memoria
nello spazio
di’indirizzi del
nucleoper ricevere i
dati. Può eseguire
polling o DMA
57
58
Comunicazione fra calcolatori
Prestazioni
 L’I/O è uno tra i principali fattori che influiscono sulle
prestazioni di un sistema:
Richiede un notevole impegno di CPU per l’esecuzione del codice
del driver e per uno scheduling equo ed efficiente
I risultanti cambi di contesto sfruttano fino in fondo la CPU e le
sue memorie cache
Rivela le eventuali inefficienze del nucleo nel gestire le interruzioni
 Comportano cambi di contesto che devono essere gestiti bene
Anche il traffico di rete può pesare e portare a cambi di contesto
 Es.: connessione a distanza fra due calcolatori. Ogni caratteri inserito da
una parte deve essere comunicato all’altra
59
10
60
Successione delle realizzazioni dei servizi di I/O
Migliorare le prestazioni
Vita di un nuovo servizio di I/O
Facilita il debugging, non pianta il
sistema, non si riavvia o
ricaricano i driver a ogni modifica
 Per migliorare l’efficienza dell’I/O si possono applicare diversi
principi:
aumento di flessibilità
aumento di astrazione
aumento dei costi di sviluppo
aumento di efficienza
codice dell’applicazione
aumento del tempo
Ridurre il numero dei cambi di contesto
Ridurre il numero di copiature dei dati
Ridurre la frequenza delle interruzioni tramite il trasferimento di
grandi quantità di dati in un’unica soluzione, l’uso di controllori
intelligenti e mediante l’interrogazione ciclica
Uso di controllori DMA intelligenti
Equilibrare le prestazioni della CPU, del sottosistema per la gestione
della memoria, del bus e dell’I/O
nuovo algoritmo
codice del nucleo
codice del driver del dispositivo
codice del controllore del dispositivo
(architettura)
codice del dispositivo (architettura)
61
62
STREAMS
 STREAMS: connessione full-duplex tra un driver dispositivo e un
processo utente.
 STREAMS consiste di:
Per oggi basta!!!!
- un elemento iniziale d’interfaccia per il processo utente
(STREAM head)
- un elemento terminale che controlla il dispositivo (driver end)
- un certo numero di moduli intermedi fra questi due estremi.
 Tutti questi elementi possiedono una coppia di code, una di
lettura e una di scrittura.
 Per il trasferimento dei dati tra le due code, si usa uno schema a
scambio di messaggi.
63
Struttura di STREAMS
65
11
64