1/1/ / faculty of Computer Science eindhoven university of technology 5B040:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 7(1): Flow of Control
1/1/ / faculty of Computer Science eindhoven university of technology Sequentiele programma’s en sprongen ‘Gewone’ commando’s verhogen PC met 1. PC is dan een lineare functie in de tijd. Met sprongen wordt deze lineariteit verbroken. Program counter Time Program counter Time Sprongen
1/1/ / faculty of Computer Science eindhoven university of technology Procedure BProcedure A Subroutines: Bestaan uit een aanroep (call) en een terugkeer (return) Slaan terugkeeradres op in de stack (voor recursie) callreturn
1/1/ / faculty of Computer Science eindhoven university of technology Voorbeeld met recursie: n! met recursieve procedure: procedure(var n:integer); var h:integer; begin if (n 1) then begin h:=n; n:=n-1; fac(n); n:=h*n; end end;
1/1/ / faculty of Computer Science eindhoven university of technology In assembler: main: mult: CJNE A,#01,mult SJMP exit exit: PUSH ACC DEC ACC ACALL main POP B MUL A,B RET Stack ?? 3 adr 2 CJNE A,#01,mult SJMP exit PUSH ACC DEC ACC ACALL main CJNE A,#01,mult PUSH ACC DEC ACC ACALL main CJNE A,#01,mult RET adr:POP B MUL A,B RET POP B MUL A,B RET
1/1/ / faculty of Computer Science eindhoven university of technology Coroutines: Gaat om twee procedures die afwisselend gedeeltelijk worden uitgevoerd. Coroutines roepen elkaar expliciet aan. Geen call en return, maar resume opdracht. Kunnen worden gebruikt voor simulatie van multi-processing.
1/1/ / faculty of Computer Science eindhoven university of technology Coroutines: voorbeeld coroutine a coroutine b resume b resume a stack: b1 a1 a2 a3 a4 b2 b3 b1a2a2 b2a3b3a4 b4 Stackgrootte blijft constant! (Exchange!)
1/1/ / faculty of Computer Science eindhoven university of technology Coroutines:nadelen voor multitasking Maximaal 2 routines ‘tegelijk’ Programma moet zelf ‘exchange’ uitvoeren Geen ‘echte’ multitasking, omdat plaatsen onderbrekingen in het programma bekend zijn (nl bij de ‘exchange’ commando’s)
1/1/ / faculty of Computer Science eindhoven university of technology Foutje; bedankt: TRAPS! Traps worden veroorzaakt door uitzonderlijke gevallen in het programma (overflow etc.) Worden gegenereerd door het programma zelf. Roepen automatisch en onmiddelijk een speciale procedure aan (trap-handler). Vervangen veel expliciete controles in programma’s. Programma’s daardoor sneller (en minder fautgevoelig)
1/1/ / faculty of Computer Science eindhoven university of technology Effe storen: INTERRUPTS! Interrupts onderbreken het lopende programma van buitenaf. Zijn qua timing onvoorspelbaar. Voorkomen veel wachttijd van de CPU. Kunnen veel oorzaken hebben (I/O, timer-overflow, binnenkomend gesprek bij fax) Roepen een interrupt-handler aan.
1/1/ / faculty of Computer Science eindhoven university of technology Hardware: interrupt ontvangen Toestel geeft interrupt signaal aan CPU CPU handelt huidige commando af en geeft bevestiging aan het toestel Toestel geeft extra informatie (bv. IRQ-nummer, sprongadres of tabel-index) {CPU haalt informatie op en bewaart die tijdelijk} CPU zet PC (en vaak PSW) op de stack CPU roept interrupt handler aan (welke dat is, is afhankelijk van de extra informatie)
1/1/ / faculty of Computer Science eindhoven university of technology Hardware: interrupt (voorbeeld) Vector PC PSW Hulp SP Tabel Stack data adres IRQ ACK I/OCPU Memory
1/1/ / faculty of Computer Science eindhoven university of technology Software: interrupt afhandelen Bewaar alle registers. Zoek uit welk toestel de interrupt veroorzaakte Haal overige gegevens op (status etc). Handel de interrupt af (bijv. I/O error, volgende programma starten etc.) Geef aan toestel door dat interrupt is afgehandeld Herstel alle registers Geef Return From Interrupt commando
1/1/ / faculty of Computer Science eindhoven university of technology Interrupts: opmerkingen Interrupt handlers moeten transparant zijn. Als interrupts te lang duren (langer dan de periodetijd van de interrupt) krijgt het hoofdprogramma geen kans om verder te draaien. Voor tijdkritische interrupts (bijv. tijdens het branden van een CD) worden high-priority interrupts gebruikt. Zijn veel beter voor multitasking dan coroutines.