Svar - Lunds universitet
Svar - Lunds universitet
Svar - Lunds universitet
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