UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 15. juni 2006 Tid for eksamen: 14.30 17.30 Oppgavesettet er på 7 sider. Vedlegg: INF1070 Datamaskinarkitektur Ingen Tillatte hjelpemidler: Alle 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 vekt 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 Programmering (vekt 25%) side 4 4 Hva skjer? (vekt 25%) side 4 Oppgave 1 Boolsk algebra (vekt 25%) 1a (vekt 10%) a) Du skal lage en ks som tar som input et 4-bits tall a = a 3 a 2 a 1 a 0 og som genererer et outputsignal IsEven. Outputsignalet skal være 1 når a er et partall (dvs 0, 2, 4, 6,...) og 0 når a er et oddetall. Sett (Fortsettes på side 2.)
Eksamen i INF1070, 15. juni 2006 Side 2 opp sannhetsverditabell for kresten og implementer den med logiske porter. Forenkle mest mulig. b) Ved hjelp av ksen du laget i a) skal du lage en ny ks som skal brukes til å finne ut om summen av to 4-bits tall a og b er et partall eller ikke. Output fra den nye ksen skal hete SumIsEven og skal være lik 1 hvis summen av a og b er et partall og 0 ellers. Bruk så få ekstra porter som mulig. 1b (vekt 15%) a) Bruk Karnaugh-diagram til å forenkle følgende Boolske funksjon: G = abc + bd + bc + a b cd + abcd + c d + a b c b) Implementer G med så få porter som mulig. c) Vis hvordan du kan lage en NOR-port ved help kun av ANDport(er) og XOR-port(er). Oppgave 2 Flervalgsoppgave (vekt 25%) I hver av oppgavene under er det gitt fem utsagn, hvorav bare ett er korrekt. Besvarelsen skal kun bestå av bokstaven som du mener er det korrekte svaralternativet. Les nøye igjennom alle svaralternativene før du plukker ut det du mener er det korrekte! 2a Boolsk algebra 2b 1. AND- og NOT-porter kan ikke brukes til å lage OR-porter 2. NAND-porter kan ikke brukes til å lage NOR-porter 3. NOR-porter kan ikke brukes til å lage XOR-porter 4. AND-porter kan ikke brukes til å lage XOR-porter 5. NOR-porter kan ikke brukes til å lage invertere Virtuell hukommelse 1. Virtuell hukommelse øker størrelsen på cache 2. Med virtuell hukommelse er det gunstigere å bruke direkteavbildet cache 3. Hvis man har separat instruksjons- og data-cache, trengs ikke virtuell hukommelse 4. Uten virtuell hukommelse er det ikke mulig å implementere tidsdeling i operativsystemer 5. TLB implementert med SDRAM er raskere enn TLB implementert med NVRAM (Fortsettes på side 3.)
Eksamen i INF1070, 15. juni 2006 Side 3 2c Cache 1. Cache har like kort responstid som interne registre 2. Cache kan ikke implementeres med dynamisk RAM 3. Look-aside-arkitektur gir dårligere responstid enn look-througharkitektur 4. Look-through-arkitektur er langsommere ved read-miss enn lookaside-arkitektur 5. Full-assosiativ cache har like lang søketid som set-assosiativ cache 2d Pipeling 1. Pipelining brukes ikke i prosessorer som sitter i mobiltelefoner 2. Kontrollhasarder kan fjerne ved å bruke multiple pipelines 3. NOP-instruksjoner kan alltid brukes til å fjerne ressurshasarder 4. Ressurshasard er et annet navn på kontrollhasard 5. Stalling kan fjernes ved å øke klokkehastigheten 2e Primærhukommelse 1. Dynamisk RAM trenger refresh bare når det lagres 0-bit, og ikke når det lagres 1-bit 2. Uten refresh vil ikke innholdet i dynamisk RAM være lesbart 3. RAM bygget med RS-flipflop-er er mer upålitelig enn RAM bygget med D-flipflop-er fordi RS-flipflop-en har udefinerte tilstander 4. Dynamisk RAM er tregere enn RAM konstruert med RS-flipfloper 5. Ingen av påstandene over er korrekte 2f Hukommelsesbusser 1. Synkrone busser har alltid mer komplisert protokoll-overhead enn asynkrone busser 2. Asynkrone busser er alltid langsommere enn synkrone busser grunnet protokoll-overhead 3. Asynkrone busser kan brukes til å knytte sammen enheter med forskjellig hastighet 4. TCP/IP fungerer bare over en synkron bussprotokoll 5. Synkrone busser kan ikke brukes til å koble sammen enheter med samme hastighet (Fortsettes på side 4.)
Eksamen i INF1070, 15. juni 2006 Side 4 Figur 1:struct node, listehodethead og funksjoneninsert_last struct node { int val; struct node *next; }; struct node *head = NULL; void insert_last (struct node *p) { if (head == NULL) { head = p; p >next = NULL; urn; } } struct node *px = head; while (px >next) px = px >next; px >next = p; p >next = NULL; 2g Diverse 1. På en RISC-arkitektur tar kompilerte programmer mindre plass sammenlignet med en CISC-arkitektur 2. Virtuell hukommelse gjør det lettere for operativsystemet å holde minneområder til ulike prosesser adskilt 3. Mikrokode kan ikke eksekveres på en pipelinet arkitektur 4. Maskinspråk er raskere å eksekvere enn assemblerspråk 5. Assemblerspråk kan ikke oversettes til mikrokode før det eksekveres Oppgave 3 Programmering (vekt 25%) I figur 1 er vist en struct egnet for å lage en liste, en variabel (listehodet head) og en funksjon som setter inn et nytt element sist i listen. Oversett funksjonen til x86-kode. Oppgave 4 Hva skjer? (vekt 25%) Denne oppgaven innholder noen korte spørsmål om hva som skjer når en programkode utføres. I hvert punkt er nøyaktig ett alternativ riktig. Sva ditt skal kun være tallet til det du tror er det riktige alternativet. (Fortsettes på side 5.)
Eksamen i INF1070, 15. juni 2006 Side 5 4a Denne C-koden kaller en assemblerfunksjon. Hva skriver den ut? int v1 = f1(1, 2, 3, 4); printf("%d\n", v1); f1: pushl movl 4(),%eax 4b 2. 2 3. 3 4. 4 5. 5 6. 0 7. Noe annet enn svarene over int v2 = f2( 1, 1); printf("%d\n", v2); f2: pushl subl %eax,%eax movl 8(),%ebx cmpl 12(),%ebx ja f2a incl %eax f2a: cmpl 12(),%ebx jg f2b addl $2,%eax f2b: 2. 2 (Fortsettes på side 6.)
Eksamen i INF1070, 15. juni 2006 Side 6 4c 3. 3 4. 1 5. 0 7. Umulig å si, siden sva vil variere fra gang til gang float v3a = 0.75, v3b = 3.0; f3(&v3a); f3(&v3b); printf("%f %f\n", v3a, v3b); f3: pushl movl andl 8(),%eax $0x7fffffff,0(%eax) 4d 1. 0.750000 3.000000 2. 0.750000 3.000000 3. 0.750000 3.000000 4. 0.750000 3.000000 5. 0.000000 0.000000 7. Umulig å si, siden sva vil variere fra gang til gang int v4 = f4(200, 100); printf("%d\n", v4); f4: pushl movb addb rclb 8(),%al 12(),%al $1,%al (Fortsettes på side 7.)
Eksamen i INF1070, 15. juni 2006 Side 7 andl $1,%eax 4e 2. 0 3. 100 4. 200 5. 300 7. Umulig å si, siden sva vil variere fra gang til gang char s[200]; strcpy(s, "/ifi/eisa/k00/inf1070"); int v5 = f5(s, strlen(s)); printf("%d\n", v5); f5: pushl pushl %edi movl 8(),%edi movl 12(),%ecx addl %ecx,%edi std movb $ /,%al repnz scasb movl %ecx,%eax %edi 2. 0 3. 1 4. 12 5. 21 7. Umulig å si, siden sva vil variere fra gang til gang