Che materia stai cercando?

Calcolatori Elettronici I Appunti scolastici Premium

Appunti di Calcolatori Elettronici I. Nello specifico gli argomenti trattati sono i seguenti: Architettura, organizzazione e struttura dei calcolatori, Livelli di astrazione e strati, I modelli fondamentali e l'architettura, Modello di Von Neumann, ecc.

Esame di Calcolatori elettronici I docente Prof. R. Canonico

Anteprima

ESTRATTO DOCUMENTO

sistema di bus e non attraverso uno unico..

L’algoritmo del processore di cui al § 6 viene riproposto nell'inserto in maggior dettaglio,

essendo stato esemplificato sull'architettura a bus di figura 11.1. Nonostante che gli schemi

presentati sono elementari e non ottimizzati e quindi distanti dalla loro reale tecnologia, essi costituiscono un

Unità di controllo valido strumento didattico finalizzato a favorire la comprensione del meccanismo di funzionamento della

O2

O1 unità di controllo sul piano concettuale.

Rete di

controllo ALU

U 12 Il sistema delle interruzioni: modello fondamentale

D Unità Logico-Aritmetica In questa seconda parte del capitolo vengono affrontati, sempr al livello introduttivo,

PC alcuni aspetti avanzati del processore, senza i quali, peraltro, la comprensione stessa del

MA funzionamento del processore sarebbe incompleta.

S MB 12.1 L'algoritmo del processore e le interruzioni

RA Collegamento con la memoria Secondo il modello originario di Von Neumann (cfr.§ 6) l'algoritmo del processore

consentirebbe di eseguire le istruzioni di un programma soltanto in modo rigidamente

RI sequenziale. In effetti, durante la sua esecuzione possono accadere diversi eventi (che

R

1 chiameremo cause di interruzione) che richiedono una momentanea (o definitiva) sospensione

… RU

R del programma perché il processore deve dedicarsi a servire tale evento. Ad esempio, in un

N

Registri generali, sistema multiutente, un evento potre bbe essere:

Collegamento con l’I/O

accumulatori,

registri indice, … • la richiesta di attenzione da parte di un utente mentre il processore sta eseguendo il

programma di un altro,

• il trascorrere di un tempo prefissato, al termine del quale deve essere effettuata una

Figura 11.1 Esempio di bus interno di una CPU riallocazione delle risorse del sistema agli utenti,

• un overflow nell'ALU, a seguito del quale si richieda una segnalazione all'utente,

Il registro RA è destinato a contenere l'indirizzo (ad esempio 0..7) del registro generale • un segnale proveniente da apparecchiatura di I/O, a seguito del quale occorra inviare

interessato alla operazione. Il banco di registri generali si suppone infatti che operi come una alla stessa un messaggio.

memoria, realizzando le due microoperazioni R[RA]:=BUS e BUS:=R[RA]. In altri termini, il In ogni caso, un’interruzione richiede un servizio, inteso come un'attività da compie re

collegamento fra RA e i re gistri R è mostrato in fig. 11.2: un apposito decodificatore

i attarverso un programma.

decodifica RA ed abilita (a seconda dei casi in ingresso o in uscita) uno dei registri verso il

BUS. Il sistema delle interruzioni è un insieme di soluzioni hardware e software per considerare

tali evenienze. In particolare, esso svolge un ruolo fondamentale nella sincronizzazione fra

processore centrale e sistema di I/O, nel collegamento fra programmi d'utente e sistema

operativo e in generale nei problemi di gestione automatica dei sistemi di elaborazione.

R I diversi processori reali organizzano questo fondamentale sistema in modo più o meno

0 sofisticato, coinvolgendone in misura maggiore o minore l'hardware ed affidando al software

un ruolo più o meno ausiliario, Nel seguito illustreremo un modello fondamentale delle

interruzioni, al quale le soluzioni reali si ispirano. Il modello è basato sulle seguenti

assunziont:

RA BUS • un segnale di Abilitazione Generale, AG , rende attivo il sistema delle interruzioni (per

AG=0 sarà comunque INT=0, salvo quanto si dirà in seguito;

• un segnale di interruzione, INT, individua la presenza di una richiesta d'interruzione

attiva; esso viene preso in esame dal processore al termine dell'esecuzione di ogni

istruzione;

R k-1 • un unico apposito programma del sistema operativo, detto ISR, I nterrupt Service

Routine, contiene le istruzioni per il servizio delle interruzioni; la prima istruzione della

ISR è posta in memoria ad un indirizzo prefissato in sede costruttiva del processore, che

diremo A;

• il sistema hardware delle interruzioni è ridotto al minimo, essendo affidato al software

Figura 11.2 Selezione di un registro del banco tutto il possibile[7].

Il sistema delle interruzioni completa allora l'algoritmo del processore (6.2)

una estremamente elementare e non

Giova ribadire che l'architettura qui esemplificata è aggiungendovi, dopo la fase "execute", una "fase hardware di interruzione", che diremo

ottimizzata. Nelle architetture reali si ritrovano soluzioni più avanzate realizzate adottando interrupt:

concetti non introdotti finora (p. es. pipeline, cache, etc.), introducendo nuovi registri oppure

eliminandone alcuni (p. es. l'ALU potrebbe operare direttamente dal bus, effettuando procedure processore

l'operazione BUS:=O (op) BUS) ed infine i trasferimenti potrebbero avvenire attraverso un var var

ON, BOOT: boolean; MA, PC: registro-indirizzo

1

begin Una causa non provoca di per sé un'interruzione, ma soltanto una "richiesta" al sistema;

while do begin

ON affinché questa sia attiva (produca cioè INT=true), è necessario che sia "abilitata". Oltre

bootstrap (PC) (12.1) dunque all'abilitazione generale, esistono anche abilitazioni selettiv e che, unitamente alla

while do begin

not BOOT prima, possono anche essere posizionate mediante apposite istruzioni; il sistema operativo

fetch (PC) può così disciplinare via software la strategia delle interruzioni nelle varie fasi

execute; dell'evoluzione di un programma, selezionando di volta in volta le cause che debbono

if then

INT interrupt eventualmente produrre una interruzione.

end 12.3 I registri del modello fondamentale

end

end Per realizzare quanto sopra, sono possibili alcuni modelli hardware, pi ù o meno complessi;

quello fondamentale si basa su due registri speciali (RI, M) ed un flip-flop (AG):

Al termine di ciascun ciclo, pertanto, se INT=true, si innesca la fase interrupt, il cui scopo - Richieste di interruzioni RI, che memorizza le richieste delle interruzioni;

è essenzialmente quello di realizzare il salto allo speciale sottoprogramma ISR, che verrà poi - Maschera delle interruzioni M, che abilita singolarmente le richieste;

eseguito, come tutti i programmi, nel normale ciclo del processore. - Abilitazione generale , AG, che abilita il sistema nel suo complesso.

Nel modello fondamentale in esame la fase interrupt è semplicemente: Ciascun evento I, causa di interruzione, posiziona il flip-flop RI del registro "Richiesta"

i

ed è abilitato dal corrispondente bit M della maschera; tutto il sistema è ancora abilitato da

procedure interrupt i

AG. Il segnale INT, dunque, è (cfr. fig. 12.1):

begin ( )

SAVE:= PC; = ⋅ ⋅

INT AG RI M

i i (12.3)

PC:= A; (12.2) i

AG:= 0; ove la sommatoria e il prodotto sono da intendere in senso booleano. è peraltro da

stato del processore:= supervisore sottolineare che alcune istruzioni, per loro intrinseca caratteristica, devono essere comunque

end abilitate[8].

Essa pertanto: I

I I n

1 2

CPU

salva il PC corrente (SAVE:=PC), per consentire un futuro ritorno al programma

− S R S R S R

Richiesta di

interrotto; RI Interruzione

1 1 1

produce il salto all'indirizzo A della ISR (PC:=A), per servire l'interruzione;

− disabilita il sistema delle interruzioni (AG:=0), per evitare che un'altra interruzione

− CPU

interrompa il servizio in atto, almeno nella sua fase iniziale (si veda in seguito); S R S R S R

Maschera di

pone lo stato del processore nello stato "supervisore", visto che la ISR è un programma M

− Interruzioni

1 1 1

del supervisore.

In caso di interruzione, dunque, l'istruzione eseguita dopo quella del programma in corso è CPU S 1

la prima della ISR: attraverso questo programma del supervisore l'interruzione è "servita", nel R

CPU

senso che sono effettuate le azioni elaborative da essa richieste. Il programma interrotto potrà AG

poi essere ripreso dopo il servizio, ma per fare ciò è ancora necessario salvare il contesto del

programma interrotto.

In modelli più evoluti, tale contesto viene salvato, almeno in parte, nella stessa fase

hardware interrupt; nel modello fondamentale il salvataggio è invece interamente affidata al

software. Pertanto, la ISR completa il salvataggio del contesto, individua la causa di INT

interruzione, la serve e quindi, in dipendenza degli algoritmi realizzati nel sistema operativo, Fig. 12.1 I registri del modello fondamentale delle interruzioni.

riprende il programma interrotto dopo averne ripristinati il contesto, oppure salta alla

esecuzione di un altro programma. Un segnale di interruzione è dunque effettivamente presente (INT=1) se si verificano i

seguenti fatti:

12.2 Le cause di interruzione - tutto il sistema di interruzione è abilitato (AG=1),

=1),

- la i -esima causa ha richiesto l'interr uzione (RI i

La causa di un’interruzione è in generale un evento esterno al programma in corso - tale interruzione è abilitata dalla maschera (M =1).

i

ed asincrono con esso. Sia i flip -flop di M sia AG sono posizionati da apposite istruzioni del linguaggio

macchina, qua li:

Si vuole con ci ò affermare che l'evento interruzione nasce indipendentemente dal

programma e che non è prevedibile a priori l'istante in cui esso si verifica. Sono ad esempio - disabilita (o abilita) il sistema delle interruzioni (AG:=0 o AG:=1),

eventi asincroni un segnale proveniente da un'apparecchiatura di I/O, il manifestarsi di :=0 o M :=1),

- disabilita (o abilita) la causa i (M i i

un'eccezione nell'ALU, il riconoscimento di guasti o malfunzionamenti e così via. Per motivi - assegna il valore m (array di bit) alla maschera delle interruzioni (M:=m).

che si chiariranno in seguito, esiste altresì una classe di interruzione atipica, che è o in qualche caso con istruzioni che conglobano l'abilitazione o disabilitazione in altre

programmata e quindi sincrona con il programma. Una esemplificazione più approfondita di istruzioni del linguaggio macchina, quali salta ed abilita, salta e disabilita, trasmetti un dato

queste cause di interruzioni si può legger e nell'inserto.

ed abilita (cfr. cap. V ed esempi ivi). 13.5 Innesto e priorità fra interruzioni

La ISR inizia le sue operazioni con il sistema disabilitato e deve restare tale finch é non

13 Le fasi del sistema delle interruzioni siano state completate le operazioni di salvataggio del contesto del programma interrotto,

altrimenti una nuova eventuale interruzione renderebbe irrecuperabile la sua ripresa.

L'insieme delle azioni elaborative svolte "via hardware" dal processore nella fase interrupt Terminato il salvataggio, le interruzioni possono essere riabilitate. Superata questa fase. è

e "via software" dalla ISR viene detto "processo delle interruzioni". Esso si sviluppa possinile che, durante il servizio di un’interruzione, ne divenga attiva un'altra: viene allora

essenzialmente nelle seguenti attività: interrotto il servizio e servita la nuova causa. Il fenomeno prende il nome di nesting delle

interruzioni e viene gestito con tecniche LIFO (attraverso appositi stack): l'ultimo programma

• salvataggio del contesto del programma in corso; interrotto è il primo ad essere ripreso. Il fenomeno pone in gioco anche un problema di

• individuazione della causa dell'interruzione priorità: esprimibile in due modi distinti:

• servizio dell'interruzione

• eventuale ritorno al programma interrotto previo ripristino del contesto. a) quale fra due cause verificatesi simultaneamente deve essere servita prima

b) quale causa può interrompere il servizio di un'altra causa.

Va inoltre considerato il problema dell'innesto fra le interruzioni. Nel seguito si accenna ai

problemi delle singole fasi di cui sopra ponendone in evidenza le funzioni e gli eventuali Nell'individuazione della causa (cfr. § 13.2), nel caso che più cause si presentino

interventi hardware realizzati nei modelli più evoluti. simultaneamente all'analisi, nasce un conflitti di priorità nell'accezione a). Il problema pu ò

essere risolto via software ordinando opportunamente i test sugli RI ed M oppure via

i i

13.1 Salvataggio del contesto hardware, mediante apposite "reti di priorità" che "filtrano" le cause in funzione di una

Nel passaggio dal programma in esecuzione al servizio dell'interruzione e poi di nuovo, se priorità loro preassegnata.

Il concetto di priorità nell'accezione b (il servizio di una interruzione è

del caso, al programma interrotto vi deve essere un cambio di contesto, nel senso che i interrompibile solo

registri di macchina devono essere salvati e ripristinati. da una più prioritaria) è risolto via software mediante abilitazioni e disabilitazioni selettive,

Nel modello fondamentale, all'hardware è affidato il solo salvataggio del registro PC e in hardware mediante appositi circuiti che confrontano il livello di priorità della richiesta

quindi tutti gli altri registri devono essere salvati mediante software, trasferendone il pendente con quello del servizio in atto.

In ogni caso, la disciplina per la gestione della priorità è un delicato problema del sistema

contenuto in apposite locazioni di memoria. In modelli pi ù evoluti, alcuni o tutti i registri

sono salvati in hardware con l'impiego di registri speciali adibiti a tali funzioni, di locazioni operativo (e della ISR) che qui resta soltanto accennato.

fisse di memoria oppure di stack. Esistono anche soluzioni in cui l'insieme dei registri è

duplicato o n-plicato ed il contesto viene cambiato nella fase hardware. 14 Protezioni e controlli del processore

13.2 Individuazione della causa della interruzione Al fine di consentire una corretta gestione dell'elaboratore, la CPU mette in essere un

Nel modello fondamentale, l'individuazione della causa avviene in software mediante insieme di controlli e di protezioni tendenti a preservare l'integrità e la correttezza dei dati,

appositi test sui contenuti dei registri RI e M. L'individuazione in hardware può avvenire con problemi che peraltro condizionano anche la progettazione del software e che travalicano

l'impiego di schemi circuitali lievemente più complessi; è abbastanza diffuso un sistema detto quelli semplici qui esposti. Comunque, in questa sede si illustrano le tecniche hardware

vettorializzato nel quale il salto provocato dall'hardware non è ad un unico indirizzo fondamentali.

(PC:=A), ma è funzione della causa i che ha provocato l'interruzione: (PC:= A ). La ISR ha

i

pertanto tanti punti di inizio quante sono le cause di interruzione e la maggiore complessità 14.1 Istruzioni privilegiate

circuitale è ripagata dal risparmio di tempo che si ottiene nel processo delle interruzioni. Come si è già accennato (cfr. § 9.3), ai fini della gestione di un calcolatore, è necessario

13.3 Servizio delle interruzioni distinguere le risorse disponibili per tutti da quelle disponibili soltanto per il sistema

operativo. A tale scopo, da un lato un apposito "registro di stato" determina se si stia

Le azioni elaborative richieste dalla singola interruzione dipendono da quest'ultima e operando in "stato utente" o in "stato supervisore" e dall'altro alcune istruzioni possono

possono essere le più varie, come accennato al § 11, in funzione delle regole di gestione delle essere attivate soltanto in stato supervisore: tali istruzioni di dicono privilegiate.

stesse e della strategia di gestione del calcolatore da parte del sistema operativo. Sono tipicamente privilegiate le istruzioni adibite alla gestione della macchina, soprattutto

Nei casi semplici, l'interruzione può richiedere una stampa, un'operazione di I/O, la quelle di caricamento di registri speciali adibiti a tale scopo, quali ad esempio quelli del

comunicazione; di un messaggio all'utente, una piccola elaborazione; in altri casi sistema delle interruzioni (richiesta e maschera, cfr. § 11) e i registri per i controlli di

l'interruzione innesca il processo del sistema operativo per l'attuazione della strategia di memoria (cfr. sottoparagrafo che segue), Sono inoltre privilegiate le istruzioni di input/output

alternanza nell'uso delle CPU da parte degli utenti e quindi innesca la sezione del sistema dei sistemi multiprogrammati, che debbono essere controllate dal sistema operativo.

operativo per il "congelamento" del programma interrotto e la scelta del programma da Se la macchina è in stato supervisore, le istruzioni privilegiate vengono eseguite

sostituirgli nella esecuzione. regolarmente. Se invece è in stato utente, il tentativo di eseguirle provoca una richiesta di

interruzione.

13.4 Ripristino del contesto e ritorno al programma interrotto Se l'utente, dunque, deve effettuare un'operazione per la quale si richiederebbe

Nel caso che la logica dell'interruzione servita lo consenta, il processo delle interruzioni si un'istruzione privilegiata, non la pu ò programmare direttamente ma solo adoperando apposite

chiude con il ripristino del contesto salvato e il ritorno al programma interrotto. In caso "macro" del sistema operativo che la contengono: l'utente, dunque, non "vede" le istruzioni

contrario, il processo si conclude con la ripresa di un programma precedentemente congelato privilegiate ma soltanto l'insieme di macro del sistema operativo progettate per sostituirle.

dal sistema operativo. Una macro, una volta attivata, effettua tutti i controlli necessari sulla liceità dell'operazione

La gestione delle interruzioni richiede fondamentalmente una strategia "LIFO" (Last-in nella contingenza in cui essa è stata richiesta e, se del caso, la avvia. A tale scopo essa

First-out): l'ultimo programma interrotto è il primo a dovere essere ripristinato; pertanto, effettua una "chiamata al supervisore", cedendo a quest'ultimo i parametri di scambio per

nella implementazione delle operazioni fondamentali quali il salvataggio del contesto e il effettuare l’operazione richiesta.

ritorno ben si colloca l'uso di appositi stack.

14.2 Protezione di memoria

Per evitare che durante l'esecuzione di un programma venga alterato un dato appartenente

ad un altro simultaneamente in memoria, un apposito sistema di protezione pu ò inibire

l'accesso per scrittura (ed eventualmente anche per lettura) alle zone di memoria inibite.

Tale sistema di protezione è essenziale in qualsiasi sistema per proteggere il sistema Fetch per strutture a caratteri

operativo e nei sistemi gestiti in multiprogrammazione per evitare che un programma ne

disturbi un altro. Detti n è la lunghezza di un ’istruzione ed m il parallelismo di memoria, il caso

La protezione si realizza con sistemi anche complessi nelle architetture moderne e n=m=costante (tutte le istruzioni della medesima lunghezza) è in realtà un caso limite,

l'argomento esorbita dalla trattazione introduttiva di questo capitolo. Allo scopo tuttavia di ≥

possibile solo per m 16, affinché l'istruzione possa contenere almeno i bit necessari per

fissare le idee e prendendo spunto da un'architettura del passato[9], si illustra una soluzione esprimere un codice operativo ed un operando: è questa la soluzione implicitamente adottata

semplice. nell’ipotesi (6.3) e nel conseguente schema del modello fondamentale di fetch.

Esistono due appositi registri speciali, detti registri-limite di memoria, nei qua li è Nel caso di calcolatori a caratteri ed n=qm, per indirizzo di un ’istruzione s’intende

registrato l'indirizzo minimo e massimo accessibile e quindi l'intervallo consentito. I registri l'indirizzo di memoria ove essa inizia e l'istruzione va "ricostruita" nel processore mediante q

sono posizionati a mezzo di istruzioni privilegiate, dal sistema operativo in "stato accessi successivi in memoria; inoltre, l'avanzamento all’istruzione successiva dovrebbe

supervisore". In "stato utente", durante le fasi di accesso in memoria, il processore controlla

l'indirizzo richiesto con i registri-limite e, se questo è esterno all'intervallo definito, non aversi incrementando di q il valore contenuto in PC all'inizio della fase. La procedura di fetch

accede in memoria ma genera una richiesta di interruzione. è dunque lievemente più complessa che quella fondamentale in quanto deve:

- determinare la lunghezza in byte q dell'istruzione;

- compiere q accessi complessivi e ricostruire in D l'istruzione (invece delle operazioni

MB:=M[MA]; D:=MB);

[1] Il termine è usato in contrasto con Il secondo caratterizza una

architettura aperta architettura proprietaria. - definire in modo congruo il nuovo valore di PC (invece di PC:=PC+1).

architettura propria di un costruttore, compatibile in genere solo con apparecchiature dello stesso costruttore; il primo

caratterizza invece soluzioni standard di fatto o di diritto, facilmente interfacciabile con apparecchiature della La lunghezza q dipende dalla classe cui appartiene l'istruzione e pu ò essere determinata

concorrenza.

[2] In effetti, potrebbe anche essere (e lo è stato in alcune architetture) che il parallelismo dell'ALU sia maggiore o analizzandone il primo byte, appositamente progettato; la ricostruzione in D dell'istruzione

minore di quello del processore, ma trascureremo questo aspetto per semplicità. può avvenire mediante apposite soluzioni architetturali.

[3] Ciò accadeva anche per i vecchi processori degli anni '50-'60. Per fissare le idee e a titolo di esempio, si sviluppa una possibile soluzione e l'algoritmo

[4] Il termine "precisione multipla" è qui usato in senso esteso e non in quello proprio della virgola mobile. Si intende, associato. Si suppone che D sia strutturato come uno shift-register sul byte e che la

cioè, un dato con un maggior numero di bit rispetto a quello fondamentale.

[5] Nel passato, sono stati costruiti processori con solo 2 o con 64 registri generali. ricostruzione avvenga accedendo successivamente ai q byte dell'istruzione ed immettendoli

[6] Come si vedrà, le operazioni di trasferimento da e per la memoria o fra i registri sono anche dette genericamente di via via nello shift-register. Invece che come nella (6.3), il registro-istruzioni è quindi

e specificamente di se il dato è trasferito (caricato) in un registro, di se è trasferito (immagazzinato) in

move, load store composto da k sottoregistri di tipo registro-memoria, ove k è la massima lunghezza in byte

memoria. prevista (ad esempio, l’istruzione pi ù lunga di k=4 byte):

[7] Questa non è la tendenza delle moderne architetture, ma questa impostazione aiuta a capire le problematiche delle

interruzioni. tipo array of

registro-istruzioni= [0..k-1] registro-memoria

[8] Tipica è ad esempio una interruzione per mancanza di alimentazione: essa è naturalmente prioritaria rispetto ad ogni

altra esigenza della macchina. La procedura fetch si compone quindi di una prima fase che accede al primo byte

[9] Il sistema Univac 1100. dell’istruzione e ne ricava la lunghezza q:

MA :=PC; MB:=M[MA];

shr(D,MB); PC:=PC+1; q:=q(D);

ove lo shift pone in D il primo byte e q(D) è una funzione atta a determinare q in funzione del

contenuto di D. Successivamente, la procedura si sviluppa in una seconda fase, nella quale si

effettuano gli altri q-1 accessi:

while do begin

q>1

MA :=PC; MB:=M[MA];

shr(D;MB); PC:=PC+1; q:=q-1

end

Al termine della sequenza degli accessi, PC sarà posizionato all'ultimo byte dell'istruzione

prelevata e pertanto il posizionamento all'istruzione successiva sarà ancora PC:=PC+1.

Architetture della sezione registri

Queste sono le architetture esemplificate

1.1 Notazioni e simbologia Architettura della sezione registri

Nel seguito si adopereranno sistematicamente i simboli di cui alle tab. IV.9.1 e IV -10.1, nelle architetture di riferimento

indipendentemente dai simboli usati specificamente in ciascuna di esse (un registro-dati, ad (tabelle di sintesi)

esempio, sarà detto D anche se un'architettura specifica lo dice A -accumulatore). In

particolare si useranno lettere maiuscole per individuare un banco indirizzabile, minuscole Le tabelle 2.1 e 2.2 mostrano i registri disponibili nelle architetture in esame; nella

per singoli registri (d sarà l'accumulatore di una architettura a singolo accumulatore, D il seconda colonna è mostrato il simbolo unificato, nelle altre i nomi specificamente usati dalle

banco di registri -dati di un'architettura che li preveda). Per i banchi indirizzabili si userà la singole architetture e le dimensioni dei banchi.

notazione R[i] oppure R per individuare lo i -esimo registro del banco e R[0..k] per indicare

i

che il banco possiede k+1 registri, da R[0] a R[k]. Tabella 2.1 Registri dati, indici, generali e speciali

tabelle 2.1 e 2.2 mostrano i registri disponibili nelle architetture in esame; Ad esempio,

Le

dalla tab.2.1 si ha: Si mbol o 80 86 d 68 000 d RISC d

Tipo di regist ro

• i registri generali del RISCd sono 32; sono gli unici registri veramente "generali", in Unif icat o

quanto svolgono tutte le funzioni; AX, BX, CX, DX

Registr i gener ali R [ ] SP, B P, SI, DI R[0. . 31]

• i registri generali dell'8086d sono 8 (con i limiti di cui alla nota in tabella) e sono anche ( °)

individuati da nomi specifici (AX, BX, etc.), vedi in seguito D [ ] D[0. .7] R[0. . 31]

• esiste un accumulatore riferito implicitamente in alcune istruzioni dell'8086d, che Registri -dati d AX -- - -- -

coincide con il registro AX=R[0]; Reg. di A [ ] BX, BP, SI , DI A[0. .7] R[0. . 31]

• gli accumulatori del 68000d sono un banco di 8 registri, detti D (Dati) anche indir izzamento a -- - -- - -- -

nell'architettura originaria; A[0. .7] +D

• il banco di registri di indirizzamento del 68000d è detto A (Address) anche X [ ] SI , DI R[0. . 31]

[0. .7]

Registri -indice

nell'architettura originaria; x -- - -- - -- -

• il banco di registri -indice del 68000d, che noi diremo X[i], è costituito da 16 registri (8 FPR

di tipo A, 8 di tipo D); S [ ] CS, DS, SS, ES -- - [0. .31]

Registr i speciali

• i registri speciali dell'8086d sono un banco indirizzabile di 4 (ancora una volta s -- - -- - HI, LO

individuato da nomi specifici); (° ) I primi 4 sono r egistr i -dati, i secondi r egistr i di indirizzam ento. Sono

• i registri speciali del RISCd sono riferiti implicitamente come HI e LO. rifer ir ti come R[ ] in alcune istr uzioni ed im plicitam ente in altre (p. e. AX o

Con riferimento invece alla tabella 2.2 si noti che: SP) .

• 8086d e 68000d affidano ad uno specifico registro generale la funzione SP;

• 8086d non presenta un vero e proprio registro di stato, che viene introdotto nei modelli Tabella 2.2 registri di controllo e di stato

successivi (80286 e seguenti);

• Si mbol o

RISCd non possiede stack pointer né flag. Tipo di regist ro 80 86 d 68 000 d RISC d

Unif icat o

Le tre architetture presentano caratteristiche complementari per una panoramica sulle Registr o di stato SR SR Status / Cause

soluzioni possibili: Registr o indicator i CCR FLAGS CC -- -

• RISCd è fortemente basata su registri generali; Stack pointer SP R[4] R[15] -- -

• 68000d presenta due banchi separati per le elaborazioni (banco accumulatori D) e per Pr ogram Counter PC IP PC PC

l'indirizzamento (registri di indirizzamento A (Address); entrambi costituiscono il banco

di registri-indice; Dettagli sulle sezioni registri

Per approfondire si veda

• 8086d rappresenta la fase di evoluzione fra la prima generazione dei microprocessori e

quelle successive: si nota rispetto ai microprocessori precedenti un aumento dei registri Le sezioni registri delle architetture storiche sono mostrate nell'inserto.

indirizzabili, ma ancora una struttura con molte funzioni riferite implicitamente all'uno o

all'altro registro. dettagli delle sezioni registri delle architetture in esame.

Qui sono mostrati i

Qui è mostrata la sezione registri per le architetture storiche.

Architetture della sezione registri - Dettagli O Overflow (aritmetica in complementi)

A Carry in aritmetica decimale

P Parità pari

Queste sono le architetture esemplificate D Autoincremento in istruzioni su stringhe

I Interrupt

sintesi delle architetture della sezione registri.

Una sintesi è in T Trace trap

Seguono alcuni dettagli sulle tre architetture in esame. 1.2 Architettura 68000d

1.1 Architettura 8086d Si tratta di una macchina co n 16 registri di 3 2 bit suddivisi in due banchi:

La sezio ne registri è schematizzata in fig.2.1. In particolare, essa possiede: • 8 accumulatori, d etti "Data Register", D [0..7]), che operano su dati di tipo byte (8 b it,

un quarto di registro), word (16 bit, mezzo registro), longword (32 bit, registro intero);

15 7 15

8 0 0 • 8 registri d’indirizzamento, "A ddress Register", A[0 ..7]; A[7] svolge anche la funzione

AX CS

AH AL di Stack Pointer;

BX DS

BH BL • tutti i 16 registri possono fungere da registri-indice;

CX SS

CH CL • un Program Counter, PC, a 32 bit (spazio di memoria pari a 4 GByte);

DX ES

DH DL • un registro di stato, SR, a 16 bit: il byte di minor peso (lo w) contiene i flag di cui alla

R [0 ..3] S [0..3] tab. 2.4.

SP IP Tabella 2.4 I flag del 68000d

BP PC Flag Significato

SI C Carry (riporto o prestito)

DI Z Zero (risultato nullo)

N Negative (risultato negativo)

R [4 ..7] V Overflow (rappresentazione in complementi)

eXtension (settato come C dalle istruzioni aritmetiche,

15 0 X usato per l’aritmetica in precisione multipla)

FLAG

O D I T S Z A P C

C CR 1.3 Architettura RISCd

Fig. 2.1 Sezione registri dell'architettura 8086d Possiede:

• 8 registri a 16 bit che sono generali per quanto riguarda il fatto che ap partengono ad un • 32 registri generali a 32 bit; R[0] è "fisicamente" vincolato a contenere il valore 0 e

unico banco indirizzabile, ma che presentano la partico larità che ciascuno di essi svolge funge in pratica da costante 0;

funzioni specifiche, generali o speciali, ed è riferito implicitamente da alcune istruzio ni. • 1 program co unter PC;

Diremo in generale R[0 -7] detti registri, che sono così identificati dalla architettura • 1 registro speciale a 64 bit, s, per i risu ltati delle operazioni di moltiplicazione e

originaria: divisione, del quale si più accedere alla metà alta (HI) o a quella bassa (LO);

• •

R[0..3], con funzioni di "registri-dati" cioè fondamentalmente accumulatori, caratterizzati dal fatto che un banco indirizzabile di 32 registri speciali a 32 bit, Flo ating Point Registers F PR

sono individuati globalmente (a 16 bit) come AX, BX, CX, DX, ma di essi si può anche referenziare [0..31], per l'aritmetica in virgo la mobile, realizzata attraverso un apposito coprocessori

soltanto il primo byte (più significativo o "alto", High) o il secondo (basso, Low): AH, AL; BH, BL, etc. detto "Floating Point Unit", FPU (cfr. § 11);

• •

R[4] che è lo stack-pointer SP. 1 Registro State/Cau se contenente maschera delle interruzio ni e indicatori di eventi di

• sistema (overflow, etc.); in realtà tale registro fa parte dell'interfaccia verso il processore

R[5] che è un registro d’indirizzamento: è detto BP (Base Pointer) e contiene l'indirizzo-base nella

tecnica d’indirizzamento based (cfr. tab. 5.1). dell'unità funzionale adib ita alla gestione della memoria e delle eccezioni (System Con trol

• Coprocessor-CP0); non so no presenti flag per memorizzare confro nti.

R[6..7] con funzioni di registri-indice: sono detti nell'architettura originaria SI (Source Index) e DI

(Destination Index).

• 4 registri speciali per la gestione della memoria detti "di segmento": sono indicati come S[0..3] nella

notazione generale e con i nomi CS, DS, SS, ES nell'architettura originaria. Gestiscono la memoria in

quanto gli indirizzi fisici sono a 20 bit (con uno spazio d’indirizzamento fino ad un megabyte), mentre i

registri-indirizzo sono a 16 bit. La memoria è allora vista come insieme di segmenti, ciascuno di 64 kbyte,

ed un’apposita unità hardware si occupa della traduzione tra indirizzi logici e fisici, combinando [1] Spesso i flag sono indicati come CF, ZF, SF, etc.

opportunamente gli indirizzi su 16 bit con il contenuto dei registri di segmento; è questa una soluzione

particolare, superata nelle architetture Intel più moderne.

• Il "Program Counter", detto IP (Instruction Pointer) nella architettura originaria.

• L'insieme d ei bit-indicatori, raggru p pati in un unico registro a 16 bit, detto FLAG in

particolare e CCR in generale; il significato dei flag è illustrato in tabella 2 .3[1];

Tabella 2.3 I flag dell’8086d

Flag Significato

C Carry (riporto o prestito)

Z Zero (risultato nullo)

S Sign flag (risultato negativo)

La sezione registri per le architetture "storiche" accedere come registri a 8 bit ???per le operazione sul byte. La CPU utilizza il registro R[15]

come stack pointer. Il Program Counter ed il registro di stato (Flag and C ontrol Word)

sono entrambi a 16 bit.

Le tabelle 2.2 e 2.3 propongono una sintesi dei registri disponibili nelle architetture in • Il VAXd p ossiede un banco di 16 registri generali a 32 bit, di cui alcuni svolgono anche

esame. funzioni speciali. In particolare, R[15] fa da Program Counter, R[14] da Stack Pointer,

mentre R[12] e R[13] sono impiegati per i meccanismi di scambio parametri nelle

Tabella 2.2 Registri dati, indici, generali e speciali chiamate di procedura. L'architettura prevede infatti potenti istruzioni di chiamata di

370d 1100d G20d 6800d Z8000d VAXd procedura. Lo stato del processore è memorizzato in un registro a 32 bit (Processor

R R R Status Longword), nella cui metà superiore ci sono informazioni inerenti la gestione del

Reg. generali R[0. .14]

[ ] [0. .15] [0. .15] sistema quali la maschera delle interruzioni e lo stato in senso stretto, mentre nella metà

D R A R inferiore ci sono informazioni d'utente (i codici di condizione).

R[0. .14]

[ ] [0. .15] [0. .15] [0. .15]

Accumulatori Acca

d Acc Accb

A X R R[0. .14]

[ ] [0. .15] [0. .15]

Regis tri di

indir izzamento R ix

a OA

[0. .15] X

X R X R

[0. .15] R[0. .14]

Regis tri - [ ] [0. .15] [0. .63] [0. .15]

XI

indice [0. .15]

x RT

S CR R SR

[ ] [0. .15] [0. .15] [0. .7] [12..14]

Regis tri

Speciali Var i in

s PSL

Tabella 2.3 Registri di stato

370d 1100d G20d 6800d Z8000d VAXd

Regis tro PC W PSL

SR PSW PSR

stato

Regis tro P CC CC

CCR CC singoli

flag

Stack SP R[15] R[14]

SP -- - -- -

pointer

Progr . PC PC R[15]

PC PC PC NC

Counter

Si noti che:

• Il G20d possiede un unico accumulatore, un banco di 64 registri-indice ed uno di 8

registri speciali, un registro d ’indirizzamento speciale O A; separatamente esiste il PC, ma

non esistono n é registro di stato né bit-flag, soluzioni introdotte soltanto più tardi. È da

notare il numero elevato di registri-indice, che per ò erano realizzati come locazioni della

memoria centrale.

• Il 370d p ossiede un unico banco di 16 registri generali che funge anche da indice ed

indirizzamento e un banco CR di registri speciali detti "di controllo"; i registri PC e CC

sono parte del registro di stato PSW (Program Status Word).

• Il 1100d possiede un banco di accumulatori A, uno di registri-indice X ed uno ausiliario

R (qui detto speciale) per le funzioni di transito e per funzioni speciali. Al banco X se ne

affianca uno di registri XI per l'autoincremento dell'indice. Il registro di stato (Program

Status Register , PSR) contiene il registro PC ed alcuni bit-indicatori.

• Il 6800d possiede registri tutti non indirizzabili: 2 accumulatori, 1 registro -indice, uno

stack -pointer, il codice -condizione nel quale è compreso un bit di "maschera delle

interruzioni"???e P?. Si noti la struttura essenziale, con pochi registri e non indirizzabili,

dei primi microprocessori. Particolare da sottolineare è l’esistenza di una coppia di

accumulatori, soluzione diffusa negli anni ’70.

• Lo Z8000d è un processore a 16 registri generali di 16 bit, di cui ai primi 8 si pu ò

Registri generali o specializzati Registri ausiliari di indirizzamento

Si ricorda che per indirizzare una memoria di 1 Gigabyte indirizzata byte per byte occorre

un indirizzo di

La concentrazione di funzioni in un registro implica una maggiore complessità interna del Oltre ai registri-indice per il trattamento degli indirizzi di memoria, sono talora realizzati

processore, ripagata peraltro da una maggiore flessibilità nel suo uso, mentre la altri registri autonomi di indirizzamento spesso affiancano i registri-indice; sono in genere

specializzazione dei registri comporta la necessità di specializzare i codici operativi per la manovrati dal sistema operativo e svolgono funzioni di indirizzamento connesse alla gestione

stessa operazione richiesta a banchi distinti. Se ad esempio un unico banco di registri ha del sistema (cfr. § II.7: gestione della memoria).

funzioni sia di elaborazione sia di indirizzamento, deve essere collegato con diverse sezioni

interne del processore; se, viceversa, i banchi sono separati, ciascuno di essi ha un proprio

dimensionamento ed è collegato in modo da consentire soltanto le operazioni previste su di

esso. Algoritmo del processore con sistema a bus unico

1 Fase fetch........................................................................................... 1

2 Fase preparazione operandi.................................................................. 1

3 Fase esecuzione.................................................................................. 3

Spazio di indirizzamento dei registri Vengono qui riprese ed esemplificate in una architettura a bus unico le fasi di fetch (6.4), e

I registri indirizzabili possono essere indipendenti oltre che fisicamente anche logicamente di execute (6.6), comprensiva della fase operand assembly dell'algoritmo fondamentale del

