Algorithms & Analysis

Download Report

Transcript Algorithms & Analysis

Procedures

Procedure kullanimi
– Kodu moduler hale getirir, sonraki
asamalarda programda degisiklik
yapilmasini kolaylastirir
– Kod un paralel olarak birden fazla kisi
tarafindan yazilmasina olanak saglar

Procedure ler assembly language
level da nasil gerceklenir
Bilgisayar Organizasyonu
1
Procedure

Procedure cagrimi ve procedure dan
donusun asamalari
– Save return address (geri donus
adresini kaydet)
– Procedure call
– Execute procedure
– Return
Bilgisayar Organizasyonu
2
Procedure Cagrimi
.text
.
.
call:
jal proc
.
.
done
proc:
procedure
body
# procedure code here
.
.
jr $31
Bilgisayar Organizasyonu
3
jal ve jr instruction lari

jal procedure_label
– jal instruction i izleyen instruction in
addresini $31 ($ra) e yazar
– Label i procedure_label olan instruction
a branch eder

jr $31
– $31 nin icerigi PC (program Counter) a
yazilir ($31 nin isaret ettigi instruction
a jump edilir)
Bilgisayar Organizasyonu
4
Dynamic Storage Allocation
Geri donus adresini bir register da
tutmak gecerli bir yontem eger nested
procedure cagrimi yoksa
 Nested Procedure Call (NPC)

– Procedure icinden procedure cagrimi

Eger NPC var ise
– $31 e yazilan onceki deger uzerine tekrar
yazilir (overwrite)
– Geri donus adresinin kaybolmasina sebep olur
Bilgisayar Organizasyonu
5
Dynamic Storage Allocation
Geri donus adresleri stack de saklanir
 NPC a izin verir
 Stack dinamik olarak genisler (procedure
cagrildiginda), dinamik olarak kuculur
(procedure dan geri donuldugunde)
 Dolayisiyle stack in dinamik olarak tahsis
edildigi soylenir (dynamically allocated)

Bilgisayar Organizasyonu
6
Stack Tahsisi
Bir cok bilgisayar stack i programin calismasi
esnasinda olusturulan environment (runtime
environment) in bir parcasi olarak gercekler. Bu
stack e system stack denir.
 Stack cok yaygin olarak kullanildigindan bazi
makinalar stack e efficient (hizli) erisim icin
bazi destektekler saglar
 MIPS islemcisi

– Stacke itme yapildiginda (push) stack kucuk bellek
adresine dogru genisler
– Stack in baslangicinin (bottom) adresini tutan bir
register a sahip
– $29 ($sp) : stack pointer (stack in uzerinde ilk bos
olan alanin adresini tutar)
Bilgisayar Organizasyonu
7
push ve pop islemleri
push islemi:
sw $8, 0($sp)
add $sp, $sp, -4
pop islemi:
add $sp, $sp, 4
lw $8, 0($sp)
veya
veya
add $sp, $sp, -4
sw $8, 4($sp)
lw $8, 4($sp)
add $sp, $sp, 4
Bilgisayar Organizasyonu
8
Power function
(recursive olarak)
.text
.
li
move
jal
.
power: sw
add
if: add
blez
jal
endif: mul
add
lw
return: jr
$18,1
$19, $17
power
# $18 will contain the result
# $19 is a counter, $17 contains the power
$31, 0($sp)
$sp, $sp, -4
$19, $19, -1
$19, endif
power
$18, $18, $16
$sp, $sp, 4
# save return address
# by pushing it on the stack
# recursive procedure call
# $16 contains base
# restore return address by pooping it off the
# stack
$31, 0($sp)
$31
Bilgisayar Organizasyonu
9
Activation Records

Activation Record (stack frame)
– Bir procedure cagrildiginda yeni bir
environment olusturulur
• Local degiskenler
• Hesaplamada kullanilan ve ara degerler tutan
variable lar
– Return address gibi yeni environment daki
variable lar da dynamic
• Degerleri procedure nin yasam suresi (lifetime)
boyunca korunmali (fakat procedure sonlandiginda
onlar da sonlanmali)
– Her bir procedure cagriminda, yeni olusan
environment le ilgili bilgiler tutulmali
• Bu bilgiler stack te saklanir ve activation record
(stack frame) olarak adlandirilirlar
Bilgisayar Organizasyonu
10
Activation Records



Activation record bir procedure hakkindaki
butun bilgileri icerir.
NPC (nested procedure call) nin dogru olarak
gerceklenmesine yetecek kadar bilgi icerir
Activation record normal bir word un stacke
push edilmesi ve stackten pop edilmesi gibi stack
e push edilir veya stackten pop edilir
– Tek farki activation record un boyu word un boyundan
daha buyuktur
– Activation record un stacke push edilmesi (procedure
cagrimi esnasinda) ve stackten pop edilmesi (procedure
dan donuste), stack pointerinn degeri activation
recordun boyuna uygun olarak degistirilmeli.
Bilgisayar Organizasyonu
11
Parameter Passing
(parametre aktarimi)

