Transcript
Page 1: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

1

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik

Föreläsning 4

Polling och avbrott

Institutionen för elektro- och informationsteknologi, LTH

Mål

• Att känna till begreppet polling (cyklisk avfrågning) och hur det

implementeras

• Att förstå varför avbrottstyrd exekvering är överlägset polling

• Att veta vilken information som krävs för att kunna implementera

avbrott

• Att veta hur avbrottsrutiner programmeras i MIPS

Page 2: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

2

Institutionen för elektro- och informationsteknologi, LTH

Innehåll

• Exempel på polling och avbrott ur ”verkliga livet”

• Hur implementeras polling som flödesschema?

• Vad kan avbrott användas till?

• Vad krävs för att implementera avbrott?

• Vilka strukturer finns i MIPS för avbrott?

• Hur skriver vi en avbrottsrutin i MIPS-systemet?

Institutionen för elektro- och informationsteknologi, LTH

Introduktion

Ibland måste datorsystemet utföra operationer som beror på saker

som händer i omgivningen.

Exempel:

• Läsning av data från yttre enheter

• Datainsamling med jämna tidsintervall

• Oväntade situationer som måste tas om hand

Page 3: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

3

Institutionen för elektro- och informationsteknologi, LTH

Introduktion (forts)

Det finns två fundamentalt olika tekniker för att respondera på

omgivningen:

- Polling (cyklisk avfrågning)

- Avbrott

Båda två har sitt berättigande.

Ett exempel, taget ur en helt annan situation än datorvärlden:

Institutionen för elektro- och informationsteknologi, LTH

Verklig situation - pappaledighet

Det var en gång en man som

var pappaledig. Hans

uppgifter var då att:

• Passa och leka med barnet

• Laga mat

• Städa

• Diska

• etc,etc,...

Page 4: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

4

Institutionen för elektro- och informationsteknologi, LTH

Pappaledig - Strategi 1

De första veckorna använde pappan följande strategi:

Institutionen för elektro- och informationsteknologi, LTH

Strategi 1

Nej

Lek med barnet

Vill barnet sova?

Lägg barnet

Laga mat, städa, diska

Kolla om barnet sover

Har det vaknat?

Barnet kräver uppmärksamhet

Nej

Ja

Ja

Page 5: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

5

Institutionen för elektro- och informationsteknologi, LTH

Strategi 1

Problem:

• Mycket tid går åt till att leka med barnet

• Barnet måste somna först innan mat, städning etc kan göras

• Resultat i verkligheten: rörigt, odiskat.

Institutionen för elektro- och informationsteknologi, LTH

Strategi 2

• Situationen blev snart ohållbar

• Strategi 2 utvecklades:

– Pappan håller på med husliga sysslor

– När barnet kallar på uppmärksamhet, släpper pappan det han har för händer

och ser till barnet

– När barnet lugnat sig och leker självt, återupptar han det han höll på med

Page 6: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

6

Institutionen för elektro- och informationsteknologi, LTH

Strategi 2

Pappans verksamhet Barnets rop på pappa

Gör så barnet kan leka

Skala potatis

Stek pannbiff

Häll av potatisvatten*

Duka

Trösta

Trösta

Trösta

Kan ej nu!

Institutionen för elektro- och informationsteknologi, LTH

Strategi 2

• OBS att pappan inte kan gå ifrån till barnet när det heta

potatisvattnet hälls av!

• Strategi 2 visade sig vara mycket effektivare än strategi 1.

• Barnet fick uppmärksamhet så snart det begärde det

• Sedan återupptogs bakgrundssysslorna

Page 7: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

7

Institutionen för elektro- och informationsteknologi, LTH

Pappaledig (forts)

• Ett par år senare upprepades det hela, nu med 2 barn

• Strategi 1 hade varit omöjlig

• I strategi 2 måste prioriteter införas, tex:

– Det mindre barnet måste ses till före det stora barnet, normalt sett, om båda

gråter.

Institutionen för elektro- och informationsteknologi, LTH

Strategi 1

• Ett exempel på “polling”

• Vi väntar på att en händelse ska inträffa (här: barnet somnar) innan

vi går vidare

Page 8: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

8

Institutionen för elektro- och informationsteknologi, LTH

Strategi 2

• Exempel på ett system med avbrottshantering

• Yttre händelser (gråtande barn) avbryter den normala exekveringen