dalla memoria (è questa la soluzione più diffusa oggi) oppure costituire logicamente le prime processore.

sue locazioni; supposto ad esempio che i sia l'indirizzo di un registro (con 0 i < 16), nel Il collegamen to CPU -Memoria si suppone qui realizzato attraverso u n segnale ( read,

primo caso l'indirizzo di memoria j=i individua la j-esima locazione di memoria che è distinta altrove RE) che la CPU invia alla memo ria, la quale effettua di co nseguenza la lettura e lo

da R mentre nel secondo individua R . In altri termini, nel secondo caso i registri sp ostamento in MB dell'informazione memorizzata all'indirizzo MA

i i

appartengono allo spazio indirizzabile di memoria e quindi si può far riferimento ad essi 1 Fase fetch

anche attraverso un indirizzo di memoria e sono definite su di essi tutte le operazioni definite

su locazioni di memoria. La (6.4), mettendo in evidenza il transito dei dati attraverso il bus e il co llegamen to co n la

memoria, diventa: microoperazioni commenti

1) BUS:= PC 2) MA:= BUS {MA:= PC}

3) invia a Memoria, che pone MB:= M[MA] {MB:=istruzioe}

read

4) BUS:= MB 5) D:= BUS {D:= istruzioe }

6) PC:=PC+1 aggiorna PC

Si noti che l'ultima operazione pu ò essere eseguita in parallelo alle precedenti (do po

BUS :=PC ), le altre necessariamente in seq uenza.

Il modello di cui sopra si riferisce, come la (6.4), ad un calcolatore a voce; per quelli a

caratteri deve ev olv ersi così come indicato in Fetch per strutture a caratteri.

Soluzion i intermedie po ssono verificarsi n elle architetture reali. Ad esemp io, nel 68000

l'ind irizzamento è a byte (8 bit), una parola di 16 bit individua compiutamente alcune

istruzioni e l'accesso in memoria è appunto con parallelismo di 16 bit. Si ha allora

semplicemente, in luogo d i PC:=PC+1, PC:=PC+2 .

2 Fase preparazione operandi

La fase di preparazione degli operandi (sottofase della fase esecuzione) è strettamen te

legata alla struttura delle istru zioni, alla modifica di indirizzo ed alle tecniche di

indirizzamento del processore, in una parola al linguaggio macchina dello stesso. Si sviluppa

qui soltanto un esempio di un ipotetico processore, nelle segu enti ipotesi:

♦ la classe di istruzione che si esamina comprende due operandi, u no di tipo memoria,

l'altro di tipo registro:

♦ l'istruzione da eseguire sia una istruzione di MOVE di un operando-origine situato in

memoria verso u n op erando-destinazione di tipo registro;

♦ l'istruzione, che al termine della fase fetch staziona nel registro D, è composta di tre

campi:

♦ D.O P che defin isce il codice operativo (MO VE nell'esempio),

♦ D .M che definisce il modo di indirizzamento dell'operando -origine, che nel caso

sp ecifico si suppone essere indiretto ,

♦ D.R, che definisce l'indirizzo del registro -destinazione (uno degli 8 registri gen erali);

♦ l'operando-origine ha il suo indirizzo posto in memoria, all'in dirizzo immediatamente

seguente l'istruzione prelevata in fase di fetch;

♦ al termine d ella fase di prep arazione dell'op erando, l'operand o-memoria sarà posto in

MB, quello di tipo registro è identificato, in q uanto in RA è posto il suo indirizzo. U:= M]M[A]]+ R] D.R]

4) invio di segnale ad ALU che effettua U:=O :+ O

1 2

5) BUS:= U 6) R[RA]:= BUS R[D.R]:= M]M[A]]+ R] D.R]

In altri termini, si suppone che l'istruzione si presenti come in figura 1, con la prima parola

corrispondente a quella estratta dalla memoria nella fase fetch, la seconda ancora in memoria,

ma necessaria ai fini della prep arazione dell'operando. La semantica dell'istruzione è:

15 15

0 0

D.O P D.M D .R A

Figura 1. Esempio di istruzione

R := M[M[A]]

D.R

e cio è: il contenu to della memoria M posto all'indirizzo contenuto all'indirizzo A deve essere

caricato nel registro D.R -esim o.

Le microoperazioni necessarie per realizzare la p reparazione d ell'operando-memoria,

considerando che al termine della fase fetch PC punta alla parola contenente A, sono allora:

microoperazioni commenti

1) BUS:= PC 2) MA:= BUS MA:= PC

3) invia a Memoria, che pone MB:= M[MA] MB:=A

read

4) BUS:= MB 5) MA:= BUS MA:= A

6) invia a Memoria, che pone MB:= M[MA] MB:= M[A]

read

7) BUS:= MB 8) MA:= BUS MA:= M[A]

9) invia a Memoria, che pone MB:= M[MA] MB:=M[M[A]]

read

Si noti ch e nel caso esemplificato la preparazione dell'operando avviene mediante tre

accessi in memoria:

♦ il primo, che costitu isce in effetti il comp letamento del prelievo dell'istru -zione, è

all'indirizzo seguente quello dell'istruzio ne medesima (cfr . microperazione 1) e po rta in

MB l'indirizzo A;

♦ il secondo, che sarebbe anche l'ultimo se l'indirizzamento fosse diretto, porta A in MA

(5) e M[A ] in MB (6),

♦ il terzo porta M [MA] in MA (8) e M[M[A]] in MB (9).

Le microoperazioni necessarie per realizzare la preparazione dell'operando-registro sono,

più semp licemen te:

microoperazioni commenti

1) BUS:= D.R 2) RA:= BUS RA:= D.R

Si noti qu anto pi ù sem plice è la preparazione dell'operando-registro rispetto a quello di

tipo memoria, oltre al fatto che la memoria a registri è in gen erale pi ù veloce della memoria

cen trale.

3 Fase esecuzione

La fase execute di una istruzione è la p iù semplice, una vo lta che sia stata effettuata la

preparazione degli operandi. Per esempio, per completare l'esecuzione dell'operazione MOVE

di cu i al paragrafo precedente è su fficiente realizzare le microoperazioni:

microoperazioni commenti

1) BUS:= MB 2)R[RA]:= BUS R[D.R]:=M]M[A]]

Se invece, ferma restando la tecnica di indirizzamento, l'istruzione fosse una di ADD , nel

significato:

:= R + M[M[A]]

R D.R D.R

la fase execute sarebb e:

microoperazioni commenti

1) BUS:= MB 1*operando di ALU=M]M[A]]

2) O := BUS

1 2*operando di ALU=R] D.R]

3) O :=R[RA]

2 Capitolo quinto

Il linguaggio macchina

1 Le istruzioni in linguaggio macchina

1.1 Tipo degli operandi

1.2 Numero degli operandi espliciti

Cause di interruzioni: esempi 1.3 Natura degli operandi

1.4 Struttura delle istruzioni

2 La preparazione dell'operando

3 Tecniche di indirizzamento

Una classica classificazione delle interruzioni è la seguente: 3.1 Indirizzamento implicito

3.2 Indirizzamento immediato

Interruzione periodica in tempo reale, generata da un orologio interno alla macchina,

a) 3.3 Indirizzamento diretto

con un periodo di ripetizione di qualche millisecondo; la sua funzione principale è quella 3.3.1 Diretto di registro

di misurare il tempo ai fini del controllo di gestione per sistemi in multiprogrammazione o 3.3.2 Diretto di memoria.

suddivisione di tempo. 3.4 Indirizzamento indiretto

Interruzione per richiesta di attenzione, generata da una richiesta periferica di

b) 3.4.1 Indiretto attraverso registro

collegarsi al sistema centrale; può essere generata dall'operatore di console o da terminali 3.4.2 Indiretto attraverso memoria.

distanti. 4 La modifica di indirizzo

Interruzione di ingresso-uscita,

c) generata da un’unità periferica, tipicamente al termine 4.1 Schema fondamentale

di un’operazione di I/O, al fine di sincronizzarsi con l'unità centrale. L'interruzione è 4.1.1 Indirizzamento diretto con registro-indice:

generata ad esempio allorché una memoria di massa termina la registrazione di un record. 4.1.2 Indirizzamento indiretto con displacement:

Interruzione per errori nel programma (detta anche trap), generata dall'hardware della

d) 4.1.3 Relativo a PC con displacement

stessa unità centrale a causa di errori di programmazione incompatibili con il 4.2 Estensione dello schema fondamentale

funzionamento della macchina, come ad esempio eccezioni nell'ALU (overflow, 4.2.1 Indirizzamento indiretto con displacement e indice

underflow, etc.), riconoscimento di un codice operativo illecito in quanto inesistente nel 4.2.2 Modifica con indirizzamento immediato e indiretto

repertorio del processore oppure privilegiato, riconoscimento di un indirizzo di memoria 4.3 Autoincrementi

illecito in quanto non appartenente alla memoria del sistema oppure violante la protezione 5 Modo di indirizzamento e architetture ortogonali

di memoria (cfr. § 17) 6 Architetture CISC e RISC

e) Interruzione per guasti del sistema, generata da appositi circuiti di controllo atti ad 7 Classificazione delle architetture

individuare i principali malfunzionamenti hardware. come ad esempio mancanza o 7.1 Architetture ad accumulatore

insufficienza di alimentazione elettrica oppure errori rilevati dai controlli di validità dei 7.2 Architetture a registri

dati, quali errori di parità. 7.3 Architetture a stack

f) Interruzioni programmate e chiamata del supervisore, dette anche software interrupt, 7.4 Architetture RISC

generate ad arte per effetto della esecuzione di particolari istruzioni; esse, atipiche in 7.5 Altre architetture

7.6 Confronti ed esempi

quanto sincrone con il programma, costituiscono un utile mezzo per innescare da 8 Il set di istruzioni

programma il sistema delle interruzioni. Tipica istruzione di tal genere è la chiamata del 9 Istruzioni di trasferimento dati

supervisore (Supervisor Call) cui l'utente ricorre direttamente o indirettamente (attraverso 9.1 Move, Load, Store, Clear, Set

i compilatori) per l'esecuzione delle operazioni gestite da quest'ultimo, quali quelle di 9.2 Push e pop

I/O. 10 Istruzioni aritmetiche e logiche

10.1 Istruzioni aritmetiche

10.2 Istruzioni logiche

10.3 Shift

11 Posizionamento dei flag. Comparazione e test

12 Istruzioni di salto

12.1 Salto semplice

12.2 Salto condizionato

13 Istruzioni di collegamento con sottoprogrammi

14 Estensione del set di istruzioni

15 Gestione della memoria

16 Istruzioni a blocchi

Prerequisiti diverse sono infatti le istruzioni che operano sul tipo d i lunghezza n pari al parallelismo

del processore oppure su tipi di lunghezze diverse (2n, 4n, n/2 etc.). Talora altrettante classi

di codici op erativi effettuano anche questa distinzion e, talora invece la distinzione è

Premessa effettuata da un apposito campo dell'istruzione.

Il lin guaggio macchina di un processore ne definisce integralmente il comportamento 1.2 Numero degli operandi espliciti

logico-funzionale. I parametri fondamentali di un linguaggio macchina sono la struttura di Gli o perandi possono essere espliciti, cioè direttamente riferiti nell'istruzione, oppure

dati ed istruzioni e le cosiddette tecniche di indirizzamento, attraverso le quali il pro cessore im pliciti, cioè prefissati dal codice operativo. Il numero di operandi espliciti è limitato;

costruisce gli operandi sui quali l ’istruzione deve operare. assumeremo come strutture fondamentali le seguenti, a 0, 1, 2 o 3 operandi [2]:

In qu esto capitolo si affrontano le problematiche generali di cui sopra, con esclusione di

quelle relative alla struttura dei dati già illustrata nel cap . 2 L’argomento è trattato da un OP

punto di vista del tutto generale, prescindendo dalle soluzioni concrete ch e saranno invece OP O 1

esemplificate negli inserti di "esemplificazione"; in p articolare, verranno esemplificate OP O , O

1 2

sistematicamente tre architetture mod erne ed inoltre sei architetture "storiche" di riferimento. , O , O

OP O 1 2 3

, O , O sono gli operandi espliciti e possono essere a loro volta strutturati e quindi

ove O 1 2 3

Il mod ello di riferimento è quello di Von Neu mann; in altri termini, n on faremo composti da pi ù componen ti (ad esempio O potrebbe essere 27(R3) per in dicare che

i

riferimento in questo capitolo alle soluzioni più moderne come memoria cache e pipelining l'operando è in memoria all'indirizzo che si ottien e sommando 27 al contenuto del registro

che invece sarann o introdotte nei capitoli che seguo no. R3; vedi in seguito le tecniche di indirizzamento per ulteriori dettagli).

• Istruzioni a 0 operandi e ad 1 operando: fanno in genere implicitamente riferimento ad

altri operandi, come le costanti tipiche 0 ed 1, e a registri impliciti, come l'unico

1 Le istruzioni in linguaggio macchina accumulatore, un flag o un puntatore a stack (p.e. po ni 0 o 1 nel flag Carry , fai l'opp osto

dell'accumulatore, sposta il contenuti d i Y nell'accumulato re). Poich é nelle architetture

Similmente agli altri linguaggi, un ’istruzione in linguagg io macchina è, su l piano astratto, moderne vi è l'orientamento ad usare banchi indirizzabili di registri, sono oggi p oco

una tripla strutturata: diffuse, mentre sono presenti in architetture speciali o del passato.

, P )

i = (f, P •

1 2 Istruzioni a 2 operandi, tipiche delle architetture CISC a registri indirizzabili, come "trasferisci un dato

ove: da un registro ad una locazione di memoria" (M:=R) oppure "aggiungi ad un registro il contenuto di una

f F locazione di memoria" (R:=R+M).

- . insieme dei codici operativi del processore, cioè delle operazioni elementari • Istruzioni a 3 operandi: Nelle architetture CISC[3] le istruzioni a tre operandi sono rare

definite al livello del lingu aggio macchina; (si ritrovan o solo per applicazioni particolari), in quanto molte istruzioni non ne

è un in sieme di operandi-so rg ente, cioè di valori e/o p untatori a reg istri (in senso

- P 1 richiedono più di due e il necessario ampliamento del numero di bit dell'istruzione per

proprio o registri di memoria) contenenti i valori su cui opera f; contenere il terzo op erando non sarebbe giustificato. Nelle architetture RISC, vicev ersa,

- P è un insieme d i operandi-destinazione, cioè di puntato ri ai registri cui sono destinati i

2 tutte le istruzioni aritmetiche usano strutture a tre operandi, tutti di tipo registro (p.e.

risultati dell’elaborazione f; fra tali r isultati è anche contenuto il valore che dovr à assumere R1:=R2+R3); in tal modo, infatti, le architetture RISC raggiungono elevate prestazioni in

il registro PC per il prelievo e la successiva esecuzione della prossima istruzione[1]. termini di velocità operativa.

Sul piano della sua rappresentazione, un a istruzione è espressa come una informazione

struttu rata (cfr. I.10.1): 1.3 Natura degli operandi

tipo istruzione= Un operando pu ò essere:

cartesiano • Operando -costante, (ov viamente, solo se operando -so rgen te). Se la co stante è implicita,

codop: codice oper ativo allora è definita al livello di p rocessore ed è in genere un valore tipico, quali lo "0"

parte -operandi: operandi aritmetico, il TRUE o l'"1"logico. Se esplicita, la costante viene detta operando

end im mediato ed è un valore definito al livello di programma e conten uto nella istru zione

ed è caratterizzata da: come uno degli O .

i

• Operando-memo ria , cioè un operando che risiede (se sorgente) o dovr à risiedere (se

a) tipo degli operandi; destinazione) in memoria. È individuato da un indirizzo di memoria; d ifficilmente è

b) numero degli operandi espliciti; implicito.

• Operando -registro, cioè un registro di macchina individuato implicitamente opp ure

e, per ciascun operando: attraverso il suo indirizzo se appartenente ad un banco indirizzabile. Le istruzio ni possono

c) la "natura" (fra l'altro se è un registro o una locazione di memoria); usare come op erando, a seconda dei casi, registri generali, accumulatori, registri-indici o

d) la tecnica di indirizzamento (fra l'altro se è implicito o esplicito); registri speciali. In alcuni casi fann o implicito riferimento ai flag del registri CCR

e) se si applica, e con quale legge, la mod ifica di indirizzo. (cfr. ???)

In questo paragrafo ci occuperemo dei primi tre punti, nei successivi d egli altri. Nel seguito e negli esempi si useranno i simb oli di tab. 1.1 per individuare la natura degli

operandi coinv olti in un'istruzione (per il simbolo G si veda il § 5). Per gli operandi che si

1.1 Tipo degli operandi riferiscono a registri speciali useremo i simboli di tab. 1.2.

Sono ovviamente diverse le istruzion i che operano in virgola fissa o mobile, in aritmetica

binaria o decimale, sui dati da elaborare o sui loro indirizzi; tipicamente, classi distinte di Tabella 1.1 – Simboli per individuare la natura degli operandi

codici operativi determin ano i diversi tipi degli operandi.

Ma le istruzioni sono specializzate anche in funzione della "lunghezza" del dato coinvolto: e che è ancora dipendente da O:

Tabella 1.2 registri di controllo e di stato EO=M [EA] =f(O)

Istruzioni fondamentali del lin guaggio macch ina sono quelle di move (cfr. § 8) che La funzion e f(O) è calcolata nella fase di preparazione dell'operando; second o le regole

sp ostano un dato da un op erando all'altro (O1:=O2) e quelle aritmetiche (cfr. § 9, p.e. che seguono.

O1:=O1+O2 oppure O1:=O2+O 3). Per i due principali operandi coin volti in queste istruzio ni

(entrambi quelli del move, oppure quelli a secondo memb ro delle istruzion i aritmetiche) si

ha: 3 Tecniche di indirizzamento

In funzion e della natura degli operandi:, le istruzioni sono classificate Il calcolo di EO si compie attraverso l'applicazione di tre tecniche:

memoria-immediato - la tecnica di indirizzamento

memoria-registro - la modifica di indirizzo

memoria-memoria - la gestione della memoria

registro-immediato La tecnica di indirizzamento porta in co nto la n atura dell'operando (se costante, registro o

registro-registro memoria) e la tecnica con la quale l'istruzione lo esprime (se ne esprime il valore, opp ure

l'indirizzo op pure ancora l'indirizzo dell'indirizzo).

Rinvian do ai §§ citati per gli approfond imenti, si riporta nella tab. 1 .3 un campio nario, La modifica di indirizzo porta in conto il fatto che, l'op erando è composto in generale di

necessariamente incompleto, delle operazioni possibili con una istruzione in linguagg io due parti: un indirizzo -base ed uno o più registri-indice il cui valore vi si agg iung e per

macchina. determinare l'indirizzo effettivo.

La tecnica di gestion e della memoria effettua una trasformazione dell'operando valutato in

Tab. 1,3 Campionario di istruzioni in linguagg io macchina base alle tecniche di cu i sopra per ten ere in conto i problemi hardware e di sistema nella

Move verso registri (load) gestione dell'unità di memoria.

R := im R:=0, SP:=0 d: =0 , x:=0 In questo paragrafo si approfondisce la tecnica di indirizzamento; in base a qu esta,

R := M d:=M l'operando pu ò essere così classificato:

R1:= R2 d:=x, x:=d a) Implicito: O non esiste, l'operando è implicito;

Move verso memoria (store) b) Immediato: O è l'operando -costante;

M := im M: =0 c) Diretto : O è l'indirizzo dell'operando;

M: =R M=d d) Indiretto: O è l'indirizzo dell'indirizzo dell'operando;

M1:= M 2 Operaz ioni aritmetihe 3.1 Indirizzamento implicito

R :=R+ im L'indirizzamento implicito è un caso b anale, che viene trattato solo per completezza: con

R :=R+M d := d+M esso l'istruzione fa implicitamente riferimento ad una costante oppure ad un registro.

R1:=R1+ R2 R:=R +1 x:=x+1 Nel primo caso, il codice operativo definisce imp licitamente il valore k della costante e si

R1:=R2+ R3 s:=R1+R 2 ha:

R1:=R2+ im EO= k

In prima colonna sono mostrate le strutture con tutti gli operandi esp liciti, in seconda quelle Esempi tipici sono alcune istruzioni d i azzeramento o clear (a:=0, R:=0) o di set, (f:=1), ove

con riferimento implicito a costanti tipich e, in terza co n riferimento a registri impliciti. le costanti sono rispettivamen te 0, 1.

Nel secondo caso, il codice definisce implicitamente un registro, che è uno non

1.4 Struttura delle istruzioni indirizzabile, come l'unico accumulatore a (a:=M, M:=a), lo stack -poin ter (push(SP, O)), il

registro di stato del pro cessore (R:=SR) e così via opp ure uno specifico registro di un banco

In esempi di istruzioni sono mostrate le strutture delle istruzioni per le architetture esemplificate. indirizzabile cui il processore attrib uisce specifiche funzioni. (p.e. R )

31

2 La preparazione dell'operando 3.2 Indirizzamento immediato

L'operan do espresso nella istruzione non sempre coincide con l'operando effettiv o; diremo Con l'indirizzamento immediato l'operand o effettivo è la costante O espressa

in generale: esplicitamente nell'istruzione:

- O l'operando espresso esplicitamente, EO=O (3.1)

- EO (Effectiv e Operand) l'operando effettivo

Il calcolo di EO è effettuato dal processore durante la fase execute del su o ciclo fetch- Si tratta di un operando -costante e quindi necessariamente sorgente. Il tipo della costante e

execute (cfr. ???), o pi ù esattamente in una sottofase di questa detta appunto di "preparazione le regole della sua rappresentazione nella istruzione sono dettate dal singo lo processore e

dell'operando". In generale, EO dipende da O (oppure è implicito): possono variare da una istruzione all'altra; le tecniche pi ù diffuse sono quelle di

rappresentare, sugli n bit del campo ove è espresso O, un numero intero positivo

EO=f(O)

Se in particolare si tratta d i un operando -memoria, allora occorre calcolarne n n-1 n-1

nell'intervallo [0.2 ), un numero relativo in complemen ti a 2 in [ -2 , 2 ) o un array di bit

[4].

preventivamente l'indirizzo, ch e diremo Si ha un particolare problema di terminologia per le istruzioni di salto ; per esse si pu ò

- EA (Effectiv e Address): ind irizzo di memoria dell'operando effettivo affermare che indirizzamento immediato e diretto coincidono.

Il registro è espresso implicitam ente o esplicitamente nell'istruzione, la memoria solo

3.3 Indirizzamento diretto esplicitamente[7]. Si hanno pertanto i seguenti sotto casi:

3.4.1 Indiretto attraverso registro

Con la tecnica dell'indirizzamento diretto, nell'istruzione viene espresso l'indirizzo

dell'operando: Il registro ch e contiene l'indirizzo di memoria pu ò essere riferito dall'istru zione:

EO=R per operan do-registro • Implicitamente. esso è allora un registro x, destinato a tale scopo dal processore (EA=

O

EA= O , EO=M[O] per operan do-memoria (3.2) x); questa soluzione è attuata in alcuni processori sforniti di banchi di registri di

indirizzamento.

Diretto di registro

3.3.1 • Esplicitamente attraverso l'indirizzo di un registro, O, espresso nell'istruzione; il

registro appartiene ad un banco di indirizzamento (il registro è allora A ) o generale

L'operan do O è l'indirizzo di un registro appartenente ad un banco indirizzab ile; il campo ove O

[8]

è contenu to O è pertanto dimen sionato allo spazio in dirizzabile dei registri, che assume (R ); per semplicità diremo comunque R il ban co (EA= R ) .

