Interfacciamento Processore dispositivi di IO 1 Gestione delle

  • Slides: 85
Download presentation
Interfacciamento Processore – dispositivi di I/O 1

Interfacciamento Processore – dispositivi di I/O 1

Gestione delle operazioni di I/O Caratteristiche dei dispositivi di Ingresso/Uscita Tipo Dischi Magnetici Nastri

Gestione delle operazioni di I/O Caratteristiche dei dispositivi di Ingresso/Uscita Tipo Dischi Magnetici Nastri Magnetici Stampante Seriale Stampante Parallela Terminali CRT Convertitori analogico-digitali USB 1. 0 USB 2. 0 Codice Byte Byte Parola 8 -16 bit Byte Velocità di scambio Fino a 300 Mcar/sec Fino a 30 Mcar/sec 200 – 1200 car/sec 1 K – 100 K car/sec 300 – 19, 2 K car/sec 10 -10 M parole/sec 1, 5 Mcar/sec 60 Mcar/sec 2

Evoluzione delle prestazioni del sottosistema di I/O • Incremento prestazioni CPU: 60% ogni anno

Evoluzione delle prestazioni del sottosistema di I/O • Incremento prestazioni CPU: 60% ogni anno • Le prestazioni dei sistemi di I/O system sono tipicamente (dischi, stampanti etc. . ) limitate da ritardi meccanici Incremento prestazioni < 10% ogni anno • Legge di Amdahl: - S è lo speed-up effettivo - f è la frazione di lavoro non dipendente dall’I/O - K è lo speed-up della modalità “veloce” • Lo speed-up di un sistema è limitato dal componente più lento: p. e. 10% x I/O & 90% x CPU (f=0, 9) se K=10 => S prossimo a 5 se K=1000 => S prossimo a 10 Il sottosistema di I/O rappresenta un collo di bottiglia 3

Possibili connessione tra CPU e dispositivi di Ingresso/Uscita Architettura a due bus: bus di

Possibili connessione tra CPU e dispositivi di Ingresso/Uscita Architettura a due bus: bus di memoria distinto dal bus di I/O MEM. DATA BUS MEM. ADDRESS BUS MEM. CONTROL BUS M 1 … Mk CPU I/O DATA BUS I/O ADDRESS BUS I/O CONTROL BUS I/O 1 … I/Oh 4

