Calcolatori Elettronici T. Input/Ouput

Documenti analoghi
Il sottosistema di I/O. Input Output digitale

Secondo l architettura di Von Neumann il bus rappresenta il punto di interconnessione di tutti i componenti del calcolatore.

Interfacciamento di periferiche I/O al μp 8088

LA GESTIONE DELLA I/O

Input/Output (Cap. 7, Stallings)

Pin-out logico di una CPU CPU. Reset Clock Ready. Architettura di un Sistema

Sottosistema d ingresso uscita

Struttura CPU. Struttura e Funzione del Processore. Capitolo 12. Compiti CPU:

Componenti e connessioni. Capitolo 3

Periferiche CPU. Misure e Sistemi Microelettronici Sistemi 6-1 SREG. Data Bus Address Bus Control Bus

Sottosistemi ed Architetture Memorie

Architettura dei Calcolatori Interfacce

Architettura di una CPU

Esame di INFORMATICA Lezione 4

La macchina di Von Neumann

Corso di Calcolatori Elettronici I

Struttura interna del sistema operativo Linux

Architettura di un calcolatore

Architetture dei Calcolatori Interfacce

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

L hardware da solo non è sufficiente per il funzionamento dell elaboratore È necessario introdurre il software:

IO 1 Input Output a livello Hardware

L architettura del calcolatore

Informatica Generale 07 - Sistemi Operativi:Gestione dei processi

Capitolo 5 Elementi architetturali di base

CPU, RAM, ROM e BUS Corso di Abilità Informatiche Laurea in Fisica

La gestione dell I/O (Cap. 5, Tanenbaum)

Il Sistema Operativo. Informatica Sistema Operativo 1

Architettura di Von Neumann

Sistemi Operativi. Sistemi I/O SISTEMI DI INPUT/OUTPUT. Hardware di I/O. Interfaccia di I/O per le applicazioni. Sottosistema per l I/O del kernel

Input/Output. Livelli del sottosistema di I/O

ARCHITETTURA DI UN CALCOLATORE ELETTRONICO

Lezione 1: L hardware

Architettura dei calcolatori

Architettura del Calcolatore. Danilo Ardagna Politecnico di Milano

Informatica di Base - 6 c.f.u.

Modi di esecuzione user / kernel

Capitolo 13 Il sottosistema di ingresso/uscita

Architettura dei computer

Il calcolatore. È un sistema complesso costituito da un numero elevato di componenti. è strutturato in forma gerarchica

Struttura hw del computer

Corso di Alfabetizzazione Informatica 2001/2002. La CPU. F. Tortorella Università degli Studi. di Cassino

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

L ARCHITETTURA DEI CALCOLATORI. Il processore La memoria centrale La memoria di massa Le periferiche di I/O

CAP9. Device drivers

La memoria principale

Il sistema di Input/Output

Hardware, software e periferiche. Facoltà di Lettere e Filosofia anno accademico 2008/2009 secondo semestre

Organizzazione di un SO monolitico

Lezione 15. L elaboratore Elettronico

Architettura generale del calcolatore Hardware (tutto ciò che e tangibile) Software (tutto ciò che non e tangibile)

Università degli Studi di Cassino e del Lazio Meridionale

Architettura di un processore basato su registri generali.

Il sistema di I/O. Sistemi Operativi 13.1

Il sottosistema di I/O (Richiamo)

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione

Corso di Informatica

Architettura di un calcolatore e ciclo macchina. Appunti per la classe 3 Dinf

INFORMATICA GENERALE

Architettura hardware

Primi passi col linguaggio C

Lez. 4 L hardware. Prof. Pasquale De Michele Gruppo 2

static dynamic random access memory

Modulo: Elementi di Informatica

Linguaggio macchina. 3 tipi di istruzioni macchina. Istruzioni per trasferimento dati. Istruzioni logico/aritmetiche

Come funzionano i computer

Input/output. Sistemi Operativi Lez. 32. Corso: Sistemi Operativi Danilo Bruschi A.A. 2009/2010

Microelettronica Corso introduttivo di progettazione di sistemi embedded

Corso di Informatica

Il software: Istruzioni per il computer

CAPITOLO 17 PROBLEMI DEL PRODUTTORE/CONSUMATORE v1

ARCHITETTURA DI UN ELABORATORE

cpu CONTROLLORI DI I/O ADDRESS BUS CONTROL BUS DATA BUS D[0:7] dec CS# RD# WR# A0,..An RESET ...

ELETTRONICA II. Prof. Dante Del Corso - Politecnico di Torino

Elaborazione dell informazione

Informatica giuridica

Sistemi Operativi. Sottosistema di I/O