tipicamente il valore 16 (4 bit per l'indirizzamento), variando da 2 (1 bit) a 64 (6 bit). O O

Spesso esistono nello stesso processore distinti sp azi indirizzabili di registri, come un La tecnica attraverso registro implicito n on occupa spazio nell'istruzione ed è usata in

banco di registri accumulato ri, uno di registri-indice ed uno d i speciali: in tali casi i codici processori senza banchi indirizzabili ed a lunghezza variabile dell'istruzione, ch e così si

operativi fanno implicitamente riferimento all'u no o all'altro banco. Detto in generale R il accorcia. La tecnica attraverso registri in dirizzabili richiede po chi b it per l'indirizzo del

[5] registro ed è la più usata nelle architetture moderne,

banco, si ha dun que EO= R

Esempi tipici sono tutte le istruzioni con operando-registro indirizzabile; in particolare, le

O .

istruzioni d i move da o per registri e quelle aritmetiche che preferenzialmente si svolgono su 3.4.2 Indiretto attraverso memoria

registri-accumulatori; si fa anzi presente che nel caso di architetture RISC le op erazioni L'operan do O è un indirizzo di memoria (EA= M [O ]). Q uesta soluzione richiede un campo

aritmetiche si effettuano, per motiv i di efficienza, so ltanto con operandi registri. indirizzo più lung o ed è anche p iù lenta di quelle attraverso registri in qu anto richiede u n

accesso in memoria (lento) durante la fase di preparazione dell'operando; usata in architetture

3.3.2 Diretto di memoria. di vecch ia g enerazione, oggi si tende ad abbandonarla.

È questo il caso pi ù diffuso per il riferimento ad operand i-memoria. L'operando O è L'indirizzamento indiretto è utile per la gestione dei sottoprogrammi: il testo del

direttamente l'indirizzo di memoria dal quale l'operando -so rgen te deve essere prelev ato o nel so ttoprogramma fa riferimento al supporto y (x, R oppure M[O]) ove, all'atto della chiamata

O

quale l'operando-destinazione deve essere registrato. Si ha dunque EA=O, EO=M[O ] [6]. del sottoprogramma, sarà memorizzato l'indirizzo del parametro effettivo, ignoto al tempo in

Esempi tipici sono tutte le istruzioni co n operando-memoria, a meno che non si richieda cui il sottoprogramma è compilato.

l'indirizzamento indiretto . La tecnica è anche adoperata per ampliare lo spazio di memoria indirizzabile da una

Il campo dell'istruzione ove è espresso O è dunque dimensio nato allo spazio di istruzione: esso infatti risulta commisurato all'indirizzo esprimibile in un reg istro o in una

indirizzamento della memoria, molto pi ù ampio di quello dei registri:nella tabella 3.1 è locazione d i memoria e non limitato allo spazio che un indirizzo di memoria avrebbe

mostrato lo spazio di memoria indirizzabile in funzione del numero di bit dell'indirizzo. nell'istruzione.

Tab.3.1 Bit d i indirizzamento e spazio di memoria Per con cludere sull'indirizzamento indiretto, si segnala ch e in alcune architetture delle

bit- precedenti generazioni esisteva anche un indirizzamento indiretto a più livelli , secondo il

Spazio di memoria

indirizzo quale l'operando è l'indirizzo dell'indirizzo …dell' indirizzo ov e è contenu to l'operando.

16 64 kilo

20 1 Mega È bene studiare il prossimo paragrafo prima di accedere agli esempi delle tecniche e i modi di

24 16 Mega indirizzamento .

32 4 Giga

40 1 Peta

Lo spazio di memoria indirizzabile da una istruzione non è detto che coincida con quello 4 La modifica di indirizzo

totale, in quanto ciascuna istruzione potrebbe indirizzare soltanto una zona limitata di

memoria. Inoltre, l'indirizzo espresso co n la tecnica di indirizzamento non è detto che 4.1 Schema fondamentale

coincida con l'indirizzo assoluto, a causa delle tecniche di gestion e della memoria che si La tecnica di modifica di indirizzo si applica agli operandi -memoria e consiste nel fatto

so vrap pongono a qu elle di indirizzamento (cfr. § ???). In o gni caso, dalla tabella si evince la che l'operando si costruisce attraverso apposite o perazioni di addizione, effettuate in fase di

difficoltà ad in dirizzare le memorie delle capacità odierne. preparazione dell'operando, fra du e o più componen ti implicitamente o esplicitamente indicati

dalla istru zione, fra i quali un reg istro di indirizzamento. All'operando così ottenuto si

3.4 Indirizzamento indiretto possono successivamente ap plicare le tecniche di indirizzamento sopra esposte. Il nome della

tecnica deriva dal fatto che, al variare del contenuto del registro di indirizzamento, l'indirizzo

Con l'ind irizzamento indiretto l'istruzione fa riferimento ad un "supporto" y dell’operando si modifica al temp o dell'esecuzio ne del programma e pertanto la stessa

(registro o locazion e di memoria) ove è contenu to l'indirizzo dell'operando-memoria: istruzione, eseguita più volte, può far riferimento a dati d iversi.

Per distinguere i simboli adoperati nel seguito, indicheremo un a costante facendo la

EA=y EO=M[y] (3.3) precedere dal simbolo "#"; adopereremo per il resto la simbologia di tab. 3.1:

In particolare si ha: Per la d escrizione delle tecniche di modifica, assumeremo il seguente schema

fondamentale:

EA=x EO=M[x] per y=x (3.3')

EO=M[R ] per y= R (3.3'')

EA=R - Un operando è espresso n ell'istruzione con due compo nenti:

O O O

EA=M[O], EO=M[M[O ]] per y= M[O] (3.3''')

- una costante # k; che d0, d1 etc. siano le posizioni dei campi del record da manipolare, si ha:

- l'indirizzo i di un registro di indirizzamento. cam po n. 1: #d0 + A i

- L'operan do O è costruito con la legge: cam po n. 2: #d1 + A i

O= #k + R --------------: -----------

i cam po n. N: #dn + A

- La tecnica di indirizzamento fondamentale è quella diretta e quindi, in accordo con la (3.2), i

l'indirizzo dell'operando è: Relativo a PC con displacement

4.1.3

EA= #k + R (4.1)

i È una soluzion e analoga alla precedente, solo che il registro è implicito ed è il Program

(oppure, se il registro è uno implicito di indirizzamento EA := #k + x). Counter

Esistono due distinte applicazioni della tecnica d i modifica di indirizzo:

- indirizzamento diretto co n registro-indice; Indirizzamento relativo a PC con displacement:

- indirizzamento indiretto con displacement. EA:= #d + PC (4.3')

4.1.1 Indirizzamento diretto con registro-indice: Il PC si può anche aggiungere alla (4.3 ), avendosi:

Indirizzamento diretto con registro-indice: Indirizzamento relativo a PC con displacement ed indice:

(4.2)

EA= #b + X (4.3'')

EA:= #d + PC + A

i i

ove:

- b è l'indirizzo-base (assume il ru olo di k delle 4.1); 4.2 Estensione dello schema fondamentale

, registro-indice i-esimo, è lo spostamento dell'indirizzo EA rispetto a b (assume il ruolo

- X Lo schem a fo ndamentale cui si è fatto finora riferimento può evolvere in q uanto

i

di R ). - i compon enti dell'operando posson o essere più di 2: la mod ifica avviene attraverso pi ù

i

L'indirizzamento, supposto diretto, avviene pertanto con l'indirizzo -base b modificato registri;

dall'indice X : la (4.2) pu ò essere vista come estensione, con l'aggiunta di un indice, - la tecnica di indirizzamento può essere diversa da quella diretta.

i

dell'indirizzamento d iretto (cfr. (3.2): EA=O, con O indirizzo), donde il su o nome.

Questa tecnica è utile tipicamente per la gestio ne degli array; ad esempio, la sommatoria in 4.2.1 Indirizzamento indiretto con displacem ent e ind ice

un registro R di un vettore allocato in memoria con il primo elemento all'indirizzo b ed i Le due applicazioni precedentemen te esaminate possono trovare simultanea attuazione in

su ccessivi nell'ordine agli indirizzi b+1, b+2, etc., andrebbe p rogrammata con la sequ enza: un’unica istruzione,realizzando co sì un indirizzamento con 2 registri (indiretto con

to do

for :=0 n R:= R+ M[#b+X ]

R:=0; X displagement e indice):

i i

Si noti peraltro che la gestione degli array si pu ò ottenere anch e con tecniche diverse, ad EA:=#d + A + X (4.4)

j i

esempio adoperando un indirizzamento ind iretto attraverso il registro R :

i ove:

to do

for :=#b #b+n R:= R+ M[X ]

R:=0; X i i - #d è un "displacement" (cfr. 4.2);

è un registro-indice (cfr. 4.2).

- X

4.1.2 Indirizzamento indiretto con displacement: i

- A contiene l’indirizzo-base di memoria (cfr. 4.3);

j

Varianti a questa estensione sono qu elle in cui:

Indirizzamento indiretto con disp lacement: - manca il displacement: è una soluzio ne che aggiunge un indice all'indirizzamento

(4.3)

EA:= #d + A i attraverso registri (cfr. 3.3'');

- EA:=R + X

ove: j i

è implicito:

- R

A è un banco di registri di indirizzamento; j

contiene l'indirizzo-base di memoria;

- A EA:=#d + n + X

i i

- #d è lo spostamento ("d isplacement") rispetto all'indirizzo-base..

I ruoli della costante e del registro sono dunque invertiti rispetto al caso precedente, con la 4.2.2 Modifica con indirizzam ento immediato e indiretto

differenza fond amentale che #d, dovendo rappresentare solo uno spostamento, p u ò occupare È possibile che la modifica di indirizzo si applich i ad u na tecnica di indirizzamento che

un campo di pochi bit, mentre #b doveva essere dimensionato allo spazio indirizzabile di non sia quella diretta: in tal caso è su fficiente applicare all'operand o modificato secondo le

memoria.. regole di questo paragrafo, le regole delle tecniche di indirizzamento. Si p osso no così

con tiene l'indirizzo-base, la (4.3) pu ò essere vista come estensione

Poiché X costruire particolari tecniche di indirizzamento pi ù evolute.

i

dell'indirizzamento indiretto, con l'aggiunta di un displacement (cfr.(3.3''): EA:=R ,), donde

O Per completezza si segnala infine una tecnica oggi in disuso per i grossi sistemi: la

il nome: indirizzamento indiretto (attraverso registro) con displacement. La tecnica consente modifica di ind irizzo med iante alterazione dell'istruzione.

di effettu are u n indirizzamento nell'intorno dell'indirizzo base caricato in X .

i

Per usare questa tecnica nella gestione deg li array occorre che essa sia ampliata ad una 4.3 Autoincrementi

struttu ra con pi ù registri (cfr.4.4 ). Essa invece pu ò essere utilmente adop erata per la gestione L'uso di un registro-indice o spesso richiede che esso venga incrementato o decrementato

dei record (struct di C++): supposto che l'indirizzo -base ove il record è memorizzato sia X e

i su bito dopo (o prima) che partecipi ad una istru zione che lo assuma come modificatore di

e la semantica di ciascun designatore (la natura dell'operando, la tecnica di

indirizzo: ad esempio, nella sequenza per la gestione degli array adoperata a chiarimento

della (4. 2) è prevista (dal ciclo fo r) l'operazione X :=X +1 . . Analogo è il problema per un indirizzamento, la modifica di indirizzo, etc.).

i i

registro di indirizzamento ch e venga usato come supporto per l'ind irizzamento indiretto. Il modo di indirizzamento è dunque individuato dalla classe dell'istruzione.

Alcuni processori, pertanto, implementano una tecnica di indirizzamento secondo la quale All'altro estremo si ha invece:

l'incremento è effettuato nella medesima fase di esecuzione della istru zione che adopera

l'indice, ad esempio una unica istruzione prevede le due micro operazioni di cui sopra, Nella architettura ortogo nale tutte le istruzioni hanno la medesima struttura:

incrementand o l'indice oltre ch e adoperandolo nella costruzione dell'operando.

Le tecniche possibili sono in realtà quattro, combinando fra loro l'operazione di tipo array of

operandi= (1..k) operando-generico

incremento e decremento con la po ssibilità che tale operazione avvenga prima tipo cartesiano

operando-generico =

(preincremento, predecremento) o do po (postincremento, postdecremento) d ell'operazione modo: designatore di modo (5.2)

principale richiesta dalla istruzio ne. operando: designatore di op erando

Ad esempio, se la tecnica viene applicata all'in dirizzamento indiretto attraverso registro, si end

ha: Il campo "modo" determina, dunque, operando per operando, sia la struttura sia la semantica

Indirizzamento indiretto con autoincremento : del corr ispondente designatore.

post-incremento: EA=R R := R +1 (4.5') La struttura po tenzialmente consente di effettuare su un operando di qualsiasi natura e

O O O

:= R -1 EA=R (4.5'')

pre-decremento: R comunque indirizzato una qualsiasi operazione. Tale architettu ra presenta una notevole

O O O linearità (tutte le istruzioni hanno la medesima struttura) e generalità; per contro, essa deve

gestire tutte le possibili "eccezioni logiche" (p.e., un immediato che sia operando-

La quantità dell'incremento (1 negli esempi) è determinata dalla lunghezza, e quindi d al

tipo, dell'operando su cui agisce l'istruzione; tipicamente, essa è automaticamente assunta destinazione) e deve essere implementata prevedend o che su ogni struttura fisica si debba

pari alla lunghezza del tipo di dato trattato [9]. poter effettu are ogni operazione: sono dunque necessarie ampie reti interne di trasferimento

dati. Nella realtà, so no state costruite solo architetture "quasi ortogonali".

Nel capitolo "Esempi di ling uaggio macchina" sono mostrate, unitamente con le tecniche La struttura (5.1) è, viceversa, una struttura che appare meno lineare, ma consente di

d’indirizzamento, le modifiche d ’indirizzo adottate dai processori ivi presentati; anche la ottimizzare le vie di trasferimento interne.

casistica d iscussa in qu esto p aragrafo ne risulta completamente esemplificata. Una stru ttura intermedia prevede un u nico modo esplicito nella istruzio ne, che determina la

natura di en trambi oppure di un o solo dei due operan di mentre l'altro è determinato

In tecniche e i modi di indirizzamento è presentata un'ampia esemplificazione sulle implicitamente:

architetture di riferimen to. tipo cartesiano

operandi =

modo : d esignatore di modo

5 Modo di indirizzamento e architetture ortogonali operando -1: designatore operando 1 (5.3)

operando -2: designatore operando 2

Riepiloghiamo quanto asserito al § 1: una istruzione è caratterizzata da: end

a) tipo degli operandi; Un ’ampia esemplificazione di strutture di istruzioni è presentata nel capitolo "Esempi di

b) numero degli operandi espliciti; linguaggio macchina".

e, per ciascun operando: Nell'ultimo paragrafo di tecniche e modi di indirizzamen to è esemplificato quanto sopra.

c) la "natura";

d) la tecnica di indirizzamento;

e) se si applica la modifica di indirizzo. 6 Architetture CISC e RISC

Per modo di indirizzamento si intende in senso lato il complesso delle in formazioni di cui

so pra ed in senso stretto un campo della parte operandi che esplicitamente le fornisce. Esso I primi calcolatori (anni '50 -'60) erano relativamente in tecno log ia discreta (non integrata),

determina la tecnica ed il modo di indirizzamento, sicch é un operando pu ò essere, a seconda erano quindi molto ingombranti e lenti al confronto di quelli mod erni; la concezione logica ed

del modo, u n immediato (im), un registro (R, r etc.) o una locazione di memo ria (M); diremo architetturale era però già abbastanza avanzata, se si esclu dono tutti quelli artifici legati ad un

in generale G un op erando di tal genere (cfr. tab.1.1). miglioramento delle prestazioni (memoria cache e pipelining in prima istanza).

Un campo "modo" pu ò essere attinente l'istruzio ne nel suo complesso (e quindi Con l'avvento dei microprocessori (anni '70 ) la CPU, che prima era allocata in gro ssi

determinare la tecnica di indirizzamento di ciascuno dei suoi operandi) oppure pu ò essere armadi pieni di circuiti, cominciò ad essere realizzata in tecnologia integrata VLSI: le

attinente ad un singolo operando. dimensioni ed i costi diminu irono, le prestazioni aumen tarono. I limiti, però, della tecn olog ia

Si hanno du e casi estremi di architetture, che diremo a classi d i codici operativi e a modo integrata di allora imposero scelte che. dovendo ottimizzare le realizzazioni circuitali,

esplicito, oppure ortogo nale. sacrificavano le caratteristiche architetturali e talora la regolarità delle soluzioni; esempi

tipici sono il basso parallelismo dei p rimi microprocessori, l'uso diffuso di registri impliciti

Nella architettura a classi di codici o perativi, ciascuna classe definisce la propria piuttosto che di banchi indirizzabili, l'estrema irreg olarità di molte architetture dell'epoca,

struttu ra della parte-operandi: tutte soluzioni che, da un punto di vista delle architetture, erano migliori nelle g enerazioni

precedenti.

tipo cartesiano

operandi= Parallelamente a qu esto fenomeno e con particolare riferimento alle caratteristiche del

operando-1: designatore operando 1 (5.1) linguaggio macchina, se ne sviluppò un altro, che peraltro era gi à iniziato fin dalle prime

operando-2: designatore operando 2 architetture: un ampliamento del repertorio d ei codici o perativi e delle modalità di

end

-------- 7.4 Architetture RISC

indirizzamento, per fornire all'utente soluzioni alle esigenze applicative med iante il

linguaggio macchina, mentre queste stesse soluzioni si sarebbero potute rag giun gere anche Con riferimento a quanto anticipato nel parag rafo precedente, le caratteristiche

via software, co n un a sequenza di istru zioni. Du e esempi: un codice operativo per realizzare fondamentali d i questa classe di architetture sono:

una ricerca tabellare e la tecnica di indirizzamento indiretto a catena (cfr. ??). Le architetture • repertorio di codici operativi ridotto all'essenziale;

concepite su queste basi (anche senza i casi limite su esemp lificati) vengono dette CISC • elaborazioni soltanto registro-registro, con risultato in un terzo registro[12];

(Comp lex Instruction Set Computer). • modi di indirizzamento ridotti praticamente al solo schema fondamentale di modifica di

Alla fine degli an ni '70, ancora con architettura discreta, fu prodotto un sistema [10] che indirizzo.

cap ovolgeva la tendenza d ell'epoca e che diede luogo ad una classe di architetture che fu L'architettura RISC prevede il paradigma "load registri / opera registro-registro /

detta RISC ( Reduced I nstruction Set Com puter); in seg uito le architetture RISC furono store" (Load Reg ister: R:= M, Add Registers: R := R +R , Store: M:= R).

prodotte su circuiti V LSI. La tesi p ortata avanti dai pro duttori del RISC è che l'aggiunta d i 1 2 3

istruzioni o di modi di indirizzamento più evoluti, ma che si usano raramente, crea un inutile 7.5 Altre architetture

appesantimento dell'architettura interna, a scapito delle prestazioni. Solo alcun e architetture di vecchia generazione op erano direttamente in memoria

(M1:=M2+M3 o anch e M1:= M1+M2 , R:=M1 +M2, etc.). Si tratta in generale d i soluzioni che

coesistevano con i p aradigmi di cui sopra.

7 Classificazione delle architetture 7.6 Confronti ed esempi

Sulla base dell'org anizzazione della sezione registri di macch ina e d el conseguen te

linguaggio macchina, si pu ò sv iluppare una classificazione delle arch itettu re, in: Nel seguito si mettono a confronto i paradigmi introdotti. Per fissare le idee, si consideri

• ad accumulatore la seguen te semplice elaborazione:

• CISC a registri ×(C+D)+X ×Y×Z

• F:=(A +B)

a stack

• RISC e si supponga che:

Ciascuna di queste classi è caratterizzata, oltre che da differenze negli schemi architetturali, - A, B, C, D, X, Y, Z, F so no operandi-memoria,

anche da un d iverso paradigma per la programmazion e delle elaborazioni. - T è un altro o perando -memoria che diremo "temporaneo",

- R , R ..., son o operandi-registri indirizzab ili,

1 2

7.1 Architetture ad accumulatore - a è l'unico accumulatore della omonima architettura

Possiedo no un registro accumulato re non indirizzabile al quale le istruzioni per - Stack è lo stack di registri dell'omonima architettura

l'elaborazione fanno im plicitamente riferimento: carica un dato nell'accumulato re, ag giun gi In tabella, sono usati codici operativi eguali per le tre architetture e liberamente ispirati alle architetture reali,

un dato all'accumulatore, memorizza l'accumulatore etc. Il paradigma di programmazione è ma non coincidenti con nessuna di essa:

"load accumulatore / opera accumulatore-memoria / store" (Load in to Accumulator: a:= M, • LOAD (sposta in registro) o PUSH (nello stack)

Add to Accumulator: a:= a+M, Store Accumulator: M:= a) per l'architettura ad accumulatore LOAD A significa a:=A;

o

È una soluzione diffusa nel p assato, ogg i assunta solo da qualche processore per per CISC a registri LOAD A,R significa R :=A;

o

applicazioni speciali oppure soltanto per un set limitato di istruzioni. 1 1

per RISC LOAD A,R significa R :=A;

o 1 1

7.2 Architetture a registri per stack PUSH A significa push (Stack, A).

o

Possiedo no un banco di registri indirizzabili al quale le istruzio ni per l'elabo razione fanno • ADD (aggiungi)

esplicitamente riferimento: carica un dato nel reg istro i -esimo, aggiungi un dato al registro i- per l'architettura ad accumulatore ADD B significa a:=a+B;

o

esimo, memorizza il registro i -esimo etc. Separatamente possono esistere uno o più registri - per CISC a registri ADD B,R significa R :=R +B;

o 1 1 1

indice oppu re q uesti appartengono all'u nico banco esistente, ed allora i registri sono per RISC ADD R , R , R significa R :=R +R ;

o 3 1 2 3 1 2

pienamente "generali". L'architettura prevede il paradigma "load registro / op era registro- per stack ADD significa pop (Stack.t1): pop (Stack,t2); push (Stack, t1+t2), ove t1 e t2 sono

o

memoria / store" ( Load Register: R:= M, Add to Register: R:= R+M, Store Register: M:= R), registri interni.

ma sono possibili anche istruzioni che operano registro -registro, accumulando il risultato in • MPY (moltiplica) analogo a ADD[13].

uno dei due op erandi. • STO (sposta in memoria da registro) e pop (in memoria da stack).

È la soluzione pi ù usata nelle moderne arch itetture CISC. per l'architettura ad accumulatore STO F significa F:=a;

o per CISC a registri STO R , F significa F:=R ;

o

7.3 Architetture a stack 1 1

per RISC STO F,R significa F:=R ;.

o

Possiedo no uno stack di registri (si tratta di uno stack apposito, non di uno stack in 2 2

memoria) al quale le istruzioni fanno implicitamente riferimento: carica un dato dalla per stack POP F significa pop (Stack, F).

o

memoria alla cima dello stack, addiziona i due elementi in cima allo stack e sostituiscili con Tabella 7.1. Confronto fra architetture

la somma, memorizza la cima dello stack etc.. Il paradigma è push / push / opera, con

l'operazione che avviene fra i due dati in cima allo stack e con il risultato che rimpiazza la Accumulatore CISC a RISC Stack

cima stessa. registri

Si tratta di una soluzione storica (negli anni '60 fu prodo tto un processore interamen te LOAD A,R LOAD R , A

1 LOAD A PUSH A

1 1

basato su questa architettura[11]); og gi, essa è usata in alcune sezioni da architetture diverse, LOAD R , B

2 PUSH B

2

come ad esempio nell'unità per l'elaborazion e in virgo la mobile. ADD B,R ADD R , R , R

3 ADD B ADD

1 3 1 2

LOAD R , C

4 STO T PUSH C

1

LOAD R , D

LOAD C,R Nel § 14, poi, si tratter à della estensio ne del set ai dati di tip o non fond amentale.

PUSH D

5 LOAD C 2 2

ADD D,R ADD R , R , R Per ciascuna delle classi di istruzioni di cui sopra si illustreranno esempi ispirati alle

6 ADD D ADD

2 4 2 3

MPY R ,R MPY R , R , R architetture r eali. Nell'inserto citato si leggono premesse e notazioni.

7 MPY T MPY

1 2 1 3 4

LOAD R , X

8 STO T PUSH X

2

LOAD X,R LOAD R , Y

9 LOAD X PUSH Y

2 3 9 Istruzioni di trasferimento dati

MPY Y,R MPY R , R , R

10 MPY Y MPY

2 4 2 3

, Z

LOAD R PUSH Z

11 2 9.1 Move, Load, Store, Clear, Set

MPY Z,R MPY R , R , R

12 MPY Z MPY

2 3 2 4

ADD R ,R ADD R , R , R

13 ADD T ADD

1 2 2 1 3

STO F,R STO F,R Un ’istruzione di trasferimento dati effettua l'operazione

14 STO F STO F

1 2 a:= b (8.1)

In u na architettura ad accumulatore, la programmazione dell'espressione sarebbe come

quella della prima co lonn a della tab.7.1. Il ricorso all'o perando temporaneo T è necessario ove

sempre che debba essere conservato il risultato della elaborazione effettuata mentre

l'accumulatore deve essere adoperato per altra elaborazione. ∈

a P

- è un operando-destinazione

2

Con l'architettura a registri g enerali (2^ colonna) si risparmia la variabile temporanea, che ∈

b P

- è l'operando -so rgen te da trasferire.

è so stituita da un secon do registro con funzioni di accumulatore; d i con seguenza, si 1

risparmiano le istruzioni di "store" e l'accesso alla temporanea risulta pi ù rapido in quanto Si tratta in genere di istruzioni a 2 operandi espliciti, di natura generale (G), memoria (M)

tale è l'accesso ad un operando -registro (R ) p iuttosto che ad un operando-memoria (T). Tale

1 o registro (R); l'operan do-so rgen te pu ò anche essere un immediato (im).

vantagg io si paga con una architettura pi ù complessa per la presenza dei registri generali Particolari istruzioni di trasferimento sono quelle che pongono le costanti tipiche 0 oppure

indirizzabili (piuttosto che del so lo accumulatore) e con un lieve aumento della lung hezza 1 in un operando: si dicono allora di CLEAR e di SET e sono a 0 operandi espliciti (ad

dell'istruzione (servono 4 b it in pi ù per un banco di 16 registri). esempio del tipo f:=0, f:=1) oppure ad un solo operando (G:=0, R:=0), l'op erando-

Con un'architettura RISC (3^ colo nna), invece si ritorna ad un numero più elevato di destinazione, a meno che questo non sia implicitamente definito dallo stesso codice

istruzioni in quanto è necessario sempre spostare prima gli operandi nei reg istri e poi operativo, ed allora sono a 0 operandi (ad esempio, a:=0 per una architettura ad

operarli. L’architettura è peraltro molto più semplice; si noti infatti che l'istruzione è pi ù accumulatore).

corta in quanto tutti gli operandi sono di tipo registro e che per lo stesso mo tivo la loro Le istruzioni sono specializzate per "lungh ezza" del dato co inv olto (8, 16, 32, 64 bit),

esecuzione è più rapida. Si noti inoltre che p er motivi di efficienza è opportuno usare sempre Particolari istruzioni sono qu elle per il trasferimento degli indirizzi di memoria; è infatti vero

tre distinti registri nelle istruzioni a tre operan di. che questi possono essere trattati come interi, ma non sempre la loro lung hezza è la stessa di

Per lo stack si no ti u na stru ttura che ripete da vicino quella del RISC per quanto attiene al questi ed inoltre n elle singole architetture sono spesso imposte particolari regole per la

numero di istruzioni, che sono inoltre molto brevi (nessun o o un solo operando esplicito); gestione della memoria e quindi per il trattamento degli indirizzi.

l'esecuzione delle istruzio ni, però, richiede una notevole manipolazione dello stack. In generale, l'operazione di spostamento si dice anche di MOVE e, per architetture

Infine, giova appena accenn are al fatto ch e, con una struttura a 3 operandi generali il ortogonali, è del tipo G1:=G2, mentre assume il nome specifico di LOAD se realizza uno

programma avrebbe un numero minimo di istruzioni: sp ostamento da memoria a registro (R:=M, a:=M)), di STO RE se lo spo stamento è in senso

R :=A +B; R :=C+D; R :=R *R ; R :=X *Y; R :=R *Z; F:=R +R inverso (M:=R, M:=a).

1 2 1 1 2 ; 2 2 2 1 2

Tale struttu ra, infatti, esiste solo in applicazioni speciali e in qualche architettura obsoleta 9.2 Push e pop

ed è comunque inefficiente. Il trasferimento dati da o v erso un puntatore a stack avviene con le operazioni di push e

pop (talora dette pull).

8 Il set di istruzioni Un ’istruzione di trasferimento da o verso uno stack è un’operazione d i push o pop :

In questo e nei paragrafi che seguon o sarà sv iluppata una panoramica delle principali pushm (a, b); popm (a, b) (8.2)

istruzioni in lingu aggio macchina, classificate come segue (le istruzioni di ingresso/uscita,

I/O, saran no trattate nel cap.???) ove:

di trasferimento dati,

1) - a è il puntatore allo stack,

2) aritmetiche e logiche - b è l'origine o la destinazione del dato.

3) di co mparazione, Se il puntatore allo stack di memoria pu ò essere liberamente scelto dal programmatore,

4) di salto semplice e condizionato, l'istruzione è a 2 operandi espliciti (p.e. pushm(R, G ); nelle architetture moderne è pi ù

5) di co llegamento con sottoprogrammi, diffuso il caso del puntatore implicito (pushm(SP,G)) e in qualche architettura antica

Per quanto attiene alle rappresentazione dei dati, si fa riferimento a quanto gi à presentato entrambi gli op erandi son o impliciti (pushm(SP,a)).

al cap. 2. Nella illustrazione delle classi d i istruzion i di cui sopra si prendono in esame le istruzioni di trasferimento dati è presentata nell'inserto.

Un ’ampia esemplificazione di

istruzioni che si riferiscono, salvo esplicito avvertimento contrario, a quello ch e diremo

convenzionalmente 10 Istruzioni aritmetiche e logiche

Tipo di dato fond amentale:

dato in virgola fissa di lunghezza pari al parallelismo base del processore 10.1 Istruzioni aritmetiche

aritmetico: mashl (a, b) mashr (a,b)

Un’istruzione aritmetica effettua un'operazione binaria:

a: = b (op) c (9.1) Nelle architetture moderne sono d iffusi gli shift multipli ed allora:

oppure unaria: • lo shift semplice è a tre operandi (ma molte macchine fissano b=0), ed il numero di shift

a: = (op ) b (9.2) può essere in un registro o essere implicito, p.e.:

mshr (R1,0,R2): shift a destra R1 con immissio ne di 0 R2 volte

o

ove: mshl (R1,0 ,im): shift a sinistra R1 con immissione di 0 im volte

o

- a è l'operando-destinazione • lo shift aritmetico è simile a quello logico, ma se a destra deve conservare il segno, p.e.:

- b, c sono gli operandi -so rgen te mashr (R1,s): shift a destra R1 il numero di volte contenuto nel registro speciale

o

- (op) è un operatore binario oppure unario: tipici operatori binari sono + Tipicamen te s

individuato dal codice operativo ADD o simili), - (SUB), * (MOLT), / (DIV ); operato ri unari • lo shift circolare (detto anche ro tate) ha ancora struttura simile:

so no - (NEG), valore assoluto (ABS), etc. mcir (R1,im): ruota a destra R1 im volte

o

Nelle architetture CISC, spesso si assume a=b; le operazioni allora si trasformano istruzioni aritmetiche, logich e e di shift è presentata

Un ’ampia esemplificazione di

rispettivamente in : nell'inserto.

a:= a (op) c (9.1')

a:= (op) a (9.2')

e l'operando a assume la duplice funzione di sorgente e destinazione, fungendo da 11 Posizionamento dei flag. Comparazione e test

accumulatore e riducendo gli operandi coin volti rispettivamente a due e uno.

Anche le o perazioni aritmetiche sono ovviamente specializzate per tipo di dato, e non solo Gli indicatori N, Z, C, etc. di cui al § I.1 3.8 ??? possono essere posizionati in conseguenza

a causa della differente lunghezza (b yte, 16 bit, 32 bit, 64 bit), in quanto gli algoritmi della esecuzione delle istru zioni di trasferimento e calcolo, mantenendo così memoria d i

invo cati sono diversi se gli operan di sono intesi come interi o reali, in aritmetica binaria o alcune caratteristiche delle elaborazioni appena effettuate. Ad esempio, gli indicatori Z, N e

decimale. Per le operazioni un arie, addizioni e sottrazioni, la struttu ra delle istruzioni CISC è V p ossono essere posizionati a seguito della esecuzione di un’istruzione aritmetica, a seconda

a nessun operando (p.e. a:=-a) un operando (G:=-G), due operan di (G1:=G 1+G2, R:=R+G); le che il risultato ottenuto sia nullo, negativo, positivo o abbia prodotto overflow. Si ha dunque:

istruzioni RISC sono tipicamente a tre operandi (R1:=R2+R3). Sono presenti an che istruzioni

nelle quali un op erando è immediato (G:=G+im, R1:=R2+im). L'esecuzione di una qualsiasi istruzione pu ò produrre come effetto collaterale il

Struttura diversa hanno le operazioni di moltiplicazione e divisione, e ci ò per due motivi: posizionamento di un indicatore.

1) si ricorda che il risultato ha un numero di bit doppio di quello degli operandi[14]; esso, pertanto, o va

allocato in due registri-destinazione (R:=R*G, ma il registro-destinazione va inteso come due registri I flag memorizzano così uno "stato del programma" che p u ò essere successiv amente

consecutivi) oppure in un registro speciale (s:=R1*R2); "interrog ato" dalle istruzioni di salto co ndizionato (cfr. in seguito).

2) diversi sono gli algoritmi se gli operandi sono da intendere unsigned (numeri naturali) oppure signed Oltre che come effetto collaterale, i flag sono anch e posizionati come effetto primario della

(rappresentati in complemento); spesso, allora, i codici operativi sono sdoppiati (p.e. MULT e MULTU). esecuzione d i app osite istruzioni dette di comparazione.

In una classe diversa vanno posti i codici operativi usati per calcolare gli indirizzi degli

operandi opp ure variabili di controllo: le prime hanno struttura analoga alle operazion i di Un’istruzione di comparazione produ ce l'effetto:

addizione e sottrazion e, ma si riferiscono tipicamente a registri d indirizzamen to (ADD A, Add [15] (10.1)

cc:= a :: b

to Add ress: X:=X +G), le seconde operazioni tipiche di controllo come l'aggiunta di u na unità

ad un contatore (X:=X+1 ma anche G:=G+1), ove:

- a, b sono gli operandi -so rgen te

10.2 Istruzioni logiche - cc rappresenta l'insieme dei flag da posizion are, che dun que è un operando-destinazione,

Simili per struttura alle operazio ni di addizione e sottrazione sono quelle log iche, intese costituito in g enere da pi ù di un bit

applicate ad array di bit delle lunghezze corrspon denti a quelle dei dati aritmetici: o peratore - :: è un simbolo usato per indicare il confronto

unario NOT ed operatori bin ari AND , OR , X OR. Il confronto è sp ecializzato per tipo di dato: per operandi aritmetici il confronto equivale

Poco diffuse sono le operazio ni su l tipo boo leano semplice (singolo bit) mentre sono in genere ad effettuare l'operazione a-b e nel posizio nare coerentemente i flag, cosicché, ad

presenti in sostanza in tutti i processori le operazioni sul tip o array di bit. esempio:

- se a > b , allora Z=0, N=0

10.3 Shift - se a = b , allora Z=1, N=0

Fra le operazioni logiche classificheremo anche le operazioni di shift co sì come definite al - se a < b , allora Z=0, N=1

§ I.4 .1 ???: in genere presenti nel repertorio delle istruzioni di un processore. Una istruzione di comparazione, dunque, fa riferimento ai due operandi da confrontare (G,

Operazioni di shift di 1 bit: M, R, im) ed implicitamente ai flag da posizionare[16]; ad esem pio R1::R2 , G::R, R::im.

Se cc si riduce ad u n solo bit, allora si hanno istruzioni di "set bit per comparazione". è

semplice o logico: sh l (a,b) sh r(a,b) questa la soluzione adottata dalle architetture RISC, ma anche da architetture storiche:

circolare; cil (a) cir (a)

aritmetico: ashl (a) ashr (a) Un’istruzione di set per comparazione produce l'effetto:

Operazioni di shift multiplo: (9.3) b:= a (R) b (10.2)

semplice: mshl (a,b. c) mshr (a,b,c)

circolare; mcil (a. b) mcir (a, b) -

ove: in base al tipo di salto, che pu ò essere:

assoluto (jump condizionato): prox=c

o

- a, b sono gli operandi-so rgen te relativo (bran ch condizio nato): prox= PC+c

o

- b è il bit da posizionare, che pu ò essere un flag o un bit di un registro

- (R) è una relazione binaria (>,<,=, etc, per op erandi aritmetici), solo = per operandi log ici Le istruzioni che operano su coppie d ’operandi assumono la forma:

if then

Ad esempio, per un'architettura RISC si posizio na ad 1 il registro R1 se è R2>R3. cosa che a cc b PC:=prox

scriveremo R1:=R2>R3 confondendo l'1 logico con l'1 aritmetico, ≤

ove cc identifica una relazione fra i due operandi, ad esempio >, <, =, etc.: si dicono dunque "salta se

Le istruzioni di comparazione ven gono dette di TEST se confrontano un operando con lo maggiore", "salta se minore" etc: si adoperano in merito acronimi tratti dalla lingua inglese (p.e. GT. Greather

zero: posizionano, allora il flag se l'o perando (un bit oppu re un operando aritmetico) è 0 e Than per maggiore) e le istruzioni si dicono di JUMPcc (o BRANCHcc), ove cc, iniziali di Condition Code, è

quin di ne "testano" il v alore. l'acronimo di cui sopra (p.e. JUMPeq, BRANCHgt, etc.).

Si tratta di istruzioni a due operandi (i due membri del confronto) che possono essere

istruzioni di posizionamento dei flag e di comparazione è

Un ’ampia esemplificazione di entrambi espliciti. Queste istruzioni richiedono tre operandi (a, b, prox) e sono tipiche delle

presentata nell'inserto.. if then if then

architetture RISC che sono a tre operandi: R1>R2 PC:=im oppure R1>R2

PC:=PC+im. In qualche caso il confronto avviene fra un operando e lo zero:

12 Istruzioni di salto if then

a cc 0 PC:=prox

Le istruzioni che operano su i flag assumono la forma:

12.1 Salto semplice if then

cc PC:=prox

Un ’istruzione di salto definisce l'in dirizzo d ella pro ssima istruzione da essere eseguita ove cc identifica la funzione logica sui flag interessati. Si ricorda che i flag possono essere posizionati da una

dopo se stessa. Equivale ad una semplice operazione di trasferimento dell'indirizzo definito istruzione di comparazione immediatamente precedente alla istruzione di salto ed allora verificare i flag

dall'operando verso il registro PC. equivale a confrontare i due operandi della comparazione. L'acronimo cc assume allora lo stesso significato

dell'analogo confronto fra operandi: se uguale (ed allora si verifica se è Z=1) se minore (se N=1), se maggiore

Un ’istruzione di salto semplice o in condizionato p roduce l'effetto: o eguale (N=0 or Z=1), etc.. L'unico operando esplicito di queste istruzioni è prox, in quanto i flag sono

PC:= prox (11.1) impliciti. In particolare, cc può riferirsi ad un solo flag, ed allora è del tipo

if then

f prox (p.e. if Carry, detta anche if Carry Set )

L'operazione è effettuata durante la fase esecuzione

ove prox è l'indirizzo della prossima istruzione[17]. if then

not f prox (p.e. if Not Overflow, d etta anche if Overflow Clear)

dell'istruzione e pertanto è annullato l'effetto del posizionamento del PC (1.1??) nella fase fetch della stessa

istruzione. Con le istruzione di salto condizionato si realizza una diramazione nel programma in modo

L'istruzio ne di salto pu ò essere: che u n ramo sia scritto in sequenza, l'altro in un posto qualsiasi, che inizia all'indirizzo prox.

Ad esem pio, una str uttura if-then-else si realizzerebbe come segue:

• asso luta (e viene allora anche detta d i JUMP): prox coincide con l'operando a

dell'istruzione: if then

L PC:= prox

prox=a;

o diramazione 1, ramo else}

• relativa (viene detta di BRANCH): l'operando a dell'istruzione esprime un incremento .......

dell'indirizzo corrente di PC, detto anche displacem ent oppure offset: goto fine

prox= PC+a

o prox : {diramazione 2, ramo then}

........

L'operan do a pu ò essere un immediato (prox=im), ma di tipo indirizzo oppure può essere fine :.......

contenu to in un registro indirizzabile (prox=R) o implicito (prox=r). o anche in un oprtersndp

generale (prox=G ). In alcune architetture del passato si adoperava u na tecnica diversa, detta di sk ip, secondo

In alcune architetture i salti incondizionati sono anche realizzate come caso particolare di la qu ale l'istruzione provoca l'eventuale salto di una sola istruzione.

istruzioni di salto condizionato, con una condizione identicamente vera. istruzioni di salto condizionati e non è presentata

Un ’ampia esemplificazione d i

12.2 Salto condizionato nell'inserto.

Le istru zioni di salto condizionato son o le costituenti fondamentali delle strutture di

controllo dei linguaggi ad alto livello (if -then, if-then-else, repeat-until, while -do, for, etc.). 13 Istruzioni di collegamento con sottoprogrammi

Esse determinano o no n un salto in funzione del valore dello "antecedente" L:

Una istruzione di salto condizionato produce l'effetto: L'istruzio ne di sa lto a sottoprogram ma produce essenzialmente la duplice

if then

L PC:= prox (11.2) operazione: a:= PC; PC:= b (12.1)

ove

- prox è l'indirizzo dell’istruzione cui saltare, e cioè il salvatag gio del Program Counter in a (operando-destinazione), al fine di consentire

- L è una semplice espressione logica. il successivo ritorno dal sottoprogramma al programma chiamante, ed il salto all'indirizzo b.

Le istruzioni sono classificabili: Per effetto di questa istruzione l'elaborazione prosegue, median te un salto, con

l'esecuzione del sottoprogramma (che inizia da b) mentre l'ind irizzo della istruzione dalla

- in base all’espressione logica L, che pu ò essere: quale è stato effettuato il salto (o quello seguente) viene memorizzato in a, sicché al termine

una relazione fra una coppia d’operandi: a (R) b;

o del sottoprogramma si p otrà di nuovo salare ad a e riprendere il programma chiamante. A

una defin ita com binazione di valori di alcuni flag (o, il che è lo stesso, la

o secon da delle istruzioni e delle architetture si realizzano diverse soluzio ni a second a della

funzione boolean a sui flag interessati)

natura dell'operando a ove viene salvato PC: si hanno tipicamente le seguenti tecniche per indirizzamento è in generale ulteriormente elaborato perch é diventi l'indirizzo effettivo di

salvare l'indirizzo di ritorno: memoria MA in base al quale si compie l'accesso in memoria:

- Salv ataggio in registro indirizzabile: viene esplicitato nella istruzione un registo generale; MA := g(EA)

- Salv ataggio in registro implicito: l'istruzione fa implicito riferimen to ad un registro Le tecniche usate a tale scopo sono anche complesse ed esorbitano dalla trattazione

sp eciale oppure ad uno dei registri generali; introduttiva di questo capitolo . Allo scopo tuttavia di fissare le idee e prendend o spun to

dall'arch itettura dell'8086 , si illustra una soluzione semplice. Essa consiste nell’ulteriore

- Salv ataggio in un o stack di memoria, controllato dallo stack pointer SP: pushm (SP, PC); aggiunta all'ind irizzo effettivo del contenuto di un registro speciale RS (Registro Segmento ):

- Salv ataggio in memoria, nell'area destinata alla subroutine, ad esempio una locazione MA := EA + RS

immediatamente precedente quella cui saltare (b=a+1 ). È una soluzion e presente in vecchie

architetture, oggi abbandonata In generale (non nell'8086), questa tecnica è adoperata per due scopi diversi:

- ampliamento dello spazio indirizzabile,

L'istruzio ne di ritorno da sottoprogramm a si realizza con un salto all'indirizzo - "allocazione dinamica" hardware.

salvato in fase di chiamata dello stesso: Per l'ampliamento dello spazio indirizzabile, RS contiene una costante che viene alterata

PC:= a (12.2) quando occorre far riferimento a zone diverse di memoria. Esiston o tecniche div erse con nesse

a questo problema (indirizzamento a segmenti, memoria paginata, memoria virtuale) che in

Il ritorno d al sottoprogramma in assenza di stack si realizza semplicemente con un salto al alcuni casi sono gestite dallo stesso p rogramma di utente, in altri dal sistema operativo. In

contenu to del registro (o della memoria) ove l'indirizzo di ritorno è stato salvato all'atto della particolare si veda la segmentazione di memoria per l'8086d.

chiamata e pertanto non esistono istruzioni specifiche. L'allocazione din amica co nsente di spostare programmi e dati da una zona ad un'altra di

In presenza di stack esiste in vece un ’istruzione apposita, simmetrica a quella di push: memoria senza dover riscrivere il programma, ma semplicemente ridefinendo il valore di RS.

popm (SP,P C) La tecnica è adoperata da sistemi operativi multiprogrammati, ad esempio dopo che un

programma sia stato estromesso dalla memoria per far posto ad altri, quan do il prog ramma

Sia il salto a subrou tine sia il ritorno possono essere in qualche soluzione condizionati; ad stesso deve rientrare in memoria, ma in una zona div ersa da quella che occupava in

esempio, la chiamata o il ritorno possono essere subordinati ad un flag, come "branch a precedenza.

su broutine if overflow" oppure "riuto rna se Carry". Altre soluzioni consento no di modificare l'in dirizzo "virtuale" EA nell'indirizzo effettivo

MA mediante una tabella di trasformazione (in genere realizzata a livello di b locchi di

L'operazione di salto a subroutine richiede in generale di risolvere anche il problema dello indirizzi o "pagine"), allo scopo di rendere in dipendente l'indirizzamento virtuale, cio è quello

scambio di parametri tra programma chiamante e sottoprogram ma. Questo problema è in al quale si fa riferimento in programmazione, da quello fisico: tipica è la tecnica della

generale risolto attraverso apposite sequenze di istruzio ni poste in testa al sottoprogramma; cosiddetta "memoria virtuale", con la quale a liv ello di programmazione si opera come se la

per gestire il nesting delle chiamate è utile in queste sequenze l'uso di stack, che vengono poi memoria fosse pi ù ampia di quanto in effetti non sia: la funzione g(EA) trasforma l'ind irizzo

ripristinati all'atto del ritorno al programma chiamante. virtuale in quello reale oppure segnala che il dato indirizzato virtualmente non esiste in

In alcuni linguaggi macchin a (ma non nelle architetture più moderne) esistono, in aggiunta memoria centrale ma è in memoria di massa: il sistema, allora, provv ede a caricare in

a q uelle esaminate, alcune istruzioni di "call a sub routine" che gestiscono via hardw are detti memoria centrale il dato richiesto e a renderlo disponibile.

stack; laddo ve tali istruzioni non esistano, si realizza una gestione softw are degli stack e, p i ù

in generale, lo scambio di parametri fra prog ramma chiam ante e subroutine.

istruzioni di collegamento a sottoprogrammi è presentata

Un ’ampia esemplificazione di 16 Istruzioni a blocchi

nell'inserto. Allo scopo di rendere pi ù efficiente la ripetizione di una stessa operazione su pi ù dati

elementari che costitu iscono un'unica struttura dati a livello più elevato, i processori più

14 Estensione del set di istruzioni evoluti contengono nel linguaggio macch ina apposite istruzioni a blocchi o ripetute o

composte. Si tratta in generale di istruzioni che imp lementan o semplici cicli di

L'insieme dei codici operativi mostrato nei paragrafi precedenti fa riferimento al tipo programmazione, essenzialmente per spostare (move) un blocco di dati lungo N da una zona

fondamentale di dato, inteso come d efinito nel § 8 ad un'altra di memoria[18].

Le istruzioni di move, aritmetich e e di confronto ed in qualche caso q uelle logiche si Tali istruzioni necessitano di un numero di o perandi maggiore di quello delle istruzioni

estendono peraltro ai diversi tipi trattati dai singoli p rocessori: rapp resentazioni decimali, semplici (indirizzi dei blocchi sorgente e destinazione, lunghezza N, informazioni ausiliarie),

virgola mobile a diverse dimensioni, stringhe di caratteri. La diversità dei codici operativi per che sono contenuti o esplicitamente nelle stesse istruzion i, in tal caso caratterizzate da un

i div ersi tipi dipende sia dal diverso parallelismo ch e il processo re deve attivare nei vari casi, particolare formato , oppure implicitamente in registri di macchina appositamen te destinati.

sia dai diversi algoritmi: si pensi ad esempio ad un ’operazione aritmetica in virgola fissa o in Spesso (?), le istruzioni sono costituite da un prefisso che in dica la ripetizione, il codice

virgola mobile, ai diversi indicatori da posizionare e così via. operativo dell'istruzione da ripetere e gli operand i associati. Fra questi, il numero di

In linea d i principio, p ertanto, i cod ici illustrati vengono ennuplicati se n son o i tipi ripetizioni è in genere contenu to in uno dei registri di macchina COU NT che vien e

diversi trattati dal processore; in realtà, per ovvi motivi di economia, non tutte le possibilità decrementato di una unità in ogni ciclo: il ciclo termina quando il con tatore raggiunge il

previste sul tipo fondamentale sono sempre estese ag li altri tipi. valore 0:

Un ’ampia esemplificazione di estensione del set di istruzioni è presentata nell'inserto. COU NT:= N

while do

COUNT>0 (14.1)

begin COUNT:= COUNT -1

15 Gestione della memoria {esegui operazione sull'elemento (N -COU NT) -esimo}

end

Nel caso di o perandi -memoria, l'indirizzo EA costruito dalla mo difica e dalle tecnich e di

Tutto il ciclo avviene all'interno della fase execute e quindi il tempo di esecuzione si

riduce, poich é la fase fetch è esegu ita una v olta sola.

[1] Coerentemente con il modello della fase di fetch di cui al § IV.6.2 ogni istruzione definisce di norma la sua prossima

come quella che immediatamente la segue staticamente ((PC:= PC+1). Le sole istruzioni di salto, come si vedrà, Istruzioni a 0 operandi

definiscono il valore di PC in modo diverso.

[2] Qui e nel seguito useremo una notazione di un ipotetico linguaggio assembler che riflette la struttura del linguaggio (esempi non esplicitamente riferiti alle architetture di riferimento)

macchina

[3] Per una definizione di CISC e RISC si veda in seguito.

[4] Sono state anche usate rappresentazioni in virgola mobile, ad esempio, tre bit di esponente e cinque di mantissa.

[5] Si avrà dunque in fase di esecuzione della istruzione Detti:

destinazione := R se O è operando -sorgente

O

R := <dato elaborato> se O è operando -destinazione - d: l'unico accumulatore (tab.1.1)

O

[6] Si avrà dunque in fase di esecuzione della istruzione - f: un flag (tab.1.1)

destin azione := M [O] se O è operando -sorgente - SP: il registro speciale stack-pointer (tab.1.2)

M [O]:= < dato elabo rato> se O è operando -destinazione

[7] Le operazioni per la costruzione di EA sono ovviamente di tipo indirizzo e, pertanto, devono adeguarsi alle regole di sono esempi di istruzioni a 0 operandi espliciti (gli acronimi che individuano il codice

rappresentazione degli indirizzi; supposto ad esempio che l'indirizzo sia un intero a 16 bit, le (3.3) devono intendersi operativo sono tratti liberamente dalla terminologia adoperata in alcuni linguaggi

adattate a tale lunghezza; se pertanto il registro o la memoria che fungono da operando-sorgente sono a più di 16 bit, assemblativi, per esempi concreti cfr. altri inserti):

deve intendersi che l'operazione trasferisce solo alcuni dei bit; se, viceversa, è ad 8 bit, deve sottintendersi una

operazione che ricostruisca i bit necessari per l'indirizzamento. Clear Accumulator (CLR): d:=0

[8] Si avrà dunque in fase di esecuzione della istruzione Shift Left Accumulator (SLA): shl (d,0)

destinazione := M [R ] se O è operando -sorgente Push Accumulator (PSH): pushm (SP, d)

O

M [R ]:= < d ato elabor ato> se O è operando -destinazione

O Pop Accumulator (POP): popm (SP, d)

[9] Sono state usate anche tecniche diverse, Ad esempio, nell'UNIVAC 1100 l'incremento era contenuto in un registro Clear flag (CLF): f:=0

speciale "gemello" del registro X , opportunamente manovrato dal programmatore.

i Set flag (STF): f:=1

[10] IBM 801

[11] Il Burroughs B/550 del 1963. Sono ancora a 0 operandi alcune istruzioni di move fra registri entrambi impliciti. Detti:

[12] In qualche architettura c'è il vincolo che i tre registri siano diversi. - d1, d2: i due accumulatori in una macchina senza registri indirizzabili

[13] In realtà, per la moltiplicazione esiste qualche problema dovuto al fatto che il risultato ha in generale un numero di

bit doppio di quello dei fattori e che di ciò anche la programmazione è influenzata. Ad esempio. nell'architettura RISCd - s: un registro speciale

esemplificata nel seguito, il codice operativo MULT richiede solo 2 operandi espliciti e il risultato dell'operazione viene sono esempi di istruzioni di trasferimento a 0 operandi:

immagazzinato in due registri speciali impliciti ciascuno di 32 bit, detti HI e LO; ne segue che dopo la moltiplicazione è

necessario il trasferimento del risultato in registri generali (esistono all'uopo appositi codici MFHI, MFLO, MTHI, Transfer a in b (TAB): d1:= d2

MTLO). La sequenza dell'esempio, allora, si allunga ulteriormente. Per semplicità, o shema esemplificato ignora questo Transfer b in a (TBA): d2:= d1

problema. Transfer p in a (TPA): d:= s

[14] La questione è trattata approfonditamente nel capitolo dell'aritmetica; intuitivamente basta considerare che il

prodotto di due numeri di n cifre è in genere di 2n cifre. Sono ancora a 0 operandi alcuni salti, quali:

[15] In qualche caso si adopera anche una relazione unaria f:=(R)a. if then

Skip on Flag Clear (SFC): f=0 PC:= PC+2

[16] In una particolare architettura RISC, il Power PC, esistono più registri CCR, indirizzabili, e tale indirizzo compare

come operando. if then

Skip on Flag Set (SFS): f=1 PC:= PC+2

go to

[17] Indicheremo talora come questa istruzione.

a Detti infine:

[18] Nel passato sono state anche realizzate istruzioni a blocchi più complesse, come:

• "cerca in una tabella, allocata in memoria in N locazioni consecutive, se esiste (e ove sia posizionato) un dato - N: flag "negativo"

eguale (o maggiore, o minore) di quello contenuto in un registro di riferimento" - Z: flag "nullo"

• "addiziona ad un registro (o all'accumulatore) tutti i dati di una tabella allocata in N locazioni consecutive di sono istruzioni di comparazione a 0 operandi:

memoria" Test su Acc. (TST): Z:= d=0; N:= d<O

ove la notazione significa che Z=1 se e solo se a=0 ed analogamente per N.

Istruzioni a 1 operando Le tabelle che seguono mostrano i simboli usati per individuare la natura degli operandi

coinvolti in un'istruzione (per il simbolo G si veda il § 5). Per gli operandi che si riferiscono

(esempi non esplicitamente riferiti alle architetture di riferimento) a registri speciali si usano i simboli di tab. 1.2.

Tabella 1.1 – Simboli per individuare la natura degli operandi

Simbolo Significato

Le istruzioni a 1 operando esplicito sono tipiche delle architetture ad accumulatore oppure im Operando immediato

a stack. In esse tutte le istruzioni fanno allora implicitamente riferimento all'accumulatore o M Operando memoria

alla cima dello stack come secondo operando. Detti: f Singolo flag implicito

r, R Registro generale implicito o indirizzabile

- O1: un operando esplicito qualsiasi (a seconda dei casi registro o memoria); d, D Accumulatore implicito o registri-dati indirizzabili

- d: l'accumulatore; a, A Registro implicito o banco indirizzabile di indirizzamento

- S lo stack , x,X Registro implicito o banco indirizzabile di registri-indice

s, S Registro speciale implicito o indirizzabile

sono esempi di istruzioni di move e binarie a 1 operando esplicito: Operando “generale”: a seconda dei modi d’indirizzamento, è un registro,

G

Load Accumulator (LDA O1): d:= O1 un operando-memoria o un operando-immediato

Add to Accumulator (ADD O1): d:= d+O1

Subtract to Accum, (SUB O1): d:= d-O1 Tabella 1.2 registri di controllo e di stato

Multiply by Accum. (MPY O1): d:= d*O1 Si mbol o

Tipo di regist ro

and

And Accumulator (AND O1): d:= d O1 Unif icat o

Store Accumulator (STO O1): O1:= d Registr o di stato SR

Load stack (LST O1): push (S,O1) Registr o indicator i CCR

Store stack (STO O1): pop (S, O1) Stack pointer SP

Pr ogram Counter PC

Sono esempi di push e pop in memoria ad un operando:

push (PSH O1) : pushm (SP, O1)

pop (PULL O1): popm (SP, O1)

Sono inoltre esempi di istruzioni di salto e comparazione:

Goto (GOTO O1): PC:= O1

if then

Skip (Test) on Zero (TZ O1): O1=0 PC:= PC+2

if then

Jump on Zero (JOZ O1): d=0 PC:= O1

if then

Jump on Positive (JOP O1): d>0 PC:= O1

Compare (test) (TST O1): Z:= O1=0; N:= O1<O

if then

Branch on Zero Set (BZS O1): Z=1 PC:= O1

if then

Branch on Flag Set (BFS O1): f=1 PC:= O1 1.2 Architettura 68000d

Struttura delle istruzioni Possiede istruzioni di lunghezza variabile da uno a cinque parole: di queste, la prima (detta

opcode word) fornisce codice operativo, modo d ’indirizzamento e lunghezza della stessa

istruzione. Esistono molti formati distinti: un campionario del formato della prima parola è

• Qui sono presentate le architetture esemplificate mostrato in fig.3.2.

• Qui la legenda dei simboli per indicare la natura di un operando 15

• 0

Qui i simboli generali e specifici per individuare i registri di macchina a) op

15 2

1.1 Architettura 8086d 3 0

b) op R

Le istruzioni sono a lunghezza diversa, da 1 a 6 byte. In fig. 3.1 se ne mostra un

campionario. Si noti: 15 7 6 5

8 0

• l'istruzione ad un solo byte (fig. 3.1a) che, in mancanza di spazio, indirizza c) op tipo EA

implicitamente gli operandi;

• il campo modo, detto "post byte" (fig. 3.1b, e), che definisce il modo di indirizzamento 15 11 5

12 6 0

esplicito; in esso oltre al modo d’indirizzamento è indicato anche il registro di modifica; d) op tipo EA1 EA2

• i bit w , s che indicano il tipo di dato (byte, word, long) e quindi anche, nel caso

d’immediato, la lunghezza dell'istruzione; in fig. 3.1d, ad esempio, se w =1 l’operando 15 11 8 5

12 9 6 0

immediato è di 16 bit e quindi richiede un secondo byte per essere rappresentato, portando e) op R o1 tipo EA

a 3 byte la lunghezza dell’istruzione; 15 11 7

• alcuni formati determinano implicitamente il modo d ’indirizzamento (ad esempio, d) è 12 8 0

immediato-registr o; f) op cond displacement

• il formato di fig.3.1e) fa implicito riferimento all'accumulaore AX e, a seconda dei casi,

ad un immediato o ad un operando-memoria op = Codice operativo o1 = completa op

EA = Effective Address R = registro operando (A oppure D)

7 tipo = byte, word o long cond = condizione (per il salto)

0 Figura 3.2 Formato delle istruzioni del 68000d:

a) op a) indirizzamento implicito¸ b) ad 1 operando -registr o;

c) ad 1 operando generale; d) Move da EA2 ad EA1;

7 0 7

2 0 e) a 2 operandi (registro-generale); f) salto condizionato;

b) op d w modo .

7 3 7 Le parole successive contengono, a seconda del formato e del modo, l'operando immediato

4 0 0 e gli indirizzi degli operandi. Le istruzioni operano sul tipo byte (8 bit), word (16) o long (32

c) op cond displacement bit), così come specificato nel campo "tipo" (cfr. § 5 per dettagli). Si noti in particolare:

7 2 7 7 i codici operativi sono a lunghezza variabile, dai 16 bit delle istruzioni con operandi

4 0 0 0 totalmente impliciti (fig.3.2a) ai 2 del codice move (fig.3.2d), che sono 00 (ovviamente,

d) op w R dato cont. dato se w=1 nessuno degli altri codici operativi inizia con 00);

• il tipo dell'operando è codificato su due bit, in posizioni diverse;

7 0 7 7 • Gli operandi di tipo registro sono identificati del campo R a tre bit che a seconda dei

1 0 0 casi individuano un registro A oppure uno D;

cont. dato se

dato/ • Gli operandi indicati come EA possono essere. a seconda delle specifiche che si leggono

e) op w w=1/

address cont. addres s in EA stesso (cfr. § 5), di tipo immediato, registro o memoria.

La memoria del proc essore è indirizzata a byte, la macchina ha parallelismo-base di 16 bit;

7 0 7 7 7 l'istruzione deve essere allineata sui m argini di parola , ovvero posta ad indirizzo multipli di

2 0 0 0 2.

f) op s w modo dato cont, dato se

sw=01

Figura 3.1. Formato delle istruzioni dell'8086d. 1.3 Architettura RISCd

a) indirizzamento implicito; b) memoria -registro; c) salto condizionato; Il RISCd presenta le seguenti caratteristiche essenziali, tipiche delle architetture Risc:

d) registro-immedia to; e) Accumulatore -(memoria o immediato) • le istruzioni sono tutte della medesima lunghezza (32 bit), con 3 soli formati (cfr. fig.

f) (registro o memoria) - immediato. 3.3), tipicamente a 3 operandi;

• il numero di codici operativi è relativamente basso (meno di 100 rispetto ai circa 250

La memoria del processore è indirizzata a byte, la macchina ha parallelismo-base di un del V AX 11/780);

byte; l'istruzione può avere un indirizzo qualsiasi. • si accede alla memoria solo attraverso le operazioni di trasferimento da/verso i registri

(store/load).

• le istruzioni aritmetiche e di confronto operano solo sui registri;

• i modi di indirizzamento sono estremamente limitati (cfr. § 5).

In particolare sulla fig. 3.3 si noti che:

• Le istruzioni load e store usano il formato di fig.3.3a), con R2 registro sorgente o

destinazione e R1 registro-indice a modifica dell'indirizzo offset.

• Le istruzioni di salto usano il formato J -format, ma il salto indiretto attraverso registro

usa il formato R-format Un particolare problema di interpretazione e di terminologia si ha per le istruzioni di salto.

• Le istruzioni aritmetiche usano il formato R-format a tre registri. In esse l'operando è di tipo indirizzo e quindi per indirizzamento immediato deve intendersi il

31 25 20 15 fatto che O è l'indirizzo della prossima istruzione e quindi che O è l'indirizzo dell'operando;

0

26 21 16 ma, in base alla definizione che dice "nell'indirizzamento diretto O è l'indirizzo

Op X / R1 R2 offset / I3 dell'operando", ci ò significa anche che l'indirizzamento è diretto:

a) Nel caso di istruzioni di salto, indirizzamento immediato e diretto coincidono.

31 25

26 0

Op Indirizzo

b)

31 25 20 15 10 5

26 21 16 11 6 0

Op R1 R2 R3 m Op1

c)

R1, R2, R3 = oper andi -registr o

I3 = oper ando im mediato

Indirizzo = ind ir izzo di salto

m = cam po ignor ato o costante per shift multiplo

Op1 =seco nda par te codice o per ativo

Fig. 3.3 Formato delle istruzioni del RISCd:

a) I-format (imediato, load o store), b) J -format (salto)

c) R-form at (registr-registro)

La memoria del proc essore è indirizzata a byte, la macchina ha parallelismo-base di 32 bit;

l'istruzione deve essere allineata sui m argini di parola , ovvero posta ad indirizzo multipli di

4. strutture delle istruzioni per le architetture "storiche".

Qui sono le Qui sono presentate le architetture esemplificate

Qui la legenda dei simboli per indicare la natura di un operando

Qui i simboli generali e specifici per individuare i registri di macchina

1.1 Indirizzamento indiretto a più livelli 1 Modi di indirizzamento

Si ricorda che per modo di indirizzamento si intende la notazione utilizzata in linguag gio

macchina per id entificare la natura dell’operando, la te cnica di indirizzamento, e tutte le altre

L'indirizzamento indiretto a pi ù livelli (o a catena) è una tecnica che generalizza informazioni che occorre fornire al proc essore perch é possa procedere alla costruzione

quella dell'indirizzamento indiretto: l'istruzione fa riferimento ad una locazione di dell’operando.

memoria ove è contenuto l'indirizzo dell'indirizzo (…dell'indirizzo) dell'operando- Nella tab.5.1 sono mostrati i modi di indirizzamento previsti nelle tre architetture

memoria. esemplificate. Si noti quanto segue:

• I displacement sono sempre numeri relativi in complemen ti a 2 di k bit; se essi dev ono

Con questa tecnica, si realizzano pi ù accessi per costruire l'indirizzo dell'operando; con n

essere addizionati ad o perandi di n>k b it, devono essere riportati al complemento 2 ,

riferimento ad un livello in più rispetto alle (5.4) si avrebbe, per le tre soluzioni precedenti: mediante un'operazion e di “estensione del segno”.

EA:=M EA:=M[R ] EA:=M[M ] • Tutte le architetture posseggono indirizzamenti impliciti a costanti tipiche (0,1) o a registri.

n O O •

Tale tecnica consente di puntare non direttamente alla locazione ove è contenuto il valore del L'indirizzamento immediato prevede una costante di 8 o 16 bit per l'8086d (con rappresentazione little

endian); 8, 16 o 32 per il 68000d (big endian) e di 32 per il RISCd. Questi dati, così come l'offset (o

parametro effettivo, ma ad una ove è contenuto ancora un indirizzo, in un modello di displacement) sono memorizzati per le architetture a istruzioni di lunghezza variabile nei byte (8086d) o

"puntatore a puntatore", più flessibile di quello del semplice indirizzamento indiretto. nelle parole (68000d) che seguono quello (o quella) contenente il codice operativo.

In alcuni processori la tecnica è implementata attraverso il cosiddetto indirizzamento a • Nell'indirizzamento diretto a registro, l'8086d usa come generali i registri a 8 o a 16 bit a seconda del

catena: EA si suppone composta da due componenti, EA.add, che è il vero e proprio tipo di dato; il 68000d distingue i registri di dato da quelli di indirizzamento; il RISCd usa i propri registri

indirizzo, ed EA.f, booleana, che indica se l'indirizzo è quello finale oppure è l'indirizzo ove generali.

è contenuto un altro indirizzo; anche l'operando O espresso nell'istruzione ha la medesima • Nell'indirizzamento diretto a memoria il 68000d distingue un indirizzamento "completo" della memoria

struttura. Si ha dunque: (32 bit) da uno a 16 che viene portato a 32 mediante estensione del segno e che fa quindi riferimento solo

[1]

Algoritmo di costruzione di EA con la tecnica dell' indirizzamento a catena: 16 indirizzi ; il RISCd compone EA mettendo insieme i primi 4 bit di PC, i 26

ai primi o agli ultimi 2

espressi nell'istruzione ed accodandovi 2 zeri[2]

while do

EA:=O; EA.f EA:= M (5.5)

E A. a d d Tab. 5.1 Modi di in dirizzamento

Si noti che con la tecnica esposta l'indirizzamento diretto pu ò diventare un caso particolare modo formula in cap V 8086d 68000d RISCd

Immediate Immediate Immediate

di quello indiretto: O è l'indirizzo dell'operando, altrimenti è l'indirizzo di un indirizzo e così Immediato 3.1: EO:=O little endian big endian

via. Questa tecnica è stata anche adoperata per gestire l'indirizzamento di memoria: con Register Register direct Register

EA:=O si indirizza una area ristretta di memoria (detta "pagina base") nella quale o vi è 3.2: EO:=R

Diretto a registro - 16bit: R[0..7] - a dati : D[0..7] a reg generale R

O [0..31]

- 8bit: AH,… DL - a indir.: A[0..7]

l'indirizzo dell'operando o il puntatore all'indirizzo. A bsolute

Nel § III.3 sono mostrate le tecniche d’indirizzamento adottate dai processori ivi Pseudo direct

due modalit à:

Direct

Diretto a memoria 3.2: EA=O offset26

presentati; la casistica di cui sopra ne risulta completamente esemplificata. -of fse t3 2

offset16 -of fse t1 6

Indiretto attrav. Indirect Register Indirect

3.3'': EA=R O BX,BP,DI,SI -registri A[0..7]

registro. 4.5': EA=R

come sopra con O …with post-incr.

postincremento R := R +1

O O

4.5'': R := R -1

come sopra con O O …with pre-decr.

predecremento EA=R O Indirect w. displ. Base

Indiretto con Based

4.3: EA=#d+A - registri A[0..7] - registri R[0..31]

i registri BX,BP

displacement #d16 #d16

- -

Indexed

4.2: EA=#b+X

Diretto con indice i registri SI, DI

B ased Indexed: Ind. with Index

Indiretto con - Rj è B X o B P , - Ri A[0..7]

4.4: EA=#d+A +X

displacement e j i - Xi è SI o DI. - Xj X[0..15]

indice #d8 # #d8

- o d16 - PC relative PC relative

Relativo a PC con ---

4.3': EA=#d+PC #d16 #d16

displacem. - -

…with Index

Relativo a PC con 4.3'': EA=#d+PC+X - X[0..15[

displacem. e i

indice #d16

-

r/m.

dk, offsetk: displacement o offset espresso su k bit

• L'indirizzamento indiretto è per l'8086d attraverso i registri indicati in tabella[3], identificati dal campo

"modo"; per il 68000d attraverso gli appositi registri di indirizzamento; per il RISCd non esiste questa

modalità, che del resto può essere sostituita dall'indiretto con displacement (rendendo nullo quest'ultimo). [1] Ad esem pio, in esadecimale:

• Nell'indirizzamento indiretto con displacement l'8086d usa solo i registri BX e BP, mentre DI ed SI sono dall’ind irizzo “corto ” $ 7A 30 deriva l’indirizzo $00007A30;

dedicati al modo "indiretto con indice"; il 68000d e il RISCd usano tutti i registri di indirizzamento. dall’ind irizzo “corto ” $ 8A 30 deriva l’indirizzo $F F F F 8A30.

• Nell'indiretto con displacement ed indice, si aggiungono per l'8086d i registri.indice Si e DI, per il

68000d uno qualsiasi dei registri generale (A oppure D). [2] 28

La memoria si suppone composta da 16 segmenti di 2 byte, rappresentati dai primi 4 bit del suo indirizzo (che si

• Per gli autoincrementi del 68000d, coerentemente con quanto affermato al § V.4.3, l'incremento è di 1, 2

o 4 a seconda del tipo di dato. PC

• 28

Nell'indirizzamento relativo a PC, il RISCd allinea automaticamente ai margini di parola l'incremento, ottengono come ) e l'indirizzamento è solo all'interno del segmento corrente. L'indirizzo deve inoltre essere un

2

#d16

nel senso che è moltiplicato per 4. multiplo di 4 e quindi bastano 26 bit per l'offset ed EA si ottiene da:

PC 26 ×

= × +

2 26 4

EA offset

28

2

1.1 Codifica del modo di indirizzamento nelle istruzioni

Il modo di indirizzamento o è implicito oppu re è rappresentato da un apposito campo [3] Oppure, per le istruzioni di salto, tutti gli 8 registri generali.

"modo".

Per il RISCd il modo è so ltanto implicito, mentre nella altre due architetture è in parte

implicito (alcu ni codici operativo, ad esempio, determinano che l'operazione sia registro -

registro oppure immediato-registro, vedi le figu re 3 .1. e 3.2) e in parte determinato da un

apposito campo che appunto nelle due architetture è modo (80 86d, cfr. fig. 3.1) oppure EA

(68000d, cfr. fig. 3.2). In fig. 5.1 è indicato lo schema di dettag lio delle due soluzioni:

entrambe contengono u n campo "modo" propriamente detto ed un campo "reg" ove è indicato

il registro al qu ale il modo fa riferimento.

7 5 2 5 2

6 3 0 3 0

m od reg r/m m od reg

a) b)

mod o EA

mod = i n d icatore d i mod o

reg = registro

r/m = registro o mod o

Fig. 5.1 Il campo "mod o"

a) 8086d b) 68000d

Per il 68 000d si ha in particolare:

• ogni operando ha il suo "modo" (esistono 1 o 2 campi EA in una istruzione);

• mod<7 individua 7 modi di indirizzamento, per i quali reg è l'indirizzo del registro

• per mod=7 il campo reg non indidua pi ù un registro , ma specifica ulteriormente il modo

(che, ovvia mente, no n richiede registri)

modi del 680 00d.

Per ulteriori dettagli si v eda

Per l'8086d si ha in particolare:

• esiste un un ico campo "modo" nell'istruzione;

• in linea di massima e salvo eccezioni (ne esistono parecchie)

reg individua uno degli 8 registri generali

o mod identifica 4 in formazioni fondamentali su l modo:

o manca displacement

displacement a 8 bit

displacement a 16 bit

r/m è l'indirizzo di un altro registro

r/m, se non è l'indirizzo di un registro (vedi mod ), specifica ulteriormente il

o modo; si noti che gli l’individuazione dei registri BX , BP, SI, D I p er i modi based

e indexed non è data d a un vero e proprio indirizzo, ma da un distinto codice su Classi di istruzioni e dati

Qui sono presentate le architetture esemplificate

Qui la legenda dei simboli per indicare la natura di un operando

1.1 Modifica mediante alterazione dell'istruzione Qui i simboli generali e specifici per individuare i registri di macchina

Una modifica di indirizzo si potrebbe anche ottenere operando su una istruzione come se

fosse un dato e quindi modificandola dinamicamente durante l'esecuzione del programma cui

appartiene. Tale tecnica è possibile in quanto sul piano della realizzazione fisica della

macchina non esiste alcuna distinzione fra una istruzione o un dato: entrambi sono

rappresentati da una stringa di bit, che viene interpretata come istruzione se ad essa si accede Nel seguito si illustra un sottoinsieme delle istruzioni fondamentali delle architetture di

nella fase di fetch, come dato se si accede nella fase execute; la stringa di bit può essere riferimento, così classificate

dunque alterata da una elaborazione, trasformando dunque l'istruzione in un'altra che fa • di trasferimento dati

riferimento ad un diverso indirizzo. • aritmetiche e logiche

Pure essendo tale tecnica tipica del modello di Von Neumann e utile soprattutto in • di comparazione e test

processori che non dispongono di grosse capacità di modifica automatica, essa è sconsigliata • di salto

dalle attuali tecniche di programmazione, in quanto d à luogo a quelle che si chiamano • di collegamento a sottoprogrammi

procedure non pure, cioè procedure che alterano se stesse. rinviando all'apposito capitolo le istruzioni di input/output

1.1 Rappresentazione dei dati

Per quanto attiene alle rappresentazione dei dati nelle architetture in esame si veda la

Rappresentazione dati per le architetture di riferimento già presentata al cap. 2.

Per le architetture in esame, i tipi fondamentali ai quali si riferisce il set di istruzioni che

sarà presentato sono:

• per l'8086d: signed a 8 bit;

• per il 68000d: signed a 16 bit;

• per il RISCd: signed a 32 bit.

Peraltro, per le prime due architetture i medesimi codici operativi si applicano anche a dati

di lunghezza diversa e precisamente:

• per l'8086d: 8 o 16 bit (indicatore w);

• per il 68000d: 8, 16 o 32 bit (indicatore tipo).

Anche per il RISCd è possibile operare su 16 (halfword) o su 8 (byte) bit, ma in questo

caso si usano distinti codici operativi..

1.2 Natura degli operandi e simbologia

La natura degli operandi di una istruzione (registro, memoria, immediato, etc.) è

identificata secondo quanto esposto nell'inserto " legenda dei simboli per indicare la natura di

un operando". Ad esempio,

• con la notazione R:=M s’intende un’istruzione che indirizza esplicitamente un

operando-memoria, spostandolo in un registro, e che quindi il modo di indirizzamento

dell'operando-sorgente è uno di indirizzamento della memoria (diretto, indiretto,…),

mentre l''operando-destinazione, essendo indirizzabile, è soggetto ad una tecnica di

indirizzamento diretto a registro;

• una istruzione d:=M implica in indirizzamento implicito dell'accumulatore d ed uno di

memoria dell'operando-origine;

• G1:=G2 individua una struttura nella quale entrambi gli operandi sono, a seconda dei

modi d ’indirizzamento, un registro o una locazione di memoria o, per l'operando-sorgente,

un immediato.

per il RISCd.

Qui sono presentate le architetture esemplificate 1.2 Da o verso registri di indirizzamento o speciali

Qui la legenda dei simboli per indicare la natura di un operando Altri trasferimenti av vengono da o per registri di indirizzamento o registri speciali; a

Qui i simboli generali e specifici per individuare i registri di macchina secon da delle architetture vengon o dette di load o di move (tab.6.2).

Tabella 6.2 Istruzioni di trasferimento

da e per registri speciali o di indirizzamento

1 Istruzioni di trasferimento dati Ist ruzio ne 8086d 68000d RISCd

R: =M LE A -- - -- -

1.1 Clear e set, move, load, store A: =M -- - LE A -- -

Per le tre architetture esemplificate, in tab. 6.1 so no mostrate le principali istruzioni di A:=G -- - M OVE A -- -

trasferimento dati finalizzate alla vera e propria elaborazione, sul dato di tip o fondamentale d : =C CR LA HF -- - -- -

come definito nel § 8. s: = G, G: = s -- - M OVE i n / d a -- -

SR

Tabella 6.1 Istruzioni di move, load e store s: = R; R: =s -- - -- - M T° ,

Ist ruzio ne 8086d 68000d RISCd M F°

C LE AR (azzera) e SE T (poni a1) ° : HI o L O, p .e . M T HI

CL C ,

f: =0 , f= 1 -- - -- -

STC Per il trattamento degli ind irizzi notare le istruzioni LEA dell'8086d e del 68000d

G: = 0 -- - CL R -- - (rispettivamente di formati di fig. 3.1b e 3.2 e): sono simili, solo che mentre la prima carica

MOVE IN G ENERALE l'indirizzo (o l'offset) dell'operando so rgen te in uno qualsiasi dei reg istri generali, la second a

R:=G M OV -- - -- -

G: = R lo carica solo nei registri di indirizzamento; in entrambi i casi i due operandi so no espliciti.

G1 : = G2 -- - M O VE -- - L'istruzio ne MOV EA del 68000d sposta invece nel registro-indirizzo un qualsiasi operan do-

LOAD origine.

R: =M -- - -- - LW La manipolazione degli ind irizzi per il RISCd pu ò avvenire come elaborazione su gli interi,

R: =i m -- - -- - LI e, nello spirito della rid uzione dei codici operativi, non esistono istruzioni specifiche per il

D: =i m -- - M OVEQ -- - trattamento degli indirizzi.

ST OR E Per le istruzioni di trasferimento da o verso registri speciali, si propone solo un

cam pionario:

M: = R -- - -- - SW • Per l'8086d: sposta i flag nell'accumulatore AH :

Fra le architetture esemplificate, l'unica a presen tare istruzioni di clear e set, diffuse nelle LAHF

architetture delle precedenti g enerazioni, è l'8086d, con istru zioni che ag iscono Si tratta di una istruzione senza operandi espliciti (formato di fig.3.1a), che fa

implicitamente su flag: CLC (CLear Carry), CLV (CLear o Verflow) e le analoghe per il set riferimento implicitamente al registro FLAG ed all'accumulatore AH ; il processore,

(STC, STV , etc.). Il 68000d p resenta invece un clear su op erando qualsiasi, CLR G . infatti, pur avendo un banco di registri indirizzabile, ne ad opera uno (AH, appunto, la

parte alta d i R[0 ]) come accumulatore nella concezione delle architetture ad accumulatore

Il trasferimento dei dati da elaborare avviene con due tecniche diverse, quella del move e (questo uso si ritroverà per le istruzion i di moltiplicazione).

quella d el load -store. La prima tecnica, tipica delle architetture orto gonali, è presente • Per il 68000d: sposta da o per lo Status Register SR (formato fig. 3.2c):

nell'8086d (formato di fig. 3.1b,d,e,f): MO VE SR, G oppure MOV E G , SR

MO V G 1,G 2 Si tratta di due distinti cod ici operativi, che fan no implicitamente riferimento ad SR, ma

nel significato G1:= G2, e nel 68000 d (formato di fig. 3.2d): che al livello di assembler appaiono come un MOVE unico e con SR operando esplicito.

[1]

MO VE G1,G 2 • Per il RISCd: sposta da o per la p arte alta, HI, del registro speciale che co ntiene il

ma in

nel significato G2:= G1. In entrambi i casi, i modi d’indirizzamento specificano la natura di G1 e G2[2], risultato d i una moltiplicazione o d ivisione (ed analogamente p er la parte bassa, LO):

effetti per l'8086d ciò è vero al livello assembler, mentre al livello macchina esistono codici operativi diversi a MTHI R oppure MFHI R

seconda della natura di ciascuno dei due operandi. Il 68000d, invece, ha una struttura che si avvicina molto ad Si tratta di codici che fann o implicitamente riferimento ai registri speciali HI e LO.

una architettura ortogonale.

La seconda tecnica, tipica delle architetture Risc e quindi del RISCd, effettua le operazioni Un maggiore ap profo ndimento di questa classe di istruzioni richiederebbe una pi ù

aritmetiche e log iche sempre attraverso i registri generali, che sono preventivamente caricati profon da conoscenza delle singole architetture.

con l'operazione "Load Word":

LW R, M 1.3 Operazioni su stack

e infine immagazzinati con l'analoga "Store Word":

SW R, M Le istruzioni specifiche di push e pop d i cu i alla tab. 6.3 sono:

Sia il move sia il load posseggono un codice operativ o che o pera pi ù velocemente se il Tabella 6.3 Istruzioni per stack

dato sorgente è un immediate: MO VEQ (Move Quickly) per il 68000d, LI (Load Immediate)

Ist ruzio ne 8086d 68000d RISCd

p u s h m ( S P ,G ) Qui sono presentate le architetture esemplificate

P US H -- - -- -

p o p m ( S P ,G ) P OP Qui la legenda dei simboli per indicare la natura di un operando

p u s h m ( S P ,M ) -- - PE A -- - Qui i simboli generali e specifici per individuare i registri di macchina

• Per l'8086d, ove si riferiscono implicitamente ad SP e ad u n operando generale esplicito

(formato di fig. 3.1b):

PUSH G POP G 1 Istruzioni aritmetiche e logiche

• Per il 68000d, con struttura analoga (PEA , Push Effective Ad dress, formato di fig. 3.2c):

PEA M 1.1 Addizione, sottrazione e operazioni logiche

ma limitatamente al push e con riferimento alla manipolazione di indirizzi In tab.7.1 sono riportate alcune fra le principali istruzioni di add izione, so ttrazio ne, con

riferimento ai tipi di dati gi à trattati per le operazioni di trasferimento (virgola fissa di 8, 16

Oltre che mediante istruzioni apposite, il push o il pop possono essere realizzati usando o 32 bit; ovviamen te, per tutte le tre architetture si prevedono estension i a tipi più evoluti,

normali registri che puntano allo stack e loro incrementi o decrementi (eventualmente auto- che qui non si illustrano.

incrementi); pertanto , la mancanza di tali istruzioni n ella sintassi del linguaggio macchina

non è ostativa dell'uso di stack. Tabella 7.1 Istruzioni di addizione, sottrazione e log iche

Ist ruzio ne 8086d 68000d RISCd

1.4 Miscellanea Unarie

Fra le istruzioni non mostrate in tab ella, se ne ricordano alcune che po sso no ritenersi G: = - G NE G NE G -- -

appartenere a questa classe, come quelle di "scambio" (Exchange, Swap), che producono lo N OT N OT -- -

=

G : G

scambio di contenuto fra due operandi, tipicamente applicate a registri particolari ed allo Addizione, sottrazione. And, Or, etc.

stack pointer. R: =R+ G

G: = G +R

Altre istruzioni realizzano la trasformazione di un byte, come il codice XLAT (Translate ADD -- - -- -

R: =R G AND

byte) di 8086d, che trasforma u n carattere nell'accumulatore con uno corrispondente prelevato ∧

G:= G R

D: =D+ G

da una "tabella di traduzione". G: = G +D ADD

-- - -- -

Vanno infine ricordate le istruzioni per il trasferimento dati da o verso i coprocessori per ∧

D: =D G AND

G:= G D

la virgola mobile o per il con trollo del sistema, tip iche dei singoli sistemi. G: = G +i m AD DI

-- - -- -

G:= G i m AN DI

R1: = R2 + R3 ADD

-- - -- -

∧ AND

R1 : = R 2 R 3

Per le architetture storiche qui sono illustrate le istruzioni di trasferimento dati. R1: = R2 + i m AD DI

-- - -- -

∧ AN DI

R1 : = R 2 i m

Moltiplicazione e divisione

d :=d *G M UL -- - -- -

D: =D* G -- - MULU -- -

[1] Si mette in evidenza che nei rispettivi linguaggi assemblativi, l'operando.destinazione è il primo per l'8086, il secondo

per il 68000. s: = R1* R 2 -- - -- - MULTU

[2] Invero, esistono alcune limitazioni. Per l'8086d, ad esempio, non è possibile spostare un immediato in un registro-

segmento. Simili per struttura alle op erazioni aritmetiche sono quelle "logiche" (not, and, or, etc.),

che operano su tipi “array di bit ” delle medesime lunghezze dei dati aritmetici.

Le uniche operazioni unarie oggi d iffuse sono la costruzione dell'oppo sto e analogamen te

il not logico:

NEG G

presente sia nell'8086 (formato di fig.3.1b) sia nel 68000d (formato di fig.3.2c), ma non nel

RISCd; d'altro can to, l'opposto si può ottenere da una sottrazione (a:=0-a) e qu ind i non è

essenziale. La N EG è aggiunta nel RISCd come pseudoistruzion e, cioè come istruzione

riconosciuta dall'assembler e da questo tradotta in linguaggio macchina. Altre operazio ni

unarie, come il calcolo del valore assoluto , diffuse in architetture delle precedenti

generazioni, si possono trov are come pseudo istruzioni nelle architetture mo dern e.

Per le op erazioni binarie, la tabella si limita a mostrare le istru zioni di addizione, and e

moltiplicazione; peraltro, ovunque ci sia l'addizione s’intende che esiste anche la so ttrazio ne

(codici operativi SUB etc.), ove ci sia l'and esiste anche la or (O R) e la or esclusivo (X OR) e

ove ci sia la moltiplicazione anche la divisione (D IV).

Si noti in p articolare:

• la qu asi completa ortogo nalità del 6 8000d a livello macchina

ADD G ,D (D:=D +G)

ADD D ,G (G:=G +D) Tabella 7.4 Istruzioni di shift

(formato di fig.3.2e) che quindi prevede l'accu mulo anche in memoria;

• l'analoga ortogon alità a liv ello assembler dell'8 086d, come per le istruzioni di move Ist ruzio ne 80 86 d 68 000 d RISC d

(formato di fig.3.1b,d,e,f): msh r -- - LS R

ADD R,G (R:=R +G) (D 1, 0, c o u nt )

msh r S RL V ( r i su l t a t o i n R 3 )

ADD G,R (G :=G +R) S HR

(R 1, 0, c o u nt ) S RL ( ri su l t a t o i n R 3 )

• l'uso dei tre registri espliciti per il RISCd: mashr -- - AS R

(D 1, c ou n t )

ADD R1 ,R2,R3 (R1:=R 2+R3) mashr S RA V ( r i s ul t a t o i n R3 )

S HR

(R 1, c ou n t ) S RA ( r i su l t a t o i n R3 )

1.2 Moltiplicazione e divisione mc i r ( D1 ,c ou n t ) -- - ROR

Per la moltiplicazione e divisione, si ricord a che il risultato ha un n umero di bit dop pio di mc i r ( R1 ,c ou n t ) ROR -- -

[1] c ou n t = c ou n t = c ou n t =

Not e s o im D o im R o im

quello degli operandi ; nelle tre architetture con siderate si adottano tre soluzioni diverse.

Con riferimento alle operazioni per dati "unsigned " (numeri naturali) si ha:

• msh(r/l) (a,b,cou nt): sh ift (destra/sinistra) a di count bit, con inserimento di c

8086d: l'istruzione opera implicitamente su ll'accumulatore A X di 1 6 bit (formato di mash(r/l) (a,count) : sh ift (destra/sinistra) aritmetico a di count bit

fig.3.1b): mci(r/l) (a,count) : shift (destra/sinistra) circolare a di count bit

MU L G e per tutti il numero di shift (co unt) pu ò essere un immediato, ma inoltre pu ò essere pet

ed il risultato è nei d ue registri AX e DX .: l'8086d il registro riferito implicitamente CL, per il 68000 un secondo registro-dati D2 e per

• 68000d: l'istruzione è a due operandi espliciti a 16 bit (formato di fig.3.2e): il RISCd un seco ndo registro gen erale R2.

MU LU D, G Sia per il 68000d sia per il RISCd le istruzioni hanno codici diversi a seconda che il

ed il risultato (a 32 bit) è in D . numero di shift richiesti sia contenuto in un registro o sia u n immediato, ma il 68000d

• RISCd: l'istruzione è a due registri espliciti di 32 bit (formato di fig.3.3???): presenta il medesimo codice a livello assembler; mentre il RISCd, in acco rdo con la sua

struttu ra a 3 registri, pone il risultato dello shift (definito da R1 ed R2 oppure im) in R3.. Lo

MU LU R1, R2 sh ift circolare è realizzato come pseudo istruzione nel RISCd.

ed il risultato (a 64 bit) è nella coppia di registri speciali HI, LO.

Simili son o le istruzioni per dati rappresentati in complemento a 2 o "signed" (codici Per le architetture storiche qui sono illustrate le istruzioni aritmetiche e logiche.

MU LS, MU LT) ed analoghe sono quelle per la divisione (DIV, DIVU, D IVS).

1.3 Aritmetica per l’indirizzamento e controllo [1]

Oltre all'aritmetica per l'elaborazione vera e propria, i processori (e soprattutto quelli delle La questione è trattata approfonditamente nel capitolo dell'aritmetica; intuitivamente basta considerare che il prodotto

di due numeri di n cifre è in genere di 2n cifre.

vecchie generazioni) presentano istruzioni per il calcolo degli in dirizzi e, più in generale, per

operazioni di controllo (tab.7.2).

Tabella 7.2 Istruzioni aritmetiche p er indirizzamento e controllo

Ist ruzio ne 8086d 68000d RISCd

Addizione e sottrazione

A: =A+ G -- - ADDA -- -

Increm mento e decremento

G: = G + 1 IN C -- - -- -

Fra le prime si pone in ev idenza, per il 68000d, l'istru zione ADDA (A dd to Address,

formato di fig.3.2e) che aggiunge al contenuto di un registro d i ind irizzamento u n altro

operando generico, G. Non esistono an aloghe istruzioni per l'8086d e per il RISCd.

Fra le secon de, si ritrova una istruzione di "incremento" (8086d, formato di fig.3.1b):

INC G (G:=G+1)

che è so stituita, n elle altre architetture da normali istruzioni di addizione o dalle tecniche di

autoincremen to.

1.4 Istruzioni di Shift

Nella tab.7.4 sono mostrate le operazioni di sh ift semplice (SH R, Sh ift Right; LSR,

Logical Shift Right, SRLV, Shift Right Logical V ariable), le operazioni di shift aritmetici e

quelle di shift circolari, dette anche di rotazione; esistono le analoghe a sinistra (SHL, LSL,

SLL, etc.). Si tratta in ogni caso di shift multip li: di fig.3.3a):

Qui sono presentate le architetture esemplificate if then

BEQ R1, R2, offset: R1=R2 PC:=PC+offset

o

Qui la legenda dei simboli per indicare la natura di un operando if then

BGEZ R, offset: R≥0 PC:=PC+offset

o

Qui i simboli generali e specifici per individuare i registri di macchina • Branch on condition (8086d, formato di fig.3.1c e 68000d, formato di fig.3.2f): si tratta

ancora di classi di codici operativi, in cui l'acronimo identifica questa volta la

combinazione di valori dei flag che deve verificarsi affinché il salto avvenga, come ad

1 Posizionamento dei flag. Comparazione e test esempio (si noti la diversità degli acronimi ma l'unitarietà dei concetti):

if then

JC offset: if Carry, C PC:=PC+offset (ed analogamente JNC if not Carry,

o

In tab. 8.1 sono riportate le istruzioni di comparazione e di test per le 3 architetture in if ; JO, if Overflow, etc.);

C

esame. if then

JLE offset: if Less or Equal, N or Z PC:=PC+offset (ed analogamente

o JG E, if Greather Than or Equal; JE; if Equal, etc.);

Tabella 8.1 Codici operativi per istruzioni di comparazione (e test) if then

BCS offset: if Carry Set, C PC:=PC+offset (ed analogamente BCC if

o

Istruzione 8086d 68000d RISCd Carry Clear; BVS, if Overflow Set, etc.);

ARITMETICHE if then

BLE offset: if Less or Equal, N or Z PC:=PC+offset (ed analogamente

o

Test BGE, if Greather Than or Equal; BE; if Equal, etc.).

G :: 0 -- - TS T -- -

Comparazione Per le architetture storiche qui sono illustrate le istruzioni di comparazione e test.

G :: R CMP -- - -- -

G :: D -- - CMP -- -

G :: i m -- - CMP I -- -

G :: A -- - C MP A -- -

M1 :: M2 -- - CMP M -- -

Set per comparazione

R 1: = R 2 < R 3 -- - -- - SLT

R 1: = R 2 < i m -- - ... SLT1

LOGICHE

Test

G [ i m] : : 0 -- - BT ST -- -

Comparazione

∧ TE S T -- - -- -

G R

L'8086d ed il 68000d operano sistematicamente sui flag e posseggono di conseguenza

istruzioni di comparazione vere e proprie: fra operando generico e memoria (CMP) o

immediato (CMPI), fra registro-indirizzo ed indirizzo CMPA) o fra memoria e memoria

(CMPM). Il test de l 68000d (TST) confronta l'unico operando con lo 0.

Diversa è l'impostazione del RISCd, che adopera istruzioni di set per comparazione, SLT

(Set on Less Than, set se < (ma anche se maggiore, se uguale, etc.): il confronto è fra due

registri, mentre il terzo viene posizionato a 0 oppure ad 1 a seconda dell'esito del confronto.

Per la comparazione logica sono mostrate in tabella:

• TEST dell'8086d, che posiziona il flag Z a seconda che l'and fra i due operandi sia o

non uguale a 0 (formato di fig 3.1b,e,f);

• BTST (bit test) del 68000d (formato di fig 3.2c) che posiziona analogamente il flag Z,

ma in funzione del valore di un singolo bit, soluzione atipica in quanto l'operando è un bit

e non un byte o una word.

Tabella 9.2 Istruzioni di salto condizionato

808 6d 680 0 0d RIS Cd

Ist ru zi o ne Su o p era nd i a rit m etici

--- --- Bcc

if R 1 c c R 2 t h e n P C : = P C + im --- --- Bc cZ

if R c c 0 t h e n P C : = P C +i m

Ba nc h ( ju m p ) on C o nd it io n

Jcc Bcc ---

if c c t h e n P C : = P C + i m

Per quanto attiene alla struttura dell'antecedente, si ha:

• Salti per confronto diretto fra operandi aritmetici: Bcc, BccZ del RISCd: si tratta di una

classe di codici operativi, in cui l'acronimo cc identifica la relazione che deve verificarsi

fra i due operandi affinché il salto avvenga, come ad esempio (si noti che Bcc è un

confronti registro -registro, BccZ uno registro-immediato), entrambi nel formato I -format if ; JO, if Overflow, etc.);

C

Qui sono presentate le architetture esemplificate if then

JLE offset: if Less or Equal, N or Z PC:=PC+offset (ed analogamente

o

Qui la legenda dei simboli per indicare la natura di un operando JGE, if Greather Than or Equal; JE; if Equal, etc.);

if then

BCS offset: if Carry Set, C PC:=PC+offset (ed analogamente BCC if

o

Qui i simboli generali e specifici per individuare i registri di macchina Carry Clear; BVS, if Overflow Set, etc.);

if then

BLE offset: if Less or Equal, N or Z PC:=PC+offset (ed analogamente BGE, if

Greather Than or Equal; BE; if Equal, etc.).

1 Istruzioni di salto Per le architetture storiche qui sono illustrate le istruzioni di salto.

1.1 Salti incondizionati

Nelle architetture in esame, le istruzioni di salto semplice (tab. 9.4) esistono sia nella

forma assoluta (JUMP, J, JR) che in quella relativa (BRANCH).

Tabella 9.1 Istruzioni di salto incondizionato

Istru z ion e 808 6d 680 0 0d R IS Cd

A SS OLUTI

PC : = G JMP JMP -- -

PC : = i m -- - -- - J

-- - -- - JR

PC : = R R E LA T IVI

-- - BR A -- -

PC : = P C +i m

Si noti la particolare soluzione del RISCd che rifiuta il concetto di salto ad operando

generale (come si è già detto, le architetture Risc semplificano per motivi di efficienza la

tecnica di preparazione dell'operando) e ne realizza uno (JR) che opera attraverso un registro

generale, realizzando così il salto indiretto (formato R-format di fig.3.3c, con alcuni campi

ignorati):

JR R (PC:=R )

Un esempio di salto semplice realizzato come caso particolare di salto condizionato è la

pseudoistruzione B (salto relativo) dell'assemblatore del RISCd.

1.2 Salti condizionati

Nelle architetture in esame (tab.9.1) i salti sono sempre relativi, ancorch é l'8086d li chiami

"jump". Tabella 9.2 Istruzioni di salto condizionato

Ist ru zi o ne 808 6d 680 0 0d RIS Cd

Su o p era nd i a rit m etici

--- --- Bcc

if R 1 c c R 2 t h e n P C : = P C + im --- --- Bc cZ

if R c c 0 t h e n P C : = P C +i m

Ba nc h ( ju m p ) on C o nd it io n

Jcc Bcc ---

if c c t h e n P C : = P C + i m

Per quanto attiene alla struttura dell'antecedente, si ha:

• Salti per confronto diretto fra operandi aritmetici: Bcc, BccZ del RISCd: si tratta di una

classe di codici operativi, in cui l'acronimo cc identifica la relazione che deve verificarsi

fra i due operandi affinch é il salto avvenga, come ad esempio (si noti che Bcc è un

confronti registro -registro, BccZ uno registro-immediato), entrambi nel formato I -forma t

di fig.3.3a): if then

BEQ R1, R2, offset: R1=R2 PC:=PC+offset

o if then

BGEZ R, offset: R≥0 PC:=PC+offset

o

• Branch on condition (8086d, formato di fig.3.1c e 68000d, formato di fig.3.2f): si tratta

ancora di classi di codici operativi, in cui l'acronimo identifica questa volta la

combinazione di valori dei flag che deve verificarsi affinché il salto avvenga, come ad

esempio (si noti la diversità degli acronimi ma l'unitarietà dei concetti):

if then

JC offset: if Carry, C PC:=PC+offset (ed analogamente JNC if not Carry,

o

Qui sono presentate le architetture esemplificate

Qui la legenda dei simboli per indicare la natura di un operando Istruzioni di salto

Qui i simboli generali e specifici per individuare i registri di macchina tecnica skip

1 Collegamento con sottoprogrammi La tecnica di Skip, opera assumendo:

prox:= PC+2

Le istruzioni di collegamento a sottoprogramma per le tre architetture in esame sono

mostrate in tab. 10.1. e si ha dunque:

Tabella 10.1 Istruzioni di collegamento a sottoprogramma Una istruzione di skip produce l'effetto:

Is t ruzione 8086d 68000d RISCd if then

f PC:=PC+2 (1.10)

SA L T I A SUBROU T INE se applicata ad un indicatore, oppure:

Salvataggio in registr o if then

a(R)b PC:=PC+2 (1.10')

JA L

-- - -- -

r: = P C; PC : = i m se applicata ad una coppia di operandi aritmetici.

-- - -- - JA L R

R1 : = P C ; P C : = R2

Salvataggio in stack pus hm ( SP , P C) Lo skip, assumendo implicito l'indirizzo cui saltare, consente istruzioni pi ù corte o

-- - J SB -- -

PC : = G comunque dà spazio nell ’istruzione ad altri operandi espliciti; tuttavia, è facile da

PC : = P C +i m -- - BSR -- - implementare solo su processori con istruzioni che occupano tutte una sola locazione; in tal

PC : = P C +G CAL L -- - -- - caso, l'indirizzo dell ’istruzione cui eventualmente saltare è effettivamente PC+2. Nei

RIT O RN O DA SUBRO UT INE calcolatori ove le istruzioni sono a lunghezza variabile, la localizzazione dell'indirizzo

RE T RT S -- -

po p m ( SP ,P C ) dell’istruzione cui saltare richiederebbe la conoscenza della lunghezza dell'istruzione

po p m ( SP ,C C R) -- - RT R -- - seguente quella di skip.

po p m ( SP ,P C ) Con tale struttura si provoca dunque soltanto il salto di una istruzione per una delle due

1.1 Salti e ritorni diramazioni: salvo casi eccezionali, la istruzione eventualmente saltata dovrà essere un salto

L'8086d e il 68000d usano per il salvataggio la tecnica dello stack e solo il 68000d semplice, tale da rinviare per lo sviluppo della diramazione, ad uno spazio congruo. Il

possiede l'istruzione di salto assoluto. medesimo esempio di cui sopra sarebbe così realizzato con una istruzione di skip:

Il RISCd presenta solo salti assoluti, con indirizzo cui saltare immediato e salvataggio in if then

a (R) b PC:=PC+2

registro implicito R[31] (JAL, Jump & Link, formato J-format) oppure con entrambi gli goto c

operandi di tipo registro (JALR, formato R -format). {diramazione 2, ramo then}

Per l'8086d e il 68000d, che usano lo stack, il ritorno è effettuato con le istruzioni RET .......

(formato di fig.3.1a) e RTS (formato di fig.3.2a), con operandi tutti impliciti. L'istruzione .......

RTR presume che il programmatore all'inizio della subroutine abbia salvato i flag (CCR) del goto fine

programma chiamante nello stack e quindi li ripristina. Il RISCd, non trattando lo stack a c: {diramazione 1, ramo else}

livello macchina, non possiede istruzioni di ritorno da subroutine per la quale peraltro si pu ò ......

usare la JR.. .......

fine: .......

1.2 Salti e ritorni condizionati Si noti che i termini inglesi "jump" e "skip" adoperati per classificare i due tipi di salto

L'architettura RISCd possiede due codici di salto a sottoprogramma condizionati al ricordano coerentemente un "salto lungo" ad una posizione imprecisata e un "salto breve"

confronto tra il contenuto di un registro e lo zero (BGEZAL: Branch on Greather Than or rispettivamente.

Equal to Zero And Link, BLTZAL: Branch on Less Than Zero And Link). Un ’ampia esemplificazione di istruzioni di salto semplice (incondizionato) e condizionato,

nelle diverse soluzioni qui illustrate è presentata al § III.9 e nelle annesse tabelle.

istruzioni di collegamento a sottoprogramma.

Per le architetture storiche qui sono illustrate le A differenza dell’8086d e del 68000d, in cui il tipo d ell’operando è sp ecificato mediante

un appo sito campo “tipo” , nel RIS Cd è il codice operativo a determinare il tipo

Qui sono presentate le architetture esemplificate dell’operando; pertanto il Load Word e lo Store Word (SW ) si estendono al byte (LB, SB) ed

Qui la legenda dei simboli per indicare la natura di un operando alla mezza parola (LH, SH). I codici aritmetici e di confronto operano solo sul tipo

Qui i simboli generali e specifici per individuare i registri di macchina fondamentale, distinguend o il caso d ella rappresentazione in complementi (signed) da quella

dei numeri naturali; i codici ADDU, SUBU, M ULTU, D IVU div entano per i numeri in

complemen to ADD , SUBU , MULT, D IV.

1 Estensione delle istruzioni ai tipi di dato non fondamentali Per quanto riguarda l’ aritmetica in virg ola mobile, il processore RISCd supporta i due

− tipi di singola (32 bit) e doppia (64 bit) precisione, con form i allo standard IEEE-754.

Nel seguito si illustrano sinteticamente le soluzio ni adottate nelle architetture in A supporto dell’ aritmetica in virgola mo bile, il processo re po ssiede il set di registri FPR a

esemplificazione per l'estensione del set dei codici operativi ai tipi non fo ndamentali. 32 b it di cui alla tab. 2.1, che si usano in coppie per la doppia precisione. Questi registri, così

come altri, sono in effetti l'interfaccia fra il processore fondamentale e il co processore della

virgola mobile; l'arch itettura del RISCd prevede che possano esservi fino a 4 coprocessori

1.1 Architettura 8086d collegati ed estende le istruzioni di load e store da e verso i registri interfaccia dei

Le operazioni aritmetiche e di comparazione si applicano ai tipi byte e word, in aritmetica copro cessori con istruzioni quali LW Cz, SW Cz (Load/Store W ord Co processor z), con z=1

binaria con e senza segno. L'aritmetica decimale sui tipi packed e un packed, per quan to per il coprocessore della virgo la mobile.

riguarda l'addizione e la sottrazione, è implementata in due passi: le operazion i vanno prima Il reperto rio dei codici operativi è quin di esteso alla virgola mobile: gli operandi sono

effettuate in aritmetica bin aria; occorre p oi adoperare appositi codici di "adjust" (AA A, DA A, memorizzati nei registri FPR e le istruzioni contengono un app osito campo che specifica se

AAS, DAS), i quali effettuano la necessaria correzione sul risultato binario per trasformarlo si tratta d ’operazioni in singola (codici ADD.s, SUB.s, etc.) oppure in doppia precisione

in decimale (l'operazione avviene estenden do alle due cifre comp rese in 8 bit il concetto (ADD .d, SUB.d, etc.).

sv iluppato nell'adder decimale, per il quale occorre aggiungere 6 al risultato quando esso sia

compreso fra 10 e 16 e quando l'adder binario dia riporto: in funzione dei valori d ei bit 0, 3, estensioni del set di istruzioni..

Per le architetture storiche qui sono illustrate le

4, 7 e dei riporti A (cfr.tab.2.3) fra il quarto ed il quinto bit e C complessivo, al risultato

dell'addizione va sommato 00, 06, 60, 66 ed analogamente per la sottrazione). La

moltiplicazione e la divisione si estendono allo stesso mod o, ma solo per il tipo decimale

unpacked (codici di "adjust" AAM, AA D). [1] In origine si trattava di un processore indipendente, opportunamente collegato all'8086, oggi il coprocessore è

Per la realizzazione dell'aritmetica in virgola mobile, l'80 86d opera congiuntamente al co- realizzato nel medesimo chip del processore principale.

[1]; oltre alla virgola mobile, esso estend e il tip o fondamentale ai

processore matematico 8087

32 bit ed esegu e calcoli di funzioni matematiche di varia natura (radici quadrate,

esponenziale, funzioni trig onometriche, ecc.). in virgola mobile.

Il co -processore 8087 dispone di un banco di otto registri da 80 bit, gestiti come uno stack

circolare, il cui contentuo è accedu to mediante opportune operazioni di push e p op. Per dare

maggiore flessibilità, è comunque anche possibile indirizzare in manie ra diretta uno

qualunque degli otto registri, in dicando lo spiazzamento risp etto alla cima dello stack .

La rappresen tazione in memoria della virgola mobile (vedi Rappresentazione D ati) è in

singola (sh ort real, 32 bit) o doppia precisione (long real, 64 bit); all'interno del processore,

invece, si usa l'unico formato temporary real format ad 80 bit; questo formato interno è

usato dall ’8087 anche per trattare dati interi. a 32 bit (sh ort integer ) ed a 6 4 bit (long

integer ).

1.2 Architettura 68000d

Il 68000 possiede i tipi binari Byte, W ord, Longw ord e, con la conc ezion e di architettura

ortogonale, il tipo è sp esso codificato in un apposito camp o dell’istruzione; esiste inoltre un

tipo decimale. Tutti i codici aritmetici, lo gici e di trasferimento si estendo no ai 3 tipi binari,

con eccezione della moltiplicazione e d ivisione che si applicano so lo a W ord; per questi

codici è invece d istinto il caso che la stringa di bit che rappresenta il dato sia considerata un

numero n aturale (Multiply, Divide Unsigned) oppure una rappresentazione in complementi

(Signed). L'addizione e sottrazione con riporto (detto bit-eXtend), anch'essa applicabile ai 3

tipi bin ari, consente un’ulteriore espansione della aritmetica. Per il tipo decimale sono

previsti i codici di addizione (ABCD ) e sottrazione (SBCD ), limitati alla estensione di un

byte, ma operanti anch'essi con riporto.

1.3 Architettura RISCd

Il tipo fondamentale di RISCd è l’intero a 32 bit, corrispondente alla lu nghezza dei registri

di macchina. Si ricorda che le operazioni aritmetiche e di co mparazione sono applicabili so lo

ad operandi di tipo registro e che in ogni caso l’architettura tende a limitare il numero di

distinti codici operativi. Capitolo sesto

Il sistema di input/output

La segmentazione di memoria per l'8086d 1 Gli strati del sistema I/O

1.1 Interfaccia I/O

Qui sono i particolari della sezione registri dell'8086d. 1.2 Architettura I/O

1.3 Linguaggio macchina

La segmentazione dell'8086d è un sistema per ottenere un maggiore spazio indirizzabile di 1.4 Driver

1.5 Primitive del sistema operativo

memoria (1 Gigabyte) con pochi bit di indirizzamento (16 bit, che consentono di indirizzare 1.6 Primitive del linguaggio

solo 16 kbyte), oltre che per una rilocazione del programma. La formula 2 Il colloquio fra CPU e periferia

MA:= EA + RS 2.1 Il Protocollo di colloquio

viene in effetti applicata con riferimento ad uno dei quattro registri-segmento del processore 2.2 Messaggi scambiati fra CPU e periferia

2.3 Parallelismo delle trasmissioni

(CS, DS, SS, ES); in particolare, detto X uno dei quattro registri, si ha: 2.4 Sincronizzazione dei messaggi elementari

4

RS=X×2 2.5 Segnali di controllo

sicch é, l'indirizzo MA viene costruito secondo lo schema di fig.1. 2.6 Trasmissioni a blocchi

3 Le fasi del colloquio

3.1 Apertura, corpo e chiusura

3.2 Selezione della periferia

19 3 0

4 3.3 Corpo della trasmissione

Segm ent o 0 0 0 0 3.4 Controllo di errore

+ 4 La sincronizzazione. Tecnica asincrona e sincrona

4.1 Tecnica asincrona

15

0 4.2 Tecnica sincrona

EA 5 La selezione della periferia

= 5.1 Topologia del collegamento

5.2 Selezione per collegamenti punto-punto e multi-punto

19 0 5.3 Selezione seriale o parallela

MA 5.4 Selezione dinamica o preselezione

6 Architettura del sottosistema I/O

Fig.1 Formazione di MA nell'8086d 6.1 Sistemi con interfacce passive

6.2 Sistemi a canale indipendente

6.2.1 Modello DMA

6.2.2 Modello di processore I/O (PIU)

7 Caratteristiche generali dei linguaggi macchina I/O

7.1 Sintassi e semantica del linguaggio

7.2 Caratteristiche generali del linguaggio macchina

8 Modello funzionale di interfaccia

9 Modello fondamentale di programmazione I/O

9.1 L'interfaccia

9.2 Le istruzioni

9.2.1 Modello I/O isolato

9.2.2 Modello memory mapped

10 La programmazione dei driver

10.1 Modello fondamentale e modelli sintattici

10.2 Il controllo dei canali indipendenti

10.3 Lo scambio degli stati

11 Istruzioni a blocchi

12 Protocollo handshake

12.1 Protocollo d’ingresso

12.2 Protocollo di uscita

13 I/O sincronizzato da interruzioni

13.1 Interruzione in ingresso

Un’istruzione del linguaggio macchina mantiene sempre un contenuto operativo molto

13.2 Interruzione in uscita elementare, realizzabile con un’unica o con poche microoperazioni, ed in genere molto

14 Interfacce e bus per i PC "distante" da quella che è la "operazione di I/O" così come viene vista al livello applicativo..

Ad esempio, un ’istruzione in linguaggio macchina consente il trasferimento di 8 bit da un bus

esterno ad un registro interno del processore e non si occupa neanche del problema di

sincronizzazione, mentre sul piano applicativo l'operazione di I/O è il trasferimento di un

dato a 32 bit (o addirittura di un blocco) da un supporto periferico alla memoria del

1 Gli strati del sistema I/O processore, opportunamente sincronizzato, con annessa la problematica del controllo di

errore.

Come tutte le operazioni complesse, quelle di I/O sono studiate, progettate e realizzate in 1.4 Driver

una struttura composta da differenti livelli o strati che, procedendo dal più elementare al pi ù

complesso, risolvono sia i problemi relativi ai dettagli elettronico -circuitali sia quelli di A causa della ridotta potenza operativa delle istruzioni in linguaggio macchina rispetto alle

organizzazione del sistema. Una trasmissione dati si divide in effetti in diversi livelli, da operazioni di I/O, è comunque necessaria l'interposizione di un software per il pilotaggio

quello fisico-elettronico, che affronta i problemi di forma dei segnali o di campionamento dei delle apparecchiature periferiche. Questo software è a sua volta strutturato in distinti livelli

dati, a quello logico ad alto livello che tratta i dati scambiati come appartenenti ad una nei quali via via si implementa il colloquio fra sistema centrale e periferia (cfr. § 2) e si

determinata applicazione: da un estremo, infatti, l'operazione di I/O è vista come una collega l'input-output con il sistema operativo e con il linguaggio di programmazione.

trasmissione di segnali, dall'altro come un ’operazione che coinvolge logicamente CPU, Il livello più elementare di tale software è costituito da l cosiddetto driver (pilota) che

memoria e sottosistema di I/O. effettua il trasferimento di un messaggio completo dalla periferia ad un buffer di memoria o

Anche sul piano dell’architettura hardware -software, il sottosistema I/O è distribuito in viceversa, ove:

diversi "strati" o livelli, che sono schematizzati in fig. 3.1 e brevemente illustrati in seguito. "messaggio completo" è quello definito caso per caso dal sistema (pu ò essere un

- carattere, un rigo o una pagina di stampa, un blocco di caratteri, un record fisico di una

memoria di massa e cos ì via);

P R IM IT I V E D I L I N GU A GGI O "buffer" è un'area di memoria appositamente a ciò destinata.

-

P R IM IT I V E D I S . O. In tale trasferimento debbono intendersi comprese tutte le necessarie operazioni pi ù

D R IV E R elementari; esse sono implementate nel driver ove non siano già implementate nei livelli

L IN G U A GG IO MA C C H I N A inferiori. Ad esempio, il driver o i livelli inferiori comprendono la sincronizzazione, l'invio

A R C H I T E T T U R A I /O dei comando necessari e l’interpretazione dei messaggi di stato (cfr. § 2).

IN T E R F A CC I A I/ O 1.5 Primitive del sistema operativo

Figura 1.1 Strati del sistema I/O Lo strato del driver e quelli di pi ù basso livello gestiscono essenzialmente i problemi più

1.1 Interfaccia I/O elementari del colloquio, facendo avvenire l'operazione di I/O fra un buffer di memoria ed

Diremo in generale interfaccia di I/O l'apparecchiatura che si interpone fra periferia e una specifica unità periferica, entrambi in genere individuati parametricamente. Nella

processore; il processore la vede come l'oggetto da e verso il quale si effettua l'input o effettuazione delle operazioni di I/O occorr e peraltro tener conto anche di problemi più

l'output e nei suoi riguardi l'interfaccia si presenta con una determinata architettura, generali di gestione del sistema, come l’allocazione dei buffer in memoria e l’associazione di

suddivisa ad esempio in sezione d ’ingresso e sezione di uscita, con uno o più registri da e unità periferiche "logiche" ad unità fisiche, problemi tipicamente gestiti dal sistema

verso i quali il processore invia i suoi messaggi. Dall'altro lato, l’interfaccia si presenta operativo.

adattata alle esigenze logiche ed elettroniche della periferia. Il sistema operativo, pertanto, crea in genere uno strato logico ad un livello relativamente

In particolare, l'interfaccia pu ò implementare gli aspetti più elementari del protocollo di alto, nel quale sono definite operazioni di I/O più sofisticate e complete rispetto a quelle dei

colloquio (cfr. § 2). driver di I/O, quali la creazione di un buffer, l’associazione di un’unità fisica ad un’unità

logica, l’esecuzione di un input o di un output rispetto ad una data unità logica ed un dato

1.2 Architettura I/O buffer e così via.

L'architettura della sezione di I/O di un processore definisce il numero e il tipo dei 1.6 Primitive del linguaggio

segnali, dei bus e delle linee di collegamento fra CPU ed interfaccia, la loro organizzazione e

struttura. Essa dipende da un lato dalla restante architettura del sistema e dall'altro dal tipo di Se si pensa ad una operazione di I/O così come concepita da un linguaggio ad alto livello,

interfaccia che si ipotizza possa essere collegata. essa consiste nel trasferimento di dati identificati da variabili del programma da o verso

Tutte le istruzioni del linguaggio macchina sono eseguite mediante operazioni pi ù unità periferiche o archivi individuati logicamente con nomi mnemonici. Ciascun linguaggio

elementari, che abbiamo detto microoperazioni, definite dall’architettura di macchina. di programmazione definisce inoltre proprie istruzioni di I/O che ipotizzano particolari

L'architettura I/O definisce dunque le microoperazioni con le quali si compongono le strutture logiche degli archivi, particolari tecniche di accesso e così via. Le istruzioni di I/O

istruzioni di I/O; tipicamente esse consistono nello spostamento di un dato da o verso un dei singoli linguaggi richiedono pertanto un livello ulteriore di software e di primitive, al

registro dell’interfaccia, nell'analogo spostamento di un bit di controllo o nell’interrogazione quale fanno riferimento i traduttori di linguaggio.

del suo stato. 2 Il colloquio fra CPU e periferia

1.3 Linguaggio macchina

Per la costruzione dei programmi di I/O, il processore definisce un linguaggio macchina, Il Protocollo di colloquio

2.1

che contiene alcuni codici operativi specificamente dedicati alla esecuzione delle istruzioni di Lo scambio di messaggi fra due apparecchiature prende il generico nome di colloquio, la

I/O; per ciascuna di esse, inoltre, ne definisce la semantica in termini di sequenza di disciplina che lo regola è il protocollo. I protocolli costituiscono un problema più ampio di

microoperazioni del livello architettura. Un semplice modello di riferimento si ottiene affiancando a ciascun messaggio un segnale

quanto non interessi in questa sede: essi, infatti, riguardano in generale la vasta

problematica delle reti di calcolatori, sono anche molto complessi e talora definiti in standard di strobe che definisce l'istante in cui il messaggio stesso può essere acquisito dalla stazione

internazionali; in questa sede, invece, tratteremo soltanto il protocollo di trasmissione fra un ricevente:

elaboratore e la sua immediata periferia, che, pur ispirandosi ai medesimi principi, è molto

più elementare. Diremo strobe-in il segnale per la sincronizzazione verso la CPU e strobe-out

Supporremo dunque che lo scambio di messaggi avviene tra il sistema centrale, ove esiste quello verso la periferia.

un programma di I/O ed un ’unità periferica asservita; lo scambio di messaggi, dunque, non è

allo stesso livello fra le due apparecchiature: è un processore del sistema centrale che, La CPU, dunque, gestisce anche i segnali di strobe; peraltro, per le sue caratteristiche di

eseguendo il programma, controlla le operazioni. macchina programmabile, essa può gestire tale problema, oltre che via hardware come

qualsiasi altra apparecchiatura elettronica, anche via software, mediante apposite istruzioni

I protocolli variano con i bus di collegamento nonché con l'unità periferica; nel seguito

tuttavia si sottolineano gli aspetti concettuali comuni, come premessa allo studio della per l'invio dello strobe -out e per l’interrogazione dello strobe -in (cfr. § 12) .

sezione d ’ingresso/uscita dei processori e delle annesse istruzioni in linguaggio macchina. 2.5 Segnali di controllo

2.2 Messaggi scambiati fra CPU e periferia La CPU e la periferica si scambiano, oltre ai messaggi di cui sopra (dati, comandi, stati),

Sul piano concettuale, un ’operazione di uscita consiste nell’invio alla periferia da parte appositi segnali di tempificazione (strobe -in e strobe -out di cui al punto 1.4) e segnali di

della CPU di un insieme di messaggi (dati, comandi, segnali di controllo), tali che un blocco controllo.

di dati sia trasferito dalla memoria ad uno specifico supporto periferico, quale il foglio di

carta della stampante, lo schermo video, una memoria di massa, etc. Analogamente, Fra i segnali di controllo assumono particolare importanza i seguenti:

un’operazione d’ingresso produce il trasferimento da un supporto periferico (una tastiera, una - ack, nack (acknowledge): indica in generale "dato riconosciuto";

memoria di massa, etc.) alla memoria. - nack: dato non riconosciuto (not ack)

Fra CPU e periferia fluiscono dunque dati in entrambe le direzioni: verso la periferia per le - err: errore

operazioni di uscita, verso il sistema centrale per quelle d’ingresso. Ma oltre ai dati fluiscono - re q: richiesta di dato

anche altri messaggi: poich é in ogni caso è la CPU ad eseguire il programma di I/O, questa - end: fine

invia comandi alla periferia ed è "informata" sullo stato di quest'ultima, in modo da potere

condizionare di conseguenza lo sviluppo del programma. Tali segnali assumono significati particolari nel contesto dei singoli protocolli e sono in

Dalla CPU alla periferia fluiscono dunque appositi comandi, che "ordinano" l’esecuzione genere realizzati mediante singoli bit. In protocolli di rete gli stessi messaggi possono essere

di una determinata operazione, ad esempio "inizia la trasmissione", "invia il dato", "arresta il invece realizzati attraverso appositi blocchi di caratteri.

movimento", "riavvolgi il nastro", "seleziona una determinata traccia nel disco", "vai a capo 2.6 Trasmissioni a blocchi

pagina", etc.

In direzione opposta fluiscono stati, cioè indicazioni che sintetizzano le condizioni di Se si escludono i casi banali, in genere occorre trasmettere un blocco di N>1 messaggi

funzionamento della periferia e gli eventi accaduti, ad esempio "sono pronta", "errore", etc. Il elementari dalla memoria centrale alla periferia o viceversa; si pensi ad esempio al

programma, infine, invia i comandi e recepisce gli stati ad esempio se la periferia è pronta trasferimento di un intero record di memoria di massa, di un rigo di stampa o, in generale, del

inizia la trasmissione dei dati, se c'è stato un errore ripete la trasmissione e così via. contenuto di un buffer periferico. Diremo in tal caso che si ha una trasmissione a blocchi.

Assumeremo dunque un modello di riferimento secondo il quale i messaggi scambiati fra CPU Con riferimento al modello di cui sopra, la trasmissione a blocchi pu ò essere una trasmissione

e periferia sono così classificati: di dati, di comandi o di stati.

Una trasmissione a blocchi è caratterizzata da un insieme di parametri che definiscono

- Messaggi in input: dato, stato fondamentalmente l'indirizzo di memoria iniziale (A) del blocco e la sua lunghezza (N);

- Messaggi in output: dato, comando s’intende poi che il blocco si sviluppa da A ad indirizzi crescenti (A, A+1,.., A+N -1) o

decrescenti (A, A-1,..., A-N+1).

2.3 Parallelismo delle trasmissioni

Il sistema centrale e la periferia sono fra loro collegati mediante appositi bus con 3 Le fasi del colloquio

parallelismo di un bit, un carattere o una parola-macchina, mentre i messaggi che essi devono

scambiarsi possono avere la medesima dimensione in bit o anche quella di un più ampio 3.1 Apertura, corpo e chiusura

blocco. Il colloquio che si stabilisce tra CPU e periferia ha in generale l'obiettivo di trasmettere

dati nell'una o nell'altra direzione e realizza tale obiettivo attraverso operazioni che

Diremo messaggio elementare quello con parallelismo pari ad un byte oppure una verificano la possibilità di iniziare il colloquio, effettuano la trasmissione vera e propria,

parola del processore. controllano lo stato delle apparecchiature ed il verificarsi di errori.

Nei casi pi ù complessi, i protocolli definiscono apposite fasi, quali apertura, corpo e

Eventuali messaggi o trasmissioni con parallelismo diverso (bit o blocco) saranno trattati chiusura e forniscono le regole per ciascuna attività inclusa nelle singole fasi; nei casi più

solo esplicitamente. semplici non esiste un’articolazione definita del colloquio, ma in ogni caso questo deve

affrontare alcuni problemi tipici che qui si pongono in evidenza.

2.4 Sincronizzazione dei messaggi elementari

I messaggi inviati in entrambi le direzioni debbono essere "sincronizzati", nel senso che 3.2 Selezione della periferia

l'apparecchiatura ricevente deve essere in qualche modo "informata" dell’istante in cui il Alla CPU sono in generale collegati, direttamente o indirettamente, più sistemi periferici,

messaggio è effettivamente in arrivo. Una soluzione semplice del problema si ottiene con a loro volta connessi a pi ù unità; i supporti di queste ultime possono consistere in aree di

l'ausilio di appositi segnali di campionamento (strobe). memoria indirizzabili (si pensi alla memoria di massa). È pertanto necessario che nel

colloquio siano inserite le operazioni necessarie alla selezione della singola unità del sistema, con le risposte reciproche fra A e B. Essa ha in primo luogo funzioni di

periferica e, al suo interno, delle posizioni del supporto da o per il quale il movimento di dati tempificazione: la risposta fornisce infatti una informazione che condiziona l'avanzamento

deve avvenire. Si rinvia al seguito (cfr. § 5) per un approfondimento del problema. del colloquio, nel senso che un ulteriore messaggio è inviato solo dopo la ricezione della

risposta. Nella fig. 4.1 è ad esempio mostrato lo schema fondamentale per lo scambio di dati

3.3 Corpo della trasmissione con la tecnica di cui sopra: in input la CPU invia una "richiesta dato" (re q) solo dopo aver

acquisito il dato precedente, in output invia il dato successivo solo dopo aver ricevuto un

Una seduta di colloquio tra CPU e periferia è in genere dedicata alla trasmissione di un "dato ricevuto" (ack) dalla periferia.

certo numero di dati elementari; a seconda dei casi, dunque, si trasmette un insieme di dati

singoli, un unico blocco di dati oppure un insieme di blocchi di dati. Inp ut Output

si st ema cent ral e pe ri feria si st ema cent ral e pe ri feria

3.4 Controllo di errore •••• ••• •• • ••• •• ••• •• •• •• •••••• •••••••• ••

Nel colloquio con periferiche pi ù sofisticate o comunque in sistemi pi ù completi si invia req invia dat o

prevedono operazioni di controllo su eventuali errori o funzionamenti anomali; apposite fasi invia dat o acquis i sce dat o

acquis i sce dat o invia ack

del colloquio possono essere destinate a tale scopo. invia req invia dat o

Si ricorda che il problema dei controlli di errore in trasmissione si risolve in generale invia dat o acquis i sce dat o

trasformando i messaggi in messaggi ridondanti ed effettuando in ricezione un controllo di acquis i sce dat o invia ack

compatibilità fra il messaggio ricevuto e le regole che esso deve verificare affinch é sia •••• ••• •• • ••• •• ••• •• •• •• •••••• •••••••• ••

corretto. Il controllo pi ù semplice è quello con singolo bit di parità (altri sono con l'aggiunta Figura 4.1 Schemi di colloquio asincrono[2]

di più bit di parità o con caratteri di controllo appositi): ad ogni messaggio trasmesso viene

aggiunto un bit che rende complessivamente pari (o dispari) il numero di bit "1" del codice: il Se la risposta fornisce informazioni sul buon e sito della trasmissione, la tecnica asincrona

trasmittente, allora, deve avere la capacità di calcolare ed aggiungere tale bit ed il ricevente consente inoltre un controllo del colloquio, determinandone sviluppi diversi a seconda della

di controllare la parità del codice. Il protocollo di colloquio definisce da un lato le regole risposta ricevuta. Ad esempio se in output si prevedesse oltre alla risposta ack anche una nack

attraverso le quali il sistema individua un errore e dall'altro quali sono le azioni conseguenti. (non riconosciuto), il colloquio potrebbe proseguire per una via alternativa se pervenisse

Alcuni protocolli localizzano alla fine del colloquio la fase di controllo di eventuali errori, quest'ultima; analogamente se in input pervenisse, in risposta ad un re q, un err. invece di un

da implementare con la tecnica dello scambio di comandi e stati; altri protocolli prevedono un dato.

controllo continuo ed un ’eventuale sospensione del colloquio in caso negativo. Ad esempio, Per un corretto funzionamento di un colloquio asincrono è necessario che si tenga conto

una trasmissione a blocchi potrebbe essere sospesa per una risposta "errore" da parte della della cosiddetta condizione di time-out.

stazione ricevente, altri controlli potrebbero essere effettuati attraverso la ricezione di uno

"stato finale" della periferia. Condizione di time-out: non perviene alcuna risposta entro limiti di tempo

Circa eventuali azioni da intraprendere in conseguenza di un errore, il protocollo fissa la accettabili prefissati.

strategia: il caso più semplice è l'abbandono dell'operazione con comunicazione dell'errore al

programma di utente, il caso più diffuso è quello di tentare un certo numero di volte Questa condizione si verifica per effetto di guasti o di condizioni anomale: al fine di

l'operazione, abbandonandola solo se l'errore risultasse persistente. evitare che il sistema si blocchi in attesa della risposta, i protocolli fissano in generale un

tempo limite, trascorso il quale si prende atto che la risposta non è pervenuta e si opera di

4 La sincronizzazione. Tecnica asincrona e sincrona conseguenza (ad esempio ritenendo errata la trasmissione).

4.2 Tecnica sincrona

Un problema fondamentale nelle operazioni di I/O è quello della sincronizzazione, che si

può vedere a tre distinti livelli: In antitesi alla tecnica asincrona, esiste quella cosiddetta sincrona.

- per individuare l'inizio di una trasmissione (o di un blocco di dati, di un "frame") su una Tecnica sincrona: è basata esclusivamente sull'uso di un segnale esterno di

linea seriale: esistono due distinte tecniche, asincrona (o start/stop) e sincrona (o tipo tempificazione (clock).

SYNC/SYNC/.../START), non trattate in questo capitolo;

- a livello del messaggio elementare: come si è visto al § 2, avviene a mezzo di segnali di La tecnica si basa, quindi, sulla misura di intervalli di tempo: ad esempio, A invia a B dati

strobe; a frequenza preassegnata.

- a livello del colloquio, per individuare il susseguirsi di messaggi: questa tecnica, qui Con riferimento agli schemi di fig. 4.1, ad esempio, mancano i messaggi re q ed ack; in

illustrata in dettaglio, può essere anch'essa asincrona oppure sincrona[1]. input si esclude dunque il controllo da parte della CPU ma la periferia invia comunque il dato

indipendentemente dalla richiesta; in output la CPU, che in genere è più veloce, deve essere

4.1 Tecnica asincrona rallentata per consentire alla periferia le successive ricezioni.

Una diffusa tecnica con la quale si realizza il colloquio fra due apparecchiature A e B è la In realtà, un vero e proprio colloquio si ottiene soltanto con la tecnica asincrona.

tecnica asincrona.

Tecnica asincrona: ad ogni messaggio inviato da A a B segue un messaggio di 5 La selezione della periferia

risposta da B ad A. 5.1 Topologia del collegamento

Ad esempio, un dato è la risposta al comando (o al segnale) re q ed un ack è la risposta ad Come si è già accennato, uno dei problemi gestiti dalle operazioni di I/O è quello della

un dato. selezione della periferia, che qui si affronta al livello di concetti generali. Uno schema

La tecnica è detta asincrona in quanto lo sviluppo del colloquio è condizionato dall'interno topologico di principio relativo al collegamento fra CPU e periferia è rappresentato da un

albero ove la radice costituisce il nucleo centrale della CPU e le foglie le singole unità prevede l’invio in parallelo di dati ed indirizzo. La preselezione, invece, è tipica del

periferiche. Ciascun nodo pu ò essere collegato a quelli del livello successivo con una diversa collegamento seriale multipunto.

tecnica di collegamento, come di seguito specificato. La tecnica di collegamento punto -punto pu ò essere infine realizzata sia selezionando volta

a volta il nodo di livello i+1, sia preselezionandolo: dipende dalla struttura interna del nodo

Tecniche di collegamento fra i nodi: di livello i.

- punto-punto: attraverso bus dedicati (fig. 5.1a)

- multi-punto: attraverso un bus comune (fig. 5.1b) 6 Architettura del sottosistema I/O

5.2 Selezione per collegamenti punto-punto e multi-punto I sistemi di I/O si dividono in due categorie:

Nel collegamento punto -punto (fig. 5.1a), il nodo di livello i seleziona quello di livello - sistemi con interfacce passive

successivo in modo non dissimile da come opererebbe per selezionare al suo interno distinti - sistemi indipendenti: DMA e processori I/O

registri: riceve dal livello precedente l'indirizzo del nodo (o del registro), con il quale

seleziona il bus dedicato: la selezione è interna al nodo di livello i.

Nel collegamento multi -punto (fig. 5.1b), invece, è il nodo di livello i+1 che collabora con Nei primi, la CPU esegue direttamente le istruzioni di I/O operando attraverso

quello di livello i per essere selezionato; a tale scopo, riceve dal nodo di livello i il proprio l'interfaccia, nei secondi le delega ad apposite apparecchiature attive, dette DMA oppure ai

indirizzo (oppure un apposito segnale di selezione). processori di I/O (nel passato, venivano anche dette canali).

Si noti dunque che un indirizzo ricevuto da un ’apparecchiatura può avere due significati Per entrambi, lo schema di collegamento fra il processore centrale ed un organo periferico

distinti: indica o una selezione che l'apparecchiatura deve effettuare al suo interno come nel finale (tastiera, stampante, disco, etc.) prevede l’interposizione di più apparecchiature che via

caso punto -punto (selezione nella apparecchiatura), oppure la sua stessa selezione come nel via adattano la logica e l'elettronica delle macchine da connettere.

multi-punto (selezione della apparecchiatura). 6.1 Sistemi con interfacce passive

5.3 Selezione seriale o parallela

Nel pi ù diffuso modello di collegamento multi-punto, la tecnica di selezione può essere

parallela o seriale. Quella parallela è basata sull'operazione simultanea su due bus, dei quali Sistema elaboratore periferia

uno trasmette il messaggio e l'altro l'indirizzo: gli schemi di fig. 5.1b rappresentano allora i Micropr.

bus fisici del collegamento fra le apparecchiature.

Con la tecnica seriale non esiste invece un apposito bus per l'indirizzo, ma questo viene interfaccia controllo

trasmesso con una logica sequenziale su di un unico bus che in momenti diversi trasmette i Perifer.

CPU I/O periferica

dati; l'apparecchiatura ricevente distingue l’indirizzo dai dati in quanto essi si susseguono nel

tempo. La tecnica di selezione può allora essere descritta attraverso un automa: A B

l’apparecchiatura ricevente pu ò essere in uno stato di "riposo" RIP o in uno stato "attivo" Figura 6.1- Schema di collegamento con la periferia.

ATT, ove trasmette o riceve dati e transita da RIP ad ATT se riceve il proprio indirizzo Ip,

ritorna allo stato di riposo se riceve il codice F di "fine stato attivo" (fig. 5.1c). In fig. 6.1 è mostrato uno schema di principio del collegamento fra CPU e periferia per un

sistema che gestisca direttamente le istruzioni di I/O: la CPU è collegata attraverso un bus a

più interfacce I/O ; ciascuna a sua volta collegata con uno o più unità di controllo della

D A TI periferia che si connettono con l'unità periferica in senso stretto.

i i+1 L’interfaccia di I/O è un’apparecchiatura, talora indipendente e talora allocata nel sistema

IN D IR IZ ZO a) centrale, che da un lato si collega con il processore e dall'altro con la periferia. Nelle

moderne architetture a microprocessori spesso è realizzata con una "scheda" che si inserisce

R IP negli alloggiamenti a ci ò predisposti dal sistema centrale.

Ip

F Le unità periferiche, dal canto loro, sono composte essenzialmente di due sezioni: l'una, di

A TT tipo elettromeccanico, che provvede alla vera e propria immissione od emissione di dati (la

C) tastiera, il video, il trasportatore del disco, etc.) e l'altra, essenzialmente di tipo logico, che

D A TI da un lato interfaccia con i segnali elettromeccanici della prima e dall'altro con le linee verso

i+ 1

i il sistema centrale.

IN D IR IZZ O La natura ed il numero dei segnali scambiati sono diversi fra le diverse coppie di

b) apparecchiature: fra la CPU e le interfacce (fig. 6.1, sezione A) il collegamento avviene così

come fra gli altri organi interni del sistema quali la memoria; fra le interfacce e le unità di

Figura 5.1 Schemi di collegamento per la selezione: controllo periferico (sezione B) fluiscono i messaggi di cui al protocollo di trasmissione; fra

a) a bus dedicato (punto -punto); b) a bus comune (multi-punto) l'unità di controllo periferico e la parte elettromeccanica (sezione C), infine, viaggiano

segnali tipici della singola unità periferica, quali i dati codificati secondo le regole di

5.4 Selezione dinamica o preselezione quest'ultima o i segnali di attuazione degli organi elettromeccanici.

In qualche caso la selezione avviene dinamicamente, ogni volta che si trasmette un dato; in

altri, avviene una tantum, all'inizio del colloquio, cio è l’apparecchia tura viene preselezionata 6.2 Sistemi a canale indipendente

e mantiene il suo stato finché non venga esplicitamente rimosso.

La selezione dinamica si realizza agevolmente con la tecnica parallela multi -punto, che tratteremo i due casi come due sottomodelli.

istr u z io n i Modello DMA

6.2.1

a ltr e is tr u z io n i

d i I/ O

CPU Diremo semplicemente DMA, con dizione diffusa per i prodotti commerciali che sottolinea

soprattutto la sua capacità di accedere indipendentemente alla memoria, un’apparecchiatura

M EM che esegue una trasmissione a blocchi per volta. La CPU, all'atto dell'avvio, gli comunica i

CAN parametri della trasmissione da eseguire.

t

in a t ti v o v ia I/O e s e g u e I /O

a1 a2 b Modello di processore I/O (PIU)

6.2.2

Diremo Processore d’ingresso-uscita, PIU, un’apparecchiatura che è un vero e proprio

Figura 6.2. Schema temporale di funzionamento di un canale processore dedicato alle operazioni di I/O; in quanto tale, esso sviluppa un algoritmo di

"fetch-execute" di istruzioni, con il quale esegue un "programma di I/O". A tale scopo sono

Nei sistemi pi ù evoluti, la CPU non gestisce direttamente le operazioni di input/output, ma utilizzabili sia processori costruiti ad hoc sia processori "general purpose". La prima

le delega ad una "interfaccia intelligente” o ad un altro processore, che diremo genericamente soluzione è tipica delle architetture dei mainframe del passato[5]: essendo specializzati

canale[3] (cfr. § 6.2.1, 6.2.2), in grado di eseguire autonomamente dette operazioni, senza costruttivamente per l'esecuzione di operazioni di I/O, possiedono un repertorio di codici

sottrarre tempo alla CPU. In tal caso, la CPU gestisce direttamente operazioni di avvio, di operativi particolare; La seconda soluzione è quella che prevale nelle architetture moderne:

arresto e in generale di controllo del funzionamento del canale, mentre è quest'ultimo che essa specializza il processore non costruttivamente, ma per le funzioni che assume nel

esegue le vere e proprie operazioni di I/O. sistema.

In fig. 6.2 è mostrato uno schema temporale di funzionamento di CPU, memoria e canale: In entrambi i casi, il PIU assume in pieno il ruolo che nel modello di interfaccia passiva

all'inizio (t<a1) il canale è inattivo e la CPU esegue le sue istruzioni, accedendo alla memoria era assunto dalla CPU; esso dunque esegue trasmissione singole o a blocchi e sviluppa in

quando necessario; al tempo a1 la CPU è chiamata ad eseguire un’istruzione di "via I/O", con generale un "programma di I/O". La CPU, all'atto dell'avvio del PIU, gli comunica il

la quale delega al canale l’esecuzione delle operazioni di I/O, essenzialmente una o più programma da eseguire o trasmettendoglielo integralmente (se il PIU ha una memoria-

trasmissioni a blocchi; al tempo a2 il canale inizia l'esecuzione di tali operazioni mentre la programma indipendente) oppure fornendogli l’indirizzo di memoria ove esso inizia (se la

CPU prosegue con l'esecuzione di altre istruzioni; il funzionamento in parallelo di CPU e memoria-programma del PIU è condivisa con quella della CPU).

canale prosegue fino al tempo b, quando il canale completa il suo compito.

Il collegamento fra CPU, memoria e canale è schematicamente mostr ato in fig. 6.3. Il

canale è collegato direttamente con la memoria, secondo uno schema di collegamento detto 7 Caratteristiche generali dei linguaggi macchina I/O

DMA, Direct Memory Access: tale schema consente il funzionamento parallelo fra CPU e

canale, in quanto la trasmissione a blocchi avviene in modo indipendente dai circuiti della 7.1 Sintassi e semantica del linguaggio

CPU [4]. Verso la periferia, il canale è collegato, come la CPU in fig. 6.1, attraverso apposite Si dice in generale che un ’operazione è introdotta nella sintassi di un linguaggio di

interfacce; il canale infatti assume le funzioni che nel modello precedente appartenevano alla programmazione se esiste una specifica struttura (in linguaggio macchina uno specifico

CPU. codice operativo) che la prevede; se invece l'operazione va programmata usando generiche

istruzioni con particolari operandi e/o particolari sequenze di istruzioni si dice che essa è

ottenibile per via semantica.

In linea di principio, la scelta sintattica è orientata ad una specifica soluzione e pertanto

CANALE dovrebbe presentare la massima efficienza possibile per quella soluzione, ma è poco

CPU I/O flessibile. Per contro, la scelta semantica possiede primitive più elementari e pertanto il

massimo grado di flessibilità, ma pu ò perdere in efficienza per la realizzazione di operazioni

complesse. Ovviamente, così come in tutti i problemi dell'informatica, i modelli realizzati

sintatticamente da un sistema sono in genere realizzabili semanticamente da sistemi con

primitive pi ù elementari.

a)

MEM La realizzazione del colloquio di I/O avviene per mezzo di istruzioni in linguaggio

macchina che, in conformità a quanto detto finora, effettuano trasmissione di dati, di comandi

e analisi degli stati della periferia, ma ci ò può avvenire a mezzo di soluzioni sintattiche o

semantiche.

CANALE

CPU MEM I/O In linea di principio (e nel processo storico di evoluzione delle architetture) è possibile

b) assegnare alle istruzioni in linguaggio macchina diversa "potenza" operativa Da un estremo,

Figura 6.3- Modello con canali indipendenti: a) a bus dedicati; b) a bus comune ad esempio, il linguaggio potrebbe comprendere due sole operazioni, input ed output di un

dato, che assumono soltanto ai livelli superiori significati diversi (trasmetti dato, trasmetti

La CPU, dunque, gestisce istruzioni di avvio del canale, comunicando a questo i parametri comando, etc.) e che ancora ai livelli superiori siano inclusi gli elementi del protocollo di

necessari alla definizione delle operazioni da eseguire; inoltre, pu ò gestire istruzioni di colloquio. In altri termini, la sintassi del linguaggio macchina è estremamente povera tutte le

arresto del canale e di interrogazione del suo stato, ad esempio per conoscere se è disponibile soluzioni avvengono al livello semantico: è questa la linea di tendenza delle architetture

per effettuare nuove operazioni, oppure se le operazioni precedenti si sono concluse con moderne, l'assunzione di modelli elementari semplici nel linguaggio macchina, rinviando ai

successo o con errori. livelli superiori la soluzione dei problemi pi ù complessi.

Le capacità autonome del canale variano da quella dell’esecuzione di soltanto una singola Dall'altro estremo è possibile che già a livello di linguaggio macchina i messaggi siano

trasmissione a blocchi a quella dell’esecuzione di un vero e proprio programma di I/O; differenziati, ad esempio, esistono distinti codici operativi per inviare dati o comandi o per

var

ricevere stati: era questa la tendenza nei vecchi main frame. RC: registro-controllo

Le istruzioni fanno riferimento ad un modello dell’interfaccia o della periferica collegata, che sono registri di transito da o per la periferia (RI, RO) e per lo scambio con la CPU di

almeno per quanto attiene alla loro struttura in termini di registri da e verso i quali si messaggi di controllo (RC).

realizzano le trasmissioni di dati. Nella soluzione sintattica delle vecchie architetture, tale dato

modello è specificato al livello di linguaggio macchina, ad esempio prevede distinti registri Sezione

RI input

per trasmettere dati o comandi, in quella delle architetture moderne ci ò avviene stato

semanticamente a livello di programma, ad esempio variabili diverse del programma RI stato

rappresentano dati o comandi. RC

In ogni caso, le istruzioni del linguaggio macchina sono definite in base ad un modello che flag Sezione

RC controllo

"vede" il mondo esterno in modo semplice e schematizzato; il mondo reale, costituito dalle comando

effettive periferiche collegate al sistema, nel quale occorre implementare il colloquio pi ù o RO

meno complesso, non è invece trattato dal linguaggio macchina, ma soltanto ai diversi livelli dato Sezione

RO

superiori del sistema, ad esempio nel driver della specifica periferica. a) output

comando

7.2 Caratteristiche generali del linguaggio macchina b)

Il linguaggio macchina realizza le operazioni elementari inquadrandole nel-l’architettura Figura 8.1 Modelli di interfaccia:

complessiva del processore e nella tecnica generale di realizzazione di tutte le istruzioni in a) modello a 3 registri; b) modello funzionale a tre sezioni;

linguaggio macchina; valgono dunque per le istruzioni di I/O tutto quanto esposto al capitolo

del linguaggio macchina in generale: la sintassi delle istruzioni, il riferimento implicito o Più generale, l’interfaccia è costituita da tre intere sezioni, dedicate rispettivamente alle

esplicito agli operandi, la loro natura (immediato, registro o memoria) e così via. funzioni di input, output e controllo, ciascuna delle quali composta da più registri.

Le caratteristiche generali dei linguaggi macchina sono condizionate dalle scelte Assumeremo pertanto il modello funzionale di cui alla fig.8.1b), che pu ò così descriversi,

sintattiche o semantiche effettuate in una serie di problemi di seguito illustrati: considerando astratti i 3 registri RI, RO, RC:

• Esistenza o mancanza d’istruzioni I/O : non tutti i linguaggi macchina comprendono al tipo registro -ingresso =

livello sintattico istruzioni di I/O. In molti casi (si veda in seguito modello “memory cartesiano

mapped ” del § 11) vengono usate per realizzare tali operazioni istruzioni che nascono per dato: registro-dati (8.1')

scopi diversi, come quelle di load o di store. È questo un caso limite ma molto diffuso: stato: registro -stati

tutte le operazioni di I/O vengono costruite adoperando semanticamente istruzioni non end;

specificamente costruite per l'I/O; non è dunque predefinito alcun modello di I/O, che pu ò tipo registro -uscita=

essere costruito c on la flessibilità del software e prendendo spunto dai modelli sintattici cartesiano

degli altri linguaggi macchina. dato: registro-dati (8.1")

• Selezione della periferia. La selezione della periferia avviene in linguaggio macchina o con la tecnica comando: registro-comandi

della selezione dinamica oppure con quella della preselezione (cfr. §.5.5). Nel caso dell’indirizzamento end;

dinamico, il linguaggio macchina prevede che in ciascuna istruzione sia inserito un operando che funge da

indirizzo di selezione; quest’ultimo viene inviato sul bus-indirizzi oppure (nelle architetture storiche) tipo registro -controllo =

realizza una selezione interna. Nel caso della preselezione, il linguaggio macchina deve consentire cartesiano

apposite istruzioni (in via semantica o sintattica) che selezionano la periferia; ad esse seguiranno le stato: registro -stati

istruzioni per l’invio o la ricezione dei dati, che sono rivolti comunque alla periferica preselezionata. comando: registro-comandi (8.1''')

• Sincronizzazione. Problema fondamentale per la scrittura di un programma di I/O è la sincronizzazione array of

flag: [1..n] bit

delle operazioni: un input deve essere effettuato quando il dato in ingresso è pronto, un output quando la end

periferica è in grado di assorbirlo e comunque deve essere "segnalato" alla periferica affinché questa lo

acquisisca. A tale scopo si adoperano i segnali strobe-in, strobe-out (cfr. § 1.4) e di controllo (cfr. § 2.5). Modello funzionale di interfaccia

Solo in casi particolari il linguaggio macchina gestisce sintatticamente questi segnali; nella maggioranza

dei casi essi sono trattai semanticamente dal programma di I/O (cfr. ad esempio § 12). Un’interfaccia è composta di 3 sezioni:

• Trasmissioni a blocchi. Una trasmissione a blocchi può essere realizzata o con un DMA appositamente - d’ingresso, con registro-dato e registro -stato

interfacciato con la CPU, oppure con apposite istruzioni a blocchi gestite direttamente dalla CPU oppure - di uscita, con registro -dato e registro-comando

ancora con istruzioni gestite da un processore di I/O. - di controllo, con registro -stato, registro -comando e flip-flop di controllo.

Il modello recepisce lo schema di colloquio di cui al § 2, ove i messaggi sono suddivisi in

8 Modello funzionale di interfaccia dati, comandi e stati. In particolare, la sezione di uscita distingue i messaggi in dati veri e

propri (RO.dato) ed in comandi (RO.comando) che l’interfaccia inoltra verso la periferia,

Un’interfaccia svolge essenzialmente una funzione di transito di messaggi da o per la quella d’ingresso in dati (RI.dato) e stati (RI.stato) destinati alla CPU.

periferia ed una funzione di controllo, intesa come tempificazione, controllo di errori e La sezione di controllo è schematizzata con alcuni flip-flop (RC.flag[i]) che svolgono

definizione del suo stesso comportamento. Essa pu ò pertanto essere schematizzata attraverso i funzioni elementari e con due registri (RC.stato, RC.comando) che svolgono funzioni

tre registri di cui alla fig.8.1a): analoghe a quelle di RI.stato o RO.comando, ma con riferimento al comportamento

var RI: registro -ingresso dell’interfaccia nella sua globalità e non della periferia ad essa collegata. Ad esempio:

var RO: registro -uscita • un comando in RO.comando è diretto alla periferia; se questa è una stampante potrebbe

significare "vai a capo pagina"; contenente un numero discreto di registri: lo spazio degli indirizzi è suddiviso fra le

• diverse interfacce. L'indirizzo su IOA ha dunque una duplice funzione: selezione della

un comando in RC.comando definisce le proprietà dell'interfaccia quali le dimensioni in

bit di RI ed RO, o se il controllo di errore debba essere per parit à o per disparità; interfaccia e selezione nella interfaccia (cfr. § 5.3).

• Il modello così realizzato completa quello di fig. 6.1a) e consente di collegare