Possibili connessione tra CPU e dispositivi di Ingresso/Uscita Architettura ad un solo bus (I/O

Possibili connessione tra CPU e dispositivi di Ingresso/Uscita Architettura ad un solo bus (I/O memory mapped) DATA BUS ADDRESS BUS CPU CONTROL BUS M 1 … Mk I/O 1 … I/Ok 5

Architettura ad un solo bus (I/O memory mapped) Spazio di indirizzamento Suddivisione per la

Architettura ad un solo bus (I/O memory mapped) Spazio di indirizzamento Suddivisione per la memoria e per i dispositivi di ingresso/uscita

Tipi di interazione tra CPU e dispositivi esterni - previste dai programmi eseguiti nella

Tipi di interazione tra CPU e dispositivi esterni - previste dai programmi eseguiti nella CPU (I/O programmato) - su richiesta esterna - gestite da processori dedicati (canali) Esempi quotidiani di interazione I/O programmato: • controllo della cottura della pasta • ricevimento studenti su richiesta esterna: • ricezione di una telefonata • ricezione di una lettera gestite da processori dedicati: • gestione delle comunicazioni tramite un servizio di segreteria (persona dedicata) 7

Tipi di interazione tra CPU e dispositivi esterni che studieremo q Previste dai programmi

Tipi di interazione tra CPU e dispositivi esterni che studieremo q Previste dai programmi che vengono eseguiti nella CPU (I/O programmato): - modalità busy waiting, implementata: i. a firmware ii. a software - modalità polling q q Su richiesta esterna: - interruzione Gestite da processori dedicati (canali) - Direct Memory Access Controller (DMAC) 8

“Richiamo” INTERFACCIA Sistemi Digitali Complessi (per supportare protocollo di handshaking) Initial values: RDY 1=0,

“Richiamo” INTERFACCIA Sistemi Digitali Complessi (per supportare protocollo di handshaking) Initial values: RDY 1=0, ACK 1=0 UTx URx WRITE, RDY 1=1 ACK 2=0 Wait ACK 1=1 Wait RDY 2=1 RDY 1=0 READ, ACK 2=1 Wait ACK 1=0 Wait RDY 2=0 9

Cosa succederebbe se si rimuovessero le “wait”? UTx Sovrascrivo prima che la lettura sia

Cosa succederebbe se si rimuovessero le “wait”? UTx Sovrascrivo prima che la lettura sia avvenuta… URx WRITE, RDY 1=1 ACK 2=0 Wait ACK 1=1 Wait RDY 2=1 RDY 1=0 READ, ACK 2=1 Wait ACK 1=0 Wait RDY 2=0 10

Cosa succederebbe se si rimuovessero le wait? UTx Al ciclo successivo dopo aver scritto

Cosa succederebbe se si rimuovessero le wait? UTx Al ciclo successivo dopo aver scritto potrei trovare ACK=1 dal ciclo precedente, senza che la lettura del nuovo valore sia avvenuta: SOVRASCRIVO! URx WRITE, RDY 1=1 ACK 2=0 Wait ACK 1=1 Wait RDY 2=1 RDY 1=0 READ, ACK 2=1 Wait ACK 1=0 Wait RDY 2=0 11

Che succederebbe se si rimuovessero le wait? UTx URx WRITE, RDY 1=1 ACK 2=0

Che succederebbe se si rimuovessero le wait? UTx URx WRITE, RDY 1=1 ACK 2=0 Wait ACK 1=1 Wait RDY 2=1 RDY 1=0 READ, ACK 2=1 Wait ACK 1=0 Wait RDY 2=0 Potrei leggere prima che la scrittura sia avvenuta! 12

Che succederebbe se si rimuovessero le wait? UTx URx WRITE, RDY 1=1 ACK 2=0

Che succederebbe se si rimuovessero le wait? UTx URx WRITE, RDY 1=1 ACK 2=0 Wait ACK 1=1 Wait RDY 2=1 RDY 1=0 READ, ACK 2=1 Wait ACK 1=0 Wait RDY 2=0 Potrei leggere 2 volte lo stesso valore! 13

Protocollo di Hand. Shaking (scambio di N dati) Utx URx 1: dato RTx, 1

Protocollo di Hand. Shaking (scambio di N dati) Utx URx 1: dato RTx, 1 FF 1; 1: 0 FF 4; 2: if ack 1=0, then vai a 2; 2: if RDY 2=0, then vai a 2; 3: 0 FF 1; 3: RTx RRx, 1 FF 4; 4: if ack 1=1, then vai a 4; 4: if RDY 2=1, vai a 4 ; 5: i+1 i; 6: if i N, vai a 1 14

Sequenze di microistruzioni eseguite da UTx e URx durante il protocollo di comunicazione (scambio

Sequenze di microistruzioni eseguite da UTx e URx durante il protocollo di comunicazione (scambio di N dati) 1 dato 1 1 RTx FF 1 ACK 1=1 NO NO SI 0 2 FF 1 ACK 1=0 NO RTx 1 RRx FF 4 NO RDY 2=0 SI SI 3 FF 4 RDY 2=1 SI 2 0 i+1 i=N SI i 3 NO i+1 i=N i NO SI 15

“Altra” INTERFACCIA di Sistemi Digitali Complessi (per supportare protocollo di handshaking) 16

“Altra” INTERFACCIA di Sistemi Digitali Complessi (per supportare protocollo di handshaking) 16

Sequenze di microistruzioni eseguite da UTx e URx durante il protocollo di comunicazione 1

Sequenze di microistruzioni eseguite da UTx e URx durante il protocollo di comunicazione 1 dato 1 Attesa sul sem RTx Set sem NO RDY 2=1 SI 2 Attesa sul sem ACK 1=0 2 RTx RRx Reset sem NO SI 3 i+1 i=N SI i 3 NO i+1 i=N i NO SI 17

I/O programmato INTERFACCIA DISPOSITIVI di I/O (per supportare protocollo di handshaking, implementato a firmware)

I/O programmato INTERFACCIA DISPOSITIVI di I/O (per supportare protocollo di handshaking, implementato a firmware) Schema di Interfaccia per l’input tra PD 32 e un solo Sistema Digitale Complesso CPU DEV R 32 bit I/O DR SCA E G LD I/O DR I/O RD SCO WAIT R S STATUS Q Q SCO 18

Temporizzazione dei segnali T 1 T 2 TW TW T 3 I/ORD T 2

Temporizzazione dei segnali T 1 T 2 TW TW T 3 I/ORD T 2 WAIT DATO T 1 WAIT TW WAIT dato LD I/ODR 19 T 3

I/O programmato INTERFACCIA DISPOSITIVI DI I/O (per supportare protocollo di handshaking, implementato a firmware)

I/O programmato INTERFACCIA DISPOSITIVI DI I/O (per supportare protocollo di handshaking, implementato a firmware) Schema di Interfaccia per l’output tra PD 32 e un solo Sistema Digitale Complesso I/O AR I/O R 32 bit DR SCA E G LD I/O WR SCO WAIT R S STATUS Q Q SCO 20

Temporizzazione dei segnali T 1 TW TW T 3 T 2 T 1 I/OWR

Temporizzazione dei segnali T 1 TW TW T 3 T 2 T 1 I/OWR WAIT 0 1 T 2 WAIT TW WAIT DATO 21 T 3

I/O programmato INTERFACCIA DISPOSITIVI DI I/O (per supportare protocollo di handshaking, implementato a firmware)

I/O programmato INTERFACCIA DISPOSITIVI DI I/O (per supportare protocollo di handshaking, implementato a firmware) Schema di Interfaccia per l’output tra PD 32 e più DISPOSITIVI di I/O AB I/O DB I/O CB PD 32 WAIT I/O WR R Q LD REG SELECT SCA O. C. STATUS S SCO 22

Temporizzazione dei segnali nel caso di più dispositivi di I/O T 1 I/OAB I/OWR

Temporizzazione dei segnali nel caso di più dispositivi di I/O T 1 I/OAB I/OWR I/ODB T 2 TW TW T 3 ind. device 0 T 1 T 2 1 WAIT TW WAIT dato WAIT 23 T 3

I/O programmato INTERFACCIA DISPOSITIVI DI I/O (per supportare protocollo di handshaking, implementato a firmware)

I/O programmato INTERFACCIA DISPOSITIVI DI I/O (per supportare protocollo di handshaking, implementato a firmware) Schema di Interfaccia per l’input tra PD 32 e più DISPOSITIVI di I/O PD 32 LD I/O DR I/O AB I/O DB I/O CB I/O DR WAIT I/O RD R Q O. C. STATUS S SELECT REG SCA LD SCO 24

I/O programmato INTERFACCIA DISPOSITIVI DI I/O (per supportare protocollo di handshaking, implementato a firmware)

I/O programmato INTERFACCIA DISPOSITIVI DI I/O (per supportare protocollo di handshaking, implementato a firmware) Schema di Interfaccia per l’input tra PD 32 e più DISPOSITIVI di I/O T 1 I/OAB I/ORD I/ODB T 2 TW TW T 3 T 1 ind. device 0 1 dato WAIT 25

Porte Logiche Open Collector e Connessione Wired-OR 26

Porte Logiche Open Collector e Connessione Wired-OR 26

Porte Logiche: Totem Pole vs Open Collector • E’ possibile distinguere due tipologie di

Porte Logiche: Totem Pole vs Open Collector • E’ possibile distinguere due tipologie di porte logiche in funzione dello schema circuitale che le implementa: – Totem Pole: Curiosità: Perché “Totem Pole”? • In caso di uscita logica “alta”, un transistore di pull-up attivo che forza un livello di tensione alto sul pin d’uscita. • In caso di uscita logica “bassa”, un transistore di pull-down che forza un livello di tensione basso sul pin d’uscita. – Open Collector: • In caso di uscita logica “alta”, l’uscita della porta va in alta impedenza, disconnettendosi dal circuito. • In caso di uscita logica “bassa”, la tensione sul pin d’uscita vale 0 (il pin d’uscita è messo a massa) 27

Porte Logiche Open Collector • Poiché in configurazione open-collector le porte non possono generare

Porte Logiche Open Collector • Poiché in configurazione open-collector le porte non possono generare autonomamente lo stato logico alto, occorre utilizzare un generatore di tensione ed una resistenza di pull-up: Uscita =1 Uscita =0 Vcc Vcc Vout=Vcc O. C. Vout=0 O. C. 28

WIRED OR / WIRED AND Connettendo su una stessa linea più porte open collector

WIRED OR / WIRED AND Connettendo su una stessa linea più porte open collector otteniamo le cosiddette connessioni WIRED OR, ovvero WIRED AND a seconda che si lavori in logica positiva o negativa: LOGICA POSITIVA LOGICA NEGATIVA 1) Se solo una porta ha l’uscita bassa (FALSE), la linea va a massa e l’uscita è bassa (FALSE). 2) Per ottenere un’uscita alta (TRUE), tutte le porte devono avere uscita alta (TRUE). AND DELL’USCITA DELLE SINGOLE PORTE Vcc Vcc TRUE 1) Se solo una porta ha l’uscita bassa (TRUE), la linea va a massa e l’uscita è bassa (TRUE). 2) Per ottenere un’uscita alta (FALSE), tutte le porte devono avere uscita alta(FALSE). OR DELL’USCITA SINGOLE PORTE FALSE Vout=Vcc TRUE Vout=Vcc Vout=0 1 1 1 O. C. 0 29 O. C.

