140 likes | 239 Views
5B040: Computerarchitectuur 2M200: Inleiding Computersystemen. Sessie 7(1): Flow of Control. Sprongen. Program counter. Program counter. Time. Time. Sequentiele programma’s en sprongen. ‘Gewone’ commando’s verhogen PC met 1. PC is dan een lineare functie in de tijd.
E N D
5B040: Computerarchitectuur2M200: Inleiding Computersystemen Sessie 7(1):Flow of Control
Sprongen Program counter Program counter Time Time 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.
Procedure A Procedure B call return Subroutines: • Bestaan uit een aanroep (call) en een terugkeer (return) • Slaan terugkeeradres op in de stack (voor recursie)
Voorbeeld met recursie: n! met recursieve procedure: procedure(var n:integer);var h:integer;begin if (n1) then begin h:=n; n:=n-1; fac(n); n:=h*n; endend;
In assembler: Stack main: CJNE A,#01,mult CJNE A,#01,mult CJNE A,#01,mult CJNE A,#01,mult SJMP exit SJMP exit mult: PUSH ACC PUSH ACC PUSH ACC adr DEC ACC DEC ACC DEC ACC 2 ACALL main ACALL main ACALL main adr: POP B POP B POP B adr MUL A,B MUL A,B MUL A,B 3 exit: RET RET RET RET ??
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.
Stackgrootte blijft constant! (Exchange!) resume b resume a Coroutines: voorbeeld coroutine a coroutine b stack: a1 b1 a4 b3 a3 b1 a2 b4 b2 a2 b2 a3 b3 a4 b4
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)
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)
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.
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)
Hardware: interrupt (voorbeeld) I/O CPU Memory adres ACK Vector SP Tabel IRQ PSW PC Stack Hulp data
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
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.