UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF103 Fra brukergrensesnitt til maskinvare Eksamensdag: 11. desember 2003 Tid for eksamen: 9.00 15.00 Oppgavesettet er på 8 sider. Vedlegg: Ingen Tillatte hjelpemidler: 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 synes noe i oppgaveteksten er uklart, må du gjøre dine egne forutsetninger; sørg bare for at disse er tydelig angitt. 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 16%) side 1 2 Oversettelse (vekt 16%) side 2 3 C-programmering (vekt 16%) side 2 4 Tildeling av prosessortid (vekt 16%) side 4 5 Internminne (vekt 16%) side 4 6 Flervalgsoppgave (vekt 20%) side 5 Oppgave 1 Boolsk algebra (vekt 16%) Du skal designe en krets som tar som input et 4-bits positivt binært tall a = a 3 a 2 a 1 a 0 der a i representerer bit nummer i i tallet a, ogsom output to ettbits signaler kalt ge_10 og le_8, slik det er vist i figur 1 på neste side. ge_10 skal være 1 når a 10 (desimalt), mens le_8 skal være 1 når a 8 (desimalt). (Fortsettes på side 2.)
Eksamen i INF103, 11. desember 2003 Side 2 a 3 a 2 le 8 a 1 a 0 ge 10 Figur 1: En enkel krets 1a Sett opp sannhetsverditabell for ge_10 og le_8 som funksjon av inputtallet a. 1b Forenkle uttrykkene for ge_10 og le_8 ved hjelp av Karnaugh-diagram. 1c Implementer kretsen ved hjelp av logiske porter. 1d Vis hvordan du ved hjelp av kun én 2-inputs port i tillegg til kretsen fra punkt 1c kan lage et outputsignal eq_9 som er lik 1 hvis a = 9 (desimalt). Oppgave 2 Oversettelse (vekt 16%) Funksjonen neven i figur 2 på neste side finner antall partall i en vektor («array») med 100 elementer. Oversett denne funksjonen til assemblerspråk for LC-2. Ved kallet skal adressen a ligge i R0 og ved retur skal svaret ligge i R0. Oppgave 3 C-programmering (vekt 16%) Vi ønsker å lage en enkel datastruktur hvor vi kan legge inn informasjon (i form av tekst); aksess skal skje ved hjelp av en nøkkel (som også er en tekst). Dataene lagres i en liste slik det er vist i figur 3 på neste side. For å illustrere hvorledes datastrukturen brukes, er funksjonen db_put også vist i figur 3. Denne funksjonen legger data inn i strukturen, og parametre er nøkkelen og data. (Fortsettes på side 3.)
Eksamen i INF103, 11. desember 2003 Side 3 short neven (short a[]) { short n = 0; int ix; for (ix = 0; ix < 100; ++ix) if ((a[ix] & 0x0001) == 0) ++n; } return n; Figur 2: C-funksjonen neven struct db_elem { char *key, *data; struct db_elem *next; }; struct db_elem *db_first = NULL; void db_put (char *k, char *d) { /* Insert element (k,d) into the structure. */ struct db_elem *p = db_first; while (p) { if (strcmp(p->key,k) == 0) { /* Element with key k already exists. Replace the data. */ } free(p->data); return; } p = p->next; p->data = strdup(d); /* Create a new element and insert it in the list. */ } p = malloc(sizeof(struct db_elem)); p->key = strdup(k); p->data = strdup(d); p->next = db_first; db_first = p; Figur 3: Listestruktur og funksjonen db_put (Fortsettes på side 4.)
Eksamen i INF103, 11. desember 2003 Side 4 3a Skriv funksjonen char *db_get (char *k) som returnerer en peker til data med den gitte nøkkel. Om ingen data med en slik nøkkel finnes, skal den returnere NULL. 3b Skriv funksjonen void db_remove (char *k) som fjerner elementet med den gitte nøkkel fra datastrukturen. (Om det ikke finnes noen data med oppgitt nøkkel, skal ikke funksjonen gjøre noenting.) Oppgave 4 Tildeling av prosessortid (vekt 16%) Anta at vi benytter en variant av den tradisjonelle sirkulære kørutinen («round robin») ved fordeling av prosessortid til prosesser. En prosess som fullt ut har brukt opp sitt tidskvantum, blir plassert bakerst i køen. En prosess som benytter halvparten av tildelt tidskvantum, blir plassert midt i køen, og en prosess som kun bruker en fjerdedel av tildelt tidskvantum, blir plassert en fjerdedel bak i køen fra starten av. (Det er her snakk om cirka-tall.) 4a Hvilken hensikt kan det være med en slik fordeling? Begrunn svaret kort. 4b Diskuter fordeler og ulemper med implementeringen av den. Oppgave 5 Internminne (vekt 16%) (I denne oppgaven ønsker vi korte og konsise svar; 1 3 setninger bør være nok til å svare på de fleste spørsmålene.) 5a Beskriv forskjellen mellom logisk (virtuell) og fysisk adresse. (Fortsettes på side 5.)
Eksamen i INF103, 11. desember 2003 Side 5 5b Hvorfor er alltid sidestørrelsen en potens av 2? 5c Vi tenker oss en liten datamaskin med plass til kun 4 sider i minnet. På denne datamaskinen kjører vi et dataprogram som trenger 8 sider minne, men som heldigvis ikke trenger alle sidene samtidig. Datamaskinen må av og til bytte sider ut til disk (sidekrav/swapping). Ved kjøring av programmet blir sidene referert i denne rekkefølgen 0172327103 hvor 0 er første side. Ved oppstart er minnet helt tomt. Systemet bruker FIFO-algoritmen for å bestemme hvilken side som skal ut når en ny side skal inn. Hvor mange sidekrav vil oppstå forutsatt at ingen sider var i minnet ved oppstart? Hvor mange sidekrav oppstår hvis systemet bruker LRU («Least Resently Used»)? 5d LRU virker som en fin algoritme i teorien. Hvorfor er den så vanskelig å implementere i praksis? Oppgave 6 Flervalgsoppgave (vekt 20%) I hver av punktene under er det enten gitt et utsagn eller spørsmål med i alt 5 ulike svaralternativ. For hver av dem skal du plukke ut det svaret/alternativet du mener er korrekt. Vær oppmerksom på at du bør sammenligne alternativene for å finne det riktige, da et alternativ/utsagn tatt ut av denne sammenhengen kan ha ulike/andre tolkninger. Svaret ditt skal kun bestå av nummeret som indikerer det riktige alternativet for hver oppgave! 6a Cache benyttes for å 1. redusere søketiden på harddisken ved kontekstbytte 2. utnytte den ledige plassen i RAM bedre 3. redusere hastighetsforskjellen mellom RAM og interne registre i CPU-en 4. redusere hastighetsforskjellen mellom heltalls- og flyttallsregistre 5. øke bufferstørrelsen på nettverkskort (Fortsettes på side 6.)
Eksamen i INF103, 11. desember 2003 Side 6 6b Hvilken påstand om cache er korrekt? 6c 1. Innholdet i cache vil alltid være et subsett av innholdet i RAM unntatt ved skriving. 2. Innholdet i RAM vil alltid være et subsett av innholdet i cache unntatt ved skriving. 3. Det er ingen sammenheng mellom innholdet i cache og RAM. 4. Innholdet i cache og RAM er identisk. 5. Innholdet i cache og RAM er identisk så lenge det kun leses og ikke skrives til cache. Virtuelt minne kan brukes til å 6d 1. redusere aksesstiden på harddisken 2. redusere fragmentering på harddisken 3. redusere antall cache miss 4. skille fra hverandre ulike prosessers minneområder 5. la ulike prosesser ha overlappende minneområder En hasard i forbindelse med pipelining vil si at 6e 1. pipelinen ikke har mange nok trinn til å fullføre alle typer instruksjoner. 2. pipelinen fylles opp med NOP-instruksjoner. 3. et register ikke er korrekt oppdatert når en instruksjon leser det. 4. betingede hopp medfører at pipelinen må tømmes for instruksjoner som ikke skal eksekveres. 5. aritmetiske instruksjoner trenger data som ikke ligger i interne registre i CPU-en. I en von Neuman-arkitektur er 1. instruksjoner og data adskilt i separate minneområder 2. kontroll-enheten en del av det fysiske minnet 3. det en egen funksjonell blokk for å utføre aritmetisk/logiske beregninger 4. input-enheten en integrert del av hukommelses-enheten 5. det ikke pipelining (Fortsettes på side 7.)
Eksamen i INF103, 11. desember 2003 Side 7 6f Den Boolske funksjonen F = abc d + ab d + abcd + ac + bd kan forenkles til 1. F = b d + ac + a bd 2. F = bd + ab + ab d 3. F = b d + a c + abd 4. F = bd + ac + ab d 5. Ingen av de foreslåtte forenklingene i punkt 1 til 4 er gyldige forenklinger. 6g Hvilken påstand er korrekt? 1. RAM er billigere per byte enn CD-ROM. 2. RAM er dyrere per byte enn interne registre. 3. Interne registre er billigere per byte enn cache. 4. Virtuell hukommelse er billigere per byte enn fysisk hukommelse. 5. Ettersom klokkehastigheten øker minsker behovet for cache. 6h Gitt følgende kodesekvens i LC-2 maskinspråk: 0101 1111 1110 0000 0001 1111 1110 0111 0101 1101 1010 0000 0001 1101 1010 0110 0001 1001 1100 0110 Etter at den siste instruksjonen er eksekvert er 1. innholdet i R7 lik innholdet i R5 2. innholdet i R7 lik innholdet i R2 3. innholdet i R4 lik summen av innholdet i R6 og R7 4. innholdet i R6 lik summen av innholdet i R7 og R4 5. innholdet i R4 lik differensen mellom innholdet i R6 og R7 (Fortsettes på side 8.)
Eksamen i INF103, 11. desember 2003 Side 8 6i En multiplekser 1. har 2 n inputsignaler, n styrelinjer og ett utgangssignal som er lik et av inngangssignalene 2. har 2 n + 1 inputsignaler, n + 1 styrelinjer og ett utgangssignal som er lik et av inngangssignalene 3. har n inputsignal, n styrelinjer og 2 n utgangssignaler som er lik summen av input-signalene og styrelinjene 4. brukes som addisjonskrets 5. brukes som multiplikasjonskrets 6j En sekvensiell krets inneholder hukommelse og 1. er ikke egnet til bruk i raske CPU-er 2. er ikke egnet til bruk i en cache 3. er ikke egnet til bruk i sidetabeller 4. et register er et eksempel på en sekvensiell krets 5. en ALU er et eksempel på en sekvensiell krets.