Altprogramların gerçeklenmesi

Slides:



Advertisements
Benzer bir sunumlar
Fonksiyonlar.
Advertisements

Bölüm 12 ÜST DÜZEY KONULAR Dinamik Bellek Ayırma Önişlemci
Nesnelerin Özellikleri. - Üye nesneler - friend belirtesi - Nesnelerin operatörlere yüklenmesi - this yerel (lokal) değişkeni - inline tanımlı üye fonksiyonlar.
Göstericiler (Pointers)
Ders İçeriği Bağlantılı Liste İki Yönlü Bağlantılı Liste
Nesneye Dayalı Programlama
Bölüm 7 Fonksiyonlar GÖSTERGELER Gösterge Tanımı
Bölüm 2 C Dilinin Temelleri
Altprogramların Uygulanması
Bölüm 4 İşlevlerve Modüler Programlama. 1 / 8 İşlev Tanımı /* İşlev açıklama satırı */ ( ) { }
Değişken Bildirimleri
OOP4 LAB.
Soru1: kuvvet(taban,us) Şeklinde bir yinelenen fonksiyon yazın
Bölüm 10 Yapılar ve Birleşimler
Fonksiyonlar ve Alt Programlar
KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR, NESNE DİZİLERİ Yılmaz Kılıçaslan.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
NESNEYE YÖNELİK PROGRAMLAMA
DELEGATE OOP-UYG.
Erişim Denetimi, Fonksiyon
Fonksiyonlar.
Değişkenler veri tipleri operatörler
While Döngüsü Tekrarlama deyimidir. Bir küme ya da deyim while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden.
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
Metotlar.
FONKSİYONLAR.
METOTLAR.
Özyineleme(Recursion)
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Fonksiyonlar –Programı modüler hale getirir –Yerel değişkenler,
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Altprogramlar(Subprograms)
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ VE SINIFLARIN DİĞER ÖZELLİKLERİ Yılmaz Kılıçaslan.
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Procedure ve Function PASCAL’da
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Algoritmalar ve Programlama I Ders 10: ALTPROGRAM KAVRAMI ve FONKSİYON
İsimler ve Bağlanma Names and Bindings
Bölüm 8: Altprogramlar.
Bölüm 5: Adlar, Bağlama, Tip Kontrolü ve Kapsamlar
Bölüm 9: Alt Programları Uygulamak
Fonksiyonlar.
1 Değişken alanları Geçici değişkenler Birleşik ifadeler(bloklar) ve değişkenler Değişken Depolama Süresi ve Alanı –Local ve global değişkenler –Static.
Programlama Dillerinin Prensipleri
VERİ ve BELLEK & DEĞİŞKENLERİN SAKLANMASI Asst.Prof.Dr.Misket YEKTAY Gizem AYIK.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
Bağlama ve Kapsam Kavramları
C dili kullanıcıya kendi ihtiyacı olan bir fonksiyonu yazma imkanı vermiştir. Bir sayının faktöriyelini almaya ihtiyaç duyduğumuzu ve aynı zamanda asal.
Fonksiyonlar ve Diziler
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
C Programlama Dili Bilgisayar Mühendisliği.
Bölüm 7 Fonksiyonlar GÖSTERGELER Gösterge Tanımı
Programlama Dillerinin Temel Elemanları
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H11
Bölüm 2 C Dilinin Temelleri
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
Excel’de VBA Programlama (Visual Basic Application)
Bölüm 9 Altprogramlar.
Bölüm 6 Veri Tipleri.
İsimler, Bağlamalar, Tip Kontrolü, Etki Alanları
Sentaks ve semantik tarifi
Bölüm 7 İfadeler ve atamalar.
BLM-111 PROGRAMLAMA DİLLERİ I Ders-2 Değişken Kavramı ve Temel Operatörler Yrd. Doç. Dr. Ümit ATİLA
Bölüm 6: Kullanıcı Tanımlı Fonksiyonlar I
NİŞANTAŞI ÜNİVERSİTESİ
Bölüm 2 C Dilinin Temelleri
Sunum transkripti:

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

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Ü

Ç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Ü

Ç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Ü

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Ü

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Ü

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Ü

Örnek: C fonksiyonu void sub(float total, int part) { int list[5]; float sum; … } Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Ö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Ü

Özyinelemesiz örnek Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

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Ü

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

Factorial için aktivayson kaydı Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Factorial çağrılamsında yığıtın durumu Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Factorial dönüşlerinde yığıtın durumu Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

İç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Ü

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Ü

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Ü

Ö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 begin Bigsub; end; of Main_2 } Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

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Ü

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Ü

1. Pozisyondaki yığıt içeriği Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

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Ü

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Ü

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Ü

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Ü

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Ü

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Ü

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Ü

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Ü

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Ü

Ö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Ü

Ö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Ü