Runtime-omgivelser Kap 7 - I

Like dokumenter
Runtimesystemer Kap 7 - I

Runtimesystemer Kap 7 - I

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

Anatomien til en kompilator - I

Runtimesystemer del III

Runtime- systemer del III

Anatomien til en kompilator - I

Runtime-omgivelser Kap 7 - II

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

2012 2a. C rc; void main() { rc = new C (); rc.m2(); } } INF 3110/ INF /28/13 1

Runtimesystemer - II. Parameteroverføring Call by value Call by reference Call by value-result Call by name INF 3110/ INF

UNIVERSITETET I OSLO

Diverse eksamensgaver

Semantisk Analyse del III

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Datatyper og typesjekking

Datatyper og typesjekking

Datatyper og typesjekking

Datatyper og typesjekking

Dagens tema: Kjøresystemer II

Litt om Javas class-filer og byte-kode

Generiske mekanismer i statisk typede programmeringsspråk

Kjøresystemer. Hva er et kjøresystem? Den abstrakte maskinen SIMPLESEM (2.6) Klassifisering av språk: Parametre (2.7.7) Statiske språk (

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Kap 6.4: Typesjekking Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 19. og 23. mars Dagens tema: Typer og typesjekking

Med Svarforslag UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet. 3 sider (side 6, 7 og 8, rives ut, fylles ut og leveres)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl

Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode)

UNIVERSITETET I OSLO

Kodegenerering del 3: Tilleggsnotat fra AHU Samt litt om class-filer og byte-kode INF5110 V2007. Stein Krogdahl, Ifi UiO

Skal bindes opp til en deklarasjon av samme navn

2 Om statiske variable/konstanter og statiske metoder.

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF april, 2015 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8. Ble lagt ut 24. april

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Semantikk. Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Semantikk. Semantikk. En måte å svare på: gi semantikken til språket!

Kap 6.3: Symboltabellen Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 17. mars Dagens tema:

Skal bindes opp til en deklarasjon av samme navn

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

Pensumoversikt - kodegenerering. Kap. 8 del 1 kodegenerering INF5110 v2006. Hvordan er instruksjonene i en virkelig CPU? Arne Maus, Ifi UiO

INF april, 2013 Kap. 8 Noen oppgaver som er meget relevante for Oblig 2

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

INF225 høsten 2003 Prosjekt del 4: kodegenerering

Programmeringsspråket C Del 3

INF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

Programmeringsspråket C Del 3

Kap. 8 del 1 kodegenerering INF5110 Vår2007

UNIVERSITETET I OSLO

INF april, 2014 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

Dagens tema: Sjekking

Generiske mekanismer i statisk typede programmeringsspråk INF5110 April, 2009

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Kodegenerering, del 2: Resten av Kap. 8 pluss tilleggsnotat (fra kap. 9 i ASU ) INF5110 V2007

UNIVERSITETET I OSLO

Operativsystemer og grensesnitt

Dagens tema. Mer MIPS maskinkode. Maske-operasjoner Skift-operasjoner Lesing og skriving Pseudo-instruksjoner Mer om funksjonskall Registeroversikt

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

Programmering i C++ Løsningsforslag Eksamen høsten 2005

MED SVARFORSLAG UNIVERSITETET I OSLO

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49

Objekter og referanser

Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015

IN 147 Program og maskinvare

Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen

Del 1 En oversikt over C-programmering

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

UNIVERSITETET I OSLO

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk

Stack. En enkel, lineær datastruktur

UNIVERSITETET I OSLO

Oppgaver til kodegenerering etc. INF-5110, 16. mai, 2014

UNIVERSITETET I OSLO

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Obligatorisk Innlevering 2

Enkle generiske klasser i Java

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

Forelesning ISA: IJVM Kap 4.2

Dagens tema. LC-2 LC-2 er en «ekstrem-risc»; den har 16 instruksjoner og 3 adresseringsmåter.

