Tentamen i IS1500/IS1200/2G1518 Datorteknik fredagen den 19 augusti 2011 kl

Relevanta dokument
Lösningsförslag till tentamen i IS1500 Datorteknik

CE_O5. Cacheminne. Hemlaboration 2.

Datorsystem. Tentamen

Lösningsförslag till tentamen i Datorteknik

Lösningar till tentamen i EIT070 Datorteknik

Övning 7. Timer, serieport

Datorsystem. Tentamen

SVAR TILL TENTAMEN I DATORSYSTEM, HT2013

Lösningar till tentamen i EIT070 Datorteknik

Övning 6. Parallellport, timer

Tentamen den 12 januari 2017 Datorarkitektur med operativsystem, EDT621

Lösningar till tentamen i EIT070 Datorteknik

IS1500 Lösningar övning CE_O CE_O7. Programmerad in/utmatning. Serieport. Förberedelser till nios2io.

SVAR TILL TENTAMEN I DATORSYSTEM, VT2013

CE_O2. Nios II. Subrutiner med mera.

CE_O3. Nios II. Inför lab nios2time

Digitala System: Datorteknik ERIK LARSSON

CE_O8. Cacheminne. Hemlaboration 2.

Datorsystem Laboration 2: Minnesmappade bussar

Tentamen den 18 mars svar Datorteknik, EIT070

Digital- och datorteknik

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

IS1200 Datorteknik. Övning CE_O4 Maskinnära programmering med C Förberedelser till hemlaboration 1

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte "ARM-instruktioner", A4-format, 17 sidor. Maxpoäng:

Datorarkitektur I. Tentamen Lördag 10 April Ekonomikum, B:154, klockan 09:00 14:00. Följande gäller: Skrivningstid: Fråga

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

Datorarkitekturer med operativsystem ERIK LARSSON

Datorarkitekturer med operativsystem ERIK LARSSON

Exempeltentamen Datorteknik, EIT070,

Tentamen i Digitala system - EDI610 15hp varav denna tentamen 4,5hp

Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.

Tentamen. Datorteknik Y, TSEA28

Kontrollskrivning Mikrodatorteknik CDT S2-704

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

Tentamen den 9 januari 2018 Datorarkitekturer med operativsystem (EITF60)

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte" ARM-instruktioner", A4-format, 17 sidor. Maxpoäng: 60p

Datorteknik. Föreläsning 3. Assembler, stack och subrutiner, programmeringskonventionen. Institutionen för elektro- och informationsteknologi, LTH

Institutionen för elektro- och informationsteknologi, LTH

Datorsystemteknik för E/D

Närliggande allokering Datorteknik

F5: Högnivåprogrammering

F5: Högnivåprogrammering

CE_O3. Nios II. Stackhantering och förberedelse för lab nios2time

Digitala System: Datorteknik ERIK LARSSON

Lösningar till övning CE_O CE_O6. Parallell in/utmatning (I/O). Förberedelser till laboration nios2io.

Tentamen i EIT070 Datorteknik

Mål. Datorteknik. Innehåll. Innehåll (forts) Hur ser ett program ut? Hur skapas maskinkoden?

0.1. INTRODUKTION Instruktionens opcode decodas till en språknivå som är förstålig för ALUn.

Tentamen. Datorteknik Y, TSEA28

Tentamen den 14 januari 2015 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Programexempel för FLEX

Laboration 2 i Datorteknik- Assemblerprogrammering II

Pipelining i Intel Pentium II

En något mer detaljerad bild av en processor. De tre delarna i processorn är: Nere 3ll vänster finns e' antal register som används för a' lagra data.

En något mer detaljerad bild av en processor. De tre delarna i processorn är: Nere 3ll vänster finns e' antal register som används för a' lagra data.

CE_O1. Nios II. Enkla assembler-instruktioner.

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

Assemblerprogrammering, ARM-Cortex M4 del 3

4. Pipelining. 4. Pipelining

Minnet från processorns sida Datorteknik

Datorsystem. Exempeltentamen

Datorsystemteknik DVGA03 Föreläsning 8

Digitalteknik och Datorarkitektur

Datorteknik. Föreläsning 6. Processorns uppbyggnad, pipelining. Institutionen för elektro- och informationsteknologi, LTH. Mål

Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

