• Non ci sono risultati.

CALCOLATORI ELETTRONICI

N/A
N/A
Protected

Academic year: 2022

Condividi "CALCOLATORI ELETTRONICI"

Copied!
20
0
0

Testo completo

(1)

CALCOLATORI ELETTRONICI

• BUS I/O PD32

• POLLING / BUSY WAITING

• PROGETTAZIONE INTERFACCE

INPUT / OUTPUT

(2)

I/OBus PD32

I/O Address bus fatto da 8 bit Quante periferiche possiamo collegare al massimo?????

(3)

Istruzioni I/O PD32 Classe 7

TIPO CODICE OPERANDI C N Z V P I COMMENTO

0 INs dev, D0 - - - -

1 OUTs S,dev - - - -

2 START dev - - - -

3 JR dev, D1 - - - -

4 JNR dev, D1 - - - -

Il dato contenuto nel buffer del device dev è

trasferito nella destinazione D0.

dev ->d0

Il dato sorgente S viene trasferito nel buffer del

device dev.

S->dev

Viene azzerato il flip-flop STATUS del dev e viene

avviata l'operazione.

Se STATUS=1 salta alla destinazione D1 Se STATUS=0 salta alla

destinazione D1

Per la destinazione D0 sono ammessi tutti i tipi di indirizzamento tranne quello immediato.

Per la destinazione D1 sono ammessi tutti i tipi di indirizzamento tranne quello con registro e immediato.

(4)

Formato istruzioni I/O

TIPO k I/O s --- --- MODO DEST

CLASSE

31 29 28 24 23 16 15 14 13 12 11 9 8 6 5 3 2 0

Per l’operando dev sono ammessi solo due modi di indirizzamento: diretto con registro ed assoluto. Per la codifica di questo campo sono usati i campi I/O e k.

Il campo I/O può assumere solo due valori:

• 01 => indica che il contenuto di k è l’indirizzo del device

• 10 => indica che l’indirizzo del device è contenuto nel registro generale specificato dai primi 3 bit del campo k

Poichè i campi modo sorgente e sorgente sono inutilizzati, la sorgente S viene specificata nei campi modo destinazione e destinazione.

111

(5)

Interazione con le periferiche

Esistono due tipologie di interazione con le periferiche:

• Sincrona

• Asincrona

In questa parte faremo focus sull’interazione sincrona, successivamente verrà analizzata anche

quella asincrona.

(6)

Interazione Sincrona

Come tutte le comuni interazioni sincrone, il software si preoccupa di testare direttamente lo stato della periferica. L’architettura deve quindi dare la possibilità al processore di poter sapere in ogni istante la situazione attuale della periferica. Le tecniche più usare di

interazione sincrona sono:

• Busy Waiting

• Polling

pd32 periferica 1

sei pronta??

si /no

(7)

Busy Waiting

Idea che sta dietro all’implementazione del busy waiting:

Loop:

Salta a “Loop” se la periferica non è pronta

Si rimane in attesa attiva attesa attiva che la periferica abbia terminato.

La CPU è impegnata al 100% in questo controllo.

(8)

Busy Waiting / Implementazione

Implementazone del busy waiting in assembly pd32:

Aspetta:

Aspetta: JNR Device, Aspetta JNR Device, Aspetta

L’istruzione JNR (Jump Not Ready) salta all’etichetta

“Aspetta” se Device non è pronto, altrimenti se Device è

Ready passiamo alle istruzioni successive.

(9)

Polling

verifica circolare se ogni

DEVICE è pronto ad interagire

I/O AB I/O DB I/O CB PD32

DEV 1 DEV 2 DEV 3 DEV 4

(10)

Polling / Implementazione

Implementazone del polling in assembly pd32:

POLL1: JR D1, Op_Dev_1 POLL2: JR D2, Op_Dev_2 POLL3: JR D3, Op_Dev_3 JMP POLL1

Ciclicamente il software interroga le periferiche per sapere se qualcuna è pronta ad interagire. Altrimenti va avanti

fino a che non arriva alla fine delle periferiche da

controllare e con una jmp non condizionata torna sulla

prima da controllare.

(11)

Progettazione Periferiche

Progettiamo la nostra interfaccia hardware con lo scopo di fornire i componenti e le interconnessioni di supporto alla

“semantica” della periferica (ovvero cosa deve fare la periferica).

1. Si deve poter leggere e/o scrivere sulla periferica

2. Si deve poter selezionare la periferica tra tutte quelle collegate al bus

3. Si deve poter interrogare la periferica per sapere se ha completato il suo lavoro

4. Si deve poter avviare la periferica

(12)

Classico protocollo alto livello

In maniera molto astratta si dovranno eseguire almeno queste operazioni per interagire con le periferiche:

1. Aspettare che la periferica sia disponibile 2. Avviare la periferica

3. Scrivere / Leggere i dati d’interesse

(13)

Interfaccia di Input

I/O AB I/O DB I/O CB

SELECT

REG

I/O RD START

STARTD

O.C.

READY

SCA SCO

R Q S Q STATUS

PD32

I/O programmato – PROTOCOLLO DI HANDSHAKING IMPLEMENTATO A SOFTWARE

STARTDEV COMPLETE

“0”

WAIT

(14)

Interfaccia di Input / Impl

1. Aspettare finché la periferica DeviceIn non è disponibile 2. Avvio la periferica così che possa produrre informazioni 3. Aspetto la sua terminazione

