Jednostki dynamiczne W trakcie obliczeń powstają (... i giną) jednostki dynamiczne: " rekordy aktywacji (procedur, funkcji, bloków,...) " obiekty (klas,

Slides:



Advertisements
Podobne prezentacje
Tryby adresowania Prawie każda operacja wykonywana przez mikroprocesor wykonywana jest na pewnych argumentach (lub argumencie). Sposoby wskazywania argumentów.
Advertisements

Funkcje w PHP ABK.
Znaki informacyjne.
C++ wykład 2 ( ) Klasy i obiekty.
Język C/C++ Funkcje.
Wprowadzenie do informatyki Wykład 6
Programowanie obiektowe
Obserwowalność System ciągły System dyskretny
POWIAT MYŚLENICKI Tytuł Projektu: Poprawa płynności ruchu w centrum Myślenic poprzez przebudowę skrzyżowań dróg powiatowych K 1935 i K 1967na rondo.
Wzorce.
Język ANSI C Funkcje Wykład: Programowanie komputerów
WYKŁAD 6 ATOM WODORU W MECHANICE KWANTOWEJ (równanie Schrődingera dla atomu wodoru, separacja zmiennych, stan podstawowy 1s, stany wzbudzone 2s i 2p,
Ludwik Antal - Numeryczna analiza pól elektromagnetycznych –W10
Domy Na Wodzie - metoda na wlasne M
PROGRAMOWANIE STRUKTURALNE
PROGRAMOWANIE STRUKTURALNE
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 6: Tablice, rekordy, zbiory.
Systemy operacyjne Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Systemy operacyjne Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Podstawy informatyki Powtórka Grupa: 1A Prowadzący: Grzegorz Smyk
Kurs Pascala – spis treści
PREPARATYWNA CHROMATOGRAFIA CIECZOWA.
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
Podprogramy 1 W Adzie mamy dwa rodzaje podprogramów (subprograms, subroutines): funkcje (functions) i procedury (procedures) Deklaracja i treść funkcji 
Dynamiczne struktury danych 1
Wykład 2 struktura programu elementy języka typy zmienne
Wprowadzenie do programowania w języku Turbo Pascal
Typy wskaźnikowe, dynamiczne struktury danych
Podprogramy.
Pytania konkursowe.
Podstawy programowania
Algorytmy i struktury danych
Podstawy programowania
Obiekty dynamiczne Tworzenie klas 3 MPDI Programowanie obiektowe W4.
Programowanie strukturalne i obiektowe
Andrzej Jędryczkowski Nie da się napisać większego programu bez podziału go na części zwane podprogramami. Podprogram to wyróżniona część programu.
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
Wyrażenia algebraiczne
Procedury i funkcje.
Podstawy programowania
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
KOLEKTOR ZASOBNIK 2 ZASOBNIK 1 POMPA P2 POMPA P1 30°C Zasada działanie instalacji solarnej.
Jerzy F. Kotowski1 Informatyka I Wykład 14 DEKLARATORY.
Programowanie obiektowe – zastosowanie języka Java SE
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
1. Pomyśl sobie liczbę dwucyfrową (Na przykład: 62)
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Stabilność Stabilność to jedno z najważniejszych pojęć dynamiki systemów i teorii sterowania W większości przypadków, stabilność jest warunkiem koniecznym.
EcoCondens Kompakt BBK 7-22 E.
Programowanie w języku C++
Programowanie w języku C++
User experience studio Użyteczna biblioteka Teraźniejszość i przyszłość informacji naukowej.
Obliczalność czyli co da się policzyć i jak Model obliczeń sieci liczące dr Kamila Barylska.
Testogranie TESTOGRANIE Bogdana Berezy.
Jak Jaś parował skarpetki Andrzej Majkowski 1 informatyka +
Systemy dynamiczne 2014/2015Obserwowalno ść i odtwarzalno ść  Kazimierz Duzinkiewicz, dr hab. in ż. Katedra In ż ynierii Systemów Sterowania 1 Obserwowalność.
Elementy geometryczne i relacje
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Tryby adresowania i formaty rozkazów mikroprocesora
Wstęp do programowania Wykład 1
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
Wykład 1 Informatyka II MPZI2 sem.letni. Tablice Tablice deklarujemy array [ lista typów indeksów ] of typ bazowy (składowych) np. var t1,t2:array [1..5,
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
Zapis prezentacji:

Jednostki dynamiczne W trakcie obliczeń powstają (... i giną) jednostki dynamiczne: " rekordy aktywacji (procedur, funkcji, bloków,...) " obiekty (klas, współprogramów i wątków). Jednostka dynamiczna jest instancją modułu programu: " rekord aktywacji jest niezbędny do wykonania instrukcji procedury, " obiekt powstaje na wzór zapisany w deklaracji klasy. Cel: Musimy zrozumieć strukturę i scenariusz jednostki dynamicznej. Jednoostki dynamiczne w.8 10 kwietnia 2002

Procedury Deklaracja procedury składa się z nagłówka i treści procedury. Nagłówek zawiera nazwę procedury (identyfikator) oraz listę parametrów formalnych. Treść procedury to blok zawierający deklaracje wielkości lokalnych i instrukcje. Instrukcja procedury (= wywołanie procedury) powoduje wykonanie zmodyfikowanej odpowiednio treści procedury. Do zrozumienia instrukcji procedury stosuje się często tzw. Regułę kopii 2 Jednoostki dynamiczne w.8 10 kwietnia 2002 call P(parAkt) Mod parAkt Body P

Przykład program sort(input, output); var a: array[0..10] of integer; procedure czytajTab; var i: integer; begin for i := 1 to 9 do read(a[i]); end; (* czytajTab *) function podzial(y,z: integer): integer; var i, j, x, v: integer; begin... end (* podzial *); procedure quicksort(m, n: integer); var i: integer; begin if ( n > m ) then begin i := podzial(m,n); quicksort(m, i-1); quicksort(i+1,n); end end; (* quicksort *) begin a[0] := -9999; a[10] := 9999; czytajTab; quicksort(1, 9) end. 3 Jednoostki dynamiczne w.8 10 kwietnia 2002

Drzewa aktywacji Przyjmijmy, ż e: – wykonywanie programu jest sekwencyjne, ka żde wykonanie instrukcji procedury polega na wykonaniu zmodyfikowanej (przez parametry aktyalne) treści procedury od jej początku do końca po czym sterowanie wraca do instrukcji następnej za instrukcją procedury. Czas istnienia aktywacji procedury p jest sekwencją kroków wykonywanych w zmodyfikowanej treści proceury p, włączając w to czas istnienia aktywacji procedur wywołanych z procedury p. FAKT Jeśli a i b są aktywacjami procedur to ich czasy istnienia albo są rozłączne albo jeden jest zawarty w drugim. 4 Jednoostki dynamiczne w.8 10 kwietnia 2002

Przykład c.d. Wstawmy do treści kazdej procedury dwie instrukcje write. Pierwsza drukuje napis wejście i nazwę procedury oraz parametry aktualne, druga napis opuszczenie i nazwę procedury. Oto co mo żemy przeczytać: Wykonanie rozpoczęte Wejście czytajTab opuszczenie czytajTab wejście quicksort(1,9) wejście podzial(1,9) opuszczenie podzial(1, 9) wejście quicksort(1, 3)... opuszczenie quicksort(1,3) wejście quicksort(5, 9)... opuszczenie quicksort(1, 9) wykonanie zakończone ) * przy zalo żeniu że podzial(1,9) zwraca 4 5 Jednoostki dynamiczne w.8 10 kwietnia 2002

Drzewa aktywacji c.d. Definicja Drzewem aktywacji dla pewnego wykonania programu P jest najmniejsze drzewo takie, że 1) korzeń reprezentuje aktywację programu głównego, 2) ka żdy węzeł reprezentuje aktywację procedury, 3) węzeł a jest ojcem dla węzła b wtedy i tylko wtedy gdy a zawiera instrukcję procedury aktywującą b, 4) węzeł a znajduje się po lewej stronie węzła b wtedy i tylko wtedy gdy aktywacja a poprzedza aktywację b. 6 Jednoostki dynamiczne w.8 10 kwietnia 2002