IBM POWER4, den första flerkärniga processorn och dess pipelines.

LABORATION DATORTEKNIK D. Pipelining. Namn och personnummer. Version: (OS,OVA,AN)

TSEA28 Datorteknik Y (och U)

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Stack och subrutiner Programmeringskonventionen

LABORATION. Datorteknik Y

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

Föreläsningsanteckningar 5. Cacheminnen

Datorsystem. Tentamen

Tentamen i Digitala system - EITA15 15hp varav denna tentamen 4,5hp

Datorsystem 2 CPU. Förra gången: Datorns historia Denna gång: Byggstenar i en dators arkitektur. Visning av Akka (för de som är intresserade)

Pipelining i Intel 80486

Exempelsamling Assemblerprogrammering

Digital- och datorteknik

Föreläsningsanteckningar 4. Pipelining

CPU. Carry/Borrow IX. Programräknare

4. Maskinnära programmering i C. Förberedelser till hemlaboration 1.

Tentamen. Datorteknik Y, TSEA28

Tentamen den 17 mars 2016 Datorteknik, EIT070

Datorsystem. Tentamen

Grundläggande datavetenskap, 4p

Datorsystemteknik D. Lösningar till tentamen i kursen EDA330 14/1 2000

Hantering av hazards i pipelines

Datorteknik ERIK LARSSON

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Assemblerprogrammering - fördjupning

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

Hemlaboration Cache Cacheminnen

Datorteknik ERIK LARSSON

Vad bör göras? Steg 1. RISC => pipelining. Parallellism. Pipelining. Nya LDA 13. RISC(reduced instruction set computer) Öka klockfrekvensen

Laboration Datorteknik TSIU02 2. I/O-programmering

Lösningsförslag till Tenta i Mikrodator

Transkript:

Tentamen i IS1500/IS1200/2G1518 Datorteknik fredagen den 19 augusti 2011 kl 14.00 19.00 Examinator: Fredrik Lundevall (IS1500), Johan Wennlund (IS1200, 2G1518). Jourhavande lärare: Johan Wennlund. Tentamensuppgifterna behöver inte återlämnas när du lämnar in din skrivning. Hjälpmedel: Inga. Motivera alla svar. Tabeller och beräkningar ska finnas med i lösningarna, i läsbar form. Programkod ska ha tydliga kommentarer som hjälper läsaren att förstå koden. Om svaret på en fråga är "17" så måste du tala om varför. Ofullständigt motiverade svar ger inte full poäng! Miniräknare ej tillåten. Information om rättning och betyg Denna tentamen består av uppgift 1 till 6. Varje uppgift ger 0 10 poäng. Betygssättning IS1500 och IS1200 < 27 27 29,5 F FX (komplettering kan ge betyg E) Totalpoäng på tentamen 30 35,5 36 39,5 40 41,5 42 47,5 48 49,5 50 53,5 54 60 E D D C B B A 2G1518 (utgången) U U ( komplettering 3 3 4 4 4 5 5 kan ge betyg 3) Resultatet meddelas senast den 9 september 2011. Önskemål om komplettering ska ha nått examinator senast 23 september 2011. Kompletteringen är skriftlig, eller skriftlig + muntlig, beroende på examinators bedömning. Bra att veta: 2 16 = 65536, 2 14 = 16384, 2 12 = 4096, 2 10 = 1024, 2 8 = 256, 2 6 = 64, 2 4 = 16. IS1200/IS1500 2011-08-19 sida 1