Transkript:

Runtime-omgivelser Kap 7 - I Generelt Språk som bare trenger statiske omgivelser Språk som trenger stakk-orienterte omgivelser Språk som trenger mer generelle omgivelser Vel så riktig å si at forskjellige slags begreper i et gitt språk krever at omgivelsen organiserer forskellige deler av en programutførelse forskjelligt Parameteroverføring 4/15/10 1

Den oversatte programkoden kan nesten altid betraktes som statisk allokert skal hverken flyttes eller forandres under utførelse Kompilatoren kjenner alle adresser til kodebiter Men husk Koden blir ofte produsert som relokerbare kode, som får sin endelige plassering av linker/ loader OS kan flytte rundt på kode, men det forstyrrer ikke kodens eget adresserum 4/15/10 2

Lagerorganisering Typisk organisering under utførelse dersom et programmeringsspråk har alle slags data (statisk, stakk, dynamisk) Typisk organisering av data for et prosedyrekall (aktiveringsblokk) Det er gjerne ut fra plasseringen her man karakteriserer språk til være statisk organisert stakk-organisert heap/dynamisk organisert 4/15/10 3

Full statisk organisering (eks. Fortran) Kompilatoen kan beregne hvor alt ligger Utførbar kode Variable Alle slags hjelpedata bl.a. alle slags større konstanter i programmet 4/15/10 4

Et eksempel i Fortran Plass til mellomresultater o.l. Kompilatoren kan beregne hvor mye som trengs I Fortran overføres parametere som pekere til de aktuelle verdier/variable 4/15/10 5

Et eksempel i C Aktiverings-blokkene kan organiseres som en stakk. Kreves om man tillater rekursive kall Return address Program-adressen man er kalt fra control link Angir kallerens fp ( dynamisk link ) frame pointer Peker på fast sted i den aktuelle aktiveringsblokkken stack pointer Angir grensen mellom brukt og ledig lagerareal 4/15/10 6

aktiveringstrær forrige program dette program Relativ-adresser: moffset = +4 yoffset = -6 Blir én global variabel bare synlig fra f Aksess av y: -6(fp) Layout av g sin aktiveringsblok: parameter 4/15/10 7

Stadier i utførelse av programmet 4/15/10 8

Arrayer av kjent (statisk) lengde Layout av aktiveringsblokk: Relativ-adresser A[i] beregnes som adressen (-24 + 2*i)(fp) Aksess av c og y: c: 4(fp) y: -32(fP) kan ofte gjøres i én instruksjon 4/15/10 9

Hvordan utføre et kall Ved prosedyrekall (entry) Ved prosedyre-exit Denne setter av plass til lokale variable, ved å flytte sp Kan evt. også initialisere disse. (Kan tenkes på som push) 4/15/10 10

Gjennomføring av et kall - I før kall på g push parameter push fp 4/15/10 11

Gjennomføring av et kall II 1. fp = sp 2. Push returadressse alloker lokal var (y) 4/15/10 12

Data av variabel lengde variabel betyr at data ikke har samme størrelse ved hvert kall i: integer A[i] beregnes som @6(fp) + 2*i antar at A overføres ved full kopiering Fast lengde I Java legges disse på heapen 4/15/10 13

Behandling av mellomresultater adresse verdi verdi Antar strikt beregning fra venstre mot høyre. Kallet f(j) kan forandre verdier. Trenger ikke sette av fast maksimal plass til slike mellomresultater for hele blokkens levetid. I modsetning til hva man naturlig gjør i Fortran. i/k 4/15/10 14

Mulig plassallokering ved indre blokker 4/15/10 15

Prosedyrer inne i prosedyrer Nestede prosedyrer Nested klasser (inner classes) kan behandles på samme måte. 4/15/10 16

Et første forsøk Kontekstvektor ( display ) Vi trenger noe ekstra (aksess-link/statisk link) Hvordan kan vi aksessere n i p? Går altid til aktuell utgave av tekstlig omgivelse 4/15/10 17