(matlagning) och något förutbestämt, en avbrottsrutin, (tröstning)

utförs.

Institutionen för elektro- och informationsteknologi, LTH

Strategi 1 kontra Strategi 2

• Allvarlig brist i strategi 1 - tar för mycket tid

• Strategi 2 är mer effektivt - vi kan ägna oss åt det viktiga när det

verkligen behövs.

Page 9: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

9

Institutionen för elektro- och informationsteknologi, LTH

Strategi 2

Vissa problem kan uppstå, t ex:

• Ibland går det bra att bli avbruten, men inte vid vissa tillfällen

• Vi måste veta vilket barn som påkallar uppmärksamhet

• Kallar båda barnen samtidigt, måste vi veta i vilken ordning vi

ska hjälpa dem

• Vi måste veta var vi blev avbrutna, så att vi kan fortsätta

Institutionen för elektro- och informationsteknologi, LTH

Strategierna i ett datorsystem

• Strategi 1: Polling. Ex: tangentbord med statusport och dataport.

Läs statusport

Läs dataport

Returnera tecken

S-port=1?Ja

Nej

Page 10: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

10

Institutionen för elektro- och informationsteknologi, LTH

Strategi 2: Avbrott

För att kunna använda oss av avbrott måste vi veta

följande:

• När är det tillåtet att bli avbruten och av vad?

• Vad har orsakat avbrottet?

• Vad gjorde vi när vi blev avbrutna?

• Vilken prioritet har avbrotten relativt varandra?

I MIPS finns specialregister för detta

Institutionen för elektro- och informationsteknologi, LTH

Hårdvarustöd för avbrott

– Status – styr funktionen hos avbrottshanteringen

– Cause – talar om för programmet vilken typ av avbrott som inträffat

– EPC – Exception Program Counter, återhoppsadress

Page 11: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

11

Institutionen för elektro- och informationsteknologi, LTH

Avbrott i MIPS

– MIPS understödjer

• elva maskinvarudefinierade avbrott

• åtta användardefinierade avbrott

– En del avbrott är interna (exceptions) andra externa (interrupts)

– Exempel på maskinvarudefinierade avbrott:

• Reset – omstart av datorn. Processorn startar på en fördefinierad adress. Externt.

• Aritmetiskt fel – internt avbrott

• Systemanrop – exekvering av instruktionen syscall. Internt.

• Odefinierad instruktion – Internt avbrott.

Institutionen för elektro- och informationsteknologi, LTH

Användardefinierade avbrott

– Det finns sex externa och två interna användardefinierade avbrott

– Externa avbrott:

• Avbrottsingångar: int0, int1, … int5

– Interna avbrott:

• Två bitar i ett register som programmeraren kan använda för att generera ett

avbrott

– Varje användardefinierat avbrott kan stängas av individuellt

Page 12: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

12

Institutionen för elektro- och informationsteknologi, LTH

Vad händer vid ett avbrott?

• 1. Programmet avbryts mitt i eller efter den instruktion som för närvarande

exekverar

• 2. Om avbrottet inte får betjänas ska exekveringen fortsätta (gäller

användardefinierade avbrott)

• 3. Stäng av avbrott och sätt processorn i privilegierat systemtillstånd

• 4. Cause-registret uppdateras med information om avbrottet

• 5. Lägg adressen till nästa instruktion i det avbrutna programmet i EPC-

registret

• 6. Börja exekvera avbrottsrutin på adress 0x80000080

Institutionen för elektro- och informationsteknologi, LTH

Hur använder man avbrott?

– Koppla en enhet till någon av de sex avbrottsingångarna (t.ex en knapp, eller

en klocksignal för tidstillämpningar)

– Skriv en subrutin som ska köras när det blir avbrott

• lägg den på adress 0x80000080 i minnet

• använd EPC som återhoppsadress

• Tänk på att spara undan register!

– Initiera avbrottet i huvudprogrammet med hjälp av statusregistret (tillåt detta

avbrott)

– Starta programmet

– När du t.ex. trycker på knappen körs subrutinen

Page 13: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

13

Institutionen för elektro- och informationsteknologi, LTH

Cause-registret

– IP [5..0] – Interrupt pending. En bit för vardera int0, int1, … , int5

– SW [1..0] – Software interrupt pending. Två bitar.

– ExcCode – En kod som talar om vilken typ av avbrott som är aktuell. T.ex. 0

