12.11.2014 Views

Svar - Lunds universitet

Svar - Lunds universitet

Svar - Lunds universitet

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Lunds</strong> Universitet<br />

LTH<br />

Ingenjörshögskolan, Helsingborg<br />

Tentamen den 17 december 2010<br />

Datorarkitekturer och operativsystem, EDT621,<br />

7,5 poäng<br />

Skrivtid: 8.00-13.00<br />

Tillåtna hjälpmedel: Mats Brorsson: Datorsystem.<br />

Maximalt antal poäng: 60 poäng<br />

För betyg 3 krävs 30 poäng<br />

För betyg 4 krävs 40 poäng<br />

För betyg 5 krävs 50 poäng<br />

Ordet ”assembler” avser MIPS-assembler om inget annat sägs.<br />

Alla lösa blad skall vara samlade i omslagsarket.<br />

Inlämnade uppgifter skall vara försedda med uppgiftens nummer.<br />

Lösningarna skrivs in i nummerordning.<br />

Skriv namn på varje ark.<br />

Omslagsarket skall vara fullständigt ifyllt med inskrivningsår, namn och<br />

personnummer.<br />

Kryssa för lösta uppgifter och ange antalet inlämnade blad.<br />

1


Uppgift 1.<br />

start:<br />

addi t0, zero, 0x44<br />

addi t1, zero, 0x68<br />

and t2, t0, t1<br />

nor t3, t0, 0<br />

xor t4, t3, t0<br />

sw t2, 8(t1)<br />

a) Vilket värde finns i register t2 efter exekveringen av programmet?<br />

(2p)<br />

0x00000040<br />

b) Var i RAM-minnet finns värdet i register t2 efter exekveringen?<br />

0x00000070<br />

(3p)<br />

c) Vilket värde ligger i register t3 efter exekveringen? (2p)<br />

0xFFFFFFBB<br />

d) Vilket värde ligger i register t4 efter exekveringen? (3p)<br />

0xFFFFFFFF<br />

Uppgift 2.<br />

Nedan finns några operationer beskrivna. Din uppgift är att utan att använda<br />

syntetiska instruktioner skriva assemblerkod som implementerar<br />

operationerna. Använd register at ifall du behöver ett hjälpregister för<br />

uppgiften.<br />

a) Innehållet i register t0 ska nollställas om dess värde är negativt;<br />

annars ska det inte påverkas. Vanlig 2-komplementrepresentation<br />

förutsätts.<br />

(3p)<br />

bgez t0, klar<br />

nop<br />

add t0, zero, zero<br />

klar:<br />

2


) De sexton lägsta bitarna i register t1 ska byta plats med de sexton<br />

lägsta i register t2. Exempel: om t1 och t2 innehåller<br />

0xABCDEF98 och 0x76543210 så ska t1 och t2 efter<br />

operationen innehålla 0xABCD3210 resp. 0x7654EF98.<br />

(3p)<br />

add at, t1, zero<br />

srl t1, t1, 16<br />

sll t1, t1, 16<br />

xor t1, t1, t2<br />

srl t2, t2, 16<br />

sll t2, t2, 16<br />

xor t1, t1, t2<br />

sll at, at, 16<br />

srl at, at, 16<br />

or t2, t2, at<br />

flytta t1 till at<br />

nollställ låga t1<br />

stoppa in låga t2 i låga t1<br />

nollställ låga t2<br />

återställ höga t1, t1 klar<br />

nollställ höga at<br />

t2 klar<br />

0 poäng om man använder minnet<br />

3 poäng för korrekt lösning med extra hjälpregister<br />

c) Om innehållet i t3 är udda ska alla bitar i t3 nollställas. Annars ska<br />

alla bitar ettställas.<br />

(4p)<br />

andi at, t3, 1<br />

beq at, zero, klar<br />

and t3, zero, zero<br />

addi t3, -1<br />

klar:<br />

nollställ, görs alltid<br />

görs om man inte hoppar<br />

3


Uppgift 3.<br />

Du behöver inte bekymra dej om extra nop:ar. Vi låter kompilatorn sköta<br />

detta.<br />

a) Översätt följande C-kod till MIPS-assembler. Vi antar att variabeln a<br />

finns i register t0.<br />

if (a > 0){<br />

a = a + 2;<br />

if (a > 10)<br />

a = 10;<br />

}<br />

(5p)<br />

addi t1, zero, 10<br />

ble t0, zero, klar<br />

addi t0, t0, 2<br />

ble t0, t1, klar<br />

addi t0, zero, 10<br />

klar:<br />

b) Översätt följande C-kod till MIPS-assembler. Vi antar att variabeln a<br />

finns i register t0 och variabeln b i register t1.<br />

a och b är heltal.<br />

a = 0;<br />

b = 1;<br />