Introduzione al funzionamento di un calcolatore elettronico

CLASSIFICAZIONE DEI SISTEMI OPERATIVI (in ordine cronologico)

Esercizi svolti e da svolgere sugli argomenti trattati nella lezione 25

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Esercizi per il recupero del debito formativo:

Elettronica dei Sistemi Programmabili A.A Microcontrollori. Introduzione allo sviluppo di progetti

Capitolo 6 Le infrastrutture SoftWare

Macchine Astratte. Luca Abeni. February 22, 2017

Porte Input/Output (I/O Connectors)

Funzionamento dei sistemi di calcolo Struttura dell I/O Struttura della memoria Gerarchie delle memorie Architetture di protezione Strutture delle

Il software di sistema

Corso di Fondamenti di Informatica Linguaggi di Programmazione

Fondamenti di Informatica

Architettura di Von Neumann. Architettura di Von Neumann. Architettura di Von Neumann INFORMATICA PER LE DISCIPLINE UMANISTICHE 2 (13042)

CAPITOLO 22 PROBLEMA DEL PRODUTTORE/CONSUMATORE

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

Manualetto. Aggiornato al 31/07/2014

La CPU e la Memoria. Sistemi e Tecnologie Informatiche 1. Struttura del computer. Sistemi e Tecnologie Informatiche 2

Struttura Logica del S.O:

Istruzioni macchina. Dove sono gli operandi? Ciclo della CPU. Elementi di un istruzione macchina. Rappresentazione delle istruzioni

Il Sistema Operativo

Sistema operativo. Interazione con il SO

Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina ADD A,B ISTRUZIONE SUCCESSIVA

Transcript:

Calcolatori Elettronici T Input/Ouput 1

Il sottosistema di I/O Il sottosistema di I/O consente la comunicazione fra il calcolatore ed il mondo esterno. Fanno parte del sottosistema i dispositivi (Unità di I/O) per la comunicazione uomo/macchina (video, terminali, stampanti), quelli utilizzati per la memorizzazione permanente delle informazioni (unità a disco, nastri magnetici), la rete. Tutte le Unità di I/O sono collegate al bus di sistema mediante dispositivi detti Interfacce di I/O (o anche Periferiche, Controllori di I/O, Porte di I/O) UNITA DI I/O UNITA DI I/O MEMORIA PRINCIPALE CPU INTERFACCIA DI I/O INTERFACCIA DI I/O Bus dati Bus indirizzi Bus comandi 2

I/O BASE VCC IN GROUND VCC 220V µ P OUT 3

I/O solo 16 bit significativi I/O BASE Nel lucido successivo si ipotizza indirizzo 28h 8 0 8 8 BADRi 16 I/O!! ADi D E C O D IOWR* RESET* CE* IORD* CE = A5* A4!* A3 decodif. sempl. oe* read_io* 74XX244 IN VCC OUT D PR Q alla base del transistor Q* CL 74XX74 CE* T1 T2 T3 T4 IORD* IOWR* 4

Interfacce di I/O Bus comandi Bus indirizzi Bus dati D[0:7] CS* RD* WR* A[0:n-1] INTERFACCIA DI I/O (8 bit ) Segnali UNITA DI I/O Interfaccia standard verso il bus di sistema Interfaccia specifica (dipendente dal tipo di unità) verso l unità di I/O L interfaccia svolge una funzione di adattamento fra la modalità di trasferimento dei dati utilizzata all interno del sistema (cicli di bus) e quella utilizzata dall Unità di I/O. 5

Interfacce di I/O Buffer Dati Strettamente associata alla funzionalità di adattamento fra calcolatore ed unità di I/O è la presenza all interno dell interfaccia di registri di appoggio ( buffer ) utilizzati nei trasferimenti dei dati da CPU ad Unità di I/O e viceversa. Per inviare un dato all Unità di I/O la CPU effettua una scrittura del dato su un buffer dell interfaccia, da cui poi quest ultima si occupa di trasferire il dato all Unità di I/O. Per prelevare un dato dall Unità di I/O la CPU effettua una lettura da un buffer dell interfaccia, su cui quest ultima ha precedentemente appoggiato il dato proveniente dall Unità di I/O (può essere anche connessa via tri-state). Programmazione e Registri di Controllo Le interfacce di I/O devono poter funzionare secondo un certo insieme di modalità differenti (es.: un interfaccia per comunicazioni deve poter scambiare dati impiegando trame e frequenze differenti). Conseguentemente le interfacce di I/O sono tipicamente programmabili: sono presenti cioè al loro interno un certo numero di registri di controllo che vengono scritti dalla CPU all atto dell inizializzazione del dispositivo per impostare la modalità di funzionamento desiderata. 6