uno stato in RI.stato è relativo alla periferica e potrebbe significare "carta inceppata";

• apparecchiature comunque realizzate (e non soltanto quelle di assegnata struttura interna,

uno stato in RC.stato potrebbe indicare che l'interfaccia sta effettuando un’operazione

d’ingresso, che è libera da impegni e così via. come avveniva per le architetture chiuse).

Interfacce che possiedono tali caratteristiche si dicono impropriamente programmabili. Il 9.2 Le istruzioni

modello è quello di principio cui si ispirano le interfacce concrete, senza necessariamente In secondo luogo, il modello definisce la semantica delle istruzioni in linguaggio

adottarlo alla lettera: alcune interfacce possiedono solo una o due delle sezioni di cui sopra e macchina, cioè le microoperazioni da esse realizzate. Il modello contiene soltanto istruzioni

le sezioni un numero minore di registri. In fig.8.2 è mostrato un modello ridotto all'essenziale di ricezione o trasmissione di un dato singolo (le istruzioni a blocchi, sono presentate nel

rispetto a quello di fig. 8.1, che sarà ampiamente usato in seguito: le sezioni di input ed prossimo paragrafo) e, coerentemente con il modello di interfaccia, intende un’operazione

output possiedono il solo registro -dato e quella di controllo due soli flip-flop. Il modello d’ingresso come quella che porta il dato da IOD all'interno del processore, una di uscita

