datorteknik...1 institutionen för elektro- och informationsteknologi, lth datorteknik föreläsning...
Post on 01-Mar-2021
14 Views
Preview:
TRANSCRIPT
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
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
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,...
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
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
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
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
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.
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
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
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
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
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
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
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
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)
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.
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