Uppgift 1. Maskinaritmetik IEEE 754 binary32 är ett 32-bits flyttalsformat. Se figuren. bit 31 bit 23 bit 22 bit 0 Tecken (1 bit) 0 = positivt 1 = negativt Exponent (8 bitar) i excess-127-kod Mantissa (23 bitar av en 24-bits mantissa) Den mest signifikanta biten är alltid 1, och lagras inte. I excess-127-kod lagras exponenten 17 som 1001 0000 två (17+127), och så vidare. Mantissan har värden mellan 1 och 2. Därför är den mest signifikanta biten alltid 1, och behöver inte lagras. a) Flyttalet X lagras som 1 1000 0011 111 0000 0000 0000 0000 0000. Bit 31 är längst till vänster. Ange värdet av X i decimal form. b) Hur lagras talet Z = 4X i flyttalsformatet enligt ovan? c) Hur lagras talet Y = 75,25 i flyttalsformatet enligt ovan? d) Hur lagras de decimala talen +35 och 35 som 8-bitars heltal? 2-komplementsrepresentation används för negativa tal. e) Ange hur flyttalet från deluppgift a) lagras i formatet IEEE 754 binary64. Formatet beskrivs i figuren här nedanför. bit 63 bit 52 bit 51 bit 0 Tecken (1 bit) 0 = positivt 1 = negativt Exponent (11 bitar) i excess-1023-kod Mantissa (52 bitar av en 53-bits mantissa) Den mest signifikanta biten är alltid 1, och lagras inte. IS1200/IS1500 2011-08-19 sida 2

Uppgift 2. Assemblerprogrammering för Nios II I den här uppgiften ska du skriva assemblerprogram för Nios II. Din programkod ska ha tydliga kommentarer som hjälper läsaren att förstå koden. Programkod med onödiga instruktioner ger inte full poäng. Makrona PUSH och POP får användas. Förutsätt att de finns definierade. PUSHALL och POPALL finns inte definierade och får inte användas. De behövs inte här. Varje subrutin får ändra innehåll i register r2 r15. Behöver register r16 r23 användas så måste innehållet sparas och återställas. Vid returhoppet måste r16 r23 innehålla samma värden som vid anropet. Du ska förutsätta att en subrutin som anropas ändrar alla innehållen i r2 r15, även om du själv har skrivit en version av subrutinen som gör på något annat sätt. a) Skriv kod för en subrutin checkchar Subrutinen har 2 inparametrar: I register R4 finns en 32-bitars adress till första tecknet i en byte-sträng i minnet. De 8 minst signifikanta bitarna i register R5 innehåller ASCII-koden för ett tecken. Det sista elementet i byte-strängen har alltid värdet noll (nullterminated). I vissa fall finns bara ett element i vektorn, och i så fall har det elementet värdet noll. Subrutinen ska undersöka om det i strängen finns minst ett tecken med samma innehåll som i R5. Returparameter i register R2 ska i så fall vara 1, annars 0. (3 poäng) b) Skriv kod för en subrutin replacechar. Subrutinen har 3 inparametrar: I register R4 finns en 32-bitars adress till första tecknet i en byte-sträng i minnet. De 8 minst signifikanta bitarna i register R5 innehåller ASCII-koden för ett tecken. De 8 minst signifikanta bitarna i register R6 innehåller ASCII-koden för ett tecken. Det sista elementet i byte-strängen har alltid värdet noll (nullterminated). I vissa fall finns bara ett element i vektorn, och i så fall har det elementet värdet noll. Subrutinen ska byta ut varje förekomst av tecken enligt innehåll i R5 mot tecknet i R6. Returparameter i register R2 ska vara antal utbytta tecken. (3 poäng) c) Skriv kod för en subrutin Chifer Subrutinen har 1 inparameter: I register R4 finns en 32-bitars adress till första tecknet i en nullterminated byte-sträng Subrutinen ska byta ut alla siffror i strängen mot ASCII-koden för * ('*' = 0x2A) ASCII-koder för siffor är '0' till '9'. (0x30-0x39) Subrutinen Chifer ska anropa subrutinen replacechar för att utföra byte av koder i strängen. Returparameter i register R2 ska vara antal utbytta tecken. (4 poäng) IS1200/IS1500 2011-08-19 sida 3