corrisponde allo schema fisico di interfaccia ed al modello sintattico usato da un'architettura quella che effettua il trasferimento inverso; in entrambi i casi, un indirizzo è posto sul bus

del passato[6] e viene ancora oggi usato come modello semantico nelle architetture moderne IOA e pertanto si ha::

(cfr. § 12). - Input: A := IOD; IOA:= B (9.1)

Sezione

RI input - Output:

Sezione IOD := A IOA:= B (9.2)

C F controllo ove A, B sono due operandi, a seconda dei casi e delle tecniche di indirizzamento impliciti od

Sezione

RO output espliciti, operandi -registri o operandi-memoria Se IOA è l’indirizzo di uno dei registri delle

interfacce [8], il modello fondamentale e volve in quello che diremo modello a registri

indirizzabili: le operazioni sono riferite al registro P[IOA].

Fig. 8.2 - Modello funzionale di interfaccia ridotto Modello I/O isolato

9.2.1

Questi modelli funzionali sono realizzati semanticamente nelle architetture moderne, si

veda ad esempio modello a messaggi differenziati realizzato con quello a registri Nel modello I/O isolato (in contrapposizione al modello memory mapped ) si assume uno

indirizzabili, dopo di avere approfondito i due modelli (cfr. §§ 9, 10). spazio di indirizzamento per l’I/O indipendente da quello di memoria e quindi le (9.1), (9.2)

