Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
Altprogramların gerçeklenmesi
Bölüm 10 Altprogramların gerçeklenmesi
2
10. Bölüm konuları Çağırma / geri dönme semantiği
Yığıt-dinamik yerel değişkeni olan altprogramların gerçeklenmesi İçiçe altprogramlar Statik etki alanı gerçeklenmesi Bloklar Dinamik etki alanı gerçeklenmesi Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
3
Çağırma ve geri dönmenin semantiği
Bir dilin altprogram çağırma ve geri dönme oparasyonlarının tümüne altprogram bağlantısı denir. Altprogram çağırmanın semantiği Parametreleri geç Yerel değişkenler için yığıt üzerinde yer ayır Çağıran programın çalışma statüsünü sakla (registerler, program sayacı) Yerel olmayan değişkenlere erişim sağla Kontrolü, çağrılana devret Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
4
Çağırma ve geri dönmenin semantiği…
Çık ve girçık kipindeki parametrelerin değerlerini ver (gerekiyorsa) Yığıt üzerinde yerel değişkenler için alınan yeri geri ver Çalışma statüsünü eski haline getir Kontrolü çağırana geri ver Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
5
Alt program gerçeklenmesi: tanımlar
Aktivasyon kaydı (activation record) çalışmakta olan bir altprogramın ihtiyaç duyduğu bilgilerin saklandığı yerin formatıdır Aktivayson kaydı örneği (AKÖ) (activation record instance) çalışmakta olan spesifik bir altprogram için tutulan bilgidir. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
6
Yığıt-dinamik yerel değişkenleri olan bir dil için tipik aktivasyon kaydı
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
7
Yığıt-dinamik değişkeni olan alprogramların gerçeklensmesi: aktivasyon kaydı
Aktivasyon kaydı formatı sabit, ama boyutu değişken Dinamik bağ (dynamic link) çağıranın aktivasyon kayıt örneğinin tabanını gösterir Aktivasyon kayıt örneği altprogram çağrıldığında dinamik olarak sistem yığıtı üzerinde yaratılır Ortam işaretçisi (Oİ) (environment pointer (EP)) her zaman çalışmakta olan altprogramın aktivasyon kayıt örneğinin tabanını gösterir Dinamik bağ = çağıranın ortam işaretçisi Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
8
Örnek: C fonksiyonu void sub(float total, int part) { int list[5];
float sum; … } Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
9
Özyinelemesiz örnek main calls fun1 fun1 calls fun2 fun2 calls fun3
void fun1(float r) { int s, t; ... fun2(s); } void fun2(int x) { int y; fun3(y); void fun3(int q) { void main() { float p; fun1(p); main calls fun1 fun1 calls fun2 fun2 calls fun3 Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
10
Özyinelemesiz örnek Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
11
Dinamik zincir ve göreceli adres (local offset)
Yığıt üzerindeki dinamik bağların tümüne birden dinamik zincir veya çağırma zinciri denir. Yerel değişkenler aktivasyon kaydının başından itibaren belirtilmiş göreceli adresleri aracılığı ile erişilirler. Bir yerel değişkenin göreceli adresi derleyici tarafından derleme anında belirlenebilir. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
12
Özyinelemeli bir örnek
int factorial (int n) { < if (n <= 1) return 1; else return (n * factorial(n - 1)); < } void main() { int value; value = factorial(3); < Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
13
Factorial için aktivayson kaydı
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
14
Factorial çağrılamsında yığıtın durumu
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
15
Factorial dönüşlerinde yığıtın durumu
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
16
İçiçe altprogramlar Bazı ‘C’ tabanlı olamayan statik etki alanlı dillede (ör: Pascal, Fortran 95, Ada, Python) yığıt dinamik yerel değişkenler kullanılır ve altprogramlar içiçe olabilir. Yerel olarak erişilemeyen tüm değişkenler yığıt üzerinde olan bir aktivasyon kayıt örneğinde bulunurlar. Yerel olmayan referans bulma süreci Doğru aktivasyon kayır örneğini bul Bulunan kayıt içindeki döğru adresi belirle Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
17
Statik etki alanı Statik zincir, aktivasyon kayıt örneklerini bağlayan statik linklerden oluşur Bir altprograma ait aktivasyon kayıt örneğindeki statik link, altprogramın statik babasına ait en yeni aktivasyon kayıt örneğine işaret eder. Bir aktivasyon kayıt örneğinin statik zinciri, onu tüm statik atalarınına bağlar Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
18
Statik etki alanı... Statik derinlik bir etki alanının kaç tane etki alanıın içinde olduğunu gösteren bir sayıdır. Bir yerel olmayan referansın zincir farkı (chain_offset) veya içiçelik derinliği (nesting_depth) referansa konu olan değişkenin kullanıldığı etki elanı ile tanımlandığı etki alanlarının arasındakı derinlik farkıdır. Bir değişkene referans (zincir farkı, lokal adres) olarak temsil edilebilir ( (chain_offset, local_offset) ). (lokal adres = aktivasyon kaydının başından itibaren olan göreceli adres) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
19
Örnek Ada Programı procedure Main_2 is X : Integer;
procedure Bigsub is A, B, C : Integer; procedure Sub1 is A, D : Integer; begin -- of Sub1 A := B + C; < end; -- of Sub1 procedure Sub2(X : Integer) is B, E : Integer; procedure Sub3 is C, E : Integer; begin -- of Sub3 Sub1; E := B + A: < end; -- of Sub3 begin -- of Sub2 Sub3; A := D + E; < end; -- of Sub2 } begin -- of Bigsub Sub2(7); end; -- of Bigsub begin Bigsub; end; of Main_2 } Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
20
MAIN_2 BIGSUB’ı çağırır BIGSUB SUB2’yi çağırır SUB2 SUB3’ü çağırır
Örnek ADA Programı... MAIN_2 çağırma sırası MAIN_2 BIGSUB’ı çağırır BIGSUB SUB2’yi çağırır SUB2 SUB3’ü çağırır SUB3 SUB1’i çağırır Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
21
UYARI!!!! Bir sonraki slaytda dinamik bağlar YANLIŞTIR. Doğrusu, çağıran altprogramın aktivasyon kayıt örneğinin başına işaret etmeleridir, sonuna değil. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
22
1. Pozisyondaki yığıt içeriği
Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
23
Statik zincir “bakımı”
Çağırma anında yeni bir aktivasyon kaydı örneği yaratılır Dinamik link eski ortam işaretçisidir (eski yığıt üst işaretçisi değil!) Statik bağ, statik babanın en yeni aktivasyon kayıt örneğine işaret ettirilir (statik bağın değeri, çağıranın statik zinciri takip edilerek bulunabilir) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
24
Statik zincir değerlendirmesi
Sorun: Bir değişkenin tanımlandığı yer ile kullanıldığı yerin derinlik farkları fazla ise, değişkene erişim çok zaman alır. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
25
Göstergeler (Displays)
Statik linklere alternatif Gösterge denen bir dizi, her statik derinlikteki en yeni aktivasyon kayıt örneğinin başlangıç adresini saklar Gösterge[i] = yığıt üzerindeki en yeni (en yukarıda) i statik derinlikteki aktisvasyon kayıt örneğinin adresi Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
26
Göstergeler… Statik derinliği j olan bir altprogramın yeni bir aktivasyon kayıt örneği (AKÖ) yaratıldığında, bu AKÖ’nün adresi k ise, Gösterge[j]’nin içindeki değer AKÖ içinde saklanır ve Gösterge[j]’nin değeri k’ya eşitlenir Statik derinliği j olan bir altprogram geri döndüğünde ve AKÖ’sü yığıttan atıldığında, Gösterge[j]’nin değeri AKÖ içinde saklanan değere eşitlenir. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
27
Bloklar Kullanıcı tanımlı yerel etki alanı C örneği {int temp;
temp = list [upper]; list [upper] = list [lower]; list [lower] = temp } temp değişkeninin ömrü, kontrol blok içine girdiğinde başlar Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
28
Blokların gerçeklenmesi
İki yöntem: Parametresiz altprogram gibi değerlendir Her bloğun kendi AKÖ’sü olur. Blok her çalıştırıldığında AKÖ tekrar yaratılır 2. İçinde bulunduğu altprogramın AKÖ’sünde blok değişkenleri için yer ayır Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
29
Dinamik etki alanı gerçeklenmesi
Derin erişim: dinamik zinciri kullanarak değişken ara - Zincirin uzunluğu statik olarak belirlenemez. Her AKÖ içinde değişken isimlerinin de olması gerekir Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
30
Dinamik etki alanı gerçeklenmesi…
Sığ erişim: Her değişken için bir yığıt Altprogram çağrıldığında, altprogramdaki her x değişkeni için x yığıtı üzerine bir hücre itilir Değişken erişimleri her zaman yığıt üzerindeki en üst hücreye olur Altprogram geri döndüğünde, altprogramdaki her x değişkeni için x yığıtı üzerinden bir hücre atılır Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
31
Dinamik etki alanı için sığ erişim örneği
void sub3() { int x, z; x = u + v; … } void sub2() { int w, x; void sub1() { int v, w; void main() { int v, u; Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
32
Özet Altprogram çağrılma semantiği birçok aktiviteyi gerektirir
Yığıt-dinamik yerel değişkeni olan altprogramların iki parçası var program kodu aktivasyon kaydı Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
33
Özet... Aktivasyon kayıt örneklerinde, başka şeylerin yanısıra formel parametreler ve yerel değişkenler bulunur İçiçe tanımların olduğu statik etki alanlı dillerde, statik zincirler ve göstergeler yerel olmayan değişkenlere erişimin iki ana yöntemidir. Dinamik etki alanlı dillerde, lokal olmayan değişkenlere erişimin iki yöntemi: dinamik zincir ve her değiken için ayrı yığıt. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.