UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i IN 147 Program- og maskinvare Eksamensdag: 29. mai 2001 Tid for eksamen: 9.00 15.00 Oppgavesettet er på 10 sider. Vedlegg: Tillatte hjelpemidler: Ingen Alle Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene. Dette oppgavesettet består av 6 oppgaver som kan løses uavhengig av hverandre. Dersom du finner noe i oppgaveteksten uklart, må du gjøre dine egne forutsetninger. Sørg bare for at disse er tydelig angitt. Når det er snakk om programmering skal koden skrives slik at den fungerer med kommandoen cc på Ifis SGI-maskiner. Innhold Lykke til! 1 Oversettelse (vekt 15%) side 1 2 Boolsk algebra (vekt 15%) side 3 3 Listehåndtering (vekt 15%) side 4 4 Flervalgsoppgave (vekt 18%) side 5 5 Datapath og instruksjonssett (vekt 17%) side 7 6 Parallellstyring (vekt 20%) side 9 Oppgave 1 Oversettelse (vekt 15%) Deloppgavene i denne oppgaven går ut på å forstå og oversette mellom MIPS assemblerkode og C. (Fortsettes på side 2.)
Eksamen i IN147, 29. mai 2001 Side 2 #include <regdef.h>.text.globl fun # Signatur i C: float fun(float a[], int n) fun: addi t0, zero, 0 mtc1 zero, $f0 cvt.s.w $f0, $f0 beq t0, a1, end loop: lw t1, 0(a0) mtc1 t1, $f2 abs.s $f2, $f2 add.s $f0, $f0, $f2 addi a0, a0, 4 addi t0, t0, 1 bne t0, a1, loop end: jr ra Figur 1: Assembler-kode 1-a Forståelse (vekt 2%) Figur 1 viser koden til en ukjent funksjon fun. Gi en kort beskrivelse av hva assemblerfunksjonen fun gjør. Hint Operasjonen mtc1 zero, $f0 flytter et ord fra register zero i CPU-en til register $f0 i flyt-tallsprosessoren (det står omvendt i boka). 1-b Fra assembler til C (vekt 5%) Oversett koden i figur 1 fra MIPS assemblerkode til C. 1-c Fra C til assembler (vekt 8%) Funksjonen i figur 2 på neste side finner første primtall i en gitt vektor med n elementer. Den returnerer primtallet, eller verdien 0 hvis ingen primtall finnes. Vi antar at n 1. Funksjonen kaller isprime, som sjekker om et gitt tall er primtall eller ikke. Oppgaven går ut på å oversette funksjonen til MIPS assemblerkode. Anta at isprime finnes, den skal ikke programmeres. Hint Legg vekt på å behandle funksjonskallet korrekt. (Fortsettes på side 3.)
Eksamen i IN147, 29. mai 2001 Side 3 int find_prime(int a[], int n) { int i=0, found=0, prime=0; } while (i<n &&!found) { if (isprime(a[i])) { prime = a[i]; found = 1; } i++; } return prime; Figur 2: C-kode Oppgave 2 Boolsk algebra (vekt 15%) Gitt følgende boolske funksjon: F = ab + bc + a b c 2-a (vekt 5%) Implementer F ved hjelp AND, OR og NOT porter. 2-b (vekt 5%) Implementer F kun ved hjelp av NAND porter. 2-c (vekt 5%) En T-flipflop har følgende karakteristiske tabell: Q T Q(t +1) 0 0 0 0 1 1 1 0 1 1 1 0 VishvordandukanlageenD-flipflopvedhjelpavenT-flipflopoglogiskeporter. (Fortsettes på side 4.)
Eksamen i IN147, 29. mai 2001 Side 4 Oppgave 3 Lister (vekt 15%) En liten bokhandel har lagret oversikt over varene sine i en liste-struktur. Hver bok lagres i et element av typen book. I hvert element peker feltet next på neste bok i listen (book *next), isbn inneholder det unike ISBN-nummeret til hver bok (char isbn[13]), title inneholder bokas tittel (char title[150]), mens n inneholder antall kopier igjen på lager (int n). 0 ISBN ISBN title n title n 3-a Registrere nye bøker (vekt 5%) Når forhandleren får inn nye bøker på lager må bøkene registreres i listen. Om boka allerede finnes i registeret økes antall kopier, om boka ikke finnes på lager fra før legges det nye elementet til sist i listen. Funksjonen add_books med signatur int add_books(book *bliste, book *belem) utfører dette. Programmer C-funksjonen add_books. 3-b Fjerne bøker (vekt 5%) Når bøker selges (går ut av lager) må listen oppdateres. Antall kopier som tas ut for en gitt bok må reduseres med det riktige antallet, og om antall kopier etter operasjonen når null skal elementet fjernes fra lista. Funksjonen rem_books med signatur int rem_books(book *blist, char isbn[], int copies) gjør dette. Skriv C-funksjonen rem_books. 3-c Toveis-liste (vekt 5%) Anta nå at datastrukturen er utvidet med en prev-peker, slik at vi har en toveis-liste. Skriv funksjonen rem_books fra deloppgave b) på nytt, nå for en liste av bøker med peker både til neste og forrige element i listen. (Fortsettes på side 5.)
Eksamen i IN147, 29. mai 2001 Side 5 Oppgave 4 Flervalgsoppgave (vekt 18%) I denne oppgaven skal du som svar kun oppgi nummeret på det riktige svaret eller det riktige alternativet. Hint Les nøye igjennom alle alternativer før du svarer. 4-a Boolsk algebra Hvilken påstand er korrekt? 1. NAND-porter kan ikke brukes til å implementere en NOR-port. 2. NOR-porter kan ikke brukes til å implementere en inverter. 3. En XNOR-port kan brukes til å implementere en inverter. 4. En XOR-port kan implementeres ved hjelp av invertere. 5. Enhver boolsk funksjon kan implementeres med kun AND og OR-porter. 4-b Pipelining Hvilken påstand er korrekt? 1. Hvis antall trinn i en pipeline økes må man redusere klokkehastigheten for at instruksjonene skal få tid nok til å bli ferdige. 2. Pipelining krever at man har egne instruksjoner for å gjøre betingede hopp slik at man unngår stalling. 3. Uten pipelining må en instruksjon være ferdig eksekvert før neste instruksjon kan påbegynnes. 4. Med pipelining blir programmene kortere fordi instruksjonene kan påbegynnes hver klokkesykel istedenfor å måtte vente til forrige instruksjon er ferdig. 5. Med pipelining må hurtigminnet (RAM) være like raskt som CPU en for at det ikke skal oppstå stalling. 4-c Adressering av hukommelse I en prosessor med 32-bits adressebuss kan man adressere 1. 2,147,483,648 lokasjoner (Fortsettes på side 6.)
Eksamen i IN147, 29. mai 2001 Side 6 2. 4,294,967,295 lokasjoner 3. 8,589,934,591 lokasjoner 4. 4,294,967,296 lokasjoner 5. 8,689,934,592 lokasjoner 4-d Stalling i pipelinet arkitektur Gitt følgende instruksjonsekvens i en pipelinet arkitektur: sub $2, $1, $3 and $12, $2, $5 or $13, $6, $3 add $14, $2, $2 sw $15, 100($2) Uten forwarding må prosessoren stoppes for å få korrekt resultat. Det minste antall klokkesykler prosessoren må stoppes (uten forwarding) er: 1. 5 2. 4 3. 3 4. 2 5. 1 4-e Cache Hvilken påstand er korrekt? 1. Ved read-hit må valid-bit et være satt til TRUE samtidig som tag-feltet på m bit må være lik de m øvre bit ene av adressen man leser fra. 2. Blokkstørrelsen i cache må være proporsjonal med ordlengden til prosessoren for å få lavest mulig søketid ved cache-miss. 3. I en set-assosiativ cache kan en blokk kun plasseres ett sted. 4. Fordelen ved å øke blokkstørrelsen er at prosesseringtiden går ned ved writemiss. 5. Ved write-hit må valid-bit et settes til FALSE. (Fortsettes på side 7.)
Eksamen i IN147, 29. mai 2001 Side 7 4-f Virtuelt minne Hvilken påstand er korrekt? 1. Virtuelt minne gir raskere aksess til data fordi det alltid ligger en kopi i RAM. 2. Sidetabellen inneholder informasjon om data man ønsker å lese ligger i RAM eller på harddisken. 3. Virtuelt minne krever at RAM må være like rask som cache. 4. Straffen ved page-fault (dvs økt eksekveringstid) er like stor som ved cache-miss. 5. Ved å øke størrelsen på cache minsker man risikoen for page-fault. Oppgave 5 Datapath og instruksjonssett (vekt 17%) 5-a (vekt 3%) Hvilken oppgave har multiplekseren til høyre for Data memory i figur 3 på neste side? 5-b (vekt 4%) Hvilken oppgave har ALU en øverst til høyre i figur 3 på neste side? Kan den brukes til å utføre alle typer instruksjoner av denne kategorien? 5-c (vekt 3%) Gitt det generelle formatet for en R-type instruksjon: 0 rs rt rd shamt funct Bit: 31 26 25 21 20 16 15 11 10 6 5 0 Hvilket kontrollsignal i figur 3 på neste side brukes for å velge ut destinasjonsregisteret fra instruksjonsformatet gitt over, og hva må verdien til kontrollsignalet være? (Fortsettes på side 8.)
Eksamen i IN147, 29. mai 2001 Side 8 PC 4 address Instruction memory Add Instruction [31 0] Instruction [31 26] Instruction [25 21] Instruction [20 16] Instruction [15 11] Instruction [15 0] Control M ux 0 1 RegDst Branch Mem MemtoReg ALUOp MemWrite ALUSrc RegWrite register 1 register 2 Write register Registers data 1 data 2 Write data 16 32 Sign extend Instruction [5 0] Shift left 2 0 M ux 1 ALU control Add ALU ALU result Zero ALU result 1 Address Write data Data memory data M ux 1 0 M ux 0 Figur 3: En datapath (samme som fig. 5.24 i H&P) (Fortsettes på side 9.)
Eksamen i IN147, 29. mai 2001 Side 9 5-d (vekt 4%) Gitt følgende tre instruksjoner: add $1, $2, $2 lw $4, 100($3) or $5, $1, $4 For hver av instruksjonene, angi hvilken verdi følgende kontrollsignaler har: RegWrite MemWrite RegDst Mem AluSrc 5-e (vekt 3%) Gitt en direkte-avbildet ( direct-mapped ) cache som kan inneholde ialt 8K ord à 32 bit. Hvor mange bit er index en på? Hvor mange bit inneholder tag-feltet? Skriv en C-rutine med følgende signatur: int Cache(int index, int *cacheword) int Cache returnerer 0 ved read-miss, mens ved read-hit returneres en peker til ordet i int *cacheword.iint index ligger index en til ordet man søker etter. Definer først opp en fornuftig datastruktur for å representere cache n og skriv deretter C-rutinen. Oppgave 6 Parallellstyring (vekt 20%) Tre produsenter, P1, P2 og P3, produserer heltall som legges i et felles lager: En vektor B med plass til 10 elementer. Konsumenten K leser heltall fra samme vektor. Produsentene skriver til vektoren i tilfeldig rekkefølge, mens konsumenten ikke får lese med mindre vektoren er full. Når B er full henter K et tilfeldig element, for så å blokkere til B igjen er fylt opp. (Fortsettes på side 10.)
Eksamen i IN147, 29. mai 2001 Side 10 P1 B P2 K P3 Du kan anta at følgende funksjoner er tilgjengelig: int produce() produserer et heltall. int find_index() returnerer en ledig plass i vektoren B. int random(n1, n2) gir et tilfeldig tall mellom n1 og n2. void consume(int x) konsumerer et heltall. Anta også at felles lager B er opprettet, og at hver prosess har en peker til det: int *p; p = delt_lager(sizeof(b)); 6-a Kritisk region (vekt 2%) Hva er den kritiske regionen i dette problemet? Forklar kort hvorfor. 6-b Semaforer (vekt 10%) Programmer kode for produsentene og konsumenten ved å bruke semaforer. Deklarer semaforene og eventuelle tellere som er nødvendig. Det holder å skrive «kvasikode». Forståelse av semaforer er det viktige. 6-c Monitorer (vekt 8%) Programmer kode for produsentene og konsumenten ved å benytte en monitor. Også her holder det å skrive «kvasikode», forståelse av monitorer er det vesentlige.