Przykład c.d. 7 Jednoostki dynamiczne w.8 10 kwietnia 2002 s c q(1,9) p(1,9) q(1,3)q(5,9) p(1,3) p(1,9) q(1,0)q(2,3) p(2,3) p(7,9) p(5,9) q(2,1)q(3,3) q(5,5)q(7,9) q(7,7) q(9,9)

Stosy sterowania W wielu językach (m.in. Pascalu, C,...) funkcja lub procedura nie kończy swej aktywacji zanim nie zakończą swych aktywacji funkcje przez nią wywołane. Mo żna więc powiedzieć, że wywołania procedur i funkcji zachowują się zgodnie z zasadą :ostatni przychodzący wychodzi pierwszy, po angielsku last-in first-out LIFO. Jeśli nazwy lokalne dla procedur są tworzone na wejściu do aktywacji procedury i niszczone przy jej opuszczaniu to możemy zastosować strukturę stosu. Uwaga. Jeśli język programowania dopuszcza i zagnieżdżanie funkcji i zapisywanie funkcji jako wartości zmiennych to trzeba użyć innych mechanizmów niż struktura stosu. 8 Jednoostki dynamiczne w.8 10 kwietnia 2002

Przykład c.d. 9 Jednoostki dynamiczne w.8 10 kwietnia 2002 s c q(1,9) p(1,9) q(1,3) p(1,3) p(1,9) q(1,0)q(2,3) p(2,3) q(2,1)q(3,3) Na rysunku widzimy węzły aktywacji, jakie zostały osiągnięte gdy sterowanie weszło do węzła q(3,3). Linie przerywane prowadzą do węzłów ju ż opuszczonych, wykonanych do końca. Linie ciągłe stanowią ścieżkę od korzenia s do q(3,3). Łatwo dostrzec, że w trakcie obliczeń węzły osiągnięte i nie opuszczone (linia ciągła) wchodzą i opuszczają stos.