diventano:

9 Modello fondamentale di programmazione I/O Modello a registri indirizzabili (I/O isolato):

- Input:

Facciamo qui riferimento alle architetture di I/O moderne che sono dette aperte in A := P[B] (9.3)

contrapposizione alle architetture chiuse[7] del passato, alle quali si farà talora riferimento - Output:

attraverso gli inserti. In queste architetture il modello pi ù diffuso è quello che è presentato in P[B] := A (9.4)

questo paragrafo e che diremo fondamentale.

9.1 L'interfaccia Modello memory mapped

9.2.2

In primo luogo il modello definisce la struttura dell'interfaccia. A dispetto del modello Nel modello a registri indirizzabili, le istruzioni assumono per il processore un significato

funzionale del paragrafo precedente (che in queste architetture è realizzato solo simile a quelle di move da o per la memoria: rispettivamente l'input è simile al load, l'output

semanticamente), lo schema di interfaccia “visto” dal linguaggio macchina è molto allo store. Alcuni processori, sulla base di tale considerazione, non possiedono un ’apposita

elementare (cfr. fig. 9.1): il processore vede soltanto un insieme P di registri singolarmente sezione di collegamento con l'I/O, ma assumono a tale scopo la sezione di collegamento con

indirizzabili; CPU ed interfaccia sono collegate attraverso un unico bus bidirezionale IOD, la memoria, facendo fisicamente e logicamente coincidere il bus IOA con il bus MA che porta

genericamente detto bus-dati, ed un bus-indirizzi IOA che seleziona il registro indirizzato. Il l'indirizzo di memoria ed il bus IOD con il bus MB del memory buffer (fig. 9.2). Un apposito

messaggio da o per l'interfaccia fa riferimento al registro P[IOA], che pu ò a seconda del selettore, decodificando l'indirizzo posto su MA e riconoscendolo appartenente alla memoria

valore di IOA diventare semanticamente il registro-dati, il registro-comandi etc. oppure ad uno dei registri di I/O, abilita all’operazione una delle due apparecchiature.

P(1)

IOD dato P(2) IOD =MB

CPU IOA indirizzo P(k)

) CPU Mem Sel. Interfaccia I/O

Figura 9.1 Modello fonda mentale di interfaccia IOA =MA

Nella realtà fisica, il processore è collegato con un insieme di interfacce, ciascuna

Figura 9.2. Architettura del modello memory mapped addirittura come un insieme di locazioni di memoria) e ad essa va inviato un insieme di

messaggi, che nei suoi riguardi assumono il significato dei vecchi modelli, anche se per il

processore rappresentano altrettanti "dati" trasmessi. Una istruzione di "avvio di canale", ad

Il modello è detto memory mapped in quanto i registri di I/O appartengono allo stesso

spazio indirizzabile di memoria: alcuni degli indirizzi di memoria sono "sostituiti" da esempio, può essere sostituita da una trasmissione a blocchi in registri di determinato

indirizzi dei registri di I/O, secondo il modello che segue. indirizzo, quale ad esempio:

for to do

k:= 1 N P[i+k]:= A[j+k]

I parametri della trasmissione, A[j+k], sono quindi inviati nei registri indirizzabili P[i+k] e

Modello memory mapped: l'apparecchiatura è "avviata". Se l’apparecchiatura è un DMA, ad esempio, le vengono

- Input = load: trasmessi i dati che caratterizzano lunghezza, inizio del blocco di dati da trasmettere e

A := M[B] (9.5) direzione della trasmissione ed il DMA “parte ” per la trasmissione a blocchi, liberando il

- Output = store: processore centrale.

M[B] := A (9..6) Il modelli del passato, pertanto, non hanno soltanto interesse storico ma spesso

costituiscono le linee guida entro le quali individuare i contenuti del software per la

ove: costruzione dei driver per il controllo dei canali.

- A è un operando -registro, destinazione dell'input o sorgente dell'output; 10.3 Lo scambio degli stati

- B è un indirizzo appartenente allo spazio indirizzabile di memoria ma fisicamente

coincidente con uno dei registri di interfaccia. La ricezione da parte del processore dello stato della periferia e la possibilità di

interrogarlo per condizionare lo sviluppo del programma di I/O è essenziale in ogni sistema

istruzioni semplici di I/O secondo il modello fondamentale è

Una esemplificazione di che debba implementare un sia pur minimo protocollo di colloquio. Le architetture chiuse

mostrato nell'inserto. "storiche" risolvevano il problema con soluzioni hardware, nel senso che le stesse istruzioni

di I/O definivano un comportamento che teneva conto del problema, mentre le architetture

aperte che adottano il modello fondamentale lo risolvono via software, nel driver per la

10 La programmazione dei driver gestione della periferia: un particolare registro del banco P è lo stato della periferia ed

apposite istruzioni di input da P[s] fungono da input di stato.

10.1 Modello fondamentale e modelli sintattici Per stato della periferia si pu ò intendere un ’informazione globale adattabile a qualsiasi

Il modello fondamentale e quello a registri indirizzabili non avanzano nessuna ipotesi sul periferica, come "apparecchiatura pronta" o "impegnata in altre operazioni", oppure

piano sintattico sul significato dei dati scambiati fra la CPU e l'interfaccia: a seconda dei casi informazioni di maggior dettaglio specifiche di ciascuna apparecchiatura, come "dischetto

essi sono veri e propri dati in transito attraverso l’interfaccia da o per la periferia, comandi non montato" oppure "carta inceppata"; la struttura ad albero del collegamento con la

inviati alla periferia oppure stati di questa. Inoltre, i problemi di sincronizzazione non sono periferia (interfaccia o canale, sottocanale, unità di controllo locale, singole unità

gestiti sintatticamente: nessun segnale di controllo o di tempificazione è sintatticamente periferiche) rende pi ù complesso il problema, in quanto occorre trattare lo stato dei diversi

affiancato al bus IOD (che invece è di solito fisicamente affiancato da uno strobe-in ed uno nodi dell’albero. Il protocollo di colloquio, d’altro canto, è opportuno che tenga conto di tale

strobe-out per determinare gli istanti in cui l’apparecchiatura ricevente deve memorizzare il classificazione; ad esempio, il comportamento del sistema se la periferica è “non pronta”

messaggio). A questi problema occorre provvedere per via semantica. potrebbe dipendere dallo stato di maggior dettaglio: è occupata in altra stampa, la carta è

inceppata, la carta è esaurita, etc.

Per le architetture storiche, viceversa, sono stati usati altri modelli; a due di questi

facciamo particolare riferimento: L’acquisizione dello stato può essere quindi gestita su più livelli: ad un primo si

acquisiscono informazioni abbastanza generali per essere comuni a qualsiasi operazione di

• il modello a messaggi differenziati, nel quale la sintassi distingue le nozioni di dato, I/O, ai livelli successivi, interrogati se necessario, informazioni via via specifiche della

comando e stato e prevede codici operativi diversi a seconda dei casi; singola unità

• il modello a sincronizzazione programmata, nel quale la sintassi definisce una struttura Per le architetture aperte, ci ò significa mettere a disposizione del programmatore di

della interfaccia e fornisce i codici operativi per la sincronizzazione.; in questo paragrafo sistema più registri di stato che rappresentano i diversi livelli e che sono interrogati nelle

è illustrato il modello fondamentale, diverse fasi del colloquio[9].

A questi modelli si fa ancora oggi riferimento nella costruzione dei driver di I/O, assumendo architetture storiche per il

Un riferimento alle soluzioni adottate al livello sintattica dalle

a livello semantico le ipotesi in essi definite sintatticamente. problema dello scambio degli stati fornisce idee di soluzioni.

Per la programmazione del modello a messaggi differenziati con quello a registri

indirizzabili si veda l'inserto. Per la programmazione del modello a sincronizzazione

programmata si veda il protocollo handshake (cfr. § 12). 11 Istruzioni a blocchi

10.2 Il controllo dei canali indipendenti Per istruzione a blocchi si intende un’istruzione che realizza la trasmissione di un blocco

di dati da un supporto perifer ico alla memoria o viceversa.

Le architetture del passato spesso assumevano sintatticamente l'esistenza di canali In quanto segue supporremo che un ’apposita interfaccia gestisca l’operazione, ricevendo

indipendenti collegati alla CPU e prevedevano apposite istruzioni nel linguaggio macchina dal (o trasmettendo al) supporto periferico i successivi dati del blocco, che transitano sempre

per il loro avvio, arresto e controllo, riservando invece al linguaggio macchina del canale per il medesimo registro dell’interfaccia. Il modello assume una interfaccia a registri

l'esecuzione delle vere e proprie istruzioni di I/O. Questo modello è sintetizzato in I/O: i indirizzabili e ipotizza che l'istruzione definisca:

canali del passato. - l’indirizzo di selezione B,

Nelle architetture moderne, invece, per il processore non esiste una sintassi che individua - l'indirizzo di memoria A del primo dei dati del blocco,

un canale (un DMA o una PIU) come sottosistema, ma il canale è "semantico": - la lunghezza N del blocco, espressa in numero di dati elementari

l'apparecchiatura è vista come una generica periferica (nel caso di modello memory mapped

e realizzi l'algoritmo che segue. Interfaccia I/O Controllo periferia

req

C

P[j]

- Istruzione a blocchi: strobe-in

F

i:=0 ; k:=N; (11.1)

while do

k>0 dato

RI [i]

P[i]

begin IOA := B;