Uppgift 3. In- och utmatning och avbrott I denna uppgift ska du skriva assemblerprogram för Nios2. Din programkod ska ha tydliga kommentarer som hjälper läsaren att förstå koden. Programkod med onödiga instruktioner ger inte full poäng. En subrutin får alltid ändra innehåll i register r2 r15. Använder subrutinen andra register så måste innehållen sparas och återställas, så att de är samma efter returhoppet som vid anropet. Förutsätt alltid att en subrutin som anropas ändrar alla innehållen i r2 r15, även om du själv har skrivit en version av subrutinen som gör på något annat sätt. Makrona PUSH och POP får användas. Förutsätt att de finns definierade. PUSHALL och POPALL får inte användas i deluppgifterna a och b (men däremot i c). En dator är försedd med två serieportar med symboliska adresser serie0 och serie1. Varje serieport har 3 stycken 32-bitars register: DataIn, DataOut och Status, som refereras med Memory-Mapped I/O, se figur. Serieport 1 har adresser serie1, serie1 + 4 och serie1 + 8. 32 bitar totalt serie0 serie0 + 4 serie0 + 8 Registren i serieport 0. DataIn DataUt Status bara 8 bitar används Transmitter Ready bit 1 (Output Buffer Empty) bit 0 Receiver Ready (Input Buffer Full) Status Status-registret i serieporten. bit 7, 6, 5, 4, 3, 2 behövs inte i denna uppgift I Status-registret är bit 0 (den minst signifikanta biten) ettställd när en ny byte finns att hämta i DataIn-registret (IBF, Input Buffer Full, även kallad Receiver-Ready). Hårdvaran återställer IBF till noll när DataIn-registret lästs av program. Status-registrets bit 1 (näst minst signifikant bit) är ettställd när sändaren är klar att sända en ny byte (OBE, Output Buffer Empty, även kallad Transmitter-Ready). Hårdvaran återställer OBE till noll när DataUt-registret skrivits av program. Serieportens register ska läsas och skrivas med instruktionerna ldwio och stwio. a) Blocking I/O. Skriv en subrutin SendChar som ska skriva data till DataUt-registret i en serieport. Vid anrop av rutinen innehåller register r4 adressen till den serieport som ska användas. Vid anrop av rutinen innehåller register r5 den byte som ska skrivas till serieporten. Skrivning ska göras först när OBE-biten är ettställd; om OBE är noll ska subrutinen vänta tills OBE-biten har ettställts av hårdvaran. (3 poäng) IS1200/IS1500 2011-08-19 sida 4

b) Non-blocking I/O. Skriv en subrutin TryReceiveChar som ska fungera på följande sätt. Vid anrop av rutinen innehåller register r4 adressen till den serieport som ska användas och register r5 innehåller adressen till den byte i minnet där ett eventuellt mottaget tecken ska skrivas. Om IBF-biten är nollställd ska värdet 1 returneras i r2. Om IBF-biten är ettställd ska data läsas från DataIn-registret och returneras i register r2, och dessutom skrivas till den byte i minnet vars adress finns i R5. (3 poäng) c) Avbrottsstyrd I/O. Skriv en avbrottsrutin SendByte. Avbrottsrutinen körs när serieporten serie0 kan sända en byte. Vid avbrott körs färdig kod (som Du inte ska skriva) som: 1. Kontrollerar att det var ett avbrott från serie0 på grund av tomt DataUt-register. 2. Subtraherar 4 från ea (Exception Return Address) i Nios II, så att returhoppet efter avbrottshanteringen ska gå till rätt plats. 3. Hoppar till SendByte med instruktionen br SendByte. Avbrottsrutinen SendByte ska genom att anropa TryReceiveChar undersöka om det finns något mottaget tecken att hämta i serieporten. I så fall ska detta tecken skrivas till serieporten, annars ska ett SYN-tecken skrivas till serieporten. ASCII-koden för SYN är 0x16. För att skriva till serieporten ska SendByte anropa SendChar. (4 poäng) PUSHALL och POPALL finns definierade enligt ovan och får användas i c). PUSHALL och POPALL får inte användas i a eller b). Nedan anges lämpligt skelett för kod.data tmp:.byte 0 # tom plats för en byte.text.align 2 SendByte:... IS1200/IS1500 2011-08-19 sida 5

