Soluzioni della prova del 27/4/2006
Transcript
Soluzioni della prova del 27/4/2006
Soluzioni della prova del 27/4/2006 Domanda 1) (20%) Si consideri una sistema di rappresentazione binaria in virgola mobile a n bit, di cui si usano (nell’ordine da sinistra a destra): 1 bit per il segno (0 = positivo), e bit per l’esponente, che è rappresentato in eccesso a 2e−1, e n−e−1 bit per la parte frazionaria della mantissa che è normalizzata tra 1 e 2. Sia X la cifra meno significativa non nulla del vostro numero di matricola. (A) Indicare l’ordine di grandezza decimale dei seguenti numeri: a espresso in eccesso a 2+19 dalla stringa esadecimale 973AX, b espresso in complemento a due dalla stringa esadecimale 2D4FX, e c espresso in complemento a uno dalla stringa esadecimale FFC4X; (B) Calcolare il valore minimo di n che consente di rappresentare tutti i numeri a, b e c al punto A nella notazione in virgola mobile suddetta senza commettere errori di rappresentazione; (C) Calcolare il numero d = a − c e rappresentarlo nel sistema di rappresentazione individuato al punto B, indicando l’errore assoluto che si commette; (D) Quale è l’ordine di grandezza binario del numero più piccolo rappresentabile con numerali denormalizzati con il sistema individuato? RISPOSTA (A) Poniamo X=3. • Il numerale a = 973AX in binario risulta 1001 0111 0011 1010 0011. Nel sistema in eccesso a 2+19 il numero è positivo (primo bit uguale a 1). Ricordando che notazione in eccesso e CP2 differiscono solo per il bit più significativo che risulta invertito, abbiamo a = 0001 0111 0011 1010 0011 = +216(1.0111001110100011). Dalla proporzione 3 : 10 = x : 16 si ottiene che l’ordine di grandezza decimale di a è 104 • Il numerale b = 2D4FX in binario risulta 0010 1101 0100 1111 0011. Nel sistema in CP2 il numero è positivo (primo bit uguale a 0) e risulta b = +217(1.01101010011110011). Dalla proporzione 3 : 10 = x : 17 si ottiene che l’ordine di grandezza decimale di b è 105 • Il numerale c = FFC4X in binario risulta 1111 1111 1100 0100 0011. Nel sistema in CP1 il numero è negativo (primo bit uguale a 1) quindi complementiamo a uno per ottenere il suo valore assoluto e otteniamo c = − (0000 0000 0011 1011 1100) e quindi c = −29(1.110111100). Dalla proporzione 3 : 10 = x : 9 si ottiene che l’ordine di grandezza decimale di c è 102 (B) Per rappresentare i tre esponenti di a, b e c (16, 17 e 9) nella rappresentazione in eccesso servono almeno 6 bit che mi garantiscono un intervallo di rappresentazione [2−5, 25] quindi emin = 6. Per rappresentare le mantisse di a, b e c senza fare errori mi servono invece almeno 17 bit (dimensione della mantissa di b, che è la più grande). Quindi abbiamo 1 bit per il segno 6 bit per l’esponente e 17 bit per la mantissa da cui n = 24. (C) In base a quanto osservato al punto (A), abbiamo d = a − c = 0001 0111 0011 1010 0011 − ( −(0000 0000 0011 1011 1100) ) = 0001 0111 0011 1010 0011 + (0000 0000 0011 1011 1100) = (sommando bit a bit) = 0001 0111 0111 0101 1111 = +216(1.0111011101011111). Tale numero si rappresenta nel sistema individuato al punto (B) con il numerale: 0 110000 01110111010111110 senza commettere errori. (D) Nei denormalizzati l’esponente vale convenzionalmente il minimo valore rappresentabile ovvero, nel nostro caso, -32. Nella mantissa (compresa tra 0 e 1 e con 17 bit) il minimo valore possibile è rappresentato da tutti 0 e un 1 nel bit meno significativo, che vale 2−17. Per cui il numero più piccolo rappresentabile risulta essere 2−32×2−17=2−49. Domanda 2) Con riferimento al funzionamento dei bus di un calcolatore: A) tracciare e illustrare il diagramma di temporizzazione del bus PCI (con segnali di FRAME#, IRDY#, DEVSEL#, TRDY#) che lavora alla frequenza minima di funzionamento, per una lettura da una dispositivo con un tempo di risposta di 25 nsec; B) tracciare e illustrare il diagramma di temporizzazione del bus PCI (con segnali di FRAME#, IRDY#, DEVSEL#, TRDY#) che lavora alla frequenza massima di funzionamento, per una scrittura su una dispositivo con un tempo di risposta di 30 nsec; C) indicare brevemente le principali novità introdotte con la versione PCI Express. RISPOSTA Basta ricordare che il bus PCI è sincrono, ha linee di indirizzi e dati condivise, lavora a 33Mhz (T=30,3 nsec) o 66Mhz (T=15,15 nsec) e master e slave vengono chiamati, rispettivamente, initiator e target. A) A bassa frequenza il target può rispondere nel periodo successivo ma bisogna comunque aspettare un periodo per il turnaround (segnali initiator-target e target-initiator viaggiano in direzioni opposte). Quindi i diagrammi sono i seguenti (si poteva approssimare con i vari segnali, l’importante sono le linee AD): Read T1 T2 T3 T4 F Turnaround AD Address C/BE# Data Read cmd Enable FRAME# IRDY# DEVSEL# TRDY# B) Ad alta frequenza il target non può rispondere nel periodo successivo quindi introduce un periodo di wait lasciando negato il TRDY# (target ready). Quindi i diagrammi sono i seguenti (si poteva approssimare con i vari segnali, l’importante sono le linee AD): White T1 T2 T3 T4 F AD C/BE# Address Data Write cmd Enable FRAME# IRDY# DEVSEL# TRDY# C) Il bus PCI Express sostituisce la comunicazione parallela condivisa tra diversi dispositivi master e salve introducendo connessioni seriali punto-punto (dedicate) ad alta velocità tra un controllore (detto commutatore) e i vari dispositivi. Le connessioni hanno due canali unidirezionali. Il protocollo di comunicazione deriva dal mondo delle reti: è stratificato e basato su pacchetti. La pila di protocollo ha uno strato fisico, uno di trasmissione, uno di transazione e uno software. Domanda 3) (20%) Dato un elenco di parole binarie (ovvero composte solo ’1’ e ’0’) separate da virgole e terminato da un punto lungo al massimo 100 caratteri, scrivere in C: (A) una funzione che conta il numero di parole contenute nell’elenco; (B) una funzione che conta il numero di parole dell’elenco che non soddisfano il test di parità (numero pari di ’1’) ; (C) una funzione che verifica se tutte le parole dell’elenco soddisfano il test di parità; (D) una funzione che stampa su video tutte le parole che non soddisfano il test di parità. UNA POSSIBILE RISPOSTA (tra tante) #include <stdio.h> #include <string.h> typedef char stringa[100]; //punto (A) int contaParole(stringa el) { int cont=0, i=0; while ((i<strlen(el)) && (el[i]!='.')) { while ((el[i]!='.')&&(el[i]!=',')) i++; cont++; if (el[i]==',') i++; } return cont; } //punto (B) int contaParoleNonPari(stringa el) { int cont=0, i=0, n=0; while ((i<strlen(el)) && (el[i]!='.')) { n=0; while ((el[i]!='.')&&(el[i]!=',')) { if (el[i]=='1') n++; i++; } if ((n%2)!=0) cont++; if (el[i]==',') i++; } return cont; } //punto (C) int tuttePari(stringa el) { return (contaParoleNonPari(el)==0);} //punto (D) void StampaParoleNonPari(stringa el) { int cont=contaParoleNonPari(el), i=0, n=0, j=0, k=0; while ((i<strlen(el)) && (el[i]!='.') && cont>0) { n=0; j=i; while ((el[i]!='.')&&(el[i]!=',')) { if (el[i]=='1') n++; i++; } if ((n%2)!=0) { for (k=j; k<i; k++) printf("%c",el[k]); printf("\n"); cont--; } if (el[i]==',') i++; } } Domande a risposta multipla Domanda 4) Consideriamo un'unità disco RAID di 10 GB (spazio utilizzabile di memoria fisica) e con blocchi (strip) di 512 KB; indicare se le seguenti affermazioni sono vere o false. • In un RAID di livello 0 con 4 dischi in tutto, ogni disco è da 2,5 GB. VERO • • • • • • • In un RAID di livello 1 ho bisogno di una capacità di memoria totale di 20 GB. VERO In un RAID di livello 1 con 4 dischi in tutto, ogni disco è da 2,5 GB. FALSO In un RAID di livello 3 con 6 dischi in tutto, ogni disco è da 2 GB ed uno di essi è dedicato al controllo di parità. VERO In un RAID di livello 4 con 6 dischi in tutto, ogni disco è da 2 GB. VERO In un RAID di livello 5 con 4 dischi in tutto, ogni disco è da 2,5 GB. FALSO In un RAID di livello 1 con 8 dischi in tutto, ogni disco ha 5K strip. VERO In un RAID di livello 0 con 5 dischi in tutto, ogni disco ha 4K strip. VERO Domanda 5) Con riferimento alle unità periferiche di un calcolatore indicare se le seguenti affermazioni sono vere o false. • Tutti gli hard disk si muovono a una velocità di rotazione costante. VERO • Un controller SCSI può gestire più dischi. VERO (fino a 7) • I CD si muovono ad a una velocità di rotazione costante. FALSO • Il tempo di seek di un disco corrisponde alla rotazione necessaria a posizionare la testina sul settore desiderato. FALSO (quello è il tempo di latency) • A differenza dei DVD, i Blu-Ray non usano una tecnologia di lettura ottica. FALSO • I moderni monitor sono dotati di grandi memorie RAM dedicate. VERO (le VRAM) • In una macchina fotografica digitale ogni pixel dell'immagine viene memorizzata in un CCD (ChargeCoupled Device). FALSO (4 CCD per pixel) • L'ADSL introduce un meccanismo di comunicazione parallela su cavo telefonico. VERO Domanda 6) Con riferimento alle architetture dei calcolatori, indicare se le seguenti affermazioni sono vere o false. • Il flusso dei dati nel data-path può essere controllato direttamente dalle istruzioni macchina. VERO (nelle architetture RISC) • In un microprocessore RISC non è possibile introdurre una pipeline. FALSO • Per migliorare le prestazioni dei microprocessori, la tendenza attuale è quella di aumentare le frequenze di clock. FALSO (aumentare la frequenza porta troppi problemi di surriscaldamento) • In una architettura superscalare non ha senso introdurre una pipeline. FALSO • La SPARC è una architettura implementata su diversi microprocessori. VERO (per esempio, l’UltraSparc) • Il numero di stadi di una pipeline in una CPU non influisce sul numero di istruzioni eseguite nell'unità di tempo. VERO (la banda non dipende dalla lunghezza della pipeline) • L'introduzione di una pipeline in un microprocessore non migliora il tempo di esecuzione delle istruzioni. VERO (migliora la banda) • L'8051 è un microprocessore con prestazioni limitate. VERO Domanda 7) Considerando il seguente programma C, indicare se le seguenti affermazioni sono vere o false. (1) #include <stdio.h> (2) int f(int a, int* b) { (3) if (a>*b) a = *b +1; (4) else *b = a+1; (5) printf("%d %d\n",a,*b); (6) return a; (7) main(){ (8) int c=2, d=4; (9) d = f(c,&d); (10) printf("%d %d\n",c,d); • • • • • • • • La riga (9) stampa: 2 3 VERO Nella funzione b è una variabile di tipo intero FALSO Un puntatore è una variabile che contiene un indirizzo di memoria principale VERO La riga (10) stampa: 2 5 FALSO L'operatore & applicato ad una variabile restituisce il suo indirizzo di memoria VERO Se sostituisco la riga (9) con c = f(c,&d); allora la riga 10 stampa: 2 3 VERO *b è equivalente a b[0] VERO L'operatore & non può essere applicato ad un puntatore FALSO N. B. Nella valutazione si tiene conto della cattiva interpretazione di qualche affermazione (fino a tre)