IOD :=M[A+i] {M[A+i]:= IOD per l'input} Figura 13.1 Protocollo handshake d ’ingresso

i:=i+1; k:=k -1

end - re q, segnale collegato al flip-flop C: agisce sulla periferia attraverso il fronte di salita; sul

piano della programmazione, si ottiene la richiesta re q ponendo in set il flip-flop C;

- strobe-in, segnale proveniente dalla periferia: agisce come strobe elettronico, consentendo

Nel modello proposto, dunque, un blocco di dati, con indirizzo di memoria da A in poi, la memorizzazione del dato in RI ed inoltre svolge una funzione logica, posizionando il

viene trasferito all'indirizzo del registro di interfaccia B o viceversa; nelle architetture reali, flip-flop F, che pu ò essere interrogato dal programma.

invero, la semantica delle istruzioni può essere più articolata: Schematicamente, il colloquio avviene con la sequenza che segue:

- alla trasmissione del dato IOD:=M[A+i] è tipicamente affiancato un segnale di strobe -out; - set C (richiesta dato: via dell'input)

- la trasmissione pu ò essere resa asincrona (cfr. § 4) con l'impiego di appositi segnali - reset F

hardware del ciclo di macchina; in un colloquio sincrono, viceversa sarebbe necessario che repeat until

- read F F (attesa di strobe) (13.1)

la periferia "seguisse" la frequenz a di trasmissioni del processore; - read dato (input in senso stretto)

- le istruzioni possono essere completate da informazioni ausiliarie che ne definiscono un - rese t C

comportamento più articolato; ad esempio, comprendono un’indicazione sul fatto che Con tale sequenza il processore dapprima lancia la richiesta di un dato, quindi si pone in

l'accesso in memoria sia in senso ascendente o discendente. attesa del suo arrivo ed infine lo acquisisce. Il tempo che il processore deve attendere dal via

all'arrivo dello strobe dipende dalla velocità del sistema periferico e può anche essere

È da notare che nel modello memory mapped non esistono istruzioni a blocchi, in quanto notevole se confrontato con i tempi di funzionamento del processore; durante il tempo di

difficilmente ricavabili da analoghe istruzioni di move a blocchi [10]. D ’altro canto, nelle attesa il processore resta inattivo e due tecniche fondamentali sono adoperate per ridurre

architetture moderne le trasmissioni a blocchi sono tipicamente realizzate attraverso DMA. questa inattività: il funzionamento in sovrapposizione (overlay) fra due input e le

interruzioni.

La tecnica dell'overlay (sovrapposizione) consiste nell ’organizzare il driver in modo che

12 Protocollo handshake esso operi su di un singolo carattere e nel fare in modo che il programma principale, fra una

chiamata e la successiva di questo, esegua alcune altre operazioni, purch é esse occupino un

La tecnica fondamentale del colloquio asincrono (cfr. fig. 4.1) prevede per l'input un tempo inferiore a quello che passa fra una richiesta e l'arrivo del dato corrispondente. In

messaggio "richiesta dato" (re q) da parte del processore ed una risposta dato da parte della particolare, la sequenza per la trasmissione di N caratteri si pu ò organizzare come segue:

periferia; la tecnica elementare di sincronizzazione prevede inoltre che al dato in input sia Inizializzazione:

associato un segnale strobe-in (cfr. § 2.4). Per l'output, analoga mente, ad un dato segue il - set C (via input del primo dato)

messaggio di "riconosciuto" (ack) e la sincronizzazione avviene con uno strobe-out. Un - reset F

protocollo elementare nel quale il dato sia un dato elementare (ad esempio un singolo - ...

carattere) e i messaggi re q, ack semplici segnali binari è detto handshake . Ripetizione in ciclo per i da 1 a N-1

I passi fondamentali del colloquio sono tipicamente contenuti in appositi programmi che - rese t C

costituiscono il nucleo del driver di I/O. Tratteremo dunque in questo paragrafo il nucleo dei repeat until

- read F F (attesa di strobe i -esimo)

driver più elementari, cio è quelli che operano sulla base del protocollo handshake; faremo a - read dato (input i-esimo) (13.2)

tale scopo riferimento ad un modello detto a sincronizzazione programmata che nel passato è - set C (via input del dato (i+1)-esimo)

stato usato come modello sintattico in alcune architetture e che oggi è diffuso a livello - reset F

semantico. Esso suppone l'interfaccia realizzata secondo il modello di fig. 8.2. - ...

- ...

12.1 Protocollo d’ingresso Ultima trasmissione

Il protocollo handshake d’ingresso avviene con lo scambio dei segnali binari re q e strobe- - rese t C

in come illustrato in fig.13.1, ove lo schema di interfaccia è quello di fig. 8.2, con i due flip- repeat until

- read F F (attesa di strobe N -esimo)

flop C ed F ed un registro di ingresso, RI[i]. I segnali da e per la periferia sono: - read dato (input N -esimo)

e, trascurando il primo e l’ultimo dato, la parte centrale della sequenza costituisce il driver.

La tecnica delle interruzioni sarà esaminata al paragrafo successivo.

programmata sintatticamente ; il modello

In alcune architetture del passato la (13.2) era

fondamentale assunto dalle architetture moderne (cfr.§10), invece, non riconosce

sintatticamente n é RI n é tantomeno i bit C ed F. Si usa allora assumere a tale scopo alcuni

registri dell'insieme P per contenere da un lato RI e dall'altro i bit C ed F, ad esempio P[k]

come rappresentativo di RI e due bit di P[j] come rappresentativi di C ed F; tipicamente

rispettivamente i bit più e meno significativi (in tal modo, C=1 si ottiene ponendo P[j]=1 output) può essere eliminata con l'uso appropriato del sistema delle interruzioni. A tale

mentre l'arrivo dello strobe -in rende negativo il contenuto di P[j], in quanto pone ad 1 il suo scopo si associ il segnale C con una "maschera" ed F con una "richiesta" di interruzione;

bit-segno). Detto allora R un registro con il quale effettuare il transito di un dato essendo allora abilitato il sistema delle interruzioni, l’invio del segnale C dal processore alla

dall'interfaccia di I/O alla memoria nel quale sia trasferito l'input[11], il nucleo della (13.2) periferia (re q in input, strobe -out in output) rende quest’ultimo sensibile alla risposta

diventa: associata che viaggia su F (strobe -in in input, ack in output) e che si presenta come

un’interruzione. Il processore, dunque, in attesa di quest'ultima, non deve necessariamente

Ripetizione in ciclo per i da 1 a N-1 effettuare un ciclo a vuoto come nel paragrafo precedente, ma pu ò effettuare altre

- R:=0; P[j]:=R reset C, F operazioni.

repeat until

- R:=P[j] R<0 attesa di strobe i-esimo

- R:= P[k]; dato:=R read dato (input i-esimo) (13.3) 13.1 Interruzione in ingresso

- P[j]:=1 set C, reset F La sequenza (13.2) viene implementata sostituendo il set di C[i] con l'abilitazione del flip-

- ... flop M[i], che assume un duplice ruolo: maschera delle interruzioni per il processore, re q per

la periferia. In luogo dell'attesa il processore pu ò svolgere altre operazioni, mentre la

Negli inserti sono presentate esemplificazioni per la realizzazione di quanto sopra sia nelle periferica, non appena ha pronto il dato, segnala tale evento ponendo ad 1 il flip-flop i -esimo

architetture che adottano il modello fondamentale sia per quelle storiche con il modello a del registro richiesta di interruzioni. Il servizio di questa causa di interruzione provvede alla

sincronizzazione programmata. effettuazione dell'operazione di input. Si ha, cio è, lo schema di programma:

12.2 Protocollo di uscita AG:=1 abilitazione interruzioni

Analogo a quello d ’ingresso è il protocollo di uscita; il segnale C assume allora il M[i]:=1 set C: via primo input

significato di strobe-out ed F quello di ack (fig.13.2). La sequenza, analoga a quella di input, ...

si può esprimere con lo schema che sovrappone l'ack del carattere precedente con l'invio di altre operazioni

quello attuale: ...

mentre nella Interrupt Service Routine sarà realizzato l'input vero e proprio:

Interfaccia I/O Controllo periferia ISR:

strobe-out - ...

C

P[j] - M[i]:=0 rese t C

ack

F - dato:= RI input dato

- M[i]:=1 set C; via altro input

- ...

P[i] RI[i] - ritorno da interruzione

Figura 13.2. Protocollo handshake in uscita 13.2 Interruzione in uscita

- reset C, F Analoga è l'operazione di output: la maschera delle interruzioni svolge anche la funzione

- attesa di ack precedente (interroga F) di strobe -out mentre la richiesta di interruzione generata dalla periferica è interpretato come

- output in senso stretto (13.4) ack del dato trasmesso e richiesta di trasmissione di un nuovo dato. Si ha dunque (non è

- invio di strobe-out (set C) evidenziato l'algoritmo per la fine della trasmissione):

AG:=1; abilitazione interruzioni

e, con le stesse ipotesi del protocollo di input, si ha per il modello fondamentale: RO:= dato output primo dato

M[i]:=1 strobe -out

- R:=0; P[j]:=R reset C,F altre operazioni

repeat until

- R:=P[j] R<0 attesa di ack i -esimo ...

- R:=dato P[k]:=R; read dato (input i-esimo) (13.3) e il servizio delle interruzioni:

- P[j]:=1 set C, reset

- ... ISR:

- ...

Negli inserti già citati sono presentate esemplificazioni dei protocolli, oltre che di input, - M[i]:=0 rese t C

anche di output sia nelle architetture che adottano il modello fondamentale sia per quelle - RO:= dato output altro dato

storiche con il modello a sincronizzazione programmata. - M[i]:=1 strobe-out

- ...

Per concludere, si noti che un'unica interfaccia potrebbe svolgere entrambe le funzioni di *

input e di output: il bus-dati è allora bidirezionale, il segnale re q opera come strobe-out in * *

uscita, ack come strobe-in in ingresso, Con la sincronizzazione a mezzo dell’interruzione si ottiene dunque il vantaggio che il

processore è utilmente impegnato nell'attesa che la periferia sia pronta per eseguire

13 I/O sincronizzato da interruzioni l'operazione: il processore di conseguenza svolge complessivamente una quantità di lavoro

maggiore nell'unità di tempo o, come si dice in linguaggio tecnico, ha un troughput migliore.

La fase in cui il processore resta inattivo in attesa dello strobe-in (in input) o dell'ack (in Per contro, il tempo che trascorre dall'istante in cui la periferia è effettivamente pronta (ed

esterni PC Card 16

alza quindi il segnale strobe -in o ack) e l'istante in cui viene servita (dato:=RI oppure Porta

USB CardBus

RO:=dato) è maggiore di quello della soluzione del paragrafo precedente: lì era dell'ordine di Parallela

IEEE 1394 Dispositivi

grandezza del tempo per eseguire 1 o 2 istruzioni, qui è il tempo necessario per eseguire la IDE/ATA

parte di testa delle ISR. Ne segue, che per operazioni di I/O veloci è preferibile la soluzione ATAPI

del paragrafo precedente. Figura 14.1: Architettura basata su bus PCI.

14 Interfacce e bus per i PC Nel seguito si propone una breve sintesi (solo parzialmente estesa negli inserti di

approfondimento) delle principali interfacce collegabili al PCI o alle espansioni ad esso

Le unità di I/O sono tipicamente collegate al processore attraverso appositi bus che ne attaccate:

caratterizzano il comportamento sia dal punto di vista del colloquio sia da quello delle • Porta seriale, storica interfaccia seriale collegata al bus ISA;

prestazioni, tipicamente la velocità di trasferimento dati, sia infine da quello elettrico. Il bus • Porta parallela, storica interfaccia parallela, anch'essa collegata ad ISA;

di cui si è detto ai §§ 9 in uscita dalla CPU verso la memoria e la periferia (cfr. ad esempio • Interfacce IDE/ATA, naturale e storica espansione del bus ISA per il collegamento a dischi magnetici,

figg. 9.1, 9.2) costituisce in effetti il cosiddetto bus interno[12], che è caratterizzato dal oggi ancora in uso;

colloquio elementare ivi studiato e dalla velocità di trasferimento dati verso la memoria. • Interfaccia SCSI (pronuncia scasi), per il collegamento di svariati dispositivi (dischi, cassette, dischi

In quella sede si è ipotizzato per semplicità che la periferica fosse collegata direttamente ottici, dischi rimovibili, sottosistemi RAID, scanner, stampanti, plotter, etc.) in impianti complessi.

al bus interno, ma ciò non accade in realtà. Nell’architettura dei PC, spesso ripresa anche dai • Interfaccia USB, in via di massima espansione, per il collegamento delle periferiche più moderne;

sistemi più evoluti, al bus interno sono connessi altri bus attraverso appositi bridge (per • Interfaccia IEEE 1394, in particolare adatta per il collegamento isocrono di apparecchiature multimediali;

adattarne caratteristiche elettriche) o interfacce, per adattarne anche caratteristiche logico - • Interfaccia PCMCIA, diffusa negli anni '90 per sostenere la tecnologia delle "PC cards", dispositivi di I/O

funzionali e definirne nuovi protocolli di colloquio. per i PC portatili.

In primo luogo, al bus interno sono connessi appositi “bus di espansione”, che permettono

di inserire all’interno del computer apparecchiature aggiuntive, quali adattatori video, Altre interfacce proprietarie oppure legate a gruppi di Aziende produttrici esistono o sono

acceleratori grafici, sound card e modem interni (expansion boards). esistite nel passato (si citano le interfacce SSA, Serial Storage Architecture, e il progetto

I primi PC facevano uso di un bus di espansione chiamato bus AT o bus ISA (Industry Fibre Channel), ma per esse si rinvia ai cataloghi dei produttori.

Standard Arc hitecture), dotato di una frequenza di 8 MHz ed un parallelismo di 16 bit, poi

evoluto nell’Enhanced ISA (EISA) a 32 bit. Per motivi storici, citiamo anche il bus MCA

(Micro Channel Architecture) proprietario su macchine IBM. Questi bus, tuttavia, sono stati

rapidamente superati in quanto la loro velocità di trasferimento costituiva un vero e proprio [1] Si consiglia un attento uso dei termini "sincrono" ed "asincrono", ai quali sono attribuiti significati diversi in diversi

collo di bottiglia a seguito delle sempre migliori prestazioni delle periferiche. contesti.

[2] Nel seguito (§12) e sono ipotizzati come segnali binari e la tecnica è riproposta in dettaglio per il protocollo

ack req

L’evoluzione tecnologica ha fatto sì che, a partire dal 1992, fossero proposte soluzioni potrebbero anche essere blocchi messaggi realizzati

handshake, ma in questa sede essa è presentata in generale: e

ack req

radicali che sostituivano il bus di espansione con i pi ù veloci bus locali, dando vita allo come blocchi di dati.

standard VESA Local Bus (da Video Electronics Standards Association), o VL Bus e poi [3] Usiamo qui un termine oggi in disuso, ma molto usato nel passato per individuare questa classe di apparecchiature

all’attuale (1999) più flessibile bus PCI (Peripheral Component Interconnect). Il bus ISA che comprende i DMA e i processori di I/O.

tipicamente permane, collegato con un bridge al PCI, per motivi di compatibilità con [4] Eventuali conflitti, derivanti dal fatto che simultaneamente CPU e canali richiedono l'accesso in memoria, sono

dispositivi più lenti che ben si adattavano alla vecchia tecnologia (cfr. fig. 14.1). risolti, in base a criteri di priorità, da apposite apparecchiature dette "arbitri".

[5] Classici sono rimasti i dell'architettura IBM 370.

channel

Il bus PCI ha prestazioni elevate: è dotato infatti di un parallelismo a 64 bit, anche se [6] I calcolatori della serie HP 2100

spesso viene proposto nella versione a 32; ha una frequenza di 33 o 66 MHz: per dare un [7] Nel passato la strategia di produzione delle apparecchiature era quella di far sì che alla CPU di un produttore si

esempio delle prestazioni ottenibili con tali dati, con semplici calcoli è possibile ricavare che collegassero soltanto quelle periferiche che aderivano ad un modello chiuso e predefinito proprio del costruttore: ne

con un parallelismo a 32 bit e frequenza pari a 33 MHz , la velocità del bus è di 132 MB/s. derivava una completa definizione del modello che era poi assunto a livello di linguaggio macchina.

Una delle ragioni del grande successo del bus PCI è che esso viene popolato da adattatori con [8] Il modello può essere adoperato in questa versione originale, senza che IOA assuma il significato di indirizzo; questa

velocità che sono prossime a quelle del bus locale della CPU. soluzione è adottata come una delle vie di collegamento con l'esterno (oltre a quella attraverso canali) da alcuni grossi

sistemi ad architettura chiusa (cfr. esempio 370 § 10); in tal caso, il bus IOA è detto IOC (I/O Control) ed invia un

generico comando alla periferia, opportunamente interpretato da questa; IOC non ha funzioni di indirizzamento in quanto

Host/ l'apparecchiatura così collegata è unica.

Memoria di Memoria

PCI/

CPU Video

Sistema [9] Le architetture chiuse, viceversa, fissavano le regole del colloquio una volta per tutte nel linguaggio macchina ed

Cache

Bus Bus affidavano in gran parte a questo la soluzione del problema.

bridge

Locale di Memoria [10] La trasmissione a blocchi richiede che IOA sia costante nei vari passi del ciclo (cfr. 10.5), mentre un move a

blocchi, ove esista, richiede che tanto IOD quanto IOA si incrementino nel ciclo.

Bus PPCIPCI [11] Si suppone che l'istruzione di I/O trasferisce un dato dall'interfaccia ad un registro di macchina.

[12] In qualche caso, nelle architetture più moderne, è anche detto bus esterno alla CPU, per porre in evidenza ancora un

altro livello nella gerarchia dei bus e delle memorie.

PCI PCI/ Interfaccia Interfaccia PCI/ISA

Periheral PCMCIA SCSI LAN bridge

Interconnect bridge

bridge Porta

Seriale

Dispositivi PC Card

esterni PC Card 16

Programmazione di dati, comandi e stati Il modello chiuso delle architetture storiche

nel modello a registri indirizzabili In contrapposizione al modello aperto, il modello chiuso delle vecchie architetture

consentiva soltanto il collegamento di periferiche sintatticamente compatibili con il

linguaggio macchina, che vede inglobate nell ’elaboratore le interfacce, estendendosi fino alla

dato=P[0] sezione B della fig. 6.1.

Sezione

RI input

stato=P[1] #1

stato=P[2] #2

P[3]

RC Sezione CPU

controllo

com.=P[4]

dato=P[5] Sezione

RO #k

output

com. =P[6] Figura 1 Modello chiuso: sezione I/O a selezione interna.

Si supponga di volere programmare nel modello a registri indirizzabili una interfaccia come

quella del modello di fig. 8.1 b), qui riproposta. In particolare, il modello chiuso vede sintatticamente un insieme limitato di k (ad esempio

Ai registri del modello si assegna un indirizzo (come in figura) in modo che la 16 o 64) interfacce realizzate secondo uno specifico modello (uno di quelli di fig.8.1 oppure

differenziazione fra dati, comandi e stati possa essere semanticamente progettata: P[0] di suoi derivati), la cui selezione avviene con tecnica interna al processore: è anche detto

significherà registro-dato della sezione di ingresso, P[1] registro-stato e così via. modello a selezione interna. Se la CPU gestisce direttamente l'I/O, gli oggetti da selezionare

(#1, #2, etc. in figura) sono interfacce passive, se le delega a specifici canali o subprocessori

di I/O, allora gli oggetti sono questi ultimi. Il modello è chiuso in quanto le scelte sui modelli

di interfaccia sono effettuate al livello di progetto del linguaggio macchina (vedi come

esempi modelli " a messaggi differenziati” del e "a sincronizzazione programmata").

Capitolo settimo

Le memorie

1 Modello di unità di memoria

Il modello a registri indirizzabili 1.1 Modello generale

Istruzioni di I/O semplici 1.2 Memorie indirizzabili

1.3 Memorie associative

Qui sono presentate le architetture esemplificate 1.4 Memorie meccanicamente statiche e dinamiche

Qui la legenda dei simboli per indicare la natura di un operando 2 Celle elementari. Parametri di una memoria.

2.1 Celle elementari

Qui i simboli generali e specifici per individuare i registri di macchina 2.2 Parametri di una memoria

3 Memorie e selezioni associative

4 Metodi di selezione

4.1 Selezione lineare e a più dimensioni

1 Architetture con modello fondamentale 4.2 Selezione spaziale, temporale e con chiave

Fra le architetture esemplificate, il solo 8086d opera con I/O isolato, le altre due con il 5 Gerarchia di memorie

modello memory mapped. I codici dell'8086d fanno riferimento alle (10.3, 10.4): 6 Memorie RAM

- l'operando A, origine o destinazione interna del dato, è l'Accumulatore implicito AX; 6.1 Capacità e parallelismo

- l'operando B, indirizzo di selezione, è un immediato, o un registro implicito. 6.2 Memorie SRAM e DRAM

6.3 Buchi di memoria

Tabella 10.1 6.4 Controllo di errore:parità ed ECC

Codici operativi per istruzioni d ’ingresso-uscita 7 Memorie a sola lettura

(Modello fondamentale) 7.1 ROM

Istruzione 8086d 68000d RISCd 7.2 Memorie scrivibili una volta

7.3 Memorie riscrivibili

Input 8 Architettura fondamentale delle memorie RAM

d:= P[im] IN 8.1 Interfaccia verso l’esterno

d:= P[r] IN 8.2 Celle di memoria e loro selezione

R:= P[G] --- 8.2.1 Selezione lineare

M:= P[R] --- 8.2.2 Semiselezione

a blocchi INS 9 Architettura di un sistema di memoria RAM

Output 10 Collegamento CPU-memoria

P[im]:= d OUT 10.1 Collegamento asincrono

P[r] := d OUT 10.2 Collegamento sincrono: memorie SDRAM

P[G] := R --- 11 Cenno alla tecnologia delle RAM

P[R] := M --- 11.1 SRAM bipolari

a blocchi OUTS 11.2 DRAM basata su MOS

Le istruzioni a blocchi dell'8086d, implementata in alcuni processori da questo derivati

(80186) sono relative a memorizzazioni discendenti ed in un caso tutti gli operandi sono

individuati da registri impliciti, nell'altro sono istruzioni a tre operandi tutti espliciti. Premessa

Componente fondamentale del modello di elaboratore è la memoria, che si presenta nelle

2 Architetture con I/O memory mapped due versioni di memoria centrale o di lavoro e di memoria di massa. In questo capitolo si

Come si è detto, aderiscono al modello memory mapped, che fu introdotto dal PDP-11, il introducono i concetti e i parametri che definiscono in generale una memoria e si presenta in

68000d e il RISCd. Per esse si vedano dunque le istruzioni di trasferimento dati. particolare il modello della memoria di lavoro, detta anche comunemente RAM (nello stesso

Ad esempio, nel 68000d, l'output della costante 1 verso la periferica il cui registro dato sia capitolo si capirà perché).

"mappato" all'indirizzo di memoria i, si realizza con normali operazioni di move:

{ }

MOVE.B #1,i P[i]:=1 1 Modello di unità di memoria

Istruzioni di I/O storiche.

Per le architetture "storiche si veda l'inserto 1.1 Modello generale

Con il termine unità di memoria o semplicemente memoria ci si riferisce in generale ad un

sistema organizzato con un insieme di registri (nel senso generale del concetto) che sia in

grado di effettuare le operazioni di:

- scrittu ra, cioè posizionamento di un registro in un determinato stato o, in altre parole, Nelle memorie indirizzabili, ogni registro è univocamente individuato da un numero intero,

registrazione del valore di un dato; da 0 a N -1 se la memoria possiede N registri. Il tipo di MS è dunque integer e il registro MS

- lettura, cioè rilievo dello stato di un registro o, in altre parole, prelievo dalla memoria del assume il nome di memory address, MA; si ha dunque nella (1.1):

valore registrato; var array[0..N of

- selezione, cio è individuazione di un registro fra tutti quelli costituenti la memoria, al fine M:= -1] registro -memoria; (1.3)

di effettuare su di esso una delle operazione di cui sopra. e la notazione M[MS] diviene quella di un elemento di array individuato da un intero.

Tipica memoria indirizzabile è la memoria centrale di un calcolatore.

Da un punto di vista del tutto generale, pertanto, ciascuna operazione di scrittura o lettura

avviene su un registro della memoria: a seconda dei casi, il registro contiene un carattere o 1.3 Memorie associative

una parola-macchina o, per le memorie di massa, un blocco (o record fisico). Porremo in

generale: Nelle memorie associative, la registrazione in memoria è strutturata, in quanto c omposta

dal dato propriamente detto (anch'esso in genere strutturato) e da una informazione associata,

tipo registro-memoria = T detta chiave , atta ad individuare univocamente la registrazione stessa (cfr. fig. 1.2):

e riterremo la memoria rappresentata dal modello di fig.1.1, ove: tipo registrazione

- MS (Memory Select), di tipo TS, è un dato che individua il registro di memoria da cartesiano

selezionare; si vedrà in seguito che TS può essere integer, per le memorie indirizzabili e chiave: TS; (1.4)

qualsiasi per le memorie associative. dato: T

- M è l'insieme dei registri di memoria ed è espresso da: end

var array[TS] of

M: registro -memoria; (1.1) e la notazione M[MS] individua il dato associato alla chiave di valore MS: in fase di lettura si

seleziona l'unica registrazione (se esiste) con la chiave associata, in fase di scrittura si

- MB (Memory Buffer), dello stesso tipo T dei registri di memoria, è il dato in transito verso registrano chiave e dato.

la memoria (per la scrittura) o dalla memoria (per la lettura).

- RE (Read Enable), WE (Write Enable) sono due segnali binari che a bilitano, chiave dato

rispettivamente, le operazioni di lettura o di scrittura; essi, ovviamente, non possono essere

concomitanti. …………. ……………………….

…………. ……………………….

La memoria nella sua interezza può essere così schematizzata: …………. ……………………….

procedure var

memoria (MS:TS; RE,WE: boolean; MB :T); Fig.1.2 Memoria associativa

var array of

M: [TS] T;

begin 1.4 Memorie meccanicamente statiche e dinamiche

if then

RE MB:= M[MS] (1.2) Le operazioni di lettura, scrittura e selezione avvengono con tecniche diverse dipendenti

else if then

WE M[MS]:= MB dall'elemento fisico costituente la cella elementare e dalle caratteristiche tecniche richieste.

end Dal punto di vista meccanico, le memorie possono essere statiche o dinamiche. Nelle prime,

sia il supporto fisico sia il dato sono fermi rispetto al sistema di lettura-scrittura ed un dato è

individuato esclusivamente dalla sua posizione spaziale: le operazioni di accesso alla

memoria avvengono staticamente, nel senso che non esistono organi in movimento.

RE WE Nelle memorie meccanicamente dinamiche, viceversa, il supporto, o comunque il dato in

esso memorizzato è in movimento rispetto al sistema di lettura-scrittura e tale movimento

viene sfruttato per l'operazione di selezione e/o per quella di lettura- scrittura.

Giova ricordare fin d ’ora che i termini “statico ” e “dinamico” applicati comunemente alle

memorie nella pratica corrente non si riferiscono tuttavia alle loro caratteristiche meccaniche,

MS bensì a quelle elettroniche (cf. § 6.2).

2 Celle elementari - Parametri di una memoria

2.1 Celle elementari

Una memoria è costituita da un lato di celle elementari, intese come dispositivi atti a

MB memorizzare il singolo bit e dall'altro dai sistemi di lettura, scrittura e selezione o, più in

generale, dalla sua architettura.

Figura 1.1 - Modello di memoria La cella elementare pu ò essere costituita, in linea di principio, da un qualsiasi mezzo fisico

bistabile nel quale si associ convenzionalmente a ciascuno dei due stati uno dei due valori del

Sul piano delle tecniche di selezione, le memorie si possono funzionalmente classificare in bit da memorizzare. I più diffusi elementi elettronici impiegati a tale scopo sono oggi:

memorie indirizzabili ed associative. - circuiti a stato solido (chip integrati), basati su multivibratori bistabili (flip-flop),

apparecchiature costituite da coppie di transistori bipolari (elettronicamente statiche,

1.2 Memorie indirizzabili

SRAM) oppure su transistori MOSFET dei quali si adopera la capacità interelettrodica effettuare l'operazione vera e propria di scrittura o lettura. È inoltre da distinguere il

(elettronicamente dinamiche, DRAM); tempo netto per effettuare una singola operazione fisica e il tempo per effettuare

- superfici magnetiche, sulle quali si sfruttano i metodi di registrazione magnetica basati sul un’operazione completa dal punto di vista logico: quest'ultimo è in generale maggiore del

movimento reciproco della superficie rispetto ad apposite "testine di lettura -scrittura "; tempo fisico e viene detto tempo di ciclo.

- memorie ottiche, nelle quali la scrittura è ottenuta mediante apposita “incisione” su una C) Casualità di accesso

superficie metallizzata (o mezzi analoghi) e la lettura mediante la differente riflessione di Mentre in alcune memorie il tempo necessario per la selezione di un dato è costante, in

una raggio laser. altre risulta variabile con la posizione che il dato stesso assume all'interno del supporto di

Altri elementi, come tubi elettrostatici, nuclei magnetici, diodi tunnel, materiale memoria. Le memorie del primo tipo, dette ad accesso casuale o random, sono in genere

superconduttivo, pellicole magnetiche, sono stati o sono tuttora impiegati come elementi di quelle in cui il sistema di lettura -scrittura opera staticamente, mentre quello del secondo tipo,

memoria, anche se meno frequentemente e in applicazioni particolari. dette ad accesso non ca usale, sono meccanicamente dinamiche; in queste ultime, infatti, il

Dal punto di vista meccanico, le memorie a chip di circuiti integrati sono statiche mentre tempo per la selezione dipende dalla distanza fra il sistema di lettura -scrittura e la posizione

sono dinamiche quelle magnetiche ed ottiche, che adoperano supporti a forma di nastri o del dato sul supporto. Il tempo di accesso è dunque costante per le memorie casuali, variabile

dischi. per quelle non casuali; alcune memorie, infine, in cui il tempo di accesso è poco variabile con

Sul piano dell’architettura, si individuano due principali funzioni delle memorie, la posizione dell'informazione, vengono dette ad accesso quasi casuale o ad accesso diretto.

costituenti due sistemi distinti: Sono tipicamente casuali le memorie realizzate con circuiti integrati, non casuali le altre. In

linea di massima, sono ad accesso sequenziale le memorie a nastro magnetico e ad accesso

- Il sistema di memoria centrale, realizzato con memorie meccanicamente statiche, diretto quelle a dischi.

tipicamente a circuiti integrati: ad esso accede direttamente (o, come si vedrà, attraverso

memorie intermedie dette cache) il processore centrale per attingervi singolarmente D) Volatilità

istruzioni e dati. Si dicono volatili quelle memorie in cui l'informazione tende a distruggersi con il tempo

- I sistemi di memoria di massa, in genere meccanicamente dinamici, nelle varie oppure con la mancanza delle tensioni di alimentazione, permanenti le altre; esempi di

configurazioni di nastri, dischi, dischetti: in essi le informazioni sono strutturate in blocchi volatilità del primo tipo sono le memorie basate sulla carica di capacità (come le memorie

che vengono spostati integralmente nella memoria centrale prima di essere elaborati. DRAM a tecnologia MOSFET), esempi del secondo tipo le memorie a flip-flop, mentre le

Come si vedrà, queste due classi di memoria costituiscono solo due componenti di una più memorie magnetiche ed ottiche sono in genere permanenti (cfr. § 6.2).

ampia "gerarchia di memorie". Nella Tabella 2.1 sono indicate le caratteristiche tecniche tipiche delle principali memorie

ad oggi (2003); per i dettagli si veda in seguito. Si noti tuttavia che tali parametri sono

fortemente variabili nel tempo.

2.2 Parametri di una memoria

I principali parametri di una memoria si possono così schematizzare. Tabella 2.1 - Principali parametri delle memorie

Cap acit à

A) Capacità Tem p o d i Velo cit à di

Tip o Casu alit à Vo la tilit à

(1 mo d ulo o

È il nume ro di dati che può contenere la memoria; si esprime indicando da un lato il tra sferim en to

ac cess o volu me)

numero N complessivo di registri della memoria e dall'altro la lunghezza in bit dei singoli RAM 2 -20 ns ----- -- 16 M B - 1GB casual e si

registri. Di sc hi 10 – 100 .4-50 GB di rett o no

Per le memorie centrali, la capacità si esprime oggi in byte (8 bit), indipendentemente da di pende

ms

quale sia l'organizzazione interna della stessa (a byte, a parole di 16 o di 32 bit, etc.) e da interf acci a

Na st ri 30 s .100 GB se quen zial e no

soltanto ad un secondo livello di specifica tale organizzazione viene messa in evidenza. Per

una vecchia consuetudine che deriva dal fatto che tipicamente dette capacità sono uguali a

numeri che coincidono con potenze di 2, si usa assumere 3 Memorie e selezioni associative

10 =1024

1 kilo= 2 Si ha ad esempio una

e di conseguenza vengono valutati gli altri multipli del byte (Mega, Giga, etc.)[1], Il modello di memoria associativa definito al § 1 ha una duplice valenza: da un lato

memoria (o meglio un modulo di memoria) di: rappresenta memorie meccanicamente statiche per le quali effettivamente si applica una

• 1MB (1M×8 bit), selezione di tal genere (come ad esempio le memorie cache e le memorie virtuali) oppure

• 4MB (4M×8 bit), tabelle di supporto a queste, dall'altro rappresenta una tecnica di selezione diffusa nelle

• 4MB (1M×32 bit), memorie a dischi sia dinamiche sia statiche.(cfr. cap.8)

• 32MB (8 M×32 bit)

• etc.

Per le memorie di massa, la capacità si esprime ancora in multipli del byte, ma stavolta è

3 =1000

1 kilo= 10

Si hanno ad esempio nastri da 40 GB, dischi da 500 MB o dischetti da 1,4 MB.

B) Tempo di accesso

È il tempo necessario per compiere un’operazione di lettura o scrittura; nel caso pi ù

generale si compone di due tempi distinti: il tempo per operare la selezione e quello per scrittura fino a raggiungere il posto richiesto. Dicesi allora tempo di seek il tempo

C1 D1 necessario a che il sistema di lettura-scrittura raggiunga il registro da selezionare; esso è

C2 D2 variabile in funzione della distanza da percorrere. . .

MA MB . .

.

Ci Di .

.

Ci Di .

.

D .

.

E .

.

C MB

MA

Cn Dn O 4

D N

3

E 2 1

Figura 3.1 - Memoria associativa (schema di principio) R P

L

Per approfondire tale argomento, si consideri che una memoria associativa i cui registri

siano del tipo definito in (1.4) si può descrivere come segue nelle sue linee fondamentali a) Selettore

MA

(cfr.fig.3.1)[2]: b)

var array of

A: [0..N-1] registrazione MB

for to do

i:= 0 N-1 Figura 4.1 - Metodi di selezione: a) spaziale; b) temporale

if then do

A[j].chiave = MS

begin

if then

RE MB:= A[j].dato Nella selezione temporale (fig.4.1b) il sistema di lettura-scrittura L è fermo ed accede

else if then

WE A[j].dato := MB fisicamente ad un'unica posizione, dinamicamente attraversata dai singoli registri della

end memoria: allorch é il selettore riconosce il passaggio del registro da selezionare ne trasferisce

il contenuto in MB. Il tempo necessario a che il registro da selezionare raggiunga il sistema

In altri termini, si pu ò pensare ad una memoria associativa realizzata attraverso un di lettura-scrittura è detto tempo di latenza e dipe nde dalla velocità di spostamento e dalla

algoritmo di ricerca tabellare della chiave ed un’operazione di lettura o scrittura associata. I posizione recipr oca fra L ed il record fisico da selezionare.

confronti fra MS e le diverse chiavi registrate A[j].chiave si possono realizzare, con Per accedere al registro i è necessario conta re, dopo il passaggio sotto L di un "punto di

soluzione parallela, in altrettanti comparatori (cfr. § III -18) oppure, con soluzione seriale, in riferimento" (p nella figura), il trascorrere di un determinato tempo t oppure il passaggio di

sequenza l'uno dopo l'altro (così come nella interpretazione alla lettera dell'algoritmo), con (i-1) registri. In qualche modo il selettore effettua detto conteggio ma la prima tecnica è poco

un solo comparatore che è investito nel tempo dai successivi confronti, oppure infine con affidabile ed entrambe hanno dei limiti: il tempo di latenza massimo è quello di 2 giri (uno

soluzioni intermedie. per attendere P, uno per accedere al registro) e non sono facilmente gestibili errori o guasti

In ogni caso, appositi algoritmi debbono essere realizzati per risolvere i possibili conflitti della memoria.

(memoria piena all'atto della scrittura di una nuova chiave, chave non trovata all'atto della Per superare gli inconvenienti esposti, nella selezione temporale spesso si adopera una

lettura, etc.). tecnica associativa o con informazioni di riferimento: insieme alle informazioni utili viene

registrata anche una chiave che identifica univocamente la registrazione stessa (ad esempio,

viene registrato il numero d'ordine i o "indirizzo" della registrazione). L'accesso al registro

4 Metodi di selezione desiderato viene dunque controllato da un confronto fra la chiave della registrazione richiesta

e quelle registrate: il selettore legge sequenzialmente tutte le chiavi ed effettua la lettura o

4.1 Selezione lineare e a più dimensioni scrittura del registro associato a quella coincidente con la chiave data, come illustrato al § 3

Un sistema di selezione si dice lineare se è unico e sele ziona direttamente e singolarmente (selezione associativa).

ciascuno degli N registri; si dice invece a più dimensioni se è costituito da più sottosistemi,

ciascuno dei quali seleziona un sottoinsieme degli N registri e la selezione di un singolo

registro si ottiene dall’azione combinata dei diversi sottosistemi. Se i sistemi di selezione 5 Gerarchia di memorie

sono due, la tecnica si dice anche di semiselezione . I parametri tecnico-economici di una memoria sono la capacità, il tempo di accesso e il

4.2 Selezione spaziale, temporale e con chiave costo per bit. Problemi tecnici e di mercato fanno sì che, per restare in fasce di costi

accettabili, le memorie disponibili o possiedono buone caratteristiche di capacità ma sono

La selezione spaziale consiste nell'individuare la posizione fisica in cui è allocato il relativamente lente o sono veloci ma poco capaci. Tali considerazioni hanno suggerito, fin

registr o da selezionare. dai primi elaboratori, l’articolazione della memoria nei due principali sistemi, quello

Per le memorie statiche, tale metodo richiede altrettanti circuiti di accesso ai singoli centrale, con requisiti medi di capacità e buone caratteristiche di velocità e quello di massa,

registri (o ai sottoinsiemi di selezione multipla) ed appositi selettori o decodificatori che con più elevate capacità e minore velocità operativa.

individuino di volta in volta il registro da selezionare. Il sistema di selezione, pertanto, si Le differenti velocità operative e funzionalità hanno suggerito una strategia di uso dei due

irradia verso tutti i registri della memoria ed un apposito decodificatore (fig.4.1a), sistemi di memoria che può essere così descritta:

ricevendone l'indirizzo MS, individua da quale registro deve prelevare (o in quale registro

deve immettere) il dato da trasferire in MB (o da MB). - un programma è archiviato in memoria di massa e da questa viene spostato in memoria

Per le memorie dinamiche, il metodo è in uso in sottosistemi di selezione, ad esempio per centrale per essere eseguito;

la selezione di una traccia di un disco, e richiede lo spostamento del sistema di lettura - - l’elaborazione dei dati di un file avviene spostandone un record in memoria centrale e

quindi effettuando l'elaborazione su di esso. sistema operativo e tutti gli archivi -dati di frequente consultazione; si usano i cosiddetti hard

disk.

Strategie analoghe si adoperano anche per: - Memoria di lavoro o memoria centrale, che contiene i programmi o le parti di essi in corso

di esecuzione e i record-dati in corso di elaborazione; si usano circuiti a stato solido

- La segmentazione: se un programma non entra integralmente in memoria centrale, se ne (memorie volatili).

pone un segmento e lo si esegue; quando da questo si fa riferimento ad istruzioni contenute - Registri generali di macchina (si pensi, ad esempio, ad un registro con funzioni di

in altro segmento, quest'ultimo viene prelevato dalla memoria di massa e va a sostituire il accumulatore; ad esso si accede con notevole frequenza durante il calcolo di una

primo (questa tecnica è oggi poco usata, vista la grande capacità delle memorie attuali). espressione); si usano memorie a stato solido molto veloci.

- La memoria virtuale: il sistema "vede" una memoria virtuale pi ù ampia di quella centrale

fisica, ove risiedono solo alcune "pagine" (insiemi di istruzioni e/o dati di predefinite Fra i diversi livelli della gerarchia spesso sono interposte memorie cache e buffer, come ad

dimensioni di memoria, ad esempio 32 kB) prelevate dalla memoria di massa. All'atto esempio:

dell'accesso in memoria centrale, ove la pagina richiesta non sia ivi presente, questa viene - 1 o 2 livelli di cache di sistema fra la memoria centrale e il processore (realizzata con

prelevata dalla memoria di massa andando a rimpiazzare un'altra pagina (la tecnica è attuale

e serve anche per problemi di rilocazione). memoria a stato solido);