Uppgift 4. Cacheminnen Här nedanför finns en del av ett assemblerprogram. I varje deluppgift är datacacheminnet alltid tomt när rad 1 körs. rad 1 movia r8, 0x803c00 # lägg adress i r8 (men läs inga data från minnet) rad 2 ldw r12,0(r8) # läs 4 bytes från adress 0x803c00 rad 3 ldw r13,56(r8) # läs 4 bytes från adress 0x803c38 rad 4 ldw r15,32(r8) # läs 4 bytes från adress 0x803c20 rad 5 ldw r15,128(r8) # läs 4 bytes från adress 0x803c80 rad 6 ldw r16,384(r8) # läs 4 bytes från adress 0x803d80 rad 7 stw r17,0(r8) # skriv 4 bytes till adress 0x803c00 rad 8 ldw r18,48(r8) # läs 4 bytes från adress 0x803c30 Kom ihåg att motivera alla svar. a) Förklara vad tidslokalitet innebär. Har läsning/skrivning av data mycket eller lite tidslokalitet när en dator kör assemblerkoden här ovanför? Förklara också vad rumslokalitet innebär. Har läsning/skrivning av data mycket eller lite rumslokalitet när en dator kör assemblerkoden här ovanför? b) För varje ldw och stw i assemblerkoden här ovanför, ange om den ger träff eller miss i datacacheminnet (D-cache). Storlek (cache size): 128 byte (32 ord). Blockstorlek (line size): 16 byte (4 ord). Associativitet (blocks in set): 1-vägs (direktmappat). c) Ändring av storlek (cache size), jämfört med deluppgift b. För varje ldw och stw i assemblerkoden här ovanför, ange om den ger träff eller miss i datacacheminnet (D-cache). Storlek (cache size): 256 byte (64 ord). Blockstorlek (line size): 16 byte (4 ord). Associativitet (blocks in set): 1-vägs (direktmappat). d) Ändring av blockstorlek (block size), jämfört med deluppgift b. För varje ldw och stw i assemblerkoden här ovanför, ange om den ger träff eller miss i datacacheminnet (D-cache). Storlek (cache size): 128 byte (32 ord). Blockstorlek (line size): 64 byte (16 ord). Associativitet (blocks in set): 1-vägs (direktmappat). e) Ändring av associativitet (blocks in set) och storlek (cache size), jämfört med deluppgift b. För varje ldw och stw i assemblerkoden här ovanför, ange om den ger träff eller miss i datacacheminnet (D-cache). Storlek (cache size): 384 byte (96 ord). Blockstorlek (line size): 16 byte (4 ord). Associativitet (blocks in set): 3-vägs associativt. IS1200/IS1500 2011-08-19 sida 6

Uppgift 5. Processorkonstruktion Nios II gör klart varje instruktion helt innan nästa instruktion, så att inga pipeline-effekter märks för programmeraren. Här ska vi studera vad som händer i andra processorer. Kom ihåg att motivera alla svar. Datorn "Jimmy" har följande femstegspipeline. FI (Fetch Instruction) FO (Fetch Operand from register) ALU (Arithmetic/Logic Unit) MEM (Memory) WB (Write Back to register) Instruktionen närmast efter en hoppinstruktion utförs inte om hoppet tas (no delayed branch). Datorn "Jimmy" har naturligtvis data-forwarding. Här nedanför finns assemblerkod skriven för datorn "Jimmy". a) Datorn "Kalle" har femstegspipeline precis som "Jimmy", men ingen data-forwarding. Utgå från programkoden nedan och lägg till NOP-instruktioner så att "Kalle" kan köra den med korrekt resultat. Motivera tydligt. Mellan 2 beroende instruktioner behövs 2 andra, oberoende instruktioner. b) Datorn "Pelle" har femstegspipeline och data-forwarding precis som "Jimmy". Men "Pelle" har dessutom delayed branch med 1 delay-slot. Utgå från programkoden nedan och lägg till NOP-instruktioner så att "Pelle" kan köra den med korrekt resultat. Några av NOP-instruktionerna kanske kan tas bort. Motivera för varje NOP om den kan tas bort eller inte. c) Datorn "Lisa" har fyrstegspipeline, där ALU- och MEM-stegen har ersatts av ett gemensamt EXE-steg (EXEcute). I EXE-steget kan antingen en ALU-beräkning eller en MEMory-referens göras. "Lisa" har data-forwarding, och har ingen delayed branch. Utgå från programkoden nedan och ändra den så att "Lisa" kan köra den med korrekt resultat. Om du behöver ett ledigt register, använd r11. Det är tillåtet att byta plats på instruktioner och infoga NOP:ar. (3 poäng) d) Hårdvaran i "Jimmy" är konstruerad så att varje hoppinstruktion tar 2 klockcykler om hoppet tas (programräknaren ändras). Om hoppet inte tas (programkörningen fortsätter med nästa instruktion i adressordning) så tar hoppinstruktionen bara 1 klockcykel. Övriga instruktioner tar alltid bara 1 klockcykel. Beräkna genomsnittligt CPI (Clock cycles Per Instruction) för subrutinen CHG i nedanstående assemblerkod. Du ska ange exakt antal exekverade instruktioner och klockcykler. För din beräkning ska du anta att instruktionen vid läget BEE exekveras 5 gånger. (3 poäng) rad 1 CHG: movi r8, 0 # nollställ räknare rad 2 BEE: ldbu r9, VEK(r4) # läs från minnet rad 3 beq r9, r0, NADA # hoppa om noll rad 4 addi r8, r8, 1 # uppdatera räknare rad 5 andi r9, r9, 0xf # maska bort rad 6 stb r9, VEK(r4) # skriv till minnet rad 7 addi r4, r4, 1 # uppdatera pekare rad 8 br BEE # snurra på vetja rad 9 NADA: mov r2, r8 # låt räknare vara returvärde rad 10 ret # returhopp rad 11 FUN: movi r2,163 # tillhör annan subrutin FUN IS1200/IS1500 2011-08-19 sida 7

