UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 14. juni 2007 Tid for eksamen: 14.30 17.30 Oppgavesettet er på 9 sider. Vedlegg: INF1070 og INF2270 Datamaskinarkitektur Ingen Tillatte hjelpemidler: Alle trykte og skrevne samt kalkulator Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene. Dette oppgavesettet består av 4 oppgaver som kan løses uavhengig av hverandre. Alle oppgavene har en vekt på ca 25 % så de bør ta 45 minutter å løse. Dersom du synes noe i oppgaveteksten er uklart, må du gjøre dine egne forutsetninger; sørg bare for at disse er tydelig angitt. Programmering skal være slik at koden fungerer på Ifis Linux-maskiner. Du kan referere til funksjoner og programkode vist på forelesningene uten å gjenta koden; sørg for at referansene er tydelige (nevn for eksempel dato og nummer på lysarket). Lykke til! Innhold 1 Boolsk algebra (vekt 25 %) side 1 2 Flervalgsoppgave (vekt 25 %) side 2 3 Oversettelse (vekt 26 %) side 4 4 Hva skjer? (vekt 24 %) side 5 Oppgave 1 Boolsk algebra (vekt 25 %) 1a Forenkle følgende boolske funksjon ved hjelp av Karnough-diagram: G = wxyz + w x yz + wx z + y z (Fortsettes på side 2.)
Eksamen i INF1070 og INF2270, 14. juni 2007 Side 2 1b Implementér den forenklede funksjonen fra 1a med bare AND- og NOT-porter. 1c Du skal i denne oppgaven designe en ks som tar som input to 2- bits tall a og b. Enkeltbitene kalles a 1, a 0, b 1 og b 0. Ksen skal ha to utgangssignaler agtb og altb og disse har følgende funksjon: agtb = 0 hvis a > b altb = 0 hvis a < b. Med andre ord skal agtb være 0 hvis a er større enn b, og 1 ellers, mens altb skal være 0 hvis a er mindre enn b, og 1 ellers. Sett opp sannhetsverditabellen for agtb og altb. (Du skal ikke tegne ksskjema.) 1d Tenk deg at du allerede har implementert funksjonene agtb og altb. Vis hvordan du ved hjelp av disse og en ekstra port kan lage en ny funksjon aeqb som er 0 når a = b, og 1 ellers. Oppgave 2 Flervalgsoppgave (vekt 25 %) I hver av oppgavene under er det gitt en rekke påstander, hvorav kun én er riktig. Sva på hver deloppgave er numme på det korrekte svaralternativet. 2a Boolsk algebra 1. AND- og NOT-porter kan ikke brukes til å lage en OR-port. 2. En OR-port kan designes med bare tre AND-porter. 3. Med OR-porter og XNOR-porten kan man designe enhver boolsk funksjon. 4. NAND-porter kan ikke brukes til å implementere hukommelse. 5. Invertere kan ikke brukes til å implementere hukommelse. 6. En inverter kan lages av 2 AND-porter. (Fortsettes på side 3.)
Eksamen i INF1070 og INF2270, 14. juni 2007 Side 3 2b 2c 2d Cache 1. Ved å øke størrelsen på cache kan man redusere størrelsen på RAM. 2. Write-back og write-through er like effektive ved hyppige skrivinger til cache. 3. Write-through reduserer sjansen for write miss. 4. Direkteavbildet cache gir færre cache miss enn set-assosiativ cache. 5. Ved read-miss i en full cache er det ikke nødvendig å skrive blokken som skal overskrives tilbake til RAM. 6. Full assosiativ cache gir lavere miss rate enn både direkteavbildet og set-assosiativ cache. Pipelining 1. Ved å øke antall steg i en pipeline kan man redusere klokkehastigheten uten at det tar lenger tid å eksekvere en instruksjon. 2. Stalling reduserer ikke ytelsen så lenge man kan sette inn NOPinstruksjoner. 3. NOP-instruksjoner gjør at man kan øke antall steg i en pipeline. 4. Forwarding reduserer bruken av NOP-instruksjoner. 5. Datahasarder kan ikke fjernes ved hjelp av NOP-instruksjoner alene. 6. Datahasarder har ikke noe å si for ytelse, kun for korrekt manipulering av data. Virtuell hukommelse 1. TLB gjør at det aldri er nødvendig med RAM-oppslag i sidetabellen. 2. Virtuell hukommelse reduserer behovet for cache. 3. Virtuell hukommelse kan ikke brukes til å holde ulike prosessers minneområder adskilt. 4. Hvis en minnereferanse ikke finnes i TLB, vil en minneaksess føre til 2 oppslag i RAM-strukturer. 5. Virtuelt minne kan ikke aksessere data på magnettape. 6. Ingen av påstandene over er korrekte. (Fortsettes på side 4.)
Eksamen i INF1070 og INF2270, 14. juni 2007 Side 4 Figur 1: Beregning av gjennomsnittet av en liste av heltall struct intdata struct intdata *next; int value; ; int iavg (struct intdata *head) struct intdata *p = head; int sum = 0; int n = 0; while (p) sum += p >value; ++n; p = p >next; urn sum/n; 2e Generell arkitektur 1. Ingen datamaskiner er designet i henhold til von Neumannarkitekturen. 2. Dobles klokkehastigheten til en CPU dobles antall instruksjoner som eksekveres per tidsenhet. 3. Det er ikke mulig å ha parallelle pipelines i en enkelt CPU. 4. Maksimal klokkehastighet for en Pentium-arkitektur er 10 GHz. 5. Hvis antall kjerner i en CPU dobles, halveres eksekveringstiden til programmene som utføres. 6. Ingen av påstandene over er korrekte. Oppgave 3 Oversettelse (vekt 26 %) 3a Lister av heltall (vekt 13 %) I figur 1 er vist deklarasjonen av et listeelement struct intdata og funksjonen iavg som beregner gjennomsnittet av verdiene i en liste av slike elementer. Oversett funksjonen til x86-assemblerkode. 3b Lister av flyt-tall (vekt 13 %) Datatypen struct doubledata og funksjonen davg vist i figur 2 på neste side er tilsvarende de i forrige deloppgave, men nå er data double- (Fortsettes på side 5.)
Eksamen i INF1070 og INF2270, 14. juni 2007 Side 5 Figur 2: Beregning av gjennomsnittet av en liste av flyt-tall struct doubledata struct doubledata *next; double value; ; double davg (struct doubledata *head) struct doubledata *p = head; double sum = 0.0; int n = 0; while (p) sum += p >value; ++n; p = p >next; urn sum/(double)n; verdier. Oversett funksjonen til x86-assemblerkode. Oppgave 4 Hva skjer? (vekt 24 %) I denne oppgaven skal din besvarelse bare være numme til det korrekte alternativet for hva programmet vil skrive ut alle deloppgavene har nøyaktig ett helt riktig svar. (Og det finnes svaralternativer som er «galere» enn et blankt svar.) 4a (vekt 4 %) extern void f1 (int x); int v = 4; f1(v); printf("f1: %d\n", v);.globl f1 f1: pushl %esp, (Fortsettes på side 6.)
Eksamen i INF1070 og INF2270, 14. juni 2007 Side 6 incl 8() 1. f1: 5 2. f1: 0 3. f1: 3 4. f1: 4 5. f1: 5 4b (vekt 4 %) typedef unsigned int uint; extern uint f2 (uint a, uint b, uint c); unsigned int v1 = 4, v2 = 47; printf("f2: %u\n", f2(v1,v2,0xf));.globl f2 f2: pushl %esp, addl andl 8(),%eax 12(),%eax 16(),%eax 1. f2: 0 2. f2: 1 3. f2: 2 4. f2: 3 (Fortsettes på side 7.)
Eksamen i INF1070 og INF2270, 14. juni 2007 Side 7 5. f2: 51 4c (vekt 4 %) Hint C-operatoren ^ angir eksklusiv eller. int v1 = 0x123, v2 = 0xffde; v1 ^= v2; v2 ^= v1; v1 ^= v2; printf("f3: v1=0x%08x v2=0x%08x\n", v1, v2); 1. f3: v1=0x0000ffde v2=0x00000123 2. f3: v1=0x00000000 v2=0x00000000 3. f3: v1=0x00000123 v2=0x0000ffde 4. f3: v1=0x00000123 v2=0x00000123 5. f3: v1=0x0000ffde v2=0x0000ffde 4d (vekt 4 %) extern void f4 (int a[], int x1, int x2); int a[5] = 1001, 1002, 1003, 1004, 1005 ; int i; f4(a, 2, 4); printf("f4: a="); for (i = 0; i < 5; ++i) if (i > 0) printf(", "); printf("%d", a[i]); (Fortsettes på side 8.)
Eksamen i INF1070 og INF2270, 14. juni 2007 Side 8 printf("\n");.globl f4 f4: pushl %esp, 8(),%edx 12(),%ecx 0(%edx,%ecx,2),%eax 16(),%ecx %eax,0(%edx,%ecx,2) 1. f4: a=1001, 1002, 1003, 1004, 1005 2. f4: a=0, 0, 0, 0, 0 3. f4: a=1001, 1002, 1003, 1004, 1003 4. f4: a=1001, 1003, 1002, 1004, 1005 5. f4: a=1001, 1002, 1002, 1004, 1005 4e (vekt 4 %) extern unsigned int f5 (unsigned int a, unsigned int b); unsigned int v1 = 4, v2 = 1009; printf("f5: %u\n", f5(v1,v2));.globl f5 f5: %esp, pushl 8(),%edx 12(),%eax $16,%ecx (Fortsettes på side 9.)
Eksamen i INF1070 og INF2270, 14. juni 2007 Side 9 idivl %ecx 1. f9: 0 2. f9: 4 3. f9: 1009 4. f9: 16 5. f9: 1073741887 4f (vekt 4 %) extern int f6 (void); printf("f6: %d\n", f6());.globl f6 f6: pushl %esp, movw xorl movb $1,v6 %eax,%eax v6,%al.data v6:.long 0 1. f6: 0 2. f6: 1 3. f6: 256 4. f6: 65536 5. f6: 16777216