Struttura di una generica interfaccia di I/O Bus Bus dati indirizzi OE* BufferIn CK Bus comandi CK BufferOut OE* BD[0:7] Segnali D[0:7] OE* Status CK UNITA DI I/O CK Control OE* IORDC* IOWRC* RD* WR* INTERFACCIA DI I/O CSPER* BA0 BA1 CS* A0 A1 0 1 EN* DEC 2 3 A B (8 bit, CPU con bus dati ad 8 bit, 4 registri interni, I/O mapped) 7

Interfaccia delle periferiche Le periferiche hanno dei registri interni accessibili alla stessa stregua di come si accede alle celle di memoria. E necessario fare attenzione alla decodifica semplificata Esempio: due periferiche Per-1 e Per-2 ciascuna dotata di quattro registri interni A,B,C e D -> 4 indirizzi nello spazio di indirizzamento di I/O Decodifica semplificata CSPer-1 = A7 CSPer-2 = A6 errata!!!!! A7 = A7 (A6 + A6*) e quindi possibile sovrapposizione!!!!! Chi scrive il software potrebbe usare l indirizzo A7*A6 per la periferica 1 e in tal caso attiverebbe contemporaneamente anche la periferica 2!!!!!!!!! CSPer-1 = A7* CSPer-2 = A7 corretta!!!!! 8

Periferiche su bus a 16 bit Le periferiche a 8 bit possono risiedere sul bus basso o sul bus alto Se collegato al bus basso utilizzano solo indirizzi pari, se collegate sul bus alto utilizzano solo indirizzi dispari. Esempio: due periferiche distinte allocate rispettivamente agli indirizzi 78H (bus basso) e 81 (bus alto) contenti al loro interno 4 registri di lettura o scrittura, ciascuna con quattro registri A,B,C e D Per-2 Proc. 16 bit Per-1 D08-D15 D00-D07 Registri Per-1 Per-2 A B C D 78 7A 7C 7E 81 83 85 87 BLE* = A0 BHE* Ogni dispositivo occupa uno spazio di indirizzamento doppio del numero dei suoi indirizzi interni 9 Come nel caso delle memorie il CS deve essere condizionato da A0 e BHE*

Esempio Mem D08-D15 Proc. 16 bit 245-1 D00-D07 245-2 Mem Per E possibile collocare le periferiche su un bus a parte. In questo caso la periferica risponde a tutti gli indirizzi e i dati sono trasferiti alternativamente sul bus basso e su quello alto Registri Perif Bus EN-245 A B C D 78 79 7A 7B Basso Alto Basso Alto 245-2 245-1 245-2 245-1 Il segnale DIR dei 245 dipende ovviamente dal senso dell accesso indicato dal processore (DT/R* nel caso dell 8086) 10

Accesso ai registri interni dell interfaccia Hyp. (1) : CSPER = A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 = A7 Nel caso bus a 8 bit la CPU vede i 4 registri interni dell interfaccia agli indirizzi: BufferIn: 80H (128), BufferOut: 81H (129), Status: 82H (130), Control: 83H (131) Hyp. (2) : La configurazione binaria (Control Word) che è necessario scrivere nel registro di controllo per far si che l interfaccia funzioni nel modo desiderato è 11010100 (D4H). Un programmatore che deve scrivere un programma Assembler (IA16) che ha la necessità di accedere ai registri dell interfaccia utilizzerà (tipicamente) la direttiva EQU (definizione costanti in ASM 86) per definire degli identificatori associati alle costanti che rappresentano gli indirizzi dei registri e la Control Word: BufferIn EQU 80H BufferOut EQU 81H StatusRegister EQU 82H ControlRegister EQU 83H ControlWord EQU D4H 11

Accesso ai registri interni dell interfaccia Programmazione dell interfaccia Nella porzione di programma che si occupa di inizializzare tutte le periferiche programmabili presenti nel sistema il programmatore inserirà le seguenti istruzioni: MOV AL, ControlWord OUT ControlRegister, AL ; caricamento in AL della costante ControlWord ; trasferimento del contenuto di AL nel registro ; mappato all indirizzo ControlRegister dello ; spazio di I/O Lettura dello stato Ogni qual volta il programma ha la necessità di leggere lo stato della periferica (ad esempio per controllare se si sono verificati degli errori oppure, come vedremo meglio in seguito, per sincronizzare il programma con l Unità di I/O connessa al sistema tramite l interfaccia) il programmatore inserirà la seguente istruzione: IN AL, StatusRegister ; caricamento in AL del contenuto del registro ; mappato all indirizzo StatusRegister ; dello spazio di I/O 12