Przykład c.d. 10 Jednoostki dynamiczne w.8 10 kwietnia 2002 s

Przykład c.d. 11 Jednoostki dynamiczne w.8 10 kwietnia 2002 s c

Przykład c.d. 12 Jednoostki dynamiczne w.8 10 kwietnia 2002 s c q(1,9)

Przykład c.d. 13 Jednoostki dynamiczne w.8 10 kwietnia 2002 s c q(1,9) p(1,9)

Przykład c.d. 14 Jednoostki dynamiczne w.8 10 kwietnia 2002 s c q(1,9) p(1,9) q(1,3) p(1,9)

Przykład c.d. 15 Jednoostki dynamiczne w.8 10 kwietnia 2002 s c q(1,9) p(1,9) q(1,3) p(1,3) p(1,9)

Przykład c.d. 16 Jednoostki dynamiczne w.8 10 kwietnia 2002 s c q(1,9) p(1,9) q(1,3) p(1,3) p(1,9) q(1,0)

Przykład c.d. 17 Jednoostki dynamiczne w.8 10 kwietnia 2002 s c q(1,9) p(1,9) q(1,3) p(1,3) p(1,9) q(1,0)q(2,3)

Przykład c.d. 18 Jednoostki dynamiczne w.8 10 kwietnia 2002 s c q(1,9) p(1,9) q(1,3) p(1,3) p(1,9) q(1,0)q(2,3) p(2,3)

Przykład c.d. 19 Jednoostki dynamiczne w.8 10 kwietnia 2002 s c q(1,9) p(1,9) q(1,3) p(1,3) p(1,9) q(1,0)q(2,3) p(2,3) q(2,1)

Przykład c.d. 20 Jednoostki dynamiczne w.8 10 kwietnia 2002 s c q(1,9) p(1,9) q(1,3) p(1,3) p(1,9) q(1,0)q(2,3) p(2,3) q(2,1)q(3,3)

Ramki = jednostki dynamiczne System czasu wykonania, czyli wirtualna maszyna potrzebna do wykonywania programów w naszym języku programowania musi zawierać narzędzia umo żliwiające wkładanie na stos rekordów aktywacji procedur by móc zrealizować instrukcje procedury. Kończeniu obliczeń procedury towarzyszy zdjęcie rekordu aktywacji ze stosu. W literaturze angielskojęzycznej używana jest nazwa frame, a więc ramka. Zobaczymy za chwilę jak sensowna jest ta nazwa. Ze względu na tradycję kompilatorów stos rekordów aktywacji rośnie w dół. 21 Jednoostki dynamiczne w.8 10 kwietnia 2002

Przykład c.d. 22Jednostki dynamiczne w.8 10 kwietnia 2002 s a: array of integer czytajTab: procedure podzial: function quicksort: procedure

Przykład c.d. 23Jednostki dynamiczne w.8 10 kwietnia 2002 s c a: array of integer czytajTab: procedure podzial: function quicksort: procedure i: integer

Przykład c.d. 24 s c q(1,9) a: array of integer czytajTab: procedure podzial: function quicksort: procedure m: integer 1 n: integer 9 i: integer Jednostki dynamiczne w.8 10 kwietnia 2002