Eksempel med flere nivåer Programblokkene får da et blokk-nivå display fp.al.al.x diff i blokknivå 4/15/10 18

Implementasjon av fp.al.al.al.... al.x Antar at fp ligger fast i et register 4(fp) 4(reg)... 4(reg) -> reg -> reg -> reg X kan nå aksesseres som 6(reg) diff i blokknivå fp Ofte ikke så mange blokknivåer 4/15/10 19

Videre utførelse Hvordan skaffe acces-link ved kall? Kalleren vet hvor den er, og utfører ny aksess-link = fp.al.al... (så mange som nivåforskjellen er) 4/15/10 20

Prosedyrer som parametere Dette må da oversettes helt spesielt: 1. aksess-peker = ep 2. hopp til ip ip r ep r = fp Den aktuelle parameteren må være: Kode-adressen til prosedyren (ip) Prosedyrens aksess-link (ep) 4/15/10 21

Kall av prosedyre levert som parameter Etter kallet på den formelle parameteren a som aktuelt er r i Q: Denne ser vi ikke på: 4/15/10 22

Hva om vi skal ha access-link? Ved prosedyrekall (entry) Ved prosedyre-exit 1. Beregn ny aksess-link som nyal = fp.al.al... (tilsvarende diff. i blokknivå mellom den kalte og kalleren er 0 om den kalte er lokal i kalleren) 2. Push nyal på stakken + aksess-link 4/15/10 23

Objekt-orientering Klasser og subklasser Typede pekere Virtuelle og ikke-virtuelle metoder class A { int x,y; void f(s,t) {...K...}; virtual void g(p,q) {...L...} } class B extends A{ int z; void f(s,t) {...Q...}; redef void g(p,q) {...M...}; virtual void h(r) {...N...} } class C extends B{ int u; redef void h(r) {...P...} } A ra B rb C rc 4/15/10 24

Kall på metoder Kall på ikke-virtuelle metoder (bruk pekerens type) ra.f(1,2) gir altid f i A (K) rb.f(1,2) gir altid f i B (Q) rc.f(1,2) gir altid f i B (Q) Kall på virtuelle metoder (bruk objektets type) ra.g(3,4) (L eller M) rb.g(3,4) gir den dybeste versjonen (M) rc.g(3,4) i det aktuelle objektet (M) ra.h(5) ulovlig (statisk, kompileringstid) rb.h(5) gir den dybeste versjonen (N eller P) rc.h(5) i det aktuelle objektet (P) 4/15/10 25

Implementasjon (typede pekere) Kompilatorsjekk av rx.f(...), både virtuelle og ikke-virtuelle): f må være definert i X eller i superklassen til X De ikke-virtuelle bindes ferdig i kompilatoren De virtuelle nummereres (med offset ) fra ytterste klasse og innover redefinisjoner får samme nummer La objekthodene inneholde en peker til klassen felles virtuell-tabell ra.g(...) implementeres slik: call(ra.virttab[g_offsett]) Kompilatoren vet: g_offset = 0 h_offset = 1 4/15/10 26

Impl. av virtuelle metoder som i boken (C++) Virtuell-tabell pekeren har relativ-adresse som kan beregnes av kompilatoren Pekeren til virtuell-tabellen ligger ikke først i objektet, da bare objekter med virtuelle funksjoner har en virtuell-tabell. 4/15/10 27

Utypede pekere (f.eks. Smalltalk) Ikke-virtuelle metoder finnes ikke Problem med virtuell-tabeller: Alle virtuell-tabeller måtte innholde alle metoder i alle klasser, altså for stor. I tillegg: I Smalltalk kan man legge til metoder underveis Derfor (antar at f er fjernet): r.g(...) implementeres slik: 1. Gå til objektets klasse 2. Let etter g ut gjennom superklassene 4/15/10 28