Oppgåve 1

"Forklar hva som menes med memory-mapped I/O."

Ein måte å kommunisere med dei ulike perifere enhetane (devices) er ved hjelp av såkalla "memory-mapped I/O". Ved å bruke dette, er det fullstendig transparent for prosessoren om han jobbar med vanleg RAM (konvensjonellt eller utvida), eller om han jobbar med andre enhetar. Prosessoren nyttar dei samme operasjonane mot enheten som han ville gjort mot minnet. Ved bruk av mmIO må programmeraren sjølv fortelje programmet kva for minneaddresser den skal addressere når ein skal jobbe mot ein spesifikk enhet. Kvar enhet har sitt sett med minneaddresser (mellom 640Kb og 1Kb). Alle enhetane på bussen sjekker om addressene gjeld dei sjølve, og handlar dersom det er korrekt addresse. Addressene er blant anna mot dataregister og statusregister i kvar enhet. Dersom ein enhet er opptatt (ifylgje statusregisteret) må prosessoren finne på noko anna inntil vidare. Den kan enten vente uendeleg tid (busy waiting), eller nytte seg av IRQar (interrupt-driven I/O). Heile prosessen som er i gang i prosessoren (register og pågåande prosessar) må då mellombels lagrast medan den nye utgåva blir utført. Interrupts kan innehalde informasjon om prioritet.

Oppgåve 1b

"Intels mikroprosessorer (80x86 og Pentium) har segmentregistre. Hva er segmenter, og hvordan brukes segmentregistrene ved addressering?"

Intel-prosessorane behandlar minnet for logisk å vere delt opp i 16-byte segment. Dermed refererer 0 i segmentregisteret til minneaddresse 0, medan 1 referer til byte 16. I tillegg har ein offset som spesifiserer kor langt frå starten av dette segmentet ein eigentleg vil gå til. Dermed må ein ta ((segmentregisterets innhald * 16) + offset) for å finne den effektive addressa (EA). Ved å gange med 16 "shiftar" ein bits’ane 4 plassar mot venstre, og ein får dermed ei addresselengde på 20 bits, nok til å referere 1Mb.

Oppgåve 1c

"Forklar hva som menes med lesing og skriving i minnet (memory read, memory write). Gi fire eksempler på instruksjoner som fører til at disse operasjonene blir utført."

Å hente data frå minnet er memory read. Å plassere data i minnet er memory write. Desse data går via databussen. Addressebussen seier kva for plassering i minnet (eller ein perifer enhet) ein skal jobbe mot, og kontrollbussen gjev spesifikk informasjon om ein skal lese eller skrive til minnet. Minnet kan ikkje utføre noko, er ein rein lagringsplass. I tillegg til r/w på kontrollbussen blir det også sendt MOC (memory operation complete) og VMA (valid memory address) som separate linjer. Utan MOC ville ein ikkje visst når minnet var ferdig med å levere eller lagre data.

Stega for ein enkel "skriv til minne"- og "les frå minne"-sekvens med handlingar, jamfør p208 i pensumbok. VMA seier at minnet skal handle, sidan det ikkje gjeld andre perifere enhetar, MOC seier at minnet er ferdig og at CPU kan fortsetje, addresser hentast frå MAR (på einvegsbuss), data blir overført til eller frå MDR.

Oppgåve 2a

"Nevn fordeler og ulemper med "hardwired" kontrollenhet og en mikroprogrammert kontrollenhet."

Ein hardwired CU er typisk for RISC-prosessorar (Reduced Instruction Set Computer). Her er alltid lengda på instruksjonane like lange. Få instruksjonar i RISC tilseier enklare design av CU’en, noko som gjer at det vert enklare å gjere den hardwired. To grupper stridast om ytingsfordelane, men det vert hevda at få enkle instruksjonar går fortare enn mange komplekse. Vanleg for stormaskiner av ymse slag (Indy, Cray etc). Ulemper med hardwired CU er at dersom ein vil endre litt i instruksjonssettet, er ein nøydd til å endre design på heile prosessoren, sidan nye linjer må strekkast, noko som kan vere umogleg.

Ein mikroprogrammet CU er ein typisk CISC (Complex Instruction Set Computer). Denne har mikroprogram som blir henta etter programmet er dekoda og klar til utføring. Det er her enklare å endre instruksjonssettet, ettersom ein berre treng legge inn nye mikroinstruksjonar i CU. Det er likevel ein mykje meir uoversikteleg måte å gjere ting på, ettersom ein har så mange instruksjonar å holde orden på. Som sagt er det litt i det blå kva for prosessortype som gjev mest yting for pengane.

Oppgåve 2b

"To opplysninger blir alltid lagret når det inntreffer et interrupt (avbrudd). Hvilke opplysninger er dette, og hvorfor er det nødvendig å ta vare på dem?"

All informasjon som på det tidspunkt er i prosessoren og i registera blir lagra midlertidig til interruptet er ferdig. Ein må sjølvsagt også lagre kor ein på noverande tidspunkt er i programmet (Program Counter). Dette var etter mi meining eit litt diffust spørsmål. I tillegg kjem det inn informasjon i samband med interruptet om det er hardware- eller software-interrupt, eventuellt ein prioritet og ei addresse som seier kven interruptet kjem frå.

Oppgåve 2c

"Hva er en interruptvektor?"

Som eg sa i forrige svar så blir det i tillegg til interruptet sendt ved ei lita identifiserande kode som seier kven interruptet kjem frå og korleis ein skal kunne svare.

Oppgåve 3a

"Forklar kort prinsippet pipelining."

Pipelining er å ha fleire steg i FEC’en (Fetch-Execute-Cycle) gåande samtidig. Istadenfor å jobbe seg ferdig med ein instruksjon innan ein byrjar med neste er å jobbe utan pipe. Med pipe kan ein i ein sykkel (eller cycle) samtidig utføre, dekode og hente (enkelt sett). Ved selektiv branching kan det hjelpe å ha to piper, sidan med ei pipe kan ein ta feil og må flushe pipa og hente og dekode den andre eksekveringsbanen. Ein kan også ha ein enhet/ei algoritme som ganske sikkert finn ut kva for branch som kjem til å nyttast. Pentium har ein slik treffbarhet angiveleg på rundt 80%. Pipelining er kult.

Oppgåve 3b

"Betingede hopp skaper problemer i en pipeline. Forklar hvorfor, og nevn også hvordan slike situasjoner kan håndteres."

Eg trur eg svarte fullgodt på dette i ovanståande spørsmål. Eg dobbeltsjekker... Det heiter forresten på fint/engelsk branching prediction og reload penalty (ved pipe-flush). Det kan også vere alternativt å utføre den feilslåtte pipe-instruksjonen og lagre denne for seinare bruk, sidan den kjem til å bli brukt uansett (teit, synest eg).

Oppgåve 3c

"Forklar hva som menes med Harvard-arkitektur."

Ein Harvard-arkitektur nyttar seg av å lagre instruksjonane og data separat i cache, sidan ein då kan drive med paralell fetch. Må då ha separate bussar, eller breiare bussar. Ofte brukt i superskalare datamaskiner (dobbelt antall prosessorar (problem med instruksjonsrekkefylgje!), fleire piper.