Connessione di più porte logiche su una stessa linea (BUS) • PROBLEMA: Non è

Connessione di più porte logiche su una stessa linea (BUS) • PROBLEMA: Non è possibile connettere più porte logiche Totem Pole su una stessa linea onde evitare conflitti dovuti alla presenza di stati logici diversi su porte logiche diverse. • Soluzioni: – Utilizzare buffer three states oppurtanamente pilotati per garantire che solo una porta logica sia effettivamente connessa al bus in ogni istante. – Utilizzare una connessione wired-or per “porta logica” (quella che utilizzeremo nel futuro) 30

Esempio: Connessione, in wired OR, di più interfacce alla linea “not WAIT” A) Se

Esempio: Connessione, in wired OR, di più interfacce alla linea “not WAIT” A) Se nessuna interfaccia ha attivo il segnale di select, tutti i NAND O. C. vanno in alta impedenza e WAIT = 1 (false). Vcc B) Poiché solo una interfaccia può avere il segnale di select attivo: 1) Solo tale interfaccia può avere il segnale WAIT=0 (se STATUS=1); WAIT O. C. CPU WAIT O. C. 2) Tutte le altre interfacce avranno WAIT =1, ovvero in alta impedenza. Questo ci consente di evitare conflitti! STATUS select Modulo interfaccia i+1 31