Accesso ai registri interni dell interfaccia Trasferimento di dati (Input) Supponiamo che il programma debba ricevere una sequenza di dati dall Unità di I/O e memorizzarli nel vettore DatiIn (Operazione di Input). Supponiamo inoltre che il programma sia opportunamente sincronizzato con l Unità di I/O (il programma va a leggere un dato dall interfaccia quando questo è stato effettivamente reso disponibile in BufferIn dall Unità di I/O). In queste ipotesi il programmatore inserirà le seguenti istruzioni al fine di prelevare l i-esimo dato della sequenza: IN AL, BufferIn MOV DatiIn[SI], AL INC SI ; trasferimento in AL del contenuto del registro ; mappato all indirizzo BufferIn dello spazio di I/O ; trasferimento del contenuto di AL nella cella di ; indice SI del vettore DatiIn. Se il programma sta ; prelevando l i-esimo dato SI, che è stato ; opportunamente inizializzato, contiene il valore i-1 ; incremento dell indice del vettore, che così punta ; alla cella di memoria in cui deve essere inserito ; il prossimo dato prelevato dall interfaccia 13

Accesso ai registri interni dell interfaccia Trasferimento di dati (Output) Supponiamo che il programma debba inviare una sequenza di dati memorizzati nel vettore DatiOut all Unità di I/O (Operazione di Output). Supponiamo inoltre che il rogramma sia opportunamente sincronizzato con l Unità di I/O (il programma va a scrivere un dato sul registro BufferOut dall interfaccia quando questo registro è vuoto, cioè quando l Unità di I/O ha ricevuto il dato inviato precedentemente). In queste ipotesi il programmatore inserirà le seguenti istruzioni al fine di inviare l i- esimo dato della sequenza: MOV AL, DatiOut[SI] OUT BufferOut, AL INC SI ; trasferimento in AL del contenuto della cella ; di indice SI del vettore DatiOut. Se il programma ; sta inviando l i-esimo dato SI, che è stato ; opportunamente inizializzato, contiene il valore i-1 ; trasferimento del contenuto di AL nel registro ; mappato all indirizzo BufferOut dello spazio di I/O. ; incremento dell indice del vettore, che così punta ; alla cella di memoria da cui deve essere prelevato ; il prossimo dato da inviare all interfaccia 14

Le modalità di gestione dell I/O Affrontiamo ora in modo più approfondito la problematica della sincronizzazione fra CPU (programma in esecuzione sulla CPU) ed Unità di I/O. Come già osservato, la funzionalità di sincronizzazione è a carico dell interfaccia di I/O. CPU Operazione di Input B u f f e r I n Interfaccia Unità I/O L interfaccia deve comunicare alla CPU che l Unità di I/O ha reso disponibile un nuovo dato su BufferIn (condizione di BufferIn Full ) CPU Operazione di Output B u f f e r O u t Interfaccia Unità I/O L interfaccia deve comunicare alla CPU che l Unità di I/O ha prelevato da BufferOut il dato precedentemente inviato dalla CPU e quindi la CPU può inviare un nuovo dato (condizione di BufferOut Empty ). Le interfacce possono comunicare alla CPU le informazioni di sincronizzazione in due modi diversi, cui corrispondono due differenti modalità di gestione dell I/O dette 15 Gestione a Polling (Controllo di Programma) e Gestione ad Interrupt (Interruzione).

Gestione a Polling Memoria BOE: BufferOut Empty BIF: BufferIn Full DatiOut Interfaccia Status BOE BIF BufferIn BufferOut CPU DatiIn L interfaccia rende disponibili le informazioni di sincronizzazione su 2 bit del registro di stato. La CPU, ogni qual volta deve eseguire un trasferimento, vaprima a leggere il registro di stato (BIF oppure BOE) per verificare se l interfaccia è pronta per il trasferimento. Se l interfaccia è pronta la CPU esegue il trasferimento, viceversa legge in continuazione il registro di stato fino a che questo non segnala che l interfaccia è pronta, quindi esegue il trasferimento. 16

Flusso di un programma che esegue una Operazione di Input a Polling. (1) (2) (3) Inizializzazione Operazione di I/O Lettura Registro Status BIF=1 No Codifica in Assembler Si (1) MOV SI, 0 (2) WaitDato: IN AL, Status (4) Lettura Registro BufferIn (3) TEST AL, 1 JZ WaitDato (4) IN AL, BufferIn (5) MOV DatiIn[SI], AL INC SI (6) CMP SI, N JNE WaitDato (5) (6) Scrittura Vettore DatiIn e incremento indice Fine Operazione di I/O Si No 17

