1 / 10

Föreläsning 9: Implementering av underprogram

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.

jolene
Download Presentation

Föreläsning 9: Implementering av underprogram

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 F. Drewes, Inst. f. datavetenskap

  2. Aktiveringsposter =underprogram 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]). 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 avaktiva UP. F. Drewes, Inst. f. datavetenskap

  4. lokala variabler parametrar AP subn+1 statisk länk dynamisk länk återhoppsadress AP subn AP subn   AP sub1 AP sub1 AP main AP main subn anropar subn+1 subn+1 terminerar Anrop och återhopp  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) 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) • skapa en separat stack för varje variabelnamn (inga variabler lagras på exekveringsstacken) • 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? 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 F. Drewes, Inst. f. datavetenskap

  8. Att underhålla en statisk kedja • 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 djupetsd(id) av en identifierare id Antag att sub deklareras i subdecl och anropas i subanr. Genom att börja med den översta aktiveringsposten och följa den statiska kedjansd(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 omdinte blir stort 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 F. Drewes, Inst. f. datavetenskap

  10. sd(P)=0 sd(P)=0 sd(A)=1 sd(A)=1 nesting depth = sd(A) – sd(A) = 0 nesting depth = sd(A) – sd(P) = 1 sd(B)=1 sd(B)=1 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 A end B; begin a = b = false; A end P. F. Drewes, Inst. f. datavetenskap

More Related