I/O Luigi Palopoli La necessita’ di comunicare • Un calcolatore e’ completamente inu3le senza la possibile di caricare/salvare da3 e di comunicare con l’esterno • I disposi3vi di I/O devono essere § espandibili § eterogenei • I disposi3vi di I/O sono molto vari e la 3pologia di prestazione e’ diversa § In alcuni caso interessa il tempo di accesso (la latenza) e il tempo di risposta ü Es. disposi3vi intera@vi come tas3ere o mouse § In altri casi siamo interessa3 al throughput ü Caso di dischi o interfacce di rete Un semplice schema • I disposi3vi sono collega3 al processore da un disposi3vo di comunicazione chiamato BUS Classificazione • I disposi3vi di I/O sono di vario 3po e possono essere classifica3 in vari modi § Comportamento: Che operazioni posso effeIuare con il disposi3vo (R/W) § Partner: può essere un uomo o una macchina § Velocità di trasferimento Esempi Prestazioni • Secondo il 3po di applicazioni, posso avere delle prestazioni diverse § Ad esempio per un sistema di streaming mi interessa il throughput § Per un sistema bancario, mi può servire di massimizzare il numero di file di piccole dimensioni su cui opero contemporaneamente Connessione tra processori e periferiche • Le connessioni avvengono tramite delle struIure di comunicazione chiamate bus • Esistono due 3po di bus § Bus processore memoria: ü specializza3, cor3 e veloci § BUS IO possono essere lunghi e permeIono il collegamento con periferiche eterogenei § i bus di IO non sono 3picamente collega3 alla memoria in maniera direIa ma richiedono un bus processore/memoria o un bus di sistema • Nelle prime architeIure avevamo un unico grosso bus parallelo che collegava tuIo • per problemi di clock e frequenze ora si usano architeIure di comunicazione più complesso fa@ di bus paralleli condivisi e di bus seriali punto/punto Terminologia • Transazione di I/O § Invio indirizzo e spedizione o ricezione dei da3 • Input § trasferimento di da3 da una periferica verso la memoria dove il processore può leggerla • Output § trasferimento dalla memoria al disposi3vo Bus sincrono • Bus Sincrono § Tra le linee di controllo deve avere clock § le comunicazione avvengono con un protocollo collegato al ciclo di clock § esempio dato richiesto al clock n viene messo al clock n+5 sul bus Bus sincrono: funzionamento base Bus clock Address and command Data t 0 Indica valori validi (1/0, alto/basso) su una struttura parallela t 1 Bus cycle t 2 Bus sincrono • Pros § Molto semplice da implementare (piccola macchina a sta3 fin3) § Molto veloce (pochi segnali di controllo) • Cons § poca robustezza al dri] del clock § tuIe le periferiche devono andare alla velocità del clock Bus Asincroni • Per ovviare agli inconvenien3 discussi si tende a usare interconnessioni asincrone • In sostanza non abbiamo più un clock e tuIe le transazioni sono governate da una serie di segnali di handshake • Questo richiede l’introduzione di apposite linee di controllo per segnalare inizio e fine di transazioni, ma permeIe di collegare periferiche a velocità diversa Ciclo di un bus asincrono T ime Address and command Master-‐ready Slave-‐ready Data t 0 t 1 t 2 Bus cycle t 3 t 4 t 5 Bus Asincrono • Pros § Consente di essere robusto rispeIo a ritardi § Consente di comunicare con periferiche di 3po diverso • Cons § lento nelle interazioni (diversi segnali di controllo devono circolare per riuscire a comunicare) § circuiteria di ges3one del protocollo complessa • Spesso si usano tecnologie ibride (in cui c’è un segnale di clock) ma prevalentemente asincrone Tecnologie (asincrone) attuali Esempio x86 HUB per il controllo memoria HUB per connessione ad altri bus Trend piu’ recente incorporare il tuIo all’interno del processore Prospettiva del programmatore • Rimane da capire § Come trasformare una richesta di I/O in un comando per la periferica § Come trasferire i da3 § Qual’è il ruolo del sistema opera3vo? • Riguardo al SO occorre osservare § Programmi che condividono il processore condividono anche il sistema di I/O § I trasferimen3 da3 vengono spesso effeIua3 usando interrupt, che hanno un impaIo sulle funzionalità del SO. Quindi devono essere esegui3 in una par3colare modalità del processore (supervisor) cui solo il codice del kernel può accedere § Il controllo di operazioni I/O spesso si interseca con problema3che di concorrenza Funzionalità richieste al SO • Garan3re che un dato utente abbia accesso ai disposi3vi di I/O cui ha diriIo (permessi) di accedere • Fornire comandi di alto livello per ges3re le operazioni di basso livello • Ges3re le interruzioni generate dai disposi3vi di I/O (come ges3sce le eccezioni dei programmi) • Ripar3re in maniera equa l’accesso al disposi3vo tra i vari programmi che lo richiedono Requisiti • Per implementare le funzionalità appena discusse occorre § Rendere possibile al SO di inviare comandi alle periferiche § Rendere possibile ai disposi3vi no3ficare la correIa esecuzione di un’operazione § Consen3re trasferimen3 dire@ di da3 tra disposi3vo e memoria Come impartire i comandi ai dispositivi • Questo si fa fornendo sulle rela3ve linee di BUS alcune parole di controllo. • Questo può essere faIo in due modi § Scrivendo/leggendo in par3colari locazioni di memoria (memory mapped IO) § Tramite alcune istruzioni LM speciali (dedicate all’I/O). Esempio • Scrivendo una par3colare parola in una locazione di memoria associata al disposi3vo § Il sistema di memoria ignora la scriIura § Il controllore di I/O interceIa l’indirizzo par3colare e trasmeIe il dato al disposi3vo soIo forma di comando. • Queste partocolari locazioni di meoria sono inaccessibili ai programmi utente ma solo al sistema opera3vo (quindi occorre una chiamata di sistema che faccia commutare il processore in modalità supervisore) • il disposi3vo stesso può usare queste locazioni per trasmeIere da3 o pre segnalare il suo stato • Ad esempio posso chiedere la stampa di un caraIere a terminale e a stampa finita un par3colare bit di un registro di stato mappato in memoria verrà commutato. Come trasmettere/ ricevere i dati • La modalità più semplice per trasferire I da3 è la cosideIa aIesa a@va (polling) • In sostanza si manda una comando di leIura/ scriIura alla periferica e poi si fa un ciclo di aIesa testando il bit di stato per vedere quando il dato è pronto Esempio • Input: leIura dalla tas3era in $v0 Waitloop: lui lw andi beq lw $t0, 0xffff #ffff0000 $t1, 0($t0) #control $t1,$t1,0x0001 $t1,$zero, Waitloop $v0, 4($t0) #data • Output: stampa del dato da $a0 Waitloop: lui lw andi beq sw $t0, 0xffff #ffff0000 $t1, 8($t0) #control $t1,$t1,0x0001 $t1,$zero, Waitloop $a0, 12($t0) #data • Questo ciclo di aIesa è chiamato “Polling” Costo del polling • Consideriamo un processore a 500Mhz e supponiamo che occorrano 400 cicli di clock per un’operazione di polling. Qual’è il costo percentuale? § Esempio 1: Mouse. Per non perdere movimen3 da parte dell’utente occorre acquisire il dato 30 volte al secondo. § Esempio 2: Hard disk: I da3 vengono trasferi3 in blocchi di 16 byte a 8MB/s senza la possibilità di perdite. Esempio 1 • Mouse cicli di clock al secondo spesi per il polling = 30 * 400 = 12000 clocks/sec § % Processor for polling: 12*103/500*106 = 0.002% ⇒ Fare polling sul mouse ruba un u3lizzo di processore trascurabile Questo overhead viene pagato sempre sia che ci sia il trasferimento che non ci sia Esempio 2 • Numero di volte/sec che occorre fare cicli di aIesa per non perdere da3: = 8 MB/s /16B = 500K polls/sec • Spesa in cicli di clock/sec = 500K * 400 = 200,000,000 clocks/sec • % processore 200*106/500*106 = 40% ⇒ InacceIabile perchà pagata sempre Considerazioni sul polling • L’aIesa a@va fa perdere tempo al processore che dedica cicli macchina a leIure inu3li • Il polling può essere usato quando le operazioni di I/O avvengono con velocità di trasferimento predeterminata (es. Applicazioni di controllo) e comunque il processore ha poco altro da fare • Sicuramente se I da3 vengono trasferi3 con eleva3 bitrate il ciclo di aIesa a@va dura poco • In altri casi lo spreco è inacceIabile e per questo mo3vo è stato inventato l’I/O a interruzione di programma (interrupt driven I/O) Organizzazione Memoria SPIM (MIPS) Memory • Par3amo da una 3pica organizzazion e di memoria (quella dell’emulator ee SPIM) Mem Map I/O $sp f f f f f f f c Kernel Code & Data 8000 0080 Stack 7f f e f f fc 230 words Dynamic data $gp Sta5c data 1000 8000 (→ 1004 0000) 1000 0000 User Code PC Reserved 0040 0000 0000 0000 Controllo del terminale in SPIM (INPUT) • Osserviamo da vicino le locazioni per il controllo del terminale (INPUT) 7 Receiver data (0xffff0004) 0 unused received byte (read only) 1 0 Receiver control (0xffff0000) unused interrupt enable ready (read only) Interruzioni di programma • Un’interruzione I/O è un segnale usate per segnalare al processore che la periferica è pronta a eseguire il trasferimento richiesto § Le interruzioni possono avere diverso grado di urgenza (è possibile definire prioirtà) § Occorre un modo per segnalare al processore quale periferica richiede l’interruzione • Le interruzioni I/O sono sempre asincrone rispetto all’esecuzione delle istruzioni § Non esistono particolari istruzioni assembler per eseguire le interruzioni. Un’interruzione può arrivare mentre una qualsiasi istruzione vine eseguita e da comunque modo di terminare l’esecuzione dell’istruzione. ü Il programmatore può spesso differire l’esecuzione dell’interruzione a un momento più conveniente (es. Sezioni non interrompibili nel codice del kernel). • Vantaggio § Non occorre interrompere l’esecuzione del programma se non quando il dato può essere effettivamente reaferito in memoria. • Svantaggio – occorre un hardware speciale per: § Permettere ai dispositivi di I/O di generare un’interruzione. § Rilevare l’interruzione, salvare lo stato del processore per eseguire una particolare routine di servizio (ISR) e poi riprendere al punot dove si era interrotto Input a interruzione di programma Processor 1. Interrupt dall’input 2.1 salva PC Memory Receiver Keyboard Nel mezzo c’è una Commutazione in modalità Supervisore (solo il SO può ges3re l’interruzione) add sub and or beq 2.2 salta alla ISR 2.4 ritorno al codice utente lbu sb ... jr memory user program 2.3 servi l’interrupt input interrupt service rou5ne Esempio controllo terminale SPIM 1. La periferica indica con un interruzione che ha un nuovo carattere dalla tastiera nell’opportuno registro di ricezione - Receiver data (0xffff0004) unused Byte Rivecuto 65 ü Contestualmente il bit pronto viene messo a uno nel registro di controllo Receiver control (0xffff0000) unused 1 1 →0 interrupt enable ready 2. Il processo ustente viene interrotto traferendo il controllo a una ISR che copia il dato in memoria utente ü All’atto della lettura il bit ready viene riazzerato ü Notare che prima di effettuare il trasferimento il bit interrupt enable era stato posto a 1 per abilitare le interruzioni Che ci si guadagna? • Ritorniamo all’esempio di prima dell’hard disk e supponiamo che un interrupt cos3 500 cicli di clock (plausibile che cos3 di più del polling) • Se le interruzioni vengono generate alla frequenza di polling § Disk Interrupts/sec = 8 MB/s /16B = 500K interrupts/sec § Disk Polling Clocks/sec = 500K * 500 = 250,000,000 clocks/sec § % Processor: 250*106/500*106= 50% § Sembrerebbe che non ci sia guadagno…anzi • TuIavia se l’hard disk è a@vo solo per il 5% del tempo spenderò gli interrupt genera3 saranno il 5% e la spesa di processore =5% * 50%=2.5% L’overhead si paga solo quando vengono effe@vamente generate richieste Eccezioni in generale user program normal control flow: sequen3al, jumps, branches, calls, returns Excep3on System Excep3on Handler return from excep3on • Eccezione = traferimento del controllo del programma non programmato § Il sistema effettua delle azioni per gestire le eccezioni. ü Ad esempio deve sapere deve registrare il punto di interruzione, salvare lo stato e poi (a eccezione finita si può riprendere dal punto immediatamente successivo). Due tipi di eccezioni • Interrupts § § § § Causate da eventi esterni (IO) Asincrone Possono essere gestite nello spazio tra due istruzioni Semplicemente sospendono il programma e riprendono dal punto in cui era stato interrotto. • Traps (Eccezioni) § Causate da eventi interni al programma ü Condizioni eccezionali (e.g., arithmetic overflow, undefined instr.) ü errori (e.g., hardware malfunction, memory parity error, segmentation fault) ü fault (e.g., non-resident page – page fault) § Sincrone all’esecuzione del programma § Gestite da un trap handler § E’ possibile riprovare ad eseguire l’istruzione che ha causato l’eccezione o abortire il programmaaborted Supporto del MIPS per la gestione di eccezioni • Coprocessore 0 registra le informazioni necessarie a gestire le eccezioni. § EPC (registro 14) – punta all’indirizzo duccessivo all’istruzione in esecuzione quando l’eccezione è avvenuta § Stato (register 12) – maschera e abilitazione trap/interrupt 15 § 8 4 1 0 Intr Mask User mode Intr enable Excp level ü Intr Mask = 1 bit per ognuno dei 6 livelli di eccezioni hardware e software abilitabile (1 per abilitare) ü User mode = 0 se quando l’eccezione è avvenuta il sistema era in modo supervisore, 1 se era in modo utente (fisso a 1 in SPIM) ü Excp level = settato a to 1 (eccezioni disabilitate) dopo che avviene un’eccezione, Tipicamente resettata dopo che l’ISR ha terminato ü Intr enable = 1 eccezioni abilitate, 0 disabilitate Supporto MIPS alle eccezioni (cont.) § BadVAddr (registro 8) – indirizzo di memoria che ha causato un errore di memoria § Cause (register 13) – tipo dell’eccezione e bit pendenti 15 8 6 Pending 2 Code ü Pending: eccezioni pendenti non ancora servite – Utilizzato per gestire casi in cui avviene una o più di un’eccezione mentre le eccezioni sono diabilitate ü Code codifica i motivi dell’eccezione – – – – – – – – – 0 (INT) → external interrupt (I/O device request) 4 (AdEL) → address error trap (load or instr fetch) 5 (AdES) → address error trap (store) 6 (IBE) → bus error on instruction fetch 7 (DBE) → bus error on data load or store 8 (Sys) → syscall trap 9 (Bp) → breakpoint trap 10 (RI) → reserved (or undefined) instruction trap 12 (Ov) → arithmetic overflow trap Modifiche richieste al processore per gestire le eccezioni • Segnali di controllo per scrivere EPC (EPCWrite), Cause (CauseWrite), and Status • Hardware per registrare il tipo di interruzione in Cause • Modifiche alla macchina a stati in modo che § L’indirizzo del gestore dell’interruzione (8000 0180hex) possa essere caricato in PC (altro ramo nel multiplexer) § Sia salvato l’indirizzo della prossima istruzione da eseguire a ISR terminato in EPC Datapath modificato Interrupt EPCWrite Memory Read Data (Instr. or Data) Write Data 1 1 Write Data Data 2 Instr[15-‐0] Sign Extend 32 Instr[5-‐0] ShiT leT 2 EPC 3 2 0 1 0 1 zero ALU 4 0 8000 0180 ShiT leT 2 Instr[25-‐0] Read Addr 1 Register Read Read Addr 2 Data 1 File Write Addr Read 0 PC[31-‐28] 0 1 2 3 ALU control ALUout 1 Address IR 0 MDR PC Instr[31-‐26] Cause MemRead MemWrite MemtoReg IRWrite PCSource ALUOp Control ALUSrcB ALUSrcA RegWrite RegDst A IorD CauseWrite B PCWriteCond PCWrite
© Copyright 2024 ExpyDoc