Uppgift 6. Trådar och synkronisering En dator har flera olika trådar, och byter tråd med jämna tids-intervall. Tiden mellan två trådbyten kallas time-slice. Efter trådbyte erbjuds den nya tråden alltid en hel time-slice. Anrop av oslab_yield() medför omedelbart trådbyte. Två trådar P1 och P2 beräknar heltal. Varje gång ett heltal är beräknat så anropas funktionen WriteBuf som skriver talet till en Fifo-kö. Två consumer-trådar C3 och C4 hämtar heltal, ett efter ett, från Fifo-kön. Consumer-trådarna anropar funktionen ReadBuf för hämtningen. Varje heltal konsumeras innan nästa tal hämtas. P1 behöver cirka 1/5 time-slice för att beräkna ett heltal, och P2 behöver cirka 1/10 time-slice för att beräkna ett heltal. C3 behöver cirka 1/20 time-slice för att konsumera ett heltal. Samma sak gäller för C4. Det finns 10 platser i FIFO-kön. FIFO-kön är alltid tom när körningen börjar. Tiden för trådbyte kan försummas. Bortse från eventuell idle-tråd och trådbyten till idle. void WriteBuf( int tal) { Wait( &nrempty ); Wait( &wrmutex ); putdata( tal ); Signal ( &wrmutex); Signal ( &nrfull); } int ReadBuf() { int tmp; Wait( &nrfull ); Wait( &rdmutex ); tmp = getdata(); Signal( &rdmutex ); Signal( &nrempty); return( tmp ); } Funktionerna putdata och getdata går väldigt fort att köra. Variablerna nrempty, wrmutex, nrfull och wrmutex är semafor-variabler. Funktionerna Signal och Wait finns på nästa sida. Om trådarna startas i ordningen P1 P2 C3 C4, så blir körningen som i följande diagram. Time-slice Time-slice Time-slice Time-slice nr 1 Time-slice nr 3 Time-slice nr 5 Time-slice nr 7 Time-slice nr 2 nr 4 nr 6 nr 8 P1... P2 C3 C4... trådbyten a) Hur många heltal från P1 har konsumerats efter 8 trådbyten, och hur många från P2? Motivera tydligt. b) Anta att rad 7 i koden för Wait ändras, så att anrop görs till oslab_yield. Då tar det kortare tid totalt sett innan 8 trådbyten har gjorts. Beräkna hur lång tid körningen tar nu, med anrop till oslab_yield i Wait. Ange tiden i procent av körtiden från deluppgift a. Motivera tydligt. c) På nästa sida finns ett felaktigt programförslag för funktionen Signal. Rätta felet, och motivera tydligt varför det var fel. tid IS1200/IS1500 2011-08-19 sida 8

