Föreläsning 9: Implementering av underprogram

10
2002-11-29 F. Drewes, Inst. f. datavetenskap 1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd med dynamiska länkar Implementera statisk räckvidd med statiska länkar displaymetoden

description

Föreläsning 9: Implementering av underprogram. Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd med dynamiska länkar Implementera statisk räckvidd med statiska länkar displaymetoden. Aktiveringsposter. =underprogram. Data som bruka finnas i aktiveringsposter är bl.a. - PowerPoint PPT Presentation

Transcript of Föreläsning 9: Implementering av underprogram

Page 1: Föreläsning 9: Implementering av underprogram

2002-11-29 F. Drewes, Inst. f. datavetenskap

1

Föreläsning 9:Implementering av underprogram

• Aktiveringsposter• Exekveringsstacken• Implementera dynamisk räckvidd med dynamiska länkar• Implementera statisk räckvidd med

statiska länkar displaymetoden

Page 2: Föreläsning 9: Implementering av underprogram

2002-11-29 F. Drewes, Inst. f. datavetenskap

2

Aktiveringsposter

Data som bruka finnas i aktiveringsposter är bl.a.• minnesutrymme till lokala variabler och parametrar• statiska och/eller dynamiska länkar till andra aktiverings-

poster• återhoppsadressen (på vilket ställe i programmet

fortsätter exekveringen när UP:s exekvering avslutats?)

Data som behövs för att sköta anrop av UP lagras i aktiveringsposter (eng. activation record [instance]).

=underprogram

Page 3: Föreläsning 9: Implementering av underprogram

2002-11-29 F. Drewes, Inst. f. datavetenskap

3

Exekveringsstacken

• När ett UP anropas placeras motsvarande aktiveringspost på stacken.

• När exekveringen avslutas tas aktiveringsposten bort igen.

• Den dynamiska länken pekar till föregående aktiverings-post (som tillhör det anropande UP:et)

• Den statiska länken pekar till närmaste aktiveringsposten som motsvarar den statiska föräldern

På exekveringsstacken lagras aktiveringsposter som representerar de nästade anropen av aktiva UP.

Page 4: Föreläsning 9: Implementering av underprogram

2002-11-29 F. Drewes, Inst. f. datavetenskap

4

Anrop och återhopp

AP subn

AP sub1

AP main

AP main

AP sub1

AP subn

subn+1 terminerar

parametrar

statisk länk

dynamisk länk

återhoppsadress

lokala variabler

AP main

AP sub1

AP subn

subn anropar subn+1

AP subn+1

Page 5: Föreläsning 9: Implementering av underprogram

2002-11-29 F. Drewes, Inst. f. datavetenskap

5

Dynamiska länkar

• Den dynamiska länken visar var den dynamiska förälderns (föregående) aktiveringspost ligger

• Den behövs bl.a. för att kunna ta bort den översta aktive-ringsposten vid återhopp (eftersom storleken kan variera)

• Kedjan som utgörs av alla dynamiska länkar och som representerar anropssekvensen kallas dynamisk kedja (eng. dynamic chain) eller anropskedja (eng. call chain)

Page 6: Föreläsning 9: Implementering av underprogram

2002-11-29 F. Drewes, Inst. f. datavetenskap

6

Implementera dynamisk räckvidd

• Djup access följ anropskedjan tills en aktiveringspost har hittats som

innehåller en variabel med rätt namn lätt att implementera, snabba anrop men ineffektiv access

• Grund access (två varianter)a) skapa en separat stack för varje variabelnamn (inga

variabler lagras på exekveringsstacken)b) skapa en separat tabell för variablerna ("globala" värden

av lokala variabler lagras i aktiveringsposten så länge ett UP är aktivt)

konstant accesstid men mindre effektiva anrop

Hur hittas en icke-lokal variabel vid dynamisk räckvidd?

Page 7: Föreläsning 9: Implementering av underprogram

2002-11-29 F. Drewes, Inst. f. datavetenskap

7

Statiska länkar

• Den statiska länken pekar på aktiveringsposten som motsvarar det senaste anropet av den statiska föräldern

• Statiska länkar behövs för att implementera statisk räckvidd

• Två möjligheter: använd den statiska kedjan på samma sätt på vilket den

dynamiska kedjan används vid dynamisk räckvidd spara de åtkomliga statiska länkarna i en separat tabell

("display"); länkarna som inte är åtkomliga sparas temporärt i aktiveringsposterna

Page 8: Föreläsning 9: Implementering av underprogram

2002-11-29 F. Drewes, Inst. f. datavetenskap

8

Att underhålla en statisk kedja

Antag att sub deklareras i subdecl och anropas i subanr.

Genom att börja med den översta aktiveringsposten och följa den statiska kedjan sd(subanr) – sd(subdecl) ("nesting

depth") steg hittas aktiveringsposten som den nya statiska länken måste peka på.

Icke-lokala variabler hittas på samma sätt.

snabb access om d inte blir stort

sd(id)=0 om id är huvudprogrammet sd(id)=sd(sub)+1 om id deklareras i UP sub

Det viktigaste värdet är det statiska djupet sd(id) av en identifierare id

Page 9: Föreläsning 9: Implementering av underprogram

2002-11-29 F. Drewes, Inst. f. datavetenskap

9

Att underhålla en display

Displaymetoden är ett alternativ till den statiska kedjan• displayen är ett fält bestående av statiska länkar disp[0],

…,disp[D] där D är det maximala statiska djupet• disp[d] är länken till aktiveringsposten som motsvarar det

senaste anropet av ett UP sub där sd(sub)=d• Aktiveringsposten som innehåller variabeln x nås mha

länken disp[sd(subdecl)] om x är deklarerad i subdecl

När sub anropas placeras länken till dess aktiveringspost i disp[sd(sub)]. Det gamla värdet sparas i aktiveringsposten

och återställs när sub terminerar. konstant accesstid men lite mindre effektiva anrop

Page 10: Föreläsning 9: Implementering av underprogram

2002-11-29 F. Drewes, Inst. f. datavetenskap

10

Exempel

program P;bool a,b;procedure A;

bool a;begin

a = true;if a b then B

end A;procedure B;begin

if a then Aend B;

begina = b = false;A

end P.

sd(P)=0

sd(A)=1

sd(B)=1

nesting depth = sd(A) – sd(A) = 0

nesting depth = sd(A) – sd(P) = 1

sd(P)=0

sd(A)=1

sd(B)=1