Przykład c.d. 25 s c q(1,9) p(1,9) a: array of integer czytajTab: procedure podzial: function quicksort: procedure m: integer 1 n: integer 9 i: integer result: integer y,z: integer formalparam 1,9 i,j,x,v: integer Jednostki dynamiczne w.8 10 kwietnia 2002

Przykład c.d. 26 s c q(1,9) p(1,9) q(1,3) p(1,9) a: array of integer czytajTab: procedure podzial: function quicksort: procedure m: integer 1 n: integer 9 i: integer m: integer 1 n: integer 3 i: integer Jednostki dynamiczne w.8 10 kwietnia 2002

Przykład c.d. 27 s c q(1,9) p(1,9) q(1,3) p(1,3) p(1,9) a: array of integer czytajTab: procedure podzial: function quicksort: procedure m: integer 1 n: integer 9 i: integer m: integer 1 n: integer 3 i: integer result: integer y,z: integer formalparam 1, 3 i,j,x,v: integer Jednostki dynamiczne w.8 10 kwietnia 2002

Przykład c.d. 28 s c q(1,9) p(1,9) q(1,3) p(1,3) p(1,9) q(1,0) a: array of integer czytajTab: procedure podzial: function quicksort: procedure m: integer 1 n: integer 9 i: integer m: integer 1 n: integer 3 i: integer m: integer 1 n: integer 0 i: integer Jednostki dynamiczne w.8 10 kwietnia 2002

Przykład c.d. 29 s c q(1,9) p(1,9) q(1,3) p(1,3) p(1,9) q(1,0)q(2,3) a: array of integer czytajTab: procedure podzial: function quicksort: procedure m: integer 1 n: integer 9 i: integer m: integer 1 n: integer 3 i: integer m: integer 2 n: integer 3 i: integer Jednostki dynamiczne w.8 10 kwietnia 2002

Przykład c.d. 30 s c q(1,9) p(1,9) q(1,3) p(1,3) p(1,9) q(1,0)q(2,3) p(2,3) a: array of integer czytajTab: procedure podzial: function quicksort: procedure m: integer 1 n: integer 9 i: integer m: integer 1 n: integer 3 i: integer m: integer 2 n: integer 3 i: integer result: integer y,z: integer formalparam 2, 3 i,j,x,v: integer Jednostki dynamiczne w.8 10 kwietnia 2002

Przykład c.d. 31 s c q(1,9) p(1,9) q(1,3) p(1,3) p(1,9) q(1,0)q(2,3) p(2,3) q(2,1) a: array of integer czytajTab: procedure podzial: function quicksort: procedure m: integer 1 n: integer 9 i: integer m: integer 1 n: integer 3 i: integer m: integer 2 n: integer 3 i: integer m: integer 2 n: integer 1 i: integer Jednostki dynamiczne w.8 10 kwietnia 2002

Przykład c.d. 32 s c q(1,9) p(1,9) q(1,3) p(1,3) p(1,9) q(1,0)q(2,3) p(2,3) q(2,1)q(3,3) a: array of integer czytajTab: procedure podzial: function quicksort: procedure m: integer 1 n: integer 9 i: integer m: integer 1 n: integer 3 i: integer m: integer 2 n: integer 3 i: integer m: integer 3 n: integer 3 i: integer Jednostki dynamiczne w.8 10 kwietnia 2002

Pytania 1 W tym momencie rozpoczęte są cztery aktywacje procedury q. Czy potrzebne są cztery rekordy aktywacji tej samej przecież procedury q? 2 Czy każdy rekord aktywacji ma inny kod instrukcji, czy też rekordy te posługują się tym samym kodem? 3 Czy procedury mogą się odwoływać do nazw nielokalnych? Pomyśl jak to by było w przypadku funkcji zadeklarowanej wewnątrz procedury q. 4 W jaki sposób przekazywać parametry? 5 Czy procedury mogą być parametrami? wynikami obliczeń? 6 Czy można tworzyć obiekty klas? 7 Czy można usuwać obiekty? 33 Jednoostki dynamiczne w.8 10 kwietnia 2002

Stos czy sterta rekordów aktywacji? Do tej pory rozważaliśmy stos rekordów aktywacji procedur, funkcji i bloków. Dla wielu języków programowania nie da się utrzymać założenia, że stos wystarczy. Rozważmy język programowania w którym funkcje mogą być zagnieżdżane (jak w Pascalu) i mogą być wartościami zwracanymi przez funkcje (jak w C). Ta kombinacja powoduje, że nie możemy niszczyć rekordów aktywacji w momencie powrotu z funkcji. 34 Jednoostki dynamiczne w.8 10 kwietnia 2002