rad 1 void Signal( int *sem ) rad 2 { rad 1 void Wait( int *sem ) rad 2 { rad 3 *sem = *sem + 1; rad 3 oslab_begin_critical_region(); rad 4 } rad 4 while ( *sem <= 0 ) rad 5 rad 5 { rad 6 oslab_end_critical_region(); rad 7 /* Här finns en tom rad */ rad 8 oslab_begin_critical_region(); rad 9 } rad 10 *sem = *sem 1; rad 11 oslab_end_critical_region(); rad 12 } Här nedanför finns en förenklad version av den kod som körs vid trådbyte. Registernamnet ea är ett annat namn för register r29, där hårdvaran sparar återhoppsadressen vid avbrott. På samma sätt är registernamnet sp ett annat namn för stackpekaren, register r27. a) Beskriv vad som ska utföras av funktionen oslab_internal_threadswitch() som anropas här nedanför. Motivera tydligt! b) Förklara kort vad register ea innehåller vid lägena L1 och L2 i programkoden här nedanför. Motivera tydligt! rad 1 oslab_trap_handler: rad 2 subi sp,sp,108 rad 3 stw r1, 4(sp) rad 4 stw r2, 8(sp) rad 5 stw r3,12(sp) rad 6 stw r4,16(sp) rad 7 stw r5,20(sp) rad 8 stw r6,24(sp) rad 9 stw r7,28(sp) rad 10 stw r8,32(sp) rad 11 stw r9,36(sp) rad 12 stw r10,40(sp) rad 13 stw r11,44(sp) rad 14 stw r12,48(sp) rad 15 stw r13,52(sp) rad 16 stw r14,56(sp) rad 17 stw r15,60(sp) rad 18 stw r16,64(sp) rad 19 stw r17,68(sp) rad 20 stw r18,72(sp) rad 21 stw r19,76(sp) rad 22 stw r20,80(sp) rad 23 stw r21,84(sp) rad 24 stw r22,88(sp) rad 25 stw r23,92(sp) rad 26 stw r26,96(sp) rad 27 stw r28,100(sp) rad 28 stw r31,104(sp) rad 29 stw ea,0(sp) # Special case rad 30 L1: rad 31 mov r4,sp rad 32 call oslab_internal_threadswitch rad 33 mov sp,r2 rad 34 # Restore registers rad 35 ldw r1, 4(sp) rad 36 ldw r2, 8(sp) rad 37 ldw r3,12(sp) rad 38 ldw r4,16(sp) rad 39 ldw r5,20(sp) rad 40 ldw r6,24(sp) rad 41 ldw r7,28(sp) rad 42 ldw r8,32(sp) rad 43 ldw r9,36(sp) rad 44 ldw r10,40(sp) rad 45 ldw r11,44(sp) rad 46 ldw r12,48(sp) rad 47 ldw r13,52(sp) rad 48 ldw r14,56(sp) rad 49 ldw r15,60(sp) rad 50 ldw r16,64(sp) rad 51 ldw r17,68(sp) rad 52 ldw r18,72(sp) rad 53 ldw r19,76(sp) rad 54 ldw r20,80(sp) rad 55 ldw r21,84(sp) rad 56 ldw r22,88(sp) rad 57 ldw r23,92(sp) rad 58 ldw r26,96(sp) rad 59 ldw r28,100(sp) rad 60 ldw r31,104(sp) rad 61 ldw ea,0(sp) # Special case rad 62 addi sp,sp,108 rad 63 L2: rad 64 eret # Return from exception IS1200/IS1500 2011-08-19 sida 9

Utdrag ur Nios II Processor Reference Handbook IS1200/IS1500 2011-08-19 sida 10

Utdrag ur Nios II Processor Reference Handbook IS1200/IS1500 2011-08-19 sida 11

Utdrag ur Nios II Processor Reference Handbook IS1200/IS1500 2011-08-19 sida 12

Utdrag ur Nios II Processor Reference Handbook IS1200/IS1500 2011-08-19 sida 13

Utdrag ur Nios II Processor Reference Handbook IS1200/IS1500 2011-08-19 sida 14

Utdrag ur Nios II Processor Reference Handbook IS1200/IS1500 2011-08-19 sida 15

Utdrag ur Nios II Processor Reference Handbook IS1200/IS1500 2011-08-19 sida 16

Utdrag ur Nios II Processor Reference Handbook IS1200/IS1500 2011-08-19 sida 17