- una cache a stato solido fra l’unità a dischi e la memoria centrale;

In tutti i casi di cui sopra, la strategia è quella di tenere nella memoria più veloce segmenti - una cache a dischi fra una memoria a nastro e il sistema centrale.

di programmi e dati per i quali si prevede una elevata frequenza di accessi e di tenere - un buffer a stato solido fra nastro e CPU.

viceversa nella memoria più capace ma più lenta quelli meno movimentati; appositi algoritmi,

gestiti a seconda dei ca si dal software applicativo, da quello di base o dall'architettura del 6 Memorie RAM

sistema, trasferiscono, quando necessario, i segmenti da una memoria all'altra; questo

trasferimento, avvenendo a blocchi di dati, è molto più veloce che non il trasferimento 6.1 Capacità e parallelismo

individuale dei dati coinvolti.

La strategia di cui sopra rende più efficiente il sistema nel suo complesso e la disponibilità Le memorie a stato solido indirizzabili, essendo ad accesso casuale, vengono

di sistemi di memoria dif ferenti suggerisce di estenderla anche ad altri livelli; in particolare, genericamente dette RAM (Random Access Memory); per esse la selezione avviene attraverso

a valle di una memoria (centrale o di massa) si inserisce spesso una memo ria cache, di questa l'indirizzo MA e il selettore è un decodificatore (cfr. §§ 1.2, 4.2). Detti N, p il numero di bit

più veloce ma meno capace, nella quale vengono riversati segmenti di programmi e/o dati e rispettivamente di MA ed MB è evidente c he:

alla quale accede direttamente l'organo che li deve usare. N bit;

- la capacità di memor ia è di 2

Funzione analoga alle memorie cache, ma pi ù semplici nella gestione, svolgono le memorie - il parallelismo di memoria è di p bit.

di transito (o buffer), tipiche di apparecchiature periferiche e delle stesse memorie di massa;

in esse i dati vengono provvisoriamente registrati per essere poi inviati altrove; talora si Per motivi di vincoli costruttivi da un lato e di flessibilità dall’altro, le memorie si

tratta di singoli registri che svolgono tale funzione, come ad esempio il "memory buffer" che producono in moduli (che a loro volta assemblano più chip); il sistema di memoria si

interfaccia una memoria indirizzabile con il processore; in altri casi si tratta di sistemi di costruisce poi montando su di una scheda pi ù moduli per realizza re un’unica unità di

memoria che hanno la funzione di rendere più semplici i problemi di interfacciamento con il memoria. Le relazioni di cui sopra si applicano sia al singolo modulo (sia al chip) sia alla

calcolatore centrale e più rapido il funzionamento. Una tastiera dotata di memoria di transito, memoria nella sua inte rezza.

ad esempio, piuttosto che inviare verso il sistema un carattere per volta, prima memorizza un In particolare, i chip sono messi insieme in primo luogo per aumentare il parallelismo, nel

insieme di caratteri (ad esempio una riga) e poi effettua la trasmissione. Un esempio più senso che una memoria di parallelismo p può essere realizzata con l'impiego di N moduli di

evoluto e vicino alla memoria cache è il buffer di 1 o 2 MB interposto fra una unità a nastro N

magnetico ed il sistema centrale. =

p p i

parallelismo p con: .

In definitiva. le memorie sono organizzate in gerarchie , che contengono da un estremo =

i 1

i

sistemi di memoria di piccola capacità e grossa velocità, dall’altro memorie capa ci ma Analogamente, una memoria di capacità C pu ò essere realizzata con l'impiego di N moduli,

relativamente lente. Dal punto di vista delle caratteristiche hardware, la gerarchia comprende N

=

C C

essenzialmente: i

tutti con il medesimo parallelismo p e capacità C con: . Un apposito selettore allora

=

i 1

i

- nastri magnetici seleziona il modulo e, all'interno del modulo, il singolo registro.

- dischi ottici o magnetici

- memorie a stato solido 6.2 Memorie SRAM e DRAM

Dal punto di vista funzionale, un sistema di calcolo pone ai diversi livelli gerarchici, Una memoria è costituita da celle, ciascuna per la memorizzazione d i un bit. Come si è

nell’ordine le seguenti esigenze: accennato (cfr. § 2.1), le celle elementari possono essere di due tipi: realizzate con una

- Memorie di backup, cio è memorie atte a salvare ed archiviare i file residenti nelle memorie coppia di transistori oppure con un unico transistore, del quale si adopera la capacità

di massa in linea; si usano a tale scopo nastri e dischi magnetici rimovibili, in qualche caso interelettrodica per la memorizzazione del bit.

dischi ottici. Nel primo caso, ogni cella di memoria occupa sul chip uno spazio maggiore che nel

- Memorie di massa per l’archiviazione di programmi e dati di non frequente consultazioni, secondo e quindi è possibile realizzare memorie sul chip di minore capacità, ma i tempi di

da montare all’occorrenza trasferendone i contenuti nelle memorie di massa in linea; si accesso sono ottimi: le memorie sono dette SRAM (RAM statiche) in quanto elettronicamente

usano a tale scopo gli stessi supporti che nelle memorie di backup. non soggette ai fenomeni di cui al secondo caso.

- Memorie di massa per trasferire dati fra macchine; si usano a tale scopo dischi rimovibili Nel secondo caso, l’elemento di memoria è in effetti la capacità, che con il suo sta to di

anche a stato solido (cfr. cap. 8), dal dischetto ad appositi hard disk oppure nastri. “carica ” o “scarica” determina il valore del bit memorizzato. Ma una capacità, per una nota

- Memorie di massa in linea, cioè memorie di grossa capacità atte a memorizzare il file legge elettrica, tende con il tempo a scaricarsi e dunque a perdere l'informazione in essa

system, contenente le biblioteche di programmi e sottoprogrammi di uso comune nonché il memorizzata: la memoria è doppiamente volatile (si scarica con il tempo oltre che perdere

informazione per mancanza di alimentazione). Fortunatamente, la costante di tempo per la Le memorie a sola lettura (ROM, Read Only Memory o ROS, Read Only Storage ) sono

scarica della capacità è molti ordini di grandezza maggiore del tempo di accesso (millisecondi memorie che in funzionamento normale non consentono l'operazione di scrittura, ma soltanto

contro nanosecondi) ed è possibile intervenire dinamicamente e periodicamente sulla memoria quella di lettura; l'operazione di scrittura è effettuata prima del montaggio della memoria nel

per “rinfrescarne ” (refresh ) il contenuto, effettuando un ciclo che legge e riscrive la memoria. sistema e consiste in un’operazione che registra i dati in forma non volatile.

Il fatto che la memoria sia a sola lettura pu ò dipendere da scelte strategiche di sistema,

Da questa tecnica deriva il nome di memoria dinamica o DRAM.

Le memorie DRAM sono più lente (non per la presenza del refreshing, ma perché i allorché si desiderino programmi o dati che non si vuole correre il rischio di cancellare

transistori usati sono più lenti) e più capaci e costituiscono una gerarchia con le SRAM. riscrivendovi sopra, oppure da limiti tecnologici: di alcune memorie, peraltro vantaggiose

Tipicamente, le DRAM si usano come memoria centrale, le SRAM come cache. sotto altri aspetti, non si riesce a realizzare un sistema di scrittura efficiente e rapido come

quello di lettura[3].

6.3 Buchi di memoria Sono tecnologicamente a sola lettura alcune memorie a stato solido, per le quali il processo

di scrittura viene effettuata una tantum dal costruttore, su richiesta dell'utente che definisce

la maschera di "1" e "0" della memoria: vengono anche dette ROM programmabili a

Talora nasce l'esigenza di sostituire un certo numero di registri ad indirizzi consecutivi di maschera. Esse sono usate come elemento circuitale oppure per contenere programmi fissi da

una memoria A con altri di pari numero e parallelismo costituenti un modulo B fisicamente eseguire a notevole frequenza (sotto questo aspetto, è ad un estremo della gerarchia di

diverso. Tipico esempio è quello in cui si sostituisce una piccola parte di RAM con una ROM memoria): tipicamente, i microprogrammi del processore centrale (i programmi per

oppure con un'altra RAM con tempi di accesso migliori o, ancora, con registri fisicamente l'esecuzione delle singole istruzioni in linguaggio macchina), alcune parti invarianti del

allocati in una unità diversa della memoria quale, ad esempio, un’interfaccia di sistema operativo (ad esempio il caricatore di sistema), tabelle di costanti utili per

ingresso/uscita (cfr. modello "memory mapped" di I/O, § VI-9.2.2). l'esecuzione di algoritmi di sistema o anche parti di software più evoluto (ad esempio

Si crea allora nella memoria A un "buco logico" che ne rende inattivi alcuni registri, l'interprete di un linguaggio).

sostituendoli con gli altri nel senso che il selettore accede all'uno o all'altro blocco fisico a Sono anche a sola lettura alcune memorie ottiche, nelle quali il processo di scrittura o

seconda dell'indirizzo MA (fig. 6.1). “stampa” della memoria è effettuato soltanto una tantum in laboratorio: tipicamente i CD -

ROM di prima generazione.

A 7.2 Memorie scrivibili una volta

B In altri casi, una memoria pu ò essere scritta, ma una sola volta, in esercizio. Si tratta in

Buco genere di memorie tecnologicamente simili alle ROM, ma per le quali la tecnologia ha

superato il vincolo di scrittura, riportando tale operazione a livello di utente.

Per le memorie a stato solido si hanno ad esempio le cosiddette PROM, Programmabile

ROM: l'utente stesso, con una apposita apparecchiatura da laboratorio, definisce i contenuti

della ROM.

Funzionalmente a naloghe sono alcune memorie dette genericamente WORM, Write Once

Selettore Read Many, come ad esempio i CD -R, CD -ROM scrivibili dall’utente (una sola volta), oppure

apposite memorie magneto-ottiche dette appunto WORM.

Indirizzo 7.3 Memorie riscrivibili

Si tratta di vere e proprie memorie complete, dotate cioè sia di capacità di lettura sia di

Figura 6.1 - Buco di memoria scrittura. Assumono questo nome in quanto derivano da tecnologie che fino a poco tempo

prima erano a sola lettura oppure riscrivibili una sola volta. Un esempio per tutti è costituito

6.4 Controllo di errore:parità ed ECC dai C D-RW, gli ex CD -ROM che ora è possibile anche riscrivere pi ù volte.

Tipicamente, in una memoria RAM vengono svolte funzioni ausiliarie per il controllo ed Fra le memorie a sta to solido, appartengono a questa categoria le cosiddette EPROM

eventualmente per la correzione di errori: la memoria contiene un numero di bit ridondanti ed (Erasable PROM), simili alle PROM ma che possono essere cancellate, sempre con l’aiuto di

all'atto della scrittura il dato da registrare viene arricchito con un bit di parità (solo controllo apposita apparecchiatura, e quindi riscritte.

di errore) oppure di un codice ECC (controllo e correzione). In fase di lettura, viene

controllata la parità del dato ed eventualmente segnalato l'errore oppure, in caso di

ridondanza maggiore, viene corretto, su basi probabilistiche, l'errore rilevato. 8 Architettura fondamentale delle memorie RAM

Ad esempio, un modulo di memoria con controllo di parità si presenta come:

• 4MB (1M×36 bit) Si ricorda (cfr. § IV-4) che il modello assunto di unità di memoria si interfaccia con il

cioè con 4 bit di parità per ogni parola utile di 32 bit (un bit di parità per byte), mentre un processore attraverso i due registri MA (memory address) ed MB (memory buffer) ed i

modulo con ECC è: segnali di controllo RE (read enable) e WE (write enable). Una unità di memoria RAM è di

solito realizzata assemblando più moduli (cfr. esempi di § 6.1) e ciascun modulo è realizzato

• 4MB (1M×40 bit) collegando fra loro più chip di memoria. Esamineremo in questa sede l’architettura di un

cioè con un codice ECC di 8 bit per ogni 32 bit utili. N

singolo ch ip con MA di N bit (capacità k=2 ) e parallelismo p (numero di bit di MB).

Esamineremo dapprima un chip con p=1 (un solo bit di parallelismo), estendendo poi

all'occorrenza al caso p>1.

7 Memorie a sola lettura 8.1 Interfaccia verso l’esterno

7.1 ROM In primo luogo giova far presente che, oltre ai segnali di cui sopra, in input al singolo chip

esiste un segnale di abilitazione generale dello stesso, tipicamente detto CS (Chip Select), Le operazioni di lettura e scrittura sono rispettivamente operazioni di trasferimento del bit

in ingresso D (proveniente da MB) sulla cella selezionata oppure, viceversa, da questo sul

la cui funzione è appunto quella di abilitare il chip: nel caso che CS non sia attivo il chip non i

bus di uscita D che “raccoglie ” il bit e lo invia verso MB. La selezione, se di tipo lineare, è

opera e quindi se sollecitato per la scrittura (WE) non altera il contenuto di nessuna delle sue o

celle, se in lettura, l'uscita MB resterà neutra. Questo è importante soprattutto per quanto si effettuata da un decoder 1/k che, a partire dagli N bit di MA, individua una delle k celle

vedrà al paragrafo successivo. elementari.

Il bus MB è unico sia per l'input che per l'output dal modulo e l'interfaccia della memoria

verso l'esterno deve provvedere a renderlo bidirezionale, traendo da questo un bus interno di

input D ed uno di output D . Inoltre il bus MB deve essere disaccoppiato dai bus D e D sia

i o i o M 0

dal punto di vista elettronico sia da quello logico: a tale scopo spesso si usa un "buffer"

interno al chip nel quale viene memorizzato il dato proveniente da MB prima che esso sia

effettivamente scritto in memoria oppure il dato proveniente dalla memoria dopo di essere

stato letto. Nel caso p=1 il bufffer è costituito da un flip-flop interno mb atto a memorizzare bit da scrivere MA

il bit di MB corrispondente, nel caso di p>1, lo schema si ripete per ogni bit. In fig, 8.1 è

mostrato uno schema di riferimento per p=1, il quale opera come segue: bit letto

• In caso di lettura (RE=1) e sempre che sia CS=1 l'interfaccia genera in sequenza due b) M

segnali: k-1

R, che abilita il chip a leggere, e poi

o abilitazione

R', che memorizza il bit letto in mb (l'operazione sar à meglio analizzata nei

o D

D o

i

prossimi sottoparagrafi). W

• In caso di scrittura, analogamente, WE genera R

a)

W' che memorizza in mb, e poi

o W che scrive in memoria.

o

• l'input di mb è multiplexato fra il dato proveniente da MB (abilitato da W') e quello Fig. 8.2. a) Cella di memoria; b) Architettura interna di un chip di memoria a selezione lineare

dalla memoria (abilitato da R, cfr. §§ 8.2, 8.3).

• l'output di mb è demultiplexato fra il dato destinato a MB (abilitato da R') e quello la

La selezione lineare richiede di distribuire sul chip tanti conduttori di selezione quanta è

destinato alla memoria (abilitato da W, cfr. §§ 8.2, 8.3). capacità del chip: nel caso, ad esempio, di un chip da 1 Mbit, circa un milione di conduttori

20

termina con un

È da notare che il circuito di lettura che proviene dalla memoria sul bus D (per l’esattezzza, 1M=2 = 1.048.576). Inoltre, le celle sono distribuite linearmente (si

o sviluppano in una sola dimensione) sull’area del chip, mentre per sfruttare al massimo il

tristate diretto verso mb e che, viceversa, il circuito di scrittura che si dirige verso la silicio sarebbe opportuno uno schema che occupasse con qualche regolarità le due dimensioni

memoria con il bus Di inizia con un tristate diretto verso la memoria (cfr. figg. 8.2, 8.4). di un piano.

Unico vantaggio di questa tecnica (che è in realtà soltanto una tecnica di riferimento

oppure usata per memorie di piccole dimensioni) è quello di consentire una semplice

D D

o i realizzazione di un chip con p>1. È infatti sufficiente usare la seconda dimensione del piano

per distribuirvi le p celle di una parola di memoria: i conduttori che escono dal decodificatore

investono in parallelo le p celle e tutto lo schema di figura si ripete p volte, una per ciascun

mb W ’ W

R bit della parola.

R’ 8.2.2 Semiselezione

W ’ R’

C Molto più efficiente è una soluzione con tecnica a semiselezione basata sul seguente

concetto: gli N bit dell’indirizzo si dividono in due gruppi di N/2 (supposto N pari), dei

quali l’uno fa capo ad un decoder di riga, l’altro ad uno di colonna (cfr. fig. 8.3, con N=16).

×

Le celle di memoria si dispongono in un array N/2 N/2, in modo che ciascuna cella

appartenga ad una riga e ad una colonna. La selezione di una cella avviene allorch é ne sia

stata selezionata la riga e la colonna cui appartiene. Questa è una tecnica generale per tutti i

C S WE

RE M B problemi di selezione o di decodifica e non soltanto per le memorie: essa riduce il numero dei

N

conduttori da 2 a 2N (nel caso di 1 Mbit da 1 milione a 2000).

Figura 8.1 Interfaccia di un chip di memoria

8.2 Celle di memoria e loro selezione

La cella di memoria, quella cio è atta a memorizzare un singolo bit, pu ò essere logicamente

schematizzata come un flip-flop con un input di abilitazione ed un terminale che ha la duplice

funzione di input e output del bit .(i flip-flop normali, come mb, distinguono il pin di input

da quello di output, quelli di memoria li unificano per minimizzare il numero di fili che

attraversa il chip, cfr. § 10); in fig. 8.2a) è schematizzata la cella di memoria.

8.2.1 Selezione lineare 1)

(

A

M M M

1 00

0 0q

)

2

(

A

M 0

1 D2

y0 y1 y2 y3

x0 0000 0001 0010 0011

x1 0100 0101 0110 0111

D1 x2 M M

q0

1000 1010 1011

1001 qq

x3 1100 1101 1110 1111 D

o

MB D

i

Figura 8.3 Organizzazione di un chip RAM a semiselezione

In concreto, con riferimento a memorie RAM con p=1, il decodificatore orizzontale

seleziona una riga di celle (cfr. fig. 8.4), mentre la selezione verticale rende attiva un solo

bus verticale. La cella è tale che pu ò essere scritta soltanto se ne sono selezionate riga e

colonna di appartenenza e legge, analogamente, soltanto la cella selezionata.

Se ad esempio è selezionata la i -esima riga e j -esima colonna, il comportamento è il R

seguente: W

• In scrittura, tutte le celle della riga i sono selezionate ed il dato in input, D , demultiplexato fra tutte le

i

colonne, rende attiva la sola colonna j e neutre tutte le altre. Ne segue che solo M , selezionate e con

ij N/2

ingresso attivo, viene riscritta al valore D ..

i

• In lettura tutte le celle della riga i inviano i loro valori sui rispettivi bus-dati di colonna, che, attraverso i N/2

tristate di lettura, sono multiplexati verso D . Essendo soltanto la colonna j attiva, il solo valore di M

o ij MA

viene trasferito in D .

o Figura 8.4. Architettura di un chip a semiselezione

Nel caso esaminato della semiselezione e p>1 occorre ripetere lo schema di fig. 8.4 p

volte, una per ciascun bit della parola di memoria: i bit omologhi sono raggiunti dai medesimi

segnali di selezione di riga e di colonna; lo schema globale pu ò avere u no sviluppo planare

(occupando ogni bit un ’area diversa della superficie) oppure spaziale (usando ad esempio

chip multistrato). In figura 8.5 è mostrato lo schema di principio delle due soluzioni.

C 0

CS

0

MA"

k bit

a) CS

k-1

bit 0 bit 1 bit 2 C k-1

q bit MA'

bit 0

bit 1

b) MB

Figura 9.1 Collegamento di moduli di memoria per aumentare la capacità

bit 2 1.10 Collegamento CPU-memoria

Figura 8.5 Memorie a semiselezione con parallelismo maggiore di uno:

a) schema planare; b) schema spaziale Un modello semplice del collegamento CPU -memoria. che fa riferimento allo schema di

collegamento del § IV-4, è illustrato in. fig. 10.1. CPU e memoria sono collegati attraverso:

Read Enable (RE)

9 Architettura di un sistema di memoria RAM Memoria Write Enable (WE)

Bus

Una memoria di capacità C è tipicamente realizzata collegando opportunamente m moduli Indirizzi

a capacità C'=C/m, con m potenza di 2. Si supponga allora che sia (C, C' ed m sono potenze Bus Dati

di 2): c bit m bit

c= log C q=log C' k= log m c=q+k Unità di

MA MB

2 2 2 controllo del

processore

L'indirizzo complessivo MA della locazione di memoria può essere visto allora come

composto di due parti: un indirizzo del chip (k bit) ed un indirizzo nel chip (q bit) e i diversi

moduli possono essere collegati secondo lo schema di fig. 9.1:

• un decodificatore 1/m decodifica l'indirizzo del chip e abilita attraverso il chip CPU

se lec t uno solo fra gli m moduli;

• gli altri q bit dell'indirizzo sono applicati in parallelo a tutti gli m moduli: soltanto Figura 10.1. Collegamento CPU-Memoria

quello selezionato ne sar à influenzato; −•

• un bus-dati, collegato al registro MB del processore, sul quale viaggiano

I memory buffer di tutti i moduli sono posti in parallelo: soltanto quello abilitato bidirezionalmente i dati dalla memoria alla CPU in lettura o viceversa in scrittura;

produrrà il dato in uscita (gli altri danno uscita neutra) oppure recepir à il dato in −•

ingresso. un bus-indirizzi, provenie nte dal registro MA del processore e diretto verso la

memoria;

• un bus-controllo, ove viaggiano i segnali di controllo della trasmissione.

La tempificazione del collegamento può essere:

• asincrona: esiste un colloquio fra le apparecchiature, in base al quale ad una richiesta

di lettura o scrittura la memoria risponde con un segnale quando l'operazione è terminata;

• sincrona , cioè basata solo sul clock: l' operazione in memoria avviene in un tempo

precisato.

La soluzione asincrona è più complessa, ma preferita per le memorie tradizionali in quanto

rende indipendente il progetto della memoria da quello della CPU e rende possibile il

collegamento ad una CPU di memorie a differenti velocità. La soluzione sincrona è viceversa

più veloce ed è preferita nelle architetture veloc i moderne.

10.1 Collegamento asincrono

Il collegamento classico fra CPU e memoria è di tipo asincrono e viene gestito con tecnica

analoga a quella già vista per l'I/O (cfr. § V-xx, colloquio handshake). Per fissare le idee, 11.1 SRAM bipolari

supporremo che il colloquio avvenga con l'uso dei seguenti segnali di controllo: Con riferimento alla tecnologia TTL (esistono invero altre tecnologie pi ù moderne), una

• RE (read enable ), dalla CPU alla memoria, che chiede un'operazione di lettura; cella di memoria si basa sullo schema di un flip-flop RS.

• WE (write enable ) che chiede analogamente una operazione di scrittura; In tale tecnologia, la porta fondamentale è la NAND, uno schema fondamentale della quale

• ACK, "risposta della memoria alla CPU, è mostrato in fig. 11.1, ove un primo transistore multiemettitore realizza una AND ed il

successivo un NOT, con ingresso in base della and e uscita sul collettore.

Per illustrare i dettagli della tempificazione si usano diagrammi come quello di fig. 10.1:

• per i segnali di controllo sono indicati espressamente i valori 0 ed 1 (ad esempio, al

tempo t passa da 1 a 0)

RE

2

• per gli indirizzi si indicano solo le variazioni (ad esempio, al tempo t il bus ADDR

1

cambia valore);

• per i dati si indica con un'unica linea il valore neutro (alta impedenza), con una coppia

di linee un valore attivo (ad esempio, al tempo t3 il bus-dati assume un valore valido.

In particolare, la fig. 10.1 illustrata la tempificazione per una operazione di lettura e si ha:

−• al tempo t il processore pone un indirizzo sul bus apposito;

1

−• al tempo t il processore invia alla memoria il segnale RE;

2

−• Fig. 11.1 Schema di NAND in TTL

al tempo t la memoria pone il dato letto sul bus;

3

−• al tempo t la memoria comunica l'ACK al pr ocessore.

4 È noto che un f lip-flop si realizza con due nand a incrocio: lo schema di fig. 11.2 presenta

[4]

una possibile soluzione: gli ingressi sono ancora sulla base dei transistori “a incrocio ” .

Indirizzo valido

Address

RE Dato

Data valido

Alta impedenza

ACK t

t1 t2 t3 t4 Fig. 11.2 Schema di flip-flop NAND in TTL

Figura 10.1 Tempificazione asincrona per una operazione di lettura Per la cella di memoria è peraltro necessario avere i bus di input e di output coincidenti; si

Si noti che il protocollo usa una tempificazione sui fronti dei segnali di comando: la può allora adottare lo schema di fig. 11.3. La and è realizzata in modo atipico, con un

ingresso (set o reset) su emettitore ed uno (il collettore a incrocio) in base:sempre che la cella

variazione 1→0 del segnale segnala alla memoria la richiesta di una lettura, mentre la

RE sia abilitata (s alto) se è Y alto (Q non conduce) e S basso il transistore Q conduce ed è Y

variazione 0→1 del segnale ACK segnala al processore che la memoria ha posto un dato 0 2 1 1

= =

valido sul bus-dati (agendo così da strobe per il caricamento del registro MB del processore). Y Y S Y Y R

basso ( ) e viceversa ( ). Ma la cosa importante è che lo stato della cella può

1 0 0 1

essere rilevato dagli stessi punti set-reset se collegati ad apposito amplificatore: nel flip-flop

10.2 Collegamento sincrono: memorie SDRAM abilitato (s=1) la corrente fluisce in quello dei due emettitori che corrisponde al transistore in

Nelle architetture moderne più veloci la memoria principale viene usata con operazioni di conduzione.

trasferimento dati a blocchi da e per la memoria cache: ad esempio, un blocco di dati di

determinata lunghezza viene letto a partire da un determinato indirizzo. Questo tipo di

operazione tipicamente si adatta ad una tempificazione sincrona: viene effettuata una sola

selezione in memoria per tutto il blocco ed il trasferimento avviene velocemente controllato

esclusivamente dal clock.

Una tecnologia di questo tipo è stata introdotta agli inizi degli anni 2000 con le memorie

SDRAM (Synchronous DRAM ), che presentano tempi di accesso (in modalità di trasferimento

a blocchi) dell'ordine di 4 -12 ns. Fig. 11.3 Sc hema di cella di memoria RAM in TTL

11 Cenno alla tecnologia delle RAM

11.2 DRAM basata su MOS [2] L'algoritmo andrebbe completato per tener conto dei seguenti fatti:

- l'inserzione di una nuova coppia chiave-dato;

Lo schema logico -elettronico di un dispositivo atto a funzionare da cella di memoria - la gestione delle eccezioni (memoria piena, chiave da leggere inesistente, nuova chiave da scrivere già esistente, etc.).

dinamica è mostrato in fig.11.4a. [3] Talora, una memoria (o una parte si essa) è resa "logicamente" a sola lettura in quanto se ne disinibisce l'operazione di

scrittura con mezzi meccanici vari (ad esempio, spostando una levetta sul supporto magnetico oppure operando un foro in

determinata posizione, si pensi ai sistemi di sicurezza dei video-tape) oppure mediante software (in Windows, ad esempio, un file

può apparire a sola lettura per una classe di utenti).

[4] Lo schema è di tipo introduttivo. Strutture più semplici in termini di componenti usati sono di più difficile intendimento a livello

introduttivo.

Fig. 11.4 Schema di cella di memoria dinamica:

a) schema di principio; b) refreshing; c) realizzazione in MOS

oppure 0 (massa)

La scrittura della cella si ottiene applicando sul punto D una tensione E 1

e la capacità C di conseguenza si carica oppure si scarica purché l’interruttore s sia chiuso,

cioè la cella sia abilitata; la lettura avviene poi, se abilitata, rilevando la tensione su D. In

realtà, la capacità tende a scaricarsi e, dopo un tempo t (dipendente dalla costante di tempo

del circuito) la tensione E scenderebbe ad un valore di soglia E al disotto del quale si

1 1min

perderebbe l’informazione (cfr. fig. 11.3b); un apposito circuito, allora, detto di refreshing,

α

genera un segnale e, attraverso un amplificatore riporta la tensione sulla capacità.

La realizzazione concreta avviene in tecnologia MOS attraverso un transistore (fig. 11.4c)

del quale si adopera la capacità interelettrodica fra source e drain, mentre la gate funge da

interruttore (rispetto alla figura 8.4, i segnali i, u, D ’, F’ di figura 11.4 corrispondono

rispettivamente a W, R. D , D ; s, infine, corrisponde agli ingressi di abilitazione

i o

orizzontali).

[1] 3 6 9 12 15

Si ricordano i prefissi definiti dal sistema di misure: kilo=10 ; Mega=10 ; Giga=10 ; Tera=10 ; Peta=10 . Talora,

10 3

in Informatica si misura per potenze di 2: il "kilo" diventa allora 2 =1024 invece di 10 e di conseguenza variano gli

altri multipli. Capitolo ottavo

La memoria di massa

Capitolo ottavo

La memoria di massa

Premessa

Selezione temporale 1 La registrazione su superfici magnetiche

2 Pre-e post-elaborazioni; sincronizzazione

. 2.1 Controllo della sequenza di bit

.

. .

. 2.2 Compressione

. 2.3 Rilevazione e correzione di errore

. 2.4 La sincronizzazione dei blocchi

.

. 3 Architettura delle memorie di massa

.

. 4 Memorie a nastro

.

. 4.1 Bobine, cartridge e cassette

4 N 4.2 Blocchi, file e tape marker

3 2 1 4.3 ECC e compressione

P 4.4 Nastri longitudinali, elicoidali e trasversali

L 5 Memorie a dischi: caratteristiche meccaniche

MA Selettore 6 Dischi magnetici: organizzazione dei dati

6.1 Cilindro, superficie, settore

b) 6.2 Tempo di accesso al settore

6.3 Struttura del settore

MB 6.4 Formattazione

6.5 Densità di registrazione. Tecniche CAV, CLV e ZCAV.

Per identificare l'istante utile per il trasferimento del registro si pu ò operare come segue. I 6.6 Il drive

dati si muovono a velocità costante rispetto ad L, di v registri/s, con movimento lineare (ad 7 Caratteristiche delle unità a disco magnetico

esempio, quello di un nastro magnetico) oppure circolare come in figura (la traccia di un 7.1 Hard disk

disco). Diremo P la posizione in cui è allocato il primo dato; nel primo caso, essa è l'origine 7.2 Array di dischi

fisica del supporto, nel secondo è convenzionalmente individuata da apposito segnale, 7.3 Dischi rimovibili

generato dal supporto stesso in sincronismo col passaggio di P sotto L (ad esempio segnale di 7.3.1 Floppy disk

inizio traccia di un disco). Il registro i -esimo passa dunque per L dopo un tempo t dal

i 7.3.2 HD rimovibili - Zip e Jaz

passaggio di P, con: t =(i-1)/v.

i 8 Dischi ottici e magneto-ottici

Per il riconoscimento del registro occorre dunque far riferimento al passaggio di P e quindi 8.1 Dischi ottici

attendere un tempo t oppure contare il passaggio sotto L di (i-1) registri.

i 8.2 Dischi magneto-ottici

9 Memorie esterne e dischi a stato solido

9.1 Schede di memoria

9.2 SSD

10 Sistemi di memorie di massa. Biblioteche

Premessa che, in presenza di celle adiacenti molto vicine, magnetizzate alla medesima polarità, si

determina una distribuzione complessiva della densità di flusso del tipo illustrato in fig.1.2d),

I vertiginosi cambiamenti nella tecnologia delle memorie di massa, hanno portato sul che tende a rimanere costante e dalla quale, quindi, risulta difficile trarre un segnale di

mercato soluz ioni tecnologiche a costi sempre più bassi, a dispositivi sempre più veloci e con rilevazione utile. Sol tanto in seconda istanza il limite alla densità di registrazione è dato dal

elevata larghezza di banda. Il risultato di tutto ciò è la grande esplosione dei supporti di limite al numero di inversioni di flusso per unità di lunghezza determinato dal materiale

memorizzazione e di input/output. magnetico.

È difficile seguire questa dinamica in un testo come questo, il cui obiettivo primario resta Diversi sono i metodi di registrazione adoperati; quelli fondamentali si possono così

quello di introdurre i concetti fondamentali sui quali si basa l’ingegneria informa tica. classificar e:

Pertanto, in questo capitolo si presentano da un lato i fondamenti delle memorie di massa,

senza inseguire le innum erevoli varianti che ne hanno perfezionate le prestazioni, per le quali - metodi a modulazione di ampiezza, modulazione di fase o modulazione di frequenza, a

non basterebbe un apposito volume, e dall’altro si offre una panoramica dell’attuale seconda della grandezza elettrica che viene usata per distinguere il segnale di registrazione

produzione (2003), con particolare riferimento ai prodotti per PC. di un 1 da quello di uno 0 (si tratta, peraltro in ogni caso di segnali impulsivi e quindi le

grandezze elettriche non sono quelle relative a segnali continui analogici, ma la loro

trasposizione nel discreto);

1 La registrazione su superfici magnetiche i

Il principio fisico delle memorie con registrazione su superfici magnetiche (nastri e dischi) Is

è analogo a quello della registrazione audio/video analogica, bench é dal punto di vista

tecnico vi siano differenze a causa del fatto che occorre realizzare solo due distinti stati di a)

magnetizzazione, corrispondenti ai due valori del bit e che ai requisiti di fedeltà vanno

sostituite quelli di capacità e velocità.

In fig.1.1 è mostrato lo schema di principio di un gruppo testina-superficie magnetica; in ≡

t≡

l

fase di scrittura, nell'avvolgimento apposito viene inviato un impulso di corrente mentre la

superficie è in movimento relativo rispetto alle testine con velocità costante; le linee di flusso B

che si stabiliscono nel circuito magnetico della testina si chiudono attraverso la superficie teorica b)

che, essendo costituita da un materiale ad alto valore di induzione residua e bassa forza effettiva

coercitiva, resta così magnetizzata. Sulla superficie ne risulta allora una distribuzione delle

linee di flusso del tipo di fig.1.1c) e si forma una piccola zona che si comporta come una

sottile barretta di materiale ferromagnetico; la distribuzione della densità di flusso lungo la

superficie B(l) assume un andamento del tipo indicato in fig.1.2b), supposto che l'impulso di ≡

l≡

t

corrente sia di tipo rettangolare (fig. 1.2a). La zona così magnetizzata viene detta cella V

elementare. c)

i v ≡

t≡

l

a) B d)

b) c)

Figura 1.1 - Registrazione su superficie magnetica ≡

l≡

t

In fase di lettura, allorch é la cella elementare transita con velocità costante sotto la testina, Figura 1.2 - Principi di funzionamento della memoria a superficie magnetica

la variazione del flusso B(l)=B(t) che si determina nel circuito magnetico induce

nell'avvolgimento apposito una tensione v che assume nel tempo la form a della derivata della metodi RZ o NRZ (Ritorno o Non-Ritorno a Zero) a seconda che, nell'intervallo fra due

-

funzione B(t) (fig. 1.2c) e che identifica in qualche modo l'impulso di corrente che ha causato escursioni successive, il segnale ritorna o non ad un livello di riferimento (ad esempio 0

la magnetizzazione (teoricamente, mediante integrazione elettronica della tensione v(t), si ampère).

ottiene una curva che riproduce la funzione B(t) e quindi la i(t)). La registrazione di un "1" In fig.1.3 sono esemplificati i metodi fondamentali di registrazione. Il metodo RZ a

potrebbe essere distinta da quella di uno "0" usando segnali di registrazione di polarità modulazione di ampiezza (fig.1.3a) è il primo, ca ratterizzato da impulsi di polarità opposta

opposta (come si vedrà, questa è soltanto una delle tecniche possibili). per l'1 e lo 0, sempre di durata inferiore a quella della cella; la rilevazione avviene come già

Sul piano tecnico, la lunghezza della cella elementare determina la densità di illustrato.

registrazione, intesa come numero di bit per unità di lunghezza. Q uesta è vinc olata dalle

caratteristiche elettromagnetiche del sistema superficie-testina ed in primo luogo dal fatto


PAGINE

136

PESO

1.94 MB

AUTORE

Sara F

PUBBLICATO

+1 anno fa


DETTAGLI
Corso di laurea: Corso di laurea in ingegneria informatica
SSD:
A.A.: 2013-2014

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Sara F di informazioni apprese con la frequenza delle lezioni di Calcolatori elettronici I e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Napoli Federico II - Unina o del prof Canonico Roberto.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Calcolatori elettronici i

Quaderno appunti presi a lezione con esercizi esame svolti
Appunto
Calcolatori elettronici I - Esercizi sugli Automi
Esercitazione
Calcolatori Elettronici I - Appunti e esercizi
Appunto
Calcolatori elettronici I - analisi
Appunto