Przykład W języku ML fun f(x)= let fun g(y)= x+y in g end val h=f(3) val j=f(4) val z=h(5) val w=j(7) 35 Jednoostki dynamiczne w.8 10 kwietnia 2002 W pseudo-C int (*)() f(int x) { int g(int y) {return x+y} return g } int (*h)() =f(3); int (*j)() =f(4); int z = h(5); int w = h(7); W języku C nie można zagnieżdżać funkcji.

Przykład c.d. Gdy obliczamy wartość wyrażenia f(3), nowa zmienna lokalna x jest tworzona dla aktywacji funkcji f. Potem funkcja g jest zwracana jako wynik f(x). Zauważmy, że funkcja g nie była jeszcze wywołana, a więc zmienna y nie była jeszcze utworzona. W tym momencie funkcja f zwraca wynik i kończy obliczenie, ale jest zbyt wcześnie by zniszczyć lokalną zmienną x, ponieważ gdy obliczane będzie wyrażenie h(5) będziemy potrzebować wartości x=3. Tymczasem obliczana jest wartość wyrażenia f(4) tworząc inną instancję zmiennej x i zwraca ona inną instancję procedury g dla której x=4. Dla tego przykładu konieczne jest by zachować rekord aktywacji funkcji f po powrocie z obliczenia f (3) a także rekord aktywacji funkcji f po powrocie z obliczenia f(4). 36 Jednoostki dynamiczne w.8 10 kwietnia 2002

