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 lorodiversi 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