Gestione dell'Input/Output
Dispositivi di Input/output
L'Input/Output (I/O) esegue le operazioni di trasferimento dei dati tra la memoria centrale e i dispositivi periferici. Possiamo classificare i dispositivi di I/O in:
- dispositivi per l'interazione tra uomo e macchina :video, tastiere, mouse, microfoni, altoparlanti;
- dispositivi per il trasferimento dei dati tra sistemi: il modem o la scheda Ethernet;
- dispositivi per la memorizzazione permanente, non volatile, dei dati: le unità adisco magnetico, i lettori di DVD e di CD ROM, i masterizzatori di CD o DVD, le unità a nastro magnetico;
- dispositivi per il controllo di apparati e per la ricezione di dati da apparati: il dispositivo che attiva il motore della centrifuga di una lavatrice e opera sotto il controllo di un microprocessore, l’attuatore che agisce sulle pinze dei freni di un sistema frenante ABS o, infine, il sistema che controlla un reattore nucleare in base al valore di diversi parametri rilevati dagli strumenti di misura.
L'efficienza delle operazioni di I/O è di grande importanza per il funzionamento dell'intero sistema, per il file manager, perché:
- influisce sulla rapidità della risposta alla richiesta di informazioni ricercandole nei file su disco,
- influisce sulla gestione della memoria virtuale, dove l'I/O è rilevante per lo swapping delle pagine.
La gestione dell'l/O è complicata dalla grande varietà dei dispositivi gestiti, con diverse prestazioni e con tempi e modalità di servizio differenti. È difficile determinare una strategia di servizio uniforme; inoltre il software di sistema diventa più complesso.
Architettura di Input/Output
Un moderno computer è composto:
- da uno o più processori,
- dalla memoria centrale,
- dai dispositivi periferici,
- dalle schede per il collegamento alle reti di comunicazione
- da una struttura di interconnessione, detta bus di sistema, per il collegamento delle parti del computer.
I dispositivi periferici veri e propri (la tastiera e il video), sono collegati al bus di sistema tramite controllori del dispositivo o schede di controllo del dispositivo.
Le informazioni necessarie per operare un trasferimento di dati tra l'unità centrale e le periferiche:
- Scrittura: il controllore del disco deve conoscere i dati da scrivere e la posizione del disco deve scrivere questi dati. Il controllore scrive i dati sul disco e informa l'unità centrale dell’avvenuta operazione inviando un segnale di interruzione. Esso modifica opportuni flag per segnalare l’eventuale presenza di errori e la disponibilità a ricevere altri dati.
- Lettura dal disco: il controllore riceve dall'unità centrale l'ordine di leggere e la posizione sul disco dei dati da leggere. Il controllore esegue l'operazione, richiede di accedere al bus e invia i dati letti al processore. Modifica opportuni bit di stato per segnalare la disponibilità a eseguire altre operazioni.
Un computer è un insieme di componenti: la memoria, il processore e i moduli di Input/Output che comunicano tra di loro. Un modulo di Input/Output consiste in un dispositivo che riceve e trasmette segnali che rappresentano:
- Dati
- Indirizzi
- segnali per il controllo del dispositivo stesso.
La figura mostra un modulo di Input/Output che riceve e invia segnali: la doppia freccia grigia indica che il controllore del dispositivo, oltre a dialogare con gli altri moduli del computer, interagisce con la periferica controllata per lo scambio dei dati.
Dal punto di vista del controllore, i segnali possono essere suddivisi in:
- segnali in ingresso, cioè i dati ricevuti dal processore e dalla periferica, gli indirizzi che specificano la posizione dei dati nel dispositivo e i segnali di controllo, per esempio leggi e scrivi.
- segnali in uscita, cioè i dati inviati al processore e alla periferica, i segnali di interruzione e di controllo, per esempio la richiesta di accesso al bus.
- Il collegamento “punto a punto” serve per la comunicazione tra i due dispositivi collegati.
- La struttura di connessione a bus serve per la comunicazione di più dispositivi collegati con un mezzo di trasmissione condiviso.
Nei computer moderni ci sono diversi bus con differenti caratteristiche.
Il bus di sistema è Il bus che collega le componenti principali del computer.Un bus di sistema è formato da un insieme di 100 - 200 linee per la trasmissione dei differenti tipi di segnali. Le linee del bus di sistema sono suddivisi in:
- linee per i dati,
- linee indirizzi
- linee per il controllo dei dispositivi.
Le linee dati formano il bus dati composto da 16, 32, 64 o più linee che permettono il trasferimento in parallelo di 16,32,64 o più bit. Il numero di linee dati definisce l'ampiezza del bus. Se un processore a 64 bit che è collegato alla memoria con un bus dati a 32 bit per trasferire un dato di 64 bit dalla memoria al processore servono due cicli di bus.
Le linee di indirizzo specificano l’origine o la destinazione предназночение dei dati e permettono di indirizzare i dati in memoria. L’ampiezza del bus indirizzi definisce anche la dimensione dello spazio di memoria fisica indirizzatile.
Le linee di controllo servono per il controllo dei dispositivi e l'accesso al bus. I segnali del bus di controllo servono a specificare:
- il tipo di operazione in memoria (leggi o scrivi),
- il tipo di operazione su un dispositivo di I/O (leggi o scrivi),
- la richiesta di accesso al bus,
- la richiesta che il bus è stato concesso,
- per inviare un segnale di interruzione per il processore
- per segnalare che il processore deve essere interrotto.
La richiesta per usare il bus è inviata a un apposito hardware per l'arbitraggio del bus che decide a chi concederne l’uso. L'arbitraggio del bus può essere:
- centralizzato, quando è attuato da un apposito modulo hardware,
- distribuito se il controllo è attuato dall'hardware dei controllori che accedono al bus.
Il trasferimento dei dati tra le componenti del sistema avviene nel seguente modo:
- un dispositivo che vuole inviare dati >>> richiede l’uso del bus >>> dopo averlo ottenuto, pone i dati da trasmettere nel bus dati >>> specifica nel bus indirizzi la loro destinazione;
- un modulo del computer che vuole ricevere dei dati, per esempio il processore >>> richiede l'uso del bus>>> dopo averlo ottenuto, invia segnali di controllo al dispositivo interessato al trasferimento >>> Il dispositivo è identificato >>> specifica l’indirizzo nella linea indirizzi del bus di sistema >>> Il modulo che richiede i dati deve aspettare che i dati siano inviati.
Un'architettura di bus con molti dispositivi collegati da un solo bus può degradare le prestazioni del sistema a causa dell’affollamento dell’unico percorso di trasmissione: si aumenta il tempo di propagazione dei segnali, la frequenza di accesso al bus diminuisce. Contemporaneamente la numerosità dei dispositivi può portare alla saturazione del bus, costringendo i dispositivi attendere che il bus sia libero per ottenerne l’accesso. Il problema può essere risolto:
- sia con l'aumento della velocità del bus, ricorrendo quindi a una migliore tecnologia, sia aumentando l’ampiezza del bus per ridurre il numero di accessi dei dispositivi.
- realizzare un sistema di interconnessione con più bus che operano in parallelo.
Adesso si usa un'architettura di bus multipli organizzati in una struttura gerarchica. Il vantaggio:
- riduce l'uso del bus di sistema per gli accessi alla memoria
- permette trasferimenti diretti tra le unità periferiche e la memoria senza l’uso del processore.
I diversi tipi di bus multipli di un personal computer:
- Il bus della memoria che collega il processore con la memoria centrale e con la memoria cache: in questo modo il percorso dei dati tra memoria e processore è separato dal traffico dei segnali che viaggiano sul bus di sistema.
- Il bus di sistema al quale sono collegati i dispositivi con elevato transferrate, per esempio i dischi, i video collegati con una scheda grafica e le interfacce per l'accesso alle reti locali, per esempio le interfacce SCSI, SATA, USB.
- Il bus di espansione ISA (Industry Standard Architccture) è un bus sviluppato da IBM e commercializzato a partire dal 1981. Con un transferrate di 16,67 MB/sec è attualmente superato dalle prestazioni dei più recenti bus PCI, e non è adottato da alcun costruttore per i computer ad uso d'ufficio e domestici, ma è ancora usato per le schede di connessione di alcuni dispositivi periferici usati in particolari settori industriali.
Il bus PCI (Peripheral Component Interconnect) è il bus di sistema usato nei computer più recenti. Progettato da Intel all'inizio degli anni ’90. Transfer rate iniziale da 133 MB/sec a 4266 MB/sec.
L'interfaccia SCSI (Small Computer System Interface) nelle versioni recenti permette un transfer rate di 640 MB/sec.
L'interfaccia SATA (Serial ATA, Serial Advanced Technology Attachment) è un'evoluzione dell'interfaccia parallela ATA nota come Parallel ATA, o P-ATA, e indicata come interfaccia IDE o EIDE (Enhanced Integrated Drive Electronic). Transfer rate di ATA nelle versioni più aggiornate arriva a 133 MB/sec, transfer rate di SATA fino a 768 MB/sec.
L'interfaccia USB (Universal Serial Bus) è un collegamento seriale, cioè è in grado di trasferire un bit alla volta, con transfer rate fino a 600 MB/sec. Le porte USB permettono di collegare dispositivi esterni: mouse e tastiere, dispositivi ad alta velocità quali dischi esterni, fotocamere digitali.
La nuova interfaccia rispetta i seguenti requisiti:
- L’utente non deve impostare il settaggio di microinterruttori o ponticelli sulle schede di connessione o sui dispositivi medesimi, e non è necessario aprire il computer per installare nuovi dispositivi e collegarli negli alloggiamenti sulla scheda madre.
- Tutti i dispositivi sono collegati con lo stesso tipo di cavo e il cavo di connessione può fornire anche l’alimentazione ai dispositivi stessi.
- L’interfaccia permette il collegamento di più dispositivi, fino a 127. È anche possibile collegare i dispositivi “a caldo", cioè a computer funzionante, senza la necessità di riavviare il sistema dopo il collegamento.
- Il bus ha un basso costo di produzione.
Il bus USB, progettato per il collegamento a dispositivi lenti, nelle prime versioni aveva una velocità di trasferimento di 1,5 MB/sec. Il bus USB si collega al bus di sistema tramite un hub radice dotato di prese alle quali connettono i dispositivi di I/O o altri hub, realizzando una serie di collegamenti a cascata con una struttura ad albero.
I cavi di collegamento sono costituiti da 4 fili:
- due dei quali sono usati per la trasmissione dei segnali
- i due rimanenti per l'alimentazione della periferica.
II bus USB si basa su un protocollo master/slave per comunicare con i dispositivi periferici ad esso collegati. Le comunicazioni sono controllate in modo centralizzato e avviene solo tra sistema centrale e unità periferiche: le unità periferiche collegate al sistema con le porte USB non possono stabilire un collegamento diretto fra di loro.
Come funziona:
- Il collegamento di un dispositivo a una presa USB viene rilevato dall'hub radice che invia un segnale di interruzione al processore.
- La routine di gestione dell'interruzione di questo evento interroga il dispositivo per individuarne le caratteristiche e la velocità di collegamento.
- La routine di gestione assegna dinamicamente un indirizzo, nell'intervallo 1-127 al nuovo dispositivo e lo memorizza nei registri del dispositivo stesso.
- Tutti i dispositivi USB sono poi gestiti da un unico driver.
Con questa tecnica il dispositivo è configurato dinamicamente dal sistema e l'utente non deve eseguire altre operazioni oltre a collegare l’unità periferica alla presa.
Operazioni di I/O, moduli di I/O e controllori
Le operazioni di Input/Output riguardano il trasferimento dei dati tra l'unità centrale e le unità periferiche. L'interazione tra periferia e unità centrale avviene per mezzo dei controllori della periferica, cioè con dispositivi specializzati nella gestione delle periferiche. Per il processore il disco magnetico è un'unità alla quale invia i dati, o dalla quale riceve i dati, in blocchi, o record fisici, per 4 KB. l’intero disco è un array di blocchi. Un'operazione di I/O che coinvolge il disco usa una System cali, con il significato di: o
Dove:
- NumeroBlocco indica la posizione dei dati su disco
- Buffer è l'area di memoria che contiene i dati da scrivere su disco o dove sono ricevuti i dati letti.
Il controllore del dispositivo trasforma il numero del blocco in base alla geometria del disco in:
- cilindro,
- superficie
- numero di settore.
Il controllore tiene conto:
- degli eventuali settori difettosi
- dei settori distribuiti nei cilindri del disco.
Il controllore di un dispositivo è dotato di opportuni registri, porte, che variano per numero e composizione da dispositivo a dispositivo, ma che si possono suddividere in due gruppi:
- porte con la funzione di buffer per il trasferimento dei dati tra processore e periferica;
- porte con la funzione di registri per il controllo del dispositivo e per raccogliere le informazioni sullo stato del dispositivo. Le informazioni per il controllo del dispositivo contengono flag per specificare l’operazione che la periferica deve eseguire (lettura/scrittura), oppure per inviare segnali di interruzione al processore.
Le operazioni di Input/Output sono eseguite, al livello del linguaggio macchina, trasferendo informazioni tra i registri della CPU e le porte dei controllori con comandi come i seguenti:
Il processore invia segnali di controllo e dati al controllore e riceve dal controllore informazioni di stato e dati. Analogamente il controllore invia comandi e informazioni all'unità di I/O e riceve informazioni di stato e dati dal dispositivo vero e proprio. Il dialogo tra processore e controllore e l’interazione tra controllore e unità periferica sono due processi che evolvono in parallelo e devono essere controllati e sincronizzati.
Le modalità del controllo delle attività di Input/Output:
- I/O a controllo di programma,
- I/O guidato dalle interruzioni,
- I/O con dispositivo di accesso diretto alla memoria,
- I/O a canale.
I/O a controllo di programma: il processore gestisce il trasferimento dei dati leggendo i registri di stato del controllore per sapere quando è pronto per ricevere o trasmettere dati. Il controllo del dispositivo avviene in un ciclo di attesa attiva nel quale il processore controlla il valore di un apposito bit del registro di stato. Quando il controllore è pronto a ricevere o trasmettere dati, il trasferimento viene eseguito usando i registri del processore e le porte del controllore.
I/O a controllo di programma:
|
1.il processore gestisce il trasferimento dei dati leggendo i registri di stato del controllore per sapere quando è pronto per ricevere o trasmettere dati
|
2.Il controllo del dispositivo avviene in un ciclo di attesa attiva nel quale il processore controlla il valore di un apposito bit del registro di stato
|
3.il trasferimento viene eseguito usando i registri del processore e le porte del controllore.
|
Si usa in un sistema monoprogrammato
Lo svantaggio:
il processore è dedicato all'esecuzione di un singolo processo e non può fare altro fino al suo fine
|
I/O guidato dalle interruzioni
|
1.il processo prepara i dati di output, poi attiva la periferica. La periferica, dopo aver eseguito l'operazione di I/O, invia un segnale di interruzione al processore.
|
2.Il processore completata l’esecuzione, riconosce il segnale di interruzione e invia un segnale alla periferica per indicare che ha ricevuto il segnale di interruzione, quindi esegue la routine di gestione dell’interruzione (ISR).
|
3.La routine di servizio dell'interruzione del dispositivo riattiva il processo in attesa. Progetto 1 in libro
|
Si usa in un sistema multiprogrammato
Lo svantaggio:
processore è continuamente interrotto perché deve eseguire il trasferimento dei dati dalla porta del controllore alla memoria.
|
I/O con accesso diretto alla memoria
nei computer moderni è stato introdotto il DMA (Direct Memory Access), un dispositivo che gestisce autonomamente il trasferimento dei dati tra l'unità periferica e la memoria non usando la CPU.
|
1.Il processore carica alcuni registri del DMA con le informazioni necessarie ad operare il trasferimento
2.Il DMA esegue il trasferimento dei dati
3. Il DMA, dopo aver completato il trasferimento, invia un segnale di interruzione al processore.
|
Il DMA agisce sotto il controllo del processore che informa DMA sull'origine, la destinazione e la quantità di dati da trasferire e poi lascia DMA. DMA opera il trasferimento da solo.
|
La gestione del N/O con il DMA coinvolge il processore solo all'inizio e alla fine del trasferimento dei dati. Il processore deve in ogni caso preparare i dati da trasmettere e deve gestire le eventuali situazioni di errore.
|
Si usa in un sistema multiprogrammato
|
I/O a canale
|
Il canale è un dispositivo DMA potenziato che esegue programmi posti nella memoria del processore (programmi di canale).
|
Il canale è un processore specializzato nell'esecuzione delle istruzioni di I/O.
Quando il canale ha una propria memoria locale per l’esecuzione dei programmi di I/O si chiama processore di Input/Output, per indicare il fatto che il canale è un vero e proprio computer autonomo, specializzato nell'eseguire operazioni di I/O.
|
1.Il processore lascia al canale il compito di eseguire una serie di procedure di Input/Output poste in memoria centrale.
2.Il canale esegue autonomamente le istruzioni in memoria centrale e,
3. Il canale al termine dell'esecuzione informa il processore con un segnale di interruzione.
|
Si usa in un sistema multiprogrammato
|
4. Software di Input/Output
Gli obiettivi del software di I/O del sistema operativo:
- L’efficienza delle operazioni: Poiché il software di Input/Output interviene nella gestione delle operazioni con il disco, la sua efficienza è molto importante anche per il file System e la gestione della memoria virtuale.
- un software di I/O più semplice, con meno errori, più facile da sviluppare e da mantenere.
Per raggiungere questi obiettivi il software di Input/Output è strutturato in un insieme di livelli interagenti.
Il processo dell'utente e l'unità periferica si scambiano dati indirettamente, attraverso un serie di livelli così organizzati:
- Il software dell’utente effettua alcune operazioni preliminari предварительные e, per iniziare I/0 traduce il comando di I/O in una richiesta al sistema operativo. Il sistema operativo mette a disposizione del livello superiore una serie di servizi di I/O, che si traducono in opportune API di I/O (Application Programming Interface di I/O).
- Un primo livello delle azioni del sistema operativo, indicato come livello dell'Input/Output logico, è il software indipendente dal dispositivo che ha lo scopo di uniformare le operazioni che devono essere eseguite per ogni tipo di dispositivo. I dispositivi sono trattati come file e identificati con un nome simbolico. Il software implementa azioni del tipo:
- Open, per stabilire un legame tra dispositivo e processo,
- dose, per terminare l'accesso del processo al dispositivo,
- Read, Write, Rewind, per le operazioni di lettura, scrittura e riposizionamento dall'inizio.
- la gestione dello SPOOL
- la bufferizzazione dei dati.
- Un livello inferiore, il software dipendente dal dispositivo ha il compito di nascondere al livello superiore i dettagli delle operazioni sullo specifico dispositivo. Il software dipendente dal dispositivo tratta le operazioni tramite i driver dei dispositivi, cioè i software specializzati nella gestione dei dispositivi.
- Il livello delle interruzioni, della schedulazione delle operazioni di I/O e dell'interazione diretta con il dispositivo è un livello ancora più basso che fa la gestione del dispositivo fisico vero e proprio.
I dispositivi di I/O possono essere classificati in dispositivi a blocchi e dispositivi a caratteri.
- I dispositivi a blocchi, come i dischi e i nastri, registrano i dati in blocchi di dimensione fissa e il trasferimento dei dati avviene per blocchi.
- I dispositivi a carattere, come le stampanti e le tastiere, trattano l'Input/Output come un flusso di caratteri non strutturato.
Software di I/O dell’utente
Al livello del software dell’utente l'Input/Output avviene con comandi del tipo:
- Read(File,Buffer,Len)
- Write(File,Buffer,Len)
dove:
- File identifica, con un nome simbolico, il dispositivo origine o destinazione del trasferimento;
- Buffer è una variabile con i dati da trasferire alla periferica o dove ricevere i dati inviati dalla periferica;
- Len è il numero di caratteri da trasferire.
Le azioni eseguite a questo livello sono implementate dai compilatori dei linguaggi di programmazione, che eseguono la trasformazione delle richieste di I/O nelle chiamate alle API di I/O.
Software di I/O indipendente dal dispositivo
Alcune azioni a questo livello, per esempio Open, dose. Read e Write sono in comune con il software del file manager, di cui si parlerà nel prossimo capitolo.
Lo SPOOL (Simultaneous Peripheral Operation On Line) è un sistema per gestire in ambiente multiprogrammato l'accesso a unità periferiche, per esempio le stampanti, che non possono essere condivise da più processi.
Nel sistema operativo opera un processo speciale, indicato con demone di spool, e una directory speciale, detta directory di spool.
Supponiamo che ci siano tre processi che vogliono stampare dei dati: File1, File2 e File3.1 sono inseriti nella directory di spool. Il demone della stampante esamina periodicamente la directory di spool e, se ci sono file pronti per essere stampati, li invia uno per volta alla stampante rimuovendoli dalla directory di spool. Il demone di spool ha lo scopo di mettere in sequenza gli accessi alla stampante.
Buffer di sistema è spazi di memoria dove memorizzare temporaneamente i dati durante il trasferimento.
Ci sono due importanti motivi per usare la bufferizzazione delle operazioni di I/O:
- Per disaccoppiare распаривает il processo che effettua l'I/Ó e la periferica. In assenza di bufferizzazione:
- il processo che legge o scrive deve rimanere in attesa che l’operazione di I/O sia conclusa per poter proseguire ed è rallentato dalla bassa velocità delle periferiche.
- il processo è costretto a rimanere in memoria, per ricevere i dati in caso di input o per fornire i dati in caso di output.
- se il trasferimento avviene in un'area del sistema operativo, il processo in attesa del completamento dell'operazione di I/O, può essere rimosso dalla memoria e spostato su disco senza problemi.
Nella bufferizzazione, attuata con un buffer posto nello spazio di memoria del sistema operativo, il sistema operativo gestisce i buffer di sistema e, in seguito alla richiesta di I/O di un processo, assegna ad esso un’area nel proprio spazio di memoria.
La strategia di tipo anticipatorio: un blocco di dati in ingresso è posto nel buffer di sistema. In un secondo tempo, mentre il blocco è trasferito al processo, il sistema operativo trasferisce un altro blocco nel buffer di sistema. In questo modo il trasferimento dei dati dal disco al processo è scomposto in due trasferimenti che sono eseguiti in parallelo: il trasferimento dal disco al sistema operativo e il trasferimento dal sistema operativo al processo utente. Mentre il processo utente elabora il blocco di dati appena ricevuto, il sistema operativo legge il blocco successivo . Considerazioni simili si possono fare anche per le operazioni di output e per trasferimenti che coinvolgono dispositivi a carattere, dove il trasferimento avviene un carattere per volta o una riga per volta.
Esiste un modo diverso di allocare i buffer di sistema: al processo sono allocati due buffer di sistema (doppia bufferizzazione).
Come funziona doppia bufferizzazione : Consideriamo un'operazione di input da disco. Il sistema operativo trasferisce un blocco dal disco in uno dei due buffer di sistema. A questo punto, mentre il processo preleva il blocco dal buffer di sistema, il sistema operativo trasferisce un blocco di dati dal disco nell’altro buffer di sistema. La lettura dei dati da disco prosegue alternando l'uso dei due buffer.
Lo schema del doppio buffer può essere generalizzato con l'uso di N buffer di sistema.
Software di I/O dipendente dai dispositivi: A questo livello gli ordini di I/O del livello superiore sono tradotti nella corretta sequenza di istruzioni e comandi rivolti al modulo di I/O. Il software di I/O dipendente dai dispositivi ha lo scopo di nascondere al proprio interno i dettagli di funzionamento del controllore di una specifica periferica e di rendere all'esterno dispositivi virtuali gestibili con comandi del tipo:
Read(Periferica, Buffer, NumeroBytes)
Write(Periferica, Buffer, NumeroBytes)
Le operazioni sono svolte da moduli software detti device driver o driver dei dispositivi. In genere questi software sono sviluppati e distribuiti dai costruttori dei dispositivi periferici stessi.
Ci sono due tecniche per includere i driver dei dispositivi nel sistema operativo stesso:
- il codice dei driver è collegato con le altre parti del sistema operativo mediante il link editor(usata nei primi computer)
- i driver sono collegati dinamicamente al momento dell'esecuzione.
Un driver di dispositivo riceve dai livelli superiori una richiesta del tipo: Write(Periferica,Buffer,NumeroBytes) e deve tradurla nelle corrette azioni agendo sul controllore del dispositivo tramite le sue porte.
Per eseguire queste azioni occorre che il driver memorizzi al proprio interno tutte le informazioni necessarie per la gestione dello specifico dispositivo. Un driver di dispositivo, dopo aver ricevuto la richiesta di I/O, controlla la correttezza dei parametri trasmessi e, se non ci sono errori, esegue i compiti richiesti.
Nel driver presenta una struttura dati, detta descrittore del dispositivo, in grado di memorizzare:
- informazioni sul controllore, cioè l’indirizzo delle porte per il controllo del dispositivo, per la verifica del suo stato e per lo scambio dei dati;
- informazioni sui dati da trasferire, cioè il puntatore al buffer e il numero di byte da trasferire;
- informazioni per la gestione del trasferimento, cioè il codice di completamento e la struttura dati usata per la sincronizzazione con il processo associato.
I compiti di un driver:
- la gestione delle richieste per la lettura e la scrittura dei dati e la loro esecuzione,
- Le funzioni per l’inizializzazione del dispositivo periferico
- la gestione delle situazioni di errore.
Controllo e schedulazione del dispositivo: Il livello inferiore delle operazioni di Input/output gestisce le interruzioni, il controllo e la schedulazione del dispositivo. A questo livello avviene l'interazione vera e propria con l'hardware della periferica. Il driver deve tener conto delle richieste contemporanee da parte di molti processi. La schedulazione del braccio del disco è un esempio di gestione di richieste di servizio di più processi.
I dischi magnetici e la schedulazione del braccio del disco
Nei moderni sistemi di elaborazione sono presenti molti dispositivi di memorizzazione esterna: i dischi magnetici, i CD-ROM, i DVD, i nastri magnetici, le flash memory.
I floppy disk sono in disuso вышел из употребления per la loro limitata capacità e sono stati sostituiti, dagli USB flash drive:
- sono memorie flash integrate con un connettore USB che permette di collegare il drive al computer attraverso una porta USB.
- hanno capacità dell'ordine di diversi gigabyte con costi contenuti e sono diventati, nell'uso personale, i dispositivi di memorizzazione di massa rimovibili più utilizzati.
Negli attuali sistemi i principali dispositivi di memorizzazione di massa sono i dischi magnetici.
Il disco magnetico è costituito da un sottile disco metallico con le due facce ricoperte da materiale magnetizzabile.
La memorizzazione dei dati si basa sui principi delľinduzione elettromagnetica:
La spirale di materiale conduttore è collocata in una testina di lettura e scrittura posta sopra il disco in rotazione. Per scrivere un bit viene inviato un impulso di corrente attraverso la testina che provoca la magnetizzazione di una piccola superficie del disco. Per leggere un bit, viene rilevato il senso della corrente che attraversa la testina, indotta dal verso di magnetizzazione della superficie del disco.Il disco ruota intorno al proprio asse a velocità costante. Mentre, per leggere o scrivere, la testina rimane immobile sopra la superficie del disco.
Negli attuali sistemi a disco, più dischi sono montati su un asse centrale, intorno al quale ruotano con velocità uniforme: i pacchetti di dischi o diskpack
Le due facce del disco, o superfici, sono suddivise in piste concentriche, dette tracce.
Le tracce sono suddivise in parti uguali, dette settori. Un valore tipico del settore è di 512 byte. I settori sono separati da gap. Una traccia è la parte di una superficie del disco che passa sotto la testina di lettura/scrittura con il braccio fermo;
Un cilindro è l'insieme di tutte le piste alla stessa distanza dal centro. Il cilindro è l'insieme di tutte le tracce alle quali si può accedere senza spostamento della testina di lettura/scrittura.
Un blocco, o duster, è formato da un gruppo di settori di un disco e costituisce la quantità di dati che viene trasferita in un'operazione di I/O da disco.
Le testine di lettura e scrittura, una per ogni superficie, sono montate su un unico braccio meccanico, che consente il movimento radiale tra i dischi. Le testine non sono a diretto contatto con la superficie del disco ma sorvolano il disco a una distanza inferiore al millesimo di millimetro; questo fatto permette velocità di rotazione delle migliaia di giri al minuto ed evita fenomeni di usura della superficie.
In ogni settore sono presenti:
- informazioni per identificare il settore,
- informazioni per dichiarare il settore difettoso e non più utilizzabile,
- i dati accessibili dall'utente,
- codici di controllo per garantire l'integrità dei dati,
- gap di separazione tra i settori.
Tali informazioni sono memorizzate sul disco nel corso delle sua formattazione a basso livello programmato dal azienda produtrice. La formattazione a basso livello definisce la struttura fisica e la geometria del disco.
Una formattazione ad alto livello è effettuata dall’utente, che prepara il disco per essere utilizzato secondo le richieste del file System del sistema operativo.
Nei dischi magnetici si parla di accesso diretto alle informazioni in quanto è possibile accedere ai settori del disco indipendentemente dalla posizione del settore nel disco. Però, a differenza con la memoria centrale dove il tempo di accesso a una parola di memoria è indipendente dal suo indirizzo, il tempo di accesso al settore non è esattamente indipendente dalla sua posizione nel disco ma dallo spostamento meccanico del braccio e la rotazione del disco.
Per precisare meglio il valore dei tempi osserviamo tre valori C, T. S, dove:
- C è il numero del cilindro, che determina la posizione del braccio con la testina di lettura/scrittura;
- T è il numero di testina;
- S è il numero di settore che identifica, nella traccia (C,T), il settore cercato.
Il tempo TB, necessario per trasferire i byte di un settore nel buffer del dispositivo: TB = Ts + TR + TT dove:
1. Ts è il tempo di posizionamento (seek Urne) del braccio, cioè il tempo necessario per spostare il braccio con la testina di lettura/scrittura sul cilindro. Questo tempo dipende, dalle prestazioni del drive, dal numero di tracce che devono essere attraversate per raggiungere il cilindro cercato. Nei dischi attuali valori medi del tempo sono di 6 - 16 msec a seconda.
2. TR è la latenza rotazionale, cioè il tempo occorrente perché il settore cercato passi sotto la testina. Mediamente è pari al tempo necessario per compiere mezza rotazione del disco e dipende quindi dalla velocità di rotazione. Le velocità di rotazione maggiormente diffuse nei dischi attuali, sono tra 3600 e 7200 giri al minuto, il tempo di latenza assume valori compresi tra 8.3 e 4,17 msec. I dischi nei server ruotano a 10000 - 15000 giri al minuto.
|
|