4. Leggo il risultati acquisiti

Aspetta1: JNR DeviceIN, Aspetta1 START DeviceIN

Aspetta2: JNR DeviceIN, Aspetta2 INB DeviceIN, R0

Cosa implementa??

Busy Waiting / Polling??

(15)

Interfaccia di Output

I/O AB I/O DB I/O CB

DEC

SELECT

REG

START I/O WR

STARTD

O.C.

READY

SCA SCO

R Q S Q STATUS

PD32

STARTDEV COMPLETE

I/O programmato – PROTOCOLLO DI HANDSHAKING IMPLEMENTATO A SOFTWARE

(16)

Interfaccia di Output / Impl

Aspetta1: JNR DeviceOUT, Aspetta 1 OUT R0, DeviceOUT

START DeviceOUT

Aspetta2: JNR DeviceOUT, Aspetta2

1. Aspettare finché la periferica DeviceOut non è disponibile 2. Scrivi il dato sul registro di interfaccia

3. Avverto la periferica che può considerare un nuovo dato.

4. Aspetto la sua terminazione

Cosa implementa??

Busy Waiting / Polling??

(17)

Esercizio Busy Waiting

Dato questo frammento di codice implementante il codice di una funzione chiamante, definire la subroutine IN_AD1 che legge 100 dati dalla periferica di input con indirizzo AD1 e li memorizza in un vettore a partire dall’indirizzo 1280.

Si noti che i dati sono già nei registi R0 ed R1

MOVL #100, R0 ; numero di dati da acquisire MOVL #1200, R1; ind.dell’area di memoria JSR IN_AD1

(18)

Soluzione Busy Waiting

MOVL #100, R0 ; numero di dati da acquisire MOVL #DATI, R1; ind.dell’area di memoria JSR IN_AD1

IN_AD1: PUSH R0 ; salv. registri usati PUSH R1

PUSH R2

IN_1: JNR AD1, IN_1 ; attende che AD1 sia pronto IN_2: START AD1 ;avvia l’acquisizione di un dato

IN_3: JNR AD1, IN_3 ; attende che il dato sia stato prodotto INW AD1, R2; prelievo del dato e….

MOVW R2, (R1)+ ; … suo trasferimento in memoria SUBL #1, R0 ; decremento del contatore

JNZ IN_2 ; acquisizione di un altro dato se non si è azzerato ; il contatore POP R2 ; ripristino dei registri usati

POP R1 ;

POP R0 ;

RET ; ritorno al programma chiamante

(19)

Esercizio Polling

Dato questo frammento di codice implementante il codice di una funzione chiamante, definire la subroutine IN_AD1 che legge 100 dati da quattro periferiche di input con

indirizzo AD1, AD2, AD3, AD4 e li memorizza in un vettore a partire dall’indirizzo 1280. I 100 dati possono essere letti non necessariamente rispettando l’ordine delle periferiche, ovvero 25 da AD1, 25 da AD2…….

Si noti che i dati sono già nei registi R0 ed R1

MOVL #100, R0 ; numero di dati da acquisire MOVL #1200, R1; ind.dell’area di memoria JSR IN_AD1

(20)

Soluzione Polling

IN_AD1: PUSH R0 ; salv. registri usati PUSH R1

PUSH R2

POLL1: JR AD1, IN_1 ; attende che AD1 sia pronto POLL2: JR AD2, IN_2

POLL3: JR AD3, IN_3 POLL4: JR AD4, IN_4

JMP POLL1

IN_i: START ADi ; avvia l’acquisizione di un dato

WAIT: JNR ADi, WAIT ; attende che il dato sia stato prodotto INW ADi, R2 ; prelievo del dato e….

MOVW R2, (R1)+ ; … suo trasferimento in memoria SUBL #1, R0 ; decremento del contatore

JZ EXIT

JMP POLL_i+1 ; continua a interrogare le altre periferiche EXIT: POP R2 ; ripristino dei registri usati

POP R1 ;

POP R0 ;

RET ; ritorno al programma chiamante

Riferimenti

Documenti correlati

- un metodo che, data una stringa s che denota un titolo, restituisce true se un libro con titolo s compare nell’elenco dei libri di uno scolaro;. - un metodo che, data una stringa

Inoltre, definire un metodo che modifica il mezzo di trasporto ed il prezzo per persona, ed un metodo che restituisce una stringa che descrive un soggiorno con trasporto.

Scrivere un metodo che, dati un array bidimensionale di stringhe a ed un intero k > 0, restituisce true se in ogni riga a[i] di a esistono almeno k coppie di stringhe adiacenti

Oltre ai metodi che restituiscono i valori delle variabili istanza, definire un metodo che aggiunge il nome di un monumento nell’elenco di una via storica ed un metodo che

Inoltre, definire un metodo per modificare il nome del docente titolare di un corso, un metodo equals che restituisce true se due corsi sono uguali (altrimenti restituisce false) ed

Inoltre, definire un metodo per modificare il nome del produttore, un metodo che, dati due farmaci, controlla se appartengono alla stessa categoria e hanno lo stesso principio

Le soluzioni degli esercizi non devono contenere alcun metodo main n´e alcuna istruzione di stampa n´e istruzioni switch, break, continue, etc. La non osservanza di tali

Cognome Nome Teoria Progetto Voto Finale. Boscariol Davide INS