ISTRUZIONE DI OUTPUT OUTs Rx, Device (sposta nel registro di interfaccia del dispositivo di

ISTRUZIONE DI OUTPUT OUTs Rx, Device (sposta nel registro di interfaccia del dispositivo di indirizzo Device uno o due o quattro bytes memorizzati nel registro Rx, naturalmente il numero di bytes da spostare dipende dal valore di “s”) ISTRUZIONE DI INPUT INs Device, Rx (sposta nel registro Rx uno o due o quattro bytes memorizzati nel registro di interfaccia del dispositivo di indirizzo Device, naturalmente il numero di bytes da spostare dipende dal valore di “s”) 32

I/O programmato PROTOCOLLO DI HANDSHAKING, IMPLEMENTATO A FIRMWARE Aspetto negativo: l’attesa della produzione o

I/O programmato PROTOCOLLO DI HANDSHAKING, IMPLEMENTATO A FIRMWARE Aspetto negativo: l’attesa della produzione o del consumo del dato da parte della periferica può bloccare per lunghi periodi la CPU Per esempio se CK del processore 1 nsec. (10 -9 sec. ) e velocità di produzione/consumo dei dati della periferica è 1 msec (10 -3 sec. ) allora il processore, per ogni interazione, “passa” nello stato di WAIT per un numero di volte dell’ordine di 106. 33

il I/O programmato INTERFACCIA DISPOSITIVI DI I/O (PER SUPPORTARE PROTOCOLLO DI HANDSHAKING, IMPLEMENTATO A

il I/O programmato INTERFACCIA DISPOSITIVI DI I/O (PER SUPPORTARE PROTOCOLLO DI HANDSHAKING, IMPLEMENTATO A SOFTWARE) Necessità di istruzioni atte alla emulazione del test sulla variabile di condizione WAIT (negata) – uso di una nuova variabile di condizione “READY” - e di una istruzione per avvertire SCO del dispositivo di I/O che il processore intende colloquiare con la periferica. JR id-dev, address (se READY = 0 della periferica (id-dev) allora salta all’esecuzione dell’istruzione il cui indirizzo di memoria è “address”) JNR id-dev, address (se READY = 1 della periferica (id-dev) allora salta all’esecuzione dell’istruzione il cui indirizzo di memoria è “address”) START 1 id-dev asserendo ad – (avverti “id-dev” che ci sarà un’interazione) Notare che per eliminare gli effetti della variabile di condizione WAIT è sufficiente mettere a massa (a zero) il collegamento (pin) del processore relativo a tale variabile. Notare che in questo caso durante l’esecuzione di una istruzione di IN o di OUT il processore passa una volta solo nello stato WAIT (vedere lucidi precedenti). 34

I/O programmato – INTERFACCIA di INPUT PROTOCOLLO DI HANDSHAKING IMPLEMENTATO A SOFTWARE I/O AB

I/O programmato – INTERFACCIA di INPUT PROTOCOLLO DI HANDSHAKING IMPLEMENTATO A SOFTWARE I/O AB I/O DB I/O CB PD 32 WAIT I/O RD START READY “ 0” STARTD SELECT REG SCA O. C. R Q STATUS S Q COMPLETE STARTDEV SCO 35

Connesione, in wired OR, di più interfacce alla linea “not READY” Vcc READY O.

Connesione, in wired OR, di più interfacce alla linea “not READY” Vcc READY O. C. STATUS Modulo interfaccia i CPU READY O. C. STATUS Modulo interfaccia i+1 36

Protocollo di Input 1. Il processore invia sull’I/O Address bus l’indirizzo del dispositivo e

Protocollo di Input 1. Il processore invia sull’I/O Address bus l’indirizzo del dispositivo e ne esamina lo stato tramite la linea di controllo READY. 2. Se il dispositivo non è pronto ( READY = 1 ) il processore deve attendere e tornare al punto 1 o saltare ad un’altra istruzione. READY = 0 il processore avverte il dispositivo che vuole un dato da 3. Se lui (seleziona il dispositivo tramite le linee indirizzi e invia il segnale START). START resetta il flip-flop STATUS e in tale stato rimane per tutta la durata delle operazioni di produzione del dato da parte del dispositivo. 4. Quando il dato è stato prodotto ed è disponibile in REG, il dispositivo genera il segnale COMPLETE, settando STATUS (READY=0). 5. Nel frattempo il processore, in attesa del dato, esamina lo stato del F/F campionando il segnale READY. 6. Se READY= 1 il processore deve attendere e tornare al punto 5. 7. Se READY= 0 il processore esegue una istruzione id INPUT (seleziona il dispositivo ed invia il segnale di controllo IO RD per trasferire il dato presente in REG all’interno di uno dei registri del processore). 37

Programma assembler (input) (Aspetta 1: JNR Device. IN, Aspetta 1) START Device. IN Aspetta

Programma assembler (input) (Aspetta 1: JNR Device. IN, Aspetta 1) START Device. IN Aspetta 2: JNR Device. IN, Aspetta 2 INB Device. IN, R 0 38

I/O programmato- INTERFACCIA di OUTPUT PROTOCOLLO DI HANDSHAKING IMPLEMENTATO A SOFTWARE I/O AB I/O

I/O programmato- INTERFACCIA di OUTPUT PROTOCOLLO DI HANDSHAKING IMPLEMENTATO A SOFTWARE I/O AB I/O DB I/O CB PD 32 I/O WR START READY STARTD DEC SELECT REG SCA O. C. R Q STATUS S Q COMPLETE STARTDED SCO 39

Protocollo di Output 1. Il processore invia sull’I/O Address bus l’indirizzo del dispositivo e

Protocollo di Output 1. Il processore invia sull’I/O Address bus l’indirizzo del dispositivo e ne esamina lo stato tramite la linea di controllo READY. 2. Se il dispositivo non è pronto ( READY = 1 ) il processore deve attendere e tornare al punto 1 o saltare ad un’altra istruzione. 3. Se READY=0 il processore esegue una istruzione di OUTPUT e trasferisce il contenuto di un registro nel registro di interfaccia del dispositivo (mediante il segnale di controllo I/OWR). 4. Il processore avverte il dispositivo che gli ha trasferito un dato (seleziona il dispositivo tramite le linee indirizzi e invia il segnale START). START resetta il flip-flop STATUS e in tale stato rimane per tutta la durata delle operazioni di consumo del dato da parte del dispositivo. Quando il dato è stato letto da REG, il dispositivo genera il segnale COMPLETE, settando STATUS (READY=0). 5. Nel frattempo il processore, in attesa, esamina lo stato del F/F campionando il segnale READY. 6. Se READY= 1 il processore deve attendere e tornare al punto 5. 7. Se READY= 0 il processore può eseguire un’altra istruzione. 40

Programma assembler (output) (Aspetta 1: JNR Device. OUT, Aspetta 1) OUTL R 0, Device.

Programma assembler (output) (Aspetta 1: JNR Device. OUT, Aspetta 1) OUTL R 0, Device. OUT START Device. OUT Aspetta 2: JNR Device. OUT, Aspetta 2 41

I/O programmato MODALITA’ BUSY WAITING acquisizione di 100 dati e loro memorizzazione in memoria

I/O programmato MODALITA’ BUSY WAITING acquisizione di 100 dati e loro memorizzazione in memoria … MOVL #100, AD 1_C MOVL #4000, AD 1_P ; valore iniziale del contatore (AD 1_C, indirizzo di memoria dove è memorizzato il numero di dati da trasferire) ; valore iniziale del puntatore (AD 1_P, indirizzo di memoria che memorizzerà gli indirizzi di memoria dove allocare i dati letti, il primo dato verrà allocato nell’inidirizzo 4000) JSR. . . IN_AD 1 42

IN_AD 1: PUSH R 0 ; salv. registri usati dalla subroutine PUSH R 1

IN_AD 1: PUSH R 0 ; salv. registri usati dalla subroutine PUSH R 1 PUSH R 2 MOVL AD 1_C, R 0 ; R 0 ora è un contatore MOVL AD 1_P, R 1 ; R 1 ora è il puntatore alla locazione di memoria dove allocare i dati letti (IN_1: JNR AD 1, IN_1 ; attende che AD 1 sia pronto) IN_2: START AD 1 ; avvia l’acquisizione di un dato IN_3: JNR AD 1, IN_3 ; attende che il dato sia stato prodotto INW AD 1, R 2 ; prelievo del dato dalla perifierica e…. MOVW R 2, (R 1)+ ; … suo trasferimento in memoria ed postincremento di R 1 SUBL #1, R 0 ; decremento del contatore JNZ IN_2 ; acquisizione di un altro dato se non si è azzerato ; il contatore POP R 2 ; ripristino dei registri usati POP R 1 ; POP R 0 ; RET ; ritorno al programma chiamante

Polling (verifica circolare se ogni DEVICE è pronto ad interagire) I/O AB I/O DB

Polling (verifica circolare se ogni DEVICE è pronto ad interagire) I/O AB I/O DB I/O CB PD 32 DEV 1 DEV 2 DEV 3 DEV 4 44

Polling (acquisizone di 100 dati dalla prima periferica pronta) … MOVL #100, AD_C MOVL

Polling (acquisizone di 100 dati dalla prima periferica pronta) … MOVL #100, AD_C MOVL #3000, AD_P ; valore iniziale del contatore (AD_C, indirizzo di memoria dove è memorizzato il numero di dati da trasferire) ; valore iniziale del puntatore (AD_P, indirizzo di memoria che memorizzerà gli indirizzi di memoria dove allocare i dati letti, il primo dato verrà allocato nell’inidirizzo 3000) JSR. . . IN_AD_POLL 45

… IN_AD_POL: PUSH R 0 ; salv. registri usati PUSH R 1 PUSH R

… IN_AD_POL: PUSH R 0 ; salv. registri usati PUSH R 1 PUSH R 2 MOVL AD_C, R 0 MOVL AD_P, R 1 ; R 0 ora è un contatore ; R 1 ora è il puntatore alla locazione di memoria dove allocare i dati letti POLL: JR AD 1, IN_1 JR AD 2, IN_2 JR AD 3, IN_3 JR AD 4, IN_4 JMP POLL ; attende che AD 1 sia pronto IN_i: WAIT: START ADi JNR ADi, WAIT INW ADi, R 2 MOVW R 2, (R 1)+ SUBL #1, R 0 JNZ IN_i ; avvia l’acquisizione di un dato ; attende che il dato sia stato prodotto ; prelievo del dato e…. ; … suo trasferimento in memoria e postincremento di R 1 ; decremento del contatore ; acquisizione di un altro dato se non si è azzerato ; il contatore ; ripristino dei registri usati ; ; ; ritorno al programma chiamante POP R 2 POP R 1 POP R 0 RET

I/O programmato - SVANTAGGI – Uso non efficiente del processore (perdita di tempo per

I/O programmato - SVANTAGGI – Uso non efficiente del processore (perdita di tempo per verificare se la periferica è pronta o meno ad interagire); q Rischio di non soddisfare esigenze di urgenza (real-time) (p. e. nel polling vengono visitate le periferiche in modo ciclico e quindi non si possono gestire eventi all’atto del loro verificarsi, quali caduta della tensione) q Necessità di interazione basata sulla richiesta dei dispositivi esterni (INTERRUZIONI) 47

INTERRUZIONE Similitudine con la ricezione di una telefonata: Normale interazione: - squillo; - prelievo

INTERRUZIONE Similitudine con la ricezione di una telefonata: Normale interazione: - squillo; - prelievo cornetta; - "pronto"; - il chiamante si identifica - inizio del colloquio Polling: - squillo; - prelievo cornetta - richiesta di identificazione: "sei Giovanni? " - se affermativo inizio colloquio con Giovanni - se no, nuova richiesta di identificazione: "sei Franco? “ - se affermativo inizio colloquio con Franco - se no, nuova richiesta………. - …… Naturalmente al momento della ricezione della telefonata si stava facendo qualcosa di altro (p. e. doccia), che dovrà essere continuato dopo che si è terminata la telefonata. Inoltre il chiamante ci può "interrompere" solo se lo desideriamo, per esempio spengo il 48 telefonino del lavoro quando sono a casa.

Fasi per la gestione dell'interruzione (obiettivo: soddisfare la richiesta senza “interferire” con le attività

Fasi per la gestione dell'interruzione (obiettivo: soddisfare la richiesta senza “interferire” con le attività collegate al processo in esecuzione) a) salvare lo stato del processo in esecuzione; b) identificare all'interruzione; il programma di servizio relativo c) eseguire il programma di servizio; d) riprendere le attività lasciate in sospeso. 49

Tecniche di identificazione del programma di servizio relativo all’interruzione (identificazione della sorgente dell’interruzione) Tecniche

Tecniche di identificazione del programma di servizio relativo all’interruzione (identificazione della sorgente dell’interruzione) Tecniche di identificazione: · Polling a multilivello · Vettorizzata (scelta per il PD 32) · Vettorizzata a multilivello 50

Polling I E ON R Z RU TE N I istr. N+1 Programma in

Polling I E ON R Z RU TE N I istr. N+1 Programma in esecuzione interrotto alla fine della Istruzione n. ma Perif. 1 ha generato INT? no Perif. 2 ha generato INT? no Ultima Perif ha generato INT? no si programma di servizio x perif. 1 si programma di servizio x perif. 2 si programma di servizio x 51 ultima perif.

Routine di Polling per il riconoscimento delle interruzioni Routine: JP DISP 1, DRIVER 1

Routine di Polling per il riconoscimento delle interruzioni Routine: JP DISP 1, DRIVER 1 JP DISP 2, DRIVER 2 …. JP DISPN, DRIVERN - Richieste multiple vengono servite in ordine di interrogazione - Tempo di CPU non minimo per il riconoscimento N. B “JP” non è una istruzione PD 32 52

Meccanismo interruzioni vettorizzate Periferica Indirizzo 0 iniziale 1 2 prog. servizio 3 prima perife.

Meccanismo interruzioni vettorizzate Periferica Indirizzo 0 iniziale 1 2 prog. servizio 3 prima perife. Indirizzo 4 iniziale 5 6 prog. servizio 7 seconda perife. . Indirizzo 4*i iniziale 4*i+1 4*i+2 prog. servizio 4*i+3 perife. i-esima INT IACK identificazione periferica CPU PUSH … . . . Identificativo Periferica x 4 POP RTI 53

Meccanismo di interruzione multilivello (a polling o vettorizzate) SERVIZIO 0 LIVELLO 0 PRIORITA’ CRESCENTE

Meccanismo di interruzione multilivello (a polling o vettorizzate) SERVIZIO 0 LIVELLO 0 PRIORITA’ CRESCENTE INTERR. SERVIZIO 1 LIVELLO 1 INTERR. LIVELLO L FINE SERVIZIO L FINE RIPRESA SERVIZIO L FINE INTERR. RIPRESA PROGRAMMA PRINCIPALE IRL RIPRESA SERVIZIO L IR 1 IR 0 t 54

Meccanismo di interruzione multilivello (a polling o vettorizzata) CPU CONTROLLO INTERRUZIONI Q S R

Meccanismo di interruzione multilivello (a polling o vettorizzata) CPU CONTROLLO INTERRUZIONI Q S R IFF 0 MFF 0 IR 0 Q S R IFF 1 MFF 1 IR 1 …………… Q S R IFFL MFFL IRL IFFi: Flip-Flop di memorizzazione di richiesta a livello i MFFi: Flip-Flop di mascheramento delle richieste a livello i 55

Gestione delle richieste di interruzione PD 32 Abilitazione/disabilitazione delle interruzioni Per memorizzare l'informazione che

Gestione delle richieste di interruzione PD 32 Abilitazione/disabilitazione delle interruzioni Per memorizzare l'informazione che le interruzioni siano o meno abilitate si fa uso di un flip-flop (denominato I e contenuto nel registro SR). Il contenuto di questo flip-flop può essere manipolato dalle istruzioni assembler CLRI e SETI. Verifica richiesta delle interruzioni La richiesta di un'interruzione avviene in modo asincrono rispetto alle attività del processore e quindi del suo SCO. La verifica della presenza della richiesta di un’interruzione viene fatta alla fine di ogni ciclo istruzione Si potrebbe anche effettuarlo alla fine di ogni ciclo macchina, ma in questo caso sarebbe necessario salvare lo stato del microprogramma (più complesso da 56 implementare).

Modifica SCO PD 32 micro codice relativo al primo ciclo macchina 1 2 3

Modifica SCO PD 32 micro codice relativo al primo ciclo macchina 1 2 3 4 5 6 7 micro codice relativo al secondo ciclo macchina 8 9 micro codice relativo all'ultimo ciclo macchina I=1 & IRQ=0 ? si (PC) → MAR --- fetch MEM(MAR) → MD --- fetch (MD) → IR, (PC)+4 → PC --- fetch Decodifica istruzione Esecuzione istruzione (in zero, uno o più cicli macchina) Se “I” AND “IRQ” = 0 allora vai a 7 altrimenti a 9 Salva PC e registro dei flag nella pila puntata dallo SP e resetta Flip/flop I Carica in PC l'indirizzo iniziale del programma di servizio Torna al passo 1 fino a che trovi una istruzione HALT gestione interruzioni no 57

Salvataggio dello Stato di un processo: contenuto dei registri del processore e delle locazioni

Salvataggio dello Stato di un processo: contenuto dei registri del processore e delle locazioni di memoria usati dal codice del processo. Le locazioni di memoria possono essere protette assegnando a ciascun processo una partizione distinta della memoria. I registri interni del processore, invece, sono visibili a tutti i processi. Quindi necessità di memorizzare i contenuti dei registri che potrebbero essere modificati da altri processi (vedi routine di servizio). Organizzazione a pila (stack di sistema - gestione LIFO) della memoria in cui andare memorizzare i contenuti dei registri (vedere gestione delle subroutine). Ricordarsi che R 7 è visto anche come STACK POINTER dello stack di sistema. Possibilità di memorizzazione via firmware: tutti i registri solo PC e SR (poi a software solo quelli che verranno effettivamente modificati). q q Nel PD 32 si è optato per la seconda soluzione. 58

Identificazione programma di servizio IRQ CLEAR IACK I/O AB I/O DB P D 3

Identificazione programma di servizio IRQ CLEAR IACK I/O AB I/O DB P D 3 2 IACKIN O. C. Q R S DEC ………. . IVN SELECT IACKOUT SCO DISPOSITIVO ESTERNO Tecnica scelta: interruzioni vettorizzate. 59

Connesione, in wired OR, di più interfacce alla linea IRQ Vcc CPU INT IRQi-1

Connesione, in wired OR, di più interfacce alla linea IRQ Vcc CPU INT IRQi-1 O. C. STATUS IRQi O. C. IM Modulo interfaccia i-1 STATUS IRQi+1 I O. C. IM Modulo interfaccia i STATUS IM Modulo interfaccia i+1 60

- Completamento salvataggio dello stato - esecuzione del programma di servizio - ripristino stato

- Completamento salvataggio dello stato - esecuzione del programma di servizio - ripristino stato Salvataggio del contenuto dei registri (visibili dall’utente: Ri) che la routine di servizio modificherà tramite esecuzione di istruzioni tipo PUSH. q q Esecuzione programma. Ripristino del contenuto dei registri salvati nello stack, tramite POP (tante POP per quante PUSH effettuate precedentemente). q Esecuzione della RTI (Re. Turn from Interrupt), che ripristina nello SR e nello PC i valori memorizzati nello stack di sistema (equivalente a due istruzioni POP). q RTI quindi deve essere l’ultima istruzione della routine di servizio. 61

Interfaccia di Input e sua connessione con il PD 32 (può essere usata sia

Interfaccia di Input e sua connessione con il PD 32 (può essere usata sia per l’interazione in busy waiting che in modalità interrupt) 62

Interfaccia di Output e sua connessione con il PD 32 (può essere usata sia

Interfaccia di Output e sua connessione con il PD 32 (può essere usata sia per l’interazione in busy waiting che in modalità interrupt) 63

Driver: acquisizione di 100 dati tramite interruzione ; Inizializzazione: MOVL #100, AD 1_C MOVL

Driver: acquisizione di 100 dati tramite interruzione ; Inizializzazione: MOVL #100, AD 1_C MOVL #DATI, AD 1_P START AD 1. . . altre istruzioni assembly. ; valore iniziale del contatore ; valore iniziale del puntatore ; comando che inizia l’acquisizione del primo dato ipotizzando che l’interruzione del programma “attivante la periferica” avvenga quando il valore del PC è 2000 (dopo la fase di fetch dell’ultima istruzione del programma corrente) allora una volta finito di eseguire il driver sarà necessario riprendere da 2000 64

; Routine di servizio SAD 1: PUSH R 0 PUSH R 1 MOVL AD

; Routine di servizio SAD 1: PUSH R 0 PUSH R 1 MOVL AD 1_C, R 0 MOVL AD 1_P, R 1 INW AD 1, (R 1)+ NEXT: EXIT: SUBL JNZ CLEAR JMP START #1, R 0 NEXT AD 1 EXIT AD 1 MOVL R 0, AD 1_C MOVL R 1, AD 1_P POP R 1 POP R 0 RTI ; salva i registri usati ; ; contatore ; puntatore ; trasferisce il dato in memoria e incrementa il ; puntatore ; decrementa il contatore ; era l’ultimo dato? ; si: rimuove la richiesta di interruz. rendendo il ; dispositivo inattivo e ritorna al progr. interrotto ; no: avvia l’acquisizione successiva (NOTA che START rimuove anche la richiesta di interr. ) ; aggiorna il contatore e… ; … il puntatore in memoria ; ripristina i registri usati ; ; ritorna al programma interrotto

Concetto di azione atomica Flip-Flop I: messo a 0 dal microprogramma relativo al ciclo

Concetto di azione atomica Flip-Flop I: messo a 0 dal microprogramma relativo al ciclo riconoscimento interrupt messo a 1 dal microprogramma relativo a RTI 66

Aumento della priorità IFF 1 MFF 1 P 1 K ACK 1 R …

Aumento della priorità IFF 1 MFF 1 P 1 K ACK 1 R … LIVELLO L PLK IFFL R ACKL MFFL PL 2 IR Q S PL 1 IR R IR Q S Aumento della priorità MFF 0 P 12 INT 1 Q S P 11 IR IR Q S LIVELLO 1 R ACK 0 INTL CONTROLLORE INTERRUZIONI a PRIORITA’ P 0 K IFF 0 P 02 INT 0 Q S P 01 IR IR Q S LIVELLO 0 IRQ IACK 67 PD 32

Controllore interruzione a priorità per PD 32 IRQ 0 R 0 IRQ R 1

Controllore interruzione a priorità per PD 32 IRQ 0 R 0 IRQ R 1 IRQ 1 R 2 IRQ 2 R 3 IRQ 3 IACK 0 R 0 ACK 1 R 1 ACK 2 R 2 ACK 3 R 3 68

Costo di esecuzione del driver per il trasferimento dati tramite interrupt di un file

Costo di esecuzione del driver per il trasferimento dati tramite interrupt di un file (100 dati) da una periferica ad un processore Dall’esempio precedente calcolare numero di istruzioni e quindi numero di cicli di clock complessivi per eseguire un trasferimento 69

Operazioni di I/O gestite da canale La maggior parte delle interazioni tra un dispositivo

Operazioni di I/O gestite da canale La maggior parte delle interazioni tra un dispositivo di Ingresso/Uscita e il processore avviene per trasferire dati (file). Non essendoci grosse necessità elaborative è sufficiente utilizzare dei dispositivi (canali) capaci solo di effettuare il trasferimento di file. La tecnica utilizzata per far ciò è la Direct Memory Access e il dispositivo che la supporta normalmente viene identificato con DMAC (Direct Memory Access Controller) DMAC Per effettuare il trasferimento di un file dalla memoria ad un dispositivo di Ingresso/Uscita o viceversa è necessario definire da processore: · la direzione del trasferimento (verso o dalla memoria – IN/OUT); · l'indirizzo iniziale della memoria (nel DMAC c’è un registro contatore CAR – Current Address Register) · il tipo di formato dei dati (B, W, L), se previsti più formati; · la lunghezza del file (numero di dati) (nel DMAC c’è un registro contatore WC – Word Counter); · l’identificativo della periferica di Ingresso/Uscita interessata al trasferimento (se ce ne 70 sono più di una).

Utilizzo di un DMAC Una volta che il DMAC è stato programmato il processore

Utilizzo di un DMAC Una volta che il DMAC è stato programmato il processore lo deve attivare (p. e. tramite una START) Da notare che il DMAC per poter trasferire i dati deve poter utilizzare il bus del processore, per questo quando lo usa il processore deve avere le proprie uscite verso il bus in alta impedenza. Una volta che il DMAC ha effettuato il trasferimento dei dati così come richiestogli dalla CPU la deve avvertire (p. e. tramite INTERRUPT). L'architettura di massima del DMAC e il protocollo di interazione processore-DMAC sono schematizzati nei lucidi successivi. 71

Struttura semplificata di un DMA controller (CPU con un unico bus sia per la

Struttura semplificata di un DMA controller (CPU con un unico bus sia per la memoria che per I/O) DATA BUS REGISTRO DI STATO WC M P CPU CAR IN/OUT ADDRESS BUS CONTROL BUS UNITA’ DI CONTROLLO E TEMPORIZZAZIONE IDENT PERIFERICA 72

Protocollo di interazione DMAC-CPU Trasferimento a Bus - stealing 73

Protocollo di interazione DMAC-CPU Trasferimento a Bus - stealing 73

DMAC CPU nop I/O start START no La CPU Inizializza Il DMAC (1/2) si

DMAC CPU nop I/O start START no La CPU Inizializza Il DMAC (1/2) si nop no perif. pronta? si invio richiesta rilascio BUS MBR no MBG=1 si MBG La CPU termina il ciclo macchina ed entra in uno stato di sospensione “rilascio dei bus” uscite in alta impedenza 74

(2/2) si trasf. di un dato decr. WC incr. CAR MBR rilascio BUS WC=0

(2/2) si trasf. di un dato decr. WC incr. CAR MBR rilascio BUS WC=0 La CPU riprende il normale funzionamento Riacquisto del controllo del BUS si IRQ operaz. terminata avvisare CPU DMAC La CPU esegue la routine di servizio CPU 75

Protocollo di interazione DMAC-CPU Trasferimento a BURST 76

Protocollo di interazione DMAC-CPU Trasferimento a BURST 76

DMAC CPU nop I/O start START no La CPU Inizializza Il DMAC (1/2) si

DMAC CPU nop I/O start START no La CPU Inizializza Il DMAC (1/2) si nop no perif. pronta? si invio richiesta rilascio BUS MBR no MBG=1 si MBG La CPU termina il ciclo macchina ed entra in uno stato di sospensione “rilascio dei bus” uscite in alta impedenza 77

(2/2) si trasf. di un dato decr. WC incr. CAR nop WC=0 no si

(2/2) si trasf. di un dato decr. WC incr. CAR nop WC=0 no si richiesta nuovo dato rilascio BUS nop operaz. terminata avvisare CPU dato pronto? si MBR IRQ La CPU riprende il normale funzionamento Riacquisto del controllo del BUS La CPU esegue la routine di servizio CPU 78

Modifica SCO PD 32 per poter gestire le due modalità di interazione micro codice

Modifica SCO PD 32 per poter gestire le due modalità di interazione micro codice relativo al primo ciclo macchina si MBR = 0 ? uscite sul bus in alta impedenza Invia MBG no I=1 & IRQ=0 ? uscite sul bus in alta impedenza Invia MBG no si MBR = 0 ? micro codice relativo al secondo ciclo macchina MBR = 0 ? micro codice relativo all'ultimo ciclo macchina si gestione interruzioni no 79

Architettura di un DMAC (adatto x PD 32) trasferimento dati tra una periferica e

Architettura di un DMAC (adatto x PD 32) trasferimento dati tra una periferica e la memoria 80

AB DB CB PD 32 I/O WR CAR START MEMORIA INC START F/F SELECT

AB DB CB PD 32 I/O WR CAR START MEMORIA INC START F/F SELECT REG IN REG OUT I/O DB I/O CB I/O AB Q MBR O. C. MBG I/O F/F INT F/F MBR F/F MRD MWR WC I/O WR DECR TC SCO DMAC BURST BUS-STEALING F/F DATO SCRITTO NEXT DATO LETTO SCO DEVICE DATO PRONTO 81

DB CB PD 32 MEMORIA I/O WR I/O F/F SELECT REG IN I/O DB

DB CB PD 32 MEMORIA I/O WR I/O F/F SELECT REG IN I/O DB I/O CB I/O AB BURST BUS-ST MRD MWR I/O WR REG OUT SCO DMAC DATO SCRITTO NEXT DATO LETTO SCO DEVICE DATO PRONTO 82

IRQ CLEAR IACK I/O AB I/O DB P D 3 2 IACKIN O. C.

IRQ CLEAR IACK I/O AB I/O DB P D 3 2 IACKIN O. C. Q R S DEC ………. . IVN SELECT IACKOUT SCO DMAC 83

Esempio inizializzazione DMAC INIZIALIZ: MOVL #100, R 0 OUT WCOUNTER, R 0 MOVL #2000,

Esempio inizializzazione DMAC INIZIALIZ: MOVL #100, R 0 OUT WCOUNTER, R 0 MOVL #2000, R 0 OUT CAREGISTER, R 0 MOVL #1, R 0 OUT DMACI/O, R 0 MOVL #0, R 0 OUT DMACB-ST, R 0 START DMAC ; programma il DMAC per la lettura ; seleziona la modalità (bus-stealing/burst) ; avvia trasferimento I/OWR select. I/O Data Bus (bit meno signif. ) ; carica in R 0 il numero di word da leggere ; e passa il valore al WC (nel DMAC) ; carica in R 0 l’indirizzo da cui leggere ; e passa il valore al CAR (nel DMAC) R Q I/O S 84

MDR SCHEMA SEMPLIFICATO LETTURA DAL PROCESSORE Le connessioni servono solo permettere il trasferimento dati

MDR SCHEMA SEMPLIFICATO LETTURA DAL PROCESSORE Le connessioni servono solo permettere il trasferimento dati dalla cache verso il processore sok rok a 31…a 14 a 5…a 2 OK comparatore hit/miss MUX d 511…d 479 tag 17…tag 0 flag MAR MR MW CS CS a 13…a 6 . . . Parola 15 d 63…d 32 MR MW CS CS Parola 1 a 13…a 6 CS=1 Parola 0