• Sonuç bulunamadı

Bölüm 10. Altprogramların gerçeklenmesi ISBN

N/A
N/A
Protected

Academic year: 2022

Share "Bölüm 10. Altprogramların gerçeklenmesi ISBN"

Copied!
33
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

Bölüm 10

Altprogramların

gerçeklenmesi

(2)

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-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

(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

(4)

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-4

Çağırma ve geri dönmenin semantiği…

• 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

(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.

(6)

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-6

Yığıt-dinamik yerel değişkenleri olan bir

dil için tipik aktivasyon kaydı

(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

(8)

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-8

Örnek: C fonksiyonu

void sub(float total, int part) {

int list[5];

float sum;

}

(9)

Özyinelemesiz örnek

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

(10)

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-10

Özyinelemesiz örnek

(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.

(12)

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-12

Özyinelemeli bir örnek

int factorial (int n) {

<---1 if (n <= 1) return 1;

else return (n * factorial(n - 1));

<---2 }

void main() { int value;

value = factorial(3);

<---3 }

(13)

Factorial için aktivayson kaydı

(14)

Factorial çağrılamsında yığıtın durumu

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-14

(15)

Factorial dönüşlerinde yığıtın durumu

(16)

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-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

1. Doğru aktivasyon kayır örneğini bul

2. Bulunan kayıt içindeki döğru adresi belirle

(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

(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Ü 1-18

(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; <---1 end; -- of Sub1

procedure Sub2(X : Integer) is B, E : Integer;

procedure Sub3 is C, E : Integer;

begin -- of Sub3 Sub1;

E := B + A: <---2 end; -- of Sub3

begin -- of Sub2 Sub3;

A := D + E; <---3 end; -- of Sub2 }

begin -- of Bigsub Sub2(7);

end; -- of Bigsub

(20)

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-20

Ö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

(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.

(22)

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-22

1. Pozisyondaki

yığıt içeriği

(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)

(24)

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-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.

(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

(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Ü 1-26

(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

(28)

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-28

Blokların gerçeklenmesi

• İki yöntem:

1. 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

(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

(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Ü 1-30

(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;

}

(32)

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-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ı

(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.

Referanslar

Benzer Belgeler

Yatay kesit verisi ile zaman serisi verisinin arasında hemen göze çarpmayan, anlaşılması daha zor bir fark vardır.... ZAMAN SERİSİ REGRESYON

Bunlardan en önemlisi doğal logaritmadır: etki yüzdeleri sabit olan zaman serisi regresyonları çalışmalarda sıklıkla karşımıza çıkmaktadır.... TRENDLER

1 Temmuz Devlet memurları aylıkları- nın tevhid ve teadülü hak- kındaki kanuna ek 3888 sa- yılı kanunun üçüncü mad- desine iki fıkra eklenmesi hakkında 4069 sayılı kanun

In this project, Rainbow trout’s (Oncorynchus mykiss, Walbaum 1792) differences on feeding and growing evaluations have been observed, by this way, preferable fish size

In this paper, we explained about different characteristics, types, consensus mechanisms, and challenges of blockchain along with various major attacks like DDoS

Algoritmada olasılık değerleri hesaplandıktan sonra bu değerler kullanılarak rulet tekerleğine göre seçim işleminde her bir kaynak için [0.1] aralığında rastgele sayı

Kararda, Mahkemenin belirlediği husus, yasa koyucunun yaptığı düzenleme ile hak arama özgürlüğünün norm alanını ve doğasına ilişkin nesnel sınırları belirlemiş

 Mesleki görüşme müracaatçının ve sosyal hizmet uzmanının karşılıklı olarak duygularını harekete geçiren bir süreçtir..  Yardım sürecinde müracaatçının