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)