Procedure alan tahsisi (activation record
icin) bir dizi push islemleriyle saglanir
– Her bir parametrenin stack e push edilmesi
– Return address in stack e push edilmesi
Calling procedure parametreleri stack e
push eder
 Return address ini ise called procedure
stack e push eder

Bilgisayar Organizasyonu
12
Parametre gecisi
(a)
(b)
sp
sp
(c)
sp
return address
parameter3
parameter2
parameter 1
parameter3
parameter2
parameter 1
(a) Parametreleri push etmeden once
(b)parametreler push edilmis, fakat
procedure call yapilmamis
(c) Procedure call ve return address in
saklanmasi
Bilgisayar Organizasyonu
13
Parametre aktarimi
sw
add
sw
add
sw
add
jal
$8, 0($sp)
$sp, $sp, -4
$12, 0($sp)
$sp, $sp, -4
$6, 0($sp)
$sp, $sp, -4
proc
Eger activation
record tek varlik
olarak dusunulurse
parameter1->$8
parameter2->$12
parameter3->$6
add
sw
sw
sw
jal
.
.
proc: sw
.
.
.
proc: sw $31, 0($sp)
add $sp, $sp, -4
.
Bilgisayar Organizasyonu
$sp, $sp, -16
$8, 16($sp)
$12, 12($sp)
$6, 8($sp)
proc
$31, 4($sp)
14
Eger activation record tek bir
varlik olarak dusunulurse
add
sw
add
sw
add
jal
$sp, $sp, -4
$12, 0($sp)
$sp, $sp, -4
$6, 0($sp)
$sp, $sp, -4
proc
.
.
proc: sw $31, 0($sp)
add $sp, $sp, -4
.
Bilgisayar Organizasyonu
15
Calling procedure icinde
parameter lara erisim

Load/store
architecture da
stack deki
parameter lar
erisim icin once
register lara
yuklenmeli
lw
lw
lw
$4, 16($sp)
$5, 12($sp)
$6, 8($sp)
Ikinci cozum:
parameter lari
direkt olarak
register uzerinden
aktarmak
 SPARC ve
Berkeley RISC de
register windows
kavrami var

Bilgisayar Organizasyonu
16
Procedure dan deger
geri cevirme
Procedure dan deger geri dondurmek
parameter gecisine benzer. Fark bilgi
akisi cagrilan procedure dan cagiran
procedur a dogru
 Nested procedure larda deger stack
uzerinden geri dondurulur
 Nested olmayan procedure larda hiz
acisindan deger bir register la geri
dondurulebilir

Bilgisayar Organizasyonu
17
Saving registers



Bir procedure local variable lar, parameter lar
ve gecici hesaplamalar icin cok sayida register a
ihtiyac duyabilir
Calling procedure nin kullanmakta oldugu bir
register stack e itilip procedure dan donuste
tekrar stackten yuklenmedikce kullanilamaz
Dolayisiyle bir register hem calling procedure ve
hem de called procedure tarafindan
kullaniliyorsa, bu ilgili register activation
record un bir parcasi olmak zorunda (procedure
cagrimi esnasinda stack e itilmeli, ve procedure
den donuste tekrar original degeri stackten geri
alinmali)
Bilgisayar Organizasyonu
18
Register lar ne
zaman save edilmeli?
Called procedure register lari save
edebilir
 Calling procedure register lari save
edebilir

Bilgisayar Organizasyonu
19
Called procedure tarafindan
register save i
jal
.
procedure
.
.
procedure:
sw
add
$31, 0($sp)
$sp, $sp, -4
add
sw
sw
sw
# push return address
$sp, $sp, -12
$8, 12($sp)
$9, 8($sp)
$10, 4($sp)
.
# procedure’s code here
.
# push register values and
# update stack pointer
lw
lw
lw
add
$10, 4($sp)
$9, 8($sp)
$8, 12($sp)
$sp, $sp, 4
# restore register
# values and
# update stack pointer
add
lw
jr
$sp, $sp, 4
$31, 0($sp)
$31
# restore return address
Avantaj: Sadece
procedure tarafindan
kullanilan register save
edilir
Dezavantaj: bazi registerlar
gereksiz yere save edilebilir
# return
Bilgisayar Organizasyonu
20
Calling procedure tarafindan
register save i
add
sw
sw
sw
jal
lw
lw
lw
add
Procedure:
sw
add
.
.
.
.
$sp, $sp, -12
$8, 12($sp)
$9, 8($sp)
$10, 4($sp)
procedure
$10, 4($sp)
$9, 8($sp)
$8, 12($sp)
$sp, $sp, 12
.
.
$31, 0($sp)
$sp, $sp, -4
# push register values
# update stack pointer
Avantaj: Sadece calling
procedure da kullanilan
register lar save edilir
Dezavantaj: bazi registerlar
gereksiz yere save edilebilir
# restore register values and
# update stack pointer
# push return address
# procedure’s code here
add
lw
jr
$sp, $sp, 4
$31, 0($sp)
$31
# restore return address
# return
Bilgisayar Organizasyonu
21