vid anv.def. avbrott.

– CE – Co-processor error

BD 0 CE 0 IP[5..0] SW 0 ExcCode 0

Institutionen för elektro- och informationsteknologi, LTH

Status-registret

– IE – Interrupt enable (current/previous/old)

– KU – Kernel/User mode (current/previous/old)

– IntMask [7..0] – individuell styrning av användardefinierade avbrott

– CU [3..0] – Co-processor nr 0, 1, 2, 3 användbar?

CU 0 BEV div IntMask 0 Kuo IEo KUp Iep Kuc IEc

Page 14: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

14

Institutionen för elektro- och informationsteknologi, LTH

Statusregistret

• När ett avbrott inträffar och accepteras sker följande:

• Ieo <- Iep, KUo <- Kup

• Iep <- Iec, Kup<- KUc

• Iec <- 0 (Hindra anv. def. avbrott), Kuc <- 0 (Priv. mode)

• Det gamla tillståndet sparas alltså

Institutionen för elektro- och informationsteknologi, LTH

EPC-registret

– När ett avbrott sker sparar processorn adressen på den instruktion som ska

exekveras efter avbrottet

– Vissa avbrott kräver att instruktionen ska exekveras om och då är EPC

adressen till den instruktionen

EPC

Page 15: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

15

Institutionen för elektro- och informationsteknologi, LTH

Läsning och skrivning

– Status, Cause och EPC kan läsas med:

mfc0 t0,C0_STATUS

mfc0 t1,C0_CAUSE

mfc0 t3,C0_EPC

OBS! Det tar en instruktionscykel innan värdet finns

tillgängligt

– Status, Cause och EPC kan skrivas med:

mtc0 t0,C0_STATUS

mtc0 t1,C0_CAUSE

mtc0 t3,C0_EPC

Institutionen för elektro- och informationsteknologi, LTH

Programmering av avbrott

• int_routine:

• subu sp,sp,X # Allokera plats på stacken

• # spara register på stacken

• mfc0 k0,C0_CAUSE # Läs Cause

• # Kolla vilket avbrott

• # Hoppa till rätt rutin

• # Återställ register

• addu sp,sp,X # återställ stack

• mfc0 k0,C0_EPC

• .set noreorder

• jr k0

• rfe # återställ statusregistret

• # rfe i hoppluckan efter jr

• .set reorder

Page 16: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

16

Institutionen för elektro- och informationsteknologi, LTH

Initiering av avbrott

– Kopiera avbrottsrutinen till adress 0x80000080

– Sätt ”Interrupt mask” i statusregistret som motsvarar de avbrott som ska

användas

– Sätt Interrupt enable (IEc) i statusregistret till 1

Institutionen för elektro- och informationsteknologi, LTH

Initiering av avbrott

• .set noreorder

int_stub:

j int_routine

nop

.set reorder

– Denna lilla rutin kopieras till 0x80000080

– Den enda funktionen är att anropa den riktiga avbrottsrutinen (int_routine)

Page 17: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

17

Institutionen för elektro- och informationsteknologi, LTH

Kopiering av rutinen till rätt plats

• start:

• la t0,int_stub # int_stub’s adress

• la t1,0x80000080 # avbrottsadress

• lw t2,0(t0) # Läs instr 1

• sw t2,0(t1) # Skriv instr 1

• lw t2,4(t0) # Läs instr 2

• sw t2,4(t1) # Skriv instr 2

Institutionen för elektro- och informationsteknologi, LTH

Initiera statusregistret

• mfc0 k0,C0_SR # hämta statusregister

• ori k0,k0,1 # sätt IEc-biten

• # sätt int3 och int4-bitarna

• ori k0,k0,EXT_INT3 | EXT_INT4

• mtc0 k0,C0_SR # uppdatera statusreg

k0 och k1 får användas fritt i avbr-rutin.

Page 18: Datorteknik...1 Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Institutionen för elektro- och informationsteknologi, LTH

18

Institutionen för elektro- och informationsteknologi, LTH

Sammanfattning

• Vi har sett två strategier för hantering av yttre händelser, polling

och avbrott

• Vi vet vad man måste känna till för att kunna implementera

avbrottshantering

• Vi har sett hur avbrottsmekanismen implementeras i MIPS

• Vi har sett tre nya register, EPC, Status och Cause

• Vi kan initiera avbrottshantering i MIPS-assembler


Top Related