Considerazioni sulla Gestione a Polling Nella Gestione a Polling la CPU è costantemente impegnata ad osservare lo stato della periferica al fine di eseguire un trasferimento non appena quest ultima risulta pronta. Conseguentemente, la CPU non può svolgere nessuna altra attività durante gli intervalli di tempo che intercorrono fra due situazioni successive di interfaccia pronta (tempo necessario al trasferimento del dato fra interfaccia e Unità di I/O). Poiché le Unità di I/O sono tipicamente molto più lente della CPU, ciò implica una scarsa efficenza nell impiego delle CPU. La Gestione ad Interrupt, che vedremo successivamente, ha proprio l obiettivo di impiegare la CPU in modo più efficiente, consentendogli di eseguire delle istruzioni utili negli intervalli di tempo che intercorrono fra due situazioni successive di interfaccia pronta. Tuttavia, la Gestione a Polling è molto più semplice di quella ad Interrupt. Inoltre, quest ultima presenta dei vantaggi reali solo quando è possibile strutturare il software in maniera tale che esistano delle attività utili che possono essere svolte simultaneamente all Operazione di I/O. 18

Gestione ad Interrupt Memoria Interfaccia Priority/Enable INTR DatiOut INT BOE BIF BufferIn BufferOut CPU DatiIn Quando l interfaccia è pronta ad eseguire un nuovo trasferimento invia alla CPU una richiesta di servizio (detta Interrupt) mediante un apposito segnale (INTR, che per ora possiamo considerare connesso all ingresso INT della CPU). All atto della ricezione della richiesta di servizio la CPU interrompe il programma in esecuzione e trasferisce il controllo (secondo un meccanismo che studieremo successivamente) ad una apposita procedura di servizio (detta Interrupt Handler) che si occupa di effettuare il trasferimento del dato. Una volta effettuato il trasferimento la procedura di servizio restituisce il controllo al programma che era in esecuzione all atto della ricezione dell Interrupt. Nella Gestione ad Interrupt la CPU può eseguire qualsiasi attività durante gli intervalli di tempo che intercorrono fra due situazioni successive di interfaccia pronta (cioè fra due interrupt). 19

Flusso di un programma che esegue una Operazione di Input ad Interrupt Main Program (2) Interrupt Handler Prologo della Procedura (1) Inizializzazione Operazione di I/O (3) Lettura Registro BufferIn INT Attività Utile (4) Scrittura Vettore DatiIn e incremento indice (8) Fine Operazione di I/O Si No (5) (7) Ultimo Dato No Epilogo della Procedura Si Segnalazione Fine Op. di I/O (6) 20

Codifica in Assembler INT Main Program (1) MOV Index, 0 MOV FineOp,0 Attività Utile 8) WaitFineOp: CMP FineOp, 1 JNE WaitFineOp Interrupt Handler (2) PUSH AX PUSH SI MOV SI, Index (3) IN AL, BufferIn (4) MOV DatiIn[SI], AL INC SI MOV Index, SI (5) CMP SI, N JNE Epilogue (6) MOV FineOp, 1 (7)Epilogue: POP SI POP AX IRET 21

Considerazioni sulla Gestione a Interrupt La Gestione ad Interrupt consente un utilizzo efficiente della CPU: la CPU può essere impegnata in altre attività durante i tempi morti che intercorrono fra gli istanti in cui l interfaccia è pronta ad eseguire un nuovo trasferimento. E opportuno sottolineare che se l Operazione di I/O richiede il trasferimento di N gruppi di dati l interfaccia genererà N richieste di servizio (cioè N Interrupt) e conseguentemente l Interrupt Handler verrà eseguito N volte. Ad ogni esecuzione l Interrupt Handler trasferisce un solo gruppo (che può corrispondere, ovviamente, a un solo dato) Poiché i trasferimenti sono eseguiti dall Interrupt Handler, è necessario prevedere un meccanismo di sincronizzazione fra quest ultimo ed il Main Program. Nell esempio mostrato la sincronizzazione è effettuata tramite la variabile FineOp, azzerata dal Main Program nella fase di inizializzazione e messa a 1 dall Interrupt Handler quando ha completato l Operazione di I/O. La Gestione ad Interrupt è particolarmente adatta ai Sistemi Multitasking: un task (programma), dopo aver lanciato l Operazione di I/O viene sospeso dal Sistema Operativo e la CPU viene assegnata ad un altro task. Il task sospeso viene poi rimesso in esecuzione quando l Operazione di I/O è stata completata dall Interrupt Handler (che fa parte del kernel del Sistema Operativo). 22