Pytanie otwarte Czy programowanie obiektowe zawiera w sobie programowanie funkcyjne? Hipoteza: dla każdego programu w języku ML (Haskel,...) istnieje program w języku Java (Loglan'82...) o tych samych własnościach. Dokładniej, istnieje jednolity algorytm tłumaczący programy w ML na rownoważne im programy w Javie. Nie znam dziś ( ) odpowiedzi na to pytanie. Ucieszy mnie albo dowód, że tak jest albo kontrprzykład wykazujący, że pewnego programu w ML nie da się zastąpić programem w Javie. 37 Jednoostki dynamiczne w.8 10 kwietnia 2002

Ramki na stosie W każdym systemie wykonawczym (wolę go nazywać maszyną virtualną) rekordy aktywacji kładzione są na stosie ramek. Na ogół długość ramki może być zmienna w czasie jej trwania. Różne są tego powody: w Algolu 60 do ramki dopisywaliśmy tablice utworzone w danej procedurze lub bloku, w prawie każdym języku programowania na wierzchołku stosu zapisywane są wielkości pomocnicze, tymczasowe potrzebne do obliczenia wartości wyrażeń, w każdym języku na stosie kładziemy argumenty wywoływanych funkcji i procedur. Poniżej przedstawimy protokół wywoływania funkcji i procedur, trzeba jednak zastrzec, że dzisiejsze kompilatory mogą ten protokół przyśpieszyć wykorzystując rejestry komputera. 38 Jednoostki dynamiczne w.8 10 kwietnia 2002

Stos systemu wykonawczego 1 39 Jednoostki dynamiczne w.8 10 kwietnia 2002 bie żący rekord aktyw. top

Stos systemu wykonawczego 2 40 Jednoostki dynamiczne w.8 10 kwietnia 2002 bie żący rekord aktyw. top argument n... argument 2 argument 1 static link

Stos systemu wykonawczego 3 41 Jednoostki dynamiczne w.8 10 kwietnia 2002 bie żący rekord aktyw. top argument n... argument 2 argument 1 bie żący rekord aktywacji powiększony o parametry aktualne

Stos systemu wykonawczego 4 42 Jednoostki dynamiczne w.8 10 kwietnia 2002 bie żący rekord aktyw. top argument n... argument 2 argument 1 static link bie żący rekord aktywacji powiększony o parametry aktualne i o static link = adres rekordu aktywacji z deklaracją wzywanej procedury

Stos systemu wykonawczego 5 43 Jednoostki dynamiczne w.8 10 kwietnia 2002 bie żący rekord aktyw. top argument n... argument 2 argument 1 static link poprzedni rekord aktywacji powiększony o parametry aktualne i o static link local variables return addr temporaries saved regs. frame ptr bie żący rekord aktywacji

Organizacja pamięci w czasie wykonywania Dla wykonania skompilowanego programu niezbędne są: - wygenerowany kod wynikowy, - stos rekordów aktywacji, - dane statyczne, - sterta (ang. heap) obiektów klas. 44 Jednoostki dynamiczne w.8 10 kwietnia 2002 Kod Dane statyczne Stos Sterta

Pytania " Jak to będzie dla programu z wątkami? " Czy obraz zmieni się gdy założymy, ze wszytkie wątki są wykonywane na tym samym procesorze (Java?) " Jak wygląda organizacja pamięci gdy wątki tego samego programu mogą być wykonywane na różnych komputerach w sieci (procesy w Loglanie)? " Jak wygląda organizacja pamięci gdy wątki są współprogramami (ang. coroutines)? tzn. gdy wiadomo że tylko jeden współprogram jest aktywny? 45 Jednoostki dynamiczne w.8 10 kwietnia 2002

Rekordy aktywacji Dla języków programowania takich jak Pascal lub C struktura rekordu aktywacji wygląda na ogół tak: 46 Jednoostki dynamiczne w.8 10 kwietnia 2002 Wartość zwracana Parametry aktualne Dowiązanie dostępu SL Dowiązanie sterowania DL Dane lokalne Zapamiętany stan procesora(rejestry) Dane tymczasowe

Rekordy aktywacji c.d. Przeznaczenie zaznaczonych części rekordu aktywacji: " pole dla wartości zwracanej, w tym polu funkcja wywoływana zapisuje wynik. W praktyce, wartość ta jest zwracana w rejetrze, by przyśpieszyć obliczenia. " Procedura wywołująca wpisuje tu argumenty. W praktyce, parametry zapisywane są w rejestrach procesora. " SL wskazanie na rekord aktywacji z którego wzięto deklarację wywoływanej procedury. Pozwala na realizację odwoływania się do danych nielokalnych, znajdujących się w innych rekordach aktywacji. Czasami stosuje się tez mechanizm display vector np. w Pascalu. " DL wskazanie na rekord aktywacji procedury wywołującej, " Informacje o wielkościach zadeklarowanych lokalnie. " Miejsce na przechowanie stanu rejestrów procesora sprzed wywołania procedury – pozwala odtworzyć stan procesora przy powrocie z procedury. " miejsce na wyniki tymczasowe, zmienne robocze. Część w rejestrach. 47 Jednoostki dynamiczne w.8 10 kwietnia 2002

Dane lokalne Każda nazwa lokalna otrzymuje swoje stałe przesunięcie względem początku rekordu aktywacji: - zmienne lokalne wymagają pól, być może różnych długości - nazwom modułów np. procedur, klas, odpowiadają pola zawierające... adres kodu procedury, adres konstruktora klasy i... - nazwom metod virtualnych ( w Smalltalku i Jawie każda metoda jest wirtualna, w Loglanie i w C++ na to by metoda była wirtualna trzeba napisać virtual ) - pola parametrów formalnych różnią się od zmiennych lokalnych tym, że znajdują się po drugiej stronie adresu początku rekordu aktywacji, 48 Jednoostki dynamiczne w.8 10 kwietnia 2002

Adresowanie wielkości lokalnych w kodzie W większości przypadków adres bieżącego rekordu aktywacji jest zapisany w pewnym rejestrze r. Pozwala to zaprogramować instrukcję a := b + c; gdzie wielkości a, b, c są lokalne jako LOAD r, offset a ADD r, offset b STORE r, offset c Liczby offset a, offset b, offset c są znane i równe przesunięciu odpowiedniego pola zmiennej a, b, c względem adresu początku rekordu aktywacji. W ten sposób różne aktywacje tej samej rekurencyjnej procedury mogą mieć ten sam kod! 49 Jednoostki dynamiczne w.8 10 kwietnia 2002

Sekwencje wywołujące S 50 Jednoostki dynamiczne w.8 10 kwietnia 2002

Dane o zmiennej długości S 51 Jednoostki dynamiczne w.8 10 kwietnia 2002

Wiszące referencje S 52 Jednoostki dynamiczne w.8 10 kwietnia 2002

Sterta obiektów S 53 Jednoostki dynamiczne w.8 10 kwietnia 2002

Nazwy nielokalne S 54 Jednoostki dynamiczne w.8 10 kwietnia 2002

Adresowanie wielkości nielokalnych S 55 Jednoostki dynamiczne w.8 10 kwietnia 2002

Przekazywanie parametrów S 56 Jednoostki dynamiczne w.8 10 kwietnia 2002

R S 57 Jednoostki dynamiczne w.8 10 kwietnia 2002