while (a= 10<br />

sra t1, t1, 1 // bevara teckenbiten<br />

addi t0, t0, 1<br />

b omigen<br />

klar:<br />

4


Uppgift 4.<br />

En person som inte är medveten om de problem med databeroenden som<br />

kan uppstå om man skriver assembly-program till MIPS, vill att följande<br />

instruktioner ska utföras precis i den ordning de står:<br />

kod: lb t0, 6(t3)<br />

lui t1, 15<br />

loop: add t1, t1, t0<br />

beq t1, t2, loop<br />

add t0, zero, zero<br />

Personen får reda på att man minsann inte alltid kan skriva sådär direkt, utan<br />

antagligen måste ha lite nop:ar här och var för att det ska fungera.<br />

a) Vilka av följande sex försök fungerar korrekt i den riktiga MIPSarkitekturen?<br />

(4p)<br />

kod1: lb t0, 6(t3)<br />

nop<br />

onödig<br />

kod2: lb t0, 6(t3)<br />

lui t1, 15<br />

lui t1, 15<br />

loop: add t1, t1, t0<br />

loop: add t1, t1, t0<br />

beq t1, t2, loop<br />

nop<br />

beq t1, t2, loop<br />

nop<br />

add t0, zero, zero<br />

add t0, zero, zero<br />

kod3: lb t0, 6(t3)<br />

lui t1, 15<br />

kod4: lb t0, 6(t3)<br />

nop<br />

onödig<br />

nop<br />

onödig<br />

lui t1, 15<br />

loop: add t1, t1, t0<br />

loop: add t1, t1, t0<br />

beq t1, t2, loop<br />

nop<br />

onödig<br />

nop<br />

add t0, zero, zero<br />

beq t1, t2, loop<br />

add t0, zero, zero<br />

kod5: lb t0, 6(t3)<br />

lui t1, 15<br />

kod6: lb t0, 6(t3)<br />

lui t1, 15<br />

loop: add t1, t1, t0<br />

nop<br />

onödig<br />

nop<br />

onödig loop: add t1, t1, t0<br />

beq t1, t2, loop<br />

nop<br />

add t0, zero, zero<br />

beq t1, t2, loop<br />

nop<br />

add t0, zero, zero<br />

Den enda nop som behövs är den efter beq! Värdet som laddas in<br />

i t0 i den första instruktionen behövs inte i nästa instr.<br />

Efter lui och add behövs aldrig någon nop.<br />

b) I exemplen ovan finns onödiga nop:ar. Markera alla dessa! (4p)<br />

Alla är onödiga utom efter beq.<br />

c) Exekveras något/några av alternativen korrekt i den modell av<br />

MIPS-arkitekturen som finns på sidan 263 i läroboken? (2p)<br />

Ingen, det behövs 2 nop:ar efter beq<br />

5


Uppgift 5.<br />

En programloop som körs i en MIPS-processor börjar på minnesplats<br />

0x80020730 i RAM-minnet och slutar på 0x80020D9C. Instruktionscachen<br />

är av enkel typ, dvs. med direkt adressavbildning.<br />

Cacheminnet består av 8 st. block på vardera 2048 byte.<br />

a) Vad blir träffsannolikheten för instruktionscachen när programmet<br />

körs om och om igen under lång tid? Dvs. mot vilket värde<br />

konvergerar träffsannolikheten?<br />

(3p)<br />

b) Antag att cacheminnet är hälften så stort som i a) och att antalet<br />

block fortfarande är 8.<br />

Vad blir träffsannolikheten nu, när programmet körs om och om<br />

igen under lång tid?<br />

(4p)<br />

c) Kan man få en förbättring ifall man i detta exempel använder ett<br />

cacheminne med fullt associativ arkitektur?<br />

Motivera ditt svar!<br />

(3p)<br />

Programmet är inte större än att det ryms i ett av cacheminnets block.<br />

träffsannolikheten kommer därför att konvergera mot 1 när programmet körs<br />

under lång tid. Man får två missar i början och sedan bara träffar.<br />

Samma gäller i b). Två missar i början och sen ett stort antal träffar.<br />

Nej, ett fullt associativt minne ger ingen förbättring i detta exempel,<br />

eftersom hela programkoden ryms i cacheminnet.<br />

6


Uppgift 6.<br />

a) Vad menas med en virtuell maskin (VM)? Ge exempel på en VM.<br />

(2p)<br />

b) Vad är skillnaden mellan kärnmod och användarmod? (1p)<br />

c) Vad innebär CPU-schemaläggning? (1p)<br />

d) Nämn 4 olika saker som ingår i en PCB. (2p)<br />

e) Vilken betydelse har den s.k. valid-invalid-biten i en sidtabell?<br />

(1p)<br />

f) För en viss dator är tiden för en minnesaccess 12 ns<br />

medan totaltiden för sidfel, sidväxling och återstart är 4 ms.<br />

Antag att sannolikheten för sidfel är 0.0005.<br />

Vad blir den effektiva accesstiden (EAT)?<br />

(2p)<br />

g) I vilken kategori av filsystem används transaktioner? (1p)<br />

7

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!